Skip to content

Commit dedef49

Browse files
committed
Ikoka Stick: Adding variant support for Ebyte S22 modules
The Ebyte S22 module comes in three variants, 22dBm, 30dBm, and 33dBm. Each requires a different TX power max setting to avoid frying the PA frontend. Breaks out variants and roles by module type.
1 parent cb96503 commit dedef49

File tree

2 files changed

+206
-40
lines changed

2 files changed

+206
-40
lines changed

variants/ikoka_stick_nrf/ikoka_stick_nrf_board.h

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,6 @@
55

66
#ifdef XIAO_NRF52
77

8-
// redefine lora pins if using the S3 variant of SX1262 board
9-
#ifdef SX1262_XIAO_S3_VARIANT
10-
#undef P_LORA_DIO_1
11-
#undef P_LORA_BUSY
12-
#undef P_LORA_RESET
13-
#undef P_LORA_NSS
14-
#undef SX126X_RXEN
15-
#define P_LORA_DIO_1 D0
16-
#define P_LORA_BUSY D1
17-
#define P_LORA_RESET D2
18-
#define P_LORA_NSS D3
19-
#define SX126X_RXEN D4
20-
#endif
21-
228
class ikoka_stick_nrf_board : public mesh::MainBoard {
239
protected:
2410
uint8_t startup_reason;
@@ -29,10 +15,10 @@ class ikoka_stick_nrf_board : public mesh::MainBoard {
2915

3016
#if defined(P_LORA_TX_LED)
3117
void onBeforeTransmit() override {
32-
digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on
18+
digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED on
3319
}
3420
void onAfterTransmit() override {
35-
digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off
21+
digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED off
3622
}
3723
#endif
3824

variants/ikoka_stick_nrf/platformio.ini

Lines changed: 204 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@ lib_deps =
1919
adafruit/Adafruit INA3221 Library @ ^1.0.1
2020
adafruit/Adafruit INA219 @ ^1.2.3
2121
adafruit/Adafruit AHTX0 @ ^2.0.5
22-
adafruit/Adafruit BME280 Library @ ^2.3.0
22+
adafruit/Adafruit BME280 Library @ ^2.3.0
2323
adafruit/Adafruit SSD1306 @ ^2.5.13
2424

25-
26-
[ikoka_stick_nrf]
25+
[ikoka_stick_nrf_baseboard]
2726
extends = nrf52840_xiao
2827
;board_build.ldscript = boards/nrf52840_s140_v7.ld
2928
build_flags = ${nrf52840_xiao.build_flags}
@@ -34,7 +33,6 @@ build_flags = ${nrf52840_xiao.build_flags}
3433
-D DISPLAY_ROTATION=2
3534
-D RADIO_CLASS=CustomSX1262
3635
-D WRAPPER_CLASS=CustomSX1262Wrapper
37-
-D LORA_TX_POWER=9
3836
-D P_LORA_DIO_1=D1
3937
-D P_LORA_RESET=D2
4038
-D P_LORA_BUSY=D3
@@ -52,19 +50,59 @@ build_flags = ${nrf52840_xiao.build_flags}
5250
-D ENV_INCLUDE_BME280=1
5351
-D ENV_INCLUDE_INA3221=1
5452
-D ENV_INCLUDE_INA219=1
53+
debug_tool = jlink
54+
upload_protocol = nrfutil
55+
56+
57+
;;; abstracted hardware variants
58+
59+
[ikoka_stick_nrf_e22_22dbm]
60+
extends = ikoka_stick_nrf_baseboard
61+
; No PA in this model, full 22dBm
62+
build_flags =
63+
${ikoka_stick_nrf_baseboard.build_flags}
64+
-D LORA_TX_POWER=22
5565
build_src_filter = ${nrf52840_xiao.build_src_filter}
5666
+<helpers/*.cpp>
5767
+<helpers/sensors>
5868
+<helpers/ui/MomentaryButton.cpp>
5969
+<helpers/ui/SSD1306Display.cpp>
6070
+<../variants/ikoka_stick_nrf>
61-
debug_tool = jlink
62-
upload_protocol = nrfutil
6371

64-
[env:ikoka_stick_nrf_companion_radio_ble]
65-
extends = ikoka_stick_nrf
72+
[ikoka_stick_nrf_e22_30dbm]
73+
extends = ikoka_stick_nrf_baseboard
74+
; limit txpower to 20dBm on E22-900M30S. Anything higher will
75+
; cause distortion in the PA output. 20dBm in -> 30dBm out
6676
build_flags =
67-
${ikoka_stick_nrf.build_flags}
77+
${ikoka_stick_nrf_baseboard.build_flags}
78+
-D LORA_TX_POWER=20
79+
build_src_filter = ${nrf52840_xiao.build_src_filter}
80+
+<helpers/*.cpp>
81+
+<helpers/sensors>
82+
+<helpers/ui/MomentaryButton.cpp>
83+
+<helpers/ui/SSD1306Display.cpp>
84+
+<../variants/ikoka_stick_nrf>
85+
86+
[ikoka_stick_nrf_e22_33dbm]
87+
extends = ikoka_stick_nrf_baseboard
88+
; limit txpower to 9dBm on E22-900M33S to avoid hardware damage
89+
; to the rf amplifier frontend. 9dBm in -> 33dBm out
90+
build_flags =
91+
${ikoka_stick_nrf_baseboard.build_flags}
92+
-D LORA_TX_POWER=9
93+
build_src_filter = ${nrf52840_xiao.build_src_filter}
94+
+<helpers/*.cpp>
95+
+<helpers/sensors>
96+
+<helpers/ui/MomentaryButton.cpp>
97+
+<helpers/ui/SSD1306Display.cpp>
98+
+<../variants/ikoka_stick_nrf>
99+
100+
;;; abstracted firmware roles
101+
102+
[ikoka_stick_nrf_companion_radio_ble]
103+
extends = ikoka_stick_nrf_baseboard
104+
build_flags =
105+
${ikoka_stick_nrf_baseboard.build_flags}
68106
-D MAX_CONTACTS=100
69107
-D MAX_GROUP_CHANNELS=8
70108
-D BLE_PIN_CODE=123456
@@ -73,55 +111,197 @@ build_flags =
73111
; -D BLE_DEBUG_LOGGING=1
74112
; -D MESH_PACKET_LOGGING=1
75113
; -D MESH_DEBUG=1
76-
build_src_filter = ${ikoka_stick_nrf.build_src_filter}
114+
build_src_filter = ${ikoka_stick_nrf_baseboard.build_src_filter}
77115
+<helpers/nrf52/SerialBLEInterface.cpp>
78116
+<../examples/companion_radio/*.cpp>
79117
+<../examples/companion_radio/ui-new/*.cpp>
80118
lib_deps =
81-
${ikoka_stick_nrf.lib_deps}
119+
${ikoka_stick_nrf_baseboard.lib_deps}
82120
densaugeo/base64 @ ~1.4.0
83121

84-
[env:ikoka_stick_nrf_companion_radio_usb]
85-
extends = ikoka_stick_nrf
122+
[ikoka_stick_nrf_companion_radio_usb]
123+
extends = ikoka_stick_nrf_baseboard
86124
build_flags =
87-
${ikoka_stick_nrf.build_flags}
125+
${ikoka_stick_nrf_baseboard.build_flags}
88126
-D MAX_CONTACTS=100
89127
-D MAX_GROUP_CHANNELS=8
90128
-I examples/companion_radio/ui-new
91129
; -D MESH_PACKET_LOGGING=1
92130
; -D MESH_DEBUG=1
93-
build_src_filter = ${ikoka_stick_nrf.build_src_filter}
131+
build_src_filter = ${ikoka_stick_nrf_baseboard.build_src_filter}
94132
+<helpers/nrf52/SerialBLEInterface.cpp>
95133
+<../examples/companion_radio/*.cpp>
96134
+<../examples/companion_radio/ui-new/*.cpp>
97135
lib_deps =
98-
${ikoka_stick_nrf.lib_deps}
136+
${ikoka_stick_nrf_baseboard.lib_deps}
99137
densaugeo/base64 @ ~1.4.0
100138

101-
[env:ikoka_stick_nrf_repeater]
102-
extends = ikoka_stick_nrf
139+
[ikoka_stick_nrf_repeater]
140+
extends = ikoka_stick_nrf_baseboard
103141
build_flags =
104-
${ikoka_stick_nrf.build_flags}
142+
${ikoka_stick_nrf_baseboard.build_flags}
105143
-D ADVERT_NAME='"Ikoka Stick Repeater"'
106144
-D ADVERT_LAT=0.0
107145
-D ADVERT_LON=0.0
108146
-D ADMIN_PASSWORD='"password"'
109147
-D MAX_NEIGHBOURS=8
110148
; -D MESH_PACKET_LOGGING=1
111149
; -D MESH_DEBUG=1
112-
build_src_filter = ${ikoka_stick_nrf.build_src_filter}
150+
build_src_filter = ${ikoka_stick_nrf_baseboard.build_src_filter}
113151
+<helpers/ui/SSD1306Display.cpp>
114152
+<../examples/simple_repeater/*.cpp>
115153

116-
[env:ikoka_stick_nrf_room_server]
117-
extends = ikoka_stick_nrf
154+
[ikoka_stick_nrf_room_server]
155+
extends = ikoka_stick_nrf_baseboard
118156
build_flags =
119-
${ikoka_stick_nrf.build_flags}
157+
${ikoka_stick_nrf_baseboard.build_flags}
120158
-D ADVERT_NAME='"Ikoka Stick Room"'
121159
-D ADVERT_LAT=0.0
122160
-D ADVERT_LON=0.0
123161
-D ADMIN_PASSWORD='"password"'
124162
; -D MESH_PACKET_LOGGING=1
125163
; -D MESH_DEBUG=1
126-
build_src_filter = ${ikoka_stick_nrf.build_src_filter}
164+
build_src_filter = ${ikoka_stick_nrf_baseboard.build_src_filter}
127165
+<../examples/simple_room_server/*.cpp>
166+
167+
;;; hardware + firmware variants
168+
169+
;;; 22dBm EBYTE E22-900M22 variants
170+
171+
[env:ikoka_stick_nrf_22dbm_companion_radio_usb]
172+
extends =
173+
ikoka_stick_nrf_e22_22dbm
174+
ikoka_stick_nrf_companion_radio_usb
175+
build_flags =
176+
${ikoka_stick_nrf_companion_radio_usb.build_flags}
177+
${ikoka_stick_nrf_e22_22dbm.build_flags}
178+
build_src_filter =
179+
${ikoka_stick_nrf_companion_radio_usb.build_src_filter}
180+
${ikoka_stick_nrf_e22_22dbm.build_src_filter}
181+
182+
[env:ikoka_stick_nrf_22dbm_companion_radio_ble]
183+
extends =
184+
ikoka_stick_nrf_e22_22dbm
185+
ikoka_stick_nrf_companion_radio_ble
186+
build_flags =
187+
${ikoka_stick_nrf_companion_radio_ble.build_flags}
188+
${ikoka_stick_nrf_e22_22dbm.build_flags}
189+
build_src_filter =
190+
${ikoka_stick_nrf_companion_radio_ble.build_src_filter}
191+
${ikoka_stick_nrf_e22_22dbm.build_src_filter}
192+
193+
[env:ikoka_stick_nrf_22dbm_repeater]
194+
extends =
195+
ikoka_stick_nrf_e22_22dbm
196+
ikoka_stick_nrf_repeater
197+
build_flags =
198+
${ikoka_stick_nrf_repeater.build_flags}
199+
${ikoka_stick_nrf_e22_22dbm.build_flags}
200+
build_src_filter =
201+
${ikoka_stick_nrf_repeater.build_src_filter}
202+
${ikoka_stick_nrf_e22_22dbm.build_src_filter}
203+
204+
[env:ikoka_stick_nrf_22dbm_room_server]
205+
extends =
206+
ikoka_stick_nrf_e22_22dbm
207+
ikoka_stick_nrf_room_server
208+
build_flags =
209+
${ikoka_stick_nrf_room_server.build_flags}
210+
${ikoka_stick_nrf_e22_22dbm.build_flags}
211+
build_src_filter =
212+
${ikoka_stick_nrf_room_server.build_src_filter}
213+
${ikoka_stick_nrf_e22_22dbm.build_src_filter}
214+
215+
216+
;;; 30dBm EBYTE E22-900M30 variants
217+
218+
[env:ikoka_stick_nrf_30dbm_companion_radio_usb]
219+
extends =
220+
ikoka_stick_nrf_e22_30dbm
221+
ikoka_stick_nrf_companion_radio_usb
222+
build_flags =
223+
${ikoka_stick_nrf_companion_radio_usb.build_flags}
224+
${ikoka_stick_nrf_e22_30dbm.build_flags}
225+
build_src_filter =
226+
${ikoka_stick_nrf_companion_radio_usb.build_src_filter}
227+
${ikoka_stick_nrf_e22_30dbm.build_src_filter}
228+
229+
[env:ikoka_stick_nrf_30dbm_companion_radio_ble]
230+
extends =
231+
ikoka_stick_nrf_e22_30dbm
232+
ikoka_stick_nrf_companion_radio_ble
233+
build_flags =
234+
${ikoka_stick_nrf_companion_radio_ble.build_flags}
235+
${ikoka_stick_nrf_e22_30dbm.build_flags}
236+
build_src_filter =
237+
${ikoka_stick_nrf_companion_radio_ble.build_src_filter}
238+
${ikoka_stick_nrf_e22_30dbm.build_src_filter}
239+
240+
[env:ikoka_stick_nrf_30dbm_repeater]
241+
extends =
242+
ikoka_stick_nrf_e22_30dbm
243+
ikoka_stick_nrf_repeater
244+
build_flags =
245+
${ikoka_stick_nrf_repeater.build_flags}
246+
${ikoka_stick_nrf_e22_30dbm.build_flags}
247+
build_src_filter =
248+
${ikoka_stick_nrf_repeater.build_src_filter}
249+
${ikoka_stick_nrf_e22_30dbm.build_src_filter}
250+
251+
[env:ikoka_stick_nrf_30dbm_room_server]
252+
extends =
253+
ikoka_stick_nrf_e22_30dbm
254+
ikoka_stick_nrf_room_server
255+
build_flags =
256+
${ikoka_stick_nrf_room_server.build_flags}
257+
${ikoka_stick_nrf_e22_30dbm.build_flags}
258+
build_src_filter =
259+
${ikoka_stick_nrf_room_server.build_src_filter}
260+
${ikoka_stick_nrf_e22_30dbm.build_src_filter}
261+
262+
263+
;;; 33dBm EBYTE E22-900M33 variants
264+
265+
[env:ikoka_stick_nrf_33dbm_companion_radio_usb]
266+
extends =
267+
ikoka_stick_nrf_e22_33dbm
268+
ikoka_stick_nrf_companion_radio_usb
269+
build_flags =
270+
${ikoka_stick_nrf_companion_radio_usb.build_flags}
271+
${ikoka_stick_nrf_e22_33dbm.build_flags}
272+
build_src_filter =
273+
${ikoka_stick_nrf_companion_radio_usb.build_src_filter}
274+
${ikoka_stick_nrf_e22_33dbm.build_src_filter}
275+
276+
[env:ikoka_stick_nrf_33dbm_companion_radio_ble]
277+
extends =
278+
ikoka_stick_nrf_e22_33dbm
279+
ikoka_stick_nrf_companion_radio_ble
280+
build_flags =
281+
${ikoka_stick_nrf_companion_radio_ble.build_flags}
282+
${ikoka_stick_nrf_e22_33dbm.build_flags}
283+
build_src_filter =
284+
${ikoka_stick_nrf_companion_radio_ble.build_src_filter}
285+
${ikoka_stick_nrf_e22_33dbm.build_src_filter}
286+
287+
[env:ikoka_stick_nrf_33dbm_repeater]
288+
extends =
289+
ikoka_stick_nrf_e22_33dbm
290+
ikoka_stick_nrf_repeater
291+
build_flags =
292+
${ikoka_stick_nrf_repeater.build_flags}
293+
${ikoka_stick_nrf_e22_33dbm.build_flags}
294+
build_src_filter =
295+
${ikoka_stick_nrf_repeater.build_src_filter}
296+
${ikoka_stick_nrf_e22_33dbm.build_src_filter}
297+
298+
[env:ikoka_stick_nrf_33dbm_room_server]
299+
extends =
300+
ikoka_stick_nrf_e22_33dbm
301+
ikoka_stick_nrf_room_server
302+
build_flags =
303+
${ikoka_stick_nrf_room_server.build_flags}
304+
${ikoka_stick_nrf_e22_33dbm.build_flags}
305+
build_src_filter =
306+
${ikoka_stick_nrf_room_server.build_src_filter}
307+
${ikoka_stick_nrf_e22_33dbm.build_src_filter}

0 commit comments

Comments
 (0)