#include "bt-service-gatt.h"
#include "bt-service-util.h"
#include "bt-service-core-device.h"
+#include "bt-service-battery-monitor.h"
#include <oal-hardware.h>
#include <oal-manager.h>
typedef struct {
char *sender;
+ uid_t uid;
+ pid_t pid;
GSList *filter_list;
gboolean is_scanning;
} bt_adapter_le_scanner_t;
}
}
-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)
{
int result = BLUETOOTH_ERROR_NONE;
bt_adapter_le_scanner_t *scanner = NULL;
char address[BT_ADDRESS_STRING_SIZE];
- int addr_type = 0x01; /* TODO: Need to get correct address type */
unsigned char adv_ind_data[BLUETOOTH_ADVERTISING_DATA_LENGTH_MAX];
unsigned char scan_resp_data[BLUETOOTH_SCAN_RESP_DATA_LENGTH_MAX];
int adv_ind_len = 0;
_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);
param = g_variant_new("(isnnn@ayn@ay)",
result, address,
- addr_type, scan_result->rssi,
+ scan_result->addr_type, scan_result->rssi,
adv_ind_len, adv_data_param,
scan_resp_len, scan_data_param);
return BLUETOOTH_ERROR_NONE;
}
-int _bt_start_le_scan(const char *sender)
+int _bt_start_le_scan(const char *sender, uid_t uid, pid_t pid)
{
bt_adapter_le_scanner_t *scanner;
int ret;
retv_if(scanner == NULL, BLUETOOTH_ERROR_INTERNAL);
scanner->sender = g_strdup(sender);
+ scanner->uid = uid;
+ scanner->pid = pid;
scanner_list = g_slist_append(scanner_list, scanner);
}
if (!scanner)
return;
- if (scanner->is_scanning)
- _bt_stop_le_scan(sender);
+ _bt_bm_remove_scan_app(SCAN_LE, scanner->uid, scanner->pid);
+
+ if (scanner->is_scanning) {
+ /* Free 'scanner' into the function */
+ if (_bt_stop_le_scan(sender) != BLUETOOTH_ERROR_NOT_IN_OPERATION)
+ return;
+ }
scanner_list = g_slist_remove(scanner_list, scanner);
- g_free(scanner->sender);
- g_free(scanner);
+ __bt_free_le_scanner(scanner);
}
int _bt_service_le_init(void)
result = adapter_set_le_static_random_address(is_enable);
if (result != OAL_STATUS_SUCCESS) {
- BT_ERR("adapter_set_connectable failed: %d", result);
+ BT_ERR("adapter_set_le_static_random_address failed: %d", result);
result = BLUETOOTH_ERROR_INTERNAL;
} else {
BT_INFO("SetLeStaticRandomAddress as %d", is_enable);