[PATCH BlueZ V6 1/5] AVRCP: Add TG Record to support AVRCP Browsing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>From 7e32aecb2b13c6398108932e98fdd68faf9315d8 Mon Sep 17 00:00:00 2001
From: Vani Patel <vani.patel@xxxxxxxxxxxxxx>
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
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux