|
|
|
@ -56,119 +56,24 @@ bool Buzzer::init()
@@ -56,119 +56,24 @@ bool Buzzer::init()
|
|
|
|
|
|
|
|
|
|
// update - updates led according to timed_updated. Should be called at 50Hz
|
|
|
|
|
void Buzzer::update() |
|
|
|
|
{ |
|
|
|
|
update_pattern_to_play(); |
|
|
|
|
update_playing_pattern(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Buzzer::update_pattern_to_play() |
|
|
|
|
{ |
|
|
|
|
// check for arming failed event
|
|
|
|
|
if (AP_Notify::events.arming_failed) { |
|
|
|
|
// arming failed buzz
|
|
|
|
|
play_pattern(SINGLE_BUZZ); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// reduce 50hz call down to 10hz
|
|
|
|
|
_counter++; |
|
|
|
|
if (_counter < 5) { |
|
|
|
|
if (AP_HAL::millis() - _pattern_start_time < _pattern_start_interval_time_ms) { |
|
|
|
|
// do not interrupt playing patterns / enforce minumum separation
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
_counter = 0; |
|
|
|
|
|
|
|
|
|
// complete currently played pattern
|
|
|
|
|
if (_pattern != NONE) { |
|
|
|
|
_pattern_counter++; |
|
|
|
|
switch (_pattern) { |
|
|
|
|
case SINGLE_BUZZ: |
|
|
|
|
// buzz for 10th of a second
|
|
|
|
|
if (_pattern_counter == 1) { |
|
|
|
|
on(true); |
|
|
|
|
}else{ |
|
|
|
|
on(false); |
|
|
|
|
_pattern = NONE; |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
case DOUBLE_BUZZ: |
|
|
|
|
// buzz for 10th of a second
|
|
|
|
|
switch (_pattern_counter) { |
|
|
|
|
case 1: |
|
|
|
|
on(true); |
|
|
|
|
break; |
|
|
|
|
case 2: |
|
|
|
|
on(false); |
|
|
|
|
break; |
|
|
|
|
case 3: |
|
|
|
|
on(true); |
|
|
|
|
break; |
|
|
|
|
case 4: |
|
|
|
|
default: |
|
|
|
|
on(false); |
|
|
|
|
_pattern = NONE; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
case ARMING_BUZZ: |
|
|
|
|
// record start time
|
|
|
|
|
if (_pattern_counter == 1) { |
|
|
|
|
_arming_buzz_start_ms = AP_HAL::millis(); |
|
|
|
|
on(true); |
|
|
|
|
} else { |
|
|
|
|
// turn off buzzer after 3 seconds
|
|
|
|
|
if (AP_HAL::millis() - _arming_buzz_start_ms >= BUZZER_ARMING_BUZZ_MS) { |
|
|
|
|
_arming_buzz_start_ms = 0; |
|
|
|
|
on(false); |
|
|
|
|
_pattern = NONE; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
case BARO_GLITCH: |
|
|
|
|
// four fast tones
|
|
|
|
|
switch (_pattern_counter) { |
|
|
|
|
case 1: |
|
|
|
|
case 3: |
|
|
|
|
case 5: |
|
|
|
|
case 7: |
|
|
|
|
case 9: |
|
|
|
|
on(true); |
|
|
|
|
break; |
|
|
|
|
case 2: |
|
|
|
|
case 4: |
|
|
|
|
case 6: |
|
|
|
|
case 8: |
|
|
|
|
on(false); |
|
|
|
|
break; |
|
|
|
|
case 10: |
|
|
|
|
on(false); |
|
|
|
|
_pattern = NONE; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
// do nothing
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
case EKF_BAD: |
|
|
|
|
// four tones getting shorter)
|
|
|
|
|
switch (_pattern_counter) { |
|
|
|
|
case 1: |
|
|
|
|
case 5: |
|
|
|
|
case 8: |
|
|
|
|
case 10: |
|
|
|
|
on(true); |
|
|
|
|
break; |
|
|
|
|
case 4: |
|
|
|
|
case 7: |
|
|
|
|
case 9: |
|
|
|
|
on(false); |
|
|
|
|
break; |
|
|
|
|
case 11: |
|
|
|
|
on(false); |
|
|
|
|
_pattern = NONE; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
// do nothing
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return; |
|
|
|
|
default: |
|
|
|
|
// do nothing
|
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// check if armed status has changed
|
|
|
|
|
if (_flags.armed != AP_Notify::flags.armed) { |
|
|
|
@ -196,12 +101,33 @@ void Buzzer::update()
@@ -196,12 +101,33 @@ void Buzzer::update()
|
|
|
|
|
// if vehicle lost was enabled, starting beep
|
|
|
|
|
if (AP_Notify::flags.vehicle_lost) { |
|
|
|
|
play_pattern(DOUBLE_BUZZ); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if battery failsafe constantly single buzz
|
|
|
|
|
if (AP_Notify::flags.failsafe_battery) { |
|
|
|
|
play_pattern(SINGLE_BUZZ); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Buzzer::update_playing_pattern() |
|
|
|
|
{ |
|
|
|
|
if (_pattern == 0UL) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const uint32_t now = AP_HAL::millis(); |
|
|
|
|
const uint32_t delta = now - _pattern_start_time; |
|
|
|
|
if (delta >= 3200) { |
|
|
|
|
// finished playing pattern
|
|
|
|
|
on(false); |
|
|
|
|
_pattern = 0UL; |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
const uint32_t bit = delta / 100UL; // each bit is 100ms
|
|
|
|
|
on(_pattern & (1U<<(31-bit))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// on - turns the buzzer on or off
|
|
|
|
@ -220,9 +146,9 @@ void Buzzer::on(bool turn_on)
@@ -220,9 +146,9 @@ void Buzzer::on(bool turn_on)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// play_pattern - plays the defined buzzer pattern
|
|
|
|
|
void Buzzer::play_pattern(BuzzerPattern pattern_id) |
|
|
|
|
void Buzzer::play_pattern(const uint32_t pattern) |
|
|
|
|
{ |
|
|
|
|
_pattern = pattern_id; |
|
|
|
|
_pattern_counter = 0; |
|
|
|
|
_pattern = pattern; |
|
|
|
|
_pattern_start_time = AP_HAL::millis(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|