diff --git a/components/squeezelite/output_i2s.c b/components/squeezelite/output_i2s.c index 0ea78dfc..8bfd4b33 100644 --- a/components/squeezelite/output_i2s.c +++ b/components/squeezelite/output_i2s.c @@ -162,6 +162,11 @@ static void spdif_convert(ISAMPLE_T *src, size_t frames, u32_t *dst, size_t *cou #define TAS575x 0x98 #define TAS578x 0x90 +static struct { + float sum, avg; + u16_t count; +} battery; + struct tas57xx_cmd_s { u8_t reg; u8_t value; @@ -245,9 +250,6 @@ void output_init_i2s(log_level level, char *device, unsigned output_buf_size, ch if (ret != ESP_OK) { LOG_ERROR("could not intialize TAS57xx %d", ret); } - - // activate analogue output if needed - if (!jack_mutes_amp) dac_cmd(DAC_ANALOGUE_ON); #endif #ifdef CONFIG_I2S_BITS_PER_CHANNEL @@ -378,7 +380,6 @@ void output_close_i2s(void) { */ bool output_volume_i2s(unsigned left, unsigned right) { #ifdef TAS57xx - if (!spdif) { LOG_INFO("TAS57xx volume (L:%u R:%u)", left, right); gpio_set_level(VOLUME_GPIO, left || right); @@ -386,7 +387,6 @@ bool output_volume_i2s(unsigned left, unsigned right) { #endif return false; } - /**************************************************************************************** * Write frames to the output buffer @@ -472,8 +472,17 @@ static void *output_thread_i2s() { if (state != output.state) { LOG_INFO("Output state is %d", output.state); if (output.state == OUTPUT_OFF) led_blink(LED_GREEN, 100, 2500); - else if (output.state == OUTPUT_STOPPED) led_blink(LED_GREEN, 200, 1000); - else if (output.state == OUTPUT_RUNNING) led_on(LED_GREEN); + else if (output.state == OUTPUT_STOPPED) { +#ifdef TAS57xx + dac_cmd(DAC_ANALOGUE_OFF); +#endif + led_blink(LED_GREEN, 200, 1000); + } else if (output.state == OUTPUT_RUNNING) { +#ifdef TAS57xx + if (!jack_mutes_amp || (jack_mutes_amp && jack_status)) dac_cmd(DAC_ANALOGUE_ON); +#endif + led_on(LED_GREEN); + } } state = output.state; @@ -574,11 +583,17 @@ static void *output_thread_i2s() { * Stats output thread */ static void *output_thread_i2s_stats() { - //return; + while (running) { #ifdef TAS57xx - LOG_INFO("Jack %d Voltage %.2fV", !gpio_get_level(JACK_GPIO), adc1_get_raw(ADC1_CHANNEL_7) / 4095. * (10+174)/10. * 1.1); + battery.sum += adc1_get_raw(ADC1_CHANNEL_7) / 4095. * (10+174)/10. * 1.1; + if (++battery.count == (300 * 1000) / STATS_PERIOD_MS) { + battery.avg = battery.sum / battery.count; + battery.sum = battery.count = 0; + LOG_INFO("Voltage %.2fV", battery.avg); + } #endif + LOCK; output_state state = output.state; UNLOCK;