mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 04:27:12 +03:00
AirPlay fix & misc
- Spectrum scale fix - Initialize more display parameters - Reboot after 30s of no connection - Reboot after IP address change
This commit is contained in:
@@ -100,7 +100,7 @@ static struct {
|
||||
#define SB_HEIGHT 32
|
||||
|
||||
// lenght are number of frames, i.e. 2 channels of 16 bits
|
||||
#define FFT_LEN_BIT 6
|
||||
#define FFT_LEN_BIT 7
|
||||
#define FFT_LEN (1 << FFT_LEN_BIT)
|
||||
#define RMS_LEN_BIT 6
|
||||
#define RMS_LEN (1 << RMS_LEN_BIT)
|
||||
@@ -739,10 +739,10 @@ static void visu_update(void) {
|
||||
*/
|
||||
void spectrum_limits(int min, int n, int pos) {
|
||||
if (n / 2) {
|
||||
int step = ((DISPLAY_BW - min) * visu.spectrum_scale * 2) / n;
|
||||
int step = ((DISPLAY_BW - min) * visu.spectrum_scale) / (n/2);
|
||||
visu.bars[pos].limit = min + step;
|
||||
for (int i = 1; i < n/2; i++) visu.bars[pos+i].limit = visu.bars[pos+i-1].limit + step;
|
||||
spectrum_limits(visu.bars[pos + n/2 - 1].limit, n/2, pos + n/2);
|
||||
spectrum_limits(visu.bars[pos + n/2 - 1].limit, n - n/2, pos + n/2);
|
||||
} else {
|
||||
visu.bars[pos].limit = DISPLAY_BW;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
/* must provide
|
||||
- mutex_create_p
|
||||
- pthread_create_name
|
||||
- register_xxx (see below)
|
||||
- stack size
|
||||
- s16_t, s32_t, s64_t and u64_t
|
||||
- PLAYER_ID / custom_player_id
|
||||
@@ -16,6 +17,11 @@
|
||||
- EXT_BSS
|
||||
recommended to add platform specific include(s) here
|
||||
*/
|
||||
|
||||
typedef int16_t s16_t;
|
||||
typedef int32_t s32_t;
|
||||
typedef int64_t s64_t;
|
||||
typedef unsigned long long u64_t;
|
||||
|
||||
#ifndef PTHREAD_STACK_MIN
|
||||
#define PTHREAD_STACK_MIN 256
|
||||
@@ -26,18 +32,17 @@
|
||||
#define OUTPUT_THREAD_STACK_SIZE 6 * 1024
|
||||
#define IR_THREAD_STACK_SIZE 6 * 1024
|
||||
|
||||
// number of 5s times search for a server will happen beforee slimproto exits (0 = no limit)
|
||||
#define MAX_SERVER_RETRIES 5
|
||||
|
||||
// or can be as simple as #define PLAYER_ID 100
|
||||
#define PLAYER_ID custom_player_id;
|
||||
#define PLAYER_ID custom_player_id
|
||||
extern u8_t custom_player_id;
|
||||
|
||||
#define BASE_CAP "Model=squeezeesp32,AccuratePlayPoints=1,HasDigitalOut=1,HasPolarityInversion=1,Firmware=" VERSION
|
||||
// to force some special buffer attribute
|
||||
#define EXT_BSS __attribute__((section(".ext_ram.bss")))
|
||||
|
||||
typedef int16_t s16_t;
|
||||
typedef int32_t s32_t;
|
||||
typedef int64_t s64_t;
|
||||
typedef unsigned long long u64_t;
|
||||
|
||||
// all exit() calls are made from main thread (or a function called in main thread)
|
||||
#define exit(code) { int ret = code; pthread_exit(&ret); }
|
||||
#define gettime_ms _gettime_ms_
|
||||
|
||||
@@ -773,7 +773,7 @@ void wake_controller(void) {
|
||||
wake_signal(wake_e);
|
||||
}
|
||||
|
||||
in_addr_t discover_server(char *default_server) {
|
||||
in_addr_t discover_server(char *default_server, int max) {
|
||||
struct sockaddr_in d;
|
||||
struct sockaddr_in s;
|
||||
char buf[32], port_d[] = "JSON", clip_d[] = "CLIP";
|
||||
@@ -827,7 +827,7 @@ in_addr_t discover_server(char *default_server) {
|
||||
server_addr(default_server, &s.sin_addr.s_addr, &port);
|
||||
}
|
||||
|
||||
} while (s.sin_addr.s_addr == 0 && running);
|
||||
} while (s.sin_addr.s_addr == 0 && running && (!max || --max));
|
||||
|
||||
closesocket(disc_sock);
|
||||
|
||||
@@ -858,7 +858,7 @@ void slimproto(log_level level, char *server, u8_t mac[6], const char *name, con
|
||||
}
|
||||
|
||||
if (!slimproto_ip) {
|
||||
slimproto_ip = discover_server(server);
|
||||
slimproto_ip = discover_server(server, 0);
|
||||
}
|
||||
|
||||
if (!slimproto_port) {
|
||||
@@ -937,10 +937,18 @@ void slimproto(log_level level, char *server, u8_t mac[6], const char *name, con
|
||||
sleep(5);
|
||||
}
|
||||
|
||||
// rediscover server if it was not set at startup
|
||||
#if EMBEDDED
|
||||
// in embedded we give up after a while no matter what
|
||||
if (++failed_connect > 5 && !server) {
|
||||
slimproto_ip = serv_addr.sin_addr.s_addr = discover_server(NULL, MAX_SERVER_RETRIES);
|
||||
if (!slimproto_ip) return;
|
||||
} else if (MAX_SERVER_RETRIES && failed_connect > 5 * MAX_SERVER_RETRIES) return;
|
||||
#else
|
||||
// rediscover server if it was not set at startup or exit
|
||||
if (!server && ++failed_connect > 5) {
|
||||
slimproto_ip = serv_addr.sin_addr.s_addr = discover_server(NULL);
|
||||
}
|
||||
slimproto_ip = serv_addr.sin_addr.s_addr = discover_server(NULL, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user