Skip to content

Commit 0860b57

Browse files
author
Jarkko Paso
authored
FHSS_WS: Fixed reading unicast remaining slots (ARMmbed#2408)
* FHSS_WS: Fixed reading unicast remaining slots * Unit test: Fixed FHSS WS tests
1 parent 4d8c03b commit 0860b57

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,10 @@ static uint32_t fhss_ws_calculate_ufsi(fhss_structure_t *fhss_structure, uint32_
417417
cur_slot = fhss_structure->number_of_uc_channels;
418418
}
419419
cur_slot--;
420-
uint32_t remaining_time_ms = US_TO_MS(get_remaining_slots_us(fhss_structure, fhss_unicast_handler, MS_TO_US(fhss_structure->ws->fhss_configuration.fhss_uc_dwell_interval)));
420+
uint32_t remaining_time_ms = 0;
421+
if (fhss_structure->ws->unicast_timer_running == true) {
422+
remaining_time_ms = US_TO_MS(get_remaining_slots_us(fhss_structure, fhss_unicast_handler, MS_TO_US(dwell_time) - NS_TO_US(dwell_time * fhss_structure->ws->drift_per_millisecond_ns)));
423+
}
421424
uint32_t time_to_tx = 0;
422425
uint32_t cur_time = fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api);
423426
if (cur_time < tx_time) {

test/nanostack/unittest/service_libs/fhss_ws/test_fhss_ws.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ static fhss_api_t *test_generate_fhss_api(void)
138138
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_broadcast_interval = 1000;
139139
fhss_common_stub.fhss_struct.ws->get_neighbor_info = &app_get_neighbor_info;
140140
fhss_common_stub.fhss_struct.number_of_channels = 50;
141+
fhss_common_stub.fhss_struct.number_of_uc_channels = 50;
142+
fhss_common_stub.fhss_struct.ws->fhss_configuration.unicast_channel_mask[1] = 0x0003ffff;
143+
fhss_common_stub.fhss_struct.ws->fhss_configuration.unicast_channel_mask[0] = 0xffffffff;
144+
fhss_common_stub.fhss_struct.ws->fhss_configuration.channel_mask[1] = 0x0003ffff;
145+
fhss_common_stub.fhss_struct.ws->fhss_configuration.channel_mask[0] = 0xffffffff;
141146
fhss_common_stub.fhss_struct.rx_channel = DEFAULT_CHANNEL;
142147
fhss_common_stub.fhss_struct.fhss_state = FHSS_UNSYNCHRONIZED;
143148
fhss_common_stub.fhss_struct.own_hop = 0xff;
@@ -273,6 +278,7 @@ bool test_fhss_ws_tx_handle_callback()
273278
memset(&neighbor_info, 0, sizeof(fhss_ws_neighbor_timing_info_t));
274279
// Test direct hash channel function
275280
neighbor_info.uc_timing_info.unicast_channel_function = WS_DH1CF;
281+
neighbor_info.uc_timing_info.unicast_number_of_channels = fhss_common_stub.fhss_struct.number_of_channels;
276282
if (fhss_common_stub.fhss_struct.fhss_api->tx_handle(api, DEFAULT_IS_BC_DEST, dest_address, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH, DEFAULT_TX_TIME) != 0) {
277283
return false;
278284
}
@@ -332,6 +338,7 @@ bool test_fhss_ws_check_tx_conditions_callback()
332338
fhss_common_stub.fhss_struct.own_hop = 0;
333339
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_broadcast_interval = 800;
334340
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_bc_dwell_interval = 200;
341+
fhss_common_stub.fhss_struct.ws->txrx_slot_length_ms = 100;
335342
fhss_platform_stub.remaining_slots_value = 550000;
336343
if (fhss_common_stub.fhss_struct.fhss_api->check_tx_conditions(api, DEFAULT_IS_BC_DEST, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH) != true) {
337344
return false;
@@ -356,6 +363,7 @@ bool test_fhss_ws_check_tx_conditions_callback()
356363
fhss_common_stub.fhss_struct.own_hop = 2;
357364
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_broadcast_interval = 1000;
358365
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_bc_dwell_interval = 250;
366+
fhss_common_stub.fhss_struct.ws->txrx_slot_length_ms = 125;
359367
fhss_platform_stub.remaining_slots_value = 700000;
360368
if (fhss_common_stub.fhss_struct.fhss_api->check_tx_conditions(api, DEFAULT_IS_BC_DEST, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE, DEFAULT_FRAME_LENGTH, DEFAULT_PHY_HEAD_LENGTH, DEFAULT_PHY_TAIL_LENGTH) != true) {
361369
return false;
@@ -398,6 +406,7 @@ bool test_fhss_ws_data_tx_done_callback()
398406
bool test_fhss_ws_data_tx_fail_callback()
399407
{
400408
fhss_api_t *api = test_generate_fhss_api();
409+
fhss_common_stub.fhss_struct.ws->fhss_configuration.config_parameters.number_of_channel_retries = 4;
401410
// Test when FHSS struct not found
402411
disable_fhss_struct();
403412
if (fhss_common_stub.fhss_struct.fhss_api->data_tx_fail(api, DEFAULT_HANDLE, DEFAULT_FRAME_TYPE, DEFAULT_BAD_CHANNEL) != false) {
@@ -457,6 +466,7 @@ bool test_fhss_ws_write_synch_info_callback()
457466
fhss_api_t *api = test_generate_fhss_api();
458467
fhss_common_stub.fhss_struct.ws->fhss_configuration.ws_uc_channel_function = WS_TR51CF;
459468
fhss_common_stub.fhss_struct.rx_channel = 0;
469+
fhss_common_stub.fhss_struct.ws->unicast_timer_running = true;
460470
uint8_t synch_info[100] = {0x05, 0x15, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3f};
461471
// Test when FHSS struct not found
462472
disable_fhss_struct();
@@ -556,12 +566,13 @@ bool test_fhss_ws_get_retry_period_callback()
556566
// Test when own hop not set
557567
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = false;
558568
fhss_common_stub.fhss_struct.own_hop = 0xff;
559-
if (fhss_common_stub.fhss_struct.fhss_api->get_retry_period(api, NULL, 0) != 0) {
569+
if (fhss_common_stub.fhss_struct.fhss_api->get_retry_period(api, NULL, 0) != 100000) {
560570
return false;
561571
}
562572
// Test when on broadcast channel
563573
fhss_common_stub.fhss_struct.ws->is_on_bc_channel = true;
564574
fhss_common_stub.fhss_struct.own_hop = 1;
575+
fhss_common_stub.fhss_struct.ws->broadcast_timer_running = true;
565576
if (fhss_common_stub.fhss_struct.fhss_api->get_retry_period(api, NULL, 0) != 0) {
566577
return false;
567578
}
@@ -655,7 +666,7 @@ bool test_fhss_ws_update_uc_channel_callback()
655666
// We do not want to start broadcast timer
656667
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_bc_dwell_interval = 0;
657668
fhss_common_stub.fhss_struct.ws->fhss_configuration.fhss_broadcast_interval = 0;
658-
fhss_common_stub.fhss_struct.ws->uc_slot = fhss_common_stub.fhss_struct.number_of_channels - 1;
669+
fhss_common_stub.fhss_struct.ws->uc_slot = fhss_common_stub.fhss_struct.number_of_uc_channels - 1;
659670

660671
// Test fixed channel
661672
enable_fhss_struct();

0 commit comments

Comments
 (0)