Nol.A SDK Library
24.7.1
For IoT System Software Development
|
LoRaWAN 단말 장치들을 위한 MAC 프로토콜 More...
#include <LoRaMac.hpp>
Classes | |
class | ChannelParams_t |
struct | DatarateParams_t |
union | Header_t |
Public Types | |
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 } |
Public Types inherited from PacketRadio | |
enum | { TX_FIFO_SIZE = 10 , RX_FIFO_SIZE = 10 , TX_DONE_FIFO_SIZE = 10 } |
Public Member Functions | |
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 | begin (uint8_t(*getBatteryLevel)()=NULL) |
LoRaMAC layer initialization. More... | |
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) |
bool | isJoining () |
현재 OTAA Join 중인지 확인합니다. More... | |
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을 가져옵니다. | |
void | setRx2Datarate (uint8_t dr) |
Rx2에서 사용할 DR을 임의로 설정합니다. | |
uint32_t | getRx2Frequency () |
Rx2에서 사용할 주파수를 가져옵니다. | |
void | setRx2Frequency (uint32_t f) |
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... | |
void | onReceiveErrorFrame (void(*receiveHandler)(LoRaMac &radio, const RadioPacket &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... | |
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... | |
Public Attributes | |
uint8_t const | MaxNumChannels |
최대 채널 수 | |
const DatarateParams_t * | DR_TABLE |
uint8_t const | MaxDatarate |
최대 datarate index | |
uint8_t const | MinTxPower |
Minimum Tx power index. | |
uint8_t const | MaxTxPower |
Maximum Tx power index. | |
uint8_t const | AdrAckLimit |
ADR_ACK_LIMIT. | |
uint8_t const | AdrAckDelay |
ADR_ACK_DELAY. | |
uint32_t const | MAX_FCNT_GAP |
uint16_t const | RadioWakeupTime |
bool | useADR = true |
ADR 사용여부를 설정합니다. More... | |
bool | receivesDuplicate = false |
중복 프레임을 수신 여부를 설정합니다. More... | |
bool | framePending = false |
Frame pending. More... | |
uint32_t | Frequency |
uint8_t | Datarate |
EventInfoStatus_t | Status |
bool | AckReceived |
Protected Member Functions | |
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) |
Static Protected Member Functions | |
static void | OnTxDelayedTimerEvent (void *) |
static void | OnMacStateCheckTimerEvent (void *) |
Protected Attributes | |
bool | PublicNetwork = true |
bool | RepeaterSupport = false |
bool | joining = 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 |
void(* | receiveErrorFrameHandler )(LoRaMac &, const RadioPacket &frame) = nullptr |
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 |
MAC Commands | |
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 } |
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... | |
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... | |
LoRaWAN 단말 장치들을 위한 MAC 프로토콜
anonymous enum |
|
pure virtual |
Add a channel.
Adds a new channel to the channel list and activates the id in the channel mask. The frequency and DR specified in the params
MUST be valid values for each regional parameters specification.
[IN] | id - Id of the channel. |
[IN] | params - Channel parameters to set. |
Implemented in LoRaMacKR920Fsk, LoRaMacUS902, LoRaMacKR920, LoRaMacEU863, LoRaMacEU433, LoRaMacCN779, and LoRaMacAS923Japan.
|
virtual |
LoRaMAC layer initialization.
getBatteryLevel | Pointer to a function returning the device's battery level. Refer to the LoRaWAN Specification 5.5. |
Reimplemented in LoRaMacLBT.
|
virtual |
Over-the-Air Activation (OTAA) 방식의 join을 시도합니다.
devEui | Device EUI (MSB first) |
appEui | Application EUI (MSB first) |
appKey | Application Key |
Join은 1회만 시도하므로, 계속 join을 시도해야 할 경우 이 함수를 다시 호출하여야 합니다.
Reimplemented in LoRaMacUS902Hybrid, LoRaMacUS902, and LoRaMacKR920SKT.
error_t LoRaMac::cancelSend | ( | LoRaMacFrame * | frame | ) |
frame
전송을 취소합니다.
취소가 된 프레임은 onSendDone() 에 설정된 콜백함수에 의해 RadioPacket::CANCELED 결과로 호출됩니다.
frame | 취소할 프레임 |
ERROR_SUCCESS
: 취소 성공ERROR_FAIL
: 취소할 프레임이 없어서 실패ERROR_INVALID_ARGS
: frame 이 NULL std::array<uint8_t, 8> LoRaMac::getAppEui | ( | ) |
Application EUI를 가져옵니다.
Byte order는 MSB first 입니다.
std::array<uint8_t, 16> LoRaMac::getAppKey | ( | ) |
AppKey를 가져옵니다.
std::array<uint8_t, 16> LoRaMac::getAppSKey | ( | ) |
AppSKey를 가져옵니다.
|
pure virtual |
채널 정보를 가져옵니다.
index | 채널 번호 (0 ~ MaxNumChannels) |
다음 예제와 같이 현재 설정된 채널 정보들을 출력할 수 있습니다.
Implemented in LoRaMacUS902, LoRaMacKR920, LoRaMacEU863, LoRaMacEU433, LoRaMacCN779, and LoRaMacAS923Japan.
uint8_t LoRaMac::getCurrentDatarateIndex | ( | ) |
현재 설정된 기본 datarate 인덱스를 가져옵니다.
LoRaMacFrame 에서 별도로 파라미터를 지정하지 않은 경우 이 기본 datarate를 사용합니다. ADR을 사용하도록 설정되어 있으면 이 값은 네트워크 서버에 의해 변경됩니다. 여기서 반환된 datarate 인덱스를 getDatarate() 에 입력하여 자세한 정보를 가져올 수 있습니다.
uint8_t LoRaMac::getCurrentTxPowerIndex | ( | ) |
기본 Tx power index를 가져옵니다.
LoRaMacFrame 에서 별도로 파라미터를 지정하지 않은 경우 이 기본 Tx power를 사용합니다. ADR을 사용하도록 설정되어 있으면 이 값은 네트워크 서버에 의해 변경됩니다.
const DatarateParams_t* LoRaMac::getDatarate | ( | uint8_t | index | ) |
Datarate 정보를 가져옵니다.
index | Datarate index |
nullptr
: 유효한 datarate 정보nullptr
: 유효하지 않은 index다음 예제와 같이 getCurrentDatarateIndex() 와 조합하여 현재의 기본 datarate 정보를 가져올 수 있습니다.
std::array<uint8_t, 8> LoRaMac::getDevEui | ( | ) |
Device EUI를 가져옵니다.
Byte order는 MSB first 입니다.
DeviceClass_t LoRaMac::getDeviceClass | ( | ) |
Device class를 가져옵니다.
uint32_t LoRaMac::getDownLinkCounter | ( | ) |
Downlink용 frame counter (fCntDown) 를 가져옵니다.
이 값은 마지막으로 수신한 downlink 프레임에서 사용된 값입니다.
|
pure virtual |
최대 application payload 길이(N)를 가져옵니다.
dr | DR index |
repeater | Repeater mode 사용 여부 |
최대 application payload 길이(N)는 최대 payload 길이(M)에서 FOpt 길이를 뺀 값입니다. FOpt의 길이는 최소 8-byte 이며 더 커질 수도 있습니다.
Implemented in LoRaMacUS902, LoRaMacKR920SKT, LoRaMacKR920Fsk, LoRaMacKR920, LoRaMacEU863, LoRaMacEU433, LoRaMacCN779, and LoRaMacAS923Japan.
int32_t LoRaMac::getNetworkID | ( | ) |
Network ID를 가져옵니다.
std::array<uint8_t, 16> LoRaMac::getNwkSKey | ( | ) |
NwkSKey를 가져옵니다.
uint8_t LoRaMac::getPendingMacCommandsLength | ( | ) |
현재 송신 대기 중인 MAC commands의 길이를 가져옵니다.
송신 대기 중인 MAC commands의 길이에 따라 현재 전송 가능한 최대 MAC payload 길이가 달라질 수 있습니다.
예를 들어, DR0에서 현재 전송 가능한 payload 길이를 구하기 위해서는 다음과 같이 할 수 있습니다.
만약, Link Check 등 MAC commands가 pending 되었다면, 이 메서드는 0보다 큰 값을 반환합니다.
위와 같이 Link Check Request 와 Device Time Request MAC commands가 송신 대기되면, 이 메서드는 2를 반환합니다. 위 예제에서 LoRaWAN 인스턴스가 LoRaMacKR920 이면, 다음과 같이 출력될 것입니다.
|
inlinevirtual |
Rx1에 사용될, DR offset이 적용된 DR을 가져옵니다.
일반적으로 Rx1의 DR은 uplink의 DR에서 DR offset이 감소한 값을 사용되나, 대역별로 달라질 수 있습니다.
Reimplemented in LoRaMacUS902, and LoRaMacAS923Japan.
uint32_t LoRaMac::getUpLinkCounter | ( | ) |
Uplink용 frame counter (fCntUp) 를 가져옵니다.
이 값은 다음 uplink 프레임 전송 시 사용될 값입니다.
|
inline |
error_t LoRaMac::linkMulticastChannel | ( | MulticastParams_t * | channelParam | ) |
LoRaMAC multicast channel link service.
Links a multicast channel into the linked list.
[IN] | channelParam - Multicast channel parameters to link. |
void LoRaMac::onDeviceTimeAnswered | ( | void(*)(LoRaMac &, bool success, uint32_t tSeconds, uint8_t tFracSeconds) | func, |
RTCCalendar * | rtc | ||
) |
DeviceTimeReq MAC command에 대한 응답(DeviceTimeAns)이 올 경우 호출될 콜백함수와 RTCCalendar 를 지정합니다.
func | 콜백함수 포인터 |
rtc | 시간이 조정될 RTCCalendar 의 포인터 |
rtc
가 지정이 되면 해당 시계의 시간이 조정됩니다. 콜백함수는 그 이후에 호출됩니다.
void LoRaMac::onDevStatusAnsSent | ( | void(*)(LoRaMac &, uint8_t bat, uint8_t margin) | func | ) |
DevStatusAns MAC command를 송신시 호출될 콜백함수를 지정합니다.
다음과 같이 콜백함수에서 응답한 bat 와 margin 을 확인할 수 있습니다.
void LoRaMac::onDevStatusReqReceived | ( | void(*)(LoRaMac &) | func | ) |
DevStatusReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
MAC command 처리에 대한 결과를 원한다면 LoRaMac::onMACCommandReceived 를 사용하시기 바랍니다.
void LoRaMac::onDutyCycleAnsSent | ( | void(*)(LoRaMac &) | func | ) |
DutyCycleAns MAC command를 송신시 호출될 콜백함수를 지정합니다.
void LoRaMac::onDutyCycleReqReceived | ( | void(*)(LoRaMac &, const uint8_t *) | func | ) |
DutyCycleReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
콜백함수는 MAC command 처리 후, 호출됩니다.
MAC command 처리에 대한 결과를 원한다면 LoRaMac::onMACCommandReceived 를 사용하시기 바랍니다.
void LoRaMac::onJoin | ( | void(*)(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) | func | ) |
Join이 완료되었을 때 호출될 콜백함수를 지정합니다.
func | 콜백함수 포인터
|
void LoRaMac::onJoinRequested | ( | void(*)(LoRaMac &, uint32_t frequencyHz, const DatarateParams_t &) | func | ) |
JoinRequest 메시지를 보낼 때 호출될 콜백함수를 지정합니다.
func | 콜백함수 포인터 |
setup() 등에서 초기화 시 다음과 같이 설정합니다.
설정한 콜백함수가 호출되면 다음과 같이 사용할 수 있습니다.
void LoRaMac::onLinkADRAnsSent | ( | void(*)(LoRaMac &, uint8_t status) | func | ) |
LinkADRAns MAC command를 송신시 호출될 콜백함수를 지정합니다.
void LoRaMac::onLinkADRReqReceived | ( | void(*)(LoRaMac &, const uint8_t *) | func | ) |
LinkADRReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
콜백함수는 MAC command 처리 후, 호출됩니다.
MAC command 처리에 대한 결과를 원한다면 LoRaMac::onMACCommandReceived 를 사용하시기 바랍니다.
void LoRaMac::onLinkChecked | ( | void(*)(LoRaMac &, uint8_t demodMargin, uint8_t numGateways) | func | ) |
LinkCheckReq MAC command에 대한 응답(LinkCheckAns)이 올 경우 호출될 콜백함수를 지정합니다.
콜백함수는 MAC command 처리 후, 호출됩니다.
void LoRaMac::onNewChannelAnsSent | ( | void(*)(LoRaMac &, uint8_t status) | func | ) |
NewChannelAns MAC command를 송신시 호출될 콜백함수를 지정합니다.
다음과 같이 콜백함수에서 응답한 status 와 함께 getChannel() 등을 사용하여 현재 활성화된 채널 정보를 확인할 수 있습니다.
void LoRaMac::onNewChannelReqReceived | ( | void(*)(LoRaMac &, const uint8_t *) | func | ) |
NewChannelReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
콜백함수는 MAC command 처리 후, 호출됩니다.
MAC command 처리에 대한 결과를 원한다면 LoRaMac::onMACCommandReceived 를 사용하시기 바랍니다.
void LoRaMac::onReceive | ( | void(*)(LoRaMac &radio, const LoRaMacFrame *frame) | receiveHandler | ) |
수신이 완료될 때 호출될 함수를 지정합니다.
sendDoneHandler | 콜백 함수 포인터 |
setup() 등에서 초기화 시 다음과 같이 설정합니다.
설정한 콜백함수가 호출되면 다음과 같이 사용할 수 있습니다.
|
inline |
void LoRaMac::onRxParamSetupAnsSent | ( | void(*)(LoRaMac &, uint8_t status) | func | ) |
RxParamSetupAns MAC command를 송신시 호출될 콜백함수를 지정합니다.
void LoRaMac::onRxParamSetupReqReceived | ( | void(*)(LoRaMac &, const uint8_t *) | func | ) |
RxParamSetupReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
MAC command 처리에 대한 결과를 원한다면 LoRaMac::onMACCommandReceived 를 사용하시기 바랍니다.
void LoRaMac::onRxTimingSetupAnsSent | ( | void(*)(LoRaMac &) | func | ) |
RxTimingSetupReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
다음과 같이 콜백함수에서 getRx1Delay(), getRx2Delay() 등을 사용하여 Rx windows의 시작 시간을 확인할 수 있습니다.
void LoRaMac::onRxTimingSetupReqReceived | ( | void(*)(LoRaMac &, const uint8_t *) | func | ) |
RxTimingSetupReq MAC command를 수신시 호출될 콜백함수를 지정합니다.
콜백함수는 MAC command 처리 후, 호출됩니다.
MAC command 처리에 대한 결과를 원한다면 LoRaMac::onMACCommandReceived 를 사용하시기 바랍니다.
void LoRaMac::onSendDone | ( | void(*)(LoRaMac &, LoRaMacFrame *) | sendDoneHandler | ) |
전송이 완료될 때 호출될 함수를 지정합니다.
sendDoneHandler | 콜백 함수 포인터 |
setup() 등에서 초기화 시 다음과 같이 설정합니다.
설정한 콜백함수가 호출되면 다음과 같이 사용할 수 있습니다.
|
pure virtual |
LoRaMAC channel remove service.
Deactivates the id in the channel mask.
[IN] | id - Id of the channel. |
Implemented in LoRaMacUS902, LoRaMacKR920, LoRaMacEU863, LoRaMacEU433, LoRaMacCN779, and LoRaMacAS923Japan.
error_t LoRaMac::requestDeviceTime | ( | RTCCalendar * | rtc | ) |
DeviceTimeReq MAC command를 요청합니다.
func | DeviceTimeReq MAC command가 실제 전송될 때 호출될 콜백함수 |
이 MAC command는 다음 uplink 메시지 전송시 함께 전송됩니다. 즉시 전송을 원한다면 길이가 0인 빈 LoRaMacFrame 을 전송하십시오.
이 MAC command가 전송될 때 LoRaMac::onMACCommandSend 가 가리키는 함수가 콜백됩니다.
DeviceTimeReq에 대한 응답으로 DeviceTimeAns가 오면 onMACCommandReceived 에서 지정한 콜백함수가 호출됩니다.
error_t LoRaMac::requestDeviceTime | ( | RTCCalendar * | rtc, |
void(*)(LoRaMac &) | func | ||
) |
DeviceTimeReq MAC command를 요청합니다.
func | DeviceTimeReq MAC command가 실제 전송될 때 호출될 콜백함수 |
error_t LoRaMac::requestDeviceTime | ( | void(*)(LoRaMac &) | func = nullptr | ) |
DeviceTimeReq MAC command를 요청합니다.
func | DeviceTimeReq MAC command가 실제 전송될 때 호출될 콜백함수 |
이 함수는 LoRaMac::requestDeviceTime(&System, ...) 과 같습니다.
|
virtual |
LinkCheckReq MAC command를 요청합니다.
이 MAC command는 다음 uplink 메시지 전송시 함께 전송됩니다. 즉시 전송을 원한다면 길이가 0인 빈 LoRaMacFrame 을 전송하십시오.
이 MAC command가 전송될 때 LoRaMac::onMACCommandSend 가 가리키는 함수가 콜백됩니다.
LinkCheckReq에 대한 응답으로 LinkCheckAns가 오면 LoRaMac::onMACCommandReceived 가 가리키는 함수가 콜백됩니다.
Reimplemented in LoRaMacKR920SKT.
error_t LoRaMac::requestLinkCheck | ( | void(*)(LoRaMac &) | func | ) |
LinkCheckReq MAC command를 요청합니다.
func | LinkCheckReq MAC command가 실제 전송될 때 호출될 콜백함수 |
error_t LoRaMac::send | ( | LoRaMacFrame * | frame | ) |
frame
을 전송합니다.
frame | 전송할 프레임 |
ERROR_SUCCESS
: 전송 큐에 성공적으로 입력됨ERROR_FAIL
: port 가 0, 지원하지 않는 datarate 또는 채널을 지정하는 등 프레임 오류로 인한 실패ERROR_BUSY
: 전송 큐가 가득차서 실패다음과 같이 사용할 수 있습니다.
frame
의 길이가 현재 DR에서 전송이 가능하나 송신 대기 중인 MAC commands가 있어 전송이 불가능한 경우, FPort를 0으로 하여 송신 대기 중인 MAC commands만 먼저 전송하고, 이후에 frame
을 전송합니다.
송신 대기 중인 MAC commands 존재 여부와 상관없이 frame
길이 자체가 현재 DR로 전송이 불가한 경우, frame
의 result 가 RadioPacket::TOO_BIG 으로 설정되어 sendDone() 으로 콜백됩니다.
ADR을 사용하고, confirmed uplink 재전송을 사용하는 경우 (LoRaMacFrame::numTrials > 1), 전송 실패시마다 DR이 줄어들어, 전송 가능한 payload 길이가 줄어들 수 있습니다. 이 경우, 전송 가능한 DR 까지만 내려갑니다. 즉, frame
길이가 DR3 까지는 전송이 가능하다면, DR3 까지만 떨어집니다.
DR 별 전송 가능한 MAC payload 길이를 알고 싶거나, 현재 송신 대기 중인 MAC commands 길이를 알고 싶은 경우, 각각 getMaxPayload() 와 getPendingMacCommandsLength() 메서드를 참고하세요.
|
virtual |
ABP를 사용하도록 설정합니다.
[in] | nwkSKey | Network session key |
[in] | appSKey | Application session key |
[in] | devAddr | Device address |
Reimplemented in LoRaMacKR920SKT.
error_t LoRaMac::setCurrentDatarateIndex | ( | uint8_t | index | ) |
기본 datarate를 설정합니다.
index | 사용할 datarate index |
ERROR_SUCCESS
: 성공ERROR_INVALID_ARGS
: 유효하지 않은 indexERROR_NOT_SUPPORTED
: 현재 가용 채널에서 지원하지 않는 index error_t LoRaMac::setCurrentTxPowerIndex | ( | uint8_t | index | ) |
기본 Tx power를 설정합니다.
index | 사용할 Tx power index |
ERROR_SUCCESS
: 성공ERROR_INVALID_ARGS
: 유효하지 않은 index error_t LoRaMac::setDeviceClass | ( | DeviceClass_t | c | ) |
Device class를 설정합니다.
이 함수는 Tx가 진행 중일 때가 아니면 즉시 새로운 클래스 c
로 변경됩니다.
c | 새로운 class |
ERROR_SUCCESS
: 성공ERROR_BUSY
: Tx가 진행 중이라 변경할 수 없음ERROR_INVALID_ARGS
: 잘못된 인자ERROR_NOT_SUPPORTED
: 아직 지원하지 않는 class (Class B)
|
virtual |
Downlink용 frame counter (fCntDown) 를 설정합니다.
설정된 값은 마지막으로 수신한 downlink 프레임에서 사용된 값으로 가정합니다.
Reimplemented in LoRaMacKR920SKT.
void LoRaMac::setPublicNetwork | ( | bool | enable | ) |
공용 LoRaWAN 네트워크를 사용할지 설정합니다.
[IN] | enable true 이면 공용 네트워크를 사용합니다. |
|
virtual |
Uplink용 frame counter (fCntUp) 를 설정합니다.
설정된 값은 다음 uplink 프레임 전송 시 사용됩니다.
Reimplemented in LoRaMacKR920SKT.
error_t LoRaMac::unlinkMulticastChannel | ( | MulticastParams_t * | channelParam | ) |
LoRaMAC multicast channel unlink service.
Unlinks a multicast channel from the linked list.
[IN] | channelParam - Multicast channel parameters to unlink. |
bool LoRaMac::framePending = false |
Frame pending.
네트워크 서버에서 더 보낼 데이터가 있음을 의미합니다. Downlink 후에 값이 변합니다. onReceive() 에서 지정한 콜백함수 등에서 이 값을 참고하여 추가적인 uplink를 전송할지 여부를 결정할 수 있습니다.
void(* LoRaMac::onMACCommandReceived) (LoRaMac &mac, MacCmd_t cid, const uint8_t *reqData, int16_t reqLen, const uint8_t *ansData, int16_t ansLen) = nullptr |
MAC command 수신시 호출될 함수 포인터
이 함수 포인터에 함수를 지정하면 MAC command 수신시 호출됩니다.
함수 포인터의 파라미터는 다음과 같습니다.
mac | LoRaWAN MAC instance |
cid | MAC command ID |
reqData | Request data. 이번에 수신한 MAC command가 answer인 경우, 이전에 송신한 request. |
reqLen | Request data의 길이. 수신한 응답에 대해 요청한 적 없는 MAC command인 경우 -1. |
ansData | Answer data. 이번에 수신한 MAC command가 request인 경우, 곧 송신할 answer. |
ansLen | Answer data의 길이. 응답을 보낼 수 없는 경우 -1. 또는 기 요청에 대한 응답이 오지 않은 경우 -1. |
reqData
, reqLen
, ansData
, 및 ansLen
는 CID를 포함하지 않습니다.
여러 MAC command 수신시 순차적으로 호출됩니다.
다음 코드를 참고하세요.
지정한 콜백 함수 내에서는 별도로 취해야할 동작은 없습니다. 수신한 MAC command에 대한 처리는 LoRaMac 에서 수행합니다.
수신한 MAC command가 request인 경우, answer는 다음 uplink 시 송신됩니다. 즉, ansData
, 및 ansLen
은 다음 uplink시 송신될 MAC command 입니다. 실제 송신될 시점의 콜백은 LoRaMac::onMACCommandSend 를 참고하십시오.
void(* LoRaMac::onMACCommandSend) (LoRaMac &mac, MacCmd_t cid, const uint8_t *data, uint8_t len) = nullptr |
MAC command 송신시 호출될 함수 포인터
이 함수 포인터에 함수를 지정하면 MAC command 송신시 호출됩니다.
함수 포인터의 파라미터는 다음과 같습니다.
mac | LoRaWAN MAC instance |
cid | MAC command ID |
data | 송신한 MAC command data |
len | 송신한 MAC command 길이 |
여러 MAC command 송신시 순차적으로 호출됩니다.
bool LoRaMac::receivesDuplicate = false |
중복 프레임을 수신 여부를 설정합니다.
중복된 fCntDown 값을 가진 downlink 프레임에 대한 수신 여부를 설정합니다. true
이면, 중복 confirmed down 프레임에 대한 acknowleged 처리와 함께 onReceive() 콜백을 호출하여 해당 프레임을 애플리케이션에서 처리할 수 있도록 합니다.
bool LoRaMac::useADR = true |
ADR 사용여부를 설정합니다.
ADR을 사용하면 네트워크 서버에 의해 전송시 사용할 datarate 및 Tx power 가 변경됩니다. 이 값은 getCurrentDatarateIndex() 및 getCurrentTxPowerIndex() 로 확인할 수 있습니다. LoRaMacFrame 에 전송 파라미터를 설정하기 앞서 이 변수를 false
로 지정해야 합니다. 그렇지 않으면 ADR 에 따른 DR 및 Tx power로 프레임을 전송합니다.