Nol.A SDK Library 26.11.2
For IoT System Software Development
Loading...
Searching...
No Matches
LMac Class Reference

LMac Class. More...

#include <LMac.hpp>

Inheritance diagram for LMac:
LoRaRadioChip PacketRadioChip

Public Member Functions

 LMac (LoRaRadioChip &chip)
virtual error_t begin () override
virtual void setMaxChanges (uint8_t n)
 MaxChanges를 설정합니다.
virtual void setMaxBackoffs (uint8_t n)
 Max Backoff를 설정합니다.
virtual uint8_t getNumChanges ()
 채널 등 파라미터 변경을 시도한 횟수를 반환합니다.
virtual error_t transmit (RadioPacket *p) override
 LMAC을 사용하여 LoRa 패킷을 전송 시도합니다.
virtual void reset ()
 상태를 초기화합니다.
virtual void doCAD () override
 사용 금지
virtual error_t readFrame (RadioPacket *frame) override
 수신 버퍼에서 프레임을 읽습니다.
virtual bool bufferIsEmpty () override
virtual void flushBuffer () override
virtual void sleep () override
virtual void wakeup () override
virtual void setChannel (uint32_t channel) override
 채널을 설정합니다.
virtual uint32_t getChannel () override
 현재 설정된 채널을 반환합니다.
virtual State_t getStatus () override
virtual int16_t getRssi () override
 RSSI를 dB 단위로 읽습니다.
virtual void setStandby () override
virtual void setPublicNetwork (bool enable) override
 Syncword를 설정합니다.
bool supportsLoRaSpreadingFactor (Radio::LoRaSF_t sf) const override
 Returns whether this driver supports the given LoRa spreading factor.
virtual void transmitCW () override
 Continuous Wave (CW) 신호를 송출합니다. (LoRa 전용).
virtual void setRadio (Radio::LoRaSF_t sf, Radio::LoRaBW_t bw, Radio::LoRaCR_t cr, bool crcOn=true, bool iqInverted=false, uint16_t symbTimeout=0, uint16_t preambleLen=8, uint8_t payloadLen=0, bool freqHopOn=false, uint8_t hopPeriod=0) override
virtual void setRadio (uint32_t datarate, uint32_t bandwidth, uint32_t bandwidthAfc, uint32_t fDev, bool crcOn=true, uint16_t symbTimeout=0, uint16_t preambleLen=5, uint8_t payloadLen=0) override
virtual void setTxPower (int8_t dBm) override
 송신 출력을 설정합니다.
virtual int8_t getTxPower () override
 현재 설정된 송신 출력을 반환합니다.
virtual bool cca () override
 채널이 혼잡한지 아닌지 검사합니다.
virtual void setFreqOffset (int32_t offsetHz) override
 중심 주파수 오차를 제거하기 위한 offset을 설정합니다.
virtual int32_t getFreqOffset () override
 중심 주파수 오차를 제거하기 위한 offset을 가져옵니다.
Public Member Functions inherited from LoRaRadioChip
uint32_t getTimeOnAir (uint8_t payloadLen)
Public Member Functions inherited from PacketRadioChip
void setCcaThreshold (int16_t dBthreshold)
virtual int64_t getDeviceTimestamp ()
 장치 내부의 timestamp 값을 읽습니다.

Additional Inherited Members

Public Types inherited from LoRaRadioChip
enum  State_t { RF_IDLE = 0 , RF_RX_RUNNING = 1 , RF_TX_RUNNING = 2 , RF_CAD = 3 }
Static Public Member Functions inherited from LoRaRadioChip
static uint32_t TimeOnAir (Radio::LoRaSF_t, Radio::LoRaBW_t, Radio::LoRaCR_t, uint16_t preambleLen, bool fixLen, uint8_t payloadLen, bool crcOn)
static uint32_t TimeOnAir (uint32_t datarate, uint32_t bandwidth, uint16_t preambleLen, bool fixLen, uint8_t payloadLen, bool crcOn)
Public Attributes inherited from LoRaRadioChip
void(* onCADCompleted )(void *ctx, bool) = nullptr
 LoRa CAD (Carrier Activity Detection) 검사가 완료되면 호출될 콜백함수 포인터
void * ctxOnCADCompleted
 onCADCompleted 가 호출될 때 함께 전달될 context
