Skip to content

Commit 659a1c4

Browse files
author
Jarkko Paso
committed
FHSS: Write BT-IE
1 parent 64f31b1 commit 659a1c4

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#define IE_HEADER_ID_MASK 0x7f80
3939
#define WH_IE_ID 0x2a
4040
#define WH_SUB_ID_UTT 1
41+
#define WH_SUB_ID_BT 2
4142

4243
struct ws_ie_t {
4344
uint8_t *content_ptr;
@@ -156,6 +157,19 @@ static uint32_t fhss_ws_calculate_ufsi(fhss_structure_t *fhss_structure, uint32_
156157
return own_floor((float)(ms_since_seq_start * DEF_2E24) / (seq_length*dwell_time));
157158
}
158159

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+
159173
static uint16_t fhss_ws_calculate_destination_slot(fhss_ws_neighbor_timing_info_t *neighbor_timing_info, uint32_t tx_time)
160174
{
161175
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
320334
uint32_t ufsi = fhss_ws_calculate_ufsi(fhss_structure, tx_time);
321335
common_write_24_bit_inverse(ufsi, header_ie.content_ptr+1);
322336
}
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+
}
323342
return 0;
324343
}
325344

0 commit comments

Comments
 (0)