adapter: Add support for setting ISO Socket experimental feature
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 15 Dec 2021 22:24:03 +0000 (14:24 -0800)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:54 +0000 (14:55 +0530)
This adds support for setting ISO Socket experimental UUID which
enables the use of BTPROTO_ISO on the system.

Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
src/adapter.c
src/adapter.h
src/main.c
src/main.conf

index 8d3933c..f30f5c5 100644 (file)
@@ -156,6 +156,13 @@ static const struct mgmt_exp_uuid codec_offload_uuid = {
        .str = "a6695ace-ee7f-4fb9-881a-5fac66c629af"
 };
 
+/* 6fbaf188-05e0-496a-9885-d6ddfdb4e03e */
+static const struct mgmt_exp_uuid iso_socket_uuid = {
+       .val = { 0x3e, 0xe0, 0xb4, 0xfd, 0xdd, 0xd6, 0x85, 0x98,
+               0x6a, 0x49, 0xe0, 0x05, 0x88, 0xf1, 0xba, 0x6f },
+       .str = "6fbaf188-05e0-496a-9885-d6ddfdb4e03e"
+};
+
 #ifdef TIZEN_FEATURE_BLUEZ_MODIFY
 #define ADV_DATA_MAX_LENGTH 31
 #define SCAN_RESPONSE_DATA_LENGTH_MAX 31
@@ -16072,6 +16079,42 @@ static void codec_offload_func(struct btd_adapter *adapter, uint8_t action)
        btd_error(adapter->dev_id, "Failed to set Codec Offload");
 }
 
+static void iso_socket_complete(uint8_t status, uint16_t len,
+                               const void *param, void *user_data)
+{
+       struct btd_adapter *adapter = user_data;
+       uint8_t action;
+
+       if (status != 0) {
+               error("Set ISO Socket failed with status 0x%02x (%s)",
+                                               status, mgmt_errstr(status));
+               return;
+       }
+
+       action = btd_kernel_experimental_enabled(iso_socket_uuid.str);
+
+       DBG("ISO Socket successfully %s", action ? "set" : "reset");
+
+       if (action)
+               queue_push_tail(adapter->exps, (void *)iso_socket_uuid.val);
+}
+
+static void iso_socket_func(struct btd_adapter *adapter, uint8_t action)
+{
+       struct mgmt_cp_set_exp_feature cp;
+
+       memset(&cp, 0, sizeof(cp));
+       memcpy(cp.uuid, iso_socket_uuid.val, 16);
+       cp.action = action;
+
+       if (mgmt_send(adapter->mgmt, MGMT_OP_SET_EXP_FEATURE,
+                       MGMT_INDEX_NONE, sizeof(cp), &cp,
+                       iso_socket_complete, adapter, NULL) > 0)
+               return;
+
+       btd_error(adapter->dev_id, "Failed to set ISO Socket");
+}
+
 static const struct exp_feat {
        uint32_t flag;
        const struct mgmt_exp_uuid *uuid;
@@ -16085,6 +16128,7 @@ static const struct exp_feat {
                rpa_resolution_func),
        EXP_FEAT(EXP_FEAT_CODEC_OFFLOAD, &codec_offload_uuid,
                codec_offload_func),
+       EXP_FEAT(EXP_FEAT_ISO_SOCKET, &iso_socket_uuid, iso_socket_func),
 };
 
 static void read_exp_features_complete(uint8_t status, uint16_t length,
index 7b88c37..628d02d 100644 (file)
@@ -361,6 +361,7 @@ enum experimental_features {
        EXP_FEAT_BQR                    = 1 << 2,
        EXP_FEAT_RPA_RESOLUTION         = 1 << 3,
        EXP_FEAT_CODEC_OFFLOAD          = 1 << 4,
+       EXP_FEAT_ISO_SOCKET             = 1 << 5,
 };
 
 bool btd_adapter_has_exp_feature(struct btd_adapter *adapter, uint32_t feature);
index bcb6e52..b169939 100755 (executable)
@@ -611,6 +611,7 @@ static const char *valid_uuids[] = {
        "15c0a148-c273-11ea-b3de-0242ac130004",
        "330859bc-7506-492d-9370-9a6f0614037f",
        "a6695ace-ee7f-4fb9-881a-5fac66c629af",
+       "6fbaf188-05e0-496a-9885-d6ddfdb4e03e",
        "*"
 };
 
index ff88b4e..76f6296 100755 (executable)
 # 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy)
 # 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report)
 # a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)
+# 6fbaf188-05e0-496a-9885-d6ddfdb4e03e (BlueZ Experimental ISO socket)
 # Defaults to false.
 #KernelExperimental = false