Skip to content

Commit 35aef05

Browse files
committed
move esb to thread and do not reboot on actions
1 parent b924155 commit 35aef05

File tree

5 files changed

+81
-79
lines changed

5 files changed

+81
-79
lines changed

prj.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ CONFIG_CRYPTO=n
8484

8585
CONFIG_THREAD_NAME=y
8686
#CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=256
87-
#CONFIG_MAIN_STACK_SIZE=512
87+
CONFIG_MAIN_STACK_SIZE=512
8888

8989
#CONFIG_HEAP_MEM_POOL_SIZE=2048
9090
CONFIG_ISR_STACK_SIZE=1024

src/connection/esb.c

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ LOG_MODULE_REGISTER(esb_event, LOG_LEVEL_INF);
4747
static void esb_packet_filter_thread(void);
4848
K_THREAD_DEFINE(esb_packet_filter_thread_id, 256, esb_packet_filter_thread, NULL, NULL, NULL, 6, 0, 0);
4949

50+
static void esb_thread(void);
51+
K_THREAD_DEFINE(esb_thread_id, 512, esb_thread, NULL, NULL, NULL, 6, 0, 0);
52+
5053
void event_handler(struct esb_evt const *event)
5154
{
5255
switch (event->evt_id)
@@ -206,6 +209,13 @@ int esb_initialize(bool tx)
206209
return 0;
207210
}
208211

212+
static void esb_deinitialize(void)
213+
{
214+
if (esb_initialized)
215+
esb_disable();
216+
esb_initialized = false;
217+
}
218+
209219
inline void esb_set_addr_discovery(void)
210220
{
211221
memcpy(base_addr_0, discovery_base_addr_0, sizeof(base_addr_0));
@@ -237,6 +247,7 @@ inline void esb_set_addr_paired(void)
237247
memcpy(addr_prefix, addr_buffer + 8, sizeof(addr_prefix));
238248
}
239249

250+
static bool esb_pairing = false;
240251
static bool esb_paired = false;
241252

242253
void esb_pair(void)
@@ -250,7 +261,8 @@ void esb_pair(void)
250261
memcpy(&tx_payload_pair.data[2], addr, 6);
251262
LOG_INF("Device address: %012llX", *addr & 0xFFFFFFFFFFFF);
252263
set_led(SYS_LED_PATTERN_SHORT, SYS_LED_PRIORITY_CONNECTION);
253-
while (true) // Run indefinitely (User must reset/unplug dongle)
264+
esb_pairing = true;
265+
while (esb_pairing)
254266
{
255267
uint64_t found_addr = (*(uint64_t *)pairing_buf >> 16) & 0xFFFFFFFFFFFF;
256268
uint16_t send_tracker_id = stored_trackers; // Use new tracker id
@@ -284,6 +296,28 @@ void esb_pair(void)
284296
//esb_write_payload(&tx_payload_pair); // Add to TX buffer
285297
k_msleep(10);
286298
}
299+
set_led(SYS_LED_PATTERN_OFF, SYS_LED_PRIORITY_CONNECTION);
300+
esb_disable();
301+
esb_receive();
302+
}
303+
304+
void esb_reset_pair(void)
305+
{
306+
esb_deinitialize(); // make sure esb is off
307+
esb_paired = false;
308+
}
309+
310+
void esb_finish_pair(void)
311+
{
312+
esb_pairing = false;
313+
}
314+
315+
void esb_clear(void)
316+
{
317+
stored_trackers = 0;
318+
sys_write(STORED_TRACKERS, NULL, &stored_trackers, sizeof(stored_trackers));
319+
LOG_INF("NVS Reset");
320+
esb_reset_pair();
287321
}
288322

289323
// TODO:
@@ -307,11 +341,41 @@ void esb_receive(void)
307341
static void esb_packet_filter_thread(void)
308342
{
309343
memset(discovered_trackers, 0, sizeof(discovered_trackers));
310-
while (true) // reset count if its not above threshold
344+
while (1) // reset count if its not above threshold
311345
{
312346
k_msleep(1000);
313347
for (int i = 0; i < 256; i++)
314348
if (discovered_trackers[i] < DETECTION_THRESHOLD)
315349
discovered_trackers[i] = 0;
316350
}
317351
}
352+
353+
static void esb_thread(void)
354+
{
355+
clocks_start();
356+
357+
sys_read(STORED_TRACKERS, &stored_trackers, sizeof(stored_trackers));
358+
if (stored_trackers)
359+
esb_paired = true;
360+
for (int i = 0; i < stored_trackers; i++)
361+
sys_read(STORED_ADDR_0+i, &stored_tracker_addr[i], sizeof(stored_tracker_addr[0]));
362+
LOG_INF("%d/%d devices stored", stored_trackers, MAX_TRACKERS);
363+
364+
if (esb_paired)
365+
{
366+
esb_receive();
367+
esb_initialize(false);
368+
esb_start_rx();
369+
}
370+
371+
while (1)
372+
{
373+
if (!esb_paired)
374+
{
375+
esb_pair();
376+
esb_initialize(false);
377+
esb_start_rx();
378+
}
379+
k_msleep(100);
380+
}
381+
}

src/connection/esb.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ void esb_set_addr_discovery(void);
3333
void esb_set_addr_paired(void);
3434

