diff --git a/audio/control.c b/audio/control.c
index 6238007..9ede0f2 100644
--- a/audio/control.c
+++ b/audio/control.c
#define CTYPE_STABLE 0xC
/* opcodes */
+#define OP_VENDORDEP 0x00
#define OP_UNITINFO 0x30
#define OP_SUBUNITINFO 0x31
#define OP_PASSTHROUGH 0x7c
} __attribute__ ((packed));
#define AVRCP_HEADER_LENGTH 3
+struct avrcp_spec_avc_pdu {
+ uint8_t company_id[3];
+ uint8_t pdu_id;
+ uint8_t packet_type:2;
+ uint8_t rsvd:6;
+ uint16_t params_len;
+ uint8_t params[0];
+} __attribute__ ((packed));
+#define AVRCP_SPECAVCPDU_HEADER_LENGTH 7
+
#elif __BYTE_ORDER == __BIG_ENDIAN
struct avctp_header {
} __attribute__ ((packed));
#define AVRCP_HEADER_LENGTH 3
+struct avrcp_spec_avc_pdu {
+ uint8_t company_id[3];
+ uint8_t pdu_id;
+ uint8_t rsvd:6;
+ uint8_t packet_type:2;
+ uint16_t params_len;
+ uint8_t params[0];
+} __attribute__ ((packed));
+#define AVRCP_SPECAVCPDU_HEADER_LENGTH 7
+
#else
#error "Unknown byte order"
#endif
operands[1] = SUBUNIT_PANEL << 3;
DBG("reply to %s", avrcp->opcode == OP_UNITINFO ?
"OP_UNITINFO" : "OP_SUBUNITINFO");
+ } else if (avrcp->opcode == OP_VENDORDEP) {
+ /* Reply with REJECT msg with error code 0x0
+ * (Invalid Command) as defined in AVRCP spec (6.15.1) */
+ struct avrcp_spec_avc_pdu *pdu = (void *) operands;
+
+ avctp->cr = AVCTP_RESPONSE;
+ avrcp->code = CTYPE_REJECTED;
+
+ pdu->packet_type = 0;
+ pdu->rsvd = 0;
+ pdu->params[0] = 0; /* invalid command */
+ pdu->params_len = htons(1);
+
+ packet_size = sizeof(struct avctp_header)
+ + sizeof(struct avrcp_header)
+ + sizeof(struct avrcp_spec_avc_pdu)
+ + 1;
} else {
avctp->cr = AVCTP_RESPONSE;
avrcp->code = CTYPE_REJECTED;