Nol.A SDK Library  24.11.0
For IoT System Software Development
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
LPPMac Class Reference

Low-Power Probing: 비동기 (asynchronous) 방식의 저전력 MAC 프로토콜 More...

#include <LPPMac.hpp>

Inheritance diagram for LPPMac:
IEEE802_15_4Mac PacketRadio

Public Member Functions

void begin (PacketRadioChip &chip, uint16_t panId, uint16_t nodeId, const uint8_t *eui64)
 프로토콜을 초기화합니다. More...
 
void stop ()
 LPP 동작을 중단합니다. More...
 
void resume ()
 stop()으로 중단된 LPP 동작을 재개합니다.
 
bool isRunning ()
 LPP가 현재 주기적인 프로빙 중인지 확인합니다.
 
uint32_t getProbePeriod ()
 ProbePeriod 를 가져옵니다.
 
error_t setProbePeriod (uint32_t msec)
 ProbePeriodmsec 밀리초로 설정합니다.
 
uint32_t getListenTimeout ()
 ListenTimeout 시간을 가져옵니다.
 
error_t setListenTimeout (uint32_t msec)
 ListenTimeout 시간을 msec 밀리초로 설정합니다.
 
uint16_t getTxTimeout ()
 TxTimeout 시간을 가져옵니다.
 
error_t setTxTimeout (uint16_t msec)
 TxTimeout 시간을 msec 밀리초로 설정합니다.
 
uint16_t getRxWaitTimeout ()
 RxWaitTimeout 시간을 가져옵니다.
 
error_t setRxWaitTimeout (uint16_t msec)
 RxWaitTimeout 시간을 msec 밀리초로 설정합니다.
 
uint16_t getRxTimeout ()
 RxTimeout 시간을 가져옵니다.
 
error_t setRxTimeout (uint16_t msec)
 RxTimeout 시간을 msec 밀리초로 설정합니다.
 
uint16_t getCcaDuration ()
 CcaDuration 시간을 가져옵니다.
 
error_t setCcaDuration (uint16_t msec)
 CcaDuration 시간을 msec 밀리초로 설정합니다.
 
bool isRadioAlwaysOn ()
 Idle 상태에서도 항상 무선을 사용하는지 확인합니다.
 
void setRadioAlwaysOn (bool alwaysOn)
 Idle 상태에서도 무선을 사용하도록 설정합니다. More...
 
bool isSITFirstUsed ()
 Sender-Initiated-Transmission 를 우선 사용하는지 확인합니다.
 
void setUseSITFirst (bool use)
 프레임을 전송하기 위해 listen을 시작하기 전에 Sender-Initiated-Transmission를 수행합니다. More...
 
error_t setRetries (uint8_t num)
 재전송 횟수를 num 회로 설정합니다.
 
void setPanId (uint16_t panId)
 PAN ID를 설정합니다. More...
 
void enableReceiveInterPANFrame (bool enable)
 타 PAN으로부터의 프레임 수신을 허용합니다. More...
 
void onReceiveProbe (void(*func)(uint16_t panId, const uint8_t *eui64, uint16_t shortId, int16_t rssi, const uint8_t *payload, uint8_t payloadLen, uint32_t channel))
 Probe 수신시 콜백함수를 지정합니다. More...
 
void setProbePayload (const uint8_t *payload, uint8_t len)
 Probe 메시지에 추가로 보낼 페이로드 데이터를 설정합니다. More...
 
void setProbePayload (const char *payload, uint8_t len)
 
void setDefaultChannel (uint32_t channel)
 기본 채널을 변경합니다. More...
 
- Public Member Functions inherited from IEEE802_15_4Mac
error_t send (IEEE802_15_4Frame *frame)
 frame 을 전송합니다. More...
 
error_t cancelSend (IEEE802_15_4Frame *frame)
 frame 전송을 취소합니다. More...
 
virtual void onSendDone (void(*sendDoneHandler)(IEEE802_15_4Mac &, IEEE802_15_4Frame *))
 전송이 완료될 때 호출될 함수를 지정합니다. More...
 
void onReceive (void(*receiveHandler)(IEEE802_15_4Mac &, const IEEE802_15_4Frame *))
 수신이 완료될 때 호출될 함수를 지정합니다. More...
 

Static Public Member Functions

static error_t ExtractProbe (IEEE802_15_4Frame &probe, IEEE802_15_4Address &srcShort, IEEE802_15_4Address &srcLong, uint16_t *dataChannel, const uint8_t **userMessage, uint8_t *userMessageLength)
 
