mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
[hal] Update waitForProgramStart to optionally wait for first notifier (#8932)
This addresses a race condition caused by TimedRobot and other frameworks not creating their first notifier alarm until after signaling program start. Default this to true because it's the most common desired use case when combined with TimedRobot.
This commit is contained in:
@@ -77,7 +77,7 @@ bool GetProgramStarted() {
|
||||
using namespace wpi::hal;
|
||||
|
||||
extern "C" {
|
||||
void HALSIM_WaitForProgramStart(void) {
|
||||
void HALSIM_WaitForProgramStart(HAL_Bool waitForFirstNotifier) {
|
||||
int count = 0;
|
||||
while (!programStarted) {
|
||||
count++;
|
||||
@@ -86,6 +86,17 @@ void HALSIM_WaitForProgramStart(void) {
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
|
||||
// Frameworks observe program start before arming their first notifier alarm.
|
||||
// Wait for that alarm so a following StepTiming() can see and service it.
|
||||
while (waitForFirstNotifier &&
|
||||
HALSIM_GetNextNotifierTimeout() == UINT64_MAX) {
|
||||
count++;
|
||||
if (count % 10 == 0) {
|
||||
wpi::util::print("Waiting for first notifier alarm: {}\n", count);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
}
|
||||
|
||||
void HALSIM_SetProgramStarted(HAL_Bool started) {
|
||||
|
||||
Reference in New Issue
Block a user