*/
int bt_adapter_get_hci_address(char **address);
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_ADAPTER_LE_MODULE
+ * @brief Sets the custom name should be included in advertise or scan response data.
+ * The maximum advertised or responded data size is 31 bytes.
+ * if you want to include the system wide device name,
+ * please use @a bt_adapter_le_set_advertising_device_name.
+ * @since_tizen 7.5
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/bluetooth.admin
+ *
+ * @param[in] advertiser The handle of advertiser
+ * @param[in] pkt_type The packet type
+ * @param[in] name The custom name should be included
+ * @param[in] name_len The length of @a name
+ *
+ * @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_QUOTA_EXCEEDED Quota exceeded
+ * @retval #BT_ERROR_OPERATION_FAILED Operation failed
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre The Bluetooth service must be initialized with bt_initialize().
+ *
+ * @see bt_adapter_le_start_advertising_new()
+ */
+int bt_adapter_le_add_advertising_custom_name(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *name, unsigned int name_len);
+
/**
* @}
*/
return ret;
}
+#define ADV_DATA_LEN_MAX 31
+int bt_adapter_le_add_advertising_custom_name(bt_advertiser_h advertiser,
+ bt_adapter_le_packet_type_e pkt_type, const char *name, unsigned int name_len)
+{
+ bt_advertiser_s *__adv = (bt_advertiser_s *)advertiser;
+ char **p;
+ unsigned int *len;
+
+ BT_CHECK_LE_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(advertiser);
+
+ if (pkt_type == BT_ADAPTER_LE_PACKET_ADVERTISING) {
+ p = &__adv->adv_data;
+ len = &__adv->adv_data_len;
+ } else if (pkt_type == BT_ADAPTER_LE_PACKET_SCAN_RESPONSE) {
+ p = &__adv->scan_rsp_data;
+ len = &__adv->scan_rsp_data_len;
+ } else
+ return BT_ERROR_INVALID_PARAMETER;
+
+ /* At least 1 byte space is required for custom name */
+ if (*len + 2 + 1 > ADV_DATA_LEN_MAX) {
+ BT_ERR("Not enough space");
+ return BT_ERROR_QUOTA_EXCEEDED;
+ }
+
+ if (*len + 2 + name_len > ADV_DATA_LEN_MAX) {
+ *p = realloc(*p, sizeof(char) * ADV_DATA_LEN_MAX);
+ (*p)[*len] = ADV_DATA_LEN_MAX - *len - 1;
+ (*p)[*len + 1] = BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME;
+ memcpy(*p + *len + 2, name, ADV_DATA_LEN_MAX - *len - 2);
+ BT_DBG("name_len is %d, but only %d bytes were set", name_len, ADV_DATA_LEN_MAX - *len - 2);
+ *len = ADV_DATA_LEN_MAX;
+ } else {
+ *p = realloc(*p, sizeof(char) * (*len + name_len + 2));
+ (*p)[*len] = name_len + 1;
+ (*p)[*len + 1] = BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME;
+ memcpy(*p + *len + 2, name, name_len);
+ BT_DBG("%d bytes custom name were set", name_len);
+ *len += name_len + 2;
+ }
+
+ return BT_ERROR_NONE;
+}
+
int bt_adapter_le_set_advertising_tx_power_level(bt_advertiser_h advertiser,
bt_adapter_le_packet_type_e pkt_type, bool include_tx_power)
{
BT_CHECK_INIT_STATUS();
BT_CHECK_INPUT_PARAMETER(advertiser);
- if (__adv->adv_data_len > 0 &&
- __adv->adv_data) { /* LCOV_EXCL_START */
+ if (__adv->adv_data_len > 0 && __adv->adv_data) { /* LCOV_EXCL_START */
+ char buf[100];
+ for (int i = 0; i < __adv->adv_data_len; i++)
+ sprintf(buf + i * 2, "%02x", __adv->adv_data[i]);
+ BT_DBG("adv_data: %s(len: %d)", buf, __adv->adv_data_len);
+
memcpy(adv.data, __adv->adv_data, __adv->adv_data_len);
error_code = bluetooth_set_advertising_data(__adv->handle,
&adv, __adv->adv_data_len);
}
}
- if (__adv->scan_rsp_data_len > 0 &&
- __adv->scan_rsp_data) { /* LCOV_EXCL_START */
+ if (__adv->scan_rsp_data_len > 0 && __adv->scan_rsp_data) { /* LCOV_EXCL_START */
+ char buf[100];
+ for (int i = 0; i < __adv->scan_rsp_data_len; i++)
+ sprintf(buf + i * 2, "%02x", __adv->scan_rsp_data[i]);
+ BT_DBG("scan_rsp_data: %s(len: %d)", buf, __adv->scan_rsp_data_len);
+
memcpy(resp.data, __adv->scan_rsp_data, __adv->scan_rsp_data_len);
error_code = bluetooth_set_scan_response_data(__adv->handle,
&resp, __adv->scan_rsp_data_len);
break;
case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_ADD_ADVERTISING_DATA:
param_count = 1;
- TC_PRT("Select advertising data \n (0 : Service uuid, 1: Service solicitation 2 : Appearance & Tx power, 3 : All, 4 : ANCS, 6: Multiple service data, 7: Transport discovery data, 8: L2CAP CoC PSM data");
+ TC_PRT("Select advertising data \n (0 : Service uuid, 1: Service solicitation 2 : Appearance & Tx power, 3 : All, 4 : ANCS, 6: Multiple service data, 7: Transport discovery data, 8: L2CAP CoC PSM data, 9: Custom name");
TC_PRT("\t (Default scan response : Service Data &Local name & Manufacturer data)");
break;
case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_ADVERTISING_MODE:
TC_PRT("set device name [0x%04x]", ret);
return 0;
+ case 9: /* Custom name */
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, time_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_uuid(advertiser,
+ BT_ADAPTER_LE_PACKET_ADVERTISING, battery_svc_uuid_16);
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_uuid [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_service_data(advertiser,
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, time_svc_uuid_16,
+ service_data, sizeof(service_data));
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("add service_data [0x%04x]", ret);
+
+ ret = bt_adapter_le_add_advertising_custom_name(advertiser,
+ BT_ADAPTER_LE_PACKET_SCAN_RESPONSE,
+ "Customname123456789", strlen("Customname123456789"));
+ if (ret != BT_ERROR_NONE)
+ TC_PRT("set custom name [0x%04x]", ret);
+ return 0;
default:
TC_PRT("No adv data");
break;