Skip to content

Commit bc09cba

Browse files
author
Jarkko Paso
authored
MAC Ack wait fixed for OFDM (ARMmbed#2552)
1 parent 5106b1d commit bc09cba

File tree

5 files changed

+13
-9
lines changed

5 files changed

+13
-9
lines changed

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2390,7 +2390,11 @@ int ws_bootstrap_set_rf_config(protocol_interface_info_entry_t *cur, phy_rf_chan
23902390
set_request.value_size = sizeof(phy_rf_channel_configuration_s);
23912391
cur->mac_api->mlme_req(cur->mac_api, MLME_SET, &set_request);
23922392
// Set Ack wait duration
2393-
uint16_t ack_wait_symbols = WS_ACK_WAIT_SYMBOLS + (WS_TACK_MAX_MS * (rf_configs.datarate / 1000));
2393+
uint8_t bits_per_symbol = 1;
2394+
if (rf_configs.modulation == M_OFDM) {
2395+
bits_per_symbol = 4;
2396+
}
2397+
uint16_t ack_wait_symbols = WS_ACK_WAIT_SYMBOLS + (WS_TACK_MAX_MS * (rf_configs.datarate / 1000) / bits_per_symbol);
23942398
set_request.attr = macAckWaitDuration;
23952399
set_request.value_pointer = &ack_wait_symbols;
23962400
set_request.value_size = sizeof(ack_wait_symbols);

source/MAC/IEEE802_15_4/mac_defines.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ typedef struct protocol_interface_rf_mac_setup {
272272
int8_t bc_timer_id;
273273
uint32_t mlme_tick_count;
274274
uint32_t symbol_rate;
275-
uint32_t symbol_time_us;
275+
uint32_t symbol_time_ns;
276276
uint32_t datarate;
277277
uint8_t max_ED;
278278
uint16_t mlme_ED_counter;

source/MAC/IEEE802_15_4/mac_mlme.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -652,11 +652,11 @@ void mac_extended_mac_set(protocol_interface_rf_mac_setup_s *rf_mac_setup, const
652652

653653
static uint32_t mac_calc_ack_wait_duration(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint16_t symbols)
654654
{
655-
uint32_t AckWaitDuration = 0;
655+
uint32_t AckWaitDuration_us = 0;
656656
if (rf_mac_setup->rf_csma_extension_supported) {
657-
AckWaitDuration = symbols * rf_mac_setup->symbol_time_us;
657+
AckWaitDuration_us = (symbols * rf_mac_setup->symbol_time_ns) / 1000;
658658
}
659-
return AckWaitDuration;
659+
return AckWaitDuration_us;
660660
}
661661

662662
static int8_t mac_mlme_set_ack_wait_duration(protocol_interface_rf_mac_setup_s *rf_mac_setup, const mlme_set_t *set_req)
@@ -1107,8 +1107,8 @@ static int mac_mlme_set_symbol_rate(protocol_interface_rf_mac_setup_s *rf_mac_se
11071107
{
11081108
if (rf_mac_setup->rf_csma_extension_supported) {
11091109
rf_mac_setup->dev_driver->phy_driver->extension(PHY_EXTENSION_GET_SYMBOLS_PER_SECOND, (uint8_t *) &rf_mac_setup->symbol_rate);
1110-
rf_mac_setup->symbol_time_us = 1000000 / rf_mac_setup->symbol_rate;
1111-
tr_debug("SW-MAC driver support rf extension %"PRIu32" symbol/seconds %"PRIu32" us symbol time length", rf_mac_setup->symbol_rate, rf_mac_setup->symbol_time_us);
1110+
rf_mac_setup->symbol_time_ns = 1000000000 / rf_mac_setup->symbol_rate;
1111+
tr_debug("SW-MAC driver support rf extension %"PRIu32" symbol/seconds %"PRIu32" ns symbol time length", rf_mac_setup->symbol_rate, rf_mac_setup->symbol_time_ns);
11121112
return 0;
11131113
}
11141114
return -1;

source/MAC/IEEE802_15_4/mac_pd_sap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ uint32_t mac_csma_backoff_get(protocol_interface_rf_mac_setup_s *rf_mac_setup)
9797
uint32_t backoff_in_us;
9898
//Multiple aUnitBackoffPeriod symbol time
9999
if (rf_mac_setup->rf_csma_extension_supported) {
100-
backoff_in_us = backoff * rf_mac_setup->aUnitBackoffPeriod * rf_mac_setup->symbol_time_us;
100+
backoff_in_us = backoff * rf_mac_setup->aUnitBackoffPeriod * (rf_mac_setup->symbol_time_ns / 1000);
101101
} else {
102102
backoff_in_us = backoff * rf_mac_setup->backoff_period_in_10us * 10;
103103
}

source/Service_Libs/fhss/fhss_ws.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
// Max TX/RX slot length in milliseconds. Is used when datarate is not given by PHY or calculated slot length exceeds maximum allowed.
2323
#define WS_TXRX_SLOT_LEN_MS_MAX 100
2424
// Min TX/RX slot length in milliseconds. Is used when calculated slot length is under minimum allowed.
25-
#define WS_TXRX_SLOT_LEN_MS_MIN 10
25+
#define WS_TXRX_SLOT_LEN_MS_MIN 13
2626
// Default minimum broadcast synchronization interval in seconds
2727
#define DEFAULT_MIN_SYNCH_INTERVAL 60
2828
// Drift compensation allowed if at least SYNCH_COMPENSATION_MIN_INTERVAL (seconds) since last synchronization

0 commit comments

Comments
 (0)