From 607da3ee94f52fd91084e313a3429820f1258839 Mon Sep 17 00:00:00 2001 From: Juha Heiskanen Date: Tue, 28 Aug 2018 09:43:14 +0300 Subject: [PATCH] Bug fixes: Extented driver enabled trig CCA backoff if driver return busy Wi-sun fixed channel allocaion random resolution fix. Change-Id: Ifa4d9310643d64a647405bf41b9617af72443ed9 --- source/6LoWPAN/ws/ws_bootstrap.c | 4 ++-- source/MAC/IEEE802_15_4/mac_mcps_sap.c | 9 ++++++--- source/MAC/IEEE802_15_4/mac_pd_sap.c | 2 +- source/MAC/IEEE802_15_4/mac_pd_sap.h | 2 ++ test/nanostack/unittest/stub/mac_pd_sap_stub.c | 5 +++++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/source/6LoWPAN/ws/ws_bootstrap.c b/source/6LoWPAN/ws/ws_bootstrap.c index a0819172bb3..9c46cca0453 100644 --- a/source/6LoWPAN/ws/ws_bootstrap.c +++ b/source/6LoWPAN/ws/ws_bootstrap.c @@ -270,7 +270,7 @@ static int8_t ws_fhss_discovery_configure(protocol_interface_info_entry_t *cur) fhss_configuration.ws_channel_function = WS_FIXED_CHANNEL; fhss_configuration.fhss_bc_dwell_interval = 0; fhss_configuration.fhss_broadcast_interval = 0; - cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels); + cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels - 1); memset(fhss_configuration.channel_mask, 0, sizeof(uint32_t) * 8); channel_list_set_channel(fhss_configuration.channel_mask, cur->ws_info->hopping_schdule.fixed_channel, true); @@ -1516,7 +1516,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event) if (cur->bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER) { tr_debug("Border router start network"); // Randomize fixed channel. Only used if channel plan is fixed - cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels); + cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels - 1); cur->ws_info->network_pan_id = randLIB_get_random_in_range(0,0xfffd); cur->ws_info->pan_information.pan_size = 0; cur->ws_info->pan_information.pan_version = randLIB_get_random_in_range(0,0xffff); diff --git a/source/MAC/IEEE802_15_4/mac_mcps_sap.c b/source/MAC/IEEE802_15_4/mac_mcps_sap.c index f99c8718eba..5c3e7dbe908 100644 --- a/source/MAC/IEEE802_15_4/mac_mcps_sap.c +++ b/source/MAC/IEEE802_15_4/mac_mcps_sap.c @@ -1819,9 +1819,12 @@ static int8_t mcps_pd_data_cca_trig(protocol_interface_rf_mac_setup_s *rf_ptr, m } mac_pd_sap_set_phy_tx_time(rf_ptr, buffer->tx_time, cca_enabled); if (mac_plme_cca_req(rf_ptr) != 0) { - rf_ptr->macTxProcessActive = false; - rf_ptr->mac_ack_tx_active = false; - return -1; + + if (buffer->fcf_dsn.frametype == MAC_FRAME_ACK) { + rf_ptr->macTxProcessActive = false; + return -1; + } + mac_csma_backoff_start(rf_ptr); } } else { timer_mac_start(rf_ptr, MAC_TIMER_CCA, (uint16_t)(buffer->tx_time / 50)); diff --git a/source/MAC/IEEE802_15_4/mac_pd_sap.c b/source/MAC/IEEE802_15_4/mac_pd_sap.c index 105c1941b4b..7257fb8f016 100644 --- a/source/MAC/IEEE802_15_4/mac_pd_sap.c +++ b/source/MAC/IEEE802_15_4/mac_pd_sap.c @@ -64,7 +64,7 @@ static uint16_t mac_csma_backoff_period_convert_to50us(uint8_t random, uint8_t b return (random * backoff_period_in_10us) / 5; } -static void mac_csma_backoff_start(protocol_interface_rf_mac_setup_s *rf_mac_setup) +void mac_csma_backoff_start(protocol_interface_rf_mac_setup_s *rf_mac_setup) { uint8_t backoff = mac_csma_random_backoff_get(rf_mac_setup); uint16_t backoff_slots = mac_csma_backoff_period_convert_to50us(backoff, rf_mac_setup->backoff_period_in_10us); diff --git a/source/MAC/IEEE802_15_4/mac_pd_sap.h b/source/MAC/IEEE802_15_4/mac_pd_sap.h index f975f039522..d6364ba5274 100644 --- a/source/MAC/IEEE802_15_4/mac_pd_sap.h +++ b/source/MAC/IEEE802_15_4/mac_pd_sap.h @@ -48,6 +48,8 @@ int8_t mac_pd_sap_data_cb(void *identifier, struct arm_phy_sap_msg_s *message); void mac_csma_param_init(struct protocol_interface_rf_mac_setup *rf_mac_setup); uint32_t mac_csma_backoff_get(struct protocol_interface_rf_mac_setup *rf_mac_setup); + +void mac_csma_backoff_start(struct protocol_interface_rf_mac_setup *rf_mac_setup); /** * Run Mac data interface state Machine. * diff --git a/test/nanostack/unittest/stub/mac_pd_sap_stub.c b/test/nanostack/unittest/stub/mac_pd_sap_stub.c index efde99eb9e2..6773ef66cbf 100644 --- a/test/nanostack/unittest/stub/mac_pd_sap_stub.c +++ b/test/nanostack/unittest/stub/mac_pd_sap_stub.c @@ -73,3 +73,8 @@ uint32_t mac_csma_backoff_get(protocol_interface_rf_mac_setup_s *rf_mac_setup) return 960; } +void mac_csma_backoff_start(protocol_interface_rf_mac_setup_s *rf_mac_setup) +{ + +} +