1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lupyuen-LoRaMac-node-nuttx

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
LoRaMacClassB.h 15 КБ
Копировать Редактировать Исходные данные Просмотреть построчно История
Miguel Luis Отправлено 4 лет назад 243864e
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
/*!
* \file LoRaMacClassB.h
*
* \brief LoRa MAC Class B layer implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
* ______ _
* / _____) _ | |
* ( (____ _____ ____ _| |_ _____ ____| |__
* \____ \| ___ | (_ _) ___ |/ ___) _ \
* _____) ) ____| | | || |_| ____( (___| | | |
* (______/|_____)_|_|_| \__)_____)\____)_| |_|
* (C)2013 Semtech
*
* ___ _____ _ ___ _ _____ ___ ___ ___ ___
* / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
* \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
* |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
* embedded.connectivity.solutions===============
*
* \endcode
*
* \author Miguel Luis ( Semtech )
*
* \author Gregory Cristian ( Semtech )
*
* \author Daniel Jaeckle ( STACKFORCE )
*
* \defgroup LORAMACCLASSB LoRa MAC Class B layer implementation
* This module specifies the API implementation of the LoRaMAC Class B layer.
* This is a placeholder for a detailed description of the LoRaMac
* layer and the supported features.
* \{
*/
#ifndef __LORAMACCLASSB_H__
#define __LORAMACCLASSB_H__
#ifdef __cplusplus
extern "C"
{
#endif
#include "systime.h"
#include "LoRaMacTypes.h"
/*!
* States of the class B beacon acquisition and tracking
*/
typedef enum eBeaconState
{
/*!
* Initial state to acquire the beacon
*/
BEACON_STATE_ACQUISITION,
/*!
* Beacon acquisition state when a time reference is available
*/
BEACON_STATE_ACQUISITION_BY_TIME,
/*!
* Handles the state when the beacon reception fails
*/
BEACON_STATE_TIMEOUT,
/*!
* Handles the state when the beacon was missed due to an uplink
*/
BEACON_STATE_BEACON_MISSED,
/*!
* Reacquisition state which applies the algorithm to enlarge the reception
* windows
*/
BEACON_STATE_REACQUISITION,
/*!
* The node has locked a beacon successfully
*/
BEACON_STATE_LOCKED,
/*!
* The beacon state machine is stopped due to operations with higher priority
*/
BEACON_STATE_HALT,
/*!
* The node currently operates in the beacon window and is idle. In this
* state, the temperature measurement takes place
*/
BEACON_STATE_IDLE,
/*!
* The node operates in the guard time of class B
*/
BEACON_STATE_GUARD,
/*!
* The node is in receive mode to lock a beacon
*/
BEACON_STATE_RX,
/*!
* The nodes switches the device class
*/
BEACON_STATE_LOST,
}BeaconState_t;
/*!
* States of the class B ping slot mechanism
*/
typedef enum ePingSlotState
{
/*!
* Calculation of the ping slot offset
*/
PINGSLOT_STATE_CALC_PING_OFFSET,
/*!
* State to set the timer to open the next ping slot
*/
PINGSLOT_STATE_SET_TIMER,
/*!
* The node is in idle state
*/
PINGSLOT_STATE_IDLE,
/*!
* The node opens up a ping slot window
*/
PINGSLOT_STATE_RX,
}PingSlotState_t;
/*!
* Class B ping slot context structure
*/
typedef struct sPingSlotContext
{
/*!
* Ping slot length time in ms
*/
uint32_t PingSlotWindow;
/*!
* Ping offset
*/
uint16_t PingOffset;
/*!
* Current symbol timeout. The node enlarges this variable in case of beacon
* loss.
*/
uint16_t SymbolTimeout;
/*!
* The multicast channel which will be enabled next.
*/
MulticastCtx_t *NextMulticastChannel;
}PingSlotContext_t;
/*!
* Class B beacon context structure
*/
typedef struct sBeaconContext
{
struct sBeaconCtrl
{
/*!
* Set if the node receives beacons
*/
uint8_t BeaconMode : 1;
/*!
* Set if the node has acquired the beacon
*/
uint8_t BeaconAcquired : 1;
/*!
* Set if a beacon delay was set for the beacon acquisition
*/
uint8_t BeaconDelaySet : 1;
/*!
* Set if a beacon channel was set for the beacon acquisition
*/
uint8_t BeaconChannelSet : 1;
/*!
* Set if beacon acquisition is pending
*/
uint8_t AcquisitionPending : 1;
/*!
* Set if the beacon state machine will be resumed
*/
uint8_t ResumeBeaconing : 1;
}Ctrl;
/*!
* Current temperature
*/
float Temperature;
/*!
* Beacon time received with the beacon frame
*/
SysTime_t BeaconTime;
/*!
* Time when the last beacon was received
*/
SysTime_t LastBeaconRx;
/*!
* Time when the next beacon will be received
*/
SysTime_t NextBeaconRx;
/*!
* This is the time where the RX window will be opened.
* Its base is NextBeaconRx with temperature compensations
* and RX window movement.
*/
TimerTime_t NextBeaconRxAdjusted;
/*!
* Current symbol timeout. The node enlarges this variable in case of beacon
* loss.
*/
uint16_t SymbolTimeout;
/*!
* Specifies how much time the beacon window will be moved.
*/
TimerTime_t BeaconWindowMovement;
/*!
* Beacon timing channel for next beacon
*/
uint8_t BeaconTimingChannel;
/*!
* Delay for next beacon in ms
*/
TimerTime_t BeaconTimingDelay;
TimerTime_t TimeStamp;
/*!
* Beacons transmit time precision determined using
* param field of beacon frame format.
*/
SysTime_t BeaconTimePrecision;
}BeaconContext_t;
/*!
* Data structure which contains the callbacks
*/
typedef struct sLoRaMacClassBCallback
{
/*!
* \brief Measures the temperature level
*
* \retval Temperature level
*/
float ( *GetTemperatureLevel )( void );
/*!
*\brief Will be called each time a Radio IRQ is handled by the MAC
* layer.
*
*\warning Runs in a IRQ context. Should only change variables state.
*/
void ( *MacProcessNotify )( void );
}LoRaMacClassBCallback_t;
/*!
* Data structure which pointers to the properties LoRaMAC
*/
typedef struct sLoRaMacClassBParams
{
/*!
* Pointer to the MlmeIndication structure
*/
MlmeIndication_t *MlmeIndication;
/*!
* Pointer to the McpsIndication structure
*/
McpsIndication_t *McpsIndication;
/*!
* Pointer to the MlmeConfirm structure
*/
MlmeConfirm_t *MlmeConfirm;
/*!
* Pointer to the LoRaMacFlags structure
*/
LoRaMacFlags_t *LoRaMacFlags;
/*!
* Pointer to the LoRaMac device address
*/
uint32_t *LoRaMacDevAddr;
/*!
* Pointer to the LoRaMac region definition
*/
LoRaMacRegion_t *LoRaMacRegion;
/*!
* Pointer to the LoRaMacParams structure
*/
LoRaMacParams_t *LoRaMacParams;
/*!
* Pointer to the multicast channel list
*/
MulticastCtx_t *MulticastChannels;
/*!
* Pointer to the activation type
*/
ActivationType_t *NetworkActivation;
}LoRaMacClassBParams_t;
/*!
* Signature of callback function to be called by this module when the
* non-volatile needs to be saved.
*/
typedef void ( *LoRaMacClassBNvmEvent )( void );
/*!
* \brief Initialize LoRaWAN Class B
*
* \param [IN] classBParams Information and feedback parameter
* \param [IN] callbacks Contains the callback which the Class B implementation needs
* \param [IN] nvm Pointer to an external non-volatile memory data structure.
*/
void LoRaMacClassBInit( LoRaMacClassBParams_t *classBParams, LoRaMacClassBCallback_t *callbacks,
LoRaMacClassBNvmData_t* nvm );
/*!
* \brief Set the state of the beacon state machine
*
* \param [IN] beaconState Beacon state.
*/
void LoRaMacClassBSetBeaconState( BeaconState_t beaconState );
/*!
* \brief Set the state of the ping slot state machine
*
* \param [IN] pingSlotState Ping slot state.
*/
void LoRaMacClassBSetPingSlotState( PingSlotState_t pingSlotState );
/*!
* \brief Set the state of the multicast slot state machine
*
* \param [IN] pingSlotState multicast slot state.
*/
void LoRaMacClassBSetMulticastSlotState( PingSlotState_t multicastSlotState );
/*!
* \brief Verifies if an acquisition procedure is in progress
*
* \retval [true, if the acquisition is in progress; false, if not]
*/
bool LoRaMacClassBIsAcquisitionInProgress( void );
/*!
* \brief State machine of the Class B for beaconing
*/
void LoRaMacClassBBeaconTimerEvent( void* context );
/*!
* \brief State machine of the Class B for ping slots
*/
void LoRaMacClassBPingSlotTimerEvent( void* context );
/*!
* \brief State machine of the Class B for multicast slots
*/
void LoRaMacClassBMulticastSlotTimerEvent( void* context );
/*!
* \brief Receives and decodes the beacon frame
*
* \param [IN] payload Pointer to the payload
* \param [IN] size Size of the payload
* \retval [true, if the node has received a beacon; false, if not]
*/
bool LoRaMacClassBRxBeacon( uint8_t *payload, uint16_t size );
/*!
* \brief The function validates, if the node expects a beacon
* at the current time.
*
* \retval [true, if the node expects a beacon; false, if not]
*/
bool LoRaMacClassBIsBeaconExpected( void );
/*!
* \brief The function validates, if the node expects a ping slot
* at the current time.
*
* \retval [true, if the node expects a ping slot; false, if not]
*/
bool LoRaMacClassBIsPingExpected( void );
/*!
* \brief The function validates, if the node expects a multicast slot
* at the current time.
*
* \retval [true, if the node expects a multicast slot; false, if not]
*/
bool LoRaMacClassBIsMulticastExpected( void );
/*!
* \brief Verifies if the acquisition pending bit is set
*
* \retval [true, if the bit is set; false, if not]
*/
bool LoRaMacClassBIsAcquisitionPending( void );
/*!
* \brief Verifies if the beacon mode active bit is set
*
* \retval [true, if the bit is set; false, if not]
*/
bool LoRaMacClassBIsBeaconModeActive( void );
/*!
* \brief Stops the beacon and ping slot operation
*/
void LoRaMacClassBHaltBeaconing( void );
/*!
* \brief Resumes the beacon and ping slot operation
*/
void LoRaMacClassBResumeBeaconing( void );
/*!
* \brief Sets the periodicity of the ping slots
*
* \param [IN] periodicity Periodicity
*/
void LoRaMacClassBSetPingSlotInfo( uint8_t periodicity );
/*!
* \brief Switches the device class
*
* \param [IN] nextClass Device class to switch to
*
* \retval LoRaMacStatus_t Status of the operation.
*/
LoRaMacStatus_t LoRaMacClassBSwitchClass( DeviceClass_t nextClass );
/*!
* \brief LoRaMAC ClassB MIB-Get
*
* \details The mac information base service to get attributes of the LoRaMac
* Class B layer.
*
* \param [IN] mibRequest - MIB-GET-Request to perform. Refer to \ref MibRequestConfirm_t.
*
* \retval LoRaMacStatus_t Status of the operation. Possible returns are:
* \ref LORAMAC_STATUS_OK,
* \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
* \ref LORAMAC_STATUS_PARAMETER_INVALID.
*/
LoRaMacStatus_t LoRaMacClassBMibGetRequestConfirm( MibRequestConfirm_t *mibGet );
/*!
* \brief LoRaMAC Class B MIB-Set
*
* \details The mac information base service to set attributes of the LoRaMac
* Class B layer.
*
* \param [IN] mibRequest - MIB-SET-Request to perform. Refer to \ref MibRequestConfirm_t.
*
* \retval LoRaMacStatus_t Status of the operation. Possible returns are:
* \ref LORAMAC_STATUS_OK,
* \ref LORAMAC_STATUS_BUSY,
* \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
* \ref LORAMAC_STATUS_PARAMETER_INVALID.
*/
LoRaMacStatus_t LoRaMacMibClassBSetRequestConfirm( MibRequestConfirm_t *mibSet );
/*!
* \brief This function handles the PING_SLOT_FREQ_ANS
*/
void LoRaMacClassBPingSlotInfoAns( void );
/*!
* \brief This function handles the PING_SLOT_CHANNEL_REQ
*
* \param [IN] datarate Device class to switch to
* \param [IN] frequency Device class to switch to
*
* \retval Status for the MAC answer.
*/
uint8_t LoRaMacClassBPingSlotChannelReq( uint8_t datarate, uint32_t frequency );
/*!
* \brief This function handles the BEACON_TIMING_ANS
*
* \param [IN] beaconTimingDelay The beacon timing delay
* \param [IN] beaconTimingChannel The beacon timing channel
* \param [IN] lastRxDone The time of the last frame reception
*/
void LoRaMacClassBBeaconTimingAns( uint16_t beaconTimingDelay, uint8_t beaconTimingChannel, TimerTime_t lastRxDone );
/*!
* \brief This function handles the ClassB DEVICE_TIME_ANS
*/
void LoRaMacClassBDeviceTimeAns( void );
/*!
* \brief This function handles the BEACON_FREQ_REQ
*
* \param [IN] frequency Frequency to set
*
* \retval [true, if MAC shall send an answer; false, if not]
*/
bool LoRaMacClassBBeaconFreqReq( uint32_t frequency );
/*!
* \brief Queries the ping slot window time
*
* \param [IN] txTimeOnAir TX time on air for the next uplink
*
* \retval Returns the time the uplink should be delayed
*/
TimerTime_t LoRaMacClassBIsUplinkCollision( TimerTime_t txTimeOnAir );
/*!
* \brief Stops the timers for the RX slots. This includes the
* timers for ping and multicast slots.
*/
void LoRaMacClassBStopRxSlots( void );
/*!
* \brief Starts the timers for the RX slots. This includes the
* timers for ping and multicast slots.
*/
void LoRaMacClassBStartRxSlots( void );
/*!
* \brief Starts the timers for the RX slots. This includes the
* timers for ping and multicast slots.
*
* \param [IN] periodicity Downlink periodicity
*
* \param [IN] multicastChannel Related multicast channel
*/
void LoRaMacClassBSetMulticastPeriodicity( MulticastCtx_t* multicastChannel );
/*!
* \brief Sets the FPending bit status of the related downlink slot
*
* \param [IN] address Slot address, could be unicast or multicast
*
* \param [IN] fPendingSet Set to 1, if the fPending bit in the
* sequence is set, otherwise 0.
*/
void LoRaMacClassBSetFPendingBit( uint32_t address, uint8_t fPendingSet );
/*!
* \brief Class B process function.
*/
void LoRaMacClassBProcess( void );
#ifdef __cplusplus
}
#endif
#endif // __LORAMACCLASSB_H__

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/lupyuen-LoRaMac-node-nuttx.git
git@gitlife.ru:oschina-mirror/lupyuen-LoRaMac-node-nuttx.git
oschina-mirror
lupyuen-LoRaMac-node-nuttx
lupyuen-LoRaMac-node-nuttx
v4.5.2