Added auto pausing under certain circumstances
This commit is contained in:
parent
a221936955
commit
7d5aad4c41
|
@ -6,6 +6,8 @@ namespace avrcp {
|
||||||
void init();
|
void init();
|
||||||
bool is_playing();
|
bool is_playing();
|
||||||
|
|
||||||
|
void play();
|
||||||
|
void pause();
|
||||||
void play_pause();
|
void play_pause();
|
||||||
void forward();
|
void forward();
|
||||||
void backward();
|
void backward();
|
||||||
|
|
|
@ -155,13 +155,21 @@ static void send_cmd(esp_avrc_pt_cmd_t cmd) {
|
||||||
ESP_ERROR_CHECK(ret);
|
ESP_ERROR_CHECK(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void avrcp::play() {
|
||||||
|
ESP_LOGI(AVRCP_TAG, "Playing");
|
||||||
|
send_cmd(ESP_AVRC_PT_CMD_PLAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void avrcp::pause() {
|
||||||
|
ESP_LOGI(AVRCP_TAG, "Pausing");
|
||||||
|
send_cmd(ESP_AVRC_PT_CMD_PAUSE);
|
||||||
|
}
|
||||||
|
|
||||||
void avrcp::play_pause() {
|
void avrcp::play_pause() {
|
||||||
if (is_playing()) {
|
if (is_playing()) {
|
||||||
ESP_LOGI(AVRCP_TAG, "Pausing");
|
pause();
|
||||||
send_cmd(ESP_AVRC_PT_CMD_PAUSE);
|
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(AVRCP_TAG, "Playing");
|
play();
|
||||||
send_cmd(ESP_AVRC_PT_CMD_PLAY);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,10 @@ static void listen(void*) {
|
||||||
ESP_LOGI(TWAI_TAG, "Message is in Extended Format");
|
ESP_LOGI(TWAI_TAG, "Message is in Extended Format");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool enabled = true;
|
static bool enabled = false;
|
||||||
switch (message.identifier) {
|
switch (message.identifier) {
|
||||||
case BUTTONS_ID:
|
case BUTTONS_ID:
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
|
|
||||||
can::Buttons buttons = can::convert<can::Buttons>(message.data, message.data_length_code);
|
can::Buttons buttons = can::convert<can::Buttons>(message.data, message.data_length_code);
|
||||||
|
|
||||||
static MultiPurposeButton button_forward(avrcp::play_pause, avrcp::forward);
|
static MultiPurposeButton button_forward(avrcp::play_pause, avrcp::forward);
|
||||||
|
@ -37,6 +36,16 @@ static void listen(void*) {
|
||||||
|
|
||||||
static MultiPurposeButton button_backward(nullptr, avrcp::backward);
|
static MultiPurposeButton button_backward(nullptr, avrcp::backward);
|
||||||
button_backward.update(buttons.backward);
|
button_backward.update(buttons.backward);
|
||||||
|
|
||||||
|
// @TODO Figure out what we want to do with the scroll button
|
||||||
|
// Fast foward only appears to work in jellyfin and only skips 5 seconds
|
||||||
|
// The scrolling also seems very unresponsive
|
||||||
|
// So yeah...
|
||||||
|
static uint8_t scroll = 0;
|
||||||
|
if (scroll != buttons.scroll) {
|
||||||
|
scroll = buttons.scroll;
|
||||||
|
ESP_LOGI(TWAI_TAG, "Scroll changed: 0x%X", buttons.scroll);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -50,7 +59,33 @@ static void listen(void*) {
|
||||||
case RADIO_ID:
|
case RADIO_ID:
|
||||||
{
|
{
|
||||||
can::Radio radio = can::convert<can::Radio>(message.data, message.data_length_code);
|
can::Radio radio = can::convert<can::Radio>(message.data, message.data_length_code);
|
||||||
|
bool previous = enabled;
|
||||||
enabled = (radio.source == can::Source::AUX2) && (radio.enabled);
|
enabled = (radio.source == can::Source::AUX2) && (radio.enabled);
|
||||||
|
|
||||||
|
// If we just changed into the disabled state => pause
|
||||||
|
if (!enabled && previous) {
|
||||||
|
avrcp::pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool muted = false;
|
||||||
|
static bool was_playing = false;
|
||||||
|
// If we just muted => pause
|
||||||
|
if (!muted && radio.muted) {
|
||||||
|
was_playing = avrcp::is_playing();
|
||||||
|
avrcp::pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we just unmuted and were playing before muting => unpause
|
||||||
|
if (muted && !radio.muted && was_playing) {
|
||||||
|
avrcp::play();
|
||||||
|
}
|
||||||
|
muted = radio.muted;
|
||||||
|
|
||||||
|
// @TODO Figure out how all of this works when we receive a call
|
||||||
|
// If I remember correctly when receiving a call, the radio muted the input
|
||||||
|
// In which case it should auto resume playing after finishing the call
|
||||||
|
// However the phone probably automatically pauses and unpauses the music during a call.
|
||||||
|
// So we probably don't really have to do anything here.
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -83,5 +118,5 @@ void twai::init() {
|
||||||
ESP_LOGI(TWAI_TAG, "Failed to start driver");
|
ESP_LOGI(TWAI_TAG, "Failed to start driver");
|
||||||
}
|
}
|
||||||
|
|
||||||
xTaskCreate(listen, "TWAI Listener", 2048, nullptr, 0, nullptr);
|
xTaskCreatePinnedToCore(listen, "TWAI Listener", 2048, nullptr, 0, nullptr, 1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user