@@ -67,14 +67,30 @@ void event_handler(struct esb_evt const *event)
6767 LOG_DBG ("TX FAILED" );
6868 break ;
6969 case ESB_EVENT_RX_RECEIVED :
70- // TODO: have to read rx until -ENODATA (or -EACCES/-EINVAL)
70+ LOG_DBG ( "RX" );
7171 // TODO: make tx payload for ack here
72- int err = esb_read_rx_payload ( & rx_payload ) ;
73- if (!err ) // zero, rx success
72+ int err = 0 ;
73+ while (!err ) // zero, rx success
7474 {
75- switch (rx_payload .length )
75+ err = esb_read_rx_payload (& rx_payload );
76+ if (err == - ENODATA )
77+ {
78+ return ;
79+ }
80+ else if (err )
7681 {
77- case 8 :
82+ LOG_ERR ("Error while reading rx packet: %d" , err );
83+ return ;
84+ }
85+ // TODO: split into separate handlers
86+ switch (rx_payload .pipe )
87+ {
88+ case 0 : // base address 0 (pairing address)
89+ if (rx_payload .length != 8 )
90+ {
91+ LOG_ERR ("Wrong packet length: %d" , rx_payload .length );
92+ continue ;
93+ }
7894 LOG_DBG ("rx: %16llX" , * (uint64_t * )rx_payload .data );
7995 memcpy (pairing_buf , rx_payload .data , 8 );
8096 switch (pairing_buf [1 ])
@@ -89,7 +105,11 @@ void event_handler(struct esb_evt const *event)
89105 LOG_INF ("RX Pairing Request" );
90106 break ;
91107 }
92- break ;
108+ continue ;
109+ default : // base address 1
110+ }
111+ switch (rx_payload .length )
112+ {
93113 case 21 : // has sequence number
94114 // TODO : It's a very crude implementation
95115 // But brain hurty, will make a better one later
@@ -117,11 +137,11 @@ void event_handler(struct esb_evt const *event)
117137 case 16 :
118138 uint8_t imu_id = rx_payload .data [1 ];
119139 if (imu_id >= stored_trackers ) // not a stored tracker
120- return ;
140+ continue ;
121141 if (discovered_trackers [imu_id ] < DETECTION_THRESHOLD ) // garbage filtering of nonexistent tracker
122142 {
123143 discovered_trackers [imu_id ]++ ;
124- return ;
144+ continue ;
125145 }
126146 if (rx_payload .data [0 ] > 223 ) // reserved for receiver only
127147 break ;
@@ -132,10 +152,6 @@ void event_handler(struct esb_evt const *event)
132152 break ;
133153 }
134154 }
135- else
136- {
137- LOG_ERR ("Error while reading rx packet: %d" , err );
138- }
139155 break ;
140156 }
141157}
@@ -413,21 +429,26 @@ void esb_pair(void)
413429 }
414430 switch (pairing_buf [1 ])
415431 {
416- case 2 :
417- esb_flush_tx (); // Flush TX buffer for next pairing burst
418- case 255 :
419- break ;
420- default : // first packet in pairing burst
432+ case 0 : // first packet in pairing burst
421433 esb_parse_pair ();
422434 LOG_DBG ("tx: %16llX" , * (uint64_t * )tx_payload_pair .data );
435+ // esb_flush_tx();
423436 esb_write_payload (& tx_payload_pair ); // Add to TX buffer
437+ pairing_buf [1 ] = 255 ; // flag packet processed
438+ k_msleep (10 );
439+ esb_flush_tx (); // Flush TX buffer for next pairing burst
440+ continue ;
441+ case 2 :
442+ esb_flush_tx (); // Flush TX buffer for next pairing burst
443+ case 255 :
444+ default :
424445 break ;
425446 }
426447 pairing_buf [1 ] = 255 ; // flag packet processed
427448 //esb_flush_rx();
428449 //esb_flush_tx();
429450 //esb_write_payload(&tx_payload_pair); // Add to TX buffer
430- k_usleep (100 );
451+ k_usleep (1 );
431452 }
432453 set_led (SYS_LED_PATTERN_OFF , SYS_LED_PRIORITY_CONNECTION );
433454 esb_deinitialize ();
0 commit comments