Skip to content

Commit 472becb

Browse files
author
Jarkko Paso
committed
FHSS: FHSS configuration to union
1 parent b5f9e01 commit 472becb

File tree

9 files changed

+51
-46
lines changed

9 files changed

+51
-46
lines changed

source/Service_Libs/fhss/fhss.c

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ fhss_structure_t *fhss_enable(fhss_api_t *fhss_api, const fhss_configuration_t *
5656
if (!fhss_struct) {
5757
return NULL;
5858
}
59-
fhss_struct->fhss_configuration = *fhss_configuration;
59+
fhss_struct->fhss_conf.fhss_configuration = *fhss_configuration;
6060
fhss_struct->fhss_stats_ptr = fhss_statistics;
6161
fhss_struct->number_of_channels = channel_count;
6262

6363
// set a invalid id to tasklet_id, so we know that one is not started yet
6464
fhss_struct->beacon_tasklet_id = -1;
6565

6666
// Default synch interval is 240 seconds
67-
if (!fhss_struct->fhss_configuration.fhss_max_synch_interval) {
68-
fhss_struct->fhss_configuration.fhss_max_synch_interval = 240;
67+
if (!fhss_struct->fhss_conf.fhss_configuration.fhss_max_synch_interval) {
68+
fhss_struct->fhss_conf.fhss_configuration.fhss_max_synch_interval = 240;
6969
}
7070
ns_list_init(&fhss_struct->fhss_failed_tx_list);
7171
fhss_struct->own_hop = 0xff;
@@ -259,7 +259,7 @@ static int fhss_update_drift_compensation(fhss_structure_t *fhss_structure)
259259
bc_density = (fhss_structure->number_of_channels / fhss_structure->synch_configuration.fhss_number_of_bc_channels);
260260
channel_dwell_time = ((uint32_t)fhss_structure->synch_configuration.fhss_superframe_length * fhss_structure->synch_configuration.fhss_number_of_superframes) / 1000;
261261
// Calculate last synchronisation period
262-
if (fhss_structure->synch_interval != ((uint32_t)fhss_structure->fhss_configuration.fhss_max_synch_interval * 1000)) {
262+
if (fhss_structure->synch_interval != ((uint32_t)fhss_structure->fhss_conf.fhss_configuration.fhss_max_synch_interval * 1000)) {
263263
// Last period was half of the current started period and max random period is shorter
264264
synch_period = (fhss_structure->synch_interval / 2) + (bc_density * channel_dwell_time) * (fhss_structure->synch_configuration.fhss_number_of_bc_channels / 2);
265265
} else {
@@ -398,14 +398,14 @@ int fhss_sync_with_beacon(fhss_structure_t *fhss_structure,
398398

399399
if (fhss_structure->fhss_state == FHSS_SYNCHRONIZED) {
400400
if (fhss_update_synch_monitor(fhss_structure, payload, superframe_own, remaining_time_own, time_to_next_superframe)) {
401-
fhss_structure->synch_interval = (uint32_t) (fhss_structure->fhss_configuration.fhss_max_synch_interval/BEACON_INTERVAL_INIT_DIVIDER) * 1000;
401+
fhss_structure->synch_interval = (uint32_t) (fhss_structure->fhss_conf.fhss_configuration.fhss_max_synch_interval/BEACON_INTERVAL_INIT_DIVIDER) * 1000;
402402
}
403403
}
404404

405-
if (fhss_structure->synch_interval != ((uint32_t)fhss_structure->fhss_configuration.fhss_max_synch_interval * 1000)) {
405+
if (fhss_structure->synch_interval != ((uint32_t)fhss_structure->fhss_conf.fhss_configuration.fhss_max_synch_interval * 1000)) {
406406
fhss_structure->synch_interval *= 2;
407-
if (fhss_structure->synch_interval > ((uint32_t)fhss_structure->fhss_configuration.fhss_max_synch_interval * 1000)) {
408-
fhss_structure->synch_interval = ((uint32_t)fhss_structure->fhss_configuration.fhss_max_synch_interval * 1000);
407+
if (fhss_structure->synch_interval > ((uint32_t)fhss_structure->fhss_conf.fhss_configuration.fhss_max_synch_interval * 1000)) {
408+
fhss_structure->synch_interval = ((uint32_t)fhss_structure->fhss_conf.fhss_configuration.fhss_max_synch_interval * 1000);
409409
}
410410
beacon_interval_random = (bc_density * channel_dwell_time) * randLIB_get_random_in_range(0, fhss_number_of_bc_channels/2);
411411
} else {
@@ -488,8 +488,8 @@ static bool fhss_check_remaining_tx_time(fhss_structure_t *fhss_structure, uint1
488488
if (fhss_structure->fhss_state == FHSS_UNSYNCHRONIZED) {
489489
retval = true;
490490
} else {
491-
tx_processing_delay = fhss_structure->fhss_configuration.fhss_tuning_parameters.tx_processing_delay;
492-
ack_processing_delay = fhss_structure->fhss_configuration.fhss_tuning_parameters.ack_processing_delay;
491+
tx_processing_delay = fhss_structure->fhss_conf.fhss_configuration.fhss_tuning_parameters.tx_processing_delay;
492+
ack_processing_delay = fhss_structure->fhss_conf.fhss_configuration.fhss_tuning_parameters.ack_processing_delay;
493493
// Calculate needed TX time (us): CCA static period + TX processing delays + transmission time + Ack processing delays + Ack transmission time
494494
needed_tx_time = CCA_FHSS_PERIOD + tx_processing_delay + fhss_get_tx_time(fhss_structure, tx_length, phy_header_length, phy_tail_length)
495495
+ ack_processing_delay + fhss_get_tx_time(fhss_structure, ACK_LENGTH, phy_header_length, phy_tail_length);
@@ -627,31 +627,31 @@ static int fhss_flush_beacon_info_storage(fhss_structure_t *fhss_structure)
627627

628628
static int fhss_reset(fhss_structure_t *fhss_structure)
629629
{
630-
if (fhss_structure) {
631-
fhss_destroy_scramble_table(fhss_structure);
632-
fhss_structure->platform_functions.fhss_timer_stop(fhss_superframe_handler, fhss_structure->fhss_api);
633-
fhss_structure->synch_panid = 0xffff;
634-
fhss_beacon_periodic_stop(fhss_structure);
635-
fhss_structure->current_superframe = 0;
636-
fhss_structure->current_channel_index = 0;
637-
fhss_structure->channel_list_counter = 0;
638-
if (fhss_is_synch_root(fhss_structure) == false) {
639-
fhss_structure->own_hop = 0xff;
640-
}
641-
fhss_structure->tx_allowed = false;
642-
fhss_structure->synch_interval = (uint32_t) (fhss_structure->fhss_configuration.fhss_max_synch_interval/BEACON_INTERVAL_INIT_DIVIDER) * 1000;
643-
fhss_structure->rx_channel = 0;
644-
fhss_structure->beacons_received_timer = 0;
645-
memset(fhss_structure->synch_parent, 0xff, 8);
646-
fhss_structure->send_synch_info_on_next_broadcast_channel = false;
647-
memset(&fhss_structure->synch_configuration, 0, sizeof(fhss_synch_configuration_t));
648-
fhss_structure->synch_infos_sent_counter = 0;
649-
fhss_structure->broadcast_start_superframe = 0;
650-
fhss_failed_list_free(fhss_structure);
651-
fhss_structure->fhss_state = FHSS_UNSYNCHRONIZED;
652-
return 0;
630+
if (!fhss_structure) {
631+
return -1;
653632
}
654-
return -1;
633+
fhss_destroy_scramble_table(fhss_structure);
634+
fhss_structure->platform_functions.fhss_timer_stop(fhss_superframe_handler, fhss_structure->fhss_api);
635+
fhss_structure->synch_panid = 0xffff;
636+
fhss_beacon_periodic_stop(fhss_structure);
637+
fhss_structure->current_superframe = 0;
638+
fhss_structure->current_channel_index = 0;
639+
fhss_structure->channel_list_counter = 0;
640+
if (fhss_is_synch_root(fhss_structure) == false) {
641+
fhss_structure->own_hop = 0xff;
642+
}
643+
fhss_structure->tx_allowed = false;
644+
fhss_structure->synch_interval = (uint32_t) (fhss_structure->fhss_conf.fhss_configuration.fhss_max_synch_interval/BEACON_INTERVAL_INIT_DIVIDER) * 1000;
645+
fhss_structure->rx_channel = 0;
646+
fhss_structure->beacons_received_timer = 0;
647+
memset(fhss_structure->synch_parent, 0xff, 8);
648+
fhss_structure->send_synch_info_on_next_broadcast_channel = false;
649+
memset(&fhss_structure->synch_configuration, 0, sizeof(fhss_synch_configuration_t));
650+
fhss_structure->synch_infos_sent_counter = 0;
651+
fhss_structure->broadcast_start_superframe = 0;
652+
fhss_failed_list_free(fhss_structure);
653+
fhss_structure->fhss_state = FHSS_UNSYNCHRONIZED;
654+
return 0;
655655
}
656656

657657
int fhss_add_beacon_info(fhss_structure_t *fhss_structure, uint16_t pan_id, uint8_t *source_address, uint32_t timestamp, uint8_t *synch_info)

source/Service_Libs/fhss/fhss_beacon.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ int fhss_beacon_update_payload(fhss_structure_t *fhss_structure,
5858
payload->time_since_last_beacon = 0; // XXX not available yet
5959
// TODO: Get Beacon length from MAC
6060
uint32_t tx_time = fhss_get_tx_time(fhss_structure, 71, 0, 0);
61-
payload->processing_delay = fhss_structure->fhss_configuration.fhss_tuning_parameters.tx_processing_delay + tx_time;
61+
payload->processing_delay = fhss_structure->fhss_conf.fhss_configuration.fhss_tuning_parameters.tx_processing_delay + tx_time;
6262

6363
payload->superframe_length = config->fhss_superframe_length;
6464

source/Service_Libs/fhss/fhss_beacon_tasklet.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ void fhss_beacon_received(fhss_structure_t *fhss_structure, const uint8_t *synch
144144

145145
if (synch_info) {
146146
fhss_synchronization_beacon_payload_s temp_payload;
147-
temp_payload.processing_delay = fhss_structure->fhss_configuration.fhss_tuning_parameters.rx_processing_delay;
147+
temp_payload.processing_delay = fhss_structure->fhss_conf.fhss_configuration.fhss_tuning_parameters.rx_processing_delay;
148148
fhss_beacon_decode(&temp_payload, synch_info, elapsed_time, fhss_structure->number_of_channels);
149149

150150
// use the received information

source/Service_Libs/fhss/fhss_channel.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ bool fhss_change_to_next_channel(fhss_structure_t *fhss_structure)
137137
// Reset Beacon received flag when channel has changed
138138
fhss_structure->beacon_received_on_this_bc_channel = false;
139139
channel_index_tmp = fhss_add_channel_list_counter(channel_index_tmp, fhss_structure->number_of_channels, fhss_structure->channel_list_counter, fhss_structure->fhss_scramble_table);
140-
next_channel = channel_list_get_channel(fhss_structure->fhss_configuration.channel_mask, channel_index_tmp);
140+
next_channel = channel_list_get_channel(fhss_structure->fhss_conf.fhss_configuration.channel_mask, channel_index_tmp);
141141

142142
fhss_structure->rx_channel = next_channel;
143143
#ifdef FHSS_CHANNEL_DEBUG
@@ -220,7 +220,7 @@ static uint8_t fhss_get_destination_channel(fhss_structure_t *fhss_structure, ui
220220

221221
uc_index = fhss_calc_channel_shuffle(uc_index, fhss_structure->number_of_channels, fhss_structure->synch_configuration.fhss_number_of_bc_channels);
222222
uc_index = fhss_add_channel_list_counter(uc_index, fhss_structure->number_of_channels, fhss_structure->channel_list_counter, fhss_structure->fhss_scramble_table);
223-
return channel_list_get_channel(fhss_structure->fhss_configuration.channel_mask, uc_index);
223+
return channel_list_get_channel(fhss_structure->fhss_conf.fhss_configuration.channel_mask, uc_index);
224224
}
225225
return fhss_structure->rx_channel;
226226
}
@@ -262,7 +262,7 @@ int fhss_change_to_parent_channel(fhss_structure_t *fhss_structure)
262262
}
263263
uc_index = fhss_calc_channel_shuffle(uc_index, fhss_structure->number_of_channels, fhss_structure->synch_configuration.fhss_number_of_bc_channels);
264264
uc_index = fhss_add_channel_list_counter(uc_index, fhss_structure->number_of_channels, fhss_structure->channel_list_counter, fhss_structure->fhss_scramble_table);
265-
destination_channel = channel_list_get_channel(fhss_structure->fhss_configuration.channel_mask, uc_index);
265+
destination_channel = channel_list_get_channel(fhss_structure->fhss_conf.fhss_configuration.channel_mask, uc_index);
266266
fhss_structure->callbacks.change_channel(fhss_structure->fhss_api, destination_channel);
267267
#ifdef FHSS_CHANNEL_DEBUG
268268
tr_info("Parent channel: %u", destination_channel);

source/Service_Libs/fhss/fhss_common.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,18 @@ typedef uint32_t fhss_read_compensation_cb(fhss_structure_t *fhss_structure);
5252
*/
5353
typedef int fhss_handle_state_set_cb(fhss_structure_t *fhss_structure, fhss_states fhss_state, uint16_t pan_id);
5454

55+
union fhss_conf {
56+
fhss_configuration_t fhss_configuration;
57+
fhss_ws_configuration_t fhss_ws_configuration;
58+
};
59+
5560
struct fhss_structure
5661
{
5762
fhss_api_t *fhss_api;
5863
uint32_t datarate;
5964
fhss_states fhss_state;
6065
fhss_timer_t platform_functions;
61-
fhss_configuration_t fhss_configuration;
66+
union fhss_conf fhss_conf;
6267
fhss_synch_configuration_t synch_configuration;
6368

6469
uint8_t fhss_resolution_divider;

source/Service_Libs/fhss/fhss_mac_interface.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ bool fhss_data_tx_fail_cb(const fhss_api_t *api, uint8_t handle, int frame_type)
118118
return false;
119119
}
120120
// Channel retries are disabled -> return
121-
if (fhss_structure->fhss_configuration.fhss_number_of_channel_retries == 0) {
121+
if (fhss_structure->fhss_conf.fhss_configuration.fhss_number_of_channel_retries == 0) {
122122
return false;
123123
}
124124
// Use channel retries only for data frames
@@ -129,7 +129,7 @@ bool fhss_data_tx_fail_cb(const fhss_api_t *api, uint8_t handle, int frame_type)
129129
fhss_failed_tx_t *fhss_failed_tx = fhss_failed_handle_find(fhss_structure, handle);
130130
if (fhss_failed_tx) {
131131
fhss_failed_tx->retries_done++;
132-
if (fhss_failed_tx->retries_done >= fhss_structure->fhss_configuration.fhss_number_of_channel_retries) {
132+
if (fhss_failed_tx->retries_done >= fhss_structure->fhss_conf.fhss_configuration.fhss_number_of_channel_retries) {
133133
// No more retries. Return false to stop retransmitting.
134134
fhss_failed_handle_remove(fhss_structure, handle);
135135
return false;

test/nanostack/unittest/service_libs/fhss/test_fhss.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ bool test_fhss_sync_with_beacon()
301301
fhss_struct->platform_functions.fhss_timer_start = &fhss_timer_start;
302302
fhss_struct->platform_functions.fhss_get_remaining_slots = &fhss_get_remaining_slots_stub;
303303
fhss_struct->platform_functions.fhss_resolution_divider = 1;
304-
fhss_struct->fhss_configuration.fhss_max_synch_interval = 240;
304+
fhss_struct->fhss_conf.fhss_configuration.fhss_max_synch_interval = 240;
305305
fhss_struct->synch_interval = 150000;
306306

307307
// Test that synchronization is skipped if Beacon is already received on this channel

test/nanostack/unittest/service_libs/fhss_beacon/test_fhss_beacon.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ bool test_fhss_beacon_update_payload()
7777
fhss_struct->own_hop = test_value;
7878
fhss_struct->synch_configuration.fhss_number_of_bc_channels = test_value;
7979
fhss_struct->synch_configuration.fhss_number_of_tx_slots = test_value;
80-
fhss_struct->fhss_configuration.fhss_tuning_parameters.tx_processing_delay = test_value;
80+
fhss_struct->fhss_conf.fhss_configuration.fhss_tuning_parameters.tx_processing_delay = test_value;
8181
fhss_struct->synch_configuration.fhss_superframe_length = test_value;
8282
fhss_struct->synch_configuration.fhss_number_of_superframes = test_value;
8383

test/nanostack/unittest/service_libs/fhss_mac_interface/test_fhss_mac_interface.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ bool test_fhss_data_tx_fail_cb()
150150
fhss_stub.bool_value = true;
151151

152152
// No channel retries should return false
153-
fhss_stub.fhss_struct.fhss_configuration.fhss_number_of_channel_retries = 0;
153+
fhss_stub.fhss_struct.fhss_conf.fhss_configuration.fhss_number_of_channel_retries = 0;
154154
if (fhss_data_tx_fail_cb(&fhss_api, handle, FHSS_DATA_FRAME) != false) {
155155
return false;
156156
}
157157
// In this test 255 means no handle added
158158
fhss_stub.fhss_failed_tx.handle = 255;
159-
fhss_stub.fhss_struct.fhss_configuration.fhss_number_of_channel_retries = 2;
159+
fhss_stub.fhss_struct.fhss_conf.fhss_configuration.fhss_number_of_channel_retries = 2;
160160
// This call should add new failed handle
161161
if (fhss_data_tx_fail_cb(&fhss_api, handle, FHSS_DATA_FRAME) != true) {
162162
return false;

0 commit comments

Comments
 (0)