From b197f0bfa7e50f1f454b03acdc46e246d6273da5 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Mon, 6 Apr 2026 17:24:34 +0900 Subject: [PATCH] Extract picoboot and info handlers into lib/handlers --- firmware/CMakeLists.txt | 1 + firmware/firmware.cpp | 20 ++++---------------- firmware/include/handlers.h | 6 ++++++ firmware/lib/handlers.cpp | 22 ++++++++++++++++++++++ firmware/test.cpp | 20 ++++---------------- 5 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 firmware/include/handlers.h create mode 100644 firmware/lib/handlers.cpp diff --git a/firmware/CMakeLists.txt b/firmware/CMakeLists.txt index f0adbf1..c5a2398 100644 --- a/firmware/CMakeLists.txt +++ b/firmware/CMakeLists.txt @@ -10,6 +10,7 @@ set(CMAKE_CXX_STANDARD 23) pico_sdk_init() set(LIB_SOURCES + lib/handlers.cpp lib/net.cpp lib/tusb_config.cpp w6300/w6300.cpp diff --git a/firmware/firmware.cpp b/firmware/firmware.cpp index 81be4dc..800b4dd 100644 --- a/firmware/firmware.cpp +++ b/firmware/firmware.cpp @@ -1,12 +1,10 @@ #include "pico/stdlib.h" -#include "pico/bootrom.h" -#include "pico/unique_id.h" #include "tusb.h" #include "wire.h" #include "usb_cdc.h" #include "timer_queue.h" +#include "handlers.h" #include "net.h" -#include "w6300.h" static usb_cdc usb; static timer_queue timers; @@ -40,22 +38,12 @@ int main() { switch (msg->type_id) { case RequestPICOBOOT::ext_id: - usb.send(encode_response(msg->message_id, ResponsePICOBOOT{})); - sleep_ms(100); - reset_usb_boot(0, 1); + handle_picoboot(usb, msg->message_id); break; - case RequestInfo::ext_id: { - ResponseInfo resp; - pico_unique_board_id_t uid; - pico_get_unique_board_id(&uid); - std::copy(uid.id, uid.id + 8, resp.board_id.begin()); - auto ninfo = w6300::get_net_info(); - resp.mac = ninfo.mac; - resp.link_local = ninfo.lla; - usb.send(encode_response(msg->message_id, resp)); + case RequestInfo::ext_id: + handle_info(usb, msg->message_id); break; } - } } __wfi(); diff --git a/firmware/include/handlers.h b/firmware/include/handlers.h new file mode 100644 index 0000000..c9e0a39 --- /dev/null +++ b/firmware/include/handlers.h @@ -0,0 +1,6 @@ +#pragma once +#include "wire.h" +#include "usb_cdc.h" + +void handle_picoboot(usb_cdc& usb, uint32_t message_id); +void handle_info(usb_cdc& usb, uint32_t message_id); diff --git a/firmware/lib/handlers.cpp b/firmware/lib/handlers.cpp new file mode 100644 index 0000000..7042da1 --- /dev/null +++ b/firmware/lib/handlers.cpp @@ -0,0 +1,22 @@ +#include "handlers.h" +#include "pico/stdlib.h" +#include "pico/bootrom.h" +#include "pico/unique_id.h" +#include "w6300.h" + +void handle_picoboot(usb_cdc& usb, uint32_t message_id) { + usb.send(encode_response(message_id, ResponsePICOBOOT{})); + sleep_ms(100); + reset_usb_boot(0, 1); +} + +void handle_info(usb_cdc& usb, uint32_t message_id) { + ResponseInfo resp; + pico_unique_board_id_t uid; + pico_get_unique_board_id(&uid); + std::copy(uid.id, uid.id + 8, resp.board_id.begin()); + auto ninfo = w6300::get_net_info(); + resp.mac = ninfo.mac; + resp.link_local = ninfo.lla; + usb.send(encode_response(message_id, resp)); +} diff --git a/firmware/test.cpp b/firmware/test.cpp index 71799a2..ce064d0 100644 --- a/firmware/test.cpp +++ b/firmware/test.cpp @@ -1,11 +1,9 @@ #include "pico/stdlib.h" -#include "pico/bootrom.h" -#include "pico/unique_id.h" #include "tusb.h" #include "wire.h" #include "usb_cdc.h" +#include "handlers.h" #include "net.h" -#include "w6300.h" static usb_cdc usb; @@ -36,22 +34,12 @@ int main() { switch (msg->type_id) { case RequestPICOBOOT::ext_id: - usb.send(encode_response(msg->message_id, ResponsePICOBOOT{})); - sleep_ms(100); - reset_usb_boot(0, 1); + handle_picoboot(usb, msg->message_id); break; - case RequestInfo::ext_id: { - ResponseInfo resp; - pico_unique_board_id_t uid; - pico_get_unique_board_id(&uid); - std::copy(uid.id, uid.id + 8, resp.board_id.begin()); - auto ninfo = w6300::get_net_info(); - resp.mac = ninfo.mac; - resp.link_local = ninfo.lla; - usb.send(encode_response(msg->message_id, resp)); + case RequestInfo::ext_id: + handle_info(usb, msg->message_id); break; } - } } __wfi();