feat: config manager

This commit is contained in:
awalol
2026-05-05 01:17:15 +08:00
parent 572d017ec5
commit fb8624b61b
9 changed files with 263 additions and 15 deletions
+60
View File
@@ -0,0 +1,60 @@
//
// Created by awalol on 2026/5/4.
//
#include "cmd.h"
#include <algorithm>
#include <cstdio>
#include <cstring>
#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
) {
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;
}
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(1000);
tud_connect();
}
}