Nol.A SDK Library  24.11.4
For IoT System Software Development
Public Member Functions | List of all members
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를 설정합니다. More...
 
virtual void setMaxBackoffs (uint8_t n)
 Max Backoff를 설정합니다. More...
 
virtual uint8_t getNumChanges ()
 채널 등 파라미터 변경을 시도한 횟수를 반환합니다.
 
virtual error_t transmit (RadioPacket *p) override
 LMAC을 사용하여 LoRa 패킷을 전송 시도합니다. More...
 
virtual void reset ()
 상태를 초기화합니다. More...
 
virtual void doCAD () override
 사용 금지 More...
 
virtual error_t readFrame (RadioPacket *frame) override
 수신 버퍼에서 프레임을 읽습니다. More...
 
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를 설정합니다. More...
 
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
 송신 출력을 설정합니다. More...
 
virtual int8_t getTxPower () override
 현재 설정된 송신 출력을 반환합니다. More...
 
virtual bool cca () override
 채널이 혼잡한지 아닌지 검사합니다. More...
 
virtual void setFreqOffset (int32_t offsetHz) override
 중심 주파수 오차를 제거하기 위한 offset을 설정합니다. More...
 
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 값을 읽습니다. More...
 

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) 검사가 완료되면 호출될 콜백함수 포인터 More...
 
void * ctxOnCADCompleted
 onCADCompleted 가 호출될 때 함께 전달될 context
 
int8_t antennaGain = 0
 Antenna gain을 고려한 송신 출력(EIRP)을 사용하기 위한 antenna gain (단위: dBi)
 
void(* onRxTimeout )(void *, GPIOInterruptInfo_t *) = nullptr
 
void * ctxOnRxTimeout
 
uint32_t channel
 
Radio::Modulation_t modulation
 
int8_t txPower
 
uint32_t txTimeout
 
uint32_t drHz
 
uint32_t bwHz
 
uint32_t afcBwHz
 
uint32_t fDevHz
 
uint16_t symbTimeout
 
bool addCrc
 
uint16_t preambleLength
 
uint8_t fixedPayloadLength
 
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
 
Radio::LoRaSF_t sf
 
Radio::LoRaCR_t cr
 
Radio::LoRaBW_t bw
 
bool iqInverted
 
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
 
- Public Attributes inherited from PacketRadioChip
void(* onRxStarted )(void *, GPIOInterruptInfo_t *)
 수신이 시작될 때 호출될 콜백함수 포인터 More...
 
void * ctxOnRxStarted
 onRxStarted 가 호출될 때 함께 전달될 context
 
void(* onRxDone )(void *, GPIOInterruptInfo_t *)
 수신이 완료될 때 호출될 콜백함수 포인터 More...
 
void * ctxOnRxDone
 onRxDone 이 호출될 때 함께 전달될 context
 
void(* onTxDone )(void *, bool, GPIOInterruptInfo_t *)
 transmit() 후, 송신이 완료될 때 호출될 콜백함수 포인터 More...
 
void * ctxOnTxDone
 onTxDone 이 호출될 때 함께 전달될 context
 
void(* onChannelBusy )(void *, GPIOInterruptInfo_t *)
 cca() 시 채널이 혼잡할 때 호출될 콜백함수 포인터 More...
 
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.

Member Function Documentation

◆ cca()

virtual bool LMac::cca ( )
inlineoverridevirtual

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

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

Reimplemented from LoRaRadioChip.

246  {
247  return this->chip.cca();
248  }
virtual bool cca() override
채널이 혼잡한지 아닌지 검사합니다.

◆ doCAD()

virtual void LMac::doCAD ( )
overridevirtual

사용 금지

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

Implements LoRaRadioChip.

◆ getTxPower()

virtual int8_t LMac::getTxPower ( )
inlineoverridevirtual

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

Returns
송신 출력 (단위: dBm)

Reimplemented from LoRaRadioChip.

242  {
243  return this->chip.getTxPower();
244  }
virtual int8_t getTxPower() override
현재 설정된 송신 출력을 반환합니다.

◆ readFrame()

virtual error_t LMac::readFrame ( RadioPacket frame)
inlineoverridevirtual

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

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

Implements PacketRadioChip.

162  {
163  return this->chip.readFrame(frame);
164  }
virtual error_t readFrame(RadioPacket *frame)=0
수신 버퍼에서 프레임을 읽습니다.

◆ reset()

virtual void LMac::reset ( )
virtual

상태를 초기화합니다.

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

◆ setFreqOffset()

virtual void LMac::setFreqOffset ( int32_t  offsetHz)
inlineoverridevirtual

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

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

Reimplemented from LoRaRadioChip.

250  {
251  this->chip.setFreqOffset(offsetHz);
252  }
virtual void setFreqOffset(int32_t offsetHz)
중심 주파수 오차를 제거하기 위한 offset을 설정합니다.

◆ 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.

205  {
206  this->chip.setPublicNetwork(enable);
207  }
virtual void setPublicNetwork(bool enable)=0
Syncword를 설정합니다.

◆ setTxPower()

virtual void LMac::setTxPower ( int8_t  dBm)
inlineoverridevirtual

송신 출력을 설정합니다.

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

Reimplemented from LoRaRadioChip.

238  {
239  this->chip.setTxPower(dBm);
240  }
virtual void setTxPower(int8_t dBm) override
송신 출력을 설정합니다.

◆ transmit()

virtual error_t LMac::transmit ( RadioPacket p)
overridevirtual

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

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

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

pRadioPacket::modulationRadio::MOD_LORA 가 아닌 경우, LMAC 알고리즘을 무시하여 전송합니다.

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

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

getNumChanges() 가 0보다 큰 경우,

getNumChanges() 가 0인 경우,

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

Reimplemented from LoRaRadioChip.


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