mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-10 05:27:01 +03:00
LMS/BT/AirPlay coexistence + improve display
This commit is contained in:
@@ -661,8 +661,12 @@ static bool handle_rtsp(raop_ctx_t *ctx, int sock)
|
||||
free_metadata(&metadata);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// don't need to free "buf" because kd_lookup return a pointer, not a strdup
|
||||
kd_add(resp, "Audio-Jack-Status", "connected; type=analog");
|
||||
kd_add(resp, "CSeq", kd_lookup(headers, "CSeq"));
|
||||
|
||||
if (success) {
|
||||
buf = http_send(sock, "RTSP/1.0 200 OK", resp);
|
||||
} else {
|
||||
|
||||
@@ -83,53 +83,49 @@ const static actrls_t controls = {
|
||||
* Command handler
|
||||
*/
|
||||
static bool cmd_handler(raop_event_t event, ...) {
|
||||
bool chain = true, res = true;
|
||||
va_list args;
|
||||
|
||||
va_start(args, event);
|
||||
|
||||
// handle audio event and stop if forbidden
|
||||
if (!cmd_handler_chain(event, args)) {
|
||||
va_end(args);
|
||||
return false;
|
||||
}
|
||||
|
||||
// now handle events for display
|
||||
switch(event) {
|
||||
case RAOP_SETUP:
|
||||
actrls_set(controls, NULL);
|
||||
displayer_control(DISPLAYER_ACTIVATE, "AIRPLAY");
|
||||
break;
|
||||
case RAOP_PLAY:
|
||||
displayer_control(DISPLAYER_TIMER_RESUME);
|
||||
displayer_control(DISPLAYER_TIMER_RUN);
|
||||
break;
|
||||
case RAOP_FLUSH:
|
||||
displayer_control(DISPLAYER_TIMER_PAUSE);
|
||||
break;
|
||||
case RAOP_STOP:
|
||||
displayer_control(DISPLAYER_DISABLE);
|
||||
actrls_unset();
|
||||
displayer_control(DISPLAYER_SUSPEND);
|
||||
break;
|
||||
case RAOP_METADATA: {
|
||||
char *artist = va_arg(args, char*), *album = va_arg(args, char*), *title = va_arg(args, char*);
|
||||
displayer_metadata(artist, album, title);
|
||||
chain = false;
|
||||
break;
|
||||
}
|
||||
case RAOP_PROGRESS: {
|
||||
int elapsed = va_arg(args, int), duration = va_arg(args, int);
|
||||
displayer_timer(DISPLAYER_ELAPSED, elapsed, duration);
|
||||
chain = false;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (chain) res = cmd_handler_chain(event, args);
|
||||
|
||||
va_end(args);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/****************************************************************************************
|
||||
* Airplay taking/giving audio system's control
|
||||
*/
|
||||
void raop_master(bool on) {
|
||||
if (on) actrls_set(controls, NULL);
|
||||
else actrls_unset();
|
||||
return true;
|
||||
}
|
||||
|
||||
/****************************************************************************************
|
||||
|
||||
@@ -32,11 +32,6 @@ void raop_sink_init(raop_cmd_vcb_t cmd_cb, raop_data_cb_t data_cb);
|
||||
*/
|
||||
void raop_sink_deinit(void);
|
||||
|
||||
/**
|
||||
* @brief do what's necessary when becoming in charge
|
||||
*/
|
||||
void raop_master(bool on);
|
||||
|
||||
/**
|
||||
* @brief force disconnection
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user