// // Created by awalol on 2026/5/4. // #include "cmd.h" #include #include #include #include "bt.h" #include "config.h" #include "device/usbd.h" #include "pico/time.h" bool is_pico_cmd(uint8_t report_id) { if (report_id == 0xf6 || report_id == 0xf7 || report_id == 0xf8 || report_id == 0xf9 ) { return true; } return false; } uint16_t pico_cmd_get(uint8_t report_id, uint8_t *buffer, uint16_t reqlen) { if (report_id == 0xf7) { printf("[HID] Receive 0xf7 getting config\n"); if (sizeof(Config_body) > reqlen) { printf("[Config] Warning: Config_body overflow\n"); } const auto len = std::min(sizeof(Config_body),static_cast(reqlen)); memcpy(buffer,&get_config(),len); return len; } if (report_id == 0xf8) { printf("[HID] Receive 0xf8 getting firmware version\n"); const auto len = std::min(strlen(PICO_PROGRAM_VERSION_STRING), static_cast(reqlen)); memcpy(buffer, PICO_PROGRAM_VERSION_STRING, len); return len; } if (report_id == 0xf9) { // [-128,0] int8_t rssi = 0; bt_get_signal_strength(&rssi); if (reqlen == 0) { return 0; } buffer[0] = rssi; #if ENABLE_VERBOSE printf("[HID] 0xf9 RSSI=%d raw=0x%02X\n", rssi, buffer[0]); #endif return 1; } return 0; } void pico_cmd_set(uint8_t report_id, uint8_t const *buffer, uint16_t bufsize) { (void) report_id; if (bufsize == 0) { return; } // 0x01 update config in variable // 0x02 write config to flash // 0x03 reconnect tinyusb device; if (buffer[0] == 0x01) { printf("[CMD] Enter config set func\n"); set_config(buffer + 1, bufsize - 1); } if (buffer[0] == 0x02) { printf("[CMD] Enter config save func\n"); config_save(); } if (buffer[0] == 0x03) { printf("[CMD] Enter tud reconnect func\n"); tud_disconnect(); sleep_ms(150); tud_connect(); } }