bugfix: 修正 peer address 的 type 判斷錯誤的問題
This commit is contained in:
+22
-26
@@ -125,9 +125,10 @@ static void success_ack(void)
|
||||
uart_drv_tx(ack, sizeof(ack));
|
||||
}
|
||||
|
||||
static void disconnect_and_timeout_ack(void) {
|
||||
uint8_t ack[] = {0x04, 0x00, 0x01, 0xFF};
|
||||
uart_drv_tx(ack, sizeof(ack));
|
||||
static void disconnect_and_timeout_ack(void)
|
||||
{
|
||||
uint8_t ack[] = { 0x04, 0x00, 0x01, 0xFF };
|
||||
uart_drv_tx(ack, sizeof(ack));
|
||||
}
|
||||
|
||||
static void on_ins_scan(ins_scan_t *p_ins)
|
||||
@@ -139,34 +140,29 @@ static void on_ins_scan(ins_scan_t *p_ins)
|
||||
static void on_ins_connect(ins_connect_t *p_ins)
|
||||
{
|
||||
ble_gap_addr_t peer_addr;
|
||||
|
||||
peer_addr.addr_id_peer = 0;
|
||||
peer_addr.addr[0] = p_ins->addr[5];
|
||||
peer_addr.addr[1] = p_ins->addr[4];
|
||||
peer_addr.addr[2] = p_ins->addr[3];
|
||||
peer_addr.addr[3] = p_ins->addr[2];
|
||||
peer_addr.addr[4] = p_ins->addr[1];
|
||||
peer_addr.addr[5] = p_ins->addr[0];
|
||||
switch (peer_addr.addr[5] & 0b11000000)
|
||||
{
|
||||
case 0b00000000:
|
||||
peer_addr.addr_type = BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_NON_RESOLVABLE;
|
||||
break;
|
||||
case 0b11000000:
|
||||
peer_addr.addr_type = BLE_GAP_ADDR_TYPE_RANDOM_STATIC;
|
||||
break;
|
||||
case 0b01000000:
|
||||
peer_addr.addr_type = BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE;
|
||||
break;
|
||||
case 0b10000000:
|
||||
peer_addr.addr_type = BLE_GAP_ADDR_TYPE_PUBLIC;
|
||||
break;
|
||||
}
|
||||
peer_addr.addr_type = BLE_GAP_ADDR_TYPE_ANONYMOUS;
|
||||
peer_addr.addr[0] = p_ins->addr[5];
|
||||
peer_addr.addr[1] = p_ins->addr[4];
|
||||
peer_addr.addr[2] = p_ins->addr[3];
|
||||
peer_addr.addr[3] = p_ins->addr[2];
|
||||
peer_addr.addr[4] = p_ins->addr[1];
|
||||
peer_addr.addr[5] = p_ins->addr[0];
|
||||
|
||||
extern void le_scan_stop(void);
|
||||
le_scan_stop();
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(5));
|
||||
vTaskDelay(pdMS_TO_TICKS(3));
|
||||
|
||||
extern void le_scan_get_peer_addr(ble_gap_addr_t * p_peer_addr);
|
||||
le_scan_get_peer_addr(&peer_addr);
|
||||
|
||||
if (peer_addr.addr_type == BLE_GAP_ADDR_TYPE_ANONYMOUS)
|
||||
{
|
||||
extern void le_scan_start(void);
|
||||
le_scan_start();
|
||||
return;
|
||||
}
|
||||
|
||||
extern void le_gap_connet(ble_gap_addr_t * p_peer_addr);
|
||||
le_gap_connet(&peer_addr);
|
||||
|
||||
@@ -78,14 +78,14 @@ static void on_adv_report(ble_gap_evt_adv_report_t const *p_adv_report)
|
||||
p_adv_report->rssi);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static uint8_t scan_buffer[BLE_GAP_SCAN_BUFFER_MAX];
|
||||
static ble_data_t const adv_report_buffer = { .p_data = scan_buffer,
|
||||
.len = BLE_GAP_SCAN_BUFFER_MAX };
|
||||
static ble_uuid_t const filter_uuid = { .type = BLE_UUID_TYPE_BLE, .uuid = 0xFFF0 };
|
||||
static uint64_t mac = 0;
|
||||
static uint32_t peer_addr_idx = 0;
|
||||
static ble_gap_addr_t peer_addr_list[16];
|
||||
|
||||
static uint64_t mac = 0;
|
||||
void le_scan_handler(ble_evt_t const *p_ble_evt, void *p_context)
|
||||
{
|
||||
ret_code_t err_code;
|
||||
@@ -99,14 +99,13 @@ void le_scan_handler(ble_evt_t const *p_ble_evt, void *p_context)
|
||||
{
|
||||
mac = u64_peer_addr;
|
||||
|
||||
char peer_addr_str[(2 + 1) * BLE_GAP_ADDR_LEN + 1] = { 0 };
|
||||
|
||||
if (peer_addr)
|
||||
{
|
||||
char peer_addr_str[(2 + 1) * BLE_GAP_ADDR_LEN + 1] = { 0 };
|
||||
peer_addr_list[peer_addr_idx++ % COUNTOF(peer_addr_list)] = *peer_addr;
|
||||
sprintf(peer_addr_str, "%02X:%02X:%02X:%02X:%02X:%02X", peer_addr->addr[5], peer_addr->addr[4], peer_addr->addr[3], peer_addr->addr[2], peer_addr->addr[1], peer_addr->addr[0]);
|
||||
NRF_LOG_INFO("%s", peer_addr_str);
|
||||
}
|
||||
|
||||
NRF_LOG_INFO("%s", peer_addr_str);
|
||||
}
|
||||
else if (mac == u64_peer_addr)
|
||||
{
|
||||
@@ -116,6 +115,18 @@ void le_scan_handler(ble_evt_t const *p_ble_evt, void *p_context)
|
||||
sd_ble_gap_scan_start(NULL, &adv_report_buffer);
|
||||
}
|
||||
|
||||
void le_scan_get_peer_addr(ble_gap_addr_t *p_peer_addr)
|
||||
{
|
||||
for (uint32_t i = 0; i < COUNTOF(peer_addr_list); i++)
|
||||
{
|
||||
if (memcmp(peer_addr_list[i].addr, p_peer_addr->addr, BLE_GAP_ADDR_LEN) == 0)
|
||||
{
|
||||
p_peer_addr->addr_type = peer_addr_list[i].addr_type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static ble_gap_scan_params_t scan_params = {
|
||||
.active = 1,
|
||||
.interval = NRF_BLE_SCAN_SCAN_INTERVAL,
|
||||
@@ -141,7 +152,9 @@ void le_scan_start(void)
|
||||
{
|
||||
NRF_LOG_INFO("Start scanning for UUID service 0x%04X.",
|
||||
BLE_UUID_CUSTOM_SERVICE);
|
||||
is_scanning = true;
|
||||
is_scanning = true;
|
||||
peer_addr_idx = 0;
|
||||
memset(peer_addr_list, 0x00, sizeof(peer_addr_list));
|
||||
sd_ble_gap_scan_start(&scan_params, &adv_report_buffer);
|
||||
}
|
||||
}
|
||||
@@ -156,4 +169,4 @@ void le_scan_stop(void)
|
||||
ble_gap_scan_params_t *le_scan_params(void)
|
||||
{
|
||||
return &scan_params;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user