|
38 | 38 | #define IE_HEADER_ID_MASK 0x7f80
|
39 | 39 | #define WH_IE_ID 0x2a
|
40 | 40 | #define WH_SUB_ID_UTT 1
|
| 41 | +#define WH_SUB_ID_BT 2 |
41 | 42 |
|
42 | 43 | struct ws_ie_t {
|
43 | 44 | uint8_t *content_ptr;
|
@@ -156,6 +157,19 @@ static uint32_t fhss_ws_calculate_ufsi(fhss_structure_t *fhss_structure, uint32_
|
156 | 157 | return own_floor((float)(ms_since_seq_start * DEF_2E24) / (seq_length*dwell_time));
|
157 | 158 | }
|
158 | 159 |
|
| 160 | +static uint32_t fhss_ws_calculate_broadcast_interval_offset(fhss_structure_t *fhss_structure, uint32_t tx_time) |
| 161 | +{ |
| 162 | + uint8_t dwell_time = fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval; |
| 163 | + uint32_t broadcast_interval = fhss_structure->ws->fhss_configuration.fhss_broadcast_interval; |
| 164 | + |
| 165 | + uint32_t remaining_time = (fhss_structure->platform_functions.fhss_get_remaining_slots(fhss_broadcast_handler, fhss_structure->fhss_api) / 1000); |
| 166 | + if (fhss_structure->ws->is_on_bc_channel == true) { |
| 167 | + remaining_time += (broadcast_interval - dwell_time); |
| 168 | + } |
| 169 | + uint32_t time_to_tx = (tx_time - fhss_structure->fhss_api->read_timestamp(fhss_structure->fhss_api)) / 1000; |
| 170 | + return (broadcast_interval-remaining_time) + time_to_tx; |
| 171 | +} |
| 172 | + |
159 | 173 | static uint16_t fhss_ws_calculate_destination_slot(fhss_ws_neighbor_timing_info_t *neighbor_timing_info, uint32_t tx_time)
|
160 | 174 | {
|
161 | 175 | uint_fast24_t ufsi = neighbor_timing_info->uc_timing_info.ufsi;
|
@@ -320,6 +334,11 @@ static int16_t fhss_ws_write_synch_info_callback(const fhss_api_t *api, uint8_t
|
320 | 334 | uint32_t ufsi = fhss_ws_calculate_ufsi(fhss_structure, tx_time);
|
321 | 335 | common_write_24_bit_inverse(ufsi, header_ie.content_ptr+1);
|
322 | 336 | }
|
| 337 | + if (fhss_ws_ie_header_discover(ptr, length, &header_ie, WH_SUB_ID_BT)) { |
| 338 | + uint32_t broadcast_interval_offset = fhss_ws_calculate_broadcast_interval_offset(fhss_structure, tx_time); |
| 339 | + common_write_16_bit_inverse(fhss_structure->ws->bc_slot, header_ie.content_ptr); |
| 340 | + common_write_24_bit_inverse(broadcast_interval_offset, header_ie.content_ptr+2); |
| 341 | + } |
323 | 342 | return 0;
|
324 | 343 | }
|
325 | 344 |
|
|
0 commit comments