1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-17 13:25:30 +03:00

Improved arming disabled reason beeps.

This commit is contained in:
mikeller 2018-01-13 18:08:06 +13:00
parent 9df87ea4ba
commit 655c5fabc9
3 changed files with 49 additions and 22 deletions

View file

@ -20,12 +20,13 @@
#include "platform.h" #include "platform.h"
#include "light_led.h"
#include "sound_beeper.h"
#include "drivers/nvic.h"
#include "build/atomic.h" #include "build/atomic.h"
#include "drivers/system.h" #include "drivers/light_led.h"
#include "drivers/nvic.h"
#include "drivers/sound_beeper.h"
#include "system.h"
// cycles per microsecond // cycles per microsecond
static uint32_t usTicks = 0; static uint32_t usTicks = 0;
@ -160,10 +161,6 @@ void delay(uint32_t ms)
delayMicroseconds(1000); delayMicroseconds(1000);
} }
#define SHORT_FLASH_DURATION 50
#define SHORT_FLASH_COUNT 5
#define CODE_FLASH_DURATION 250
static void indicate(uint8_t count, uint16_t duration) static void indicate(uint8_t count, uint16_t duration)
{ {
if (count) { if (count) {
@ -187,11 +184,11 @@ static void indicate(uint8_t count, uint16_t duration)
void indicateFailure(failureMode_e mode, int codeRepeatsRemaining) void indicateFailure(failureMode_e mode, int codeRepeatsRemaining)
{ {
while (codeRepeatsRemaining--) { while (codeRepeatsRemaining--) {
indicate(SHORT_FLASH_COUNT, SHORT_FLASH_DURATION); indicate(WARNING_FLASH_COUNT, WARNING_FLASH_DURATION_MS);
delay(500); delay(WARNING_PAUSE_DURATION_MS);
indicate(mode + 1, CODE_FLASH_DURATION); indicate(mode + 1, WARNING_CODE_DURATION_LONG_MS);
delay(1000); delay(1000);
} }

View file

@ -32,6 +32,12 @@ typedef enum {
FAILURE_GYRO_INIT_FAILED FAILURE_GYRO_INIT_FAILED
} failureMode_e; } failureMode_e;
#define WARNING_FLASH_DURATION_MS 50
#define WARNING_FLASH_COUNT 5
#define WARNING_PAUSE_DURATION_MS 500
#define WARNING_CODE_DURATION_LONG_MS 250
#define WARNING_CODE_DURATION_SHORT_MS 50
// failure // failure
void indicateFailure(failureMode_e mode, int repeatCount); void indicateFailure(failureMode_e mode, int repeatCount);
void failureMode(failureMode_e mode); void failureMode(failureMode_e mode);

View file

@ -27,6 +27,7 @@
#include "drivers/io.h" #include "drivers/io.h"
#include "drivers/pwm_output.h" #include "drivers/pwm_output.h"
#include "drivers/sound_beeper.h" #include "drivers/sound_beeper.h"
#include "drivers/system.h"
#include "drivers/time.h" #include "drivers/time.h"
#include "flight/mixer.h" #include "flight/mixer.h"
@ -34,7 +35,6 @@
#include "fc/config.h" #include "fc/config.h"
#include "fc/runtime_config.h" #include "fc/runtime_config.h"
#include "io/beeper.h"
#include "io/statusindicator.h" #include "io/statusindicator.h"
#include "io/vtx_control.h" #include "io/vtx_control.h"
@ -47,6 +47,8 @@
#include "sensors/battery.h" #include "sensors/battery.h"
#include "sensors/sensors.h" #include "sensors/sensors.h"
#include "beeper.h"
#ifdef BEEPER_INVERTED #ifdef BEEPER_INVERTED
#define IS_OPEN_DRAIN false #define IS_OPEN_DRAIN false
#define IS_INVERTED true #define IS_INVERTED true
@ -157,6 +159,8 @@ static uint8_t beep_multiBeeps[MAX_MULTI_BEEPS + 1];
#define BEEPER_CONFIRMATION_BEEP_DURATION 2 #define BEEPER_CONFIRMATION_BEEP_DURATION 2
#define BEEPER_CONFIRMATION_BEEP_GAP_DURATION 20 #define BEEPER_CONFIRMATION_BEEP_GAP_DURATION 20
#define BEEPER_WARNING_LONG_BEEP_MULTIPLIER 5
#define BEEPER_WARNING_BEEP_1_DURATION 20 #define BEEPER_WARNING_BEEP_1_DURATION 20
#define BEEPER_WARNING_BEEP_2_DURATION 5 #define BEEPER_WARNING_BEEP_2_DURATION 5
#define BEEPER_WARNING_BEEP_GAP_DURATION 10 #define BEEPER_WARNING_BEEP_GAP_DURATION 10
@ -301,17 +305,37 @@ void beeperConfirmationBeeps(uint8_t beepCount)
void beeperWarningBeeps(uint8_t beepCount) void beeperWarningBeeps(uint8_t beepCount)
{ {
uint32_t i = 0; uint8_t longBeepCount = beepCount / BEEPER_WARNING_LONG_BEEP_MULTIPLIER;
uint32_t cLimit = beepCount * 4; uint8_t shortBeepCount = beepCount % BEEPER_WARNING_LONG_BEEP_MULTIPLIER;
if (cLimit >= MAX_MULTI_BEEPS) {
cLimit = MAX_MULTI_BEEPS; unsigned i = 0;
unsigned count = 0;
while (i < MAX_MULTI_BEEPS - 1 && count < WARNING_FLASH_COUNT) {
beep_multiBeeps[i++] = WARNING_FLASH_DURATION_MS / 10;
if (++count < WARNING_FLASH_COUNT) {
beep_multiBeeps[i++] = WARNING_FLASH_DURATION_MS / 10;
} else {
beep_multiBeeps[i++] = WARNING_PAUSE_DURATION_MS / 10;
} }
do { }
beep_multiBeeps[i++] = BEEPER_WARNING_BEEP_1_DURATION;
beep_multiBeeps[i++] = BEEPER_WARNING_BEEP_GAP_DURATION; while (i < MAX_MULTI_BEEPS - 1 && longBeepCount > 0) {
beep_multiBeeps[i++] = BEEPER_WARNING_BEEP_2_DURATION; beep_multiBeeps[i++] = WARNING_CODE_DURATION_LONG_MS / 10;
beep_multiBeeps[i++] = BEEPER_WARNING_BEEP_GAP_DURATION; if (--longBeepCount > 0) {
} while (i < cLimit); beep_multiBeeps[i++] = WARNING_CODE_DURATION_LONG_MS / 10;
} else {
beep_multiBeeps[i++] = WARNING_PAUSE_DURATION_MS / 10;
}
}
while (i < MAX_MULTI_BEEPS - 1 && shortBeepCount > 0) {
beep_multiBeeps[i++] = WARNING_CODE_DURATION_SHORT_MS / 10;
if (--shortBeepCount > 0) {
beep_multiBeeps[i++] = WARNING_CODE_DURATION_LONG_MS / 10;
}
}
beep_multiBeeps[i] = BEEPER_COMMAND_STOP; beep_multiBeeps[i] = BEEPER_COMMAND_STOP;
beeper(BEEPER_MULTI_BEEPS); beeper(BEEPER_MULTI_BEEPS);