Skip to content

Commit 7c3ae42

Browse files
committed
Proper reset handling
1 parent f32e5fc commit 7c3ae42

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

src/ANTPLUS_Defines.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
// Misc
55
#define ANTPLUS_MAX_CHANNELS_POSSIBLE 15
66
#define ANTPLUS_NETWORKKEY_INDEX 0
7+
#define ANTPLUS_DRIVER_RESET_TIMEOUT 2000
8+
9+
// Errors
10+
#define ANTPLUS_RESET_RADIO_FAILED 1
711

812
// State
913
#define ANTPLUS_DRIVER_STATE_UNKNOWN 0

src/MainClasses/ANTPLUS_AntPlusRouter.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ uint8_t AntPlusRouter::setDriver(BaseAntWithCallbacks* driver) {
3333
_ant->onEventFilter(onEventFilterCallback, (uintptr_t)this);
3434
_ant->onSelectiveDataUpdateMaskSetting(onSelectiveDataUpdateMaskSettingCallback, (uintptr_t)this);
3535
_ant->onStartUpMessage(onStartUpMessageCallback, (uintptr_t)this);
36-
resetRadio(ANTPLUS_RESET_WAIT_FOR_STARTUP);
37-
delay(1000); // TODO replace with lock waiting for startup
36+
if (resetRadio(ANTPLUS_RESET_WAIT_FOR_STARTUP)) {
37+
return ANTPLUS_RESET_RADIO_FAILED;
38+
}
3839
pushNetworkKey();
3940
// get max channels
4041
return 0;
@@ -81,7 +82,7 @@ void AntPlusRouter::reset() {
8182
// reset system state
8283
}
8384

84-
void AntPlusRouter::resetRadio(uint8_t waitForStartup) {
85+
uint8_t AntPlusRouter::resetRadio(uint8_t waitForStartup) {
8586
ResetSystem rs;
8687
for (uint8_t i = 0; i < ANTPLUS_MAX_CHANNELS_POSSIBLE; i++) {
8788
if (_profiles[i]) {
@@ -91,8 +92,14 @@ void AntPlusRouter::resetRadio(uint8_t waitForStartup) {
9192
send(rs);
9293
_radioStarted = ANTPLUS_DRIVER_STATE_UNKNOWN;
9394
if (waitForStartup == ANTPLUS_RESET_WAIT_FOR_STARTUP) {
94-
// TODO use driver wait for message once impletmented
95+
StartUpMessage sm = StartUpMessage();
96+
if (_ant->waitFor(sm, ANTPLUS_DRIVER_RESET_TIMEOUT)) {
97+
onStartUpMessage(sm);
98+
} else {
99+
return ANTPLUS_RESET_RADIO_FAILED;
100+
}
95101
}
102+
return 0;
96103
}
97104

98105
void AntPlusRouter::onPacketError(uint8_t error) {
@@ -175,4 +182,5 @@ void AntPlusRouter::onSelectiveDataUpdateMaskSetting(SelectiveDataUpdateMaskSett
175182

176183
void AntPlusRouter::onStartUpMessage(StartUpMessage& msg) {
177184
_radioStarted = ANTPLUS_DRIVER_STATE_STARTED;
185+
// TODO handle radio crash
178186
}

src/MainClasses/ANTPLUS_AntPlusRouter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class AntPlusRouter {
2525
uint8_t getMaxChannels();
2626
void loop();
2727
void reset();
28-
void resetRadio(uint8_t waitForStartup);
28+
uint8_t resetRadio(uint8_t waitForStartup);
2929
/******************************************
3030
*LIBRARY INTERNAL ONLY FUNCTIONS BELOW
3131
******************************************/

0 commit comments

Comments
 (0)