# 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. # menuconfig KCONFIG_USEMODULE_GNRC_GOMACH bool "Configure GNRC GOMACH" depends on USEMODULE_GNRC_GOMACH help Configure the GNRC GOMACH using Kconfig. if KCONFIG_USEMODULE_GNRC_GOMACH 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. endif # KCONFIG_USEMODULE_GNRC_GOMACH