diff options
Diffstat (limited to 'thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/PHY/phy_common.h')
-rw-r--r-- | thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/PHY/phy_common.h | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/PHY/phy_common.h b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/PHY/phy_common.h new file mode 100644 index 0000000..227d1ba --- /dev/null +++ b/thirdparty/nRF5_SDK_15.0.0_a53641a/components/802_15_4/api/PHY/phy_common.h @@ -0,0 +1,240 @@ +/** + * Copyright (c) 2016 - 2018 Nordic Semiconductor ASA and Luxoft Global Operations Gmbh. + * + * All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ +#ifndef PHY_COMMON_H_INCLUDED +#define PHY_COMMON_H_INCLUDED + +/** @file + * This file contains declarations of commonly used PHY routines and necessary macros/types. + * + * @defgroup phy_common PHY Common API + * @ingroup phy_15_4 + * @{ + * @brief Module to declare Common PHY API + * @details The Common PHY module contains declarations of commonly used PHY routines and necessary macros/types. + */ + +/**@brief The maximum PSDU size (in octets) the PHY shall be able to receive (aMaxPHYPacketSize). + * + * @details See Table 22 - PHY constants. + */ +#define PHY_MAX_PACKET_SIZE 127 + + +/**@brief The maximum PHR size (in octets). + * + * @details See 6.3 PPDU format. + */ +#define PHY_MAX_HEADER_SIZE 1 + +/**@brief Maximum PPDU size */ +#define PHY_MAX_PPDU_SIZE (PHY_MAX_HEADER_SIZE + PHY_MAX_PACKET_SIZE) + +/**@brief Position of PHY header related to income PPDU start pointer.*/ +#define PHY_HEADER_POS (-1) + +/**@brief Size of PHY header in bytes.*/ +#define PHY_HEADER_SIZE 1 + +/**@brief Maximum channel number.*/ +#define PHY_MAX_CHANNEL_NUM 0x1Au + +/**@brief Minimum channel number.*/ +#define PHY_MIN_CHANNEL_NUM 0x0Bu + +// for 2400 MHz O-QPSK 1 octet = 2 symbols 1 symbol = 32bits chip +#define aMaxPHYPacketSize PHY_MAX_PACKET_SIZE // in octets +#define aTurnaroundTime 12 // in symbols + +#define aTurnaroundTimeUs 192 // in us + + +// Read only parameters +#define PHY_CURRENT_PAGE 0x0u +#define PHY_CHANNEL_SUPPORTED 0x07FFF800ul +#define PHY_SHR_DURATION 10u +#define PHY_MAX_FRAME_DURATION (PHY_SHR_DURATION + (int)((aMaxPHYPacketSize + 1) * PHY_SYMBOLS_PER_OCTET)) +#define PHY_SYMBOLS_PER_OCTET 2u + +// CCA values +#define PHY_TRX_CCA_MODE0 0 +#define PHY_TRX_CCA_MODE1 1 +#define PHY_TRX_CCA_MODE2 2 +#define PHY_TRX_CCA_MODE3 3 + + +/** @brief Minimum value that can be used to set radio transmit power. Equals + * to -32 dBm. + * + * This is a combination of digits which includes: + * 2 MSBs represent the tolerance on the transmit power + * 6 LSBs which may be written to, represent a signed integer in twos-complement format, + * corresponding to the nominal transmit power of the device in decibels relative to 1 mW. + * All combinations less than 0xBF are valid. + */ +#define PHY_MIN_TX_POWER 0x20 + +/** @brief Internal parameter of the PHY layer. + * + * @details Position of the sign bit inside transmit power attribute.*/ +#define PHY_TRANSMIT_POWER_SIGN_BIT_POS 5 + +/** @brief Internal parameter of the PHY layer. + * + * @details This mask hides transmit power from transmit power attribute value, + * but leaves precision bitfield. + */ +#define PHY_TRANSMIT_POWER_MASK 0xC0 + +/** @brief Internal parameter of the PHY layer. + * + * @details This mask hides precision bitfield from transmit power attribute value, + * leaving transmit power unchanged. + */ +#define PHY_TRANSMIT_POWER_MASK_INV 0x3F + +// Possible transmit power +#define DBM_11 ( 11 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_10 ( 10 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_9 ( 9 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_8 ( 8 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_7 ( 7 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_6 ( 6 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_5 ( 5 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_4 ( 4 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_3 ( 3 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_2 ( 2 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_1 ( 1 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_0 ( 0 & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_1 (( -1) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_2 (( -2) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_3 (( -3) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_4 (( -4) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_5 (( -5) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_6 (( -6) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_7 (( -7) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_8 (( -8) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_9 (( -9) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_10 ((-10) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_11 ((-11) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_12 ((-12) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_13 ((-13) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_14 ((-14) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_15 ((-15) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_16 ((-16) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_17 ((-17) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_18 ((-18) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_19 ((-19) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_20 ((-20) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_21 ((-21) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_22 ((-22) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_23 ((-23) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_24 ((-24) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_25 ((-25) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_26 ((-26) & PHY_TRANSMIT_POWER_MASK_INV) +#define DBM_MIN_27 ((-27) & PHY_TRANSMIT_POWER_MASK_INV) + + +/**@brief Common PHY enumerations description used in various PHY primitives. + * + * @details See Table 18-PHY enumerations description for detailed info on the statuses up to PHY_READ_ONLY. + * The statuses with higher numbers are implementation specific and used for synchronous API only. + */ +typedef enum +{ + /** The CCA attempt has detected a busy channel. */ + PHY_BUSY = 0x00, + + /** The transceiver is asked to change its state while receiving. */ + PHY_BUSY_RX = 0x01, + + /** The transceiver is asked to change its state while transmitting. */ + PHY_BUSY_TX = 0x02, + + /** The transceiver is to be switched off immediately. */ + PHY_FORCE_TRX_OFF = 0x03, + + /** The CCA attempt has detected an idle channel. */ + PHY_IDLE = 0x04, + + /** A SET/GET request was issued with a parameter in the primitive that is + out of the valid range. */ + PHY_INVALID_PARAMETER = 0x05, + + /** The transceiver is in or is to be configured into the receiver enabled state. */ + PHY_RX_ON = 0x06, + + /** A SET/GET, an ED operation, or a transceiver state change was successful. */ + PHY_SUCCESS = 0x07, + + /** The transceiver is in or is to be configured into the transceiver disabled state. */ + PHY_TRX_OFF = 0x08, + + /** The transceiver is in or is to be configured into the transmitter enabled state. */ + PHY_TX_ON = 0x09, + + /** A SET/GET request was issued with the identifier of an attribute that is not supported. */ + PHY_UNSUPPORTED_ATTRIBUTE = 0x0A, + + /** A SET/GET request was issued with the identifier of an attribute that is read-only.*/ + PHY_READ_ONLY = 0x0B, + + + /* Statuses out of the standard. They are used for synchronous API */ + /** Transceiver is forced to change it's state to PHY_TX_ON (potential packet drop). */ + PHY_FORCE_TX_ON = 0xFC, + + /** Data cannot be sent due to failed CCA results.*/ + PHY_CHANNEL_ACCESS_FAILURE = 0xFD, + + /** Data had been sent but ACK frame hasn't been received.*/ + PHY_NO_ACK = 0xFE, + + /** PHY is not available for synchronous access */ + PHY_IS_NOT_AVAILABLE = 0xFF +} phy_enum_t; + +/**@brief PHY status type.*/ +typedef phy_enum_t phy_status_t; + +/** @} */ + +#endif // PHY_COMMON_H_INCLUDED |