Thread (9 messages) flat view 9 messages, 2 authors, 2014-02-26

Re: [PATCH 1/3] unit/avrcp: Add /TP/CFG/BV-01-C test

From: Andrei Emeltchenko <hidden>
Date: 2014-02-26 12:22:50

Hi Luiz,

On Wed, Feb 26, 2014 at 01:59:30PM +0200, Luiz Augusto von Dentz wrote:
Hi Andrei,

On Tue, Feb 25, 2014 at 3:56 PM, Andrei Emeltchenko
[off-list ref] wrote:
quoted
From: Andrei Emeltchenko <redacted>

Test verifies that the get capabilities command issued from the
Controller. For that we add the command to avrcp-lib and it will be used
in AVRCP later.
---
 android/avrcp-lib.c | 40 ++++++++++++++++++++++++++++++++++++++++
 android/avrcp-lib.h |  2 ++
 android/avrcp.c     |  1 +
 unit/test-avrcp.c   | 17 +++++++++++++++++
 4 files changed, 60 insertions(+)
diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c
index c280cf8..136801e 100644
--- a/android/avrcp-lib.c
+++ b/android/avrcp-lib.c
@@ -50,6 +50,12 @@
 #define AVRCP_STATUS_NO_AVAILABLE_PLAYERS      0x15
 #define AVRCP_STATUS_ADDRESSED_PLAYER_CHANGED  0x16

+/* Packet types */
+#define AVRCP_PACKET_TYPE_SINGLE       0x00
+#define AVRCP_PACKET_TYPE_START                0x01
+#define AVRCP_PACKET_TYPE_CONTINUING   0x02
+#define AVRCP_PACKET_TYPE_END          0x03
+
 #if __BYTE_ORDER == __LITTLE_ENDIAN

 struct avrcp_header {
@@ -202,6 +208,18 @@ static bool handle_passthrough_pdu(struct avctp *conn, uint8_t op,
        return handler->func(session);
 }

+/*
+ * set_company_id:
+ *
+ * Set three-byte Company_ID into outgoing AVRCP message
+ */
+static void set_company_id(uint8_t cid[3], const uint32_t cid_in)
+{
+       cid[0] = cid_in >> 16;
+       cid[1] = cid_in >> 8;
+       cid[2] = cid_in;
+}
Check out what I did with ntoh24, you need to check the byte order as
well and create hton24.
quoted
 struct avrcp *avrcp_new(int fd, size_t imtu, size_t omtu, uint16_t version)
 {
        struct avrcp *session;
@@ -253,3 +271,25 @@ int avrcp_init_uinput(struct avrcp *session, const char *name,
 {
        return avctp_init_uinput(session->conn, name, address);
 }
+
+#define AVRCP_GET_CAPABILITIES_PARAM_LENGTH 1
+void avrcp_get_capabilities(struct avrcp *session, avctp_rsp_cb func)
+{
+       uint8_t buf[AVRCP_HEADER_LENGTH + AVRCP_GET_CAPABILITIES_PARAM_LENGTH];
+       struct avrcp_header *pdu = (void *) buf;
+       uint8_t length;
+
+       memset(buf, 0, sizeof(buf));
+
+       set_company_id(pdu->company_id, IEEEID_BTSIG);
+       pdu->pdu_id = AVRCP_GET_CAPABILITIES;
+       pdu->packet_type = AVRCP_PACKET_TYPE_SINGLE;
+       pdu->params[0] = CAP_EVENTS_SUPPORTED;
+       pdu->params_len = htons(AVRCP_GET_CAPABILITIES_PARAM_LENGTH);
+
+       length = AVRCP_HEADER_LENGTH + ntohs(pdu->params_len);
+
+       avctp_send_vendordep_req(session->conn, AVC_CTYPE_STATUS,
+                                       AVC_SUBUNIT_PANEL, buf, length,
+                                       func, session);
+}
I would create a helper function called avrc_send_req which takes the
callback + params and params_len, also Im not sure if it is a good
idea to reuse avctp_rsp_cb or have a different callback so we can
treat AVCTP internally.
So avrcp_send_req does not really help here since it would be just wrapper
for avctp_send functions. Maybe then this unit test is not needed at all?

Best regards 
Andrei Emeltchenko 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help