uint8_t addr_type;
uint8_t adv_type;
int rssi;
- int data_len;
- uint8_t data[BT_HAL_ADV_DATA_MAX_SIZE * 2];
+ uint8_t adv_data[BT_HAL_ADV_DATA_MAX_SIZE];
+ int adv_data_len;
+ uint8_t scan_rsp_data[BT_HAL_ADV_DATA_MAX_SIZE];
+ int scan_rsp_data_len;
guint timer_id;
} bt_hal_le_adv_info_t;
str2bt_bdaddr_t(adv_info->addr, &bd_addr);
if (bt_gatt_callbacks->client->scan_result_cb)
bt_gatt_callbacks->client->scan_result_cb(
- &bd_addr, adv_info->rssi, adv_info->data);
+ &bd_addr, adv_info->rssi,
+ adv_info->adv_data, adv_info->adv_data_len,
+ adv_info->scan_rsp_data, adv_info->scan_rsp_data_len);
}
static void __bt_handle_gatt_client_connected(void *buf, uint16_t len)
adv_info = __bt_hal_get_adv_ind_info(address);
if (adv_info) {
/* Copy scan response data in data field and send event */
- memcpy(&(adv_info->data[adv_info->data_len]), ev->adv_data, data_len);
+ adv_info->scan_rsp_data_len = data_len;
+ memcpy(adv_info->scan_rsp_data, ev->adv_data, data_len);
__bt_hal_send_le_scan_result_event(adv_info);
adv_ind_list = g_slist_remove(adv_ind_list, adv_info);
if (adv_info->timer_id)
adv_info->addr_type = ev->addr_type;
adv_info->adv_type = ev->adv_type;
adv_info->rssi = ev->rssi;
- adv_info->data_len = data_len;
- memcpy(adv_info->data, ev->adv_data, data_len);
+ adv_info->adv_data_len = data_len;
+ memcpy(adv_info->adv_data, ev->adv_data, data_len);
#ifdef TIZEN_BT_HAL
if (_bt_hal_gatt_client_get_le_scan_type() == BT_GATTC_LE_SCAN_TYPE_PASSIVE) {
bt_uuid_t *app_uuid);
/** Callback for scan results */
-typedef void (*scan_result_callback)(bt_bdaddr_t* bda, int rssi, uint8_t* adv_data);
+typedef void (*scan_result_callback)(bt_bdaddr_t* bda, int rssi,
+ uint8_t* adv_data, int adv_dat_len, uint8_t *scan_rsp_data, int scan_rsp_data_len);
/** GATT open callback invoked in response to open */
typedef void (*connect_callback)(int conn_id, int status, int client_if, bt_bdaddr_t* bda);
int rssi;
bt_address_t address;
uint8_t adv_data[BLE_ADV_DATA_LENGTH];
+ int adv_data_len;
+ uint8_t scan_rsp_data[BLE_ADV_DATA_LENGTH];
+ int scan_rsp_data_len;
} event_ble_scan_result_info;
typedef struct {
#define OAL_UUID_MAX_LENGTH 16/**< This specifies ble service UUID Length */
-#define BLE_ADV_DATA_LENGTH 62 /**< This specifies Advertising Data Length */
+#define BLE_ADV_DATA_LENGTH 31 /**< This specifies Advertising Data Length */
#define BT_ADDRESS_STR_LEN 18 /**< BT address String length> */
/* Forward declaration for GATT client callbacks */
static void cb_gattc_register_app(int status, int clientIf, bt_uuid_t *app_uuid);
-static void cb_gattc_scan_result(bt_bdaddr_t* bdaddress, int rssi, uint8_t *adv_data);
+static void cb_gattc_scan_result(bt_bdaddr_t* bdaddress, int rssi,
+ uint8_t *adv_data, int adv_data_len, uint8_t *scan_rsp_data, int scan_rsp_data_len);
static void cb_gattc_connection(int conn_id, int status, int client_if, bt_bdaddr_t* bda);
static void cb_gattc_disconnect(int conn_id, int status, int client_if, bt_bdaddr_t* bda);
static void cb_gattc_search_result(int conn_id, btgatt_srvc_id_t *srvc_id);
send_event(OAL_EVENT_GATTC_REGISTRATION, event, sizeof(event_gattc_register_t));
}
-static void cb_gattc_scan_result(bt_bdaddr_t* bdaddress, int rssi, uint8_t *adv_data)
+static void cb_gattc_scan_result(bt_bdaddr_t* bdaddress, int rssi,
+ uint8_t *adv_data, int adv_data_len, uint8_t *scan_rsp_data, int scan_rsp_data_len)
{
event_ble_scan_result_info *event;
event->rssi = rssi;
memcpy(event->address.addr, bdaddress->address, BT_ADDRESS_BYTES_NUM);
memcpy(event->adv_data, adv_data, BLE_ADV_DATA_LENGTH);
+ event->adv_data_len = adv_data_len;
+ memcpy(event->scan_rsp_data, scan_rsp_data, BLE_ADV_DATA_LENGTH);
+ event->scan_rsp_data_len = scan_rsp_data_len;
send_event_bda_trace(OAL_EVENT_BLE_REMOTE_DEVICE_FOUND, event,
sizeof(event_ble_scan_result_info), (bt_address_t *)bdaddress);
}
}
}
-static int __get_advertisement_data(unsigned char *dest, unsigned char *src)
-{
- int length = 0;
- int i = 0;
-
- while (i <= 31) {
- int len = src[i];
-
- if ((len == 0) || (31 < (i + len))) {
- memcpy(dest, src, length);
- break;
- }
-
- length += (len + 1);
- i += (len + 1);
- }
-
- return length;
-}
-
static int __bt_get_ad_data_by_type(const char *in_data, int in_len,
char in_type, char **data, int *data_len)
{
_bt_convert_addr_type_to_string(address, scan_result->address.addr);
memset(adv_ind_data, 0x00, sizeof(adv_ind_data));
- adv_ind_len = __get_advertisement_data(
- adv_ind_data, &(scan_result->adv_data[0]));
- if (adv_ind_len > BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX) {
- BT_ERR("Invalid advertising data");
- return;
- }
+ adv_ind_len = scan_result->adv_data_len;
+ memcpy(adv_ind_data, scan_result->adv_data, BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX);
memset(scan_resp_data, 0x00, sizeof(scan_resp_data));
- scan_resp_len = __get_advertisement_data(
- scan_resp_data, &(scan_result->adv_data[adv_ind_len]));
- if (scan_resp_len > BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX) {
- BT_ERR("Invalid scan response data");
- return;
- }
+ scan_resp_len = scan_result->scan_rsp_data_len;
+ memcpy(scan_resp_data, scan_result->scan_rsp_data, BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX);
BT_DBG("Address: %s, RSSI: %d, adv_ind_len: %d, scan_resp_len: %d",
address, scan_result->rssi, adv_ind_len, scan_resp_len);