summaryrefslogtreecommitdiff
path: root/android/avrcp.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-03-26 14:25:08 +0200
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2014-03-31 10:45:36 +0300
commit8878bd46a12008330bf5f9e4fd49148685d91076 (patch)
tree1eb8362b5a9d2bf664c1e61150c8f05b1436ee09 /android/avrcp.c
parent72fda35f3f77ebe031e3d679a2f81df8036c4f78 (diff)
downloadbluez-8878bd46a12008330bf5f9e4fd49148685d91076.tar.gz
android/avrcp-lib: Add support for parsing RegisterNotification response
Diffstat (limited to 'android/avrcp.c')
-rw-r--r--android/avrcp.c39
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,