diff --git a/components/driver_bt/bt_app_sink.c b/components/driver_bt/bt_app_sink.c index 95efc6b7..6175b138 100644 --- a/components/driver_bt/bt_app_sink.c +++ b/components/driver_bt/bt_app_sink.c @@ -169,7 +169,7 @@ static bool cmd_handler(bt_sink_cmd_t cmd, ...) { break; } case BT_SINK_PROGRESS: { - uint32_t elapsed = va_arg(args, uint32_t), duration = va_arg(args, uint32_t); + int elapsed = va_arg(args, int), duration = va_arg(args, int); displayer_timer(DISPLAYER_ELAPSED, elapsed, duration); chain = false; break; @@ -317,7 +317,7 @@ static void bt_av_hdl_a2d_evt(uint16_t event, void *p_param) static void bt_av_new_track(void) { // request metadata - uint8_t attr_mask = ESP_AVRC_MD_ATTR_TITLE | ESP_AVRC_MD_ATTR_ARTIST | ESP_AVRC_MD_ATTR_ALBUM; + uint8_t attr_mask = ESP_AVRC_MD_ATTR_TITLE | ESP_AVRC_MD_ATTR_ARTIST | ESP_AVRC_MD_ATTR_ALBUM | ESP_AVRC_MD_ATTR_PLAYING_TIME; esp_avrc_ct_send_metadata_cmd(APP_RC_CT_TL_GET_META_DATA, attr_mask); // register notification if peer support the event_id @@ -357,6 +357,7 @@ void bt_av_notify_evt_handler(uint8_t event_id, esp_avrc_rn_param_t *event_param break; case ESP_AVRC_RN_PLAY_POS_CHANGED: ESP_LOGI(BT_AV_TAG, "Play position changed: %d-ms", event_parameter->play_pos); + (*bt_app_a2d_cmd_cb)(BT_SINK_PROGRESS, event_parameter->play_pos, -1); bt_av_play_pos_changed(); break; } @@ -389,10 +390,11 @@ static void bt_av_hdl_avrc_ct_evt(uint16_t event, void *p_param) char **p = NULL; ESP_LOGI(BT_RC_CT_TAG, "AVRC metadata rsp: attribute id 0x%x, %s", rc->meta_rsp.attr_id, rc->meta_rsp.attr_text); - if (rc->meta_rsp.attr_id == 0x01) p = &s_title; - else if (rc->meta_rsp.attr_id == 0x02) p = &s_artist; - else if (rc->meta_rsp.attr_id == 0x04) p = &s_album; - + if (rc->meta_rsp.attr_id == ESP_AVRC_MD_ATTR_TITLE) p = &s_title; + else if (rc->meta_rsp.attr_id == ESP_AVRC_MD_ATTR_ARTIST) p = &s_artist; + else if (rc->meta_rsp.attr_id == ESP_AVRC_MD_ATTR_ALBUM) p = &s_album; + else if (rc->meta_rsp.attr_id == ESP_AVRC_MD_ATTR_PLAYING_TIME) (*bt_app_a2d_cmd_cb)(BT_SINK_PROGRESS, -1, atoi((char*) rc->meta_rsp.attr_text)); + // not very pretty, but this is bluetooth anyway if (p) { if (*p) free(*p); diff --git a/components/raop/raop.c b/components/raop/raop.c index a409f3b4..9cb892c6 100644 --- a/components/raop/raop.c +++ b/components/raop/raop.c @@ -628,11 +628,12 @@ static bool handle_rtsp(raop_ctx_t *ctx, int sock) volume = (volume == -144.0) ? 0 : (1 + volume / 30); success = ctx->cmd_cb(RAOP_VOLUME, volume); } else if (body && (p = strcasestr(body, "progress")) != NULL) { - u32_t start, current, stop = 0; + int start, current, stop = 0; sscanf(p, "%*[^:]:%u/%u/%u", &start, ¤t, &stop); current = (current - start) / 44100; if (stop) stop = (stop - start) / 44100; + else stop = -1; LOG_INFO("[%p]: SET PARAMETER progress %u/%u %s", ctx, current, stop, p); success = ctx->cmd_cb(RAOP_PROGRESS, current, stop); } diff --git a/components/raop/raop_sink.c b/components/raop/raop_sink.c index 3b9874dd..06e5cf22 100644 --- a/components/raop/raop_sink.c +++ b/components/raop/raop_sink.c @@ -108,7 +108,7 @@ static bool cmd_handler(raop_event_t event, ...) { break; } case RAOP_PROGRESS: { - u32_t elapsed = va_arg(args, u32_t), duration = va_arg(args, u32_t); + int elapsed = va_arg(args, int), duration = va_arg(args, int); displayer_timer(DISPLAYER_ELAPSED, elapsed, duration); chain = false; break; diff --git a/components/services/display.c b/components/services/display.c index 72571ec5..b90e70e4 100644 --- a/components/services/display.c +++ b/components/services/display.c @@ -248,11 +248,11 @@ void displayer_scroll(char *string, int speed) { /**************************************************************************************** * */ -void displayer_timer(enum displayer_time_e mode, uint32_t elapsed, uint32_t duration) { +void displayer_timer(enum displayer_time_e mode, int elapsed, int duration) { xSemaphoreTake(displayer.mutex, portMAX_DELAY); - displayer.elapsed = elapsed; - displayer.duration = duration; + if (elapsed >= 0) displayer.elapsed = elapsed; + if (duration >= 0) displayer.duration = duration; displayer.timer = true; displayer.tick = xTaskGetTickCount(); diff --git a/components/services/display.h b/components/services/display.h index d8d09a17..e00122e1 100644 --- a/components/services/display.h +++ b/components/services/display.h @@ -55,4 +55,4 @@ extern struct display_s { void displayer_scroll(char *string, int speed); void displayer_control(enum displayer_cmd_e cmd, ...); void displayer_metadata(char *artist, char *album, char *title); -void displayer_timer(enum displayer_time_e mode, uint32_t elapsed, uint32_t duration); \ No newline at end of file +void displayer_timer(enum displayer_time_e mode, int elapsed, int duration); \ No newline at end of file