35
35
#define NRF52 // Needed for SD132 v2
36
36
#endif
37
37
38
+ #include "shared-bindings/bleio/ScanEntry.h"
38
39
#include "shared-module/bleio/Device.h"
39
40
#include "py/objstr.h"
40
41
#include "py/runtime.h"
@@ -745,8 +746,8 @@ void ble_drv_scan_stop(void) {
745
746
sd_ble_gap_scan_stop ();
746
747
}
747
748
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 ) {
750
751
ble_drv_adv_report_handler_set (NULL , NULL );
751
752
752
753
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_
760
761
ble_gap_addr_t addr ;
761
762
memset (& addr , 0 , sizeof (addr ));
762
763
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 );
765
766
766
767
BLE_DRIVER_LOG ("GAP CONNECTING: " HEX2_FMT ":" HEX2_FMT ":" HEX2_FMT ":" HEX2_FMT ":" HEX2_FMT ":" HEX2_FMT ", type: %d\n" ,
767
768
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) {
853
854
854
855
}
855
856
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
+
856
877
static void ble_evt_handler (ble_evt_t * p_ble_evt ) {
857
878
printf ("%s - 0x%02X\r\n" , __func__ , p_ble_evt -> header .evt_id );
858
879
@@ -920,31 +941,7 @@ static void ble_evt_handler(ble_evt_t * p_ble_evt) {
920
941
break ;
921
942
922
943
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 );
948
945
break ;
949
946
950
947
case BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST :
0 commit comments