Added c-apis for supporting Le data length extension feature.
Change-Id: I3316c7fe22d1a3e47f6dbc69d07af04b40dd034f
Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
BT_EVENT_GATT_CLIENT_READ_CHARACTERISTIC_LEGACY, /**< GATT characteristic value read callback */
BT_EVENT_GATT_CLIENT_WRITE_CHARACTERISTIC_LEGACY, /**< GATT characteristic value write callback */
#endif
+ BT_EVENT_LE_DATA_LENGTH_CHANGED, /** LE data length changed callback */
BT_EVENT_ADVERTISING_STATE_CHANGED, /**< Advertising state changed callback */
BT_EVENT_MANUFACTURER_DATA_CHANGED, /**< Manufacturer data changed callback */
BT_EVENT_CONNECTABLE_CHANGED_EVENT, /**< Adapter connectable changed callback */
int _bt_gatt_client_update_all(bt_gatt_client_h client);
+/* HID device related type */
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_LE_MODULE
+ * @brief Reads the maximum data length of LE packets supported by the controller.
+ * @since_tizen 3.0
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_initialize
+ */
+int bt_adapter_le_read_maximum_data_length(
+ int *max_tx_octets, int *max_tx_time,
+ int *max_rx_octets, int *max_rx_time);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_LE_MODULE
+ * @brief Writes the Host suggested default data length of LE packets to the controller.
+ * @since_tizen 3.0
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_initialize
+ */
+int bt_adapter_le_write_host_suggested_default_data_length(
+ const unsigned int def_tx_Octets, const unsigned int def_tx_Time);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_LE_MODULE
+ * @brief Reads the Host suggested data length values of LE packets from the controller.
+ * @since_tizen 3.0
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_initialize
+ */
+int bt_adapter_le_read_suggested_default_data_length(
+ unsigned int *def_tx_Octets, unsigned int *def_tx_Time);
+
+/**
+ * @ingroup CAPI_NETWORK_BLUETOOTH_LE_MODULE
+ * @brief Allows the host to suggest to controller, the data length parameters to be used
+ * for a given LE Connection.
+ * @since_tizen 3.0
+ *
+ * @retval #BT_ERROR_NONE Successful
+ * @retval #BT_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #BT_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @see bt_initialize
+ */
+int bt_device_le_set_data_length(const char *remote_address,
+ unsigned int max_tx_Octets, unsigned int max_tx_Time);
+
+/**
+ * @internal
+ * @brief LE data length changed callback
+ */
+typedef void (*_bt_le_set_data_length_changed_cb)
+ (int result, const char *remote_address, int max_tx_octets,
+ int max_tx_time, int max_rx_octets, int max_rx_time, void *user_data);
+
+int bt_device_le_set_data_length_change_cb(
+ _bt_le_set_data_length_changed_cb callback, void *user_data);
#ifdef __cplusplus
}
#endif
return BT_ERROR_NONE;
}
+
+int bt_adapter_le_read_maximum_data_length(
+ int *max_tx_octets, int *max_tx_time,
+ int *max_rx_octets, int *max_rx_time)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ bluetooth_le_read_maximum_data_length_t max_le_datalength;
+
+ ret = _bt_get_error_code(
+ bluetooth_le_read_maximum_data_length(&max_le_datalength));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ *max_tx_octets = max_le_datalength.max_tx_octets;
+ *max_tx_time = max_le_datalength.max_tx_time;
+ *max_rx_octets = max_le_datalength.max_rx_octets;
+ *max_rx_time = max_le_datalength.max_rx_time;
+
+ return ret;
+}
+
+int bt_adapter_le_write_host_suggested_default_data_length(
+ const unsigned int def_tx_Octets, const unsigned int def_tx_Time)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ /*Range for host suggested txtime is 0x001B-0x00FB and
+ txocets is 0x0148- 0x0848 as per BT 4.2 spec*/
+ if (((def_tx_Octets < 27 || def_tx_Octets > 251) ||
+ (def_tx_Time < 328 || def_tx_Time > 2120)) ||
+ ((def_tx_Octets < 0x001B || def_tx_Octets > 0x00FB) ||
+ (def_tx_Time < 0x0148 || def_tx_Time > 0x0848))) {
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ ret = _bt_get_error_code(
+ bluetooth_le_write_host_suggested_default_data_length(
+ def_tx_Octets, def_tx_Time));
+
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+
+ return ret;
+}
+
+int bt_adapter_le_read_suggested_default_data_length(
+ unsigned int *def_tx_Octets, unsigned int *def_tx_Time)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+
+ bluetooth_le_read_host_suggested_data_length_t data_values;
+
+ ret = _bt_get_error_code(
+ bluetooth_le_read_suggested_default_data_length(&data_values));
+
+ if (ret != BT_ERROR_NONE) {
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+ return ret;
+ }
+
+ *def_tx_Octets = data_values.def_tx_octets;
+ *def_tx_Time = data_values.def_tx_time;
+
+ return ret;
+}
bt_hdp_data_ind_t *hdp_data_ind = NULL;
bt_gatt_char_value_t *char_val = NULL;
media_metadata_attributes_t *metadata = NULL;
+ bt_le_data_length_params_t *data_length_info = NULL;
event_index = __bt_get_cb_index(event);
bt_event_slot_container[event_index].user_data);
break;
+ case BLUETOOTH_EVENT_LE_DATA_LENGTH_CHANGED:
+ BT_INFO("__bt_le_set_data_length_changed_cb() will be called");
+ data_length_info = (bt_le_data_length_params_t *)(param->param_data);
+ _bt_convert_address_to_string(&device_addr, &data_length_info->device_address);
+
+ ((_bt_le_set_data_length_changed_cb)bt_event_slot_container[event_index].callback)
+ (_bt_get_error_code(param->result), device_addr, data_length_info->max_tx_octets,
+ data_length_info->max_tx_time, data_length_info->max_rx_octets, data_length_info->max_rx_time,
+ bt_event_slot_container[event_index].user_data);
+
+ if (device_addr != NULL)
+ free(device_addr);
+ break;
#ifdef TIZEN_WEARABLE
case BLUETOOTH_PBAP_CONNECTED: {
bt_pbap_enabled_cb cb = bt_event_slot_container[event_index].callback;
return BT_EVENT_MANUFACTURER_DATA_CHANGED;
case BLUETOOTH_EVENT_CONNECTABLE_CHANGED:
return BT_EVENT_CONNECTABLE_CHANGED_EVENT;
+ case BLUETOOTH_EVENT_LE_DATA_LENGTH_CHANGED:
+ return BT_EVENT_LE_DATA_LENGTH_CHANGED;
#ifdef TIZEN_WEARABLE
case BLUETOOTH_PBAP_CONNECTED:
return BT_EVENT_PBAP_CONNECTION_STATUS;
return BT_ERROR_NONE;
}
+int bt_device_le_set_data_length(const char *remote_address,
+ unsigned int max_tx_Octets, unsigned int max_tx_Time)
+{
+ int ret = BT_ERROR_NONE;
+
+ BT_CHECK_BT_SUPPORT();
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(remote_address);
+
+ bluetooth_device_address_t addr_hex = {{0,}};
+
+ //Range for host suggested txtime is 0x001B-0x00FB and
+ // txocets is 0x0148- 0x0848 as per BT 4.2 spec
+ if (((max_tx_Octets < 27 || max_tx_Octets > 251) ||
+ (max_tx_Time < 328 || max_tx_Time > 2120)) ||
+ ((max_tx_Octets < 0x001B || max_tx_Octets > 0x00FB)
+ || (max_tx_Time < 0x0148 || max_tx_Time > 0x0848))) {
+ return BT_ERROR_INVALID_PARAMETER;
+ }
+
+ _bt_convert_address_to_hex(&addr_hex, remote_address);
+
+ ret = _bt_get_error_code(bluetooth_le_set_data_length(
+ &addr_hex,
+ max_tx_Octets,
+ max_tx_Time));
+
+ if (ret != BT_ERROR_NONE)
+ BT_ERR("%s(0x%08x)", _bt_convert_error_to_string(ret), ret);
+
+ return ret;
+}
+
+int bt_device_le_set_data_length_change_cb(
+ _bt_le_set_data_length_changed_cb callback, void *user_data)
+{
+ BT_CHECK_INIT_STATUS();
+ BT_CHECK_INPUT_PARAMETER(callback);
+ _bt_set_cb(BT_EVENT_LE_DATA_LENGTH_CHANGED, callback, user_data);
+
+ return BT_ERROR_NONE;
+}
{"bt_adapter_le_set_device_discovery_state_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB},
{"bt_adapter_le_unset_device_discovery_state_changed_cb" , BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB},
#endif
+ {"bt_adater_le_read_maximum_data_length", BT_UNIT_TEST_FUNCTION_ADAPTER_LE_READ_MAXIMUM_DATA_LENGTH},
+ {"bt_adater_le_wite_host_suggested_def_data_length", BT_UNIT_TEST_FUNCTION_ADAPTER_LE_WRITE_HOST_SUGGESTED_DEFAULT_DATA_LENGTH},
+ {"bt_adater_le_read_host_suggested_def_data_length", BT_UNIT_TEST_FUNCTION_ADAPTER_LE_READ_HOST_SUGGESTED_DEFAULT_DATA_LENGTH},
{"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
{NULL , 0x0000},
};
{"bt_device_create_bond" , BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND},
{"bt_device_create_bond_by_type" , BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND_BY_TYPE},
{"bt_device_destroy_bond" , BT_UNIT_TEST_FUNCTION_DEVICE_DESTROY_BOND},
+ {"bt_device_le_set_data_length" , BT_UNIT_TEST_FUNCTION_LE_DEVICE_SET_DATA_LENGTH},
+ {"bt_device_le_data_length_changed_cb", BT_UNIT_TEST_FUNCTION_LE_DEVICE_DATA_LENGTH_CHANGED_CB},
{"Select this menu to set parameters and then select the function again." , BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS},
{NULL , 0x0000},
};
}
}
+static void __bt_le_set_data_length_changed_cb(int result, const char *remote_address, int max_tx_octets,
+ int max_tx_time, int max_rx_octets, int max_rx_time,void *user_data)
+{
+ TC_PRT("__bt_le_set_data_length_changed_cb \n");
+ TC_PRT("max_tx_octets: %d max_tx_time: %d max_rx_octets: %d max_rx_time: %d",
+ max_tx_octets, max_tx_time, max_rx_octets, max_rx_time);
+ TC_PRT("result: %s", __bt_get_error_message(result));
+}
void __bt_opp_client_push_responded_cb(int result,
const char *remote_address,
void *user_data)
TC_PRT("returns %s\n", __bt_get_error_message(ret));
break;
#endif
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_READ_MAXIMUM_DATA_LENGTH: {
+
+ TC_PRT("Read Maximum LE Data length");
+
+ int max_tx_octects = 0;
+ int max_rx_octects = 0;
+ int max_tx_time = 0;
+ int max_rx_time = 0;
+ ret = bt_adapter_le_read_maximum_data_length(
+ &max_tx_octects, &max_tx_time,
+ &max_rx_octects, &max_rx_time);
+ TC_PRT("max data length values are %d %d %d %d",
+ max_tx_octects, max_tx_time,
+ max_rx_octects, max_rx_time);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_WRITE_HOST_SUGGESTED_DEFAULT_DATA_LENGTH: {
+
+ TC_PRT("Testing: Write Host suggested default LE Data length");
+
+ unsigned int def_tx_octects = 30;
+ unsigned int def_tx_time = 330;
+ ret = bt_adapter_le_write_host_suggested_default_data_length(
+ def_tx_octects, def_tx_time);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_ADAPTER_LE_READ_HOST_SUGGESTED_DEFAULT_DATA_LENGTH: {
+
+ TC_PRT("Read host suggested default LE Data length");
+
+ unsigned int def_tx_octets = 0;
+ unsigned int def_tx_time = 0;
+ ret = bt_adapter_le_read_suggested_default_data_length(
+ &def_tx_octets, &def_tx_time);
+ TC_PRT("host suggested default le data length values are %d %d",
+ def_tx_octets, def_tx_time);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+ break;
+ }
case BT_UNIT_TEST_FUNCTION_ACTIVATE_FLAG_TO_SET_PARAMETERS:
need_to_set_params = true;
TC_PRT("Select the function again");
break;
}
+ case BT_UNIT_TEST_FUNCTION_LE_DEVICE_SET_DATA_LENGTH: {
+
+ TC_PRT("Set LE Data length paramters cmd");
+
+ unsigned int tx_octets = 249; //range 27- 251
+ unsigned int tx_time = 500; //range 328-2120
+
+ TC_PRT("settting le data length values tx octects: %d tx time: %d",
+ tx_octets, tx_time);
+ ret = bt_device_le_set_data_length(remote_addr,
+ tx_octets, tx_time);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+ case BT_UNIT_TEST_FUNCTION_LE_DEVICE_DATA_LENGTH_CHANGED_CB: {
+
+ TC_PRT("Setting LE Data length change callback");
+
+ ret = bt_device_le_set_data_length_change_cb(__bt_le_set_data_length_changed_cb,
+ NULL);
+ TC_PRT("returns %s\n", __bt_get_error_message(ret));
+
+ break;
+ }
+
case BT_UNIT_TEST_FUNCTION_DEVICE_GET_CONNECTION_STATE: {
bool bredr_connected = false;
bool le_connected = false;
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_SET_DEVICE_DISCOVERY_STATE_CHANGED_CB,
BT_UNIT_TEST_FUNCTION_ADAPTER_LE_UNSET_DEVICE_DISCOVERY_STATE_CHANGED_CB,
#endif
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_READ_MAXIMUM_DATA_LENGTH,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_WRITE_HOST_SUGGESTED_DEFAULT_DATA_LENGTH,
+ BT_UNIT_TEST_FUNCTION_ADAPTER_LE_READ_HOST_SUGGESTED_DEFAULT_DATA_LENGTH,
BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_TRUE = 1,
BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_FALSE,
BT_UNIT_TEST_FUNCTION_DEVICE_SET_AUTHORIZATION_CHANGED_CB,
BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND,
BT_UNIT_TEST_FUNCTION_DEVICE_CREATE_BOND_BY_TYPE,
BT_UNIT_TEST_FUNCTION_DEVICE_DESTROY_BOND,
+ BT_UNIT_TEST_FUNCTION_LE_DEVICE_SET_DATA_LENGTH,
+ BT_UNIT_TEST_FUNCTION_LE_DEVICE_DATA_LENGTH_CHANGED_CB,
BT_UNIT_TEST_FUNCTION_DEVICE_ENABLE_RSSI_MONITOR,
BT_UNIT_TEST_FUNCTION_DEVICE_DISABLE_RSSI_MONITOR,
BT_UNIT_TEST_FUNCTION_DEVICE_GET_RSSI_STRENGTH,