2020-05-20 10:12:54 +02:00
|
|
|
# Copyright (c) 2020 Freie Universitaet Berlin
|
|
|
|
#
|
|
|
|
# This file is subject to the terms and conditions of the GNU Lesser
|
|
|
|
# General Public License v2.1. See the file LICENSE in the top level
|
|
|
|
# directory for more details.
|
|
|
|
#
|
2020-08-31 09:33:35 +02:00
|
|
|
menuconfig KCONFIG_USEMODULE_GNRC_GOMACH
|
2020-05-20 10:12:54 +02:00
|
|
|
bool "Configure GNRC GOMACH"
|
2020-08-31 09:33:35 +02:00
|
|
|
depends on USEMODULE_GNRC_GOMACH
|
2020-05-20 10:12:54 +02:00
|
|
|
help
|
|
|
|
Configure the GNRC GOMACH using Kconfig.
|
|
|
|
|
2020-08-31 09:33:35 +02:00
|
|
|
if KCONFIG_USEMODULE_GNRC_GOMACH
|
2020-05-20 10:12:54 +02:00
|
|
|
|
|
|
|
config GNRC_GOMACH_CP_DURATION_US
|
|
|
|
int "Wake-up period (WP) duration in microseconds"
|
|
|
|
default 10000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_CP_DURATION_US'. GoMacH adopts the
|
|
|
|
duty-cycle scheme that, by default, a node only wakes up for a short
|
|
|
|
period of 'CONFIG_GNRC_GOMACH_CP_DURATION_US' in each cycle. In the
|
|
|
|
rest of the cycle (except vTDMA), the node turns off the radio to
|
|
|
|
conserve power. 'CONFIG_GNRC_GOMACH_CP_DURATION_US' should be at least
|
|
|
|
longer than 'CONFIG_GNRC_GOMACH_MAX_PREAM_INTERVAL_US', thus to
|
|
|
|
guarantee that the receiver will not miss the preamble packet.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_SUPERFRAME_DURATION_US
|
|
|
|
int "Duration of superframe in microseconds"
|
|
|
|
default 300000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_SUPERFRAME_DURATION_US' ,superframe
|
|
|
|
duration, i.e , time between two consecutive wake-ups.
|
|
|
|
The configurations should not be shorter than 10 times of
|
|
|
|
'CONFIG_GNRC_GOMACH_CP_DURATION_US' and not shorter than the RTT tickle
|
|
|
|
interval.This configuration governs power consumption and GoMacH's
|
|
|
|
reactiveness to traffic loads.In GoMacH, nodes adopt duty-cycle scheme
|
|
|
|
to conserve power. That is, time is divided into repeated cycles
|
|
|
|
(superframes), and in each cycle, a node only wakes up for a short
|
|
|
|
period of time for receiving potential incoming packets for itself.
|
|
|
|
This configuration defines the wake-up interval, or, in other words,
|
|
|
|
defines the cycle duration used in GoMacH. For more information refer
|
|
|
|
file 'gomach.h' in sys/include/net/gnrc.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_CP_RANDOM_END_US
|
|
|
|
int "Duration of random period at the end of WP in microseconds"
|
|
|
|
default 1000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_CP_RANDOM_END_US', the maximum duration
|
|
|
|
of the random period at the end of GoMacH's wake-up period (WP).
|
|
|
|
Currently, GoMacH's WP is composed of
|
|
|
|
'CONFIG_GNRC_GOMACH_CP_DURATION_US' and (+)
|
|
|
|
'CONFIG_GNRC_GOMACH_CP_RANDOM_END_US'. This random was introduced
|
|
|
|
to avoid beacon collision among neighbor nodes. This configuration may
|
|
|
|
be removed in the future.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_CP_MIN_GAP_US
|
|
|
|
int "Time interval between neighbor nodes' Wake-up phases in microseconds"
|
|
|
|
default 25000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_CP_MIN_GAP_US', the minimum gap between
|
|
|
|
neighbor nodes' wake-up phases in GoMacH.To reduce beacon collisions
|
|
|
|
and transmission collisions, GoMacH intends to avoid neighbor nodes'
|
|
|
|
phases being too close to each other. This configuration defines the
|
|
|
|
minimum gap between two nodes's wake-up phases. If the sender finds its
|
|
|
|
wake-up phase too closed to its receiver's, it will randomly select a
|
|
|
|
new phase for itself.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_WAIT_RX_END_US
|
|
|
|
int "Timeout for 'NETDEV_EVENT_RX_COMPLETE' in GoMacH in microseconds"
|
|
|
|
default 6000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_WAIT_RX_END_US', the timeout duration for
|
|
|
|
waiting 'NETDEV_EVENT_RX_COMPLETE' event in GoMacH. Sometimes in
|
|
|
|
GoMacH, if a node finds RX ongoing when it is just about to enter the
|
|
|
|
next MAC state, it will set up a timeout for waiting this packet
|
|
|
|
reception complete with a timeout of this
|
|
|
|
'CONFIG_GNRC_GOMACH_WAIT_RX_END_US' duration.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_NO_TX_ISR_US
|
|
|
|
int "Timeout duration for confirming TX-No-ISR event in microseconds"
|
|
|
|
default 50000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_NO_TX_ISR_US',the timeout duration for
|
|
|
|
confirming TX-No-ISR event in GoMacH. This configuration is used to
|
|
|
|
confirm/catch a case that a transmission doesn't have its
|
|
|
|
'NETDEV_EVENT_TX_COMPLETE' interrupt event, which is considered as a
|
|
|
|
hardware abnormal event. Upon this timeout expiration, GoMach will
|
|
|
|
accordingly take actions to maintain its state-machine.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_MAX_PREAM_INTERVAL_US
|
|
|
|
int "Maximum time interval between two preamble packets in microseconds"
|
|
|
|
default 6000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_MAX_PREAM_INTERVAL_US',the maximum time
|
|
|
|
interval between two consecutive preamble packets in GoMacH. In GoMacH,
|
|
|
|
a sender first uses preamble stream to track the receiver's wake-up
|
|
|
|
phase (WP), if the receiver's WP is unknown. This configuration defines
|
|
|
|
the maximum time interval between twoconsecutive preamble packets.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_PREAMBLE_INTERVAL_US
|
|
|
|
int "Time interval between two preamble packets in microseconds"
|
|
|
|
default 2000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_PREAMBLE_INTERVAL_US', the time interval
|
|
|
|
between two consecutive preamble packets in GoMacH. In GoMacH, after a
|
|
|
|
preamble is sent, the sender sets a timeout with
|
|
|
|
'CONFIG_GNRC_GOMACH_PREAMBLE_INTERVAL_US' duration for waiting to send
|
|
|
|
the next preamble. Notably, this configuration is with a very small
|
|
|
|
value. In GoMacH, for receiving the preamble-ACK packet, the sender
|
|
|
|
doesn't wait for the whole reception of the preamble-ACK. Instead, it
|
|
|
|
only waits for the 'NETDEV_EVENT_RX_STARTED' event which leads to
|
|
|
|
shorter time interval between two consecutive preamble transmissions.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_BCAST_INTERVAL_US
|
|
|
|
int "Time interval between two broadcast packets in microseconds"
|
|
|
|
default 1000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_BCAST_INTERVAL_US', the time interval
|
|
|
|
between two consecutive broadcast packets in GoMacH. In GoMacH, when
|
|
|
|
sending a broadcast packet, the sender broadcasts the same packet frame
|
|
|
|
on its two public channels simultaneously, with a total duration of
|
|
|
|
'CONFIG_GNRC_GOMACH_SUPERFRAME_DURATION_US' to guarantee that all
|
|
|
|
neighbors will get a copy. This configuration defines the time interval
|
|
|
|
between ending two consecutive broadcast copies.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_VTDMA_SLOT_SIZE_US
|
|
|
|
int "Transmission slot size in microseconds **Should not be changed**"
|
|
|
|
default 5000
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_VTDMA_SLOT_SIZE_US', the transmission slot
|
|
|
|
size in GoMacH. GoMacH adopts dynamic slots allocation scheme to
|
|
|
|
allocate transmission slots to senders that have pending packets. Each
|
|
|
|
slot is for one data packet with ACK transmission.
|
|
|
|
'CONFIG_GNRC_GOMACH_VTDMA_SLOT_SIZE_US' is right sufficient for the
|
|
|
|
transmission of the longest packet in IEEE 802.15.4 with ACK. Should
|
|
|
|
not be changed.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_TX_BUSY_THRESHOLD
|
|
|
|
int "Maximum number of CSMA TX attempts under busy-indication in the WP"
|
|
|
|
default 5
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_TX_BUSY_THRESHOLD', maximum number of
|
|
|
|
CSMA TX attempts under busy-indication in the WP period of the receiver.
|
|
|
|
Senders in GoMacH adopt CSMA scheme to send data packets in the WP
|
|
|
|
period of the receiver. In case of having medium-busy feedback in WP
|
|
|
|
and the TX failure count (due to busy) is below
|
|
|
|
'CONFIG_GNRC_GOMACH_TX_BUSY_THRESHOLD', the sender continue to send the
|
|
|
|
packet with CSMAin the receiver's WP, with the consideration that there
|
|
|
|
may be multi-senders simultaneously competing in WP and the WP will be
|
|
|
|
continuously extended (thus the packet can be received).
|
|
|
|
|
|
|
|
config GNRC_GOMACH_CP_EXTEND_THRESHOLD
|
|
|
|
int "Maximum WP period extension number"
|
|
|
|
default 5
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_CP_EXTEND_THRESHOLD', maximum WP period
|
|
|
|
extension number in GoMacH. The WP period of a receiver will be
|
|
|
|
extended upon each successful packet reception (except receiving
|
|
|
|
broadcast or preamble packet) to receive more potential incoming
|
|
|
|
packets.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_RX_DUPCHK_UNIT_LIFE
|
|
|
|
int "Life time of check-duplicate-packet in cycle count"
|
|
|
|
default 30
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_RX_DUPCHK_UNIT_LIFE', GoMacH's
|
|
|
|
check-duplicate-packet unit life time in cycle count. In GoMacH, to
|
|
|
|
avoid receiving duplicate-packet, we currently introduce a data type of
|
|
|
|
'gnrc_gomach_dupchk_unit_t' to record the recent senders' information
|
|
|
|
(especially MAC TX sequence). This configuration defines the
|
|
|
|
check-duplicate-packet data unit's life time in cycle count. Once
|
|
|
|
expired, the related data unit will be reset. This configuration maybe
|
|
|
|
removed in the future.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_MAX_ALLOC_SENDER_NUM
|
|
|
|
int "Maximum number of senders allowed to be allocated slots in one cycle"
|
|
|
|
default 11
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_MAX_ALLOC_SENDER_NUM', maximum number of
|
|
|
|
senders allowed to be allocated slots in one cycle. Exclude the static
|
|
|
|
GoMacH MAC header payload in the beacon, which is 20 bytes, we have 107
|
|
|
|
bytes left for constructing the sender-ID list and the related
|
|
|
|
slots-number list. A combined slots allocation information pair (sender
|
|
|
|
ID with its corresponded allocate slots number) will cost 9 (8+1)
|
|
|
|
bytes, thus we can hold a maximum of 11 i.e., ((127 - 20) / 9), sender
|
|
|
|
IDs in the beacon.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_REPHASELOCK_THRESHOLD
|
|
|
|
int "Maximum number of t2k attempts before t2u"
|
|
|
|
default 4
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_REPHASELOCK_THRESHOLD', maximum t2k
|
|
|
|
attempts before going to t2u in GoMacH.After phase-locked with the
|
|
|
|
receiver, a sender runs a t2k (transmit-to-known) procedure to transmit
|
|
|
|
packet to the phase-known device. However, due to factors like timer
|
|
|
|
driftor busy-channel, a transmission attempt may fail in t2k. If the
|
|
|
|
t2k failure count has reached this
|
|
|
|
'CONFIG_GNRC_GOMACH_REPHASELOCK_THRESHOLD', the sender regards
|
|
|
|
phase-locked failed due to timer drift. In this case, it will adopt t2u
|
|
|
|
(transmit-to-unknown) procedure to get re-phase-locked with the
|
|
|
|
receiver.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_T2U_RETYR_THRESHOLD
|
|
|
|
int "Maximum number of t2u attempts before dropping data packet"
|
|
|
|
default 2
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_T2U_RETYR_THRESHOLD', maximum number of
|
|
|
|
t2u attempts before dropping data packet in GoMacH. In case the
|
|
|
|
receiver's phase is unknown to the sender, the sender adopts the t2u
|
|
|
|
(transmit-to-unknown) procedure to get phase-locked with the receiver.
|
|
|
|
This configuration defines the maximum t2u attempts before dropping the
|
|
|
|
data packet in GoMacH.
|
|
|
|
|
|
|
|
config GNRC_GOMACH_MAX_T2U_RETYR_THRESHOLD
|
|
|
|
int "Maximum t2u attempts before re-initiating radio"
|
|
|
|
default 10
|
|
|
|
help
|
|
|
|
Configure 'CONFIG_GNRC_GOMACH_MAX_T2U_RETYR_THRESHOLD', maximum number
|
|
|
|
of t2u attempts before re-initiaing radio in GoMacH. After a long
|
|
|
|
period of run time, a radio may be in wrong condition which needs to be
|
|
|
|
re-calibrated. This is indicated by having a series of continuous t2u
|
|
|
|
failures (no preambleACK) in GoMacH. In case we have
|
|
|
|
'CONFIG_GNRC_GOMACH_MAX_T2U_RETYR_THRESHOLD' number of t2u failures,
|
|
|
|
then we re-initiate the radio, trying to re-calibrate the radio for
|
|
|
|
bringing it back to normal condition.
|
|
|
|
|
2020-08-31 09:33:35 +02:00
|
|
|
endif # KCONFIG_USEMODULE_GNRC_GOMACH
|