启动时等待usb连接

This commit is contained in:
zqm
2026-04-09 08:55:43 +08:00
parent 708a7c8bf0
commit cd7d033e3e
45 changed files with 7843 additions and 11716 deletions

View File

@@ -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);
}