summaryrefslogtreecommitdiff
path: root/android/avrcp.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-03-19 16:59:07 +0200
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-03-31 10:45:34 +0300
commit545963a1356a69d96892239d0931adfd08add11c (patch)
tree7e61e2674c5d546ff84bfbbec583b39789c871cb /android/avrcp.c
parent40d55fa51f5d95a6f055fd152fe684e7bf0e52f9 (diff)
downloadbluez-545963a1356a69d96892239d0931adfd08add11c.tar.gz
android/avrcp-lib: Add support for parsing GetCapabilities response
Diffstat (limited to 'android/avrcp.c')
-rw-r--r--android/avrcp.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/android/avrcp.c b/android/avrcp.c
index ec981394e..0995a06b7 100644
--- a/android/avrcp.c
+++ b/android/avrcp.c
@@ -759,38 +759,35 @@ static gboolean register_notification_rsp(struct avctp *conn,
return FALSE;
}
-static gboolean get_capabilities_rsp(struct avctp *conn,
- uint8_t code, uint8_t subunit,
- uint8_t *operands, size_t operand_count,
+static void handle_get_capabilities_rsp(struct avrcp *session, int err,
+ uint8_t number, uint8_t *events,
void *user_data)
{
struct avrcp_device *dev = user_data;
- uint8_t *params;
- uint8_t count;
-
- if (operands == NULL || operand_count < 7)
- return FALSE;
-
- params = &operands[7];
-
- if (params == NULL || params[0] != CAP_EVENTS_SUPPORTED)
- return FALSE;
+ int i;
- for (count = params[1]; count > 0; count--) {
- uint8_t event = params[1 + count];
+ if (err < 0) {
+ error("AVRCP: %s", strerror(-err));
+ return;
+ }
- if (event != AVRCP_EVENT_VOLUME_CHANGED)
+ for (i = 0; i < number; i++) {
+ if (events[i] != AVRCP_EVENT_VOLUME_CHANGED)
continue;
- avrcp_register_notification(dev->session, event, 0,
+ avrcp_register_notification(dev->session, events[i], 0,
register_notification_rsp,
dev);
- return FALSE;
+ break;
}
- return FALSE;
+ return;
}
+static const struct avrcp_control_cfm control_cfm = {
+ .get_capabilities = handle_get_capabilities_rsp,
+};
+
static int avrcp_device_add_session(struct avrcp_device *dev, int fd,
uint16_t imtu, uint16_t omtu)
{
@@ -804,7 +801,7 @@ static int avrcp_device_add_session(struct avrcp_device *dev, int fd,
avrcp_set_destroy_cb(dev->session, disconnect_cb, dev);
avrcp_set_passthrough_handlers(dev->session, passthrough_handlers,
dev);
- avrcp_register_player(dev->session, &control_ind, NULL, dev);
+ avrcp_register_player(dev->session, &control_ind, &control_cfm, dev);
dev->queue = g_queue_new();
@@ -828,8 +825,7 @@ static int avrcp_device_add_session(struct avrcp_device *dev, int fd,
ev.features |= HAL_AVRCP_FEATURE_ABSOLUTE_VOLUME;
- avrcp_get_capabilities(dev->session, CAP_EVENTS_SUPPORTED,
- get_capabilities_rsp, dev);
+ avrcp_get_capabilities(dev->session, CAP_EVENTS_SUPPORTED);
done:
ipc_send_notif(hal_ipc, HAL_SERVICE_ID_AVRCP,