- Static Public Member Functions inherited from IEEE802_15_4Mac
static int32_t ConvertChToFreq2450MHz (uint16_t channelNumber)
 IEEE 802.15.4-2015 2450MHz 대역 채널번호-주파수 변환 함수 More...
 
static int32_t ConvertChToFreq917MHzSUN_FSK1 (uint16_t channelNumber)
 IEEE 802.15.4-2015 917~923.5 MHz 대역 SUN FSK operating mode #1 채널번호-주파수 변환 함수 More...
 

Public Attributes

bool use_802_15_4e_2012_Syntax = false
 
- Public Attributes inherited from IEEE802_15_4Mac
bool useForceNoAckRequest = false
 전송할 프레임에 대해 강제로 Ack를 요청하지 않게 합니다. More...
 

Additional Inherited Members

- Static Public Attributes inherited from IEEE802_15_4Mac
static uint16_t HoppingSequenceList2450MHz [16]
 IEEE 802.15.4-2015 2450 MHz 대역을 위한 macHoppingSequenceList.
 
static uint16_t HoppingSequenceList917MHzSUN_FSK1 [32]
 IEEE 802.15.4-2015 917~923.5 MHz 대역 SUN FSK operating mode #1 을 위한 macHoppingSequenceList.
 
- Protected Types inherited from PacketRadio
enum  { TX_FIFO_SIZE = 10 , RX_FIFO_SIZE = 10 , TX_DONE_FIFO_SIZE = 10 }
 
- Protected Member Functions inherited from IEEE802_15_4Mac
bool checkTxFrame (RadioPacket *frame)
 
void handleRxFrame (RadioPacket *frame)
 
IEEE802_15_4FramegetNextTxFrame ()
 
- Protected Member Functions inherited from PacketRadio
virtual void sendDone (RadioPacket *frame, RadioPacket::Result_t)
 
virtual void receive (RadioPacket *frame)
 
RadioPacketgetNextTxFrame ()
 
error_t enqueueTxFrame (RadioPacket *frame)
 
virtual void notifySendDone (RadioPacket *frame)
 
virtual void notifyReceive (RadioPacket *frame)
 
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...
 
- Protected Attributes inherited from PacketRadio
Queue< RadioPacket * > txFifo
 
Queue< RadioPacket * > rxFifo
 
Queue< RadioPacket * > txDoneFifo
 
void(* callbackSendDone )(PacketRadio &, RadioPacket *)
 
void(* callbackReceive )(PacketRadio &, const RadioPacket *)
 
PacketRadioEventListenereventListener
 

Detailed Description

Low-Power Probing: 비동기 (asynchronous) 방식의 저전력 MAC 프로토콜

노드는 주기적으로 Probe를 전송하여 주변의 이웃들에게 자신의 존재를 알립니다. 데이터를 송신할 노드는 무선 상태를 검사하다가 목적지 노드의 Probe를 수신한 순간 데이터를 전송합니다. 각 노드는 유휴상태일 때 주기적인 Probe 전송을 제외하면 대부분의 시간을 수면상태에서 대기하기 때문에, 간헐적인 데이터 전송만 요구되는 응용에 적합한 프로토콜입니다.

SX1276, CC1200 등 패킷 무선통신을 지원하는 송수신 칩과 함께 쓸 수 있습니다. LPP는 IEEE 802.15.4 표준은 아니지만 IEEE 802.15.4-2015의 RIT와 유사하며, 프레임 형식은 IEEE 802.15.4-2015를 따릅니다. 따라서 IEEE 802.15.4와 같이 노드의 주소는 8-byte EUI-64 와 2-byte short address 를 모두 지원합니다.

Supported Hardwares

LPP를 지원하는 하드웨어는 다음과 같습니다.

Board Radio Chip Example
Atmel SAM R21 Xplained Pro Internal AT86RF233 Sender, Receiver
PLNetworks PLM100 SX1276 Sender, Receiver
ST Nucleo L152RE SX1276MB1LAS Sender, Receiver

Parameters

Recommended Parameters

LPP의 타이밍 관련 파라미터 중 RxWaitTimeout, RxTimeout, 및 TxTimeout 은 하드웨어에 의존적입니다. 아래는 하드웨어 및 전송방식 별 추천하는 값입니다.

