Skip to content

Commit 327c310

Browse files
author
Jarkko Paso
authored
Merge pull request ARMmbed#1804 from ARMmbed/fhss_ws_cs
FHSS: added critical states
2 parents 51f8328 + e7ae8ce commit 327c310

File tree

2 files changed

+12
-3
lines changed
  • source/Service_Libs/fhss
  • test/nanostack/unittest/service_libs/fhss_ws

2 files changed

+12
-3
lines changed

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "eventOS_callback_timer.h"
2929
#include "randLIB.h"
3030
#include "ns_trace.h"
31+
#include "platform/arm_hal_interrupt.h"
3132
#include <string.h>
3233

3334
#define TRACE_GROUP "fhss"
@@ -255,7 +256,11 @@ static uint32_t fhss_ws_calculate_broadcast_interval_offset(fhss_structure_t *fh
255256
if (fhss_structure->ws->is_on_bc_channel == true) {
256257
remaining_time += (broadcast_interval - dwell_time);
257258
}
258-
uint32_t time_to_tx = (tx_time - fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api)) / 1000;
259+
uint32_t time_to_tx = 0;
260+
uint32_t cur_time = fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api);
261+
if (cur_time < tx_time) {
262+
time_to_tx = (tx_time - cur_time) / 1000;
263+
}
259264
return (broadcast_interval-remaining_time) + time_to_tx;
260265
}
261266

@@ -504,6 +509,7 @@ static int16_t fhss_ws_write_synch_info_callback(const fhss_api_t *api, uint8_t
504509
if (!fhss_structure || !ptr || (frame_type != FHSS_DATA_FRAME)) {
505510
return -1;
506511
}
512+
platform_enter_critical();
507513
struct ws_ie_t header_ie;
508514
header_ie.id = WH_IE_ID;
509515
if (fhss_ws_ie_header_discover(ptr, length, &header_ie, WH_SUB_ID_UTT)) {
@@ -515,6 +521,7 @@ static int16_t fhss_ws_write_synch_info_callback(const fhss_api_t *api, uint8_t
515521
common_write_16_bit_inverse(fhss_structure->ws->bc_slot, header_ie.content_ptr);
516522
common_write_24_bit_inverse(broadcast_interval_offset, header_ie.content_ptr+2);
517523
}
524+
platform_exit_critical();
518525
//TODO return destination channel here
519526
return fhss_structure->rx_channel;
520527
}
@@ -660,18 +667,19 @@ int fhss_ws_set_parent(fhss_structure_t *fhss_structure, const uint8_t eui64[8],
660667
if (!bc_timing_info->broadcast_interval || !bc_timing_info->broadcast_dwell_interval) {
661668
return -1;
662669
}
663-
670+
platform_enter_critical();
664671
uint32_t time_from_reception_ms = (fhss_structure->callbacks.read_timestamp(fhss_structure->fhss_api) - bc_timing_info->bt_rx_timestamp)/1000;
665672
uint32_t true_bc_interval_offset = (bc_timing_info->broadcast_interval_offset + time_from_reception_ms) % bc_timing_info->broadcast_interval;
666673
uint32_t timeout = ((bc_timing_info->broadcast_interval-true_bc_interval_offset)*1000);
674+
fhss_structure->ws->is_on_bc_channel = false;
667675
fhss_start_timer(fhss_structure, timeout, fhss_broadcast_handler);
668676
uint16_t slots_since_reception = (bc_timing_info->broadcast_interval_offset + time_from_reception_ms) / bc_timing_info->broadcast_interval;
669677
// TODO: Calculate drift error
670678
fhss_structure->ws->fhss_configuration.fhss_bc_dwell_interval = bc_timing_info->broadcast_dwell_interval;
671679
fhss_structure->ws->fhss_configuration.fhss_broadcast_interval = bc_timing_info->broadcast_interval;
672680
fhss_set_txrx_slot_length(fhss_structure);
673681
fhss_structure->ws->bc_slot = bc_timing_info->broadcast_slot + slots_since_reception;
674-
682+
platform_exit_critical();
675683
//TODO: support multiple parents
676684
fhss_structure->ws->parent_bc_info = bc_timing_info;
677685
return 0;

test/nanostack/unittest/service_libs/fhss_ws/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ TEST_SRC_FILES = \
2323
../../stub/fhss_common_stub.c \
2424
../../stub/fhss_callbacks_stub.c \
2525
../../stub/fhss_platform_stub.c \
26+
../../stub/platform_stub.c \
2627

2728
include ../../MakefileWorker.mk
2829

0 commit comments

Comments
 (0)