Return-Path: From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 01/16] android/avrcp-lib: Add avrcp_send function Date: Sun, 2 Mar 2014 20:48:16 +0200 Message-Id: <1393786109-6554-1-git-send-email-luiz.dentz@gmail.com> Sender: linux-bluetooth-owner@vger.kernel.org List-ID: From: Luiz Augusto von Dentz This adds avrcp_send function which can be used to response to outstanding requests. --- android/avrcp-lib.c | 27 +++++++++++++++++++++++++++ android/avrcp-lib.h | 4 +++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c index 34eea66..6fed825 100644 --- a/android/avrcp-lib.c +++ b/android/avrcp-lib.c @@ -253,6 +253,33 @@ int avrcp_init_uinput(struct avrcp *session, const char *name, return avctp_init_uinput(session->conn, name, address); } +int avrcp_send(struct avrcp *session, uint8_t transaction, uint8_t code, + uint8_t subunit, uint8_t pdu_id, + uint8_t *params, size_t params_len) +{ + struct avrcp_header *pdu = (void *) session->tx_buf; + size_t len = sizeof(*pdu); + + memset(pdu, 0, len); + + hton24(pdu->company_id, IEEEID_BTSIG); + pdu->pdu_id = pdu_id; + pdu->packet_type = AVRCP_PACKET_TYPE_SINGLE; + + if (params_len > 0) { + len += params_len; + + if (len > session->tx_mtu) + return -ENOBUFS; + + memcpy(pdu->params, params, params_len); + pdu->params_len = htons(params_len); + } + + return avctp_send_vendordep(session->conn, transaction, code, subunit, + session->tx_buf, len); +} + static int avrcp_send_req(struct avrcp *session, uint8_t code, uint8_t subunit, uint8_t pdu_id, uint8_t *params, size_t params_len, avctp_rsp_cb func, diff --git a/android/avrcp-lib.h b/android/avrcp-lib.h index 0407cb4..a33bdfe 100644 --- a/android/avrcp-lib.h +++ b/android/avrcp-lib.h @@ -102,7 +102,9 @@ void avrcp_set_passthrough_handlers(struct avrcp *session, void *user_data); int avrcp_init_uinput(struct avrcp *session, const char *name, const char *address); - +int avrcp_send(struct avrcp *session, uint8_t transaction, uint8_t code, + uint8_t subunit, uint8_t pdu_id, + uint8_t *params, size_t params_len); int avrcp_get_capabilities(struct avrcp *session, uint8_t param, avctp_rsp_cb func, void *user_data); int avrcp_list_player_attributes(struct avrcp *session, avctp_rsp_cb func, -- 1.8.5.3