|
| void | begin (PacketRadioChip &chip, uint16_t panId, uint16_t nodeId, const uint8_t *eui64) |
| | 프로토콜을 초기화합니다.
|
| void | stop () |
| | LPP 동작을 중단합니다.
|
|
void | resume () |
| | stop()으로 중단된 LPP 동작을 재개합니다.
|
|
bool | isRunning () |
| | LPP가 현재 주기적인 프로빙 중인지 확인합니다.
|
|
uint32_t | getProbePeriod () |
| | ProbePeriod 를 가져옵니다.
|
|
error_t | setProbePeriod (uint32_t msec) |
| | ProbePeriod 를 msec 밀리초로 설정합니다.
|
|
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 상태에서도 무선을 사용하도록 설정합니다.
|
|
bool | isSITFirstUsed () |
| | Sender-Initiated-Transmission 를 우선 사용하는지 확인합니다.
|
| void | setUseSITFirst (bool use) |
| | 프레임을 전송하기 위해 listen을 시작하기 전에 Sender-Initiated-Transmission를 수행합니다.
|
|
error_t | setRetries (uint8_t num) |
| | 재전송 횟수를 num 회로 설정합니다.
|
| void | setPanId (uint16_t panId) |
| | PAN ID를 설정합니다.
|
| void | enableReceiveInterPANFrame (bool enable) |
| | 타 PAN으로부터의 프레임 수신을 허용합니다.
|
| 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 수신시 콜백함수를 지정합니다.
|
| void | setProbePayload (const uint8_t *payload, uint8_t len) |
| | Probe 메시지에 추가로 보낼 페이로드 데이터를 설정합니다.
|
| void | setProbePayload (const char *payload, uint8_t len) |
| void | setDefaultChannel (uint32_t channel) |
| | 기본 채널을 변경합니다.
|
| error_t | send (IEEE802_15_4Frame *frame) |
| | frame 을 전송합니다.
|
| error_t | cancelSend (IEEE802_15_4Frame *frame) |
| | frame 전송을 취소합니다.
|
| virtual void | onSendDone (void(*sendDoneHandler)(IEEE802_15_4Mac &, IEEE802_15_4Frame *)) |
| | 전송이 완료될 때 호출될 함수를 지정합니다.
|
| void | onReceive (void(*receiveHandler)(IEEE802_15_4Mac &, const IEEE802_15_4Frame *)) |
| | 수신이 완료될 때 호출될 함수를 지정합니다.
|
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를 지원하는 하드웨어는 다음과 같습니다.
Parameters
- ProbePeriod : Probe 전송 주기 (단위: ms). 이웃의 송신노드의 ListenTimeout 보다 짧아야 합니다.
- ListenTimeout : Data 패킷을 전송하기 위해 Probe를 기다리는 시간 (단위: ms). 이웃의 수신노드의 ProbePeriod 보다 길어야 합니다.
- RxWaitTimeout : 패킷 수신을 기다리는 시간 (단위: ms). 이 시간 안에 패킷 수신이 시작되어야 data 패킷, 또는 Ack 패킷을 수신하기 위해 RxTimeout 시간을 대기합니다.
- RxTimeout : 패킷 수신이 시작된 후부터 수신하기 위해 대기하는 시간 (단위: ms)
- TxTimeout : 패킷 송신이 시작된 후부터 송신이 끝날 때까지 대기하는 시간 (단위: ms)
- Retransmission : 재전송 시도 횟수 (단위: 회)
Recommended Parameters
LPP의 타이밍 관련 파라미터 중 RxWaitTimeout, RxTimeout, 및 TxTimeout 은 하드웨어에 의존적입니다. 아래는 하드웨어 및 전송방식 별 추천하는 값입니다.
| Chip | RxWaitTimeout | RxTimeout | TxTimeout |
| CC1200 (FSK 50kbps) | | 100 | 50 |
| SX1276 (LoRa SF7, BW 125kHz) | 30 | 465 | 632 |
| SX1276 (LoRa SF7, BW 250kHz) | 15 | 310 | 319 |
| SX1276 (LoRa SF7, BW 500kHz) | 10 | 160 | 162 |
| SX1276 (LoRa SF8, BW 125kHz) | 48 | 1075 | 1112 |
| SX1276 (LoRa SF8, BW 250kHz) | 25 | 540 | 560 |
| SX1276 (LoRa SF8, BW 500kHz) | 15 | 275 | 282 |
| SX1276 (LoRa SF9, BW 125kHz) | 90 | 1880 | 1956 |
| SX1276 (LoRa SF9, BW 250kHz) | 48 | 940 | 981 |
| SX1276 (LoRa SF9, BW 500kHz) | 25 | 475 | 492 |
| SX1276 (LoRa SF10, BW 125kHz) | 178 | 3415 | 3580 |
| SX1276 (LoRa SF10, BW 250kHz) | 90 | 1710 | 1792 |
| SX1276 (LoRa SF10, BW 500kHz) | 48 | 860 | 899 |
| SX1276 (LoRa SF11, BW 125kHz) | 350 | 7480 | 7809 |
| SX1276 (LoRa SF11, BW 250kHz) | 178 | 3745 | 3907 |
| SX1276 (LoRa SF11, BW 500kHz) | 90 | 1875 | 1956 |
| SX1276 (LoRa SF12, BW 125kHz) | 700 | 13380 | 14039 |
| SX1276 (LoRa SF12, BW 250kHz) | 350 | 6695 | 7022 |
| SX1276 (LoRa SF12, BW 500kHz) | 178 | 3350 | 3514 |
Basic Usage
Initialization
LPPMac 인스턴스를 전역변수로 선언한 뒤, begin() 을 호출하면 프로토콜이 시작됩니다.
Send
프레임을 전송하기 위해서는 다음과 같이 IEEE802_15_4Frame 에 목적지 주소 및 보낼 데이터를 채우고 send() 를 호출하여야 합니다. 전송이 완료된 후, onSendDone() 에 의해 설정된 콜백이 호출됩니다.
Receive
프레임을 수신하기 위해서는 onReceive() 로 콜백을 설정하면 됩니다. 수신시 해당 콜백이 호출되면 프레임을 읽으면 됩니다.
- Examples
- atsamr21-xpro/LPP-Receiver/main.cpp, atsamr21-xpro/LPP-Sender/main.cpp, st-nucleo-l152re/I2C-AT30TSE758-Temperature-Sensor/main.cpp, st-nucleo-l152re/LPP-Receiver/main.cpp, and st-nucleo-l152re/LPP-Sender/main.cpp.