Chip RxWaitTimeout RxTimeout TxTimeout
CC1200 (FSK 50kbps) 10050
SX1276 (LoRa SF7, BW 125kHz) 30465632
SX1276 (LoRa SF7, BW 250kHz) 15310319
SX1276 (LoRa SF7, BW 500kHz) 10160162
SX1276 (LoRa SF8, BW 125kHz) 4810751112
SX1276 (LoRa SF8, BW 250kHz) 25540560
SX1276 (LoRa SF8, BW 500kHz) 15275282
SX1276 (LoRa SF9, BW 125kHz) 9018801956
SX1276 (LoRa SF9, BW 250kHz) 48940981
SX1276 (LoRa SF9, BW 500kHz) 25475492
SX1276 (LoRa SF10, BW 125kHz) 17834153580
SX1276 (LoRa SF10, BW 250kHz) 9017101792
SX1276 (LoRa SF10, BW 500kHz) 48860899
SX1276 (LoRa SF11, BW 125kHz) 35074807809
SX1276 (LoRa SF11, BW 250kHz) 17837453907
SX1276 (LoRa SF11, BW 500kHz) 9018751956
SX1276 (LoRa SF12, BW 125kHz) 7001338014039
SX1276 (LoRa SF12, BW 250kHz) 35066957022
SX1276 (LoRa SF12, BW 500kHz) 17833503514

Basic Usage

Initialization

LPP는 다음과 같이 전역변수 포인터로 선언하고, new LPPMac() 을 사용하여 생성합니다. 인스턴스의 begin() 을 호출하면 프로토콜이 시작됩니다.

다음 예제는 PLM100 에서의 LPP 초기화 방법입니다.

Send

프레임을 전송하기 위해서는 다음과 같이 IEEE802_15_4Frame 에 목적지 주소 및 보낼 데이터를 채우고 send() 를 호출하여야 합니다. 전송이 완료된 후, onSendDone() 에 의해 설정된 콜백이 호출됩니다.

Receive

프레임을 수신하기 위해서는 onReceive() 로 콜백을 설정하면 됩니다. 수신시 해당 콜백이 호출되면 프레임을 읽으면 됩니다.

Member Function Documentation

◆ begin()

void LPPMac::begin ( PacketRadioChip chip,
uint16_t  panId,
uint16_t  nodeId,
const uint8_t *  eui64 
)

프로토콜을 초기화합니다.

Parameters
chipLPP를 사용할 칩
panIdIEEE 802.15.4-호환 PAN ID
nodeIdIEEE 802.15.4-호환 short address
eui64IEEE 802.15.4-호환 EUI-64

◆ enableReceiveInterPANFrame()

void LPPMac::enableReceiveInterPANFrame ( bool  enable)

타 PAN으로부터의 프레임 수신을 허용합니다.

Parameters
enable허용여부

◆ onReceiveProbe()

void LPPMac::onReceiveProbe ( void(*)(uint16_t panId, const uint8_t *eui64, uint16_t shortId, int16_t rssi, const uint8_t *payload, uint8_t payloadLen, uint32_t channel)  func)

Probe 수신시 콜백함수를 지정합니다.

Parameters
func콜백함수의 포인터

◆ setDefaultChannel()

void LPPMac::setDefaultChannel ( uint32_t  channel)

기본 채널을 변경합니다.

Parameters
channel사용할 채널 (단위: Hz)

◆ setPanId()

void LPPMac::setPanId ( uint16_t  panId)

PAN ID를 설정합니다.

Parameters
panIdIEEE 802.15.4-호환 PAN ID

◆ setProbePayload()

void LPPMac::setProbePayload ( const uint8_t *  payload,
uint8_t  len 
)

Probe 메시지에 추가로 보낼 페이로드 데이터를 설정합니다.

Parameters
payload추가 페이로드 데이터 포인터
len추가 페이로드 길이. 31-byte 를 초과할 수 없으며, 초과하는 경우 31-byte 까지만 전송됩니다.

◆ setRadioAlwaysOn()

void LPPMac::setRadioAlwaysOn ( bool  alwaysOn)

Idle 상태에서도 무선을 사용하도록 설정합니다.

Parameters
alwaysOntrue 이면 저전력 상태로 진입하지 않습니다. false 이면, 보통의 상태로 동작합니다.

◆ setUseSITFirst()

void LPPMac::setUseSITFirst ( bool  use)

프레임을 전송하기 위해 listen을 시작하기 전에 Sender-Initiated-Transmission를 수행합니다.

LPP의 Receiver-Initiated-Transmission에 따른 전송 지연을 완화하기 위한 옵션입니다. 상대방이 setRadioAlwaysOn(true) 인 경우 listen을 생략하고 바로 전송을 시도하기 때문에 지연이 최소화됩니다. 상대방이 setRadioAlwaysOn(false) 인 경우 SIT는 실패하고 listen을 계속합니다.

◆ stop()

void LPPMac::stop ( )

LPP 동작을 중단합니다.

주기적인 probe는 전송되지 않고 무선 칩은 저전력 상태를 유지합니다. 다시 계속하려면 resume() 을 호출합니다.


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