Add support for custom advertising flags. 72/295572/2 accepted/tizen/7.0/unified/20230719.021521
authorJakub Latusek <j.latusek@samsung.com>
Wed, 1 Feb 2023 05:50:11 +0000 (14:50 +0900)
committerAnuj Kumar Singh <anujk.singh@samsung.com>
Tue, 11 Jul 2023 06:50:45 +0000 (12:20 +0530)
It is required to set proper advertising flags when establishing a
connection using
Bluetooth low energy to properly recognize device type.
Without this, the Linux device cannot recognize the Tizen device
properly and establish a connection.

Change-Id: I4ac31464007f67711ea05a6227a7a46c33b6c8ef
Signed-off-by: Jakub Latusek <j.latusek@samsung.com>
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
include/bluetooth_internal.h
include/bluetooth_private.h
include/bluetooth_type_internal.h
src/bluetooth-adapter.c
tests/test/bt_unit_test.c

index b0f41a9..b909da9 100644 (file)
@@ -1199,6 +1199,30 @@ int bt_adapter_le_set_advertising_transport_discovery_data(bt_advertiser_h adver
                unsigned char *transport_data, unsigned int transport_data_len);
 
 /**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Adds advertising flags.
+ * @since_tizen 8.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/bluetooth
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] flags The advertising flags
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #BT_ERROR_PERMISSION_DENIED Permission denied
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_advertising_flags_e
+ * @see bt_adapter_le_create_advertiser()
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_set_advertising_flags(bt_advertiser_h advertiser, unsigned char flags);
+
+/**
  * @internal
  * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_MODULE
  * @brief Retrieves the address of the devices connected with the specific profile.
index 04b358b..406055e 100644 (file)
@@ -206,6 +206,7 @@ typedef enum {
  * @internal
  */
 typedef enum {
+       BT_ADAPTER_LE_ADVERTISING_DATA_FLAGS = 0x01, /**< Flags */
        BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x02, /**<Incomplete list of 16 bit UUIDs */
        BT_ADAPTER_LE_ADVERTISING_DATA_COMP_LIST_16_BIT_SERVICE_CLASS_UUIDS = 0x03, /**< Complete list of 16 bit UUIDs */
        BT_ADAPTER_LE_ADVERTISING_DATA_INCOMP_LIST_128_BIT_SERVICE_CLASS_UUIDS = 0x06, /**< Incomplete list of 128 bit UUIDs */
index d55a748..efae2a3 100644 (file)
@@ -1181,6 +1181,19 @@ typedef enum {
        BT_ADAPTER_LE_ADVERTISING_TX_POWER_ULTRA_LOW = -23  /**< Lowst transmission power level */
 } bt_adapter_le_advertising_tx_power_level_e;
 
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Enumerations of the Bluetooth LE advertising flags
+ * @since_tizen 8.0
+ */
+typedef enum {
+       BT_ADAPTER_LE_ADVERTISING_FLAGS_LIM_DISC = 0x01, /* LE Limited Discoverable Mode */
+       BT_ADAPTER_LE_ADVERTISING_FLAGS_GEN_DISC = 0x02, /* LE General Discoverable Mode */
+       BT_ADAPTER_LE_ADVERTISING_FLAGS_BREDR_UNSUP = 0x04, /* BR/EDR Not Supported */
+       BT_ADAPTER_LE_ADVERTISING_FLAGS_CONTROLLER = 0x08, /* Simultaneous LE and BR/EDR to Same Device Capable (Controller) */
+       BT_ADAPTER_LE_ADVERTISING_FLAGS_SIM_HOST = 0x10, /* Simultaneous LE and BR/EDR to Same Device Capable (Host) */
+} bt_adapter_le_advertising_flags_e;
+
 /* Mesh Start */
 #define BT_MESH_MAX_UNPROVISIONED_DEVICE_SCAN_TIME 300
 #define BT_MESH_NETWORK_NAME_STRING_MAX_LEN 100
index abf8cce..fd4f22e 100644 (file)
@@ -2401,6 +2401,31 @@ int bt_adapter_le_add_advertising_service_data(bt_advertiser_h advertiser,
        return ret;
 }
 
+int bt_adapter_le_set_advertising_flags(bt_advertiser_h advertiser,
+               unsigned char flags)
+{
+       int ret = BT_ERROR_NONE;
+       char *data_ptr = NULL;
+       int data_len;
+
+       BT_CHECK_LE_SUPPORT();
+       BT_CHECK_INIT_STATUS();
+       BT_CHECK_INPUT_PARAMETER(advertiser);
+
+       __bt_find_adv_data_type(advertiser, BT_ADAPTER_LE_PACKET_ADVERTISING,
+                       BT_ADAPTER_LE_ADVERTISING_DATA_FLAGS, &data_ptr, &data_len);
+       if (data_ptr) {
+               BT_ERR("Aleady existed"); /* LCOV_EXCL_LINE */
+               return BT_ERROR_ALREADY_DONE; /* LCOV_EXCL_LINE */
+       }
+
+       ret = bt_adapter_le_add_advertising_data(advertiser,
+                       BT_ADAPTER_LE_PACKET_ADVERTISING, BT_ADAPTER_LE_ADVERTISING_DATA_FLAGS,
+                       &flags, sizeof(flags));
+
+       return ret;
+}
+
 int bt_adapter_le_set_advertising_appearance(bt_advertiser_h advertiser,
                bt_adapter_le_packet_type_e pkt_type, int appearance)
 {
index cccfc5f..ecafcdc 100644 (file)
@@ -5085,7 +5085,12 @@ int test_input_callback(void *data)
                                manufacture = manufacture_1;
                                break;
 
-                       case 2: /* appearance & tx power level */
+                       case 2: /* flags & appearance & tx power level */
+                               ret = bt_adapter_le_set_advertising_flags(advertiser,
+                                               BT_ADAPTER_LE_ADVERTISING_FLAGS_GEN_DISC | BT_ADAPTER_LE_ADVERTISING_FLAGS_BREDR_UNSUP);
+                               if (ret != BT_ERROR_NONE)
+                                       TC_PRT("add flags data [0x%04x]", ret);
+
                                ret = bt_adapter_le_set_advertising_appearance(advertiser,
                                        BT_ADAPTER_LE_PACKET_ADVERTISING, appearance);
                                if (ret != BT_ERROR_NONE)