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

Advertising data

hi. I refer at the example find here link text.

i want to transmit with Advertising, as the temperature is transmitted in the example, data from some sensors . But in the example i can transmit only a uint8_t data.

    uint8_t battery_data = battery_level_get();
uint32_t temperature_data = temperature_data_get();

service_data[0].service_uuid = BLE_UUID_BATTERY_SERVICE;
service_data[0].data.size    = sizeof(battery_data);
service_data[0].data.p_data  = &battery_data;

service_data[1].service_uuid = BLE_UUID_HEALTH_THERMOMETER_SERVICE;
service_data[1].data.size    = sizeof(temperature_data);
service_data[1].data.p_data  = (uint8_t *) &temperature_data;

I want to transmit a float variable or uint32_t or uint16_t.

Is it possible?

How can i do this?

Thank you for your attention

Parents
  • Thank you for your reply.

    if I have more sensors can I create custom services? for example instead of BLE_UUID_HEALTH_THERMOMETER_SERVICE

    BLE_UUID_AMBIENT_LIGHT_SERVICE
    

    or BLE_UUID_X_MOTION_SERVICE?

    how can i do this?

    and how many service can i put in the advartising packet?

    can i make something like this?

    ble_advdata_t advdata;
    uint8_t       flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED;
    
    ble_advdata_service_data_t service_data[6];
    
    
    service_data[5].service_uuid = BLE_UUID_X_MOTION_SERVICE;
    service_data[5].data.size    = sizeof(X_MOTION);
    service_data[5].data.p_data  = &X_MOTION;
    
    service_data[4].service_uuid = BLE_UUID_Y_MOTION_SERVICE;
    service_data[4].data.size    = sizeof(Y_MOTION);
    service_data[4].data.p_data  = &Y_MOTION;
    
    service_data[3].service_uuid = BLE_UUID_AMBIENT_LIGHT_SERVICE;
    service_data[3].data.size    = sizeof(LUMEN);
    service_data[3].data.p_data  = &LUMEN;
    
    service_data[2].service_uuid = BLE_UUID_BATTERY_SERVICE;
    service_data[2].data.size    = sizeof(battery_data);
    service_data[2].data.p_data  = &battery_data;
    
    service_data[1].service_uuid = BLE_UUID_HEALTH_THERMOMETER_SERVICE;
    service_data[1].data.size    = sizeof(temperature_data);
    service_data[1].data.p_data  = (uint8_t *) &temperature_data;
    
    service_data[0].service_uuid = BLE_UUID_OBJECT_TEMPERATURE;
    service_data[0].data.size    = sizeof(OBJ);
    service_data[0].data.p_data  = (uint8_t *) &OBJ;
    
    
    memset(&advdata, 0, sizeof(advdata));
    
    advdata.name_type            = BLE_ADVDATA_FULL_NAME;
    advdata.include_appearance   = false;
    advdata.flags.size           = sizeof(flags);
    advdata.flags.p_data         = &flags;
    advdata.service_data_count   = 6;
    advdata.p_service_data_array = service_data;
    
    err_code = ble_advdata_set(&advdata, NULL);
    

    thanks for your patience

Reply
  • Thank you for your reply.

    if I have more sensors can I create custom services? for example instead of BLE_UUID_HEALTH_THERMOMETER_SERVICE

    BLE_UUID_AMBIENT_LIGHT_SERVICE
    

    or BLE_UUID_X_MOTION_SERVICE?

    how can i do this?

    and how many service can i put in the advartising packet?

    can i make something like this?

    ble_advdata_t advdata;
    uint8_t       flags = BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED;
    
    ble_advdata_service_data_t service_data[6];
    
    
    service_data[5].service_uuid = BLE_UUID_X_MOTION_SERVICE;
    service_data[5].data.size    = sizeof(X_MOTION);
    service_data[5].data.p_data  = &X_MOTION;
    
    service_data[4].service_uuid = BLE_UUID_Y_MOTION_SERVICE;
    service_data[4].data.size    = sizeof(Y_MOTION);
    service_data[4].data.p_data  = &Y_MOTION;
    
    service_data[3].service_uuid = BLE_UUID_AMBIENT_LIGHT_SERVICE;
    service_data[3].data.size    = sizeof(LUMEN);
    service_data[3].data.p_data  = &LUMEN;
    
    service_data[2].service_uuid = BLE_UUID_BATTERY_SERVICE;
    service_data[2].data.size    = sizeof(battery_data);
    service_data[2].data.p_data  = &battery_data;
    
    service_data[1].service_uuid = BLE_UUID_HEALTH_THERMOMETER_SERVICE;
    service_data[1].data.size    = sizeof(temperature_data);
    service_data[1].data.p_data  = (uint8_t *) &temperature_data;
    
    service_data[0].service_uuid = BLE_UUID_OBJECT_TEMPERATURE;
    service_data[0].data.size    = sizeof(OBJ);
    service_data[0].data.p_data  = (uint8_t *) &OBJ;
    
    
    memset(&advdata, 0, sizeof(advdata));
    
    advdata.name_type            = BLE_ADVDATA_FULL_NAME;
    advdata.include_appearance   = false;
    advdata.flags.size           = sizeof(flags);
    advdata.flags.p_data         = &flags;
    advdata.service_data_count   = 6;
    advdata.p_service_data_array = service_data;
    
    err_code = ble_advdata_set(&advdata, NULL);
    

    thanks for your patience

Children
No Data
Related