Make advertising data buffers long-lived
This commit is contained in:
parent
613e12f99f
commit
1905d90eaa
@ -177,9 +177,13 @@ void common_hal_bleio_peripheral_start_advertising(bleio_peripheral_obj_t *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
check_data_fit(advertising_data_bufinfo->len);
|
check_data_fit(advertising_data_bufinfo->len);
|
||||||
|
// The advertising data buffers must not move, because the SoftDevice depends on them.
|
||||||
|
// So make them long-lived.
|
||||||
|
self->advertising_data = (uint8_t *) gc_alloc(BLE_GAP_ADV_SET_DATA_SIZE_MAX * sizeof(uint8_t), false, true);
|
||||||
memcpy(self->advertising_data, advertising_data_bufinfo->buf, advertising_data_bufinfo->len);
|
memcpy(self->advertising_data, advertising_data_bufinfo->buf, advertising_data_bufinfo->len);
|
||||||
|
|
||||||
check_data_fit(scan_response_data_bufinfo->len);
|
check_data_fit(scan_response_data_bufinfo->len);
|
||||||
|
self->scan_response_data = (uint8_t *) gc_alloc(BLE_GAP_ADV_SET_DATA_SIZE_MAX * sizeof(uint8_t), false, true);
|
||||||
memcpy(self->scan_response_data, scan_response_data_bufinfo->buf, scan_response_data_bufinfo->len);
|
memcpy(self->scan_response_data, scan_response_data_bufinfo->buf, scan_response_data_bufinfo->len);
|
||||||
|
|
||||||
|
|
||||||
@ -214,7 +218,6 @@ void common_hal_bleio_peripheral_start_advertising(bleio_peripheral_obj_t *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_bleio_peripheral_stop_advertising(bleio_peripheral_obj_t *self) {
|
void common_hal_bleio_peripheral_stop_advertising(bleio_peripheral_obj_t *self) {
|
||||||
|
|
||||||
if (self->adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET)
|
if (self->adv_handle == BLE_GAP_ADV_SET_HANDLE_NOT_SET)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ typedef struct {
|
|||||||
// The advertising data and scan response buffers are held by us, not by the SD, so we must
|
// The advertising data and scan response buffers are held by us, not by the SD, so we must
|
||||||
// maintain them and not change it. If we need to change the contents during advertising,
|
// maintain them and not change it. If we need to change the contents during advertising,
|
||||||
// there are tricks to get the SD to notice (see DevZone - TBS).
|
// there are tricks to get the SD to notice (see DevZone - TBS).
|
||||||
uint8_t advertising_data[BLE_GAP_ADV_SET_DATA_SIZE_MAX];
|
uint8_t* advertising_data;
|
||||||
uint8_t scan_response_data[BLE_GAP_ADV_SET_DATA_SIZE_MAX];
|
uint8_t* scan_response_data;
|
||||||
uint8_t adv_handle;
|
uint8_t adv_handle;
|
||||||
|
|
||||||
} bleio_peripheral_obj_t;
|
} bleio_peripheral_obj_t;
|
||||||
|
Loading…
Reference in New Issue
Block a user