Files
DS5Dongle-OLED-Edition-stea…/src/cmd.cpp
T

83 lines
2.1 KiB
C++

//
// Created by awalol on 2026/5/4.
//
#include "cmd.h"
#include <algorithm>
#include <cstdio>
#include <cstring>
#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<size_t>(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<size_t>(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();
}
}