@@ -1042,7 +1042,7 @@ void handleGnssDataTask(void *e)
10421042 slowConsumer = " SD card" ;
10431043 }
10441044 } // bytesToSend
1045- } // End connected
1045+ } // End connected
10461046
10471047 // ----------------------------------------------------------------------
10481048 // Update the available space in the ring buffer
@@ -1230,18 +1230,74 @@ void tickerBatteryLedUpdate()
12301230 }
12311231}
12321232
1233+ enum BeepState
1234+ {
1235+ BEEP_OFF = 0 ,
1236+ BEEP_ON,
1237+ BEEP_QUIET,
1238+ };
1239+ BeepState beepState = BEEP_OFF;
1240+
12331241// Control the length of time the beeper makes noise
1242+ // We move through a simple state machine in order to handle multiple types of beeps (see beepMultiple())
12341243void tickerBeepUpdate ()
12351244{
12361245 if (present.beeper == true )
12371246 {
1238- if (beepStopMs > 0 )
1247+ switch (beepState )
12391248 {
1240- if (millis () >= beepStopMs)
1249+ default :
1250+ if (beepState != BEEP_OFF)
1251+ beepState = BEEP_OFF;
1252+ break ;
1253+
1254+ case BEEP_OFF:
1255+ if (beepLengthMs > 0 )
1256+ {
1257+ beepNextEventMs = millis () + beepLengthMs;
1258+ beepOn ();
1259+ beepState = BEEP_ON;
1260+ }
1261+ break ;
1262+
1263+ case BEEP_ON:
1264+ if (millis () >= beepNextEventMs)
1265+ {
1266+ if (beepCount == 1 )
1267+ {
1268+ beepLengthMs = 0 ; // Stop state machine
1269+ beepState = BEEP_OFF;
1270+ beepOff ();
1271+ }
1272+ else
1273+ {
1274+ beepNextEventMs = millis () + beepQuietLengthMs;
1275+ beepState = BEEP_QUIET;
1276+ beepOff ();
1277+ }
1278+ }
1279+ break ;
1280+
1281+ case BEEP_QUIET:
1282+ if (millis () >= beepNextEventMs)
12411283 {
1242- beepStopMs = 0 ; // Signal the beeper is off
1243- beepOff ();
1284+ beepCount--;
1285+
1286+ if (beepCount == 0 )
1287+ {
1288+ // We should not be here, but just in case
1289+ beepLengthMs = 0 ; // Stop state machine
1290+ beepState = BEEP_OFF;
1291+ beepOff ();
1292+ }
1293+ else
1294+ {
1295+ beepNextEventMs = millis () + beepLengthMs;
1296+ beepState = BEEP_ON;
1297+ beepOn ();
1298+ }
12441299 }
1300+ break ;
12451301 }
12461302 }
12471303}
@@ -1359,18 +1415,23 @@ void buttonCheckTask(void *e)
13591415
13601416 // The RTK Torch uses a shutdown IC configured to turn off ~3s
13611417 // Beep shortly before the shutdown IC takes over
1362- else if (userBtn->pressedFor (2500 ))
1418+ else if (userBtn->pressedFor (2100 ))
13631419 {
1364- // Beep if we are not locally compiled or a release candidate
1365- if (ENABLE_DEVELOPER == false )
1366- beepDurationMs (500 ); // Announce powering down
1367-
13681420 tickerStop (); // Stop controlling LEDs via ticker task
13691421
13701422 gnssStatusLedOn ();
13711423 bluetoothLedOn ();
1424+
1425+ // Beep if we are not locally compiled or a release candidate
1426+ if (ENABLE_DEVELOPER == false )
1427+ {
1428+ // Announce powering down
1429+ beepMultiple (3 , 100 , 50 ); // Number of beeps, length of beep ms, length of quiet ms
1430+
1431+ delay (500 ); // We will be shutting off during this delay but this prevents another beepMultiple() from firing
1432+ }
13721433 }
1373- } // End productVariant == Torch
1434+ } // End productVariant == Torch
13741435 else // RTK EVK, RTK Facet v2, RTK Facet mosaic
13751436 {
13761437 if (systemState == STATE_SHUTDOWN)
@@ -1477,7 +1538,7 @@ void buttonCheckTask(void *e)
14771538 // requestChangeState(STATE_BASE_NOT_STARTED);
14781539 break ;
14791540 } // End singleTap switch (systemState)
1480- } // End singleTap
1541+ } // End singleTap
14811542 else if (doubleTap && (firstRoverStart == false ) && (settings.disableSetupButton == false ))
14821543 {
14831544 switch (systemState)
@@ -1516,8 +1577,8 @@ void buttonCheckTask(void *e)
15161577 // requestChangeState(STATE_BASE_NOT_STARTED);
15171578 break ;
15181579 } // End doubleTap switch (systemState)
1519- } // End doubleTap
1520- } // End productVariant != Torch
1580+ } // End doubleTap
1581+ } // End productVariant != Torch
15211582
15221583 feedWdt ();
15231584 taskYIELD ();
0 commit comments