diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-03-26 14:25:08 +0200 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2014-03-31 10:45:36 +0300 |
commit | 8878bd46a12008330bf5f9e4fd49148685d91076 (patch) | |
tree | 1eb8362b5a9d2bf664c1e61150c8f05b1436ee09 /android/avrcp.c | |
parent | 72fda35f3f77ebe031e3d679a2f81df8036c4f78 (diff) | |
download | bluez-8878bd46a12008330bf5f9e4fd49148685d91076.tar.gz |
android/avrcp-lib: Add support for parsing RegisterNotification response
Diffstat (limited to 'android/avrcp.c')
-rw-r--r-- | android/avrcp.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/android/avrcp.c b/android/avrcp.c index 0995a06b7..add069b53 100644 --- a/android/avrcp.c +++ b/android/avrcp.c @@ -724,39 +724,37 @@ static const struct avrcp_control_ind control_ind = { .register_notification = handle_register_notification_cmd, }; -static gboolean register_notification_rsp(struct avctp *conn, - uint8_t code, uint8_t subunit, - uint8_t *operands, size_t operand_count, - void *user_data) +static bool handle_register_notification_rsp(struct avrcp *session, int err, + uint8_t code, uint8_t event, + uint8_t *params, + void *user_data) { struct avrcp_device *dev = user_data; struct hal_ev_avrcp_volume_changed ev; - uint8_t *params; - if (code != AVC_CTYPE_INTERIM && code != AVC_CTYPE_CHANGED) - return FALSE; - - if (operands == NULL || operand_count < 7) - return FALSE; + if (err < 0) { + error("AVRCP: %s", strerror(-err)); + return false; + } - params = &operands[7]; + if (code != AVC_CTYPE_INTERIM && code != AVC_CTYPE_CHANGED) + return false; - if (params == NULL || params[0] != AVRCP_EVENT_VOLUME_CHANGED) - return FALSE; + if (event != AVRCP_EVENT_VOLUME_CHANGED) + return false; ev.type = code; - ev.volume = params[1] & 0x7F; + ev.volume = params[0] & 0x7f; ipc_send_notif(hal_ipc, HAL_SERVICE_ID_AVRCP, HAL_EV_AVRCP_VOLUME_CHANGED, sizeof(ev), &ev); if (code == AVC_CTYPE_INTERIM) - return TRUE; + return true; - avrcp_register_notification(dev->session, params[0], 0, - register_notification_rsp, dev); - return FALSE; + avrcp_register_notification(dev->session, event, 0); + return false; } static void handle_get_capabilities_rsp(struct avrcp *session, int err, @@ -775,9 +773,7 @@ static void handle_get_capabilities_rsp(struct avrcp *session, int err, if (events[i] != AVRCP_EVENT_VOLUME_CHANGED) continue; - avrcp_register_notification(dev->session, events[i], 0, - register_notification_rsp, - dev); + avrcp_register_notification(dev->session, events[i], 0); break; } @@ -786,6 +782,7 @@ static void handle_get_capabilities_rsp(struct avrcp *session, int err, static const struct avrcp_control_cfm control_cfm = { .get_capabilities = handle_get_capabilities_rsp, + .register_notification = handle_register_notification_rsp, }; static int avrcp_device_add_session(struct avrcp_device *dev, int fd, |