Return-Path: From: Vani-dineshbhai PATEL X To: "linux-bluetooth@vger.kernel.org" Date: Thu, 30 Aug 2012 07:08:55 +0200 Subject: [PATCH BlueZ V6 1/5] AVRCP: Add TG Record to support AVRCP Browsing Message-ID: <747C1E83C744F44E9ACFB89FAEEC2C7B23D4AD9596@EXDCVYMBSTM005.EQ1STM.local> References: <747C1E83C744F44E9ACFB89FAEEC2C7B23D4A4EAC2@EXDCVYMBSTM005.EQ1STM.local> In-Reply-To: <747C1E83C744F44E9ACFB89FAEEC2C7B23D4A4EAC2@EXDCVYMBSTM005.EQ1STM.local> Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: >From 7e32aecb2b13c6398108932e98fdd68faf9315d8 Mon Sep 17 00:00:00 2001 From: Vani Patel Date: Tue, 5 Jun 2012 13:44:30 +0530 Subject: [PATCH BlueZ V6 1/5] AVRCP: Add TG Record to support AVRCP Browsing Adds SDP record to support browsing --- audio/avctp.c |??? 4 ++-- audio/avctp.h |??? 3 ++- audio/avrcp.c |?? 28 ++++++++++++++++++++++++---- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/audio/avctp.c b/audio/avctp.c index 074eabd..a20dba9 100644 --- a/audio/avctp.c +++ b/audio/avctp.c @@ -802,7 +802,7 @@ static GIOChannel *avctp_server_socket(const bdaddr_t *src, gboolean master) ?????????????? io = bt_io_listen(BT_IO_L2CAP, NULL, avctp_confirm_cb, NULL, ?????????????????????????????????????????????????????????????? NULL, &err, ?????????????????????????????????????????????????????????????? BT_IO_OPT_SOURCE_BDADDR, src, -????????????????????????????????????????????????????????????? BT_IO_OPT_PSM, AVCTP_PSM, +????????????????????????????????????????????????????????????? BT_IO_OPT_PSM, AVCTP_CONTROL_PSM, ?????????????????????????????????????????????????????????????? BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM, ?????????????????????????????????????????????????????????????? BT_IO_OPT_MASTER, master, ?????????????????????????????????????????????????????????????? BT_IO_OPT_INVALID); @@ -1090,7 +1090,7 @@ struct avctp *avctp_connect(const bdaddr_t *src, const bdaddr_t *dst) ?????????????? io = bt_io_connect(BT_IO_L2CAP, avctp_connect_cb, session, NULL, &err, ?????????????????????????????????????????????????????????????? BT_IO_OPT_SOURCE_BDADDR, &session->server->src, ?????????????????????????????????????????????????????????????? BT_IO_OPT_DEST_BDADDR, &session->dst, -????????????????????????????????????????????????????????????? BT_IO_OPT_PSM, AVCTP_PSM, +????????????????????????????????????????????????????????????? BT_IO_OPT_PSM, AVCTP_CONTROL_PSM, ?????????????????????????????????????????????????????????????? BT_IO_OPT_INVALID); ?????????????? if (err) { ?????????????????????????????? avctp_set_state(session, AVCTP_STATE_DISCONNECTED); diff --git a/audio/avctp.h b/audio/avctp.h index d0cbd97..34b0c1c 100644 --- a/audio/avctp.h +++ b/audio/avctp.h @@ -22,7 +22,8 @@ ? * ? */ -#define AVCTP_PSM 23 +#define AVCTP_CONTROL_PSM????????????? 23 +#define AVCTP_BROWSING_PSM????????? 27 ?#define AVC_MTU 512 #define AVC_HEADER_LENGTH 3 diff --git a/audio/avrcp.c b/audio/avrcp.c index d925365..c7c8ae6 100644 --- a/audio/avrcp.c +++ b/audio/avrcp.c @@ -105,6 +105,7 @@ #define AVRCP_FEATURE_CATEGORY_3?????????????? 0x0004 #define AVRCP_FEATURE_CATEGORY_4?????????????? 0x0008 #define AVRCP_FEATURE_PLAYER_SETTINGS???? 0x0010 +#define AVRCP_FEATURE_BROWSING???????????????? 0x0040 ?#define AVRCP_BATTERY_STATUS_NORMAL????????????????????? 0 #define AVRCP_BATTERY_STATUS_WARNING?????????????????? 1 @@ -190,7 +191,7 @@ static sdp_record_t *avrcp_ct_record(void) ?????????????? sdp_list_t *aproto, *proto[2]; ?????????????? sdp_record_t *record; ?????????????? sdp_data_t *psm, *version, *features; -????????????? uint16_t lp = AVCTP_PSM; +????????????? uint16_t lp = AVCTP_CONTROL_PSM; ?????????????? uint16_t avrcp_ver = 0x0100, avctp_ver = 0x0103; ?????????????? uint16_t feat = ( AVRCP_FEATURE_CATEGORY_1 | ?????????????????????????????????????????????????????????????????????????????????????????????? AVRCP_FEATURE_CATEGORY_2 | @@ -252,18 +253,21 @@ static sdp_record_t *avrcp_ct_record(void) ?static sdp_record_t *avrcp_tg_record(void) { -????????????? sdp_list_t *svclass_id, *pfseq, *apseq, *root; +????????????? sdp_list_t *svclass_id, *pfseq, *apseq, *root, *apseq_browsing; ?????????????? uuid_t root_uuid, l2cap, avctp, avrtg; ?????????????? sdp_profile_desc_t profile[1]; ?????????????? sdp_list_t *aproto, *proto[2]; ?????????????? sdp_record_t *record; -????????????? sdp_data_t *psm, *version, *features; -????????????? uint16_t lp = AVCTP_PSM; +????????????? sdp_data_t *psm, *version, *features, *psm_browsing; +????????????? sdp_list_t *aproto_browsing, *proto_browsing[2] = {0}; +????????????? uint16_t lp = AVCTP_CONTROL_PSM; +????????????? uint16_t lp_browsing = AVCTP_BROWSING_PSM; ?????????????? uint16_t avrcp_ver = 0x0104, avctp_ver = 0x0103; ?????????????? uint16_t feat = ( AVRCP_FEATURE_CATEGORY_1 | ?????????????????????????????????????????????????????????????????????????????? AVRCP_FEATURE_CATEGORY_2 | ?????????????????????????????????????????????????????????????????????????????? AVRCP_FEATURE_CATEGORY_3 | ?????????????????????????????????????????????????????????????????????????????? AVRCP_FEATURE_CATEGORY_4 | +????????????????????????????????????????????????????????????????????????????? AVRCP_FEATURE_BROWSING | ?????????????????????????????????????????????????????????????????????????????? AVRCP_FEATURE_PLAYER_SETTINGS ); ??????????????? record = sdp_record_alloc(); @@ -294,6 +298,17 @@ static sdp_record_t *avrcp_tg_record(void) ??????????????? aproto = sdp_list_append(0, apseq); ?????????????? sdp_set_access_protos(record, aproto); +????????????? proto_browsing[0] = sdp_list_append(0, &l2cap); +????????????? psm_browsing = sdp_data_alloc(SDP_UINT16, &lp_browsing); +????????????? proto_browsing[0] = sdp_list_append(proto_browsing[0], psm_browsing); +????????????? apseq_browsing = sdp_list_append(0, proto_browsing[0]); + +????????????? proto_browsing[1] = sdp_list_append(0, &avctp); +????????????? proto_browsing[1] = sdp_list_append(proto_browsing[1], version); +????????????? apseq_browsing = sdp_list_append(apseq_browsing, proto_browsing[1]); + +????????????? aproto_browsing = sdp_list_append(0, apseq_browsing); +????????????? sdp_set_add_access_protos(record, aproto_browsing); ??????????????? /* Bluetooth Profile Descriptor List */ ?????????????? sdp_uuid16_create(&profile[0].uuid, AV_REMOTE_PROFILE_ID); @@ -306,6 +321,11 @@ static sdp_record_t *avrcp_tg_record(void) ??????????????? sdp_set_info_attr(record, "AVRCP TG", 0, 0); +????????????? free(psm_browsing); +????????????? sdp_list_free(proto_browsing[0], 0); +????????????? sdp_list_free(proto_browsing[1], 0); +????????????? sdp_list_free(apseq_browsing, 0); +????????????? sdp_list_free(aproto_browsing, 0); ?????????????? free(psm); ?????????????? free(version); ?????????????? sdp_list_free(proto[0], 0); -- 1.7.5.4 Regards, Vani