int8_t antennaGain = 0
 Antenna gain을 고려한 송신 출력(EIRP)을 사용하기 위한 antenna gain (단위: dBi).
void(* onRxTimeout )(void *, GPIOInterruptInfo_t *) = nullptr
void * ctxOnRxTimeout
Public Attributes inherited from PacketRadioChip
void(* onRxStarted )(void *, GPIOInterruptInfo_t *)
 수신이 시작될 때 호출될 콜백함수 포인터
void * ctxOnRxStarted
 onRxStarted 가 호출될 때 함께 전달될 context
void(* onRxDone )(void *, GPIOInterruptInfo_t *)
 수신이 완료될 때 호출될 콜백함수 포인터
void * ctxOnRxDone
 onRxDone 이 호출될 때 함께 전달될 context
void(* onTxDone )(void *, bool, GPIOInterruptInfo_t *)
 transmit() 후, 송신이 완료될 때 호출될 콜백함수 포인터
void * ctxOnTxDone
 onTxDone 이 호출될 때 함께 전달될 context
void(* onChannelBusy )(void *, GPIOInterruptInfo_t *)
 cca() 시 채널이 혼잡할 때 호출될 콜백함수 포인터
void * ctxOnChannelBusy
 onChannelBusy 가 호출될 때 함께 전달될 context
int16_t dBccaThreshold = -65
 cca() 시 채널이 혼잡하다고 판단하기 위한 에너지 레벨을 설정합니다. (단위: dB, 기본값: -65)
Protected Member Functions inherited from LoRaRadioChip
virtual void ccaTask ()
Static Protected Member Functions inherited from LoRaRadioChip
static void CCATask (void *)
Protected Attributes inherited from LoRaRadioChip
struct { 
   uint32_t   channel 
   Radio::Modulation_t   modulation 
   int8_t   txPower 
   uint32_t   txTimeout 
   union { 
      struct { 
         uint32_t   drHz 
         uint32_t   bwHz 
         uint32_t   afcBwHz 
         uint32_t   fDevHz 
         uint16_t   symbTimeout 
         bool   addCrc 
         uint16_t   preambleLength 
         uint8_t   fixedPayloadLength 
      }   FSK
      struct { 
         Radio::LoRaSF_t   sf 
         Radio::LoRaCR_t   cr 
         Radio::LoRaBW_t   bw 
         uint16_t   preambleLength 
         uint8_t   fixedPayloadLength 
         bool   iqInverted 
         bool   addCrc 
         uint16_t   symbTimeout 
      }   LoRa
   } 
} defaultSetting
volatile bool inCca = false
bool inChannelBusyHandler = false
int32_t freqOffset

Detailed Description

LMac Class.

Constructor & Destructor Documentation

◆ LMac()

LMac::LMac ( LoRaRadioChip & chip)
inline
87 : chip(chip) {
88 }

Member Function Documentation

◆ begin()

virtual error_t LMac::begin ( )
overridevirtual

Implements PacketRadioChip.

◆ bufferIsEmpty()

virtual bool LMac::bufferIsEmpty ( )
inlineoverridevirtual

Implements PacketRadioChip.

171 {
172 return this->chip.bufferIsEmpty();
173 }

◆ cca()

virtual bool LMac::cca ( )
inlineoverridevirtual

채널이 혼잡한지 아닌지 검사합니다.

채널이 혼잡하다고 감지되는 순간, onChannelBusy 가 가리키는 콜백함수가 호출됩니다.

Reimplemented from LoRaRadioChip.

256 {
257 return this->chip.cca();
258 }

◆ doCAD()

virtual void LMac::doCAD ( )
overridevirtual

사용 금지

CAD는 LMAC에 의해 사용되므로 사용자에 의한 사용이 차단됩니다. 본 함수를 호출해도 아무런 동작을 하지 않습니다.

Implements LoRaRadioChip.

◆ flushBuffer()

virtual void LMac::flushBuffer ( )
inlineoverridevirtual

Implements PacketRadioChip.

175 {
176 this->chip.flushBuffer();
177 }

◆ getChannel()

virtual uint32_t LMac::getChannel ( )
inlineoverridevirtual

현재 설정된 채널을 반환합니다.

Implements PacketRadioChip.

