Skip to content

Commit 3df7dea

Browse files
committed
nrf: Remove the ble drv specific advertisement data struct
1 parent 4b34481 commit 3df7dea

File tree

3 files changed

+30
-50
lines changed

3 files changed

+30
-50
lines changed

ports/nrf/common-hal/bleio/Scanner.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,10 @@
3333
#include "shared-bindings/bleio/Scanner.h"
3434
#include "shared-module/bleio/ScanEntry.h"
3535

36-
STATIC void adv_event_handler(bleio_scanner_obj_t *self, ble_drv_adv_data_t *data) {
36+
STATIC void adv_event_handler(bleio_scanner_obj_t *self, bleio_scanentry_obj_t *entry) {
3737
// TODO: Don't add new entry for each item, group by address and update
38-
bleio_scanentry_obj_t *item = m_new_obj(bleio_scanentry_obj_t);
39-
item->base.type = &bleio_scanentry_type;
4038

41-
item->rssi = data->rssi;
42-
item->data = mp_obj_new_bytearray(data->data_len, data->p_data);
43-
44-
item->address.type = data->addr_type;
45-
memcpy(item->address.value, data->p_peer_addr, BLEIO_ADDRESS_BYTES);
46-
47-
mp_obj_list_append(self->adv_reports, item);
39+
mp_obj_list_append(self->adv_reports, entry);
4840

4941
ble_drv_scan_continue();
5042
}

ports/nrf/drivers/bluetooth/ble_drv.c

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#define NRF52 // Needed for SD132 v2
3636
#endif
3737

38+
#include "shared-bindings/bleio/ScanEntry.h"
3839
#include "shared-module/bleio/Device.h"
3940
#include "py/objstr.h"
4041
#include "py/runtime.h"
@@ -745,8 +746,8 @@ void ble_drv_scan_stop(void) {
745746
sd_ble_gap_scan_stop();
746747
}
747748

748-
STATIC void ble_drv_connect_scan_callback(bleio_scanner_obj_t *scanner, ble_drv_adv_data_t *data) {
749-
if (memcmp(data->p_peer_addr, mp_connect_address->value, BLEIO_ADDRESS_BYTES) == 0) {
749+
STATIC void ble_drv_connect_scan_callback(bleio_scanner_obj_t *scanner, bleio_scanentry_obj_t *entry) {
750+
if (memcmp(entry->address.value, mp_connect_address->value, BLEIO_ADDRESS_BYTES) == 0) {
750751
ble_drv_adv_report_handler_set(NULL, NULL);
751752

752753
ble_gap_scan_params_t scan_params;
@@ -760,8 +761,8 @@ STATIC void ble_drv_connect_scan_callback(bleio_scanner_obj_t *scanner, ble_drv_
760761
ble_gap_addr_t addr;
761762
memset(&addr, 0, sizeof(addr));
762763

763-
addr.addr_type = data->addr_type;
764-
memcpy(addr.addr, data->p_peer_addr, BLEIO_ADDRESS_BYTES);
764+
addr.addr_type = entry->address.type;
765+
memcpy(addr.addr, entry->address.value, BLEIO_ADDRESS_BYTES);
765766

766767
BLE_DRIVER_LOG("GAP CONNECTING: "HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT":"HEX2_FMT", type: %d\n",
767768
addr.addr[5], addr.addr[4], addr.addr[3], addr.addr[2], addr.addr[1], addr.addr[0], addr.addr_type);
@@ -853,6 +854,26 @@ void ble_drv_discover_descriptors(void) {
853854

854855
}
855856

857+
STATIC void on_adv_report(ble_gap_evt_adv_report_t *report) {
858+
bleio_scanentry_obj_t *entry = m_new_obj(bleio_scanentry_obj_t);
859+
entry->base.type = &bleio_scanentry_type;
860+
861+
entry->rssi = report->rssi;
862+
863+
entry->address.type = report->peer_addr.addr_type;
864+
memcpy(entry->address.value, report->peer_addr.addr, BLEIO_ADDRESS_BYTES);
865+
866+
#if (BLUETOOTH_SD == 140)
867+
entry->data = mp_obj_new_bytearray(report->data.len, report->data.p_data);
868+
#else
869+
entry->data = mp_obj_new_bytearray(report->dlen, report->data);
870+
#endif
871+
872+
if (adv_event_handler != NULL) {
873+
adv_event_handler(mp_adv_observer, entry);
874+
}
875+
}
876+
856877
static void ble_evt_handler(ble_evt_t * p_ble_evt) {
857878
printf("%s - 0x%02X\r\n", __func__, p_ble_evt->header.evt_id);
858879

@@ -920,31 +941,7 @@ static void ble_evt_handler(ble_evt_t * p_ble_evt) {
920941
break;
921942

922943
case BLE_GAP_EVT_ADV_REPORT:
923-
BLE_DRIVER_LOG("BLE EVT ADV REPORT\n");
924-
ble_drv_adv_data_t adv_data = {
925-
.p_peer_addr = p_ble_evt->evt.gap_evt.params.adv_report.peer_addr.addr,
926-
.addr_type = p_ble_evt->evt.gap_evt.params.adv_report.peer_addr.addr_type,
927-
#if (BLUETOOTH_SD == 140)
928-
.is_scan_resp = p_ble_evt->evt.gap_evt.params.adv_report.type.scannable,
929-
#else
930-
.is_scan_resp = p_ble_evt->evt.gap_evt.params.adv_report.scan_rsp,
931-
#endif
932-
.rssi = p_ble_evt->evt.gap_evt.params.adv_report.rssi,
933-
#if (BLUETOOTH_SD == 140)
934-
.data_len = p_ble_evt->evt.gap_evt.params.adv_report.data.len,
935-
.p_data = p_ble_evt->evt.gap_evt.params.adv_report.data.p_data,
936-
#else
937-
.data_len = p_ble_evt->evt.gap_evt.params.adv_report.dlen,
938-
.p_data = p_ble_evt->evt.gap_evt.params.adv_report.data,
939-
#endif
940-
#if (BLUETOOTH_SD == 132)
941-
.adv_type = p_ble_evt->evt.gap_evt.params.adv_report.type
942-
#endif
943-
};
944-
945-
if (adv_event_handler != NULL) {
946-
adv_event_handler(mp_adv_observer, &adv_data);
947-
}
944+
on_adv_report(&p_ble_evt->evt.gap_evt.params.adv_report);
948945
break;
949946

950947
case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST:

ports/nrf/drivers/bluetooth/ble_drv.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,10 @@
3535
#include "shared-module/bleio/AdvertisementData.h"
3636
#include "shared-module/bleio/Characteristic.h"
3737
#include "shared-module/bleio/Device.h"
38+
#include "shared-module/bleio/ScanEntry.h"
3839
#include "shared-module/bleio/Scanner.h"
3940
#include "shared-module/bleio/Service.h"
4041

41-
typedef struct {
42-
uint8_t * p_peer_addr;
43-
uint8_t addr_type;
44-
bool is_scan_resp;
45-
int8_t rssi;
46-
uint8_t data_len;
47-
uint8_t * p_data;
48-
uint8_t adv_type;
49-
} ble_drv_adv_data_t;
50-
5142
typedef struct {
5243
uint16_t uuid;
5344
uint8_t uuid_type;
@@ -73,7 +64,7 @@ typedef struct {
7364
typedef void (*ble_drv_gap_evt_callback_t)(bleio_device_obj_t *device, uint16_t event_id, uint16_t conn_handle, uint16_t length, uint8_t * data);
7465
typedef void (*ble_drv_gatts_evt_callback_t)(bleio_device_obj_t *device, uint16_t event_id, uint16_t attr_handle, uint16_t length, uint8_t * data);
7566
typedef void (*ble_drv_gattc_evt_callback_t)(bleio_device_obj_t *device, uint16_t event_id, uint16_t attr_handle, uint16_t length, uint8_t * data);
76-
typedef void (*ble_drv_adv_evt_callback_t)(bleio_scanner_obj_t *scanner, ble_drv_adv_data_t *data);
67+
typedef void (*ble_drv_adv_evt_callback_t)(bleio_scanner_obj_t *scanner, bleio_scanentry_obj_t *entry);
7768
typedef void (*ble_drv_disc_add_service_callback_t)(bleio_device_obj_t *device, ble_drv_service_data_t * p_service_data);
7869
typedef void (*ble_drv_disc_add_char_callback_t)(bleio_service_obj_t *service, ble_drv_char_data_t * p_desc_data);
7970
typedef void (*ble_drv_gattc_char_data_callback_t)(bleio_characteristic_obj_t *self, uint16_t length, uint8_t * p_data);

0 commit comments

Comments
 (0)