@@ -267,26 +267,29 @@ bool ble_drv_uuid_add_vs(uint8_t * p_uuid, uint8_t * idx) {
267
267
return true;
268
268
}
269
269
270
- bool ble_drv_service_add (ubluepy_service_obj_t * p_service_obj ) {
270
+ void ble_drv_service_add (bleio_service_obj_t * service ) {
271
271
SD_TEST_OR_ENABLE ();
272
272
273
- ble_uuid_t uuid ;
274
- uuid .type = BLE_UUID_TYPE_BLE ;
275
- uuid .uuid = p_service_obj -> p_uuid -> value [0 ] | (p_service_obj -> p_uuid -> value [1 ] << 8 );
273
+ ble_uuid_t uuid = {
274
+ .type = BLE_UUID_TYPE_BLE ,
275
+ .uuid = service -> uuid -> value [0 ] | (service -> uuid -> value [1 ] << 8 )
276
+ };
276
277
277
- if (p_service_obj -> p_uuid -> type == UUID_TYPE_128BIT ) {
278
- uuid .type = p_service_obj -> p_uuid -> uuid_vs_idx ;
278
+ if (service -> uuid -> type == UUID_TYPE_128BIT ) {
279
+ uuid .type = service -> uuid -> uuid_vs_idx ;
279
280
}
280
281
281
- uint32_t err_code = sd_ble_gatts_service_add (p_service_obj -> type ,
282
- & uuid ,
283
- & p_service_obj -> handle );
284
- if (err_code != 0 ) {
285
- nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError ,
286
- translate ("Can not add Service. status: 0x%08lX" ), err_code ));
282
+ uint8_t service_type = BLE_GATTS_SRVC_TYPE_PRIMARY ;
283
+ if (service -> is_secondary ) {
284
+ service_type = BLE_GATTS_SRVC_TYPE_SECONDARY ;
287
285
}
288
286
289
- return true;
287
+ if (sd_ble_gatts_service_add (service_type ,
288
+ & uuid ,
289
+ & service -> handle ) != 0 ) {
290
+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError ,
291
+ translate ("Can not add Service." )));
292
+ }
290
293
}
291
294
292
295
bool ble_drv_characteristic_add (bleio_characteristic_obj_t * characteristic ) {
@@ -320,7 +323,7 @@ bool ble_drv_characteristic_add(bleio_characteristic_obj_t *characteristic) {
320
323
char_md .p_cccd_md = NULL ;
321
324
}
322
325
323
- uuid .type = BLE_UUID_TYPE_BLE ;
326
+ uuid .type = BLE_UUID_TYPE_BLE ;
324
327
if (characteristic -> uuid -> type == UUID_TYPE_128BIT )
325
328
uuid .type = characteristic -> uuid -> uuid_vs_idx ;
326
329
@@ -416,12 +419,12 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
416
419
bool type_128bit_present = false;
417
420
418
421
for (uint8_t i = 0 ; i < p_adv_params -> num_of_services ; i ++ ) {
419
- ubluepy_service_obj_t * p_service = (ubluepy_service_obj_t * )p_adv_params -> p_services [i ];
420
- if (p_service -> p_uuid -> type == UUID_TYPE_16BIT ) {
422
+ bleio_service_obj_t * p_service = (bleio_service_obj_t * )p_adv_params -> p_services [i ];
423
+ if (p_service -> uuid -> type == UUID_TYPE_16BIT ) {
421
424
type_16bit_present = true;
422
425
}
423
426
424
- if (p_service -> p_uuid -> type == UUID_TYPE_128BIT ) {
427
+ if (p_service -> uuid -> type == UUID_TYPE_128BIT ) {
425
428
type_128bit_present = true;
426
429
}
427
430
}
@@ -439,12 +442,12 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
439
442
uint8_t encoded_size = 0 ;
440
443
441
444
for (uint8_t i = 0 ; i < p_adv_params -> num_of_services ; i ++ ) {
442
- ubluepy_service_obj_t * p_service = (ubluepy_service_obj_t * )p_adv_params -> p_services [i ];
445
+ bleio_service_obj_t * p_service = (bleio_service_obj_t * )p_adv_params -> p_services [i ];
443
446
444
447
ble_uuid_t uuid ;
445
- uuid .type = p_service -> p_uuid -> type ;
446
- uuid .uuid = p_service -> p_uuid -> value [0 ];
447
- uuid .uuid += p_service -> p_uuid -> value [1 ] << 8 ;
448
+ uuid .type = p_service -> uuid -> type ;
449
+ uuid .uuid = p_service -> uuid -> value [0 ];
450
+ uuid .uuid += p_service -> uuid -> value [1 ] << 8 ;
448
451
// calculate total size of uuids
449
452
if (sd_ble_uuid_encode (& uuid , & encoded_size , NULL ) != 0 ) {
450
453
nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError ,
@@ -488,12 +491,12 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
488
491
uint8_t encoded_size = 0 ;
489
492
490
493
for (uint8_t i = 0 ; i < p_adv_params -> num_of_services ; i ++ ) {
491
- ubluepy_service_obj_t * p_service = (ubluepy_service_obj_t * )p_adv_params -> p_services [i ];
494
+ bleio_service_obj_t * p_service = (bleio_service_obj_t * )p_adv_params -> p_services [i ];
492
495
493
496
ble_uuid_t uuid ;
494
- uuid .type = p_service -> p_uuid -> uuid_vs_idx ;
495
- uuid .uuid = p_service -> p_uuid -> value [0 ];
496
- uuid .uuid += p_service -> p_uuid -> value [1 ] << 8 ;
497
+ uuid .type = p_service -> uuid -> uuid_vs_idx ;
498
+ uuid .uuid = p_service -> uuid -> value [0 ];
499
+ uuid .uuid += p_service -> uuid -> value [1 ] << 8 ;
497
500
498
501
// calculate total size of uuids
499
502
if (sd_ble_uuid_encode (& uuid , & encoded_size , NULL ) != 0 ) {
@@ -640,8 +643,8 @@ void ble_drv_attr_s_read(uint16_t conn_handle, uint16_t handle, uint16_t len, ui
640
643
}
641
644
642
645
void ble_drv_attr_s_write (bleio_characteristic_obj_t * characteristic , mp_buffer_info_t * bufinfo ) {
643
- ubluepy_service_obj_t * service = MP_OBJ_TO_PTR (characteristic -> service );
644
- uint16_t conn_handle = service -> p_periph -> conn_handle ;
646
+ ubluepy_peripheral_obj_t * peripheral = MP_OBJ_TO_PTR (characteristic -> service -> periph );
647
+ uint16_t conn_handle = peripheral -> conn_handle ;
645
648
ble_gatts_value_t gatts_value ;
646
649
647
650
memset (& gatts_value , 0 , sizeof (gatts_value ));
@@ -659,8 +662,8 @@ void ble_drv_attr_s_write(bleio_characteristic_obj_t *characteristic, mp_buffer_
659
662
}
660
663
661
664
void ble_drv_attr_s_notify (bleio_characteristic_obj_t * characteristic , mp_buffer_info_t * bufinfo ) {
662
- ubluepy_service_obj_t * service = MP_OBJ_TO_PTR (characteristic -> service );
663
- uint16_t conn_handle = service -> p_periph -> conn_handle ;
665
+ ubluepy_peripheral_obj_t * peripheral = MP_OBJ_TO_PTR (characteristic -> service -> periph );
666
+ uint16_t conn_handle = peripheral -> conn_handle ;
664
667
ble_gatts_hvx_params_t hvx_params ;
665
668
uint16_t hvx_len = bufinfo -> len ;
666
669
@@ -706,11 +709,13 @@ void ble_drv_adv_report_handler_set(bleio_scanner_obj_t *self, ble_drv_adv_evt_c
706
709
707
710
708
711
void ble_drv_attr_c_read (bleio_characteristic_obj_t * characteristic , ble_drv_gattc_char_data_callback_t cb ) {
709
- ubluepy_service_obj_t * service = MP_OBJ_TO_PTR (characteristic -> service );
712
+ bleio_service_obj_t * service = characteristic -> service ;
713
+ ubluepy_peripheral_obj_t * peripheral = MP_OBJ_TO_PTR (service -> periph );
714
+
710
715
mp_gattc_char_data_observer = characteristic ;
711
716
gattc_char_data_handle = cb ;
712
717
713
- const uint32_t err_code = sd_ble_gattc_read (service -> p_periph -> conn_handle ,
718
+ const uint32_t err_code = sd_ble_gattc_read (peripheral -> conn_handle ,
714
719
characteristic -> handle ,
715
720
0 );
716
721
if (err_code != 0 ) {
@@ -724,8 +729,8 @@ void ble_drv_attr_c_read(bleio_characteristic_obj_t *characteristic, ble_drv_gat
724
729
}
725
730
726
731
void ble_drv_attr_c_write (bleio_characteristic_obj_t * characteristic , mp_buffer_info_t * bufinfo ) {
727
- ubluepy_service_obj_t * service = MP_OBJ_TO_PTR (characteristic -> service );
728
- uint16_t conn_handle = service -> p_periph -> conn_handle ;
732
+ ubluepy_peripheral_obj_t * peripheral = MP_OBJ_TO_PTR (characteristic -> service -> periph );
733
+ uint16_t conn_handle = peripheral -> conn_handle ;
729
734
730
735
ble_gattc_write_params_t write_params ;
731
736
write_params .write_op = BLE_GATT_OP_WRITE_REQ ;
0 commit comments