/* * Beeper handler function to be called periodically in loop. Updates beeper * state via time schedule. */ void beeperUpdate(timeUs_t currentTimeUs) { // If beeper option from AUX switch has been selected if (IS_RC_MODE_ACTIVE(BOXBEEPERON)) { beeper(BEEPER_RX_SET); #ifdef USE_GPS } else if (feature(FEATURE_GPS) && IS_RC_MODE_ACTIVE(BOXBEEPGPSCOUNT)) { beeperGpsStatus(); #endif } // Beeper routine doesn't need to update if there aren't any sounds ongoing if (currentBeeperEntry == NULL) { return; } if (beeperNextToggleTime > currentTimeUs) { return; } if (!beeperIsOn) { beeperIsOn = 1; #ifdef USE_DSHOT if (!areMotorsRunning() && beeperConfig()->dshotBeaconTone && (beeperConfig()->dshotBeaconTone <= DSHOT_CMD_BEACON5) && (currentBeeperEntry->mode == BEEPER_RX_SET || currentBeeperEntry->mode == BEEPER_RX_LOST)) { pwmDisableMotors(); delay(1); pwmWriteDshotCommand(ALL_MOTORS, getMotorCount(), beeperConfig()->dshotBeaconTone); pwmEnableMotors(); } #endif if (currentBeeperEntry->sequence[beeperPos] != 0) { if (!(getBeeperOffMask() & (1 << (currentBeeperEntry->mode - 1)))) BEEP_ON; warningLedEnable(); warningLedRefresh(); // if this was arming beep then mark time (for blackbox) if ( beeperPos == 0 && (currentBeeperEntry->mode == BEEPER_ARMING || currentBeeperEntry->mode == BEEPER_ARMING_GPS_FIX) ) { armingBeepTimeMicros = micros(); } } } else { beeperIsOn = 0; if (currentBeeperEntry->sequence[beeperPos] != 0) { BEEP_OFF; warningLedDisable(); warningLedRefresh(); } } beeperProcessCommand(currentTimeUs); }
/* * Beeper handler function to be called periodically in loop. Updates beeper * state via time schedule. */ void beeperUpdate(void) { // If beeper option from AUX switch has been selected if (IS_RC_MODE_ACTIVE(BOXBEEPERON)) { #ifdef GPS if (feature(FEATURE_GPS)) { beeperGpsStatus(); } else { beeper(BEEPER_RX_SET); } #else beeper(BEEPER_RX_SET); #endif } // Beeper routine doesn't need to update if there aren't any sounds ongoing if (currentBeeperEntry == NULL) { return; } uint32_t now = millis(); if (beeperNextToggleTime > now) { return; } if (!beeperIsOn) { beeperIsOn = 1; if (currentBeeperEntry->sequence[beeperPos] != 0) { if (!(getBeeperOffMask() & (1 << (currentBeeperEntry->mode - 1)))) BEEP_ON; warningLedEnable(); warningLedRefresh(); // if this was arming beep then mark time (for blackbox) if ( beeperPos == 0 && (currentBeeperEntry->mode == BEEPER_ARMING || currentBeeperEntry->mode == BEEPER_ARMING_GPS_FIX) ) { armingBeepTimeMicros = micros(); } } } else { beeperIsOn = 0; if (currentBeeperEntry->sequence[beeperPos] != 0) { BEEP_OFF; warningLedDisable(); warningLedRefresh(); } } beeperProcessCommand(); }