nrf5/sdk: Updating softdevice driver with function to set advertisment data and start advertisment. Does not apply device name yet. Work in progress.
This commit is contained in:
parent
8cc0eb23d9
commit
1a3ae62fd1
|
@ -299,3 +299,57 @@ bool sd_characteristic_add(ubluepy_characteristic_obj_t * p_char_obj) {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sd_advertise_data(ubluepy_advertise_data_t * p_adv_params) {
|
||||||
|
SD_TEST_OR_ENABLE();
|
||||||
|
|
||||||
|
uint8_t byte_pos = 0;
|
||||||
|
|
||||||
|
uint8_t adv_data[BLE_GAP_ADV_MAX_SIZE];
|
||||||
|
|
||||||
|
if (p_adv_params->device_name_len > 0) {
|
||||||
|
ble_gap_conn_sec_mode_t sec_mode;
|
||||||
|
|
||||||
|
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
|
||||||
|
|
||||||
|
if (sd_ble_gap_device_name_set(&sec_mode,
|
||||||
|
p_adv_params->p_device_name,
|
||||||
|
p_adv_params->device_name_len) != 0) {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
|
||||||
|
"Can not apply device name in the stack."));
|
||||||
|
}
|
||||||
|
|
||||||
|
adv_data[byte_pos] = (BLE_ADV_AD_TYPE_FIELD_SIZE + p_adv_params->device_name_len);
|
||||||
|
byte_pos += BLE_ADV_AD_TYPE_FIELD_SIZE;
|
||||||
|
adv_data[byte_pos] = BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME;
|
||||||
|
// memcpy(&adv_data[byte_pos], p_adv_params->p_device_name, p_adv_params->device_name_len);
|
||||||
|
// increment position counter to see if it fits, and in case more content should
|
||||||
|
// follow in this adv packet.
|
||||||
|
byte_pos += BLE_ADV_AD_TYPE_FIELD_SIZE;
|
||||||
|
byte_pos += p_adv_params->device_name_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
// scan response data not set
|
||||||
|
if (sd_ble_gap_adv_data_set(adv_data, byte_pos, NULL, 0) != 0) {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
|
||||||
|
"Can not apply advertisment data."));
|
||||||
|
}
|
||||||
|
printf("Set Adv data size: " UINT_FMT "\n", byte_pos);
|
||||||
|
|
||||||
|
ble_gap_adv_params_t m_adv_params;
|
||||||
|
|
||||||
|
// initialize advertising params
|
||||||
|
memset(&m_adv_params, 0, sizeof(m_adv_params));
|
||||||
|
m_adv_params.type = BLE_GAP_ADV_TYPE_ADV_NONCONN_IND;
|
||||||
|
m_adv_params.p_peer_addr = NULL; // Undirected advertisement.
|
||||||
|
m_adv_params.fp = BLE_GAP_ADV_FP_ANY;
|
||||||
|
m_adv_params.interval = NON_CONNECTABLE_ADV_INTERVAL;
|
||||||
|
m_adv_params.timeout = APP_CFG_NON_CONN_ADV_TIMEOUT;
|
||||||
|
|
||||||
|
if (sd_ble_gap_adv_start(&m_adv_params) != 0) {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OSError,
|
||||||
|
"Can not start advertisment."));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -48,4 +48,5 @@ bool sd_service_add(ubluepy_service_obj_t * p_service_obj);
|
||||||
|
|
||||||
bool sd_characteristic_add(ubluepy_characteristic_obj_t * p_char_obj);
|
bool sd_characteristic_add(ubluepy_characteristic_obj_t * p_char_obj);
|
||||||
|
|
||||||
|
bool sd_advertise_data(ubluepy_advertise_data_t * p_adv_params);
|
||||||
#endif // BLUETOOTH_LE_DRIVER_H__
|
#endif // BLUETOOTH_LE_DRIVER_H__
|
||||||
|
|
Loading…
Reference in New Issue