3838
3939static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET ;
4040
41- STATIC void check_data_fit (size_t pos , size_t data_len ) {
42- if (pos + data_len >= BLE_GAP_ADV_SET_DATA_SIZE_MAX ) {
43- mp_raise_ValueError (translate ("Data too large for advertisement packet" ));
44- }
45- }
46-
4741void common_hal_bleio_broadcaster_construct (bleio_broadcaster_obj_t * self , mp_float_t interval ) {
4842 common_hal_bleio_adapter_set_enabled (true); // TODO -- Do this somewhere else maybe bleio __init__
4943 const mp_float_t min = BLE_GAP_ADV_INTERVAL_MIN * ADV_INTERVAL_UNIT_FLOAT_SECS ;
@@ -58,25 +52,16 @@ void common_hal_bleio_broadcaster_construct(bleio_broadcaster_obj_t *self, mp_fl
5852
5953
6054void common_hal_bleio_broadcaster_start_advertising (bleio_broadcaster_obj_t * self , mp_buffer_info_t * data ) {
61- size_t adv_data_pos = 0 ;
6255 uint32_t err_code ;
6356
64- // Build up advertising packet.
65- check_data_fit (adv_data_pos , 1 + 1 + 1 );
66- self -> adv_data [adv_data_pos ++ ] = 2 ;
67- self -> adv_data [adv_data_pos ++ ] = BLE_GAP_AD_TYPE_FLAGS ;
68- self -> adv_data [adv_data_pos ++ ] = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE ;
69-
70- // Data is always send as manufacturer-specific data
71- check_data_fit (adv_data_pos , 1 + 1 + data -> len );
72- self -> adv_data [adv_data_pos ++ ] = 1 + data -> len ;
73- self -> adv_data [adv_data_pos ++ ] = BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA ;
74- memcpy (& (self -> adv_data [adv_data_pos ]), data -> buf , data -> len );
75- adv_data_pos += data -> len ;
57+ if (data -> len >= BLE_GAP_ADV_SET_DATA_SIZE_MAX ) {
58+ mp_raise_ValueError (translate ("Data too large for advertisement packet" ));
59+ }
60+ memcpy (self -> adv_data , data -> buf , data -> len );
7661
7762 ble_gap_adv_params_t m_adv_params = {
7863 .interval = (uint32_t ) (self -> interval / ADV_INTERVAL_UNIT_FLOAT_SECS ),
79- .properties .type = BLE_GAP_ADV_TYPE_NONCONNECTABLE_NONSCANNABLE_UNDIRECTED ,
64+ .properties .type = BLE_GAP_ADV_TYPE_NONCONNECTABLE_SCANNABLE_UNDIRECTED ,
8065 .duration = BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED ,
8166 .filter_policy = BLE_GAP_ADV_FP_ANY ,
8267 .primary_phy = BLE_GAP_PHY_1MBPS ,
@@ -86,7 +71,7 @@ void common_hal_bleio_broadcaster_start_advertising(bleio_broadcaster_obj_t *sel
8671
8772 const ble_gap_adv_data_t ble_gap_adv_data = {
8873 .adv_data .p_data = self -> adv_data ,
89- .adv_data .len = adv_data_pos ,
74+ .adv_data .len = data -> len ,
9075 };
9176
9277 err_code = sd_ble_gap_adv_set_configure (& m_adv_handle , & ble_gap_adv_data , & m_adv_params );
0 commit comments