Skip to content

Commit d6b2bbc

Browse files
author
Jarkko Paso
authored
Merge pull request #1928 from ARMmbed/IOTTHD-3028
MAC/WS: Implemented Ack wait duration set
2 parents 0e9ead2 + 80683e2 commit d6b2bbc

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

source/6LoWPAN/ws/ws_common.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "6LoWPAN/ws/ws_bbr_api_internal.h"
3030
#include "Service_Libs/mac_neighbor_table/mac_neighbor_table.h"
3131
#include "ws_management_api.h"
32+
#include "mac_api.h"
3233

3334
#ifdef HAVE_WS
3435
#define TRACE_GROUP "wscm"
@@ -130,6 +131,13 @@ int8_t ws_common_regulatory_domain_config(protocol_interface_info_entry_t *cur)
130131
}
131132
// Note: doesn't work for Brazil region
132133
ws_generate_channel_list(cur->ws_info->hopping_schdule.channel_mask, cur->ws_info->hopping_schdule.number_of_channels, cur->ws_info->hopping_schdule.regulatory_domain);
134+
135+
uint16_t ack_wait_symbols = WS_ACK_WAIT_SYMBOLS;
136+
mlme_set_t set_request;
137+
set_request.attr = macAckWaitDuration;
138+
set_request.value_pointer = &ack_wait_symbols;
139+
set_request.value_size = sizeof(ack_wait_symbols);
140+
cur->mac_api->mlme_req(cur->mac_api, MLME_SET, &set_request);
133141
return 0;
134142
}
135143

source/6LoWPAN/ws/ws_common_defines.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,11 @@ typedef struct ws_bs_ie {
215215
*/
216216
#define WS_RPL_DIS_TIMEOUT 1800
217217

218+
/*
219+
* MAC Ack wait duration in symbols. 2-FSK modulation used -> 1 bit per symbol.
220+
*/
221+
#define WS_ACK_WAIT_SYMBOLS 800
222+
218223
/* Default FHSS timing information
219224
*
220225
*/

source/MAC/IEEE802_15_4/mac_defines.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ typedef struct protocol_interface_rf_mac_setup {
216216
uint8_t mac_sequence;
217217
uint8_t mac_tx_retry;
218218
uint8_t mac_cca_retry;
219-
uint8_t mac_ack_wait_duration;
219+
uint16_t mac_ack_wait_duration;
220220
uint8_t mac_mlme_retry_max;
221221
uint8_t aUnitBackoffPeriod;
222222
/* Indirect queue parameters */

source/MAC/IEEE802_15_4/mac_mlme.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,29 @@ void mac_extended_mac_set(protocol_interface_rf_mac_setup_s *rf_mac_setup, const
635635
}
636636
}
637637

638+
static uint32_t mac_calc_ack_wait_duration(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint16_t symbols)
639+
{
640+
uint32_t AckWaitDuration = 0;
641+
if (rf_mac_setup->rf_csma_extension_supported) {
642+
AckWaitDuration = symbols * rf_mac_setup->symbol_time_us;
643+
}
644+
return AckWaitDuration;
645+
}
646+
647+
static int8_t mac_mlme_set_ack_wait_duration(protocol_interface_rf_mac_setup_s *rf_mac_setup, const mlme_set_t *set_req)
648+
{
649+
uint16_t symbols = common_read_16_bit_inverse((uint8_t *)set_req->value_pointer);
650+
uint32_t ack_wait_time_us = mac_calc_ack_wait_duration(rf_mac_setup, symbols);
651+
if (ack_wait_time_us < 50) {
652+
return -1;
653+
}
654+
// MAC timer uses 50us resolution
655+
rf_mac_setup->mac_ack_wait_duration = ack_wait_time_us/50;
656+
tr_debug("Set macAckWaitDuration: %uus", rf_mac_setup->mac_ack_wait_duration*50);
657+
658+
return 0;
659+
}
660+
638661
static int8_t mac_mlme_device_description_set(protocol_interface_rf_mac_setup_s *rf_mac_setup, const mlme_set_t *set_req)
639662
{
640663

@@ -707,6 +730,8 @@ int8_t mac_mlme_set_req(protocol_interface_rf_mac_setup_s *rf_mac_setup, const m
707730
}
708731

709732
switch (set_req->attr) {
733+
case macAckWaitDuration:
734+
return mac_mlme_set_ack_wait_duration(rf_mac_setup, set_req);
710735
case macDeviceTable:
711736
return mac_mlme_device_description_set(rf_mac_setup, set_req);
712737
case macKeyTable:

0 commit comments

Comments
 (0)