[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:
Peter Johnson
2026-05-29 23:09:25 -07:00
committed by GitHub
parent 635e971a02
commit 9adffd356d
9 changed files with 44 additions and 15 deletions

View File

@@ -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) {