From 8b2f783d04a505373f5ffb494e8cc019f183568e Mon Sep 17 00:00:00 2001 From: taco Date: Sun, 16 Mar 2025 13:24:43 +1100 Subject: [PATCH 01/10] OLED and button support, some refactoring. --- platformio.ini | 7 ++++++- src/helpers/nrf52/faketecBoard.cpp | 26 +++++++++++++++++++++++++ src/helpers/nrf52/faketecBoard.h | 29 +++++++++++++--------------- variants/promicro_nrf52840/variant.h | 2 +- 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/platformio.ini b/platformio.ini index c6e31268..9d50ed89 100644 --- a/platformio.ini +++ b/platformio.ini @@ -971,6 +971,10 @@ build_flags = ${nrf52840_base.build_flags} -D LORA_TX_POWER=22 -D SX126X_CURRENT_LIMIT=130 -D SX126X_RX_BOOSTED_GAIN=1 + -D PIN_USER_BTN=6 +lib_deps= + ${nrf52840_base.lib_deps} + adafruit/Adafruit SSD1306 @ ^2.5.13 [env:Faketec_Repeater] extends = faketec @@ -1035,6 +1039,7 @@ lib_deps = extends = faketec build_flags = ${faketec.build_flags} + -D DISPLAY_CLASS=SSD1306Display -D MAX_CONTACTS=100 -D MAX_GROUP_CHANNELS=8 -D BLE_PIN_CODE=123456 @@ -1043,7 +1048,7 @@ build_flags = -D ENABLE_PRIVATE_KEY_IMPORT=1 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -build_src_filter = ${faketec.build_src_filter} + +<../examples/companion_radio/main.cpp> +build_src_filter = ${faketec.build_src_filter} + +<../examples/companion_radio> + lib_deps = ${faketec.lib_deps} adafruit/RTClib @ ^2.1.3 diff --git a/src/helpers/nrf52/faketecBoard.cpp b/src/helpers/nrf52/faketecBoard.cpp index 6ef294bc..797dba89 100644 --- a/src/helpers/nrf52/faketecBoard.cpp +++ b/src/helpers/nrf52/faketecBoard.cpp @@ -6,6 +6,32 @@ static BLEDfu bledfu; +void faketecBoard::begin() { + // for future use, sub-classes SHOULD call this from their begin() + startup_reason = BD_STARTUP_NORMAL; + btn_prev_state = HIGH; + + + pinMode(PIN_VBAT_READ, INPUT); + + #ifdef BUTTON_PIN + pinMode(BATTERY_PIN, INPUT); + pinMode(BUTTON_PIN, INPUT); + pinMode(LED_PIN, OUTPUT); + #endif + + #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) + Wire.begin(PIN_BOARD_SDA, PIN_BOARD_SCL); + #else + Wire.begin(); + #endif + + pinMode(SX126X_POWER_EN, OUTPUT); + digitalWrite(SX126X_POWER_EN, HIGH); + delay(10); // give sx1262 some time to power up +} + + static void connect_callback(uint16_t conn_handle) { (void)conn_handle; diff --git a/src/helpers/nrf52/faketecBoard.h b/src/helpers/nrf52/faketecBoard.h index b5cebb78..53ba9917 100644 --- a/src/helpers/nrf52/faketecBoard.h +++ b/src/helpers/nrf52/faketecBoard.h @@ -23,24 +23,10 @@ class faketecBoard : public mesh::MainBoard { protected: uint8_t startup_reason; + uint8_t btn_prev_state; public: - void begin() { - // for future use, sub-classes SHOULD call this from their begin() - startup_reason = BD_STARTUP_NORMAL; - - pinMode(PIN_VBAT_READ, INPUT); - - #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.begin(PIN_BOARD_SDA, PIN_BOARD_SCL); - #else - Wire.begin(); - #endif - - pinMode(SX126X_POWER_EN, OUTPUT); - digitalWrite(SX126X_POWER_EN, HIGH); - delay(10); // give sx1262 some time to power up - } + void begin(); uint8_t getStartupReason() const override { return startup_reason; } @@ -61,6 +47,17 @@ public: return "Faketec DIY"; } + int buttonStateChanged() { + #ifdef BUTTON_PIN + uint8_t v = digitalRead(BUTTON_PIN); + if (v != btn_prev_state) { + btn_prev_state = v; + return (v == LOW) ? 1 : -1; + } + #endif + return 0; + } + void reboot() override { NVIC_SystemReset(); } diff --git a/variants/promicro_nrf52840/variant.h b/variants/promicro_nrf52840/variant.h index 98489da1..780e4a0b 100644 --- a/variants/promicro_nrf52840/variant.h +++ b/variants/promicro_nrf52840/variant.h @@ -44,7 +44,7 @@ #define WIRE_INTERFACES_COUNT 2 -#define PIN_WIRE_SDA (6) +#define PIN_WIRE_SDA (8) #define PIN_WIRE_SCL (7) #define PIN_WIRE1_SDA (13) #define PIN_WIRE1_SCL (14) From a67bb8e1e368b718bb461ea4b43c510a6c7d1ccb Mon Sep 17 00:00:00 2001 From: taco Date: Mon, 17 Mar 2025 12:17:36 +1100 Subject: [PATCH 02/10] tidy up --- src/helpers/nrf52/faketecBoard.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/helpers/nrf52/faketecBoard.cpp b/src/helpers/nrf52/faketecBoard.cpp index 797dba89..d9c047d3 100644 --- a/src/helpers/nrf52/faketecBoard.cpp +++ b/src/helpers/nrf52/faketecBoard.cpp @@ -11,13 +11,10 @@ void faketecBoard::begin() { startup_reason = BD_STARTUP_NORMAL; btn_prev_state = HIGH; - pinMode(PIN_VBAT_READ, INPUT); #ifdef BUTTON_PIN - pinMode(BATTERY_PIN, INPUT); pinMode(BUTTON_PIN, INPUT); - pinMode(LED_PIN, OUTPUT); #endif #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) @@ -31,18 +28,14 @@ void faketecBoard::begin() { delay(10); // give sx1262 some time to power up } - -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"); } From d59b1d235e973d2fb08aba77ecdb72835409ac05 Mon Sep 17 00:00:00 2001 From: taco Date: Mon, 17 Mar 2025 13:09:02 +1100 Subject: [PATCH 03/10] define PIN_OLED_RESET -1 --- src/helpers/nrf52/faketecBoard.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/helpers/nrf52/faketecBoard.h b/src/helpers/nrf52/faketecBoard.h index 53ba9917..2790a9f8 100644 --- a/src/helpers/nrf52/faketecBoard.h +++ b/src/helpers/nrf52/faketecBoard.h @@ -17,6 +17,8 @@ #define SX126X_DIO2_AS_RF_SWITCH true #define SX126X_DIO3_TCXO_VOLTAGE (1.8f) +#define PIN_OLED_RESET -1 // shared VCC + #define PIN_VBAT_READ 17 #define ADC_MULTIPLIER (1.815f) // dependent on voltage divider resistors. TODO: more accurate battery tracking From 86ece04fe2acfc69d934443b45f8ffd78b0f4657 Mon Sep 17 00:00:00 2001 From: taco Date: Mon, 17 Mar 2025 13:09:26 +1100 Subject: [PATCH 04/10] move DISPLAY_CLASS definition --- platformio.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platformio.ini b/platformio.ini index 9d50ed89..3732fa12 100644 --- a/platformio.ini +++ b/platformio.ini @@ -971,6 +971,7 @@ build_flags = ${nrf52840_base.build_flags} -D LORA_TX_POWER=22 -D SX126X_CURRENT_LIMIT=130 -D SX126X_RX_BOOSTED_GAIN=1 + -D DISPLAY_CLASS=SSD1306Display -D PIN_USER_BTN=6 lib_deps= ${nrf52840_base.lib_deps} @@ -1038,11 +1039,10 @@ lib_deps = [env:Faketec_companion_radio_ble] extends = faketec build_flags = - ${faketec.build_flags} - -D DISPLAY_CLASS=SSD1306Display + ${faketec.build_flags} -D MAX_CONTACTS=100 -D MAX_GROUP_CHANNELS=8 - -D BLE_PIN_CODE=123456 + -D BLE_PIN_CODE=0 -D BLE_DEBUG_LOGGING=1 -D ENABLE_PRIVATE_KEY_EXPORT=1 -D ENABLE_PRIVATE_KEY_IMPORT=1 From f671b753da3393cb3f60322f80559012699bebf5 Mon Sep 17 00:00:00 2001 From: taco Date: Mon, 17 Mar 2025 13:50:05 +1100 Subject: [PATCH 05/10] revert variant.h pins --- variants/promicro_nrf52840/variant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/promicro_nrf52840/variant.h b/variants/promicro_nrf52840/variant.h index 780e4a0b..98489da1 100644 --- a/variants/promicro_nrf52840/variant.h +++ b/variants/promicro_nrf52840/variant.h @@ -44,7 +44,7 @@ #define WIRE_INTERFACES_COUNT 2 -#define PIN_WIRE_SDA (8) +#define PIN_WIRE_SDA (6) #define PIN_WIRE_SCL (7) #define PIN_WIRE1_SDA (13) #define PIN_WIRE1_SCL (14) From 6a78cfd00dd3a50f55ea5540560ce9b79dfde556 Mon Sep 17 00:00:00 2001 From: taco Date: Mon, 17 Mar 2025 13:51:26 +1100 Subject: [PATCH 06/10] match changes to other nrf52 boards, add pin definitions to platformio.ini --- platformio.ini | 3 +++ src/helpers/nrf52/faketecBoard.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/platformio.ini b/platformio.ini index c5e184de..78078780 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1048,6 +1048,9 @@ build_flags = ${nrf52840_base.build_flags} -D SX126X_CURRENT_LIMIT=130 -D SX126X_RX_BOOSTED_GAIN=1 -D DISPLAY_CLASS=SSD1306Display + -D PIN_BOARD_SCL=7 + -D PIN_BOARD_SDA=8 + -D PIN_OLED_RESET=-1 -D PIN_USER_BTN=6 lib_deps= ${nrf52840_base.lib_deps} diff --git a/src/helpers/nrf52/faketecBoard.cpp b/src/helpers/nrf52/faketecBoard.cpp index 7263b453..638c8119 100644 --- a/src/helpers/nrf52/faketecBoard.cpp +++ b/src/helpers/nrf52/faketecBoard.cpp @@ -18,10 +18,10 @@ void faketecBoard::begin() { #endif #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) - Wire.begin(PIN_BOARD_SDA, PIN_BOARD_SCL); - #else - Wire.begin(); + Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); #endif + + Wire.begin(); pinMode(SX126X_POWER_EN, OUTPUT); digitalWrite(SX126X_POWER_EN, HIGH); From bd0ce731f1efd046bfdd47125c87e0621a2e1e1b Mon Sep 17 00:00:00 2001 From: taco Date: Thu, 20 Mar 2025 09:27:11 +1100 Subject: [PATCH 07/10] Add faketec changes back after dev merge --- variants/promicro_nrf52840/platformio.ini | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/variants/promicro_nrf52840/platformio.ini b/variants/promicro_nrf52840/platformio.ini index afdb70d1..343ee748 100644 --- a/variants/promicro_nrf52840/platformio.ini +++ b/variants/promicro_nrf52840/platformio.ini @@ -9,6 +9,14 @@ build_flags = ${nrf52840_base.build_flags} -D LORA_TX_POWER=22 -D SX126X_CURRENT_LIMIT=130 -D SX126X_RX_BOOSTED_GAIN=1 + -D DISPLAY_CLASS=SSD1306Display + -D PIN_BOARD_SCL=7 + -D PIN_BOARD_SDA=8 + -D PIN_OLED_RESET=-1 + -D PIN_USER_BTN=6 +lib_deps= + ${nrf52840_base.lib_deps} + adafruit/Adafruit SSD1306 @ ^2.5.13 [env:Faketec_Repeater] extends = faketec @@ -75,13 +83,13 @@ build_flags = ${faketec.build_flags} -D MAX_CONTACTS=100 -D MAX_GROUP_CHANNELS=8 - -D BLE_PIN_CODE=123456 + -D BLE_PIN_CODE=0 -D BLE_DEBUG_LOGGING=1 -D ENABLE_PRIVATE_KEY_EXPORT=1 -D ENABLE_PRIVATE_KEY_IMPORT=1 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -build_src_filter = ${faketec.build_src_filter} + +<../examples/companion_radio/main.cpp> +build_src_filter = ${faketec.build_src_filter} + +<../examples/companion_radio> + lib_deps = ${faketec.lib_deps} adafruit/RTClib @ ^2.1.3 From 61f7f15dc116b1b1590f00b4ae8d01879d227148 Mon Sep 17 00:00:00 2001 From: taco Date: Thu, 20 Mar 2025 09:46:40 +1100 Subject: [PATCH 08/10] Changed BLE pin back to 123456 now - dynamic display sensing happening. --- variants/promicro_nrf52840/platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/promicro_nrf52840/platformio.ini b/variants/promicro_nrf52840/platformio.ini index 343ee748..405c8e34 100644 --- a/variants/promicro_nrf52840/platformio.ini +++ b/variants/promicro_nrf52840/platformio.ini @@ -83,7 +83,7 @@ build_flags = ${faketec.build_flags} -D MAX_CONTACTS=100 -D MAX_GROUP_CHANNELS=8 - -D BLE_PIN_CODE=0 + -D BLE_PIN_CODE=123456 -D BLE_DEBUG_LOGGING=1 -D ENABLE_PRIVATE_KEY_EXPORT=1 -D ENABLE_PRIVATE_KEY_IMPORT=1 From 1c14482bd44093c03baa1e975ca2662de424c61d Mon Sep 17 00:00:00 2001 From: taco Date: Thu, 20 Mar 2025 10:05:01 +1100 Subject: [PATCH 09/10] Remove PIN_OLED_RESET from board header, will leave in build target for now. --- src/helpers/nrf52/faketecBoard.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/helpers/nrf52/faketecBoard.h b/src/helpers/nrf52/faketecBoard.h index 2790a9f8..53ba9917 100644 --- a/src/helpers/nrf52/faketecBoard.h +++ b/src/helpers/nrf52/faketecBoard.h @@ -17,8 +17,6 @@ #define SX126X_DIO2_AS_RF_SWITCH true #define SX126X_DIO3_TCXO_VOLTAGE (1.8f) -#define PIN_OLED_RESET -1 // shared VCC - #define PIN_VBAT_READ 17 #define ADC_MULTIPLIER (1.815f) // dependent on voltage divider resistors. TODO: more accurate battery tracking From de67ee29eb5910db0d7fc6a2d6efc8f9819a2081 Mon Sep 17 00:00:00 2001 From: taco Date: Thu, 20 Mar 2025 12:50:35 +1100 Subject: [PATCH 10/10] Fix builds for repeater, room server and companion usb. --- variants/promicro_nrf52840/platformio.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/variants/promicro_nrf52840/platformio.ini b/variants/promicro_nrf52840/platformio.ini index 405c8e34..a815a9af 100644 --- a/variants/promicro_nrf52840/platformio.ini +++ b/variants/promicro_nrf52840/platformio.ini @@ -20,7 +20,7 @@ lib_deps= [env:Faketec_Repeater] extends = faketec -build_src_filter = ${faketec.build_src_filter} +<../examples/simple_repeater/main.cpp> +build_src_filter = ${faketec.build_src_filter} +<../examples/simple_repeater> + build_flags = ${faketec.build_flags} -D ADVERT_NAME="\"Faketec Repeater\"" @@ -35,7 +35,7 @@ lib_deps = [env:Faketec_room_server] extends = faketec -build_src_filter = ${faketec.build_src_filter} +<../examples/simple_room_server/main.cpp> +build_src_filter = ${faketec.build_src_filter} +<../examples/simple_room_server> + build_flags = ${faketec.build_flags} -D ADVERT_NAME="\"Test Room\"" @@ -71,7 +71,7 @@ build_flags = -D MAX_GROUP_CHANNELS=8 ; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 ; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${faketec.build_src_filter} +<../examples/companion_radio/main.cpp> +build_src_filter = ${faketec.build_src_filter} +<../examples/companion_radio> +<../examples/companion_radio> + lib_deps = ${faketec.lib_deps} adafruit/RTClib @ ^2.1.3