SDK
23.9.2
For IoT System Software Development
|
Listen-Before-Talk을 지원하는 LoRaWAN MAC 프로토콜 More...
#include <LoRaMacLBT.hpp>
Public Member Functions | |
LoRaMacLBT (LoRaRadioChip &, int8_t defTxPower, int8_t defDatarate, bool dutyCycleOn, uint8_t numChannels, const DatarateParams_t *drTable, uint8_t maxDatarate, uint8_t minTxPower, uint8_t maxTxPower, uint8_t adrAckLimit, uint8_t adrAckDelay, uint32_t maxFCntGap, uint16_t radioWakeupTime=1) | |
virtual error_t | begin (uint8_t(*getBatteryLevel)()=NULL) |
LoRaMAC layer initialization. More... | |
Public Member Functions inherited from LoRaMac | |
LoRaMac (LoRaRadioChip &, int8_t defTxPower, int8_t defDatarate, bool dutyCycleOn, uint8_t numChannels, const DatarateParams_t *drTable, uint8_t maxDatarate, uint8_t minTxPower, uint8_t maxTxPower, uint8_t adrAckLimit, uint8_t adrAckDelay, uint32_t maxFCntGap, uint16_t radioWakeupTime=1) | |
virtual error_t | addChannel (uint8_t id, ChannelParams_t params)=0 |
Add a channel. More... | |
virtual error_t | removeChannel (uint8_t id)=0 |
LoRaMAC channel remove service. More... | |
error_t | linkMulticastChannel (MulticastParams_t *channelParam) |
LoRaMAC multicast channel link service. More... | |
error_t | unlinkMulticastChannel (MulticastParams_t *channelParam) |
LoRaMAC multicast channel unlink service. More... | |
virtual error_t | beginJoining (const uint8_t *devEui, const uint8_t *appEui, const uint8_t *appKey) |
Over-the-Air Activation (OTAA) 방식의 join을 시도합니다. More... | |
error_t | beginJoining (const uint8_t *devEui, const uint8_t *appKey) |
void | onJoin (void(*func)(LoRaMac &mac, bool result, const uint8_t *devEui, const uint8_t *appEui, const uint8_t *appKey, const uint8_t *nwkSKey, const uint8_t *appSKey, uint32_t devAddr, const RadioPacket &frame, uint32_t airTime)) |
Join이 완료되었을 때 호출될 콜백함수를 지정합니다. More... | |
void | onJoinRequested (void(*func)(LoRaMac &, uint32_t frequencyHz, const DatarateParams_t &)) |
JoinRequest 메시지를 보낼 때 호출될 콜백함수를 지정합니다. More... | |
virtual void | setABP (const uint8_t *nwkSKey, const uint8_t *appSKey, uint32_t devAddr) |
ABP를 사용하도록 설정합니다. More... | |
void | setPublicNetwork (bool enable) |
공용 LoRaWAN 네트워크를 사용할지 설정합니다. More... | |
DeviceClass_t | getDeviceClass () |
Device class를 가져옵니다. More... | |
error_t | setDeviceClass (DeviceClass_t c) |
Device class를 설정합니다. More... | |
error_t | setDeviceClass (DeviceClass_t c, bool sendDeviceModeInd, void(*func)(LoRaMac &, DeviceClass_t)) |
virtual const ChannelParams_t * | getChannel (uint8_t index)=0 |
채널 정보를 가져옵니다. More... | |
const DatarateParams_t * | getDatarate (uint8_t index) |
Datarate 정보를 가져옵니다. More... | |
uint8_t | getRx2Datarate () |
Rx2에서 사용할 DR을 가져옵니다. | |
uint32_t | getRx2Frequency () |
Rx2에서 사용할 주파수를 가져옵니다. | |
uint8_t | getRx1DrOffset () |
Rx1에 적용될 DR offset을 가져옵니다. | |
virtual uint8_t | getRx1Datarate () |
Rx1에 사용될, DR offset이 적용된 DR을 가져옵니다. More... | |
virtual uint32_t | getRx1Frequency ()=0 |
Rx1에서 사용할 주파수를 가져옵니다. | |
int32_t | getNetworkID () |
Network ID를 가져옵니다. More... | |
uint32_t | getDeviceAddress () |
Device address를 가져옵니다. | |
uint16_t | getRx1Delay () |
Tx 종료 후 Rx1 window가 열릴 때까지의 지연 시간(단위: 밀리초)을 가져옵니다. | |
uint16_t | getRx2Delay () |
Tx 종료 후 Rx2 window가 열릴 때까지의 지연 시간(단위: 밀리초)을 가져옵니다. | |
uint16_t | getJoinAcceptDelay1 () |
JoinRequest 송신 후 Rx1 window가 열릴 때까지의 지연 시간(단위: 밀리초)을 가져옵니다. | |
uint16_t | getJoinAcceptDelay2 () |
JoinRequest 송신 후 Rx2 window가 열릴 때까지의 지연 시간(단위: 밀리초)을 가져옵니다. | |
uint8_t | getCurrentDatarateIndex () |
현재 설정된 기본 datarate 인덱스를 가져옵니다. More... | |
error_t | setCurrentDatarateIndex (uint8_t index) |
기본 datarate를 설정합니다. More... | |
uint8_t | getCurrentTxPowerIndex () |
기본 Tx power index를 가져옵니다. More... | |
error_t | setCurrentTxPowerIndex (uint8_t index) |
기본 Tx power를 설정합니다. More... | |
uint32_t | getUpLinkCounter () |
Uplink용 frame counter (fCntUp) 를 가져옵니다. More... | |
virtual void | setUpLinkCounter (uint32_t) |
Uplink용 frame counter (fCntUp) 를 설정합니다. More... | |
uint32_t | getDownLinkCounter () |
Downlink용 frame counter (fCntDown) 를 가져옵니다. More... | |
virtual void | setDownLinkCounter (uint32_t) |
Downlink용 frame counter (fCntDown) 를 설정합니다. More... | |
uint8_t | getNumRepetitions () |
현재 설정된 unconfirmed uplink frame에 적용되는 반복 전송 횟수를 가져옵니다. | |
uint8_t | getMaxDutyCycle () |
현재의 최대 duty cycle을 가져옵니다. | |
error_t | send (LoRaMacFrame *frame) |
frame 을 전송합니다. More... | |
error_t | cancelSend (LoRaMacFrame *frame) |
frame 전송을 취소합니다. More... | |
void | onSendDone (void(*sendDoneHandler)(LoRaMac &, LoRaMacFrame *)) |
전송이 완료될 때 호출될 함수를 지정합니다. More... | |
void | onReceive (void(*receiveHandler)(LoRaMac &radio, const LoRaMacFrame *frame)) |
수신이 완료될 때 호출될 함수를 지정합니다. More... | |
virtual uint8_t | getMaxPayload (uint8_t dr, bool repeater=false)=0 |
최대 application payload 길이(N)를 가져옵니다. More... | |
uint8_t | getPendingMacCommandsLength () |
현재 송신 대기 중인 MAC commands의 길이를 가져옵니다. More... | |
std::array< uint8_t, 8 > | getDevEui () |
Device EUI를 가져옵니다. More... | |
std::array< uint8_t, 8 > | getAppEui () |
Application EUI를 가져옵니다. More... | |
std::array< uint8_t, 16 > | getAppKey () |
AppKey를 가져옵니다. More... | |
std::array< uint8_t, 16 > | getNwkSKey () |
NwkSKey를 가져옵니다. More... | |
std::array< uint8_t, 16 > | getAppSKey () |
AppSKey를 가져옵니다. More... | |
virtual error_t | requestLinkCheck () |
LinkCheckReq MAC command를 요청합니다. More... | |
error_t | requestLinkCheck (void(*func)(LoRaMac &)) |
LinkCheckReq MAC command를 요청합니다. More... | |
void | onLinkChecked (void(*func)(LoRaMac &, uint8_t demodMargin, uint8_t numGateways)) |
LinkCheckReq MAC command에 대한 응답(LinkCheckAns)이 올 경우 호출될 콜백함수를 지정합니다. More... | |
error_t | requestDeviceTime (RTCCalendar *rtc) |
DeviceTimeReq MAC command를 요청합니다. More... | |
error_t | requestDeviceTime (RTCCalendar *rtc, void(*func)(LoRaMac &)) |
DeviceTimeReq MAC command를 요청합니다. More... | |
error_t | requestDeviceTime (void(*func)(LoRaMac &)=nullptr) |
DeviceTimeReq MAC command를 요청합니다. More... | |
void | onDeviceTimeAnswered (void(*func)(LoRaMac &, bool success, uint32_t tSeconds, uint8_t tFracSeconds), RTCCalendar *rtc) |
DeviceTimeReq MAC command에 대한 응답(DeviceTimeAns)이 올 경우 호출될 콜백함수와 RTCCalendar 를 지정합니다. More... | |
void | onLinkADRReqReceived (void(*func)(LoRaMac &, const uint8_t *)) |
LinkADRReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
void | onLinkADRAnsSent (void(*func)(LoRaMac &, uint8_t status)) |
LinkADRAns MAC command를 송신시 호출될 콜백함수를 지정합니다. More... | |
void | onDutyCycleReqReceived (void(*func)(LoRaMac &, const uint8_t *)) |
DutyCycleReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
void | onDutyCycleAnsSent (void(*func)(LoRaMac &)) |
DutyCycleAns MAC command를 송신시 호출될 콜백함수를 지정합니다. More... | |
void | onRxParamSetupReqReceived (void(*func)(LoRaMac &, const uint8_t *)) |
RxParamSetupReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
void | onRxParamSetupAnsSent (void(*func)(LoRaMac &, uint8_t status)) |
RxParamSetupAns MAC command를 송신시 호출될 콜백함수를 지정합니다. More... | |
void | onDevStatusReqReceived (void(*func)(LoRaMac &)) |
DevStatusReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
void | onDevStatusAnsSent (void(*func)(LoRaMac &, uint8_t bat, uint8_t margin)) |
DevStatusAns MAC command를 송신시 호출될 콜백함수를 지정합니다. More... | |
void | onNewChannelReqReceived (void(*func)(LoRaMac &, const uint8_t *)) |
NewChannelReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
void | onNewChannelAnsSent (void(*func)(LoRaMac &, uint8_t status)) |
NewChannelAns MAC command를 송신시 호출될 콜백함수를 지정합니다. More... | |
void | onRxTimingSetupReqReceived (void(*func)(LoRaMac &, const uint8_t *)) |
RxTimingSetupReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
void | onRxTimingSetupAnsSent (void(*func)(LoRaMac &)) |
RxTimingSetupReq MAC command를 수신시 호출될 콜백함수를 지정합니다. More... | |
Public Member Functions inherited from PacketRadio | |
error_t | send (RadioPacket *frame) |
frame 을 전송합니다. More... | |
error_t | cancelSend (RadioPacket *frame) |
frame 전송을 취소합니다. More... | |
void | onSendDone (void(*sendDoneHandler)(PacketRadio &, RadioPacket *)) |
전송이 완료될 때 호출될 함수를 지정합니다. More... | |
uint8_t | getNumPendingSendFrames () |
전송 대기 중인 프레임 갯수를 구합니다. More... | |
void | onReceive (void(*receiveHandler)(PacketRadio &, const RadioPacket *)) |
수신이 완료될 때 호출될 함수를 지정합니다. More... | |
void | setEventListener (PacketRadioEventListener &) |
전송 완료 및 수신 이벤트에 대해 PacketRadioEventListener 를 구현한 클래스로 콜백합니다. More... | |
Static Protected Member Functions | |
static void | OnCCATimeoutEvent (void *) |
Static Protected Member Functions inherited from LoRaMac | |
static void | OnTxDelayedTimerEvent (void *) |
static void | OnMacStateCheckTimerEvent (void *) |
Additional Inherited Members | |
Public Types inherited from LoRaMac | |
enum | DeviceClass_t { CLASS_A = 0, CLASS_B = 1, CLASS_C = 2 } |
enum | BatteryLevel_t { BAT_LEVEL_EXT_SRC = 0x00, BAT_LEVEL_EMPTY = 0x01, BAT_LEVEL_FULL = 0xFE, BAT_LEVEL_NO_MEASURE = 0xFF } |
enum | { ERROR_INVALID_FREQUENCY = -100, ERROR_INVALID_DATARATE = -101, ERROR_INVALID_FREQ_AND_DR = -102 } |
enum | MacCmd_t { MAC_CMD_LINK_CHECK = 0x02, MAC_CMD_LINK_ADR = 0x03, MAC_CMD_DUTY_CYCLE = 0x04, MAC_CMD_RX_PARAM_SETUP = 0x05, MAC_CMD_DEV_STATUS = 0x06, MAC_CMD_NEW_CHANNEL = 0x07, MAC_CMD_RX_TIMING_SETUP = 0x08, MAC_CMD_TX_PARAM_SETUP = 0x09, MAC_CMD_DL_CHANNEL = 0x0A, MAC_CMD_DEV_TIME = 0x0D } |
Public Types inherited from PacketRadio | |
enum | { TX_FIFO_SIZE = 10, RX_FIFO_SIZE = 10, TX_DONE_FIFO_SIZE = 10 } |
Public Attributes inherited from LoRaMac | |
const uint8_t | MaxNumChannels |
최대 채널 수 | |
const DatarateParams_t * | DR_TABLE |
const uint8_t | MaxDatarate |
최대 datarate index | |
const uint8_t | MinTxPower |
Minimum Tx power index. | |
const uint8_t | MaxTxPower |
Maximum Tx power index. | |
const uint8_t | AdrAckLimit |
ADR_ACK_LIMIT. | |
const uint8_t | AdrAckDelay |
ADR_ACK_DELAY. | |
const uint32_t | MAX_FCNT_GAP |
const uint16_t | RadioWakeupTime |
bool | useADR = true |
ADR 사용여부를 설정합니다. More... | |
bool | receivesDuplicate = false |
중복 프레임을 수신 여부를 설정합니다. More... | |
bool | framePending = false |
Frame pending. More... | |
void(* | onMACCommandReceived )(LoRaMac &mac, MacCmd_t cid, const uint8_t *reqData, int16_t reqLen, const uint8_t *ansData, int16_t ansLen) = nullptr |
MAC command 수신시 호출될 함수 포인터 More... | |
void(* | onMACCommandSend )(LoRaMac &mac, MacCmd_t cid, const uint8_t *data, uint8_t len) = nullptr |
MAC command 송신시 호출될 함수 포인터 More... | |
Protected Types inherited from LoRaMac | |
enum | eLoRaMacFrameType { FRAME_TYPE_JOIN_REQ = 0x00, FRAME_TYPE_JOIN_ACCEPT = 0x01, FRAME_TYPE_DATA_UNCONFIRMED_UP = 0x02, FRAME_TYPE_DATA_UNCONFIRMED_DOWN = 0x03, FRAME_TYPE_DATA_CONFIRMED_UP = 0x04, FRAME_TYPE_DATA_CONFIRMED_DOWN = 0x05, FRAME_TYPE_RFU = 0x06, FRAME_TYPE_PROPRIETARY = 0x07 } |
enum | { ADR_ACK_LIMIT = 64, ADR_ACK_DELAY = 32, PHY_PAYLOAD_MAX_LENGTH = 255, MAC_COMMAND_MAX_LENGTH = 15, FRM_PAYLOAD_MAX_LENGTH = 242 } |
enum | EventInfoStatus_t { EVENT_INFO_STATUS_OK = 0, EVENT_INFO_STATUS_ERROR, EVENT_INFO_STATUS_TX_TIMEOUT, EVENT_INFO_STATUS_RX1_TIMEOUT, EVENT_INFO_STATUS_RX2_TIMEOUT, EVENT_INFO_STATUS_JOIN_FAIL, EVENT_INFO_STATUS_DOWNLINK_REPEATED, EVENT_INFO_STATUS_ADDRESS_FAIL, EVENT_INFO_STATUS_MIC_FAIL, EVENT_INFO_STATUS_CHANNEL_BUSY } |
enum | { MAC_IDLE = 0x00000000ul, MAC_TX_RUNNING = 0x00000001ul, MAC_RX = 0x00000002ul, MAC_ACK_REQ = 0x00000004ul, MAC_ACK_RETRY = 0x00000008ul, MAC_TX_DELAYED = 0x00000010ul, MAC_TX_CONFIG = 0x00000020ul } |
enum | FCntDownStatus_t { NEW_FCNT_OK = 0, NEW_FCNT_DUPLICATE, NEW_FCNT_MAX_GAP_EXCEEDED } |
Protected Member Functions inherited from LoRaMac | |
virtual void | updateTxTime (uint32_t now)=0 |
virtual void | updateChannels (const uint8_t *CFList, uint8_t CFListLen)=0 |
virtual void | enableDefaultChannels ()=0 |
virtual uint8_t | applyADRConfig (uint16_t chMask, uint8_t chMaskCntl, int8_t txPower, int8_t datarate, uint8_t nbRep)=0 |
virtual void | applyRxParamConfig (uint8_t &status, int8_t datarate, int8_t drOffset, uint32_t freq)=0 |
virtual uint8_t | applyNewChannelConfig (const uint8_t *payload)=0 |
virtual int8_t | applyDlChannel (const uint8_t *payload) |
virtual void | applyTxParamSetup (uint8_t payload) |
virtual bool | checkTxFrame (LoRaMacFrame *frame) |
virtual void | sendDone (RadioPacket *frame, RadioPacket::Result_t) |
virtual void | receive (LoRaMacFrame *frame) |
virtual void | notifyJoin () |
virtual error_t | SendFrameOnChannel (const ChannelParams_t &channel) |
int8_t | getChannelIndex (uint32_t frequency) |
int8_t | getDatarateIndex (DatarateParams_t &dr) |
int8_t | getDatarateIndex (LoRaMacFrame &f) |
int8_t | getDatarateIndex (LoRaMacFrame *f) |
bool | checkTxFrame (RadioPacket *frame) |
void | handleRxFrame (RadioPacket *frame) |
void | log (const char *name, const char *msg) |
void | logTx (const char *name, uint32_t freq, uint8_t drIndex, int8_t power) |
void | logRx (const char *name, uint32_t freq, uint8_t drIndex, uint8_t window) |
error_t | setupRxWindow (uint8_t slot) |
void | onRxWindow2TimerEvent () |
virtual FCntDownStatus_t | getFCntDown (uint16_t fCntFHDR, uint32_t &newFCnt) |
bool | requestsAck () |
virtual void | eventTxDelayed () |
virtual bool | isAvailableDR (uint8_t drIndex, void *chMask=nullptr)=0 |
void | computeRxWindowParameters (uint8_t drIndex, uint16_t *timeout, int16_t *offset, uint8_t minRxSymbols=6, uint32_t systemMaxRxError=10) |
Protected Member Functions inherited from PacketRadio | |
virtual void | receive (RadioPacket *frame) |
RadioPacket * | getNextTxFrame () |
error_t | enqueueTxFrame (RadioPacket *frame) |
virtual void | notifySendDone (RadioPacket *frame) |
virtual void | notifyReceive (RadioPacket *frame) |
Protected Attributes inherited from LoRaMac | |
bool | PublicNetwork = true |
bool | RepeaterSupport = false |
bool | isJoinRequested = false |
bool | isJoined = false |
bool | isLinkCheckRequested = false |
bool | isDeviceTimeRequested = false |
bool | serverAckRequested = false |
bool | DutyCycleOn |
bool | ackTimeoutRetry = false |
bool | stateCheckerPosted = false |
bool | isOptNegSet = false |
LoRaRadioChip & | Radio |
std::array< uint8_t, 8 > | devEui |
std::array< uint8_t, 8 > | appEui |
std::array< uint8_t, 16 > | appKey |
std::array< uint8_t, 16 > | nwkSKey |
std::array< uint8_t, 16 > | appSKey |
uint16_t | LoRaMacDevNonce |
int32_t | netID = -1 |
uint32_t | LoRaMacDevAddr |
MulticastParams_t * | MulticastChannels = NULL |
DeviceClass_t | deviceClass = CLASS_A |
uint8_t | Buffer [PHY_PAYLOAD_MAX_LENGTH] |
uint16_t | BufferPktLen = 0 |
uint8_t | LoRaMacPayload [PHY_PAYLOAD_MAX_LENGTH] |
uint32_t | UpLinkCounter = 1 |
uint32_t | DownLinkCounter = 0 |
uint32_t | AdrAckCounter = 0 |
uint8_t | MacCommandsBufferIndex = 0 |
uint8_t | MacCommandsBuffer [MAC_COMMAND_MAX_LENGTH] |
struct { | |
uint32_t Frequency | |
uint8_t Datarate | |
} | Rx2Channel |
uint8_t | Rx1DrOffset = 0 |
int8_t | ChannelsTxPower |
int8_t | ChannelsDatarate |
int8_t | ChannelsDefaultDatarate |
uint8_t | ChannelsNbRepDefault = 1 |
uint8_t | ChannelsNbRep |
uint8_t | ChannelsNbRepCounter = 0 |
uint8_t | MaxDCycle = 0 |
uint16_t | AggregatedDCycle = 1 |
uint32_t | AggregatedLastTxDoneTime = 0 |
uint32_t | AggregatedTimeOff = 0 |
uint8_t | currentCH |
uint32_t | LoRaMacState = MAC_IDLE |
Timer | MacStateCheckTimer |
uint8_t(* | getBatteryLevel )() |
Timer | TxDelayedTimer |
Timer | RxWindowTimer1 |
Timer | RxWindowTimer2 |
Timer | TxTimeoutTimer |
uint16_t | ReceiveDelay1 |
uint16_t | ReceiveDelay2 |
uint16_t | JoinAcceptDelay1 |
uint16_t | JoinAcceptDelay2 |
uint16_t | rxWindow1Delay |
uint16_t | rxWindow2Delay |
uint16_t | rxWindow1Timeout |
uint16_t | rxWindow2Timeout |
int16_t | rxWindow1Offset |
int16_t | rxWindow2Offset |
Timer | AckTimeoutTimer |
uint8_t | AckTimeoutRetries = 1 |
uint8_t | AckTimeoutRetriesCounter = 1 |
uint32_t | TxTimeOnAir |
struct { | |
EventInfoStatus_t Status | |
} | McpsIndication |
struct { | |
EventInfoStatus_t Status | |
bool AckReceived | |
uint32_t UpLinkCounter | |
} | McpsConfirm |
struct timeval | tDevTimeRequested |
RTCCalendar * | rtc = NULL |
uint8_t | RxSlot = 0 |
bool | isMcpsReq = false |
bool | isMcpsInd = false |
bool | isMacDone = false |
LoRaMacFrame * | txFrame = NULL |
LoRaMacFrame * | rxFrame = NULL |
void(* | joinHandler )(LoRaMac &, bool result, const uint8_t *devEui, const uint8_t *appEui, const uint8_t *appKey, const uint8_t *nwkSKey, const uint8_t *appSKey, uint32_t devAddr, const RadioPacket &frame, uint32_t airTime) = NULL |
Protected Attributes inherited from PacketRadio | |
Queue< RadioPacket * > | txFifo |
Queue< RadioPacket * > | rxFifo |
Queue< RadioPacket * > | txDoneFifo |
void(* | callbackSendDone )(PacketRadio &, RadioPacket *) |
void(* | callbackReceive )(PacketRadio &, const RadioPacket *) |
PacketRadioEventListener * | eventListener |
Listen-Before-Talk을 지원하는 LoRaWAN MAC 프로토콜
|
virtual |
LoRaMAC layer initialization.
getBatteryLevel | Pointer to a function returning the device's battery level. Refer to the LoRaWAN Specification 5.5. |
Reimplemented from LoRaMac.