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 Reply Children
  • Hi Simonr 

    The parameters p_uuid is 16bit UUID , but the characteristic I want to read is 128bit UUID . And it is totally different from the Primary Service UUID.

    How do I use sd_ble_gattc_char_value_by_uuid_read() function? Can you give me a example?

    This is my code , but I can read no data.

    void getCHAR(int handle)
    {
        ble_gattc_handle_range_t handle_range;
        ret_code_t            err_code;
        ble_uuid_t         uuid;
        uuid.uuid=0xc439;               
        uuid.type=2;
        
        handle_range.start_handle=1;
        handle_range.end_handle=50;
        err_code=sd_ble_gattc_char_value_by_uuid_read(handle,&uuid,&handle_range);
        APP_ERROR_CHECK(err_code);
    }

    In the ble_evt_handler()

    case BLE_GAP_EVT_CONNECTED:
    {
        ble_gap_evt_adv_report_t const * p_adv_report = &p_gap_evt->params.adv_report;
        NRF_LOG_INFO("Connected to target");
    
        getCHAR(p_ble_evt->evt.gap_evt.conn_handle);
    }
    break;
    
    case BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP:
    {
        int i=0;
        uint8_t data[20][100];
        static int cnt=0;
        
        memset(data,0,sizeof(data));
        
        for(i=0;i<p_ble_evt->evt.gattc_evt.params.char_val_by_uuid_read_rsp.count;i++)
        {
            memcpy(data[i],p_ble_evt->evt.gattc_evt.params.char_val_by_uuid_read_rsp.handle_value,p_ble_evt->evt.gattc_evt.params.char_val_by_uuid_read_rsp.value_len);
        }                 
    }
    break;

    Look forward to your reply

    Thanks

Related