193 {
194 return this->chip.getChannel();
195 }

◆ getFreqOffset()

virtual int32_t LMac::getFreqOffset ( )
inlineoverridevirtual

중심 주파수 오차를 제거하기 위한 offset을 가져옵니다.

Reimplemented from LoRaRadioChip.

264 {
265 return this->chip.getFreqOffset();
266 }

◆ getRssi()

virtual int16_t LMac::getRssi ( )
inlineoverridevirtual

RSSI를 dB 단위로 읽습니다.

Implements LoRaRadioChip.

201 {
202 return this->chip.getRssi();
203 }

◆ getStatus()

virtual State_t LMac::getStatus ( )
inlineoverridevirtual

Implements LoRaRadioChip.

197 {
198 return this->chip.getStatus();
199 }

◆ getTxPower()

virtual int8_t LMac::getTxPower ( )
inlineoverridevirtual

현재 설정된 송신 출력을 반환합니다.

Returns
송신 출력 (단위: dBm)

Reimplemented from LoRaRadioChip.

252 {
253 return this->chip.getTxPower();
254 }

◆ readFrame()

virtual error_t LMac::readFrame ( RadioPacket * frame)
inlineoverridevirtual

수신 버퍼에서 프레임을 읽습니다.

Returns
  • ERROR_SUCCESS : 성공
  • ERROR_FAIL : 실패 (수신한 프레임이 없음)
  • ERROR_INVALID_ARGS : frame 이 NULL 이거나, frame 내부 버퍼가 충분히 크지 않아서 실패

Implements PacketRadioChip.

167 {
168 return this->chip.readFrame(frame);
169 }

◆ reset()

virtual void LMac::reset ( )
virtual

상태를 초기화합니다.

다른 LoRa 패킷을 전송하기 위해 상태를 초기화합니다.

채널 변경 횟수와 backoff 횟수는 프레임 단위로 유지됩니다. 채널 혼잡(RadioPacket::TOO_NOISY) 뒤 같은 프레임을 다시 transmit() 하면 남은 횟수로 이어서 진행하며, 실제 전송 후 또는 이 함수 호출 시 처음 값으로 돌아갑니다. sleep(), wakeup(), setStandby() 는 진행 중인 채널 감지만 중단합니다.

◆ setChannel()

virtual void LMac::setChannel ( uint32_t channel)
inlineoverridevirtual

채널을 설정합니다.

Implements PacketRadioChip.

189 {
190 this->chip.setChannel(channel);
191 }

◆ setFreqOffset()

virtual void LMac::setFreqOffset ( int32_t offsetHz)
inlineoverridevirtual

중심 주파수 오차를 제거하기 위한 offset을 설정합니다.

실제 사용되는 중심 주파수는 setChannel() 로 설정한 주파수에 offset을 더한 값이 됩니다. 기본 offset은 하드웨어마다 다릅니다. 설정된 offset을 구하기 위해서는 getFreqOffset() 을 사용하십시오.

Reimplemented from LoRaRadioChip.

260 {
261 this->chip.setFreqOffset(offsetHz);
262 }

◆ setMaxBackoffs()

virtual void LMac::setMaxBackoffs ( uint8_t n)
virtual

Max Backoff를 설정합니다.

프레임당 최대 가능한 backoff 횟수 제한을 설정합니다.

실제 backoff는 (1 ~ Max Backoff) 범위에서 랜덤하게 설정됩니다.

transmit() 호출 전에 사용해야 합니다.

기본 값은 6 입니다.

◆ setMaxChanges()

virtual void LMac::setMaxChanges ( uint8_t n)
virtual

MaxChanges를 설정합니다.

프레임당 채널 등 파라미터 변경을 시도하는 횟수를 지정합니다.

transmit() 호출 전에 사용해야 합니다.

기본 값은 6 입니다.

◆ setPublicNetwork()

virtual void LMac::setPublicNetwork ( bool enable)
inlineoverridevirtual

Syncword를 설정합니다.

Parameters
valueenable (true: LoRaWAN, false: non-LoRaWAN)

Implements LoRaRadioChip.

210 {
211 this->chip.setPublicNetwork(enable);
212 }

◆ setRadio() [1/2]

