From bb1266ed5dc6782977af92b0080a37a871751566 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sun, 26 Apr 2020 12:56:56 -0700 Subject: [PATCH 01/27] more AirPlay - release --- components/squeezelite/decode_external.c | 84 +++++++++++++----------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/components/squeezelite/decode_external.c b/components/squeezelite/decode_external.c index e51789bc..98b3ed50 100644 --- a/components/squeezelite/decode_external.c +++ b/components/squeezelite/decode_external.c @@ -43,15 +43,15 @@ static bool enable_bt_sink; static bool enable_airplay; #define RAOP_OUTPUT_SIZE (RAOP_SAMPLE_RATE * 2 * 2 * 2 * 1.2) -#define SYNC_WIN_RUN 32 +#define SYNC_WIN_SLOW 32 #define SYNC_WIN_CHECK 8 -#define SYNC_WIN_START 2 +#define SYNC_WIN_FAST 2 static raop_event_t raop_state; static EXT_RAM_ATTR struct { - bool enabled; - int sum, count, win, errors[SYNC_WIN_RUN]; + bool enabled, init; + int sum, count, win, errors[SYNC_WIN_SLOW]; s32_t len; u32_t start_time, playtime; } raop_sync; @@ -181,6 +181,21 @@ static void raop_sink_data_handler(const uint8_t *data, uint32_t len, u32_t play sink_data_handler(data, len); } +/**************************************************************************************** + * AirPlay apply sync + */ +static void resync(int error) { + if (error < 0) { + output.skip_frames = -(error * RAOP_SAMPLE_RATE) / 1000; + output.state = OUTPUT_SKIP_FRAMES; + LOG_INFO("skipping %u frames (count:%d)", output.skip_frames, raop_sync.count); + } else { + output.pause_frames = (error * RAOP_SAMPLE_RATE) / 1000; + output.state = OUTPUT_PAUSE_FRAMES; + LOG_INFO("pausing for %u frames (count: %d)", output.pause_frames, raop_sync.count); + } +} + /**************************************************************************************** * AirPlay sink command handler */ @@ -202,15 +217,21 @@ static bool raop_sink_cmd_handler(raop_event_t event, va_list args) u32_t ms, now = gettime_ms(); int error; - if (!raop_sync.enabled || output.state < OUTPUT_RUNNING || output.frames_played_dmp < output.device_frames) break; + if (!raop_sync.enabled || output.state != OUTPUT_RUNNING || output.frames_played_dmp < output.device_frames) break; - // first must make sure we started on time - if (raop_sync.win == SYNC_WIN_START) { + // do one (only one) time-based adjustement in case we started totally off) + if (raop_sync.init) { // how many ms have we really played ms = now - output.updated + ((output.frames_played_dmp - output.device_frames) * 10) / (RAOP_SAMPLE_RATE / 100); error = ms - (now - raop_sync.start_time); - + resync(error); + LOG_INFO("backend played %u, desired %u, (delta:%d)", ms, now - raop_sync.start_time, error); + + raop_sync.init = false; + raop_sync.win = SYNC_WIN_FAST; + raop_sync.sum = raop_sync.count = 0 ; + memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); } else { u32_t level = _buf_used(outputbuf); @@ -224,37 +245,24 @@ static bool raop_sink_cmd_handler(raop_event_t event, va_list args) LOG_INFO("head local:%d, remote:%d (delta:%d)", ms, raop_sync.playtime - now, error); LOG_INFO("obuf:%u, sync_len:%u, devframes:%u, inproc:%u", _buf_used(outputbuf), raop_sync.len, output.device_frames, output.frames_in_process); } - } - // calculate sum, error and update sliding window - raop_sync.errors[raop_sync.count++ % raop_sync.win] = error; - raop_sync.sum += error; - error = raop_sync.sum / min(raop_sync.count, raop_sync.win); + // calculate sum, error and update sliding window + raop_sync.errors[raop_sync.count++ % raop_sync.win] = error; + raop_sync.sum += error; + error = raop_sync.sum / min(raop_sync.count, raop_sync.win); - // move to normal mode if possible - if (raop_sync.win == SYNC_WIN_START && raop_sync.count >= SYNC_WIN_START && abs(error) < 10) { - raop_sync.win = SYNC_WIN_RUN; - LOG_INFO("switching to slow sync mode %u", raop_sync.win); - } + // move to normal mode if possible + if (raop_sync.win == SYNC_WIN_FAST && raop_sync.count >= SYNC_WIN_FAST && abs(error) < 10) { + raop_sync.win = SYNC_WIN_SLOW; + LOG_INFO("switching to slow sync mode %u", raop_sync.win); + } - // wait till e have enough data or there is a strong deviation - if ((raop_sync.count >= raop_sync.win && abs(error) > 10) || (raop_sync.count >= SYNC_WIN_CHECK && abs(error) > 100)) { - - // correct if needed - if (error < 0) { - output.skip_frames = -(error * RAOP_SAMPLE_RATE) / 1000; - output.state = OUTPUT_SKIP_FRAMES; - LOG_INFO("skipping %u frames (count:%d)", output.skip_frames, raop_sync.count); - } else { - output.pause_frames = (error * RAOP_SAMPLE_RATE) / 1000; - output.state = OUTPUT_PAUSE_FRAMES; - LOG_INFO("pausing for %u frames (count: %d)", output.pause_frames, raop_sync.count); - } - - // reset sliding window - raop_sync.sum = raop_sync.count = 0; - memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); - + // wait till we have enough data or there is a strong deviation + if ((raop_sync.count >= raop_sync.win && abs(error) > 10) || (raop_sync.count >= SYNC_WIN_CHECK && abs(error) > 100)) { + resync(error); + raop_sync.sum = raop_sync.count = 0; + memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); + } } break; @@ -271,9 +279,7 @@ static bool raop_sink_cmd_handler(raop_event_t event, va_list args) case RAOP_STREAM: LOG_INFO("Stream", NULL); raop_state = event; - raop_sync.win = SYNC_WIN_START; - raop_sync.sum = raop_sync.count = 0 ; - memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); + raop_sync.init = true; raop_sync.enabled = !strcasestr(output.device, "BT"); output.next_sample_rate = output.current_sample_rate = RAOP_SAMPLE_RATE; break; From f0d5c1da0173f199824fbf2eece4b39f4d8551fb Mon Sep 17 00:00:00 2001 From: Philippe G Date: Tue, 28 Apr 2020 14:44:29 -0700 Subject: [PATCH 02/27] AirPlay: moveback to simplified sync - release --- components/squeezelite/decode_external.c | 110 ++++++++++------------- 1 file changed, 47 insertions(+), 63 deletions(-) diff --git a/components/squeezelite/decode_external.c b/components/squeezelite/decode_external.c index 98b3ed50..6d718e5a 100644 --- a/components/squeezelite/decode_external.c +++ b/components/squeezelite/decode_external.c @@ -50,7 +50,7 @@ static bool enable_airplay; static raop_event_t raop_state; static EXT_RAM_ATTR struct { - bool enabled, init; + bool enabled; int sum, count, win, errors[SYNC_WIN_SLOW]; s32_t len; u32_t start_time, playtime; @@ -181,21 +181,6 @@ static void raop_sink_data_handler(const uint8_t *data, uint32_t len, u32_t play sink_data_handler(data, len); } -/**************************************************************************************** - * AirPlay apply sync - */ -static void resync(int error) { - if (error < 0) { - output.skip_frames = -(error * RAOP_SAMPLE_RATE) / 1000; - output.state = OUTPUT_SKIP_FRAMES; - LOG_INFO("skipping %u frames (count:%d)", output.skip_frames, raop_sync.count); - } else { - output.pause_frames = (error * RAOP_SAMPLE_RATE) / 1000; - output.state = OUTPUT_PAUSE_FRAMES; - LOG_INFO("pausing for %u frames (count: %d)", output.pause_frames, raop_sync.count); - } -} - /**************************************************************************************** * AirPlay sink command handler */ @@ -214,55 +199,52 @@ static bool raop_sink_cmd_handler(raop_event_t event, va_list args) // this is async, so player might have been deleted switch (event) { case RAOP_TIMING: { - u32_t ms, now = gettime_ms(); - int error; if (!raop_sync.enabled || output.state != OUTPUT_RUNNING || output.frames_played_dmp < output.device_frames) break; - - // do one (only one) time-based adjustement in case we started totally off) - if (raop_sync.init) { - // how many ms have we really played - ms = now - output.updated + ((output.frames_played_dmp - output.device_frames) * 10) / (RAOP_SAMPLE_RATE / 100); - error = ms - (now - raop_sync.start_time); - resync(error); - - LOG_INFO("backend played %u, desired %u, (delta:%d)", ms, now - raop_sync.start_time, error); - - raop_sync.init = false; - raop_sync.win = SYNC_WIN_FAST; - raop_sync.sum = raop_sync.count = 0 ; - memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); - } else { - u32_t level = _buf_used(outputbuf); - - // in how many ms will the most recent block play - ms = (((s32_t)(level - raop_sync.len) / BYTES_PER_FRAME + output.device_frames + output.frames_in_process) * 10) / (RAOP_SAMPLE_RATE / 100) - (s32_t) (now - output.updated); - - // when outputbuf is empty, it means we have a network black-out or something - error = level ? (raop_sync.playtime - now) - ms : 0; - - if (loglevel == lDEBUG || !level) { - LOG_INFO("head local:%d, remote:%d (delta:%d)", ms, raop_sync.playtime - now, error); - LOG_INFO("obuf:%u, sync_len:%u, devframes:%u, inproc:%u", _buf_used(outputbuf), raop_sync.len, output.device_frames, output.frames_in_process); - } - - // calculate sum, error and update sliding window - raop_sync.errors[raop_sync.count++ % raop_sync.win] = error; - raop_sync.sum += error; - error = raop_sync.sum / min(raop_sync.count, raop_sync.win); - - // move to normal mode if possible - if (raop_sync.win == SYNC_WIN_FAST && raop_sync.count >= SYNC_WIN_FAST && abs(error) < 10) { - raop_sync.win = SYNC_WIN_SLOW; - LOG_INFO("switching to slow sync mode %u", raop_sync.win); - } - // wait till we have enough data or there is a strong deviation - if ((raop_sync.count >= raop_sync.win && abs(error) > 10) || (raop_sync.count >= SYNC_WIN_CHECK && abs(error) > 100)) { - resync(error); - raop_sync.sum = raop_sync.count = 0; - memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); - } + u32_t ms, now = gettime_ms(); + u32_t level = _buf_used(outputbuf); + int error; + + // in how many ms will the most recent block play + ms = (((s32_t)(level - raop_sync.len) / BYTES_PER_FRAME + output.device_frames + output.frames_in_process) * 10) / (RAOP_SAMPLE_RATE / 100) - (s32_t) (now - output.updated); + + // when outputbuf is empty, it means we have a network black-out or something + error = level ? (raop_sync.playtime - now) - ms : 0; + + if (loglevel == lDEBUG || !level) { + LOG_INFO("head local:%d, remote:%d (delta:%d)", ms, raop_sync.playtime - now, error); + LOG_INFO("obuf:%u, sync_len:%u, devframes:%u, inproc:%u", _buf_used(outputbuf), raop_sync.len, output.device_frames, output.frames_in_process); + } + + // calculate sum, error and update sliding window + raop_sync.errors[raop_sync.count++ % raop_sync.win] = error; + raop_sync.sum += error; + error = raop_sync.sum / min(raop_sync.count, raop_sync.win); + + // wait till we have enough data or there is a strong deviation + if ((raop_sync.count >= raop_sync.win && abs(error) > 10) || (raop_sync.count >= SYNC_WIN_CHECK && abs(error) > 100)) { + if (error < 0) { + output.skip_frames = -(error * RAOP_SAMPLE_RATE) / 1000; + output.state = OUTPUT_SKIP_FRAMES; + LOG_INFO("skipping %u frames (count:%d)", output.skip_frames, raop_sync.count); + } else { + output.pause_frames = (error * RAOP_SAMPLE_RATE) / 1000; + output.state = OUTPUT_PAUSE_FRAMES; + LOG_INFO("pausing for %u frames (count: %d)", output.pause_frames, raop_sync.count); + } + + raop_sync.sum = raop_sync.count = 0; + memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); + } + + // move to normal mode if possible + if (raop_sync.win == 1) { + raop_sync.win = SYNC_WIN_FAST; + LOG_INFO("backend played %u, desired %u, (delta:%d)", ms, raop_sync.playtime - now, error); + } else if (raop_sync.win == SYNC_WIN_FAST && raop_sync.count >= SYNC_WIN_FAST && abs(error) < 10) { + raop_sync.win = SYNC_WIN_SLOW; + LOG_INFO("switching to slow sync mode %u", raop_sync.win); } break; @@ -279,7 +261,9 @@ static bool raop_sink_cmd_handler(raop_event_t event, va_list args) case RAOP_STREAM: LOG_INFO("Stream", NULL); raop_state = event; - raop_sync.init = true; + raop_sync.win = 1; + raop_sync.sum = raop_sync.count = 0; + memset(raop_sync.errors, 0, sizeof(raop_sync.errors)); raop_sync.enabled = !strcasestr(output.device, "BT"); output.next_sample_rate = output.current_sample_rate = RAOP_SAMPLE_RATE; break; From 4da58ff1dc3b822da61783cb413658aedbdc7d5f Mon Sep 17 00:00:00 2001 From: philippe44 Date: Wed, 29 Apr 2020 14:10:00 -0700 Subject: [PATCH 03/27] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b86caa4..4ec1fdc8 100644 --- a/README.md +++ b/README.md @@ -228,10 +228,11 @@ The above command will mount this repo into the docker container and start a bas for you to then follow the below build steps ### Manual Install of ESP-IDF -Currently this project requires a specific combination of IDF 4 with gcc 5.2. You'll have to implement the gcc 5.2 toolchain from an IDF 3.2 install into the IDF 4 directory in order to successfully compile it +Currently this project requires a specific combination of IDF 3.x (insert link here ...) with gcc 5.2. You'll have to implement the gcc 5.2 toolchain You can install IDF manually on Linux or Windows (using the Subsystem for Linux) following the instructions at: https://www.instructables.com/id/ESP32-Development-on-Windows-Subsystem-for-Linux/ And then copying the i2s.c patch file from this repo over to the esp-idf folder +You alos need to use esp-dsp recent version or at least make sure you have this patch https://github.com/espressif/esp-dsp/pull/12/commits/8b082c1071497d49346ee6ed55351470c1cb4264 ## Building Squeezelite-esp32 MOST IMPORTANT: create the right default config file From 8f0709d5b1bef03ef4e877c3674982ff746eabfe Mon Sep 17 00:00:00 2001 From: Philippe G Date: Mon, 4 May 2020 18:40:48 -0700 Subject: [PATCH 04/27] clarify our licensing intention --- components/codecs/inc/alac/alac_wrapper.h | 22 ++++++------------- components/config/config.c | 20 +++++------------ components/display/core/gds_draw.h | 8 +++++++ components/display/core/gds_image.c | 8 +++++++ components/display/core/gds_image.h | 8 +++++++ components/display/core/gds_private.h | 8 +++++++ components/display/core/gds_text.c | 17 +++----------- components/display/core/gds_text.h | 16 +++----------- components/display/display.c | 15 ++----------- components/display/display.h | 14 ++---------- components/raop/platform.h | 14 ++---------- components/raop/raop.c | 16 +++----------- components/raop/raop.h | 16 +++----------- components/raop/util.c | 18 ++++----------- components/raop/util.h | 15 ++----------- components/services/audio_controls.c | 14 ++---------- components/services/audio_controls.h | 14 ++---------- components/services/buttons.c | 14 ++---------- components/services/buttons.h | 14 ++---------- components/services/globdefs.h | 14 ++---------- components/services/led.h | 14 ++---------- components/services/monitor.h | 14 ++---------- components/squeezelite/adac.h | 14 ++---------- components/squeezelite/controls.c | 14 ++---------- components/squeezelite/decode_external.c | 14 ++---------- components/squeezelite/display.c | 15 ++----------- components/squeezelite/embedded.c | 14 ++---------- components/squeezelite/equalizer.c | 14 ++---------- components/squeezelite/equalizer.h | 14 ++---------- .../squeezelite/external/dac_external.c | 14 ++---------- components/squeezelite/output_bt.c | 14 ++---------- components/squeezelite/output_embedded.c | 14 ++---------- components/squeezelite/output_i2s.c | 14 ++---------- components/squeezelite/tas57xx/dac_57xx.c | 14 ++---------- components/tools/perf_trace.h | 14 ++---------- components/tools/tools.h | 14 ++---------- components/tools/trace.h | 14 ++---------- main/esp_app_main.c | 14 ++---------- main/platform_esp32.h | 14 ++---------- 39 files changed, 116 insertions(+), 436 deletions(-) diff --git a/components/codecs/inc/alac/alac_wrapper.h b/components/codecs/inc/alac/alac_wrapper.h index 5f014839..e2ff7b8f 100644 --- a/components/codecs/inc/alac/alac_wrapper.h +++ b/components/codecs/inc/alac/alac_wrapper.h @@ -1,22 +1,14 @@ /***************************************************************************** * alac_wrapper.h: ALAC coder wrapper * - * Copyright (C) 2016 Philippe + /* + * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. - *****************************************************************************/ + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + #ifndef __ALAC_WRAPPER_H_ #define __ALAC_WRAPPER_H_ diff --git a/components/config/config.c b/components/config/config.c index 74c22f0f..65ee41ab 100644 --- a/components/config/config.c +++ b/components/config/config.c @@ -2,21 +2,11 @@ * Squeezelite for esp32 * * (c) Sebastien 2019 - * Philippe G. 2019, philippe_44@outlook.com - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * + * (c) Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * */ //#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE #include "config.h" diff --git a/components/display/core/gds_draw.h b/components/display/core/gds_draw.h index e98f958c..2405f571 100644 --- a/components/display/core/gds_draw.h +++ b/components/display/core/gds_draw.h @@ -1,3 +1,11 @@ +/* + * (c) Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + #ifndef _GDS_DRAW_H_ #define _GDS_DRAW_H_ diff --git a/components/display/core/gds_image.c b/components/display/core/gds_image.c index 1be2089f..a1898bbb 100644 --- a/components/display/core/gds_image.c +++ b/components/display/core/gds_image.c @@ -1,3 +1,11 @@ +/* + * (c) Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + #include #include "math.h" #include "esp32/rom/tjpgd.h" diff --git a/components/display/core/gds_image.h b/components/display/core/gds_image.h index b1f15c0c..2017ba38 100644 --- a/components/display/core/gds_image.h +++ b/components/display/core/gds_image.h @@ -1,3 +1,11 @@ +/* + * (c) Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + #pragma once #include diff --git a/components/display/core/gds_private.h b/components/display/core/gds_private.h index 42fa1a82..674df87c 100644 --- a/components/display/core/gds_private.h +++ b/components/display/core/gds_private.h @@ -1,3 +1,11 @@ +/* + * (c) Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + #ifndef _GDS_PRIVATE_H_ #define _GDS_PRIVATE_H_ diff --git a/components/display/core/gds_text.c b/components/display/core/gds_text.c index 34e07d23..10d8b30b 100644 --- a/components/display/core/gds_text.c +++ b/components/display/core/gds_text.c @@ -1,20 +1,9 @@ /* - * (c) 2004,2006 Richard Titmuss for SlimProtoLib - * (c) Philippe G. 2019, philippe_44@outlook.com + * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * */ #include diff --git a/components/display/core/gds_text.h b/components/display/core/gds_text.h index 50652938..3b888157 100644 --- a/components/display/core/gds_text.h +++ b/components/display/core/gds_text.h @@ -1,19 +1,9 @@ /* - * (c) Philippe G. 2019, philippe_44@outlook.com + * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * */ #pragma once diff --git a/components/display/display.c b/components/display/display.c index 82110397..db508552 100644 --- a/components/display/display.c +++ b/components/display/display.c @@ -1,19 +1,8 @@ /* - * (c) 2004,2006 Richard Titmuss for SlimProtoLib * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/display/display.h b/components/display/display.h index e1b809e5..eb6e2392 100644 --- a/components/display/display.h +++ b/components/display/display.h @@ -1,18 +1,8 @@ /* * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/raop/platform.h b/components/raop/platform.h index b901117d..b6cc2062 100644 --- a/components/raop/platform.h +++ b/components/raop/platform.h @@ -3,18 +3,8 @@ * * (c) Philippe, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/raop/raop.c b/components/raop/raop.c index 2d989a86..16db4b54 100644 --- a/components/raop/raop.c +++ b/components/raop/raop.c @@ -1,19 +1,9 @@ /* * - * (c) Philippe 2019, philippe_44@outlook.com + * (c) Philippe 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/raop/raop.h b/components/raop/raop.h index 5009be09..86879f71 100644 --- a/components/raop/raop.h +++ b/components/raop/raop.h @@ -1,20 +1,10 @@ /* * AirCast: Chromecast to AirPlay * - * (c) Philippe 2016-2017, philippe_44@outlook.com + * (c) Philippe 2016-2017, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/raop/util.c b/components/raop/util.c index f2a9be77..341d5bf5 100644 --- a/components/raop/util.c +++ b/components/raop/util.c @@ -1,20 +1,10 @@ /* - * AirConnect: Chromecast & UPnP to AirPlay + * AirConnect: Chromecast & UPnP to AirPlay * - * (c) Philippe 2016-2017, philippe_44@outlook.com + * (c) Philippe 2016-2017, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/raop/util.h b/components/raop/util.h index 40b57704..d788f4b2 100644 --- a/components/raop/util.h +++ b/components/raop/util.h @@ -1,21 +1,10 @@ /* * Misc utilities * - * (c) Adrian Smith 2012-2014, triode1@btinternet.com * (c) Philippe 2016-2017, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/services/audio_controls.c b/components/services/audio_controls.c index 8bcd9887..88577dfe 100644 --- a/components/services/audio_controls.c +++ b/components/services/audio_controls.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ //#define LOG_LOCAL_LEVEL ESP_LOG_DEBUG diff --git a/components/services/audio_controls.h b/components/services/audio_controls.h index 58f0f6f8..7f249105 100644 --- a/components/services/audio_controls.h +++ b/components/services/audio_controls.h @@ -1,18 +1,8 @@ /* * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/services/buttons.c b/components/services/buttons.c index 424c6c65..3e097a1b 100644 --- a/components/services/buttons.c +++ b/components/services/buttons.c @@ -3,18 +3,8 @@ * * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/services/buttons.h b/components/services/buttons.h index 92b00b61..f8996733 100644 --- a/components/services/buttons.h +++ b/components/services/buttons.h @@ -1,18 +1,8 @@ /* * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/services/globdefs.h b/components/services/globdefs.h index 8faf2d48..3d1217aa 100644 --- a/components/services/globdefs.h +++ b/components/services/globdefs.h @@ -3,18 +3,8 @@ * * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/services/led.h b/components/services/led.h index ff53e3b1..89d06cc1 100644 --- a/components/services/led.h +++ b/components/services/led.h @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/services/monitor.h b/components/services/monitor.h index c0bb8f68..0b5c966e 100644 --- a/components/services/monitor.h +++ b/components/services/monitor.h @@ -3,18 +3,8 @@ * * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/adac.h b/components/squeezelite/adac.h index a8251cbc..1b1a2668 100644 --- a/components/squeezelite/adac.h +++ b/components/squeezelite/adac.h @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/controls.c b/components/squeezelite/controls.c index a58ee2ab..db4b54a2 100644 --- a/components/squeezelite/controls.c +++ b/components/squeezelite/controls.c @@ -1,18 +1,8 @@ /* * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/decode_external.c b/components/squeezelite/decode_external.c index 6d718e5a..9749a0f3 100644 --- a/components/squeezelite/decode_external.c +++ b/components/squeezelite/decode_external.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/display.c b/components/squeezelite/display.c index 49ba7534..86d2d316 100644 --- a/components/squeezelite/display.c +++ b/components/squeezelite/display.c @@ -1,19 +1,8 @@ /* - * (c) 2004,2006 Richard Titmuss for SlimProtoLib * (c) Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/embedded.c b/components/squeezelite/embedded.c index 44637ebb..92b1b2fe 100644 --- a/components/squeezelite/embedded.c +++ b/components/squeezelite/embedded.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ #include "squeezelite.h" diff --git a/components/squeezelite/equalizer.c b/components/squeezelite/equalizer.c index fb119fd4..ac038ef9 100644 --- a/components/squeezelite/equalizer.c +++ b/components/squeezelite/equalizer.c @@ -3,18 +3,8 @@ * * (c) Philippe G. 2020, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/equalizer.h b/components/squeezelite/equalizer.h index c67ac328..9de46671 100644 --- a/components/squeezelite/equalizer.h +++ b/components/squeezelite/equalizer.h @@ -3,18 +3,8 @@ * * (c) Philippe G. 2020, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/external/dac_external.c b/components/squeezelite/external/dac_external.c index 49c5bf69..10f7239e 100644 --- a/components/squeezelite/external/dac_external.c +++ b/components/squeezelite/external/dac_external.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/output_bt.c b/components/squeezelite/output_bt.c index 2def7c9c..8890280c 100644 --- a/components/squeezelite/output_bt.c +++ b/components/squeezelite/output_bt.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/output_embedded.c b/components/squeezelite/output_embedded.c index d66e2284..c9cc29cc 100644 --- a/components/squeezelite/output_embedded.c +++ b/components/squeezelite/output_embedded.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ #include "squeezelite.h" diff --git a/components/squeezelite/output_i2s.c b/components/squeezelite/output_i2s.c index e57a6abf..66ebc4b3 100644 --- a/components/squeezelite/output_i2s.c +++ b/components/squeezelite/output_i2s.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/squeezelite/tas57xx/dac_57xx.c b/components/squeezelite/tas57xx/dac_57xx.c index 7d30af94..ee5e391f 100644 --- a/components/squeezelite/tas57xx/dac_57xx.c +++ b/components/squeezelite/tas57xx/dac_57xx.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/tools/perf_trace.h b/components/tools/perf_trace.h index 1cd93859..ca7bccc8 100644 --- a/components/tools/perf_trace.h +++ b/components/tools/perf_trace.h @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/tools/tools.h b/components/tools/tools.h index 00da007d..5a76150e 100644 --- a/components/tools/tools.h +++ b/components/tools/tools.h @@ -3,18 +3,8 @@ * * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/components/tools/trace.h b/components/tools/trace.h index ae24c70a..0703061e 100644 --- a/components/tools/trace.h +++ b/components/tools/trace.h @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ diff --git a/main/esp_app_main.c b/main/esp_app_main.c index eb995eeb..083a6a3f 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ #define LOG_LOCAL_LEVEL ESP_LOG_DEBUG diff --git a/main/platform_esp32.h b/main/platform_esp32.h index 0291154c..25c42cb0 100644 --- a/main/platform_esp32.h +++ b/main/platform_esp32.h @@ -4,18 +4,8 @@ * (c) Sebastien 2019 * Philippe G. 2019, philippe_44@outlook.com * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT * */ From 325dc2ad054f6756b3ce218153fa79f8b645a18c Mon Sep 17 00:00:00 2001 From: Philippe G Date: Tue, 5 May 2020 11:17:10 -0700 Subject: [PATCH 05/27] comment typo --- components/codecs/inc/alac/alac_wrapper.h | 1 - 1 file changed, 1 deletion(-) diff --git a/components/codecs/inc/alac/alac_wrapper.h b/components/codecs/inc/alac/alac_wrapper.h index e2ff7b8f..59cf4722 100644 --- a/components/codecs/inc/alac/alac_wrapper.h +++ b/components/codecs/inc/alac/alac_wrapper.h @@ -1,7 +1,6 @@ /***************************************************************************** * alac_wrapper.h: ALAC coder wrapper * - /* * (c) Philippe G. 2019, philippe_44@outlook.com * * This software is released under the MIT License. From 9f23b79818d8ec1f3ac0c9d88e3181af1bf82bb8 Mon Sep 17 00:00:00 2001 From: Michael Herger Date: Tue, 5 May 2020 22:45:54 +0200 Subject: [PATCH 06/27] Fix some issues when SqueezeAmp doesn't have a display * only push simple prefs on the list of automatically managed items - hashes and lists can't be managed by the Settings super class * only push display/artwork related prefs on the list if deal with a player which has a display * move most artwork/display handling code out of the plugin to the Player class * rename `eq` pref to `equalizer`, as `eq` is a reserved word * automatically update the player when the `equalizer` pref is changed * strip down Plugin to the bare minimum needed with any SqueezeAMP, no matter whether it has a display or not --- .../plugins/SqueezeESP32/settings/player.html | 43 +++--- plugin/SqueezeESP32/Player.pm | 90 ++++++++++-- plugin/SqueezeESP32/PlayerSettings.pm | 69 +++++---- plugin/SqueezeESP32/Plugin.pm | 135 +++++++----------- 4 files changed, 183 insertions(+), 154 deletions(-) diff --git a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html index 70baae8e..ade09afe 100644 --- a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html +++ b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html @@ -3,74 +3,75 @@ [% IF prefs.pref_width %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_WIDTH" desc="PLUGIN_SQUEEZEESP32_WIDTH_DESC" %] + [% prefs.pref_width %] [% END %] - + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SMALL_VU" desc="PLUGIN_SQUEEZEESP32_SMALL_VU_DESC" %] [% END %] - + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE" desc="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC" %] [% END %] - + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM" desc="PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_DESC" %] [% "PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_SIZE" | string %]  [% "PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_BAND" | string %]  [% END %] - + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND" desc="PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND_DESC" %] [% END %] - + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_ARTWORK" desc="PLUGIN_SQUEEZEESP32_ARTWORK_DESC" %] [% "PLUGIN_SQUEEZEESP32_ARTWORK_ENABLE" | string %]  - +   [% "PLUGIN_SQUEEZEESP32_ARTWORK_X" | string %]  [% "PLUGIN_SQUEEZEESP32_ARTWORK_Y" | string %]  [% END %] -
- [% END %] - +
+ [% END %] + [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_EQUALIZER" desc="" %] [% END %] - + [% WRAPPER settingSection %] [% WRAPPER settingGroup title='31Hz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='62Hz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='125Hz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='250Hz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='500Hz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='1kHz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='2kHz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='4kHz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='8kHz' desc="" %] - + [% END %] [% WRAPPER settingGroup title='16kHz' desc="" %] - + [% END %] [% END %] - + [% PROCESS settings/footer.html %] diff --git a/plugin/SqueezeESP32/Player.pm b/plugin/SqueezeESP32/Player.pm index 7e638201..19d19f2a 100644 --- a/plugin/SqueezeESP32/Player.pm +++ b/plugin/SqueezeESP32/Player.pm @@ -3,6 +3,9 @@ package Plugins::SqueezeESP32::Player; use strict; use base qw(Slim::Player::SqueezePlay); +use Digest::MD5 qw(md5); +use List::Util qw(min); + use Slim::Utils::Log; use Slim::Utils::Prefs; @@ -16,34 +19,34 @@ sub hasIR { 0 } sub init { my $client = shift; $client->SUPER::init(@_); - Plugins::SqueezeESP32::Plugin::config_artwork($client); + $client->config_artwork(); } # Allow the player to define it's display width (and probably more) sub playerSettingsFrame { my $client = shift; my $data_ref = shift; - + my $value; my $id = unpack('C', $$data_ref); - + # New SETD command 0xfe for display width & height - if ($id == 0xfe) { + if ($id == 0xfe) { $value = (unpack('Cn', $$data_ref))[1]; if ($value > 100 && $value < 400) { $prefs->client($client)->set('width', $value); - + my $height = (unpack('Cnn', $$data_ref))[2]; $prefs->client($client)->set('height', $height || 0); $client->display->modes($client->display->build_modes); $client->display->widthOverride(1, $value); $client->update; - - $log->info("Setting player $value" . "x" . "$height for ", $client->name); - } + + main::INFOLOG && $log->is_info && $log->info("Setting player $value" . "x" . "$height for ", $client->name); + } } - + $client->SUPER::playerSettingsFrame($data_ref); } @@ -51,10 +54,77 @@ sub hasScrolling { return 1; } +sub update_artwork { + my $client = shift; + my $cprefs = $prefs->client($client); + + my $artwork = $cprefs->get('artwork') || return; + + return unless $artwork->{'enable'}; + + my $s = min($cprefs->get('height') - $artwork->{'y'}, $cprefs->get('width') - $artwork->{'x'}); + + my $params = { force => shift || 0 }; + my $path = 'music/current/cover_' . $s . 'x' . $s . '_o.jpg'; + my $body = Slim::Web::Graphics::artworkRequest($client, $path, $params, \&send_artwork, undef, HTTP::Response->new); + + send_artwork($client, undef, \$body) if $body; +} + +sub send_artwork { + my ($client, $params, $dataref) = @_; + + # I'm not sure why we are called so often, so only send when needed + my $md5 = md5($$dataref); + return if $client->pluginData('artwork_md5') eq $md5 && !$params->{'force'}; + + $client->pluginData('artwork', $dataref); + $client->pluginData('artwork_md5', $md5); + + my $artwork = $prefs->client($client)->get('artwork') || {}; + my $length = length $$dataref; + my $offset = 0; + + $log->info("got resized artwork (length: ", length $$dataref, ")"); + + my $header = pack('Nnn', $length, $artwork->{'x'}, $artwork->{'y'}); + + while ($length > 0) { + $length = 1280 if $length > 1280; + $log->info("sending grfa $length"); + + my $data = $header . pack('N', $offset) . substr( $$dataref, 0, $length, '' ); + + $client->sendFrame( grfa => \$data ); + $offset += $length; + $length = length $$dataref; + } +} + +sub clear_artwork { + my ($client, $request) = @_; + + my $artwork = $prefs->client($client)->get('artwork'); + + if ($artwork && $artwork->{'enable'}) { + main::INFOLOG && $log->is_info && $log->info("artwork stop/clear " . $request->getRequestString()); + $client->pluginData('artwork_md5', ''); + } +} + +sub config_artwork { + my ($client) = @_; + + if ( my $artwork = $prefs->client($client)->get('artwork') ) { + my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'}); + $client->sendFrame( grfa => \$header ); + } +} + sub reconnect { my $client = shift; $client->pluginData('artwork_md5', ''); $client->SUPER::reconnect(@_); -} +} 1; diff --git a/plugin/SqueezeESP32/PlayerSettings.pm b/plugin/SqueezeESP32/PlayerSettings.pm index 9b331d87..4f0af9cf 100644 --- a/plugin/SqueezeESP32/PlayerSettings.pm +++ b/plugin/SqueezeESP32/PlayerSettings.pm @@ -30,63 +30,60 @@ sub page { sub prefs { my ($class, $client) = @_; - my @prefs = qw(width small_VU spectrum artwork eq); + my @prefs; + push @prefs, qw(width small_VU) if $client->displayWidth; return ($prefs->client($client), @prefs); } sub handler { my ($class, $client, $paramRef) = @_; - + my ($cprefs, @prefs) = $class->prefs($client); - + if ($paramRef->{'saveSettings'}) { if ($client->displayWidth) { $cprefs->set('small_VU', $paramRef->{'pref_small_VU'} || 15); - my $spectrum = { scale => $paramRef->{'pref_spectrum_scale'} || 25, - small => { size => $paramRef->{'pref_spectrum_small_size'} || 25, - band => $paramRef->{'pref_spectrum_small_band'} || 5.33 }, - full => { band => $paramRef->{'pref_spectrum_full_band'} } || 8, - }; + my $spectrum = { + scale => $paramRef->{'pref_spectrum_scale'} || 25, + small => { size => $paramRef->{'pref_spectrum_small_size'} || 25, + band => $paramRef->{'pref_spectrum_small_band'} || 5.33 }, + full => { band => $paramRef->{'pref_spectrum_full_band'} } || 8, + }; $cprefs->set('spectrum', $spectrum); - - my $artwork = { enable => $paramRef->{'pref_artwork_enable'}, - x => $paramRef->{'pref_artwork_x'} || 0, - y => $paramRef->{'pref_artwork_y'} || 0, - }; - $cprefs->set('artwork', $artwork); + + my $artwork = { + enable => $paramRef->{'pref_artwork_enable'}, + x => $paramRef->{'pref_artwork_x'} || 0, + y => $paramRef->{'pref_artwork_y'} || 0, + }; + $cprefs->set('artwork', $artwork); $client->display->modes($client->display->build_modes); $client->display->update; - + # force update or disable artwork if ($artwork->{'enable'}) { - Plugins::SqueezeESP32::Plugin::update_artwork($client, 1); + $client->update_artwork(1); } else { - Plugins::SqueezeESP32::Plugin::config_artwork($client); - } - } - - my $eq = $cprefs->get('eq'); - for my $i (0 .. $#{$eq}) { - $eq->[$i] = $paramRef->{"pref_eq.$i"}; + $client->config_artwork(); + } } - $cprefs->set('eq', $eq); - Plugins::SqueezeESP32::Plugin::send_equalizer($client); + + my $equalizer = $cprefs->get('equalizer'); + for my $i (0 .. $#{$equalizer}) { + $equalizer->[$i] = $paramRef->{"pref_equalizer.$i"} || 0; + } + $cprefs->set('equalizer', $equalizer); } - + if ($client->displayWidth) { - # as there is nothing captured, we need to re-set these variables - $paramRef->{'pref_width'} = $cprefs->get('width'); - - # here I don't know why you need to set again spectrum which is a reference - # to a hash. Using $paramRef->{prefs} does not work either. It seems that - # some are copies of value, some are references, can't figure out. This whole - # logic of "Settings" is beyond me and I really hate it + # the Settings super class can't handle anything but scalar values + # we need to populate the $paramRef for the other prefs manually $paramRef->{'pref_spectrum'} = $cprefs->get('spectrum'); $paramRef->{'pref_artwork'} = $cprefs->get('artwork'); } - - $paramRef->{'pref_eq'} = $cprefs->get('eq'); - + + $paramRef->{'pref_equalizer'} = $cprefs->get('equalizer'); + return $class->SUPER::handler($client, $paramRef); } diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm index ca533c24..f146cdb7 100644 --- a/plugin/SqueezeESP32/Plugin.pm +++ b/plugin/SqueezeESP32/Plugin.pm @@ -4,8 +4,6 @@ use strict; use base qw(Slim::Plugin::Base); -use Digest::MD5 qw(md5); -use List::Util qw(min); use Slim::Utils::Prefs; use Slim::Utils::Log; use Slim::Web::ImageProxy; @@ -16,121 +14,84 @@ my $log = Slim::Utils::Log->addLogCategory({ 'category' => 'plugin.squeezeesp32', 'defaultLevel' => 'INFO', 'description' => Slim::Utils::Strings::string('SqueezeESP32'), -}); +}); + +# migrate 'eq' pref, as that's a reserved word and could cause problems in the future +$prefs->migrateClient(1, sub { + my ($cprefs, $client) = @_; + $cprefs->set('equalizer', $cprefs->get('eq')); + $cprefs->remove('eq'); + 1; +}); + +$prefs->setChange(sub { + send_equalizer($_[2]); +}, 'equalizer'); sub initPlugin { my $class = shift; - + if ( main::WEBUI ) { require Plugins::SqueezeESP32::PlayerSettings; Plugins::SqueezeESP32::PlayerSettings->new; - + # require Plugins::SqueezeESP32::Settings; # Plugins::SqueezeESP32::Settings->new; } - + $class->SUPER::initPlugin(@_); Slim::Networking::Slimproto::addPlayerClass($class, 100, 'squeezeesp32', { client => 'Plugins::SqueezeESP32::Player', display => 'Plugins::SqueezeESP32::Graphics' }); - $log->info("Added class 100 for SqueezeESP32"); - - Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] ); - Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['playlist'], ['open', 'newsong'] ]); + main::INFOLOG && $log->is_info && $log->info("Added class 100 for SqueezeESP32"); + + Slim::Control::Request::subscribe( \&onNotification, [ ['newmetadata'] ] ); + Slim::Control::Request::subscribe( \&onNotification, [ ['playlist'], ['open', 'newsong'] ]); Slim::Control::Request::subscribe( \&onStopClear, [ ['playlist'], ['stop', 'clear'] ]); + + # the custom player class is only initialized if it has a display - thus we need to listen to connect events in order to initializes other player prefs Slim::Control::Request::subscribe( \&onPlayer,[ ['client'], [ 'new', 'reconnect' ] ] ); } sub onStopClear { - my $request = shift; - my $client = $request->client; - my $artwork = $prefs->client($client)->get('artwork'); - - if ($client->model eq 'squeezeesp32' && $artwork->{'enable'}) { - my $reqstr = $request->getRequestString(); - $log->info("artwork stop/clear $reqstr"); - $client->pluginData('artwork_md5', '') - } + my $request = shift; + my $client = $request->client || return; + + if ($client->isa('Plugins::SqueezeESP32::Player')) { + $client->clear_artwork($request); + } } sub onPlayer { - my $request = shift; - my $client = $request->client; + my $request = shift; + my $client = $request->client || return; - if ($client->model eq 'squeezeesp32') { - $prefs->client($client)->init( { - eq => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - } ); - Plugins::SqueezeESP32::Plugin::send_equalizer($client); + if ($client->model eq 'squeezeesp32') { + main::INFOLOG && $log->is_info && $log->info("SqueezeESP player connected: " . $client->id); + + $prefs->client($client)->init( { + equalizer => [(0) x 10], + } ); + send_equalizer($client); } } sub onNotification { - my $request = shift; - my $client = $request->client; - - my $reqstr = $request->getRequestString(); + my $request = shift; + my $client = $request->client || return; - update_artwork($client); -} - -sub update_artwork { - my $client = shift; - my $params = { force => shift || 0 }; - my $cprefs = $prefs->client($client); - my $artwork = $cprefs->get('artwork'); - - return unless $client->model eq 'squeezeesp32' && $artwork->{'enable'}; - - my $s = min($cprefs->get('height') - $artwork->{'y'}, $cprefs->get('width') - $artwork->{'x'}); - - my $path = 'music/current/cover_' . $s . 'x' . $s . '_o.jpg'; - my $body = Slim::Web::Graphics::artworkRequest($client, $path, $params, \&send_artwork, undef, HTTP::Response->new); - - send_artwork($client, undef, \$body) if $body; -} - -sub send_artwork { - my ($client, $params, $dataref) = @_; - - # I'm not sure why we are called so often, so only send when needed - my $md5 = md5($$dataref); - return if $client->pluginData('artwork_md5') eq $md5 && !$params->{'force'}; - - $client->pluginData('artwork', $dataref); - $client->pluginData('artwork_md5', $md5); - - my $artwork = $prefs->client($client)->get('artwork'); - my $length = length $$dataref; - my $offset = 0; - - $log->info("got resized artwork (length: ", length $$dataref, ")"); - - my $header = pack('Nnn', $length, $artwork->{'x'}, $artwork->{'y'}); - - while ($length > 0) { - $length = 1280 if $length > 1280; - $log->info("sending grfa $length"); - - my $data = $header . pack('N', $offset) . substr( $$dataref, 0, $length, '' ); - - $client->sendFrame( grfa => \$data ); - $offset += $length; - $length = length $$dataref; + if ($client->isa('Plugins::SqueezeESP32::Player')) { + $client->update_artwork(); } -} +} sub send_equalizer { my ($client) = @_; - my $equalizer = $prefs->client($client)->get('eq'); - my $size = @$equalizer; - my $data = pack("c[$size]", @{$equalizer}); - $client->sendFrame( eqlz => \$data ); -} -sub config_artwork { - my ($client) = @_; - my $artwork = $prefs->client($client)->get('artwork'); - my $header = pack('Nnn', $artwork->{'enable'}, $artwork->{'x'}, $artwork->{'y'}); - $client->sendFrame( grfa => \$header ); + if ($client->model eq 'squeezeesp32') { + my $equalizer = $prefs->client($client)->get('equalizer') || [(0) x 10]; + my $size = @$equalizer; + my $data = pack("c[$size]", @{$equalizer}); + $client->sendFrame( eqlz => \$data ); + } } 1; From 5e00288f1153e81c1078545bb58a3d72bf4bf81d Mon Sep 17 00:00:00 2001 From: Michael Herger Date: Tue, 5 May 2020 23:04:12 +0200 Subject: [PATCH 07/27] German Translation --- plugin/SqueezeESP32/strings.txt | 66 ++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/plugin/SqueezeESP32/strings.txt b/plugin/SqueezeESP32/strings.txt index 5c03547c..268752e9 100644 --- a/plugin/SqueezeESP32/strings.txt +++ b/plugin/SqueezeESP32/strings.txt @@ -1,75 +1,99 @@ WELCOME_TO_SQUEEZEESP32 + DE Willkommen bei SqueezeESP32! EN Welcome to SqueezeESP32 - + PLUGIN_SQUEEZEESP32 EN SqueezeESP32 - + PLUGIN_SQUEEZEESP32_BANNER + DE WARNUNG EN WARNING - + PLUGIN_SQUEEZEESP32_BANNER_TEXT + DE Sie müssen LMS neu starten, damit diese Einstellungen aktiv werden EN You need to restart LMS for these parameters to be taken into account - + PLUGIN_SQUEEZEESP32_DESC + DE Konfiguriert eine neue Player ID (100), um Displays an SqueezeESP32 zu unterstützen EN Adds a new player id (100) to enable display with SqueezeESP32 - + PLUGIN_SQUEEZEESP32_PLAYERSETTINGS + DE ESP32 Einstellungen EN ESP32 settings - + PLUGIN_SQUEEZEESP32_WIDTH + DE Displaybreite EN Screen width PLUGIN_SQUEEZEESP32_WIDTH_DESC + DE Breite des Displays in Pixeln, wie es vom Player angegeben wird EN Width of the display in pixel as reported by the player - + PLUGIN_SQUEEZEESP32_SMALL_VU + DE Kleine VU Grösse EN Small VU size - + PLUGIN_SQUEEZEESP32_SMALL_VU_DESC + DE Prozentsatz des Displays, das für den kleinen VU verwendet wird (rechts ausgerichtet) EN % of the display used for small VU (right-justified) - + PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE + DE Spektrum-Skalierung EN Spectrum scaling - + PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC + DE Prozentsatz des Spektrums, das in der ersten Hälfte des Bildschirms angezeigt wird. Z.B. 50 bedeutet 50% des Spektrums wird auf dem halben Bildschirm angezeigt. + DE Aber 25 bedeutet, dass nur 25% des Spektrums auf dem halben Bildschirm angezeigt wird. EN % of Spectrum displayed in first half of the screen. For example, 50 means that 50% of spectrum is displayed in 1/2 of the screen EN But 25 means that only 25% of spectrum is displayed in 1/2 of the screen, so it's a sort of log - + PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM + DE Kleines Spektrum EN Small spectrum options - + PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_DESC + DE Grösse: Prozentsatz des Displays, das für das kleine Spektrum verwendet wird. + DE
Band-Faktor: die Anzahl Bänder ist die Breite der Spektrumsanzeige dividiert durch diesen Faktor. EN Size: % of the screen used by small spectrum EN
Band factor: number of bands is the width of the spectrum screen divided by this factor - + PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_SIZE + DE Grösse EN Size - + PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_BAND + DE Band-Faktor EN Band factor - + PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND + DE Band-Faktor für ganzes Spektrum EN Full spectrum band factor - + PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND_DESC + DE Die Anzahl Bänder ist die Breite der Anzeige dividiert durch diesen Faktor. EN The number of bands is the width of the screen divided by this factor - + PLUGIN_SQUEEZEESP32_ARTWORK + DE Plattenhüllen EN Artwork - + PLUGIN_SQUEEZEESP32_ARTWORK_DESC - EN When Y position is less than 32, then artwork is display at the right of the main screen and x defines the starting position + DE Wenn die Y Position kleiner als 32 ist, dann werden Plattenhüllen auf der rechten Seite angezeigt, und x definiert die Startposition. + DE Plattenhüllen werden auf Displays mit weniger als 16 Graustufen in sehr geringer Qualität angezeigt. + EN When Y position is less than 32, then artwork is displayed at the right of the main screen and x defines the starting position EN Using artwork on less than 16-levels grayscale display if really poor quality PLUGIN_SQUEEZEESP32_ARTWORK_ENABLE + DE Aktivieren EN Enable - + PLUGIN_SQUEEZEESP32_ARTWORK_X EN X PLUGIN_SQUEEZEESP32_ARTWORK_Y EN Y - + PLUGIN_SQUEEZEESP32_EQUALIZER + DE Parametrischer Equalizer EN Parametric equalizer From fd16af1ae63e66aa3c4f4bc6151be36fd4a1726e Mon Sep 17 00:00:00 2001 From: Michael Herger Date: Wed, 6 May 2020 06:17:00 +0200 Subject: [PATCH 08/27] We need to wrap the callback to make it unique. Otherwise subscriptions would overwrite each other. --- plugin/SqueezeESP32/Plugin.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm index f146cdb7..48ff8c01 100644 --- a/plugin/SqueezeESP32/Plugin.pm +++ b/plugin/SqueezeESP32/Plugin.pm @@ -43,8 +43,9 @@ sub initPlugin { Slim::Networking::Slimproto::addPlayerClass($class, 100, 'squeezeesp32', { client => 'Plugins::SqueezeESP32::Player', display => 'Plugins::SqueezeESP32::Graphics' }); main::INFOLOG && $log->is_info && $log->info("Added class 100 for SqueezeESP32"); - Slim::Control::Request::subscribe( \&onNotification, [ ['newmetadata'] ] ); - Slim::Control::Request::subscribe( \&onNotification, [ ['playlist'], ['open', 'newsong'] ]); + # Note for some forgetful know-it-all: we need to wrap the callback to make it unique. Otherwise subscriptions would overwrite each other. + Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] ); + Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['playlist'], ['open', 'newsong'] ]); Slim::Control::Request::subscribe( \&onStopClear, [ ['playlist'], ['stop', 'clear'] ]); # the custom player class is only initialized if it has a display - thus we need to listen to connect events in order to initializes other player prefs From 338c6e5a1b36c4d7e2e39a37fce6611d5fc5cc54 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Thu, 7 May 2020 15:00:12 -0700 Subject: [PATCH 09/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ec1fdc8..8e43bf67 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,7 @@ Where \ is either the name of another configuration to load (remap) or ``` ACTRLS_NONE, ACTRLS_VOLUP, ACTRLS_VOLDOWN, ACTRLS_TOGGLE, ACTRLS_PLAY, ACTRLS_PAUSE, ACTRLS_STOP, ACTRLS_REW, ACTRLS_FWD, ACTRLS_PREV, ACTRLS_NEXT, -BCTRLS_PUSH, BCTRLS_UP, BCTRLS_DOWN, BCTRLS_LEFT, BCTRLS_RIGHT, +BCTRLS_UP, BCTRLS_DOWN, BCTRLS_LEFT, BCTRLS_RIGHT, KNOB_LEFT, KNOB_RIGHT, KNOB_PUSH ``` From 192847af89e4c0f564ffbc07196ef4eb0ea536a4 Mon Sep 17 00:00:00 2001 From: Michael Herger Date: Fri, 8 May 2020 13:42:40 +0200 Subject: [PATCH 10/27] Make the EQ in player settings update the player in "real time" as you change the values. --- .../plugins/SqueezeESP32/settings/player.html | 27 +++++++++++++++++++ plugin/SqueezeESP32/Plugin.pm | 27 +++++++++++++++++-- plugin/SqueezeESP32/strings.txt | 3 +++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html index ade09afe..719955dd 100644 --- a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html +++ b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html @@ -39,8 +39,35 @@ [% END %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_EQUALIZER" desc="" %] +
[% "PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE" | string %]
[% END %] + [% WRAPPER settingSection %] [% WRAPPER settingGroup title='31Hz' desc="" %] diff --git a/plugin/SqueezeESP32/Plugin.pm b/plugin/SqueezeESP32/Plugin.pm index 48ff8c01..e7e3a779 100644 --- a/plugin/SqueezeESP32/Plugin.pm +++ b/plugin/SqueezeESP32/Plugin.pm @@ -43,6 +43,9 @@ sub initPlugin { Slim::Networking::Slimproto::addPlayerClass($class, 100, 'squeezeesp32', { client => 'Plugins::SqueezeESP32::Player', display => 'Plugins::SqueezeESP32::Graphics' }); main::INFOLOG && $log->is_info && $log->info("Added class 100 for SqueezeESP32"); + # register a command to set the EQ - without saving the values! Send params as single comma separated list of values + Slim::Control::Request::addDispatch(['squeezeesp32', 'seteq', '_eq'], [1, 0, 0, \&setEQ]); + # Note for some forgetful know-it-all: we need to wrap the callback to make it unique. Otherwise subscriptions would overwrite each other. Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['newmetadata'] ] ); Slim::Control::Request::subscribe( sub { onNotification(@_) }, [ ['playlist'], ['open', 'newsong'] ]); @@ -84,11 +87,31 @@ sub onNotification { } } +sub setEQ { + my $request = shift; + + # check this is the correct command. + if ($request->isNotCommand([['squeezeesp32'],['seteq']])) { + $request->setStatusBadDispatch(); + return; + } + + # get our parameters + my $client = $request->client(); + my @eqParams = split(/,/, $request->getParam('_eq') || ''); + + for (my $x = 0; $x < 10; $x++) { + $eqParams[$x] ||= 0; + } + + send_equalizer($client, \@eqParams); +} + sub send_equalizer { - my ($client) = @_; + my ($client, $equalizer) = @_; if ($client->model eq 'squeezeesp32') { - my $equalizer = $prefs->client($client)->get('equalizer') || [(0) x 10]; + $equalizer ||= $prefs->client($client)->get('equalizer') || [(0) x 10]; my $size = @$equalizer; my $data = pack("c[$size]", @{$equalizer}); $client->sendFrame( eqlz => \$data ); diff --git a/plugin/SqueezeESP32/strings.txt b/plugin/SqueezeESP32/strings.txt index 268752e9..0ab48a8c 100644 --- a/plugin/SqueezeESP32/strings.txt +++ b/plugin/SqueezeESP32/strings.txt @@ -97,3 +97,6 @@ PLUGIN_SQUEEZEESP32_EQUALIZER DE Parametrischer Equalizer EN Parametric equalizer +PLUGIN_SQUEEZEESP32_EQUALIZER_SAVE + DE Bitte speichern Sie die Equalizer Einstellungen, falls das Gerät diese dauerhaft verwenden soll. Ansonsten werden sie beim nächsten Start zurückgesetzt. + EN Don't forget to save the Equalizer settings if you want them to stick. Otherwise they'll be reset next time you restart the device. \ No newline at end of file From a9833d263737eca73cb615ce0fe1496b97c4ddf7 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 9 May 2020 14:25:02 -0700 Subject: [PATCH 11/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e43bf67..f8aa7532 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ While the config named "buttons_remap" {"gpio":5,"type":"BUTTON_LOW","pull":true,"shifter_gpio":4,"normal":{"pressed":"BCTRLS_UP"}}] ``` Defines two buttons -- first on GPIO 4, active low. When pressed, it triggers a navigation down command. When pressed more than 1000ms, it changes the button configuration for the one descrobed above +- first on GPIO 4, active low. When pressed, it triggers a navigation down command. When pressed more than 1000ms, it changes the button configuration for the one described above - second on GPIO 5, active low. When pressed it triggers a navigation up command. That button, in that configuration, has no shift option Below is a difficult but functional 2-buttons interface for your decoding pleasure From bdafa34c8a99fa0e7f0d3c2ec048b91ee61c0ce3 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 9 May 2020 18:05:14 -0700 Subject: [PATCH 12/27] Update README.md --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f8aa7532..4d36a373 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,15 @@ The NVS parameter "metadata_config" sets how metadata is displayed for AirPlay a You can install the excellent plugin "Music Information Screen" which is super useful to tweak the layout for these small displays. +### Infrared +You can use any IR receiver compatible with NEC protocol (38KHz). Vcc, GND and output are the only pin that needs to be connected, no pullup, no filtering capacitor, it's a straight connection. + +The IR codes are send "as is" to LMS, so only a Logitech SB remote from Boom, Classic or Touch will work. I think the file Slim_Devices_Remote.ir in the "server" directory of LMS can be modified to adapt to other codes, but I've not tried that. + +In AirPlay and Bluetooth mode, only these native remote are supported, I've not added the option to make your own mapping + +See "set GPIO" below to set the GPIO associated to infrared receiver. + ### Set GPIO The parameter "set_GPIO" is use to assign GPIO to various functions. @@ -106,7 +115,7 @@ You can set the Green and Red status led as well with their respective active st Syntax is: ``` -=Vcc|GND|amp|jack[:0|1]|green[:0|1]|red[:0|1]|spkfault[:0|1][,] +=Vcc|GND|amp|ir|jack[:0|1]|green[:0|1]|red[:0|1]|spkfault[:0|1][,] ``` You can define the defaults for jack, spkfault leds at compile time but nvs parameter takes precedence except for SqueezeAMP where these are forced at runtime. ### Rotary Encoder @@ -207,6 +216,12 @@ Below is a difficult but functional 2-buttons interface for your decoding pleasu "longshifted":{"pressed":"BCTRLS_LEFT"}} ] ``` +IMPORTANT NOTE: LMS also supports the possibility to send 'raw' button codes. It's a bit complicated, so bear with me. Buttons can either be processed by SqueezeESP32 and mapped to a "function" like play/pause or they can be just sent to LMS as plain (raw) code and the full logic of press/release/longpress is handled by LMS, you don't have any control on that. + +The benefit of the "raw" mode is that you can build a player which is as close as possible to a Boom (e.g.) but you can't use the remapping function nor longress or shift logics to do your own mapping when you have a limited set of buttons. In 'raw' mode, all you really need to define is the mapping between the gpio and the button. As far as LMS is concerned, any other option in these JSON payloads does not matter. Now, when you use BT or AirPlay, the full JSON construct described above fully applies, so the shift, longpress, remapping options still work. + +There is no good or bad option, it's your choice. Use the NVS parameter "lms_ctrls_raw" to change that option + ### Battery / ADC The NVS parameter "bat_config" sets the ADC1 channel used to measure battery/DC voltage. Scale is a float ratio applied to every sample of the 12 bits ADC. A measure is taken every 10s and an average is made every 5 minutes (not a sliding window). Syntax is ``` From 1f40b1d4d431338f6cb02fa8177bfaad58ea7313 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 9 May 2020 18:05:48 -0700 Subject: [PATCH 13/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d36a373..2b142499 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ You can use any IR receiver compatible with NEC protocol (38KHz). Vcc, GND and o The IR codes are send "as is" to LMS, so only a Logitech SB remote from Boom, Classic or Touch will work. I think the file Slim_Devices_Remote.ir in the "server" directory of LMS can be modified to adapt to other codes, but I've not tried that. -In AirPlay and Bluetooth mode, only these native remote are supported, I've not added the option to make your own mapping +In AirPlay and Bluetooth mode, only these native remotes are supported, I've not added the option to make your own mapping See "set GPIO" below to set the GPIO associated to infrared receiver. From 5b6ddf0b028a5f9e647cecc439eafc1f89d4387a Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sat, 9 May 2020 18:07:26 -0700 Subject: [PATCH 14/27] add IR and "raw" button mode - release --- components/driver_bt/bt_app_sink.c | 26 ++-- components/raop/raop_sink.c | 26 ++-- components/services/audio_controls.c | 149 +++++++++++++----- components/services/audio_controls.h | 13 +- components/services/buttons.c | 57 +++++-- components/services/buttons.h | 4 + components/services/infrared.c | 177 +++++++++++++++++++++ components/services/infrared.h | 17 ++ components/services/monitor.c | 8 +- components/squeezelite/controls.c | 225 ++++++++++++++++++++++----- components/squeezelite/display.c | 88 +++++------ components/squeezelite/embedded.c | 3 + components/squeezelite/embedded.h | 5 +- components/squeezelite/slimproto.c | 22 ++- main/esp_app_main.c | 5 +- 15 files changed, 662 insertions(+), 163 deletions(-) create mode 100644 components/services/infrared.c create mode 100644 components/services/infrared.h diff --git a/components/driver_bt/bt_app_sink.c b/components/driver_bt/bt_app_sink.c index e0d4d34d..fd03e1a0 100644 --- a/components/driver_bt/bt_app_sink.c +++ b/components/driver_bt/bt_app_sink.c @@ -87,41 +87,49 @@ static EXT_RAM_ATTR struct { bool updated; } s_metadata; -static void bt_volume_up(void) { +static void bt_volume_up(bool pressed) { + if (!pressed) return; // volume UP/DOWN buttons are not supported by iPhone/Android volume_set_by_local_host(s_volume < 127-3 ? s_volume + 3 : 127); (*bt_app_a2d_cmd_cb)(BT_SINK_VOLUME, s_volume); ESP_LOGI(BT_AV_TAG, "BT volume up %u", s_volume); } -static void bt_volume_down(void) { +static void bt_volume_down(bool pressed) { + if (!pressed) return; // volume UP/DOWN buttons are not supported by iPhone/Android volume_set_by_local_host(s_volume > 3 ? s_volume - 3 : 0); (*bt_app_a2d_cmd_cb)(BT_SINK_VOLUME, s_volume); } -static void bt_toggle(void) { +static void bt_toggle(bool pressed) { + if (!pressed) return; if (s_audio == AUDIO_PLAYING) esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_STOP, ESP_AVRC_PT_CMD_STATE_PRESSED); else esp_avrc_ct_send_passthrough_cmd(tl++, ESP_AVRC_PT_CMD_PLAY, ESP_AVRC_PT_CMD_STATE_PRESSED); } -static void bt_play(void) { +static void bt_play(bool pressed) { + if (!pressed) return; esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_PLAY, ESP_AVRC_PT_CMD_STATE_PRESSED); } -static void bt_pause(void) { +static void bt_pause(bool pressed) { + if (!pressed) return; esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_PAUSE, ESP_AVRC_PT_CMD_STATE_PRESSED); } -static void bt_stop(void) { +static void bt_stop(bool pressed) { + if (!pressed) return; esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_STOP, ESP_AVRC_PT_CMD_STATE_PRESSED); } -static void bt_prev(void) { +static void bt_prev(bool pressed) { + if (!pressed) return; esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_BACKWARD, ESP_AVRC_PT_CMD_STATE_PRESSED); } -static void bt_next(void) { +static void bt_next(bool pressed) { + if (!pressed) return; esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_FORWARD, ESP_AVRC_PT_CMD_STATE_PRESSED); } @@ -297,7 +305,7 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param) // force metadata update update_metadata(true); - actrls_set(controls, NULL); + actrls_set(controls, false, NULL, actrls_ir_action); } else { // if decoder is busy, stop it (would be better to not ACK this command, but don't know how) esp_avrc_ct_send_passthrough_cmd(tl++ & 0x0f, ESP_AVRC_PT_CMD_STOP, ESP_AVRC_PT_CMD_STATE_PRESSED); diff --git a/components/raop/raop_sink.c b/components/raop/raop_sink.c index 73b711f5..11d20438 100644 --- a/components/raop/raop_sink.c +++ b/components/raop/raop_sink.c @@ -31,42 +31,50 @@ static log_level *loglevel = &raop_loglevel; static struct raop_ctx_s *raop; static raop_cmd_vcb_t cmd_handler_chain; -static void raop_volume_up(void) { +static void raop_volume_up(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_VOLUME_UP, NULL); LOG_INFO("AirPlay volume up"); } -static void raop_volume_down(void) { +static void raop_volume_down(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_VOLUME_DOWN, NULL); LOG_INFO("AirPlay volume down"); } -static void raop_toggle(void) { +static void raop_toggle(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_TOGGLE, NULL); LOG_INFO("AirPlay play/pause"); } -static void raop_pause(void) { +static void raop_pause(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_PAUSE, NULL); LOG_INFO("AirPlay pause"); } -static void raop_play(void) { +static void raop_play(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_PLAY, NULL); LOG_INFO("AirPlay play"); } -static void raop_stop(void) { +static void raop_stop(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_STOP, NULL); LOG_INFO("AirPlay stop"); } -static void raop_prev(void) { +static void raop_prev(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_PREV, NULL); LOG_INFO("AirPlay previous"); } -static void raop_next(void) { +static void raop_next(bool pressed) { + if (!pressed) return; raop_cmd(raop, RAOP_NEXT, NULL); LOG_INFO("AirPlay next"); } @@ -98,7 +106,7 @@ static bool cmd_handler(raop_event_t event, ...) { // now handle events for display switch(event) { case RAOP_SETUP: - actrls_set(controls, NULL); + actrls_set(controls, false, NULL, actrls_ir_action); displayer_control(DISPLAYER_ACTIVATE, "AIRPLAY"); break; case RAOP_PLAY: diff --git a/components/services/audio_controls.c b/components/services/audio_controls.c index 88577dfe..0efd6b19 100644 --- a/components/services/audio_controls.c +++ b/components/services/audio_controls.c @@ -17,6 +17,7 @@ #include "cJSON.h" #include "buttons.h" #include "config.h" +#include "accessors.h" #include "audio_controls.h" typedef esp_err_t (actrls_config_map_handler) (const cJSON * member, actrls_config_t *cur_config,uint32_t offset); @@ -33,6 +34,9 @@ static esp_err_t actrls_process_type (const cJSON * member, actrls_config_t *cur static esp_err_t actrls_process_bool (const cJSON * member, actrls_config_t *cur_config, uint32_t offset); static esp_err_t actrls_process_action (const cJSON * member, actrls_config_t *cur_config, uint32_t offset); +static esp_err_t actrls_init_json(const char *profile_name, bool create); +static void control_rotary_handler(void *client, rotary_event_e event, bool long_press); + static const actrls_config_map_t actrls_config_map[] = { {"gpio", offsetof(actrls_config_t,gpio), actrls_process_int}, @@ -61,11 +65,88 @@ static actrls_config_t *json_config; cJSON * control_profiles = NULL; static actrls_t default_controls, current_controls; static actrls_hook_t *default_hook, *current_hook; +static bool default_raw_controls, current_raw_controls; +static actrls_ir_handler_t *default_ir_handler, *current_ir_handler; + static struct { bool long_state; bool volume_lock; } rotary; +static const struct ir_action_map_s{ + uint32_t code; + actrls_action_e action; +} ir_action_map[] = { + {0x7689b04f, BCTRLS_DOWN}, {0x7689906f, BCTRLS_LEFT}, {0x7689d02f, BCTRLS_RIGHT}, {0x7689e01f, BCTRLS_UP}, + {0x768900ff, ACTRLS_VOLDOWN}, {0x7689807f, ACTRLS_VOLUP}, + {0x7689c03f, ACTRLS_PREV}, {0x7689a05f, ACTRLS_NEXT}, + {0x768920df, ACTRLS_PAUSE}, {0x768910ef, ACTRLS_PLAY}, + {0x00, 0x00}, +}; + +/**************************************************************************************** + * This function can be called to map IR codes to default actions + */ +bool actrls_ir_action(uint16_t addr, uint16_t cmd) { + uint32_t code = (addr << 16) | cmd; + struct ir_action_map_s const *map = ir_action_map; + + while (map->code && map->code != code) map++; + + if (map->code && current_controls[map->action]) { + current_controls[map->action](true); + return true; + } else { + return false; + } +} + +/**************************************************************************************** + * + */ +static void ir_handler(uint16_t addr, uint16_t cmd) { + ESP_LOGD(TAG, "recaived IR %04hx:%04hx", addr, cmd); + if (current_ir_handler) current_ir_handler(addr, cmd); +} + +/**************************************************************************************** + * + */ +static void set_ir_gpio(int gpio, char *value) { + if (!strcasecmp(value, "ir") ) { + create_infrared(gpio, ir_handler); + } +} + +/**************************************************************************************** + * + */ +esp_err_t actrls_init(const char *profile_name) { + esp_err_t err = ESP_OK; + char *config = config_alloc_get_default(NVS_TYPE_STR, "rotary_config", NULL, 0); + + if (config && *config) { + char *p; + int A = -1, B = -1, SW = -1, longpress = 0; + + // parse config + if ((p = strcasestr(config, "A")) != NULL) A = atoi(strchr(p, '=') + 1); + if ((p = strcasestr(config, "B")) != NULL) B = atoi(strchr(p, '=') + 1); + if ((p = strcasestr(config, "SW")) != NULL) SW = atoi(strchr(p, '=') + 1); + if ((p = strcasestr(config, "volume")) != NULL) rotary.volume_lock = true; + if ((p = strcasestr(config, "longpress")) != NULL) longpress = 1000; + + // create rotary (no handling of long press) + err = create_rotary(NULL, A, B, SW, longpress, control_rotary_handler) ? ESP_OK : ESP_FAIL; + } + + // set infrared GPIO if any + parse_set_GPIO(set_ir_gpio); + + if (!err) return actrls_init_json(profile_name, true); + else return err; +} + /**************************************************************************************** * */ @@ -73,6 +154,13 @@ static void control_handler(void *client, button_event_e event, button_press_e p actrls_config_t *key = (actrls_config_t*) client; actrls_action_detail_t action_detail; + // in raw mode, we just do normal action press *and* release, there is no longpress nor shift + if (current_raw_controls) { + ESP_LOGD(TAG, "calling action %u in raw mode", key->normal[0].action); + if (current_controls[key->normal[0].action]) (*current_controls[key->normal[0].action])(event == BUTTON_PRESSED); + return; + } + switch(press) { case BUTTON_NORMAL: if (long_press) action_detail = key->longpress[event == BUTTON_PRESSED ? 0 : 1]; @@ -87,7 +175,7 @@ static void control_handler(void *client, button_event_e event, button_press_e p break; } - ESP_LOGD(TAG, "control gpio:%u press:%u long:%u event:%u action:%u", key->gpio, press, long_press, event,action_detail.action); + ESP_LOGD(TAG, "control gpio:%u press:%u long:%u event:%u action:%u", key->gpio, press, long_press, event, action_detail.action); // stop here if control hook served the request if (current_hook && (*current_hook)(key->gpio, action_detail.action, event, press, long_press)) return; @@ -114,7 +202,7 @@ static void control_handler(void *client, button_event_e event, button_press_e p } } else if (action_detail.action != ACTRLS_NONE) { ESP_LOGD(TAG, "calling action %u", action_detail.action); - if (current_controls[action_detail.action]) (*current_controls[action_detail.action])(); + if (current_controls[action_detail.action]) (*current_controls[action_detail.action])(event == BUTTON_PRESSED); } } @@ -123,6 +211,15 @@ static void control_handler(void *client, button_event_e event, button_press_e p */ static void control_rotary_handler(void *client, rotary_event_e event, bool long_press) { actrls_action_e action = ACTRLS_NONE; + bool pressed = true; + + // in raw mode, we just pass rotary events + if (current_raw_controls) { + if (event == ROTARY_LEFT) (*current_controls[KNOB_LEFT])(true); + else if (event == ROTARY_RIGHT) (*current_controls[KNOB_RIGHT])(true); + else (*current_controls[KNOB_PUSH])(event == ROTARY_PRESSED); + return; + } switch(event) { case ROTARY_LEFT: @@ -144,17 +241,7 @@ static void control_rotary_handler(void *client, rotary_event_e event, bool long break; } - if (action != ACTRLS_NONE) (*current_controls[action])(); -} - -/**************************************************************************************** - * - */ -esp_err_t actrls_init(int n, const actrls_config_t *config) { - for (int i = 0; i < n; i++) { - button_create((void*) (config + i), config[i].gpio, config[i].type, config[i].pull, config[i].debounce, control_handler, config[i].long_press, config[i].shifter_gpio); - } - return ESP_OK; + if (action != ACTRLS_NONE) (*current_controls[action])(pressed); } /**************************************************************************************** @@ -361,30 +448,13 @@ static void actrls_defaults(actrls_config_t *config) { /**************************************************************************************** * */ -esp_err_t actrls_init_json(const char *profile_name, bool create) { +static esp_err_t actrls_init_json(const char *profile_name, bool create) { esp_err_t err = ESP_OK; actrls_config_t *cur_config = NULL; actrls_config_t *config_root = NULL; + char *config; const cJSON *button; - char *config = config_alloc_get_default(NVS_TYPE_STR, "rotary_config", NULL, 0); - if (config && *config) { - char *p; - int A = -1, B = -1, SW = -1, longpress = 0; - - // parse config - if ((p = strcasestr(config, "A")) != NULL) A = atoi(strchr(p, '=') + 1); - if ((p = strcasestr(config, "B")) != NULL) B = atoi(strchr(p, '=') + 1); - if ((p = strcasestr(config, "SW")) != NULL) SW = atoi(strchr(p, '=') + 1); - if ((p = strcasestr(config, "volume")) != NULL) rotary.volume_lock = true; - if ((p = strcasestr(config, "longpress")) != NULL) longpress = 1000; - - // create rotary (no handling of long press) - err = create_rotary(NULL, A, B, SW, longpress, control_rotary_handler) ? ESP_OK : ESP_FAIL; - } - - if (config) free(config); - if (!profile_name || !*profile_name) return ESP_OK; config = config_alloc_get_default(NVS_TYPE_STR, profile_name, NULL, 0); @@ -416,8 +486,9 @@ esp_err_t actrls_init_json(const char *profile_name, bool create) { esp_err_t loc_err = actrls_process_button(button, cur_config); err = (err == ESP_OK) ? loc_err : err; if (loc_err == ESP_OK) { - if (create) button_create((void*) cur_config, cur_config->gpio,cur_config->type, cur_config->pull,cur_config->debounce, - control_handler, cur_config->long_press, cur_config->shifter_gpio); + if (create) button_create((void*) cur_config, cur_config->gpio,cur_config->type, + cur_config->pull,cur_config->debounce, control_handler, + cur_config->long_press, cur_config->shifter_gpio); } else { ESP_LOGE(TAG,"Error parsing button structure. Button will not be registered."); } @@ -439,18 +510,22 @@ esp_err_t actrls_init_json(const char *profile_name, bool create) { /**************************************************************************************** * */ -void actrls_set_default(const actrls_t controls, actrls_hook_t *hook) { +void actrls_set_default(const actrls_t controls, bool raw_controls, actrls_hook_t *hook, actrls_ir_handler_t *ir_handler) { memcpy(default_controls, controls, sizeof(actrls_t)); memcpy(current_controls, default_controls, sizeof(actrls_t)); default_hook = current_hook = hook; + default_raw_controls = current_raw_controls = raw_controls; + default_ir_handler = current_ir_handler = ir_handler; } /**************************************************************************************** * */ -void actrls_set(const actrls_t controls, actrls_hook_t *hook) { +void actrls_set(const actrls_t controls, bool raw_controls, actrls_hook_t *hook, actrls_ir_handler_t *ir_handler) { memcpy(current_controls, controls, sizeof(actrls_t)); current_hook = hook; + current_raw_controls = raw_controls; + current_ir_handler = ir_handler; } /**************************************************************************************** @@ -459,4 +534,6 @@ void actrls_set(const actrls_t controls, actrls_hook_t *hook) { void actrls_unset(void) { memcpy(current_controls, default_controls, sizeof(actrls_t)); current_hook = default_hook; + current_raw_controls = default_raw_controls; + current_ir_handler = default_ir_handler; } diff --git a/components/services/audio_controls.h b/components/services/audio_controls.h index 7f249105..1fdfd85c 100644 --- a/components/services/audio_controls.h +++ b/components/services/audio_controls.h @@ -18,9 +18,10 @@ typedef enum { ACTRLS_NONE = -1, ACTRLS_VOLUP, ACTRLS_VOLDOWN, ACTRLS_TOGGLE, A ACTRLS_REMAP, ACTRLS_MAX } actrls_action_e; -typedef void (*actrls_handler)(void); +typedef void (*actrls_handler)(bool pressed); typedef actrls_handler actrls_t[ACTRLS_MAX - ACTRLS_NONE - 1]; typedef bool actrls_hook_t(int gpio, actrls_action_e action, button_event_e event, button_press_e press, bool long_press); +typedef bool actrls_ir_handler_t(uint16_t addr, uint16_t cmd); // BEWARE any change to struct below must be mapped to actrls_config_map typedef struct { @@ -37,14 +38,16 @@ typedef struct actrl_config_s { actrls_action_detail_t normal[2], longpress[2], shifted[2], longshifted[2]; // [0] keypressed, [1] keyreleased } actrls_config_t; -esp_err_t actrls_init(int n, const actrls_config_t *config); -esp_err_t actrls_init_json(const char *profile_name, bool create); +esp_err_t actrls_init(const char *profile_name); /* Set hook function to non-null to be set your own direct managemet function, which should return true if it managed the control request, false if the normal handling should be done +The add_release boolean forces a release event to be sent if a press action has been +set, whether a release action has been set or not */ -void actrls_set_default(const actrls_t controls, actrls_hook_t *hook); -void actrls_set(const actrls_t controls, actrls_hook_t *hook); +void actrls_set_default(const actrls_t controls, bool raw_controls, actrls_hook_t *hook, actrls_ir_handler_t *ir_handler); +void actrls_set(const actrls_t controls, bool raw_controls, actrls_hook_t *hook, actrls_ir_handler_t *ir_handler); void actrls_unset(void); +bool actrls_ir_action(uint16_t addr, uint16_t code); diff --git a/components/services/buttons.c b/components/services/buttons.c index 3e097a1b..865a8e6f 100644 --- a/components/services/buttons.c +++ b/components/services/buttons.c @@ -20,6 +20,7 @@ #include "esp_log.h" #include "esp_task.h" #include "driver/gpio.h" +#include "driver/rmt.h" #include "buttons.h" #include "rotary_encoder.h" #include "globdefs.h" @@ -56,11 +57,29 @@ static struct { rotary_handler handler; } rotary; +static struct { + RingbufHandle_t rb; + infrared_handler handler; +} infrared; + static xQueueHandle button_evt_queue; -static QueueSetHandle_t button_queue_set; +static QueueSetHandle_t common_queue_set; static void buttons_task(void* arg); +/**************************************************************************************** + * Start task needed by button,s rotaty and infrared + */ +static void common_task_init(void) { + static DRAM_ATTR StaticTask_t xTaskBuffer __attribute__ ((aligned (4))); + static EXT_RAM_ATTR StackType_t xStack[BUTTON_STACK_SIZE] __attribute__ ((aligned (4))); + + if (!common_queue_set) { + common_queue_set = xQueueCreateSet(BUTTON_QUEUE_LEN + 1); + xTaskCreateStatic( (TaskFunction_t) buttons_task, "buttons_thread", BUTTON_STACK_SIZE, NULL, ESP_TASK_PRIO_MIN + 1, xStack, &xTaskBuffer); + } + } + /**************************************************************************************** * GPIO low-level handler */ @@ -107,8 +126,8 @@ static void buttons_task(void* arg) { while (1) { QueueSetMemberHandle_t xActivatedMember; - // wait on button and rotary queues - if ((xActivatedMember = xQueueSelectFromSet( button_queue_set, portMAX_DELAY )) == NULL) continue; + // wait on button, rotary and infrared queues + if ((xActivatedMember = xQueueSelectFromSet( common_queue_set, portMAX_DELAY )) == NULL) continue; if (xActivatedMember == button_evt_queue) { struct button_s button; @@ -150,7 +169,7 @@ static void buttons_task(void* arg) { // button is a copy, so need to go to real context button.self->shifting = false; } - } else { + } else if (xActivatedMember == rotary.queue) { rotary_encoder_event_t event = { 0 }; // received a rotary event @@ -161,6 +180,9 @@ static void buttons_task(void* arg) { rotary.handler(rotary.client, event.state.direction == ROTARY_ENCODER_DIRECTION_CLOCKWISE ? ROTARY_RIGHT : ROTARY_LEFT, false); + } else { + // this is IR + infrared_receive(infrared.rb, infrared.handler); } } } @@ -176,18 +198,14 @@ void dummy_handler(void *id, button_event_e event, button_press_e press) { * Create buttons */ void button_create(void *client, int gpio, int type, bool pull, int debounce, button_handler handler, int long_press, int shifter_gpio) { - static DRAM_ATTR StaticTask_t xTaskBuffer __attribute__ ((aligned (4))); - static EXT_RAM_ATTR StackType_t xStack[BUTTON_STACK_SIZE] __attribute__ ((aligned (4))); - if (n_buttons >= MAX_BUTTONS) return; ESP_LOGI(TAG, "Creating button using GPIO %u, type %u, pull-up/down %u, long press %u shifter %d", gpio, type, pull, long_press, shifter_gpio); if (!n_buttons) { button_evt_queue = xQueueCreate(BUTTON_QUEUE_LEN, sizeof(struct button_s)); - if (!button_queue_set) button_queue_set = xQueueCreateSet(BUTTON_QUEUE_LEN + 1); - xQueueAddToSet( button_evt_queue, button_queue_set ); - xTaskCreateStatic( (TaskFunction_t) buttons_task, "buttons_thread", BUTTON_STACK_SIZE, NULL, ESP_TASK_PRIO_MIN + 1, xStack, &xTaskBuffer); + common_task_init(); + xQueueAddToSet( button_evt_queue, common_queue_set ); } // just in case this structure is allocated in a future release @@ -340,8 +358,8 @@ bool create_rotary(void *id, int A, int B, int SW, int long_press, rotary_handle rotary.queue = rotary_encoder_create_queue(); rotary_encoder_set_queue(&rotary.info, rotary.queue); - if (!button_queue_set) button_queue_set = xQueueCreateSet(BUTTON_QUEUE_LEN + 1); - xQueueAddToSet( rotary.queue, button_queue_set ); + common_task_init(); + xQueueAddToSet( rotary.queue, common_queue_set ); // create companion button if rotary has a switch if (SW != -1) button_create(id, SW, BUTTON_LOW, true, 0, rotary_button_handler, long_press, -1); @@ -350,3 +368,18 @@ bool create_rotary(void *id, int A, int B, int SW, int long_press, rotary_handle return true; } + +/**************************************************************************************** + * Create Infrared + */ +bool create_infrared(int gpio, infrared_handler handler) { + // initialize IR infrastructure + infrared_init(&infrared.rb, gpio); + infrared.handler = handler; + + // join the queue set + common_task_init(); + xRingbufferAddToQueueSetRead(infrared.rb, common_queue_set); + + return (infrared.rb != NULL); +} diff --git a/components/services/buttons.h b/components/services/buttons.h index f8996733..4793fa09 100644 --- a/components/services/buttons.h +++ b/components/services/buttons.h @@ -7,6 +7,8 @@ */ #pragma once + +#include "infrared.h" // button type (pressed = LOW or HIGH, matches GPIO level) #define BUTTON_LOW 0 @@ -32,3 +34,5 @@ typedef enum { ROTARY_LEFT, ROTARY_RIGHT, ROTARY_PRESSED, ROTARY_RELEASED } rota typedef void (*rotary_handler)(void *id, rotary_event_e event, bool long_press); bool create_rotary(void *id, int A, int B, int SW, int long_press, rotary_handler handler); + +bool create_infrared(int gpio, infrared_handler handler); diff --git a/components/services/infrared.c b/components/services/infrared.c new file mode 100644 index 00000000..c637124d --- /dev/null +++ b/components/services/infrared.c @@ -0,0 +1,177 @@ +/* + * infrared receiver (using espressif's example) + * + * (c) Philippe G. 2020, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ +#include +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_err.h" +#include "esp_log.h" +#include "driver/rmt.h" +#include "infrared.h" + +static const char* TAG = "IR"; + +#define RMT_RX_ACTIVE_LEVEL 0 /*!< If we connect with a IR receiver, the data is active low */ + +#define RMT_RX_CHANNEL 0 /*!< RMT channel for receiver */ +#define RMT_CLK_DIV 100 /*!< RMT counter clock divider */ +#define RMT_TICK_10_US (80000000/RMT_CLK_DIV/100000) /*!< RMT counter value for 10 us.(Source clock is APB clock) */ + +#define NEC_HEADER_HIGH_US 9000 /*!< NEC protocol header: positive 9ms */ +#define NEC_HEADER_LOW_US 4500 /*!< NEC protocol header: negative 4.5ms*/ +#define NEC_BIT_ONE_HIGH_US 560 /*!< NEC protocol data bit 1: positive 0.56ms */ +#define NEC_BIT_ONE_LOW_US (2250-NEC_BIT_ONE_HIGH_US) /*!< NEC protocol data bit 1: negative 1.69ms */ +#define NEC_BIT_ZERO_HIGH_US 560 /*!< NEC protocol data bit 0: positive 0.56ms */ +#define NEC_BIT_ZERO_LOW_US (1120-NEC_BIT_ZERO_HIGH_US) /*!< NEC protocol data bit 0: negative 0.56ms */ +#define NEC_BIT_MARGIN 150 /*!< NEC parse margin time */ + +#define NEC_ITEM_DURATION(d) ((d & 0x7fff)*10/RMT_TICK_10_US) /*!< Parse duration time from memory register value */ +#define NEC_DATA_ITEM_NUM 34 /*!< NEC code item number: header + 32bit data + end */ +#define rmt_item32_tIMEOUT_US 9500 /*!< RMT receiver timeout value(us) */ + +/**************************************************************************************** + * + */ +inline bool nec_check_in_range(int duration_ticks, int target_us, int margin_us) { + if(( NEC_ITEM_DURATION(duration_ticks) < (target_us + margin_us)) + && ( NEC_ITEM_DURATION(duration_ticks) > (target_us - margin_us))) { + return true; + } else { + return false; + } +} + +/**************************************************************************************** + * + */ +static bool nec_header_if(rmt_item32_t* item) { + if((item->level0 == RMT_RX_ACTIVE_LEVEL && item->level1 != RMT_RX_ACTIVE_LEVEL) + && nec_check_in_range(item->duration0, NEC_HEADER_HIGH_US, NEC_BIT_MARGIN) + && nec_check_in_range(item->duration1, NEC_HEADER_LOW_US, NEC_BIT_MARGIN)) { + return true; + } + return false; +} + +/**************************************************************************************** + * + */ +static bool nec_bit_one_if(rmt_item32_t* item) { + if((item->level0 == RMT_RX_ACTIVE_LEVEL && item->level1 != RMT_RX_ACTIVE_LEVEL) + && nec_check_in_range(item->duration0, NEC_BIT_ONE_HIGH_US, NEC_BIT_MARGIN) + && nec_check_in_range(item->duration1, NEC_BIT_ONE_LOW_US, NEC_BIT_MARGIN)) { + return true; + } + return false; +} + +/**************************************************************************************** + * + */ +static bool nec_bit_zero_if(rmt_item32_t* item) { + if((item->level0 == RMT_RX_ACTIVE_LEVEL && item->level1 != RMT_RX_ACTIVE_LEVEL) + && nec_check_in_range(item->duration0, NEC_BIT_ZERO_HIGH_US, NEC_BIT_MARGIN) + && nec_check_in_range(item->duration1, NEC_BIT_ZERO_LOW_US, NEC_BIT_MARGIN)) { + return true; + } + return false; +} + +/**************************************************************************************** + * + */ +static int nec_parse_items(rmt_item32_t* item, int item_num, uint16_t* addr, uint16_t* data) { + int w_len = item_num; + if(w_len < NEC_DATA_ITEM_NUM) { + return -1; + } + int i = 0, j = 0; + if(!nec_header_if(item++)) { + return -1; + } + uint16_t addr_t = 0; + for(j = 15; j >= 0; j--) { + if(nec_bit_one_if(item)) { + addr_t |= (1 << j); + } else if(nec_bit_zero_if(item)) { + addr_t |= (0 << j); + } else { + return -1; + } + item++; + i++; + } + uint16_t data_t = 0; + for(j = 15; j >= 0; j--) { + if(nec_bit_one_if(item)) { + data_t |= (1 << j); + } else if(nec_bit_zero_if(item)) { + data_t |= (0 << j); + } else { + return -1; + } + item++; + i++; + } + *addr = addr_t; + *data = data_t; + return i; +} + +/**************************************************************************************** + * + */ +void infrared_receive(RingbufHandle_t rb, infrared_handler handler) { + size_t rx_size = 0; + rmt_item32_t* item = (rmt_item32_t*) xRingbufferReceive(rb, &rx_size, 10 / portTICK_RATE_MS); + + if (item) { + uint16_t addr, cmd; + int offset = 0; + + while (1) { + // parse data value from ringbuffer. + int res = nec_parse_items(item + offset, rx_size / 4 - offset, &addr, &cmd); + if (res > 0) { + offset += res + 1; + handler(addr, cmd); + ESP_LOGD(TAG, "RMT RCV --- addr: 0x%04x cmd: 0x%04x", addr, cmd); + } else break; + } + + // after parsing the data, return spaces to ringbuffer. + vRingbufferReturnItem(rb, (void*) item); + } +} + +/**************************************************************************************** + * + */ +void infrared_init(RingbufHandle_t *rb, int gpio) { + rmt_config_t rmt_rx; + + ESP_LOGI(TAG, "Starting Infrared Receiver on gpio %d", gpio); + + // initialize RMT driver + rmt_rx.channel = RMT_RX_CHANNEL; + rmt_rx.gpio_num = gpio; + rmt_rx.clk_div = RMT_CLK_DIV; + rmt_rx.mem_block_num = 1; + rmt_rx.rmt_mode = RMT_MODE_RX; + rmt_rx.rx_config.filter_en = true; + rmt_rx.rx_config.filter_ticks_thresh = 100; + rmt_rx.rx_config.idle_threshold = rmt_item32_tIMEOUT_US / 10 * (RMT_TICK_10_US); + rmt_config(&rmt_rx); + rmt_driver_install(rmt_rx.channel, 1000, 0); + + // get RMT RX ringbuffer + rmt_get_ringbuf_handle(RMT_RX_CHANNEL, rb); + rmt_rx_start(RMT_RX_CHANNEL, 1); +} \ No newline at end of file diff --git a/components/services/infrared.h b/components/services/infrared.h new file mode 100644 index 00000000..ea0ee202 --- /dev/null +++ b/components/services/infrared.h @@ -0,0 +1,17 @@ +/* + * (c) Philippe G. 2019, philippe_44@outlook.com + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + * + */ + +#pragma once + +#include +#include "freertos/FreeRTOS.h" +#include "freertos/ringbuf.h" + +typedef void (*infrared_handler)(uint16_t addr, uint16_t cmd); +void infrared_receive(RingbufHandle_t rb, infrared_handler handler); +void infrared_init(RingbufHandle_t *rb, int gpio); diff --git a/components/services/monitor.c b/components/services/monitor.c index eb032244..82a51c50 100644 --- a/components/services/monitor.c +++ b/components/services/monitor.c @@ -140,24 +140,28 @@ bool spkfault_svc (void) { /**************************************************************************************** * */ -void set_jack_gpio(int gpio, char *value) { +#ifndef CONFIG_JACK_LOCKED +static void set_jack_gpio(int gpio, char *value) { if (strcasestr(value, "jack")) { char *p; jack.gpio = gpio; if ((p = strchr(value, ':')) != NULL) jack.active = atoi(p + 1); } } +#endif /**************************************************************************************** * */ -void set_spkfault_gpio(int gpio, char *value) { +#ifndef CONFIG_SPKFAULT_LOCKED +static void set_spkfault_gpio(int gpio, char *value) { if (strcasestr(value, "spkfault")) { char *p; spkfault.gpio = gpio; if ((p = strchr(value, ':')) != NULL) spkfault.active = atoi(p + 1); } } +#endif /**************************************************************************************** * diff --git a/components/squeezelite/controls.c b/components/squeezelite/controls.c index db4b54a2..f2a6c0f8 100644 --- a/components/squeezelite/controls.c +++ b/components/squeezelite/controls.c @@ -7,84 +7,225 @@ */ #include "squeezelite.h" +#include "config.h" #include "audio_controls.h" static log_level loglevel = lINFO; +#define DOWN_OFS 0x10000 +#define UP_OFS 0x20000 + +// numbers are simply 0..9 + +// arrow_right.down = 0001000e seems to be missing ... +enum { BUTN_POWER_FRONT = 0X0A, BUTN_ARROW_UP, BUTN_ARROW_DOWN, BUTN_ARROW_LEFT, BUTN_KNOB_PUSH, BUTN_SEARCH, + BUTN_REW, BUTN_FWD, BUTN_PLAY, BUTN_ADD, BUTN_BRIGHTNESS, BUTN_NOW_PLAYING, + BUTN_PAUSE = 0X17, BUTN_BROWSE, BUTN_VOLUP_FRONT, BUTN_VOLDOWN_FRONT, BUTN_SIZE, BUTN_VISUAL, BUTN_VOLUMEMODE, + BUTN_PRESET_1 = 0X23, BUTN_PRESET_2, BUTN_PRESET_3, BUTN_PRESET_4, BUTN_PRESET_5, BUTN_PRESET_6, BUTN_SNOOZE, + BUTN_KNOB_LEFT = 0X5A, BUTN_KNOB_RIGHT }; + +#define BUTN_ARROW_RIGHT BUTN_KNOB_PUSH + +#pragma pack(push, 1) + +struct BUTN_header { + char opcode[4]; + u32_t length; + u32_t jiffies; + u32_t button; +}; + +struct IR_header { + char opcode[4]; + u32_t length; + u32_t jiffies; + u8_t format; // unused + u8_t bits; // unused + u32_t code; +}; + +#pragma pack(pop) + static in_addr_t server_ip; static u16_t server_hport; static u16_t server_cport; static u8_t mac[6]; static void (*chained_notify)(in_addr_t, u16_t, u16_t); +static bool raw_mode; static void cli_send_cmd(char *cmd); -static void lms_volume_up(void) { - cli_send_cmd("button volup"); +/**************************************************************************************** + * Send BUTN + */ +static void sendBUTN(int code, bool pressed) { + struct BUTN_header pkt_header; + + memset(&pkt_header, 0, sizeof(pkt_header)); + memcpy(&pkt_header.opcode, "BUTN", 4); + + pkt_header.length = htonl(sizeof(pkt_header) - 8); + pkt_header.jiffies = htonl(gettime_ms()); + pkt_header.button = htonl(code + (pressed ? DOWN_OFS : UP_OFS)); + + LOG_INFO("sending BUTN code %04x %s", code, pressed ? "down" : "up"); + + LOCK_P; + send_packet((uint8_t *) &pkt_header, sizeof(pkt_header)); + UNLOCK_P; } -static void lms_volume_down(void) { - cli_send_cmd("button voldown"); +/**************************************************************************************** + * Send IR + */ +static void sendIR(u16_t addr, u16_t cmd) { + struct IR_header pkt_header; + + memset(&pkt_header, 0, sizeof(pkt_header)); + memcpy(&pkt_header.opcode, "IR ", 4); + + pkt_header.length = htonl(sizeof(pkt_header) - 8); + pkt_header.jiffies = htonl(gettime_ms()); + pkt_header.format = pkt_header.bits = 0; + pkt_header.code = htonl((addr << 16) | cmd); + + LOG_INFO("sending IR code %04x", (addr << 16) | cmd); + + LOCK_P; + send_packet((uint8_t *) &pkt_header, sizeof(pkt_header)); + UNLOCK_P; } -static void lms_toggle(void) { - cli_send_cmd("pause"); +static void lms_volume_up(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_VOLUP_FRONT, pressed); + } else { + cli_send_cmd("button volup"); + } } -static void lms_pause(void) { - cli_send_cmd("pause 1"); +static void lms_volume_down(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_VOLDOWN_FRONT, pressed); + } else { + cli_send_cmd("button voldown"); + } } -static void lms_play(void) { - cli_send_cmd("button play.single"); +static void lms_toggle(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_PAUSE, pressed); + } else { + cli_send_cmd("pause"); + } } -static void lms_stop(void) { +static void lms_pause(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_PAUSE, pressed); + } else { + cli_send_cmd("pause 1"); + } +} + +static void lms_play(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_PLAY, pressed); + } else { + cli_send_cmd("button play.single"); + } +} + +static void lms_stop(bool pressed) { cli_send_cmd("button stop"); } -static void lms_rew(void) { - cli_send_cmd("button rew.repeat"); +static void lms_rew(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_REW, pressed); + } else { + cli_send_cmd("button rew.repeat"); + } } -static void lms_fwd(void) { - cli_send_cmd("button fwd.repeat"); +static void lms_fwd(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_FWD, pressed); + } else { + cli_send_cmd("button fwd.repeat"); + } } -static void lms_prev(void) { - cli_send_cmd("button rew"); +static void lms_prev(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_REW, pressed); + } else { + cli_send_cmd("button rew"); + } } -static void lms_next(void) { - cli_send_cmd("button fwd"); +static void lms_next(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_FWD, pressed); + } else { + cli_send_cmd("button fwd"); + } } -static void lms_up(void) { - cli_send_cmd("button arrow_up"); +static void lms_up(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_ARROW_UP, pressed); + } else { + cli_send_cmd("button arrow_up"); + } } -static void lms_down(void) { - cli_send_cmd("button arrow_down"); +static void lms_down(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_ARROW_DOWN, pressed); + } else { + cli_send_cmd("button arrow_down"); + } } -static void lms_left(void) { - cli_send_cmd("button arrow_left"); +static void lms_left(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_ARROW_LEFT, pressed); + } else { + cli_send_cmd("button arrow_left"); + } } -static void lms_right(void) { - cli_send_cmd("button arrow_right"); +static void lms_right(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_ARROW_RIGHT, pressed); + } else { + cli_send_cmd("button arrow_right"); + } } -static void lms_knob_left(void) { - cli_send_cmd("button knob_left"); +static void lms_knob_left(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_KNOB_LEFT, pressed); + } else { + cli_send_cmd("button knob_left"); + } } -static void lms_knob_right(void) { - cli_send_cmd("button knob_right"); +static void lms_knob_right(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_KNOB_RIGHT, pressed); + } else { + cli_send_cmd("button knob_right"); + } } -static void lms_knob_push(void) { - cli_send_cmd("button knob_push"); +static void lms_knob_push(bool pressed) { + if (raw_mode) { + sendBUTN(BUTN_KNOB_PUSH, pressed); + } else { + cli_send_cmd("button knob_push"); + } } const actrls_t LMS_controls = { @@ -137,13 +278,27 @@ static void notify(in_addr_t ip, u16_t hport, u16_t cport) { if (chained_notify) (*chained_notify)(ip, hport, cport); } +/**************************************************************************************** + * IR handler + */ +static bool ir_handler(u16_t addr, u16_t cmd) { + sendIR(addr, cmd); + return true; +} + /**************************************************************************************** * Initialize controls - shall be called once from output_init_embedded */ void sb_controls_init(void) { - LOG_INFO("initializing CLI controls"); + char *p = config_alloc_get_default(NVS_TYPE_STR, "lms_ctrls_raw", "n", 0); + raw_mode = p && (*p == '1' || *p == 'Y' || *p == 'y'); + free(p); + + LOG_INFO("initializing audio (buttons/rotary/ir) controls (raw:%u)", raw_mode); + get_mac(mac); - actrls_set_default(LMS_controls, NULL); + actrls_set_default(LMS_controls, raw_mode, NULL, ir_handler); + chained_notify = server_notify; server_notify = notify; } \ No newline at end of file diff --git a/components/squeezelite/display.c b/components/squeezelite/display.c index 86d2d316..75459d6f 100644 --- a/components/squeezelite/display.c +++ b/components/squeezelite/display.c @@ -197,23 +197,20 @@ extern const uint8_t vu_bitmap[] asm("_binary_vu_data_start"); #define ANIM_SCREEN_1 0x04 #define ANIM_SCREEN_2 0x08 -static u8_t ANIC_resp = ANIM_NONE; -static uint16_t SETD_width; - #define SCROLL_STACK_SIZE (3*1024) #define LINELEN 40 static log_level loglevel = lINFO; static bool (*slimp_handler_chain)(u8_t *data, int len); -static void (*slimp_loop_chain)(void); static void (*notify_chain)(in_addr_t ip, u16_t hport, u16_t cport); static bool (*display_bus_chain)(void *from, enum display_bus_cmd_e cmd); #define max(a,b) (((a) > (b)) ? (a) : (b)) static void server(in_addr_t ip, u16_t hport, u16_t cport); -static void send_server(void); +static void sendSETD(u16_t width, u16_t height); +static void sendANIC(u8_t code); static bool handler(u8_t *data, int len); static bool display_bus_handler(void *from, enum display_bus_cmd_e cmd); static void vfdc_handler( u8_t *_data, int bytes_read); @@ -223,7 +220,6 @@ static void grfs_handler(u8_t *data, int len); static void grfg_handler(u8_t *data, int len); static void grfa_handler(u8_t *data, int len); static void visu_handler(u8_t *data, int len); - static void displayer_task(void* arg); /* scrolling undocumented information @@ -293,11 +289,13 @@ bool sb_display_init(void) { return false; } + // inform LMS of our screen dimensions + sendSETD(GDS_GetWidth(display), GDS_GetHeight(display)); + // need to force height to 32 maximum displayer.width = GDS_GetWidth(display); displayer.height = min(GDS_GetHeight(display), SB_HEIGHT); - SETD_width = displayer.width; - + // create visu configuration visu.bar_gap = 1; visu.speed = 100; @@ -319,9 +317,6 @@ bool sb_display_init(void) { slimp_handler_chain = slimp_handler; slimp_handler = handler; - slimp_loop_chain = slimp_loop; - slimp_loop = send_server; - notify_chain = server_notify; server_notify = server; @@ -358,52 +353,44 @@ static bool display_bus_handler(void *from, enum display_bus_cmd_e cmd) { else return true; } - /**************************************************************************************** - * Send message to server (ANIC at that time) + * Send ANImation Complete */ -static void send_server(void) { - /* - This complication is needed as we cannot send direclty to LMS, because - send_packet is not thread safe. So must subscribe to slimproto busy loop - end send from there - */ - if (ANIC_resp != ANIM_NONE) { - struct ANIC_header pkt_header; +static void sendANIC(u8_t code) { + struct ANIC_header pkt_header; - memset(&pkt_header, 0, sizeof(pkt_header)); - memcpy(&pkt_header.opcode, "ANIC", 4); - pkt_header.length = htonl(sizeof(pkt_header) - 8); - pkt_header.mode = ANIC_resp; + memset(&pkt_header, 0, sizeof(pkt_header)); + memcpy(&pkt_header.opcode, "ANIC", 4); + pkt_header.length = htonl(sizeof(pkt_header) - 8); + pkt_header.mode = code; - send_packet((uint8_t *) &pkt_header, sizeof(pkt_header)); + LOCK_P; + send_packet((uint8_t *) &pkt_header, sizeof(pkt_header)); + UNLOCK_P; +} - ANIC_resp = ANIM_NONE; - } - - if (SETD_width) { - struct SETD_header pkt_header; +/**************************************************************************************** + * Send SETD for width + */ +static void sendSETD(u16_t width, u16_t height) { + struct SETD_header pkt_header; - memset(&pkt_header, 0, sizeof(pkt_header)); - memcpy(&pkt_header.opcode, "SETD", 4); + memset(&pkt_header, 0, sizeof(pkt_header)); + memcpy(&pkt_header.opcode, "SETD", 4); - pkt_header.id = 0xfe; // id 0xfe is width S:P:Squeezebox2 - pkt_header.length = htonl(sizeof(pkt_header) + 4 - 8); + pkt_header.id = 0xfe; // id 0xfe is width S:P:Squeezebox2 + pkt_header.length = htonl(sizeof(pkt_header) + 4 - 8); - u16_t height = GDS_GetHeight(display); - LOG_INFO("sending dimension %ux%u", SETD_width, height); + LOG_INFO("sending dimension %ux%u", width, height); - SETD_width = htons(SETD_width); - height = htons(height); + width = htons(width); + height = htons(height); - send_packet((uint8_t *) &pkt_header, sizeof(pkt_header)); - send_packet((uint8_t *) &SETD_width, 2); - send_packet((uint8_t *) &height, 2); - - SETD_width = 0; - } - - if (slimp_loop_chain) (*slimp_loop_chain)(); + LOCK_P; + send_packet((uint8_t *) &pkt_header, sizeof(pkt_header)); + send_packet((uint8_t *) &width, 2); + send_packet((uint8_t *) &height, 2); + UNLOCK_P; } /**************************************************************************************** @@ -416,11 +403,13 @@ static void server(in_addr_t ip, u16_t hport, u16_t cport) { sprintf(msg, "%s:%hu", inet_ntoa(ip), hport); if (displayer.owned) GDS_TextPos(display, GDS_FONT_DEFAULT, GDS_TEXT_CENTERED, GDS_TEXT_CLEAR | GDS_TEXT_UPDATE, msg); - SETD_width = displayer.width; displayer.dirty = true; xSemaphoreGive(displayer.mutex); + // inform new LMS server of our capabilities + sendSETD(displayer.width, GDS_GetHeight(display)); + if (notify_chain) (*notify_chain)(ip, hport, cport); } @@ -1141,8 +1130,7 @@ static void displayer_task(void *args) { // see if we need to pause or if we are done if (scroller.mode) { - // can't call directly send_packet from slimproto as it's not re-entrant - ANIC_resp = ANIM_SCROLL_ONCE | ANIM_SCREEN_1; + sendANIC(ANIM_SCROLL_ONCE | ANIM_SCREEN_1); LOG_INFO("scroll-once terminated"); } else { scroller.wake = scroller.pause; diff --git a/components/squeezelite/embedded.c b/components/squeezelite/embedded.c index 92b1b2fe..1ac32b01 100644 --- a/components/squeezelite/embedded.c +++ b/components/squeezelite/embedded.c @@ -15,6 +15,8 @@ #include "esp_timer.h" #include "esp_wifi.h" +mutex_type slimp_mutex; + void get_mac(u8_t mac[]) { esp_read_mac(mac, ESP_MAC_WIFI_STA); } @@ -46,6 +48,7 @@ extern bool sb_display_init(void); u8_t custom_player_id = 12; void embedded_init(void) { + mutex_create(slimp_mutex); sb_controls_init(); if (sb_display_init()) custom_player_id = 100; } diff --git a/components/squeezelite/embedded.h b/components/squeezelite/embedded.h index ec710c8b..85c08003 100644 --- a/components/squeezelite/embedded.h +++ b/components/squeezelite/embedded.h @@ -58,6 +58,9 @@ void embedded_init(void); void register_external(void); void deregister_external(void); void decode_restore(int external); +extern mutex_type slimp_mutex; +#define LOCK_P mutex_lock(slimp_mutex) +#define UNLOCK_P mutex_unlock(slimp_mutex) // must provide or define as 0xffff u16_t get_RSSI(void); @@ -77,5 +80,5 @@ void output_visu_close(void); bool (*slimp_handler)(u8_t *data, int len); void (*slimp_loop)(void); void (*server_notify)(in_addr_t ip, u16_t hport, u16_t cport); - + #endif // EMBEDDED_H diff --git a/components/squeezelite/slimproto.c b/components/squeezelite/slimproto.c index f0b447d6..8522a811 100644 --- a/components/squeezelite/slimproto.c +++ b/components/squeezelite/slimproto.c @@ -67,6 +67,10 @@ event_event wake_e; #define UNLOCK_O mutex_unlock(outputbuf->mutex) #define LOCK_D mutex_lock(decode.mutex) #define UNLOCK_D mutex_unlock(decode.mutex) +#if !EMBEDDED +#define LOCK_P +#define UNLOCK_P +#endif #if IR #define LOCK_I mutex_lock(ir.mutex) #define UNLOCK_I mutex_unlock(ir.mutex) @@ -149,11 +153,12 @@ static void sendHELO(bool reconnect, const char *fixed_cap, const char *var_cap, LOG_INFO("mac: %02x:%02x:%02x:%02x:%02x:%02x", pkt.mac[0], pkt.mac[1], pkt.mac[2], pkt.mac[3], pkt.mac[4], pkt.mac[5]); LOG_INFO("cap: %s%s%s", base_cap, fixed_cap, var_cap); - + LOCK_P; send_packet((u8_t *)&pkt, sizeof(pkt)); send_packet((u8_t *)base_cap, strlen(base_cap)); send_packet((u8_t *)fixed_cap, strlen(fixed_cap)); send_packet((u8_t *)var_cap, strlen(var_cap)); + UNLOCK_P; } static void sendSTAT(const char *event, u32_t server_timestamp) { @@ -205,7 +210,9 @@ static void sendSTAT(const char *event, u32_t server_timestamp) { ms_played - now + status.stream_start, status.device_frames * 1000 / status.current_sample_rate, now - status.updated); } + LOCK_P; send_packet((u8_t *)&pkt, sizeof(pkt)); + UNLOCK_P; } static void sendDSCO(disconnect_code disconnect) { @@ -218,7 +225,9 @@ static void sendDSCO(disconnect_code disconnect) { LOG_DEBUG("DSCO: %d", disconnect); + LOCK_P; send_packet((u8_t *)&pkt, sizeof(pkt)); + UNLOCK_P; } static void sendRESP(const char *header, size_t len) { @@ -229,9 +238,11 @@ static void sendRESP(const char *header, size_t len) { pkt_header.length = htonl(sizeof(pkt_header) + len - 8); LOG_DEBUG("RESP"); - + + LOCK_P; send_packet((u8_t *)&pkt_header, sizeof(pkt_header)); send_packet((u8_t *)header, len); + UNLOCK_P; } static void sendMETA(const char *meta, size_t len) { @@ -243,8 +254,10 @@ static void sendMETA(const char *meta, size_t len) { LOG_DEBUG("META"); + LOCK_P; send_packet((u8_t *)&pkt_header, sizeof(pkt_header)); send_packet((u8_t *)meta, len); + UNLOCK_P; } static void sendSETDName(const char *name) { @@ -258,8 +271,10 @@ static void sendSETDName(const char *name) { LOG_DEBUG("set playername: %s", name); + LOCK_P; send_packet((u8_t *)&pkt_header, sizeof(pkt_header)); send_packet((u8_t *)name, strlen(name) + 1); + UNLOCK_P; } #if IR @@ -274,8 +289,9 @@ void sendIR(u32_t code, u32_t ts) { pkt.ir_code = htonl(code); LOG_DEBUG("IR: ir code: 0x%x ts: %u", code, ts); - + LOCK_P; send_packet((u8_t *)&pkt, sizeof(pkt)); + UNLOCK_P; } #endif diff --git a/main/esp_app_main.c b/main/esp_app_main.c index 083a6a3f..abc89f3a 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -284,6 +284,9 @@ void register_default_nvs(){ ESP_LOGD(TAG,"Registering default Audio control board type %s, value ","actrls_config"); config_set_default(NVS_TYPE_STR, "actrls_config", "", 0); + ESP_LOGD(TAG,"Registering default value for key %s", "lms_ctrls_raw"); + config_set_default(NVS_TYPE_STR, "lms_ctrls_raw", "n", 0); + ESP_LOGD(TAG,"Registering default Audio control board type %s, value %s", "rotary_config", CONFIG_ROTARY_ENCODER); config_set_default(NVS_TYPE_STR, "rotary_config", CONFIG_ROTARY_ENCODER, 0); @@ -392,7 +395,7 @@ void app_main() ESP_LOGD(TAG,"Getting audio control mapping "); char *actrls_config = config_alloc_get_default(NVS_TYPE_STR, "actrls_config", NULL, 0); - if (actrls_init_json(actrls_config, true) == ESP_OK) { + if (actrls_init(actrls_config) == ESP_OK) { ESP_LOGD(TAG,"Initializing audio control buttons type %s", actrls_config); } else { ESP_LOGD(TAG,"No audio control buttons"); From 1671dc5cbdf13305a5ebd52bd611b0bb6f5c1199 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 9 May 2020 18:15:03 -0700 Subject: [PATCH 15/27] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b142499..0257eecc 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ The IR codes are send "as is" to LMS, so only a Logitech SB remote from Boom, Cl In AirPlay and Bluetooth mode, only these native remotes are supported, I've not added the option to make your own mapping -See "set GPIO" below to set the GPIO associated to infrared receiver. +See "set GPIO" below to set the GPIO associated to infrared receiver (option "ir"). ### Set GPIO The parameter "set_GPIO" is use to assign GPIO to various functions. @@ -112,6 +112,8 @@ If you have an audio jack that supports insertion (use :0 or :1 to set the level You can set the Green and Red status led as well with their respective active state (:0 or :1) +The \ parameter set the GPIO associated to an IR receiver. No need to add pullup or capacitor + Syntax is: ``` From 63bfa1daa89857e724583c98f467ba5ea8002be3 Mon Sep 17 00:00:00 2001 From: philippe44 Date: Sat, 9 May 2020 18:15:48 -0700 Subject: [PATCH 16/27] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0257eecc..94ce7d63 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,8 @@ A=,B=[,SW=gpio>[,volume][,longpress]] HW note: all gpio used for rotary have internal pull-up so normally there is no need to provide Vcc to the encoder. Nevertheless if the encoder board you're using also has its own pull-up that are stronger than ESP32's ones (which is likely the case), then there will be crosstalk between gpio, so you must bring Vcc. Look at your board schematic and you'll understand that these board pull-up create a "winning" pull-down when any other pin is grounded. +See also the "IMPORTANT NOTE" on the "Buttons" section + ### Buttons Buttons are described using a JSON string with the following syntax ``` From d2fc45eca2fb65586c3cf93780305b42046d812d Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sat, 9 May 2020 21:18:48 -0700 Subject: [PATCH 17/27] forced - release --- components/squeezelite/controls.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/squeezelite/controls.c b/components/squeezelite/controls.c index f2a6c0f8..0152cf6b 100644 --- a/components/squeezelite/controls.c +++ b/components/squeezelite/controls.c @@ -274,7 +274,9 @@ static void notify(in_addr_t ip, u16_t hport, u16_t cport) { server_ip = ip; server_hport = hport; server_cport = cport; + LOG_INFO("notified server %s hport %hu cport %hu", inet_ntoa(ip), hport, cport); + if (chained_notify) (*chained_notify)(ip, hport, cport); } From c827dea05ae23e50ca1dae1c1ff8513a445043fb Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sat, 9 May 2020 21:53:01 -0700 Subject: [PATCH 18/27] forced - release --- components/squeezelite/controls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/squeezelite/controls.c b/components/squeezelite/controls.c index 0152cf6b..290dff52 100644 --- a/components/squeezelite/controls.c +++ b/components/squeezelite/controls.c @@ -15,7 +15,7 @@ static log_level loglevel = lINFO; #define DOWN_OFS 0x10000 #define UP_OFS 0x20000 -// numbers are simply 0..9 +// numbers are simply 0..9 but are not used // arrow_right.down = 0001000e seems to be missing ... enum { BUTN_POWER_FRONT = 0X0A, BUTN_ARROW_UP, BUTN_ARROW_DOWN, BUTN_ARROW_LEFT, BUTN_KNOB_PUSH, BUTN_SEARCH, From 90860afe3de491cc32ef23511b6462f4bb76531f Mon Sep 17 00:00:00 2001 From: Michael Herger Date: Sun, 10 May 2020 11:14:19 +0200 Subject: [PATCH 19/27] As `spectrum` and `artwork` prefs are not handled by the default Settings handler we can't expect the values to be in the `prefs` element. --- .../EN/plugins/SqueezeESP32/settings/player.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html index ade09afe..c7e950cf 100644 --- a/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html +++ b/plugin/SqueezeESP32/HTML/EN/plugins/SqueezeESP32/settings/player.html @@ -12,27 +12,27 @@ [% END %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE" desc="PLUGIN_SQUEEZEESP32_SPECTRUM_SCALE_DESC" %] - + [% END %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM" desc="PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_DESC" %] [% "PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_SIZE" | string %]  - + [% "PLUGIN_SQUEEZEESP32_SMALL_SPECTRUM_BAND" | string %]  - + [% END %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND" desc="PLUGIN_SQUEEZEESP32_FULL_SPECTRUM_BAND_DESC" %] - + [% END %] [% WRAPPER setting title="PLUGIN_SQUEEZEESP32_ARTWORK" desc="PLUGIN_SQUEEZEESP32_ARTWORK_DESC" %] [% "PLUGIN_SQUEEZEESP32_ARTWORK_ENABLE" | string %]  -   +   [% "PLUGIN_SQUEEZEESP32_ARTWORK_X" | string %]  - + [% "PLUGIN_SQUEEZEESP32_ARTWORK_Y" | string %]  - + [% END %]
From f01d746e9bcf61858025150a920d87d383dc2bbd Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sun, 10 May 2020 11:51:02 -0700 Subject: [PATCH 20/27] plugin clean-up, add equalizer auto-update, add CLI for equalizer - Thanks Michael! --- plugin/SqueezeESP32.zip | Bin 8822 -> 10335 bytes plugin/SqueezeESP32/install.xml | 2 +- plugin/repo.xml | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index d9ab112df2c76cd73e9389d9df4f332a76616331..26e71525c33acd69928b2cb9671c7278b105a822 100644 GIT binary patch delta 7071 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 delta 5520 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 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.83 + 0.90 Philippe diff --git a/plugin/repo.xml b/plugin/repo.xml index 9fd064df..eb08ecb9 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -1,10 +1,10 @@ - + https://github.com/sle118/squeezelite-esp32 Philippe - 3bbf5a40ff368472c0de6d43fa61134f8f34558e + ac9c69895bddd15abac15717e9fe50b69aaa8101 philippe_44@outlook.com SqueezeESP32 additional player id (100) http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip From bbe62352a2228287f1391387792df5d1108cf890 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sun, 10 May 2020 12:04:38 -0700 Subject: [PATCH 21/27] CRLF in strings.txt - grrr! --- plugin/SqueezeESP32.zip | Bin 10335 -> 10328 bytes plugin/SqueezeESP32/install.xml | 2 +- plugin/repo.xml | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index 26e71525c33acd69928b2cb9671c7278b105a822..a73554b846adcae3a96eb7dd74e12920884b279e 100644 GIT binary patch delta 1900 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 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.90 + 0.91 Philippe diff --git a/plugin/repo.xml b/plugin/repo.xml index eb08ecb9..fff59b9c 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -1,10 +1,10 @@ - + https://github.com/sle118/squeezelite-esp32 Philippe - ac9c69895bddd15abac15717e9fe50b69aaa8101 + 813cbdee552aed7f96696ef9a77a72a9ff19e4de philippe_44@outlook.com SqueezeESP32 additional player id (100) http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip From edf1d454a2cf6faf54f2a7b57533fa2ad32a86c0 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Sun, 10 May 2020 14:51:11 -0700 Subject: [PATCH 22/27] enable "remote" menu in settings --- plugin/SqueezeESP32.zip | Bin 10328 -> 10334 bytes plugin/SqueezeESP32/Player.pm | 4 ++++ plugin/SqueezeESP32/install.xml | 2 +- plugin/repo.xml | 4 ++-- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugin/SqueezeESP32.zip b/plugin/SqueezeESP32.zip index a73554b846adcae3a96eb7dd74e12920884b279e..93471368e975d02282586ec806a0b93eaf278fd4 100644 GIT binary patch delta 1070 zcmV+}1kwB0P~K3mcnt|QcB)Ws4{q`jlYtEyf5b2ph4+I0p}T^MX4Da}+{q|fL=dTj zap9)K_Bsahs7X3hf4%8zsxZrQ&X@bhg>|cBv_tEJ(X040S;Ud^TvuEgjjQ+@UA(5p zM}VzI-9av>D1r*#c_TgZ+#^NJ-y~K*{<;H)iVI2W4g^CHp1A>OWUps}x07=c@=?vXs3?;{F|=V*AVKyW$>Elu zxk8#hZtfqR3iiCoveztQ`S}@;E}8asr4@De=nz`mW$YHnNX?~{sTvuI%VsOIOH=mM zApT(gCQSz$$Usfg@5W^o$yFGkQ~PqICq?d!rTO^3Kt`uK8Tog!Url|>)e#VP3C2D?xb#eUDEAlf}Fp7GP1gbB7&6% zkz#-WWQ@!+%~^?3dizfAEI>}fj=_23Tp^$}95${Sj*;iilKCPyk6R!-=T{U@gY#Ab z)08T&0-dQYW;BvLT?<29IN$Sn^_aAR$xO2BK{gYD3h^MTh<}3swtopM{g7|}IH-t&R>JcS5% zGjQgzJRl`cy#X0g@9{)CQj>kh;#MS3z4lzY$_?$ZrQp|wjCH)#5xIPt){V@WCtiuX z(A2XJz7|fQ8jWc8l0w(SY%j2a+8|J}UsQL8BQ%Z@+E^<-V}IC;He1-onC2+Rx49P% z&Ani(;)_$YELiw4n~zzE5V}ly;I6DDx1HT5UDZ&pqa`ZCrF0Zg)DkSjD0R9HuD|NZ zox{EDa0jugQ$#{yIDI{a?X7|I-jzxrVn&ZKsTj_uhG~&*RKWj zGK_QqZ!%Xw5Uo_L`QBVDn=Mw8G5k}-z!c)rd01P#n+?Y`1ask5(iTXGbIfk^y?$*$ zFMgRg@8>Jj00000001BW0060zo+cOu2MQ;j o6ep9sCOiSElldlM0aTM*Ct3l(leZ^a0gaOsC_V;4BLDyZ03CVy>;M1& delta 1063 zcmV+?1larDP}oqgcnt|*V5(4j0lG;OlYtEyf5Si&h4+I0A-jN!Osf?!+)fn@B8XIm zx^NT5-B73Pb@jj6pf<|`?T0@B4j zf9bj1qQ9*wDGKgGr_K(668g0tkX|L1K=yhfcr!X@As^I~i;^-a6hj*}1rlV}ksNOc znk%I1r_ICTbIx8iS@xD?Y<+PKq)o>CU13GlK01cx_ZhnbGEh@#Wy)HH;bBD*-E1br`P(NWt6Qi>TX_(v4jVki z$UM^=l_;gR@AS?B){;vF=AG#?cmDYIt-w*=n?6W~=1awZVw zW7>HLDLrOsSz->df@*(MBaihHFBdu*DIy1sm}72BMprNSrQh(L547hgM7W!QGMC{2 zDS7G*$dG!EC)$yk+&dPxB7y3)=h{_nXjd%-zcys7nfs*~Ax;q@9ag@+TTJagfX0+MDKE{7EM?t>L-aj;Z-&n;L zr)pWS@MAU~vl1b6ne@P2Nlk7$yHC2Rppzl zu7V(1sao?rxmq?`tR`dlr;33o#HI7Fws8yF;$!X`Wc hq?7+9VgXK*VkcSwx|6*pTmgrZ8Yn&nJR<-A003bV>f!(Z diff --git a/plugin/SqueezeESP32/Player.pm b/plugin/SqueezeESP32/Player.pm index 19d19f2a..93ca40ae 100644 --- a/plugin/SqueezeESP32/Player.pm +++ b/plugin/SqueezeESP32/Player.pm @@ -54,6 +54,10 @@ sub hasScrolling { return 1; } +sub hasIR { + return 1; +} + sub update_artwork { my $client = shift; my $cprefs = $prefs->client($client); diff --git a/plugin/SqueezeESP32/install.xml b/plugin/SqueezeESP32/install.xml index f0781fc1..0e7ced4b 100644 --- a/plugin/SqueezeESP32/install.xml +++ b/plugin/SqueezeESP32/install.xml @@ -10,6 +10,6 @@ PLUGIN_SQUEEZEESP32 PLUGIN_SQUEEZEESP32_DESC Plugins::SqueezeESP32::Plugin - 0.91 + 0.92 Philippe diff --git a/plugin/repo.xml b/plugin/repo.xml index fff59b9c..48588d33 100644 --- a/plugin/repo.xml +++ b/plugin/repo.xml @@ -1,10 +1,10 @@ - + https://github.com/sle118/squeezelite-esp32 Philippe - 813cbdee552aed7f96696ef9a77a72a9ff19e4de + 274c9278af12e79edb8c3273f19f3fc7a9703795 philippe_44@outlook.com SqueezeESP32 additional player id (100) http://github.com/sle118/squeezelite-esp32/raw/master/plugin/SqueezeESP32.zip From 66a7e22d2e69958bcb5c8a4fa40dbd32a3faf1df Mon Sep 17 00:00:00 2001 From: philippe44 Date: Tue, 12 May 2020 00:09:28 -0700 Subject: [PATCH 23/27] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 94ce7d63..41ec53b6 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ The NVS parameter "metadata_config" sets how metadata is displayed for AirPlay a You can install the excellent plugin "Music Information Screen" which is super useful to tweak the layout for these small displays. ### Infrared -You can use any IR receiver compatible with NEC protocol (38KHz). Vcc, GND and output are the only pin that needs to be connected, no pullup, no filtering capacitor, it's a straight connection. +You can use any IR receiver compatible with NEC protocol (38KHz). Vcc, GND and output are the only pins that need to be connected, no pullup, no filtering capacitor, it's a straight connection. The IR codes are send "as is" to LMS, so only a Logitech SB remote from Boom, Classic or Touch will work. I think the file Slim_Devices_Remote.ir in the "server" directory of LMS can be modified to adapt to other codes, but I've not tried that. From 7d2d4a6f7706709c6bd09d2d8b7a797d1c2c52ea Mon Sep 17 00:00:00 2001 From: Philippe G Date: Wed, 13 May 2020 20:11:45 -0700 Subject: [PATCH 24/27] AAC files might be blocked in a loop at the end --- components/squeezelite/embedded.h | 1 + components/squeezelite/helix-aac.c | 13 ++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/components/squeezelite/embedded.h b/components/squeezelite/embedded.h index 85c08003..a07efbd0 100644 --- a/components/squeezelite/embedded.h +++ b/components/squeezelite/embedded.h @@ -58,6 +58,7 @@ void embedded_init(void); void register_external(void); void deregister_external(void); void decode_restore(int external); +// used when other client wants to use slimproto socket to send messages extern mutex_type slimp_mutex; #define LOCK_P mutex_lock(slimp_mutex) #define UNLOCK_P mutex_unlock(slimp_mutex) diff --git a/components/squeezelite/helix-aac.c b/components/squeezelite/helix-aac.c index c52b88ef..2162f16e 100644 --- a/components/squeezelite/helix-aac.c +++ b/components/squeezelite/helix-aac.c @@ -330,7 +330,7 @@ static decode_state helixaac_decode(void) { u8_t *sptr; bool endstream; frames_t frames; - + LOCK_S; bytes_total = _buf_used(streambuf); bytes_wrap = min(bytes_total, _buf_cont_read(streambuf)); @@ -418,15 +418,14 @@ static decode_state helixaac_decode(void) { } } - if (bytes_wrap < WRAPBUF_LEN && bytes_total > WRAPBUF_LEN) { + if (bytes_wrap < WRAPBUF_LEN && (bytes_total > WRAPBUF_LEN || stream.state <= DISCONNECT)) { // make a local copy of frames which may have wrapped round the end of streambuf memcpy(a->wrap_buf, streambuf->readp, bytes_wrap); - memcpy(a->wrap_buf + bytes_wrap, streambuf->buf, WRAPBUF_LEN - bytes_wrap); + memcpy(a->wrap_buf + bytes_wrap, streambuf->buf, min(WRAPBUF_LEN, bytes_total) - bytes_wrap); sptr = a->wrap_buf; - bytes = bytes_wrap = WRAPBUF_LEN; + bytes = bytes_wrap = min(WRAPBUF_LEN, bytes_total); } else { - sptr = streambuf->readp; bytes = bytes_wrap; } @@ -517,7 +516,7 @@ static decode_state helixaac_decode(void) { frames_t f; frames_t count; ISAMPLE_T *optr; - + IF_DIRECT( f = _buf_cont_write(outputbuf) / BYTES_PER_FRAME; optr = (ISAMPLE_T *)outputbuf->writep; @@ -559,7 +558,7 @@ static decode_state helixaac_decode(void) { if (frames) LOG_ERROR("unhandled case"); ); } - + UNLOCK_O_direct; return DECODE_RUNNING; From 575118f62cf80b4389cb7f18c32ef9ffb771a50f Mon Sep 17 00:00:00 2001 From: Philippe G Date: Wed, 13 May 2020 20:14:59 -0700 Subject: [PATCH 25/27] release --- components/squeezelite/helix-aac.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/components/squeezelite/helix-aac.c b/components/squeezelite/helix-aac.c index 2162f16e..540f7f3c 100644 --- a/components/squeezelite/helix-aac.c +++ b/components/squeezelite/helix-aac.c @@ -441,9 +441,8 @@ static decode_state helixaac_decode(void) { bytes = bytes_wrap - bytes; endstream = false; - // mp4 end of chunk - skip to next offset if (a->chunkinfo && a->chunkinfo[a->nextchunk].offset && a->sample++ == a->chunkinfo[a->nextchunk].sample) { - + // mp4 end of chunk - skip to next offset if (a->chunkinfo[a->nextchunk].offset > a->pos) { u32_t skip = a->chunkinfo[a->nextchunk].offset - a->pos; if (skip != bytes) { @@ -460,15 +459,12 @@ static decode_state helixaac_decode(void) { LOG_ERROR("error: need to skip backwards!"); endstream = true; } - - // adts and mp4 when not at end of chunk } else if (bytes > 0) { - + // adts and mp4 when not at end of chunk _buf_inc_readp(streambuf, bytes); a->pos += bytes; - - // error which doesn't advance streambuf - end } else { + // error which doesn't advance streambuf - end endstream = true; } From c33635f35c36de237adfa2e234f69e084cbace29 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Thu, 14 May 2020 19:26:59 -0700 Subject: [PATCH 26/27] more aac correction - release --- components/squeezelite/alac.c | 2 +- components/squeezelite/helix-aac.c | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/components/squeezelite/alac.c b/components/squeezelite/alac.c index 60eb0fa7..f09d1df0 100644 --- a/components/squeezelite/alac.c +++ b/components/squeezelite/alac.c @@ -358,7 +358,7 @@ static decode_state alac_decode(void) { return DECODE_COMPLETE; } - // enough data for coding + // is there enough data for decoding if (bytes < block_size) { UNLOCK_S; return DECODE_RUNNING; diff --git a/components/squeezelite/helix-aac.c b/components/squeezelite/helix-aac.c index 540f7f3c..aa80618f 100644 --- a/components/squeezelite/helix-aac.c +++ b/components/squeezelite/helix-aac.c @@ -389,19 +389,25 @@ static decode_state helixaac_decode(void) { } if (found == 1) { - - LOG_INFO("samplerate: %u channels: %u", samplerate, channels); - bytes_total = _buf_used(streambuf); - bytes_wrap = min(bytes_total, _buf_cont_read(streambuf)); - LOCK_O; - LOG_INFO("setting track_start"); output.next_sample_rate = decode_newstream(samplerate, output.supported_rates); IF_DSD( output.next_fmt = PCM; ) output.track_start = outputbuf->writep; if (output.fade_mode) _checkfade(true); decode.new_stream = false; UNLOCK_O; + + LOG_INFO("setting track start, samplerate: %u channels: %u", samplerate, channels); + + bytes_total = _buf_used(streambuf); + bytes_wrap = min(bytes_total, _buf_cont_read(streambuf)); + + // come back later if we don' thave enough data + if (bytes_total < WRAPBUF_LEN) { + UNLOCK_S; + LOG_INFO("need more audio data"); + return DECODE_RUNNING; + } } else if (found == -1) { @@ -418,8 +424,9 @@ static decode_state helixaac_decode(void) { } } - if (bytes_wrap < WRAPBUF_LEN && (bytes_total > WRAPBUF_LEN || stream.state <= DISCONNECT)) { - // make a local copy of frames which may have wrapped round the end of streambuf + // we always have at least WRAPBUF_LEN unless it's the end of a stream + if (bytes_wrap < WRAPBUF_LEN) { + // build a linear buffer if we are crossing the end of streambuf memcpy(a->wrap_buf, streambuf->readp, bytes_wrap); memcpy(a->wrap_buf + bytes_wrap, streambuf->buf, min(WRAPBUF_LEN, bytes_total) - bytes_wrap); From e04708ad1cf1cf1592782cdc177a03c228475c45 Mon Sep 17 00:00:00 2001 From: Philippe G Date: Fri, 15 May 2020 20:50:36 -0700 Subject: [PATCH 27/27] always re-allocate aac codec between tracks - release --- components/codecs/lib/libhelix-aac.a | Bin 914636 -> 907420 bytes components/squeezelite/helix-aac.c | 10 +++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/components/codecs/lib/libhelix-aac.a b/components/codecs/lib/libhelix-aac.a index 24a78584180e78a767c1e5c078490f3e50fb974a..677cd17b781572cfb49c19692f88637780535061 100644 GIT binary patch delta 328093 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%0Am4U!W(7_;ZD$9j2B%eBSv7Fsl?$q#eR+1^ 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

v~LQL>j?6P=m* zHrV_rUT(d1HWiT#NU1$BtT~&B+PW&mdlh4DE@B>(;^l@@XO^%HOYw5Ava^M-jZED^%s3G3Jt@8>LLwy=#)@p@>>5w?l2ArsDAVVjcTJxI4!!Ztm{`+#|8 z9Teqz#@$v3OH#ai^T63&*ltbnwq%|<2;1TmFFS>^qp;nX;yupXcM`UxDc%nmb)Kk# z6)9e<3N>eEVH?!QyPdYng)P3Zm;08TU4-qO#@@x((y_n_==TO#cU`T30q+JT*v$$U z^nO5F4=Z5M+nFWnX@yJmE}>f=(J2R|d0%B_uF&6rmyv1SpwqlP#*?XU*;*OnsjEky zr|VVv5|rCF(>xH1*)`;ti~VM`_?C(z$B~O}pw;3YTt}{heK|sl9SEDp(ZcZn_odBh z(@Jx+baW+8(;V#`LqJ;GV2V44sN%c!9icfIiqOu3aIH7nw$^XVR8oYKmhe0>?l3xu zxSSEV7o7MF^5w7u4Ae<@tT)FdEnyDB$5>G}M+o||to6I1G97hg)VVCcFQS2*Bc(sf z%GfMQnyWd^>xP&T8a#}a(Fe2e@kl~n&5cZc@p5Cem(c&`G10_C*1ts0`4Vz26!D{dB;jz3*ot&rcdDZI^n+#$}ar# zH6h`j?+sc0na3g=`i+m+-Z|L|@0X)Y!uwqS%R6pMYbEqP{XN^e2YD9WdBPRmZ{m9w zmj7qr_fh(v8HxH9xv8-I^SuP&{~rJ?z``B{oS^sF!Yi(Ut*8aCpe2xC5gx(%Onrvc z|AW2_F{g<}{eg{|#s)QX!O8vU<(z2ET1dshbhOY{74iHV@XA$SST9A!oiHn z!iQ1a7HUn}B1v|xhZxmr>Nody^`iXzps)W*I8y0<#&AH!So~y8#t%2dXU+z&LucLs zC?wnsFbMYpULtU3R6L54`4k`r(3G{*1IfiO3$^s&Opkqn`>91M(3k%+Zlj$F(wZ>< zUkT$`Soi6|^G4hAE5b8;aQ8BvSzd=k^+~#ZA9`J)sM1L~>ok#Xyum^6hn6S7ud&op z9zYzD>lxRNAvcF}{X~YHEI8?=>>A9e!Lij?P4$~FIvH&Gv~e{&VUo@D#bBLcB_l?w zmXOI_bD2m%&%r|2s+G&En&2A`a1=H187BaX z>-Xn-A9|L~epg>4Z*dYjo^=MqEM?QpHr4OROk3{tuRxR8%=L-QVzz22vZ9GmP=HKD zc0fHlwdU{9<62g_p*O`dZEIAlW&YCmzMF0#Ussa&M2&PCo6_?>ezaqW0oSc_WDmSzvo2w`YYLr z7UN6@{z;6$yBKb_v>WL17a(Z*7#hxj(v)y$Bs=)L+s|$PtoR%XGhT)*_ZKul7lajV z)8Z6KCf#p?gnvyrzrTv~*D|_hj@J{h34q%T{d@4^!sBW`H!F6INBjG^opB~b-0%1# zfjc6P19H|Pc;<(&<>T>n=5fF(Kn8cxX8wwwrzqz2-;nwMZY3;6N*UZbn8AI5ncNh} zZ_H(K7hsnp0Jr^ZBygMGVd^x_IR$eQ13E$uqC2(Ga=z$V@BBzJ@*J( zclXP7lpEomLzxvDPqlgQE@GS69I@FF5!>yMaQ&mT<4bc~rnc8dc*<55yJ~3zlH2Q7 zvqs?DnkU(hk>XyaR;vFEZSLo`Mo$)i`yTTN+!#3p*0n;oSzy-`S!u=e7ZV}ZHZ{eM*d4c0cWuQ-L`Z7HhBi!E;vK!j~@&FqExwenYt01Y>j$uXF_!a>3 ztgqMk{Zx_OXYCQdcChke*jC|TQ%A*v$j=Xu@K5As2javOsp*gE{DgqWO$kcVin+

uwNkb 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ΜBci7X4ZoF=AE~J~q}n3*Ud*`7l1y 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 Dj$hjD diff --git a/components/squeezelite/helix-aac.c b/components/squeezelite/helix-aac.c index aa80618f..7eee1279 100644 --- a/components/squeezelite/helix-aac.c +++ b/components/squeezelite/helix-aac.c @@ -572,13 +572,15 @@ static void helixaac_open(u8_t size, u8_t rate, u8_t chan, u8_t endianness) { a->type = size; a->pos = a->consume = a->sample = a->nextchunk = 0; - + if (a->chunkinfo) { free(a->chunkinfo); } + if (a->stsc) { free(a->stsc); } + a->chunkinfo = NULL; a->stsc = NULL; a->skip = 0; @@ -587,12 +589,14 @@ static void helixaac_open(u8_t size, u8_t rate, u8_t chan, u8_t endianness) { a->empty = false; if (a->hAac) { - HAAC(a, FlushCodec, a->hAac); + // always free decoder as flush only works when no parameter has changed + HAAC(a, FreeDecoder, a->hAac); } else { - a->hAac = HAAC(a, InitDecoder); a->write_buf = malloc(FRAME_BUF * BYTES_PER_FRAME); a->wrap_buf = malloc(WRAPBUF_LEN); } + + a->hAac = HAAC(a, InitDecoder); } static void helixaac_close(void) {

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�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