Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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();
}