diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c
index 357ae5b..f4eaaa2 100644
--- a/android/avrcp-lib.c
+++ b/android/avrcp-lib.c
session->destroy_data = user_data;
}
+static ssize_t get_capabilities(struct avrcp *session, uint8_t transaction,
+ uint16_t params_len, uint8_t *params,
+ void *user_data)
+{
+ struct avrcp_player *player = user_data;
+
+ if (!params || params_len != 1)
+ return -EINVAL;
+
+ switch (params[0]) {
+ case CAP_COMPANY_ID:
+ params[1] = 1;
+ hton24(¶ms[2], IEEEID_BTSIG);
+ return 5;
+ case CAP_EVENTS_SUPPORTED:
+ if (!player->ind || !player->ind->get_capabilities)
+ return -ENOSYS;
+ return player->ind->get_capabilities(session, transaction,
+ player->user_data);
+ }
+
+ return -EINVAL;
+}
+
+static const struct avrcp_control_handler player_handlers[] = {
+ { AVRCP_GET_CAPABILITIES,
+ AVC_CTYPE_STATUS, AVC_CTYPE_STABLE,
+ get_capabilities },
+ { },
+};
+
void avrcp_register_player(struct avrcp *session,
const struct avrcp_control_ind *ind,
const struct avrcp_control_cfm *cfm,
player->cfm = cfm;
player->user_data = user_data;
+ avrcp_set_control_handlers(session, player_handlers, player);
session->player = player;
}
diff --git a/android/avrcp-lib.h b/android/avrcp-lib.h
index 6e33a75..34c88c5 100644
--- a/android/avrcp-lib.h
+++ b/android/avrcp-lib.h
};
struct avrcp_control_ind {
+ int (*get_capabilities) (struct avrcp *session, uint8_t transaction,
+ void *user_data);
};
struct avrcp_control_cfm {