@@ -774,8 +774,8 @@ const mp_obj_module_t mp_module_ubluetooth = {
774
774
775
775
#include <stdio.h>
776
776
777
- STATIC void ringbuf_extract (ringbuf_t * ringbuf , mp_obj_tuple_t * data_tuple , size_t n_u16 , size_t n_u8 , mp_obj_str_t * bytes_addr , size_t n_b , size_t n_i8 , mp_obj_bluetooth_uuid_t * uuid , mp_obj_str_t * bytes_data ) {
778
- assert (ringbuf_avail (ringbuf ) >= n_u16 * 2 + n_u8 + (bytes_addr ? 6 : 0 ) + n_b + n_i8 + (uuid ? 1 : 0 ) + (bytes_data ? 1 : 0 ));
777
+ STATIC void ringbuf_extract (ringbuf_t * ringbuf , mp_obj_tuple_t * data_tuple , size_t n_u16 , size_t n_u8 , mp_obj_str_t * bytes_addr , size_t n_i8 , mp_obj_bluetooth_uuid_t * uuid , mp_obj_str_t * bytes_data ) {
778
+ assert (ringbuf_avail (ringbuf ) >= n_u16 * 2 + n_u8 + (bytes_addr ? 6 : 0 ) + n_i8 + (uuid ? 1 : 0 ) + (bytes_data ? 1 : 0 ));
779
779
int j = 0 ;
780
780
781
781
for (int i = 0 ; i < n_u16 ; ++
A3E2
i ) {
@@ -792,10 +792,7 @@ STATIC void ringbuf_extract(ringbuf_t *ringbuf, mp_obj_tuple_t *data_tuple, size
792
792
}
793
793
data_tuple -> items [j ++ ] = MP_OBJ_FROM_PTR (bytes_addr );
794
794
}
795
- if (n_b ) {
796
- data_tuple -> items [j ++ ] = mp_obj_new_bool (ringbuf_get (ringbuf ));
797
- }
798
- if (n_i8 ) {
795
+ for (int i = 0 ; i < n_i8 ; ++ i ) {
799
796
// Note the int8_t got packed into the ringbuf as a uint8_t.
800
797
data_tuple -> items [j ++ ] = MP_OBJ_NEW_SMALL_INT ((int8_t )ringbuf_get (ringbuf ));
801
798
}
@@ -843,32 +840,32 @@ STATIC mp_obj_t bluetooth_ble_invoke_irq(mp_obj_t none_in) {
843
840
844
841
if (event == MP_BLUETOOTH_IRQ_CENTRAL_CONNECT || event == MP_BLUETOOTH_IRQ_PERIPHERAL_CONNECT || event == MP_BLUETOOTH_IRQ_CENTRAL_DISCONNECT || event == MP_BLUETOOTH_IRQ_PERIPHERAL_DISCONNECT ) {
845
842
// conn_handle, addr_type, addr
846
- ringbuf_extract (& o -> ringbuf , data_tuple , 1 , 1 , & o -> irq_data_addr , 0 , 0 , NULL , NULL );
843
+ ringbuf_extract (& o -> ringbuf , data_tuple , 1 , 1 , & o -> irq_data_addr , 0 , NULL , NULL );
847
844
} else if (event == MP_BLUETOOTH_IRQ_GATTS_WRITE ) {
848
845
// conn_handle, value_handle
849
- ringbuf_extract (& o -> ringbuf , data_tuple , 2 , 0 , NULL , 0 , 0 , NULL , NULL );
846
+ ringbuf_extract (& o -> ringbuf , data_tuple , 2 , 0 , NULL , 0 , NULL , NULL );
850
847
#if MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE
851
848
} else if (event == MP_BLUETOOTH_IRQ_SCAN_RESULT ) {
852
- // addr_type, addr, connectable , rssi, adv_data
853
- ringbuf_extract (& o -> ringbuf , data_tuple , 0 , 1 , & o -> irq_data_addr , 1 , 1 , NULL , & o -> irq_data_data );
849
+ // addr_type, addr, adv_type , rssi, adv_data
850
+ ringbuf_extract (& o -> ringbuf , data_tuple , 0 , 1 , & o -> irq_data_addr , 2 , NULL , & o -> irq_data_data );
854
851
} else if (event == MP_BLUETOOTH_IRQ_SCAN_COMPLETE ) {
855
852
// No params required.
856
853
data_tuple -> len = 0 ;
857
854
} else if (event == MP_BLUETOOTH_IRQ_GATTC_SERVICE_RESULT ) {
858
855
// conn_handle, start_handle, end_handle, uuid
859
- ringbuf_extract (& o -> ringbuf , data_tuple , 3 , 0 , NULL , 0 , 0 , & o -> irq_data_uuid , NULL );
856
+ ringbuf_extract (& o -> ringbuf , data_tuple , 3 , 0 , NULL , 0 , & o -> irq_data_uuid , NULL );
860
857
} else if (event == MP_BLUETOOTH_IRQ_GATTC_CHARACTERISTIC_RESULT ) {
861
858
// conn_handle, def_handle, value_handle, properties, uuid
862
- ringbuf_extract (& o -> ringbuf , data_tuple , 3 , 1 , NULL , 0 , 0 , & o -> irq_data_uuid , NULL );
859
+ ringbuf_extract (& o -> ringbuf , data_tuple , 3 , 1 , NULL , 0 , & o -> irq_data_uuid , NULL );
863
860
} else if (event == MP_BLUETOOTH_IRQ_GATTC_DESCRIPTOR_RESULT ) {
864
861
// conn_handle, handle, uuid
865
- ringbuf_extract (& o -> ringbuf , data_tuple , 2 , 0 , NULL , 0 , 0 , & o -> irq_data_uuid , NULL );
862
+ ringbuf_extract (& o -> ringbuf , data_tuple , 2 , 0 , NULL , 0 , & o -> irq_data_uuid , NULL );
866
863
} else if (event == MP_BLUETOOTH_IRQ_GATTC_READ_RESULT || event == MP_BLUETOOTH_IRQ_GATTC_NOTIFY || event == MP_BLUETOOTH_IRQ_GATTC_INDICATE ) {
867
864
// conn_handle, value_handle, data
868
- ringbuf_extract (& o -> ringbuf , data_tuple , 2 , 0 , NULL , 0 , 0 , NULL , & o -> irq_data_data );
865
+ ringbuf_extract (& o -> ringbuf , data_tuple , 2 , 0 , NULL , 0 , NULL , & o -> irq_data_data );
869
866
} else if (event == MP_BLUETOOTH_IRQ_GATTC_WRITE_STATUS ) {
870
867
// conn_handle, value_handle, status
871
- ringbuf_extract (& o -> ringbuf , data_tuple , 3 , 0 , NULL , 0 , 0 , NULL , NULL );
868
+ ringbuf_extract (& o -> ringbuf , data_tuple , 3 , 0 , NULL , 0 , NULL , NULL );
872
869
#endif // MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE
873
870
}
874
871
@@ -903,7 +900,7 @@ STATIC bool enqueue_irq(mp_obj_bluetooth_ble_t *o, size_t len, uint16_t event) {
903
900
904
901
// Front of the queue is a scan result, remove it.
905
902
906
- // event, addr_type, addr, connectable , rssi
903
+ // event, addr_type, addr, adv_type , rssi
907
904
int n = 2 + 1 + 6 + 1 + 1 ;
908
905
for (int i = 0 ; i < n ; ++ i ) {
909
906
ringbuf_get (& o -> ringbuf );
@@ -963,7 +960,7 @@ void mp_bluetooth_gap_on_scan_complete(void) {
963
960
MICROPY_PY_BLUETOOTH_EXIT
96
10000
4
961
}
965
962
966
- void mp_bluetooth_gap_on_scan_result (uint8_t addr_type , const uint8_t * addr , bool connectable , const int8_t rssi , const uint8_t * data , size_t data_len ) {
963
+ void mp_bluetooth_gap_on_scan_result (uint8_t addr_type , const uint8_t * addr , uint8_t adv_type , const int8_t rssi , const uint8_t * data , size_t data_len ) {
967
964
MICROPY_PY_BLUETOOTH_ENTER
968
965
mp_obj_bluetooth_ble_t * o = MP_OBJ_TO_PTR (MP_STATE_VM (bluetooth ));
969
966
data_len = MIN (o -> irq_data_data_alloc , data_len );
@@ -972,7 +969,8 @@ void mp_bluetooth_gap_on_scan_result(uint8_t addr_type, const uint8_t *addr, boo
972
969
for (int i = 0 ; i < 6 ; ++ i ) {
973
970
ringbuf_put (& o -> ringbuf , addr [i ]);
974
971
}
975
- ringbuf_put (& o -> ringbuf , connectable ? 1 : 0 );
972
+ // The adv_type will get extracted as an int8_t but that's ok because valid values are 0x00-0x04.
973
+ ringbuf_put (& o -> ringbuf , adv_type );
976
974
// Note conversion of int8_t rssi to uint8_t. Must un-convert on the way out.
977
975
ringbuf_put (& o -> ringbuf , (uint8_t )rssi );
978
976
ringbuf_put (& o -> ringbuf , data_len );
0 commit comments