Skip to content

Commit 6afc194

Browse files
committed
esb try to improve pairing
1 parent dcec9e5 commit 6afc194

File tree

1 file changed

+39
-18
lines changed

1 file changed

+39
-18
lines changed

src/connection/esb.c

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)