@@ -267,26 +267,29 @@ bool ble_drv_uuid_add_vs(uint8_t * p_uuid, uint8_t * idx) {
267267 return true;
268268}
269269
270- bool ble_drv_service_add (ubluepy_service_obj_t * p_service_obj ) {
270+ void ble_drv_service_add (bleio_service_obj_t * service ) {
271271 SD_TEST_OR_ENABLE ();
272272
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+ };
276277
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 ;
279280 }
280281
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 ;
287285 }
288286
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+ }
290293}
291294
292295bool ble_drv_characteristic_add (bleio_characteristic_obj_t * characteristic ) {
@@ -320,7 +323,7 @@ bool ble_drv_characteristic_add(bleio_characteristic_obj_t *characteristic) {
320323 char_md .p_cccd_md = NULL ;
321324 }
322325
323- uuid .type = BLE_UUID_TYPE_BLE ;
326+ uuid .type = BLE_UUID_TYPE_BLE ;
324327 if (characteristic -> uuid -> type == UUID_TYPE_128BIT )
325328 uuid .type = characteristic -> uuid -> uuid_vs_idx ;
326329
@@ -416,12 +419,12 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
416419 bool type_128bit_present = false;
417420
418421 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 ) {
421424 type_16bit_present = true;
422425 }
423426
424- if (p_service -> p_uuid -> type == UUID_TYPE_128BIT ) {
427+ if (p_service -> uuid -> type == UUID_TYPE_128BIT ) {
425428 type_128bit_present = true;
426429 }
427430 }
@@ -439,12 +442,12 @@ bool ble_drv_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
439442 uint8_t encoded_size = 0 ;
440443
441444 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 ];
443446
444447 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 ;
448451 // calculate total size of uuids
449452 if (sd_ble_uuid_encode (& uuid , & encoded_size , NULL ) != 0 ) {
450453 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) {
488491 uint8_t encoded_size = 0 ;
489492
490493 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 ];
492495
493496 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 ;
497500
498501 // calculate total size of uuids
499502 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
640643}
641644
642645void 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 ;
645648 ble_gatts_value_t gatts_value ;
646649
647650 memset (& gatts_value , 0 , sizeof (gatts_value ));
@@ -659,8 +662,8 @@ void ble_drv_attr_s_write(bleio_characteristic_obj_t *characteristic, mp_buffer_
659662}
660663
661664void 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 ;
664667 ble_gatts_hvx_params_t hvx_params ;
665668 uint16_t hvx_len = bufinfo -> len ;
666669
@@ -706,11 +709,13 @@ void ble_drv_adv_report_handler_set(bleio_scanner_obj_t *self, ble_drv_adv_evt_c
706709
707710
708711void 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+
710715 mp_gattc_char_data_observer = characteristic ;
711716 gattc_char_data_handle = cb ;
712717
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 ,
714719 characteristic -> handle ,
715720 0 );
716721 if (err_code != 0 ) {
@@ -724,8 +729,8 @@ void ble_drv_attr_c_read(bleio_characteristic_obj_t *characteristic, ble_drv_gat
724729}
725730
726731void 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 ;
729734
730735 ble_gattc_write_params_t write_params ;
731736 write_params .write_op = BLE_GATT_OP_WRITE_REQ ;
0 commit comments