// update - updates led according to timed_updated. Should be called at 50Hz void ToneAlarm_PX4::update() { // exit immediately if we haven't initialised successfully if (_tonealarm_fd == -1) { return; } // exit if buzzer is not enabled if (pNotify->buzzer_enabled() == false) { return; } check_cont_tone(); if (AP_Notify::flags.compass_cal_running != flags.compass_cal_running) { if(AP_Notify::flags.compass_cal_running) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_COMPASS_CALIBRATING_CTS); play_tone(AP_NOTIFY_PX4_TONE_QUIET_POS_FEEDBACK); } else { if(_cont_tone_playing == AP_NOTIFY_PX4_TONE_QUIET_COMPASS_CALIBRATING_CTS) { stop_cont_tone(); } } } flags.compass_cal_running = AP_Notify::flags.compass_cal_running; if (AP_Notify::events.compass_cal_canceled) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEU_FEEDBACK); return; } if (AP_Notify::events.initiated_compass_cal) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEU_FEEDBACK); return; } if (AP_Notify::events.compass_cal_saved) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_READY_OR_FINISHED); return; } if (AP_Notify::events.compass_cal_failed) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); return; } // don't play other tones if compass cal is running if (AP_Notify::flags.compass_cal_running) { return; } // notify the user when autotune or mission completes if (AP_Notify::flags.armed && (AP_Notify::events.autotune_complete || AP_Notify::events.mission_complete)) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_READY_OR_FINISHED); } //notify the user when autotune fails if (AP_Notify::flags.armed && (AP_Notify::events.autotune_failed)) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_NEG_FEEDBACK); } // notify the user when a waypoint completes if (AP_Notify::events.waypoint_complete) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_WP_COMPLETE); } // notify the user when their mode change was successful if (AP_Notify::events.user_mode_change) { if (AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_NEU_FEEDBACK); } else { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEU_FEEDBACK); } } // notify the user when their mode change failed if (AP_Notify::events.user_mode_change_failed) { if (AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_NEG_FEEDBACK); } else { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); } } // failsafe initiated mode change if(AP_Notify::events.failsafe_mode_change) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_ATTENTION_NEEDED); } // notify the user when arming fails if (AP_Notify::events.arming_failed) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); } // notify the user when RC contact is lost if (flags.failsafe_radio != AP_Notify::flags.failsafe_radio) { flags.failsafe_radio = AP_Notify::flags.failsafe_radio; if (flags.failsafe_radio) { // armed case handled by events.failsafe_mode_change if (!AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); } } else { if (AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_POS_FEEDBACK); } else { play_tone(AP_NOTIFY_PX4_TONE_QUIET_POS_FEEDBACK); } } } // notify the user when pre_arm checks are passing if (flags.pre_arm_check != AP_Notify::flags.pre_arm_check) { flags.pre_arm_check = AP_Notify::flags.pre_arm_check; if (flags.pre_arm_check) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_READY_OR_FINISHED); } } // check if arming status has changed if (flags.armed != AP_Notify::flags.armed) { flags.armed = AP_Notify::flags.armed; if (flags.armed) { // arming tune play_tone(AP_NOTIFY_PX4_TONE_QUIET_ARMING_WARNING); }else{ // disarming tune play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEU_FEEDBACK); stop_cont_tone(); } } // check if battery status has changed if (flags.failsafe_battery != AP_Notify::flags.failsafe_battery) { flags.failsafe_battery = AP_Notify::flags.failsafe_battery; if (flags.failsafe_battery) { // battery warning tune play_tone(AP_NOTIFY_PX4_TONE_LOUD_BATTERY_ALERT_CTS); } } // check parachute release if (flags.parachute_release != AP_Notify::flags.parachute_release) { flags.parachute_release = AP_Notify::flags.parachute_release; if (flags.parachute_release) { // parachute release warning tune play_tone(AP_NOTIFY_PX4_TONE_LOUD_ATTENTION_NEEDED); } } // lost vehicle tone if (flags.vehicle_lost != AP_Notify::flags.vehicle_lost) { flags.vehicle_lost = AP_Notify::flags.vehicle_lost; if (flags.vehicle_lost) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_VEHICLE_LOST_CTS); } else { stop_cont_tone(); } } // waiting to be thrown vehicle tone if (flags.waiting_for_throw != AP_Notify::flags.waiting_for_throw) { flags.waiting_for_throw = AP_Notify::flags.waiting_for_throw; if (flags.waiting_for_throw) { play_tone(AP_NOTIFY_PX4_TONE_WAITING_FOR_THROW); } else { stop_cont_tone(); } } if (AP_Notify::events.tune_started) { play_tone(AP_NOTIFY_PX4_TONE_TUNING_START); AP_Notify::events.tune_started = 0; } if (AP_Notify::events.tune_next) { // signify which parameter in the set is starting play_tone(AP_NOTIFY_PX4_TONE_LOUD_1 + (AP_Notify::events.tune_next-1)); AP_Notify::events.tune_next = 0; } if (AP_Notify::events.tune_save) { play_tone(AP_NOTIFY_PX4_TONE_TUNING_SAVE); AP_Notify::events.tune_save = 0; } if (AP_Notify::events.tune_error) { play_tone(AP_NOTIFY_PX4_TONE_TUNING_ERROR); AP_Notify::events.tune_error = 0; } }
// update - updates led according to timed_updated. Should be called at 50Hz void ToneAlarm_PX4::update() { // exit immediately if we haven't initialised successfully if (_tonealarm_fd == -1) { return; } check_cont_tone(); // notify the user when autotune or mission completes if (AP_Notify::flags.armed && (AP_Notify::events.autotune_complete || AP_Notify::events.mission_complete)) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_READY_OR_FINISHED); } //notify the user when autotune fails if (AP_Notify::flags.armed && (AP_Notify::events.autotune_failed)) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_NEG_FEEDBACK); } // notify the user when a waypoint completes if (AP_Notify::events.waypoint_complete) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_WP_COMPLETE); } // notify the user when their mode change was successful if (AP_Notify::events.user_mode_change) { if (AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_NEU_FEEDBACK); } else { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEU_FEEDBACK); } } // notify the user when their mode change failed if (AP_Notify::events.user_mode_change_failed) { if (AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_NEG_FEEDBACK); } else { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); } } // failsafe initiated mode change if(AP_Notify::events.failsafe_mode_change) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_ATTENTION_NEEDED); } // notify the user when arming fails if (AP_Notify::events.arming_failed) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); } // notify the user when RC contact is lost if (flags.failsafe_radio != AP_Notify::flags.failsafe_radio) { flags.failsafe_radio = AP_Notify::flags.failsafe_radio; if (flags.failsafe_radio) { // armed case handled by events.failsafe_mode_change if (!AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEG_FEEDBACK); } } else { if (AP_Notify::flags.armed) { play_tone(AP_NOTIFY_PX4_TONE_LOUD_POS_FEEDBACK); } else { play_tone(AP_NOTIFY_PX4_TONE_QUIET_POS_FEEDBACK); } } } // notify the user when pre_arm checks are passing if (flags.pre_arm_check != AP_Notify::flags.pre_arm_check) { flags.pre_arm_check = AP_Notify::flags.pre_arm_check; if (flags.pre_arm_check) { play_tone(AP_NOTIFY_PX4_TONE_QUIET_READY_OR_FINISHED); } } // check if arming status has changed if (flags.armed != AP_Notify::flags.armed) { flags.armed = AP_Notify::flags.armed; if (flags.armed) { // arming tune play_tone(AP_NOTIFY_PX4_TONE_QUIET_ARMING_WARNING); }else{ // disarming tune play_tone(AP_NOTIFY_PX4_TONE_QUIET_NEU_FEEDBACK); stop_cont_tone(); } } // check if battery status has changed if (flags.failsafe_battery != AP_Notify::flags.failsafe_battery) { flags.failsafe_battery = AP_Notify::flags.failsafe_battery; if (flags.failsafe_battery) { // battery warning tune play_tone(AP_NOTIFY_PX4_TONE_LOUD_BATTERY_ALERT_CTS); } } // check parachute release if (flags.parachute_release != AP_Notify::flags.parachute_release) { flags.parachute_release = AP_Notify::flags.parachute_release; if (flags.parachute_release) { // parachute release warning tune play_tone(AP_NOTIFY_PX4_TONE_LOUD_ATTENTION_NEEDED); } } }