This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

When 128bit characteristic UUID is different form 128bit service UUID,how to discovery it?

I have the same problem as how to discovery 128bit characteristic UUID which is totally different form 128bit service UUID,the uuid in this question is the same with me,but I can not find solution .

I modified the ble_nus_c_init()  like this:

#define BASE_UUID                   {{0xfb,0x34,0x9b,0x5f,0x80,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00}}
#define BASE_UUID_FEE9              {{0xfb,0x34,0x9b,0x5f,0x80,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0xe9,0xfe,0x00,0x00}}
#define BASE_UUID_CHAR_RX           {{0x00,0x96,0x12,0x16,0x54,0x92,0x75,0xb5,0xa2,0x45,0xfd,0xab,0x39,0xc4,0x4b,0xd4}}
#define BASE_UUID_CHAR_TX           {{0x01,0x96,0x12,0x16,0x54,0x92,0x75,0xb5,0xa2,0x45,0xfd,0xab,0x39,0xc4,0x4b,0xd4}}


uint32_t ble_nus_c_init(ble_nus_c_t * p_ble_nus_c, ble_nus_c_init_t * p_ble_nus_c_init)
{
    uint32_t      err_code;
    ble_uuid_t    uart_uuid,ble_uuid1,ble_uuid2;
    ble_uuid128_t nus_base_uuid =BASE_UUID;         //NUS_BASE_UUID;
    ble_uuid128_t base_uuid1 = BASE_UUID_CHAR_RX;
    ble_uuid128_t base_uuid2 = BASE_UUID_CHAR_TX;
    
    VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
    VERIFY_PARAM_NOT_NULL(p_ble_nus_c_init);
    
    err_code = sd_ble_uuid_vs_add(&nus_base_uuid, &p_ble_nus_c->uuid_type);
    VERIFY_SUCCESS(err_code);

    uart_uuid.type = p_ble_nus_c->uuid_type;
    uart_uuid.uuid = 0xfee9;            //BLE_UUID_NUS_SERVICE;

    p_ble_nus_c->conn_handle           = BLE_CONN_HANDLE_INVALID;
    p_ble_nus_c->evt_handler           = p_ble_nus_c_init->evt_handler;
    p_ble_nus_c->handles.nus_tx_handle = BLE_GATT_HANDLE_INVALID;
    p_ble_nus_c->handles.nus_rx_handle = BLE_GATT_HANDLE_INVALID;

    ble_db_discovery_evt_register(&uart_uuid);
    
    ble_uuid1.uuid = 0;    
    err_code = sd_ble_uuid_vs_add(&base_uuid1, &ble_uuid1.type);
    VERIFY_SUCCESS(err_code);

    ble_uuid2.uuid = 0;    
    err_code = sd_ble_uuid_vs_add(&base_uuid2, &ble_uuid2.type);
    VERIFY_SUCCESS(err_code);

    err_code=ble_db_discovery_evt_register(&ble_uuid1);
    err_code=ble_db_discovery_evt_register(&ble_uuid2);
    return err_code;
}

And I set NRF_SDH_BLE_VS_UUID_COUNT to 4 , modified the ram start and size.

I can't receive the event BLE_DB_DISCOVERY_COMPLETE, but  receive event  BLE_DB_DISCOVERY_ERROR and BLE_DB_DISCOVERY_SRV_NOT_FOUND

When I change 0xFEE9 to 0xFEE8 I can receive the event BLE_DB_DISCOVERY_COMPLETE,but characteristic.uuid.uuid = 0x00 I don't know why.

How to discovery 128bit characteristic UUID which is totally different form 128bit service UUID?

Can someone help me?

NRF52832   SDK14.2  code base "on ble_app_uart_c"   pca10040  s132

Thanks.

Parents
  • Hi Holmes

    If this is a known UUID, you should add it to your list of vendor specific UUID's prior to the service discovery. You will then get the UUID back with the UUID type. If you don't know the vendor specific UUID, you should use the sd_ble_gattc_attr_info_discover function to get the UUID.

    Best regards,

    Simon

  • Hi Simonr

    Thank you for your reply.

    I tested this function,But I am not sure if my usage is correct.

    I used sd_ble_gattc_attr_info_discover  to discover service like this:

    void getUUID(int handle)
    {
        ble_gattc_handle_range_t handle_range;
        ret_code_t            err_code;
        
        handle_range.start_handle=0;
        handle_range.end_handle=0xffff;
        err_code=sd_ble_gattc_attr_info_discover(handle,&handle_range);
        APP_ERROR_CHECK(err_code);
    }

    I run this function in BLE_GAP_EVT_CONNECTED event.

    And I can receive BLE_GATTC_EVT_ATTR_INFO_DISC_RSP event once,in the event I can read p_ble_evt->evt.gattc_evt.params.attr_info_disc_rsp.count=0 , p_ble_evt->evt.gattc_evt.gatt_status=0x010A. is that right?

    You say "If this is a known UUID, you should add it to your list of vendor specific UUID's prior to the service discovery."Does it mean that use sd_ble_uuid_vs_add() to add 128bit service UUID and 128bit characteristic UUID ?

    Thanks

Reply
  • Hi Simonr

    Thank you for your reply.

    I tested this function,But I am not sure if my usage is correct.

    I used sd_ble_gattc_attr_info_discover  to discover service like this:

    void getUUID(int handle)
    {
        ble_gattc_handle_range_t handle_range;
        ret_code_t            err_code;
        
        handle_range.start_handle=0;
        handle_range.end_handle=0xffff;
        err_code=sd_ble_gattc_attr_info_discover(handle,&handle_range);
        APP_ERROR_CHECK(err_code);
    }

    I run this function in BLE_GAP_EVT_CONNECTED event.

    And I can receive BLE_GATTC_EVT_ATTR_INFO_DISC_RSP event once,in the event I can read p_ble_evt->evt.gattc_evt.params.attr_info_disc_rsp.count=0 , p_ble_evt->evt.gattc_evt.gatt_status=0x010A. is that right?

    You say "If this is a known UUID, you should add it to your list of vendor specific UUID's prior to the service discovery."Does it mean that use sd_ble_uuid_vs_add() to add 128bit service UUID and 128bit characteristic UUID ?

    Thanks

Children
No Data
Related