8ba4de5eda
An upload during an active Spotify session crawled (~10 kB/s, 197 s) and ended in a reset (seen twice). Workaround: - aes67_ota_on_update(cb): cb(true) right before an accepted upload writes flash, cb(false) if it then fails. - The player pauses Spotify (spotify_pause -> SpircHandler::setPause, the app follows) and suspends HLS fetching (hls_suspend); resumed if the upload fails. AES67 TX keeps running (silence). - Verified: upload during Spotify playback paused the session and installed in 25.8 s (normal for 2 MB), clean reboot and self-test. Root cause still open (noted in CLAUDE.md with the other cspot items). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 lines
1.1 KiB
C
36 lines
1.1 KiB
C
// Spotify Connect (cspot). Project code; GPL-3.0 through cspot.
|
|
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "esp_err.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef enum {
|
|
SPOTIFY_EV_PLAY, // playback (re)started or resumed
|
|
SPOTIFY_EV_PAUSE,
|
|
SPOTIFY_EV_FLUSH, // skip, seek, new track: drop buffered audio
|
|
SPOTIFY_EV_VOLUME, // value: 0..65535
|
|
} spotify_event_t;
|
|
|
|
// PCM from Spotify: 44.1 kHz stereo s16 interleaved. Return the frames taken (may block).
|
|
typedef size_t (*spotify_pcm_cb_t)(const int16_t *pcm, size_t frames);
|
|
typedef void (*spotify_event_cb_t)(spotify_event_t ev, int value);
|
|
|
|
// Registers the zeroconf endpoints (/spotify_info) and, when source.mode is spotify/auto and the
|
|
// client credentials are set, advertises the device and starts the session task.
|
|
esp_err_t spotify_init(spotify_pcm_cb_t pcm, spotify_event_cb_t event);
|
|
// Pause/resume the running session (the Spotify app follows). No-op without a session.
|
|
void spotify_pause(bool pause);
|
|
// Current state for status.spotify_state.
|
|
const char *spotify_state(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|