void audio_vario_step(float vario) { uint16_t freq; uint16_t length; uint16_t pause; //GET fresh values from table // - climb is float in m/s if ((vario * 100 >= fc.audio_lift || vario * 100 <= fc.audio_sink) && (fc.audio_volume > 0)) { if (vario * 100 >= fc.audio_lift) { //get frequency from the table freq = get_near(vario, fc.buzzer_freq); length = get_near(vario, fc.buzzer_length); pause = get_near(vario, fc.buzzer_pause); } else //XXX: this is hack we need to fix this, so beeps can be used in sink too { //get frequency from the table freq = get_near(vario, fc.buzzer_freq); length = 0; pause = 0; } } else //no threshold was exceeded -> silent { freq = 0; length = 0; pause = 0; } //update audio with new settings audio_set_tone(freq); audio_set_delay(length, pause); }
void audio_vario_step(float vario) { if (config.gui.vario_mute || config.gui.silent & (1 << active_page)) { audio_off(); return; } //climb is float in m/s int16_t ivario = vario * 100; vario_force_change = (abs(ivario - vario_ivario_old) >= 10) ? true: false; vario_ivario_old = ivario; //buzzer if (config.vario.weak_lift_enabled) { int16_t buzz_thold = config.audio_profile.lift - config.vario.weak_lift; if (ivario >= buzz_thold && ivario < config.audio_profile.lift && ivario > config.audio_profile.sink) { int16_t freq; //addition to base weak lift freq (can be negative) int16_t beep_freq = get_near(config.audio_profile.lift / 100.0, config.audio_profile.freq); beep_freq -= config.audio_profile.weak_lift_freq; freq = config.audio_profile.weak_lift_freq + ((int32_t)beep_freq * (int32_t)(ivario - buzz_thold)) / (int32_t)config.vario.weak_lift; if (audio_vario_freq != 0) audio_vario_freq += ((float)freq - audio_vario_freq) / AUDIO_LOW_PASS; else audio_vario_freq = freq; audio_vario_length = 0; audio_vario_pause = 0; audio_vario_apply(); return; } } if ((ivario >= config.audio_profile.lift || ivario <= config.audio_profile.sink) && (config.gui.vario_volume > 0)) { //get frequency from the table uint16_t freq = get_near(vario, config.audio_profile.freq); if (audio_vario_freq != 0) audio_vario_freq += ((float)freq - audio_vario_freq) / AUDIO_LOW_PASS; else audio_vario_freq = freq; //convert ms to timer ticks audio_vario_length = get_near(vario, config.audio_profile.length) * 31; audio_vario_pause = get_near(vario, config.audio_profile.pause) * 31; //update audio with new settings audio_vario_apply(); return; } //no threshold was exceeded -> silent audio_off(); }