启动时等待usb连接
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
set(CMAKE_C_COMPILER gcc)
|
||||
set(CMAKE_CXX_COMPILER g++)
|
||||
# rust_app 组件的 CMake 配置
|
||||
# 注意:rust_app_wrapper.c 已经在 main 组件中编译
|
||||
# 这里只提供 Rust 静态库的链接
|
||||
|
||||
idf_component_register(
|
||||
SRCS "rust_app_wrapper.c"
|
||||
INCLUDE_DIRS "."
|
||||
)
|
||||
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE "-L${CMAKE_CURRENT_LIST_DIR} -lrust_app")
|
||||
# 链接 Rust 静态库
|
||||
set(RUST_LIB_PATH "${COMPONENT_DIR}/target/xtensa-esp32s3-none-elf/release-debug/librust_app.a")
|
||||
message(STATUS "Rust library path: ${RUST_LIB_PATH}")
|
||||
|
||||
add_prebuilt_library(rust_app_lib "${RUST_LIB_PATH}")
|
||||
target_link_libraries(${COMPONENT_LIB} INTERFACE rust_app_lib)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "esp_log.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_task_wdt.h"
|
||||
|
||||
static const char* TAG = "RustApp";
|
||||
|
||||
@@ -9,14 +10,39 @@ extern void rust_app_main();
|
||||
|
||||
void rust_app_task(void* pvParameters) {
|
||||
ESP_LOGI(TAG, "Rust application task started");
|
||||
|
||||
// 订阅看门狗,防止任务被复位
|
||||
ESP_ERROR_CHECK(esp_task_wdt_add(NULL));
|
||||
|
||||
rust_app_main();
|
||||
|
||||
// 如果 rust_app_main 返回,记录错误并进入无限循环
|
||||
ESP_LOGE(TAG, "Rust application task unexpectedly returned!");
|
||||
while (1) {
|
||||
vTaskDelay(1000 / portTICK_PERIOD_MS);
|
||||
}
|
||||
}
|
||||
|
||||
static TaskHandle_t rust_app_task_handle = NULL;
|
||||
|
||||
void rust_app_wrapper_init() {
|
||||
// 使用静态变量确保函数只被调用一次
|
||||
static bool initialized = false;
|
||||
if (initialized) {
|
||||
ESP_LOGI(TAG, "Rust application already initialized");
|
||||
return;
|
||||
}
|
||||
initialized = true;
|
||||
|
||||
ESP_LOGI(TAG, "Initializing Rust application...");
|
||||
|
||||
// 创建一个新的任务来运行 Rust 应用
|
||||
xTaskCreate(rust_app_task, "rust_app_task", 4096, NULL, 5, NULL);
|
||||
// 增加栈大小到 16384 (16KB) 以防止栈溢出
|
||||
BaseType_t result = xTaskCreate(rust_app_task, "rust_app_task", 16384, NULL, 5, &rust_app_task_handle);
|
||||
|
||||
ESP_LOGI(TAG, "Rust application task created");
|
||||
if (result != pdPASS) {
|
||||
ESP_LOGE(TAG, "Failed to create Rust application task!");
|
||||
} else {
|
||||
ESP_LOGI(TAG, "Rust application task created successfully");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ extern "C" {
|
||||
fn rust_send_mouse_report(report_id: u8, buttons: u8, x: i8, y: i8, wheel: i8, pan: i8);
|
||||
fn rust_vTaskDelay(xTicksToDelay: u32);
|
||||
fn rust_esp_log_i(tag: *const u8, format: *const u8);
|
||||
fn esp_task_wdt_reset();
|
||||
}
|
||||
|
||||
/// 日志函数
|
||||
@@ -45,27 +46,38 @@ fn log_info(message: &'static str) {
|
||||
|
||||
#[no_mangle]
|
||||
extern "C" fn rust_app_main() {
|
||||
// 初始化代码
|
||||
// 初始化代码 - 添加延迟确保系统稳定
|
||||
unsafe {
|
||||
rust_vTaskDelay(100); // 等待 1 秒让系统稳定
|
||||
}
|
||||
|
||||
log_info("========================");
|
||||
log_info("Rust app started");
|
||||
log_info("========================");
|
||||
|
||||
// 等待 USB 挂载成功
|
||||
wait_usb_mounted();
|
||||
|
||||
let mut tick_count = 0;
|
||||
loop {
|
||||
// 每 5 秒 (500 ticks) 按下一个随机键
|
||||
// 每 5 秒 (500 ticks @ 10ms/tick) 按下一个随机键
|
||||
if tick_count % 500 == 0 {
|
||||
log_info("Sending random key...");
|
||||
send_random_key();
|
||||
}
|
||||
|
||||
// 每 6 秒 (600 ticks) 随机移动一下鼠标
|
||||
// 每 6 秒 (600 ticks @ 10ms/tick) 随机移动一下鼠标
|
||||
if tick_count % 600 == 0 {
|
||||
log_info("Sending random mouse move...");
|
||||
send_random_mouse_move();
|
||||
}
|
||||
|
||||
// 等待 10ms (1 tick)
|
||||
// 喂看门狗
|
||||
unsafe {
|
||||
esp_task_wdt_reset();
|
||||
}
|
||||
|
||||
// 等待 1 tick (10ms with default 100Hz config)
|
||||
unsafe {
|
||||
rust_vTaskDelay(1);
|
||||
}
|
||||
@@ -75,12 +87,10 @@ extern "C" fn rust_app_main() {
|
||||
|
||||
/// 等待 USB 挂载成功
|
||||
fn wait_usb_mounted() {
|
||||
// 等待 USB 设备挂载,最多等待 3 秒
|
||||
const USB_MOUNT_TIMEOUT_TICKS: u32 = 300; // 300 ticks = 3 seconds
|
||||
let mut elapsed_ticks = 0;
|
||||
|
||||
log_info("Waiting for USB to mount...");
|
||||
log_info("Please connect USB OTG cable to host");
|
||||
|
||||
let mut retry_count = 0;
|
||||
loop {
|
||||
let mounted = unsafe {
|
||||
rust_is_usb_mounted()
|
||||
@@ -91,25 +101,23 @@ fn wait_usb_mounted() {
|
||||
break;
|
||||
}
|
||||
|
||||
// 检查是否超时
|
||||
if elapsed_ticks >= USB_MOUNT_TIMEOUT_TICKS {
|
||||
log_info("USB mount timeout!");
|
||||
// 使用 panic! 而不是 unreachable_unchecked
|
||||
panic!("USB init failed");
|
||||
retry_count += 1;
|
||||
if retry_count % 50 == 0 { // 每 5 秒输出一次
|
||||
log_info("Still waiting for USB connection...");
|
||||
}
|
||||
|
||||
// 等待 10ms (1 tick)
|
||||
// 喂看门狗,防止复位
|
||||
unsafe {
|
||||
rust_vTaskDelay(1);
|
||||
esp_task_wdt_reset();
|
||||
}
|
||||
|
||||
// 等待 100ms (10 ticks @ 10ms/tick)
|
||||
unsafe {
|
||||
rust_vTaskDelay(10);
|
||||
}
|
||||
elapsed_ticks += 1;
|
||||
}
|
||||
}
|
||||
|
||||
#[export_name = "rust_usb_callback"]
|
||||
pub unsafe extern "C" fn usb_callback(_event: u32) {
|
||||
}
|
||||
|
||||
/// 发送 A-Z 随机键的按键事件
|
||||
fn send_random_key() {
|
||||
// 检查 USB 是否仍然挂载
|
||||
@@ -133,8 +141,8 @@ fn send_random_key() {
|
||||
rust_send_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode.as_ptr());
|
||||
}
|
||||
|
||||
// 等待 50ms (50ms / 10ms per tick = 5 ticks)
|
||||
log_info("Waiting for 50ms...");
|
||||
// 等待 50ms (5 ticks @ 10ms/tick)
|
||||
log_info("Waiting 50ms...");
|
||||
unsafe {
|
||||
rust_vTaskDelay(5);
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
5ba9121c4d424287
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":3242003800445299344,"features":"[]","declared_features":"[\"alloc\", \"defmt\", \"proc-macro-crate\", \"serde\", \"serde2\", \"std\"]","target":1807128325554185628,"profile":15418805393629537074,"path":14337773933917167578,"deps":[[17986376101325384488,"enumset_derive",false,17454149073838492720]],"local":[{"CheckDepInfo":{"dep_info":"release-debug\\.fingerprint\\enumset-16c786c7be4dcf6c\\dep-lib-enumset","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
14e8ace81c3bdd31
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":3242003800445299344,"features":"[\"build\"]","declared_features":"[\"build\", \"tui\"]","target":13174376735924574426,"profile":2225463790103693989,"path":3946995220284316586,"deps":[[826480799056633171,"document_features",false,7169950998350490057],[9614479274285663593,"serde_yaml",false,18371109490497812336],[13548984313718623784,"serde",false,18268308260177572816],[13886999610336354978,"esp_metadata_generated",false,10879114223408353606],[14342052867857712941,"somni_expr",false,4269927958521062561]],"local":[{"CheckDepInfo":{"dep_info":"release-debug\\.fingerprint\\esp-config-c58319ddc55d0db2\\dep-lib-esp_config","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0}
|
||||
@@ -0,0 +1,14 @@
|
||||
D:\Projects\trunk\JoyD\ESP32\my_usb_project\rust_app\target\release-debug\deps\enumset-16c786c7be4dcf6c.d: D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\lib.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\macros.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\derive.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\mod.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\array.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\primitive.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\set.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\traits.rs
|
||||
|
||||
D:\Projects\trunk\JoyD\ESP32\my_usb_project\rust_app\target\release-debug\deps\libenumset-16c786c7be4dcf6c.rlib: D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\lib.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\macros.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\derive.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\mod.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\array.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\primitive.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\set.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\traits.rs
|
||||
|
||||
D:\Projects\trunk\JoyD\ESP32\my_usb_project\rust_app\target\release-debug\deps\libenumset-16c786c7be4dcf6c.rmeta: D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\lib.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\macros.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\derive.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\mod.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\array.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\primitive.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\set.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\traits.rs
|
||||
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\lib.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\macros.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\derive.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\mod.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\array.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\repr\primitive.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\set.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\enumset-1.1.10\src\traits.rs:
|
||||
@@ -0,0 +1,12 @@
|
||||
D:\Projects\trunk\JoyD\ESP32\my_usb_project\rust_app\target\release-debug\deps\esp_config-c58319ddc55d0db2.d: D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\lib.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\mod.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\markdown.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\validator.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\value.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\../README.md
|
||||
|
||||
D:\Projects\trunk\JoyD\ESP32\my_usb_project\rust_app\target\release-debug\deps\libesp_config-c58319ddc55d0db2.rlib: D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\lib.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\mod.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\markdown.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\validator.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\value.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\../README.md
|
||||
|
||||
D:\Projects\trunk\JoyD\ESP32\my_usb_project\rust_app\target\release-debug\deps\libesp_config-c58319ddc55d0db2.rmeta: D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\lib.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\mod.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\markdown.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\validator.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\value.rs D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\../README.md
|
||||
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\lib.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\mod.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\markdown.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\validator.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\generate\value.rs:
|
||||
D:\DiskC\ProgramData\Cargo\registry\src\index.crates.io-1949cf8c6b5b557f\esp-config-0.6.1\src\../README.md:
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user