3535
void esb_pair(void);
36+
void esb_reset_pair(void);
37+
void esb_finish_pair(void);
38+
void esb_clear(void);
3639
void esb_write_sync(uint16_t led_clock);
3740
void esb_receive(void);
3841

src/console.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include <zephyr/console/console.h>
3232
#include <zephyr/sys/reboot.h>
3333
#include <zephyr/logging/log_ctrl.h>
34+
#include "esb.h"
3435

3536
#include <ctype.h>
3637

@@ -171,13 +172,15 @@ static void console_thread(void)
171172
printk("list Get paired devices\n");
172173
printk("reboot Soft reset the device\n");
173174
printk("pair Enter pairing mode\n");
175+
printk("exit Exit pairing mode\n");
174176
printk("clear Clear stored devices\n");
175177

176178
uint8_t command_info[] = "info";
177179
uint8_t command_uptime[] = "uptime";
178180
uint8_t command_list[] = "list";
179181
uint8_t command_reboot[] = "reboot";
180182
uint8_t command_pair[] = "pair";
183+
uint8_t command_exit[] = "exit";
181184
uint8_t command_clear[] = "clear";
182185

183186
#if DFU_EXISTS
@@ -215,17 +218,15 @@ static void console_thread(void)
215218
}
216219
else if (memcmp(line, command_pair, sizeof(command_pair)) == 0)
217220
{
218-
skip_dfu();
219-
reboot_counter_write(101);
220-
k_msleep(1);
221-
sys_reboot(SYS_REBOOT_WARM);
221+
esb_reset_pair();
222+
}
223+
else if (memcmp(line, command_exit, sizeof(command_exit)) == 0)
224+
{
225+
esb_finish_pair();
222226
}
223227
else if (memcmp(line, command_clear, sizeof(command_clear)) == 0)
224228
{
225-
skip_dfu();
226-
reboot_counter_write(102);
227-
k_msleep(1);
228-
sys_reboot(SYS_REBOOT_WARM);
229+
esb_clear();
229230
}
230231
#if DFU_EXISTS
231232
else if (memcmp(line, command_dfu, sizeof(command_dfu)) == 0)

src/main.c

Lines changed: 2 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -22,80 +22,14 @@
2222
*/
2323
#include "globals.h"
2424
#include "system/system.h"
25-
//#include "timer.h"
26-
#include "connection/esb.h"
2725

2826
#include <zephyr/kernel.h>
29-
#include <zephyr/drivers/gpio.h>
30-
#include <zephyr/sys/reboot.h>
3127

3228
LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);
3329

34-
#define DFU_EXISTS CONFIG_BUILD_OUTPUT_UF2
35-
36-
int main(void) {
30+
int main(void)
31+
{
3732
set_led(SYS_LED_PATTERN_ACTIVE_PERSIST, SYS_LED_PRIORITY_SYSTEM);
3833

39-
uint8_t reboot_counter = reboot_counter_read();
40-
41-
uint8_t reset_mode = reboot_counter - 100;
42-
if (reboot_counter != 100) {
43-
reboot_counter_write(100);
44-
}
45-
46-
clocks_start();
47-
48-
switch (reset_mode) {
49-
case 1:
50-
LOG_INF("Pairing requested");
51-
sys_read(STORED_TRACKERS, &stored_trackers, sizeof(stored_trackers));
52-
for (int i = 0; i < stored_trackers; i++) {
53-
sys_read(
54-
STORED_ADDR_0 + i,
55-
&stored_tracker_addr[i],
56-
sizeof(stored_tracker_addr[0])
57-
);
58-
}
59-
esb_pair(); // this will not return
60-
break;
61-
case 2:
62-
sys_write(STORED_TRACKERS, NULL, &stored_trackers, sizeof(stored_trackers));
63-
LOG_INF("NVS Reset");
64-
LOG_INF("Pairing requested");
65-
esb_pair(); // this will not return
66-
break;
67-
#if DFU_EXISTS // Using Adafruit bootloader
68-
case 3: // DFU_MAGIC_UF2_RESET, Reset mode DFU
69-
LOG_INF("DFU requested");
70-
NRF_POWER->GPREGRET = 0x57;
71-
sys_reboot(SYS_REBOOT_COLD);
72-
#endif
73-
default:
74-
sys_read(STORED_TRACKERS, &stored_trackers, sizeof(stored_trackers));
75-
if (stored_trackers == 0) {
76-
esb_pair(); // this will not return // TODO:
77-
}
78-
for (int i = 0; i < stored_trackers; i++) {
79-
sys_read(
80-
STORED_ADDR_0 + i,
81-
&stored_tracker_addr[i],
82-
sizeof(stored_tracker_addr[0])
83-
);
84-
}
85-
LOG_INF("%d/%d devices stored", stored_trackers, MAX_TRACKERS);
86-
break;
87-
}
88-
89-
// k_msleep(1); // TODO: fixes some weird issue with the device bootlooping, what
90-
//is the cause
91-
92-
esb_receive();
93-
94-
esb_initialize(false);
95-
96-
esb_start_rx();
97-
98-
// timer_init();
99-
10034
return 0;
10135
}

0 commit comments

Comments
 (0)