| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652 |
- /*!
- * \file LoRaMacTypes.h
- *
- * \brief LoRa MAC layer internal types definition. Please do not include in application sources.
- *
- * \copyright Revised BSD License, see section \ref LICENSE.
- *
- * \code
- * ______ _
- * / _____) _ | |
- * ( (____ _____ ____ _| |_ _____ ____| |__
- * \____ \| ___ | (_ _) ___ |/ ___) _ \
- * _____) ) ____| | | || |_| ____( (___| | | |
- * (______/|_____)_|_|_| \__)_____)\____)_| |_|
- * (C)2013 Semtech
- *
- * ___ _____ _ ___ _ _____ ___ ___ ___ ___
- * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
- * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
- * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
- * embedded.connectivity.solutions===============
- *
- * \endcode
- *
- * \author Miguel Luis ( Semtech )
- *
- * \author Daniel Jaeckle ( STACKFORCE )
- *
- * \author Johannes Bruder ( STACKFORCE )
- *
- * addtogroup LORAMAC
- * \{
- *
- */
- #ifndef __LORAMAC_TYPES_H__
- #define __LORAMAC_TYPES_H__
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include <stdint.h>
- #include <stdbool.h>
- #include "lora-radio-timer.h"
- /*!
- * Start value for unicast keys enumeration
- */
- #define LORAMAC_CRYPTO_UNICAST_KEYS 0
- /*!
- * Start value for multicast keys enumeration
- */
- #define LORAMAC_CRYPTO_MULTICAST_KEYS 127
- /*!
- * LoRaWAN devices classes definition
- *
- * LoRaWAN Specification V1.0.2, chapter 2.1
- */
- typedef enum DeviceClass_e
- {
- /*!
- * LoRaWAN device class A
- *
- * LoRaWAN Specification V1.0.2, chapter 3
- */
- CLASS_A = 0x00,
- /*!
- * LoRaWAN device class B
- *
- * LoRaWAN Specification V1.0.2, chapter 8
- */
- CLASS_B = 0x01,
- /*!
- * LoRaWAN device class C
- *
- * LoRaWAN Specification V1.0.2, chapter 17
- */
- CLASS_C = 0x02,
- }DeviceClass_t;
- /*!
- * LoRaWAN Frame type enumeration to differ between the possible data up/down frame configurations.
- *
- * Note: The naming is implementation specific since there is no definition
- * in the LoRaWAN specification included.
- */
- typedef enum eFType
- {
- /*!
- * Frame type A
- *
- * FOptsLen > 0, Fopt present, FPort > 0, FRMPayload present
- */
- FRAME_TYPE_A,
- /*!
- * Frame type B
- *
- * FOptsLen > 0, Fopt present, FPort not present, FRMPayload not present
- */
- FRAME_TYPE_B,
- /*!
- * Frame type C
- *
- * FOptsLen = 0, Fopt not present, FPort = 0 , FRMPayload containing MAC commands
- */
- FRAME_TYPE_C,
- /*!
- * Frame type D
- *
- * FOptsLen = 0, Fopt not present, FPort > 0 , FRMPayload present
- */
- FRAME_TYPE_D,
- }FType_t;
- /*!
- * LoRaWAN Frame counter identifier.
- */
- typedef enum eFCntIdentifier
- {
- /*!
- * Uplink frame counter which is incremented with each uplink.
- */
- FCNT_UP = 0,
- /*!
- * Network downlink frame counter which is incremented with each downlink on FPort 0
- * or when the FPort field is missing.
- */
- N_FCNT_DOWN,
- /*!
- * Application downlink frame counter which is incremented with each downlink
- * on a port different than 0.
- */
- A_FCNT_DOWN,
- /*!
- * In case if the device is connected to a LoRaWAN 1.0 Server,
- * this counter is used for every kind of downlink frame.
- */
- FCNT_DOWN,
- /*!
- * Multicast downlink counter for index 0
- */
- MC_FCNT_DOWN_0,
- /*!
- * Multicast downlink counter for index 1
- */
- MC_FCNT_DOWN_1,
- /*!
- * Multicast downlink counter for index 2
- */
- MC_FCNT_DOWN_2,
- /*!
- * Multicast downlink counter for index 3
- */
- MC_FCNT_DOWN_3,
- }FCntIdentifier_t;
- /*!
- * LoRaMac Key identifier
- */
- typedef enum eKeyIdentifier
- {
- /*!
- * Application root key
- */
- APP_KEY = 0,
- /*!
- * Application root key
- * Used to derive McRootKey for 1.0.x devices
- */
- GEN_APP_KEY,
- /*!
- * Network root key
- */
- NWK_KEY,
- /*!
- * Join session integrity key
- */
- J_S_INT_KEY,
- /*!
- * Join session encryption key
- */
- J_S_ENC_KEY,
- /*!
- * Forwarding Network session integrity key
- */
- F_NWK_S_INT_KEY,
- /*!
- * Serving Network session integrity key
- */
- S_NWK_S_INT_KEY,
- /*!
- * Network session encryption key
- */
- NWK_S_ENC_KEY,
- /*!
- * Application session key
- */
- APP_S_KEY,
- /*!
- * Multicast root key
- */
- MC_ROOT_KEY,
- /*!
- * Multicast key encryption key
- */
- MC_KE_KEY = LORAMAC_CRYPTO_MULTICAST_KEYS,
- /*!
- * Multicast root key index 0
- */
- MC_KEY_0,
- /*!
- * Multicast Application session key index 0
- */
- MC_APP_S_KEY_0,
- /*!
- * Multicast Network session key index 0
- */
- MC_NWK_S_KEY_0,
- /*!
- * Multicast root key index 1
- */
- MC_KEY_1,
- /*!
- * Multicast Application session key index 1
- */
- MC_APP_S_KEY_1,
- /*!
- * Multicast Network session key index 1
- */
- MC_NWK_S_KEY_1,
- /*!
- * Multicast root key index 2
- */
- MC_KEY_2,
- /*!
- * Multicast Application session key index 2
- */
- MC_APP_S_KEY_2,
- /*!
- * Multicast Network session key index 2
- */
- MC_NWK_S_KEY_2,
- /*!
- * Multicast root key index 3
- */
- MC_KEY_3,
- /*!
- * Multicast Application session key index 3
- */
- MC_APP_S_KEY_3,
- /*!
- * Multicast Network session key index 3
- */
- MC_NWK_S_KEY_3,
- /*!
- * Zero key for slot randomization in class B
- */
- SLOT_RAND_ZERO_KEY,
- /*!
- * No Key
- */
- NO_KEY,
- }KeyIdentifier_t;
- /*!
- * LoRaMac Crypto address identifier
- */
- typedef enum eAddressIdentifier
- {
- /*!
- * Multicast Address for index 0
- */
- MULTICAST_0_ADDR = 0,
- /*!
- * Multicast Address for index 1
- */
- MULTICAST_1_ADDR = 1,
- /*!
- * Multicast Address for index 2
- */
- MULTICAST_2_ADDR = 2,
- /*!
- * Multicast Address for index 3
- */
- MULTICAST_3_ADDR = 3,
- /*!
- * Unicast End-device address
- */
- UNICAST_DEV_ADDR = 4,
- }AddressIdentifier_t;
- /*
- * Multicast Rx window parameters
- */
- typedef union uMcRxParams
- {
- struct
- {
- /*!
- * Reception frequency of the ping slot windows
- */
- uint32_t Frequency;
- /*!
- * Datarate of the ping slot
- */
- int8_t Datarate;
- /*!
- * This parameter is necessary for class B operation. It defines the
- * periodicity of the multicast downlink slots
- */
- uint16_t Periodicity;
- }ClassB;
- struct
- {
- /*!
- * Reception frequency of the ping slot windows
- */
- uint32_t Frequency;
- /*!
- * Datarate of the ping slot
- */
- int8_t Datarate;
- }ClassC;
- }McRxParams_t;
- /*!
- * Multicast channel
- */
- typedef struct sMcChannelParams
- {
- /*!
- * Multicats channel LoRaWAN class B or C
- */
- DeviceClass_t Class;
- /*!
- * True if the entry is active
- */
- bool IsEnabled;
- /*
- * Address identifier
- */
- AddressIdentifier_t GroupID;
- /*!
- * Address
- */
- uint32_t Address;
- /*!
- * Encrypted multicast key
- */
- uint8_t *McKeyE;
- /*!
- * Minimum multicast frame counter value
- */
- uint32_t FCountMin;
- /*!
- * Maximum multicast frame counter value
- */
- uint32_t FCountMax;
- /*!
- * Multicast reception parameters
- */
- McRxParams_t RxParams;
- }McChannelParams_t;
- /*!
- * Multicast context
- */
- typedef struct sMulticastCtx
- {
- /*!
- * Multicast channel parameters
- */
- McChannelParams_t ChannelParams;
- /*!
- * Downlink counter
- */
- uint32_t* DownLinkCounter;
- /*
- * Following parameters are only used for ClassB multicast channels
- */
- /*!
- * Number of multicast slots. The variable can be
- * calculated as follows:
- * PingNb = 128 / ( 1 << periodicity ), where
- * 0 <= periodicity <= 7
- */
- uint8_t PingNb;
- /*!
- * Period of the multicast slots. The variable can be
- * calculated as follows:
- * PingPeriod = 4096 / PingNb
- */
- uint16_t PingPeriod;
- /*!
- * Ping offset of the multicast channel for Class B
- */
- uint16_t PingOffset;
- }MulticastCtx_t;
- /*!
- * LoRaMac join-request / rejoin type identifier
- */
- typedef enum eJoinReqIdentifier
- {
- /*!
- * Rejoin type 0
- */
- REJOIN_REQ_0 = 0x00,
- /*!
- * Rejoin type 1
- */
- REJOIN_REQ_1 = 0x01,
- /*!
- * Rejoin type 2
- */
- REJOIN_REQ_2 = 0x02,
- /*!
- * Join-request
- */
- JOIN_REQ = 0xFF,
- }JoinReqIdentifier_t;
- /*!
- * LoRaMAC mote MAC commands
- *
- * LoRaWAN Specification V1.1.0, chapter 5, table 4
- */
- typedef enum eLoRaMacMoteCmd
- {
- /*!
- * LinkCheckReq
- */
- MOTE_MAC_LINK_CHECK_REQ = 0x02,
- /*!
- * LinkADRAns
- */
- MOTE_MAC_LINK_ADR_ANS = 0x03,
- /*!
- * DutyCycleAns
- */
- MOTE_MAC_DUTY_CYCLE_ANS = 0x04,
- /*!
- * RXParamSetupAns
- */
- MOTE_MAC_RX_PARAM_SETUP_ANS = 0x05,
- /*!
- * DevStatusAns
- */
- MOTE_MAC_DEV_STATUS_ANS = 0x06,
- /*!
- * NewChannelAns
- */
- MOTE_MAC_NEW_CHANNEL_ANS = 0x07,
- /*!
- * RXTimingSetupAns
- */
- MOTE_MAC_RX_TIMING_SETUP_ANS = 0x08,
- /*!
- * TXParamSetupAns
- */
- MOTE_MAC_TX_PARAM_SETUP_ANS = 0x09,
- /*!
- * DlChannelAns
- */
- MOTE_MAC_DL_CHANNEL_ANS = 0x0A,
- /*!
- * DeviceTimeReq
- */
- MOTE_MAC_DEVICE_TIME_REQ = 0x0D,
- /*!
- * PingSlotInfoReq
- */
- MOTE_MAC_PING_SLOT_INFO_REQ = 0x10,
- /*!
- * PingSlotFreqAns
- */
- MOTE_MAC_PING_SLOT_FREQ_ANS = 0x11,
- /*!
- * BeaconTimingReq
- */
- MOTE_MAC_BEACON_TIMING_REQ = 0x12,
- /*!
- * BeaconFreqAns
- */
- MOTE_MAC_BEACON_FREQ_ANS = 0x13,
- }LoRaMacMoteCmd_t;
- /*!
- * LoRaMAC server MAC commands
- *
- * LoRaWAN Specification V1.1.0 chapter 5, table 4
- */
- typedef enum eLoRaMacSrvCmd
- {
- /*!
- * ResetInd
- */
- SRV_MAC_RESET_CONF = 0x01,
- /*!
- * LinkCheckAns
- */
- SRV_MAC_LINK_CHECK_ANS = 0x02,
- /*!
- * LinkADRReq
- */
- SRV_MAC_LINK_ADR_REQ = 0x03,
- /*!
- * DutyCycleReq
- */
- SRV_MAC_DUTY_CYCLE_REQ = 0x04,
- /*!
- * RXParamSetupReq
- */
- SRV_MAC_RX_PARAM_SETUP_REQ = 0x05,
- /*!
- * DevStatusReq
- */
- SRV_MAC_DEV_STATUS_REQ = 0x06,
- /*!
- * NewChannelReq
- */
- SRV_MAC_NEW_CHANNEL_REQ = 0x07,
- /*!
- * RXTimingSetupReq
- */
- SRV_MAC_RX_TIMING_SETUP_REQ = 0x08,
- /*!
- * NewChannelReq
- */
- SRV_MAC_TX_PARAM_SETUP_REQ = 0x09,
- /*!
- * DlChannelReq
- */
- SRV_MAC_DL_CHANNEL_REQ = 0x0A,
- /*!
- * DeviceTimeAns
- */
- SRV_MAC_DEVICE_TIME_ANS = 0x0D,
- /*!
- * PingSlotInfoAns
- */
- SRV_MAC_PING_SLOT_INFO_ANS = 0x10,
- /*!
- * PingSlotChannelReq
- */
- SRV_MAC_PING_SLOT_CHANNEL_REQ = 0x11,
- /*!
- * BeaconTimingAns
- */
- SRV_MAC_BEACON_TIMING_ANS = 0x12,
- /*!
- * BeaconFreqReq
- */
- SRV_MAC_BEACON_FREQ_REQ = 0x13,
- }LoRaMacSrvCmd_t;
- /*!
- * LoRaMAC band parameters definition
- */
- typedef struct sBand
- {
- /*!
- * Duty cycle
- */
- uint16_t DCycle;
- /*!
- * Maximum Tx power
- */
- int8_t TxMaxPower;
- /*!
- * Time stamp of the last JoinReq Tx frame.
- */
- TimerTime_t LastJoinTxDoneTime;
- /*!
- * Time stamp of the last Tx frame
- */
- TimerTime_t LastTxDoneTime;
- /*!
- * Holds the time where the device is off
- */
- TimerTime_t TimeOff;
- }Band_t;
- /*!
- * LoRaMAC frame types
- *
- * LoRaWAN Specification V1.0.2, chapter 4.2.1, table 1
- */
- typedef enum eLoRaMacFrameType
- {
- /*!
- * LoRaMAC join request frame
- */
- FRAME_TYPE_JOIN_REQ = 0x00,
- /*!
- * LoRaMAC join accept frame
- */
- FRAME_TYPE_JOIN_ACCEPT = 0x01,
- /*!
- * LoRaMAC unconfirmed up-link frame
- */
- FRAME_TYPE_DATA_UNCONFIRMED_UP = 0x02,
- /*!
- * LoRaMAC unconfirmed down-link frame
- */
- FRAME_TYPE_DATA_UNCONFIRMED_DOWN = 0x03,
- /*!
- * LoRaMAC confirmed up-link frame
- */
- FRAME_TYPE_DATA_CONFIRMED_UP = 0x04,
- /*!
- * LoRaMAC confirmed down-link frame
- */
- FRAME_TYPE_DATA_CONFIRMED_DOWN = 0x05,
- /*!
- * LoRaMAC proprietary frame
- */
- FRAME_TYPE_PROPRIETARY = 0x07,
- }LoRaMacFrameType_t;
- /*!
- * LoRaMAC Battery level indicator
- */
- typedef enum eLoRaMacBatteryLevel
- {
- /*!
- * External power source
- */
- BAT_LEVEL_EXT_SRC = 0x00,
- /*!
- * Battery level empty
- */
- BAT_LEVEL_EMPTY = 0x01,
- /*!
- * Battery level full
- */
- BAT_LEVEL_FULL = 0xFE,
- /*!
- * Battery level - no measurement available
- */
- BAT_LEVEL_NO_MEASURE = 0xFF,
- }LoRaMacBatteryLevel_t;
- #ifdef __cplusplus
- }
- #endif
- #endif // __LORAMAC_TYPES_H__
|