From 2e2e677b0a51dd0e5a36f65619ebceb5ce37a4f9 Mon Sep 17 00:00:00 2001 From: kelsey hudson Date: Wed, 27 Aug 2025 00:37:16 -0700 Subject: [PATCH 1/3] Ikoka Stick: Board IDs, LED behavior Updates the manufacturer identifier with the EBYTE module. Makes the LED behave properly. Turns the bright blue LED off after the first time you transmit anything via LoRa. --- variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h | 10 +++++++++- variants/ikoka_stick_nrf/platformio.ini | 3 +++ variants/ikoka_stick_nrf/variant.h | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h b/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h index c66f4827..08061c23 100644 --- a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h +++ b/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h @@ -16,9 +16,17 @@ public: #if defined(P_LORA_TX_LED) void onBeforeTransmit() override { digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED on + #if defined(LED_BLUE) + // turn off that annoying blue LED before transmitting + digitalWrite(LED_BLUE, HIGH); + #endif } void onAfterTransmit() override { digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED off + #if defined(LED_BLUE) + // do it after transmitting too, just in case + digitalWrite(LED_BLUE, HIGH); + #endif } #endif @@ -39,7 +47,7 @@ public: } const char* getManufacturerName() const override { - return "Ikoka Stick (Xiao-nrf52)"; + return MANUFACTURER_STRING; } void reboot() override { diff --git a/variants/ikoka_stick_nrf/platformio.ini b/variants/ikoka_stick_nrf/platformio.ini index 6e6ae101..16bc1253 100644 --- a/variants/ikoka_stick_nrf/platformio.ini +++ b/variants/ikoka_stick_nrf/platformio.ini @@ -61,6 +61,7 @@ extends = ikoka_stick_nrf_baseboard ; No PA in this model, full 22dBm build_flags = ${ikoka_stick_nrf_baseboard.build_flags} + -D MANUFACTURER_STRING='"Ikoka Stick-E22-22dBm (Xiao_nrf52)"' -D LORA_TX_POWER=22 build_src_filter = ${nrf52840_xiao.build_src_filter} + @@ -75,6 +76,7 @@ extends = ikoka_stick_nrf_baseboard ; cause distortion in the PA output. 20dBm in -> 30dBm out build_flags = ${ikoka_stick_nrf_baseboard.build_flags} + -D MANUFACTURER_STRING='"Ikoka Stick-E22-30dBm (Xiao_nrf52)"' -D LORA_TX_POWER=20 build_src_filter = ${nrf52840_xiao.build_src_filter} + @@ -89,6 +91,7 @@ extends = ikoka_stick_nrf_baseboard ; to the rf amplifier frontend. 9dBm in -> 33dBm out build_flags = ${ikoka_stick_nrf_baseboard.build_flags} + -D MANUFACTURER_STRING='"Ikoka Stick-E22-33dBm (Xiao_nrf52)"' -D LORA_TX_POWER=9 build_src_filter = ${nrf52840_xiao.build_src_filter} + diff --git a/variants/ikoka_stick_nrf/variant.h b/variants/ikoka_stick_nrf/variant.h index f94ebe49..ff5a41a6 100644 --- a/variants/ikoka_stick_nrf/variant.h +++ b/variants/ikoka_stick_nrf/variant.h @@ -35,7 +35,7 @@ extern "C" #define LED_GREEN (13) #define LED_BLUE (12) -#define LED_STATE_ON (1) // State when LED is litted +#define LED_STATE_ON (0) // State when LED is litted // Buttons #define PIN_BUTTON1 (PINS_COUNT) From 7b08acf56d820d9811bab51cfa5597f99c3a1774 Mon Sep 17 00:00:00 2001 From: kelsey hudson Date: Sun, 7 Sep 2025 21:29:10 -0700 Subject: [PATCH 2/3] Ikoka Stick: Move to unified code naming conventions --- ...stick_nrf_board.cpp => IkokaStickNRFBoard.cpp} | 15 +++++---------- ...oka_stick_nrf_board.h => IkokaStickNRFBoard.h} | 6 +++--- variants/ikoka_stick_nrf/target.cpp | 2 +- variants/ikoka_stick_nrf/target.h | 4 ++-- 4 files changed, 11 insertions(+), 16 deletions(-) rename variants/ikoka_stick_nrf/{ikoka_stick_nrf_board.cpp => IkokaStickNRFBoard.cpp} (91%) rename variants/ikoka_stick_nrf/{ikoka_stick_nrf_board.h => IkokaStickNRFBoard.h} (89%) diff --git a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.cpp b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.cpp similarity index 91% rename from variants/ikoka_stick_nrf/ikoka_stick_nrf_board.cpp rename to variants/ikoka_stick_nrf/IkokaStickNRFBoard.cpp index 8634cda1..6b660383 100644 --- a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.cpp +++ b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.cpp @@ -1,28 +1,26 @@ #ifdef XIAO_NRF52 #include -#include "ikoka_stick_nrf_board.h" +#include "IkokaStickNRFBoard.h" #include #include static BLEDfu bledfu; -static void connect_callback(uint16_t conn_handle) -{ +static void connect_callback(uint16_t conn_handle) { (void)conn_handle; MESH_DEBUG_PRINTLN("BLE client connected"); } -static void disconnect_callback(uint16_t conn_handle, uint8_t reason) -{ +static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { (void)conn_handle; (void)reason; MESH_DEBUG_PRINTLN("BLE client disconnected"); } -void ikoka_stick_nrf_board::begin() { +void IkokaStickNRFBoard::begin() { // for future use, sub-classes SHOULD call this from their begin() startup_reason = BD_STARTUP_NORMAL; @@ -50,7 +48,7 @@ void ikoka_stick_nrf_board::begin() { delay(10); // give sx1262 some time to power up } -bool ikoka_stick_nrf_board::startOTAUpdate(const char* id, char reply[]) { +bool IkokaStickNRFBoard::startOTAUpdate(const char *id, char reply[]) { // Config the peripheral connection with maximum bandwidth // more SRAM required by SoftDevice // Note: All config***() function must be called before begin() @@ -91,9 +89,6 @@ bool ikoka_stick_nrf_board::startOTAUpdate(const char* id, char reply[]) { strcpy(reply, "OK - started"); return true; - - - return false; } #endif diff --git a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.h similarity index 89% rename from variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h rename to variants/ikoka_stick_nrf/IkokaStickNRFBoard.h index 08061c23..4a061d42 100644 --- a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h +++ b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.h @@ -5,7 +5,7 @@ #ifdef XIAO_NRF52 -class ikoka_stick_nrf_board : public mesh::MainBoard { +class IkokaStickNRFBoard : public mesh::MainBoard { protected: uint8_t startup_reason; @@ -46,7 +46,7 @@ public: return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE) / 4.096; } - const char* getManufacturerName() const override { + const char *getManufacturerName() const override { return MANUFACTURER_STRING; } @@ -54,7 +54,7 @@ public: NVIC_SystemReset(); } - bool startOTAUpdate(const char* id, char reply[]) override; + bool startOTAUpdate(const char *id, char reply[]) override; }; #endif diff --git a/variants/ikoka_stick_nrf/target.cpp b/variants/ikoka_stick_nrf/target.cpp index c2712761..bd803399 100644 --- a/variants/ikoka_stick_nrf/target.cpp +++ b/variants/ikoka_stick_nrf/target.cpp @@ -2,7 +2,7 @@ #include "target.h" #include -ikoka_stick_nrf_board board; +IkokaStickNRFBoard board; #ifdef DISPLAY_CLASS DISPLAY_CLASS display; diff --git a/variants/ikoka_stick_nrf/target.h b/variants/ikoka_stick_nrf/target.h index 8311503a..c276e89f 100644 --- a/variants/ikoka_stick_nrf/target.h +++ b/variants/ikoka_stick_nrf/target.h @@ -3,7 +3,7 @@ #define RADIOLIB_STATIC_ONLY 1 #include #include -#include +#include #include #include #include @@ -16,7 +16,7 @@ extern MomentaryButton user_btn; #endif -extern ikoka_stick_nrf_board board; +extern IkokaStickNRFBoard board; extern WRAPPER_CLASS radio_driver; extern AutoDiscoverRTCClock rtc_clock; extern EnvironmentSensorManager sensors; From 9d009074daf9fec303f743180a173a4e45052a7a Mon Sep 17 00:00:00 2001 From: kelsey hudson Date: Sun, 7 Sep 2025 21:29:10 -0700 Subject: [PATCH 3/3] Ikoka Stick: Move to unified code naming conventions --- ...stick_nrf_board.cpp => IkokaStickNRFBoard.cpp} | 15 +++++---------- ...oka_stick_nrf_board.h => IkokaStickNRFBoard.h} | 6 +++--- variants/ikoka_stick_nrf/target.cpp | 2 +- variants/ikoka_stick_nrf/target.h | 4 ++-- 4 files changed, 11 insertions(+), 16 deletions(-) rename variants/ikoka_stick_nrf/{ikoka_stick_nrf_board.cpp => IkokaStickNRFBoard.cpp} (91%) rename variants/ikoka_stick_nrf/{ikoka_stick_nrf_board.h => IkokaStickNRFBoard.h} (89%) diff --git a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.cpp b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.cpp similarity index 91% rename from variants/ikoka_stick_nrf/ikoka_stick_nrf_board.cpp rename to variants/ikoka_stick_nrf/IkokaStickNRFBoard.cpp index 8634cda1..6b660383 100644 --- a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.cpp +++ b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.cpp @@ -1,28 +1,26 @@ #ifdef XIAO_NRF52 #include -#include "ikoka_stick_nrf_board.h" +#include "IkokaStickNRFBoard.h" #include #include static BLEDfu bledfu; -static void connect_callback(uint16_t conn_handle) -{ +static void connect_callback(uint16_t conn_handle) { (void)conn_handle; MESH_DEBUG_PRINTLN("BLE client connected"); } -static void disconnect_callback(uint16_t conn_handle, uint8_t reason) -{ +static void disconnect_callback(uint16_t conn_handle, uint8_t reason) { (void)conn_handle; (void)reason; MESH_DEBUG_PRINTLN("BLE client disconnected"); } -void ikoka_stick_nrf_board::begin() { +void IkokaStickNRFBoard::begin() { // for future use, sub-classes SHOULD call this from their begin() startup_reason = BD_STARTUP_NORMAL; @@ -50,7 +48,7 @@ void ikoka_stick_nrf_board::begin() { delay(10); // give sx1262 some time to power up } -bool ikoka_stick_nrf_board::startOTAUpdate(const char* id, char reply[]) { +bool IkokaStickNRFBoard::startOTAUpdate(const char *id, char reply[]) { // Config the peripheral connection with maximum bandwidth // more SRAM required by SoftDevice // Note: All config***() function must be called before begin() @@ -91,9 +89,6 @@ bool ikoka_stick_nrf_board::startOTAUpdate(const char* id, char reply[]) { strcpy(reply, "OK - started"); return true; - - - return false; } #endif diff --git a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.h similarity index 89% rename from variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h rename to variants/ikoka_stick_nrf/IkokaStickNRFBoard.h index 08061c23..4a061d42 100644 --- a/variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h +++ b/variants/ikoka_stick_nrf/IkokaStickNRFBoard.h @@ -5,7 +5,7 @@ #ifdef XIAO_NRF52 -class ikoka_stick_nrf_board : public mesh::MainBoard { +class IkokaStickNRFBoard : public mesh::MainBoard { protected: uint8_t startup_reason; @@ -46,7 +46,7 @@ public: return (adcvalue * ADC_MULTIPLIER * AREF_VOLTAGE) / 4.096; } - const char* getManufacturerName() const override { + const char *getManufacturerName() const override { return MANUFACTURER_STRING; } @@ -54,7 +54,7 @@ public: NVIC_SystemReset(); } - bool startOTAUpdate(const char* id, char reply[]) override; + bool startOTAUpdate(const char *id, char reply[]) override; }; #endif diff --git a/variants/ikoka_stick_nrf/target.cpp b/variants/ikoka_stick_nrf/target.cpp index c2712761..bd803399 100644 --- a/variants/ikoka_stick_nrf/target.cpp +++ b/variants/ikoka_stick_nrf/target.cpp @@ -2,7 +2,7 @@ #include "target.h" #include -ikoka_stick_nrf_board board; +IkokaStickNRFBoard board; #ifdef DISPLAY_CLASS DISPLAY_CLASS display; diff --git a/variants/ikoka_stick_nrf/target.h b/variants/ikoka_stick_nrf/target.h index 8311503a..c276e89f 100644 --- a/variants/ikoka_stick_nrf/target.h +++ b/variants/ikoka_stick_nrf/target.h @@ -3,7 +3,7 @@ #define RADIOLIB_STATIC_ONLY 1 #include #include -#include +#include #include #include #include @@ -16,7 +16,7 @@ extern MomentaryButton user_btn; #endif -extern ikoka_stick_nrf_board board; +extern IkokaStickNRFBoard board; extern WRAPPER_CLASS radio_driver; extern AutoDiscoverRTCClock rtc_clock; extern EnvironmentSensorManager sensors;