virtual void LMac::setRadio ( Radio::LoRaSF_t sf,
Radio::LoRaBW_t bw,
Radio::LoRaCR_t cr,
bool crcOn = true,
bool iqInverted = false,
uint16_t symbTimeout = 0,
uint16_t preambleLen = 8,
uint8_t payloadLen = 0,
bool freqHopOn = false,
uint8_t hopPeriod = 0 )
inlineoverridevirtual

Reimplemented from LoRaRadioChip.

231 {
232 LoRaRadioChip::setRadio(sf, bw, cr, crcOn, iqInverted, symbTimeout, preambleLen, payloadLen, freqHopOn, hopPeriod);
233 this->chip.setRadio(sf, bw, cr, crcOn, iqInverted, symbTimeout, preambleLen, payloadLen, freqHopOn, hopPeriod);
234 }

◆ setRadio() [2/2]

virtual void LMac::setRadio ( uint32_t datarate,
uint32_t bandwidth,
uint32_t bandwidthAfc,
uint32_t fDev,
bool crcOn = true,
uint16_t symbTimeout = 0,
uint16_t preambleLen = 5,
uint8_t payloadLen = 0 )
inlineoverridevirtual

Reimplemented from LoRaRadioChip.

243 {
244 LoRaRadioChip::setRadio(datarate, bandwidth, bandwidthAfc, fDev, crcOn, symbTimeout, preambleLen, payloadLen);
245 this->chip.setRadio(datarate, bandwidth, bandwidthAfc, fDev, crcOn, symbTimeout, preambleLen, payloadLen);
246 }

◆ setStandby()

virtual void LMac::setStandby ( )
inlineoverridevirtual

Implements LoRaRadioChip.

205 {
206 this->chip.setStandby();
207 this->stopSensing();
208 }

◆ setTxPower()

virtual void LMac::setTxPower ( int8_t dBm)
inlineoverridevirtual

송신 출력을 설정합니다.

Parameters
dBm송신 출력 세기 (단위: dBm)

Reimplemented from LoRaRadioChip.

248 {
249 this->chip.setTxPower(dBm);
250 }

◆ sleep()

virtual void LMac::sleep ( )
inlineoverridevirtual

Implements PacketRadioChip.

179 {
180 this->chip.sleep();
181 this->stopSensing();
182 }

◆ supportsLoRaSpreadingFactor()

bool LMac::supportsLoRaSpreadingFactor ( Radio::LoRaSF_t sf) const
inlineoverridevirtual

Returns whether this driver supports the given LoRa spreading factor.

Parameters
sfLoRa spreading factor; unknown values must return false.

Implements LoRaRadioChip.

214 {
215 return this->chip.supportsLoRaSpreadingFactor(sf);
216 }

◆ transmit()

virtual error_t LMac::transmit ( RadioPacket * p)
overridevirtual

LMAC을 사용하여 LoRa 패킷을 전송 시도합니다.

LMAC 알고리즘에 따라 LoRa 패킷을 전송 시도합니다.

현재 CAD 등 알고리즘이 구동 중인 경우 경우 ERROR_FAIL 을 반환합니다.

p 의 RadioPacket::modulation 이 Radio::MOD_LORA 가 아닌 경우, LMAC 알고리즘을 무시하여 전송합니다.

그 외의 경우 ERROR_SUCCESS 가 반환됩니다.

LMAC의 결과는 전송 완료 콜백과 RadioPacket::result, 및 getNumChanges() 에 의해 확인 가능합니다.

getNumChanges() 가 0보다 큰 경우,

getNumChanges() 가 0인 경우,

  • RadioPacket::SUCCESS: ALOHA를 이용하여 전송 성공
  • 그 밖의 값인 경우, 하부 계층에서의 전송 실패를 의미합니다.

Reimplemented from LoRaRadioChip.

◆ transmitCW()

virtual void LMac::transmitCW ( )
inlineoverridevirtual

Continuous Wave (CW) 신호를 송출합니다. (LoRa 전용).

Implements LoRaRadioChip.

218 {
219 this->chip.transmitCW();
220 }

◆ wakeup()

virtual void LMac::wakeup ( )
inlineoverridevirtual

Implements PacketRadioChip.

184 {
185 this->chip.wakeup();
186 this->stopSensing();
187 }

The documentation for this class was generated from the following file: