diff --git a/audio/avrcp.c b/audio/avrcp.c
index ac7c8d4..076fdf4 100644
--- a/audio/avrcp.c
+++ b/audio/avrcp.c
pdu->params[1] = *((uint8_t *)data);
break;
- case AVRCP_EVENT_TRACK_CHANGED: {
+ case AVRCP_EVENT_TRACK_CHANGED:
size = 9;
-
- /*
- * AVRCP 1.3 supports only one track identifier: PLAYING
- * (0x0). When 1.4 version is added, this shall be changed to
- * contain the identifier of the track.
- */
- memset(&pdu->params[1], 0, 8);
+ memcpy(&pdu->params[1], data, sizeof(uint64_t));
break;
- }
default:
error("Unknown event %u", id);
return -EINVAL;
uint8_t transaction)
{
uint16_t len = ntohs(pdu->params_len);
+ uint64_t uid;
/*
* 1 byte for EventID, 4 bytes for Playback interval but the latest
break;
case AVRCP_EVENT_TRACK_CHANGED:
len = 9;
-
- memset(&pdu->params[1], 0, 8);
+ uid = player->cb->get_uid(player->user_data);
+ memcpy(&pdu->params[1], &uid, sizeof(uint64_t));
break;
default:
diff --git a/audio/avrcp.h b/audio/avrcp.h
index 360a80a..8cf95a4 100644
--- a/audio/avrcp.h
+++ b/audio/avrcp.h
struct avrcp_player_cb {
int (*get_setting) (uint8_t attr, void *user_data);
int (*set_setting) (uint8_t attr, uint8_t value, void *user_data);
+ uint64_t (*get_uid) (void *user_data);
void *(*get_metadata) (uint32_t id, void *user_data);
GList *(*list_metadata) (void *user_data);
uint8_t (*get_status) (void *user_data);
diff --git a/audio/media.c b/audio/media.c
index 519cafe..9ef393b 100644
--- a/audio/media.c
+++ b/audio/media.c
return g_hash_table_get_keys(mp->track);
}
+static uint64_t get_uid(void *user_data)
+{
+ struct media_player *mp = user_data;
+
+ DBG("%p", mp->track);
+
+ if (mp->track == NULL)
+ return UINT64_MAX;
+
+ return 0;
+}
+
static void *get_metadata(uint32_t id, void *user_data)
{
struct media_player *mp = user_data;
.get_setting = get_setting,
.set_setting = set_setting,
.list_metadata = list_metadata,
+ .get_uid = get_uid,
.get_metadata = get_metadata,
.get_position = get_position,
.get_status = get_status
GHashTable *track;
int ctype;
gboolean title = FALSE;
+ uint64_t uid;
ctype = dbus_message_iter_get_arg_type(iter);
if (ctype != DBUS_TYPE_ARRAY)
mp->track = track;
mp->position = 0;
g_timer_start(mp->timer);
+ uid = get_uid(mp);
- avrcp_player_event(mp->player, AVRCP_EVENT_TRACK_CHANGED, NULL);
+ avrcp_player_event(mp->player, AVRCP_EVENT_TRACK_CHANGED, &uid);
return TRUE;