@@ -47,6 +47,9 @@ LOG_MODULE_REGISTER(esb_event, LOG_LEVEL_INF);
4747static void esb_packet_filter_thread (void );
4848K_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+
5053void 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+
209219inline 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;
240251static bool esb_paired = false;
241252
242253void 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)
307341static 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+ }
0 commit comments