Skip to content

Commit 08d3e12

Browse files
author
Juha Heiskanen
authored
Merge pull request ARMmbed#1799 from ARMmbed/several_bug_fixs
Bug fixes:
2 parents f39312b + 63d8a41 commit 08d3e12

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ static int8_t ws_fhss_discovery_configure(protocol_interface_info_entry_t *cur)
270270
fhss_configuration.ws_channel_function = WS_FIXED_CHANNEL;
271271
fhss_configuration.fhss_bc_dwell_interval = 0;
272272
fhss_configuration.fhss_broadcast_interval = 0;
273-
cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels);
273+
cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels - 1);
274274
memset(fhss_configuration.channel_mask, 0, sizeof(uint32_t) * 8);
275275
channel_list_set_channel(fhss_configuration.channel_mask, cur->ws_info->hopping_schdule.fixed_channel, true);
276276

@@ -1516,7 +1516,7 @@ static void ws_bootstrap_event_handler(arm_event_s *event)
15161516
if (cur->bootsrap_mode == ARM_NWK_BOOTSRAP_MODE_6LoWPAN_BORDER_ROUTER) {
15171517
tr_debug("Border router start network");
15181518
// Randomize fixed channel. Only used if channel plan is fixed
1519-
cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels);
1519+
cur->ws_info->hopping_schdule.fixed_channel = randLIB_get_random_in_range(0,cur->ws_info->hopping_schdule.number_of_channels - 1);
15201520
cur->ws_info->network_pan_id = randLIB_get_random_in_range(0,0xfffd);
15211521
cur->ws_info->pan_information.pan_size = 0;
15221522
cur->ws_info->pan_information.pan_version = randLIB_get_random_in_range(0,0xffff);

source/MAC/IEEE802_15_4/mac_mcps_sap.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1819,9 +1819,12 @@ static int8_t mcps_pd_data_cca_trig(protocol_interface_rf_mac_setup_s *rf_ptr, m
18191819
}
18201820
mac_pd_sap_set_phy_tx_time(rf_ptr, buffer->tx_time, cca_enabled);
18211821
if (mac_plme_cca_req(rf_ptr) != 0) {
1822-
rf_ptr->macTxProcessActive = false;
1823-
rf_ptr->mac_ack_tx_active = false;
1824-
return -1;
1822+
1823+
if (buffer->fcf_dsn.frametype == MAC_FRAME_ACK) {
1824+
rf_ptr->macTxProcessActive = false;
1825+
return -1;
1826+
}
1827+
mac_csma_backoff_start(rf_ptr);
18251828
}
18261829
} else {
18271830
timer_mac_start(rf_ptr, MAC_TIMER_CCA, (uint16_t)(buffer->tx_time / 50));

source/MAC/IEEE802_15_4/mac_pd_sap.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#define NWKTX_TIMEOUT_PERIOD (1200*20)
4141

4242
static int8_t mac_data_interface_tx_done_cb(protocol_interface_rf_mac_setup_s *rf_ptr, phy_link_tx_status_e status, uint8_t cca_retry, uint8_t tx_retry);
43+
static void mac_sap_cca_fail_cb(protocol_interface_rf_mac_setup_s *rf_ptr);
4344

4445
void mac_csma_param_init(protocol_interface_rf_mac_setup_s *rf_mac_setup)
4546
{
@@ -64,7 +65,7 @@ static uint16_t mac_csma_backoff_period_convert_to50us(uint8_t random, uint8_t b
6465
return (random * backoff_period_in_10us) / 5;
6566
}
6667

67-
static void mac_csma_backoff_start(protocol_interface_rf_mac_setup_s *rf_mac_setup)
68+
void mac_csma_backoff_start(protocol_interface_rf_mac_setup_s *rf_mac_setup)
6869
{
6970
uint8_t backoff = mac_csma_random_backoff_get(rf_mac_setup);
7071
uint16_t backoff_slots = mac_csma_backoff_period_convert_to50us(backoff, rf_mac_setup->backoff_period_in_10us);
@@ -219,6 +220,12 @@ void mac_pd_sap_state_machine(protocol_interface_rf_mac_setup_s *rf_mac_setup)
219220
if (rf_mac_setup->macUpState && rf_mac_setup->macTxProcessActive) {
220221

221222
if (rf_mac_setup->mac_tx_result == MAC_TIMER_CCA) {
223+
224+
if (rf_mac_setup->rf_csma_extension_supported) {
225+
mac_sap_cca_fail_cb(rf_mac_setup);
226+
return;
227+
}
228+
222229
if (rf_mac_setup->fhss_api) {
223230
uint8_t *synch_info = NULL;
224231
mac_pre_build_frame_t *active_buf = rf_mac_setup->active_pd_data_request;
@@ -270,7 +277,8 @@ void mac_pd_sap_state_machine(protocol_interface_rf_mac_setup_s *rf_mac_setup)
270277
}
271278
}
272279

273-
static void mac_sap_cca_fail_cb(protocol_interface_rf_mac_setup_s *rf_ptr) {
280+
static void mac_sap_cca_fail_cb(protocol_interface_rf_mac_setup_s *rf_ptr)
281+
{
274282
rf_ptr->macRfRadioTxActive = false;
275283
if (rf_ptr->mac_cca_retry > rf_ptr->macMaxCSMABackoffs || (rf_ptr->active_pd_data_request && rf_ptr->active_pd_data_request->asynch_request)) {
276284
//Send MAC_CCA_FAIL

source/MAC/IEEE802_15_4/mac_pd_sap.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ int8_t mac_pd_sap_data_cb(void *identifier, struct arm_phy_sap_msg_s *message);
4848
void mac_csma_param_init(struct protocol_interface_rf_mac_setup *rf_mac_setup);
4949

5050
uint32_t mac_csma_backoff_get(struct protocol_interface_rf_mac_setup *rf_mac_setup);
51+
52+
void mac_csma_backoff_start(struct protocol_interface_rf_mac_setup *rf_mac_setup);
5153
/**
5254
* Run Mac data interface state Machine.
5355
*

test/nanostack/unittest/stub/mac_pd_sap_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,8 @@ uint32_t mac_csma_backoff_get(protocol_interface_rf_mac_setup_s *rf_mac_setup)
7373
return 960;
7474
}
7575

76+
void mac_csma_backoff_start(protocol_interface_rf_mac_setup_s *rf_mac_setup)
77+
{
78+
79+
}
80+

0 commit comments

Comments
 (0)