Nol.A SDK Library 26.11.2
For IoT System Software Development
Loading...
Searching...
No Matches
atsamr21-xpro/LPP-Receiver/main.cpp
// -*- indent-tabs-mode:nil; -*-
#include "cox.h"
#include <LPPMac.hpp>
static void received(IEEE802_15_4Mac &radio, const IEEE802_15_4Frame *frame);
static void receivedProbe(uint16_t panId,
const uint8_t *eui64,
uint16_t shortId,
int16_t rssi,
const uint8_t *payload,
uint8_t payloadLen,
uint32_t channel);
static void ledOnTask(void *);
static void ledOffTask(void *);
uint16_t node_id = 2;
uint8_t node_ext_id[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0, 0};
LPPMac *Lpp;
Timer ledTimer;
void setup(void) {
Serial.begin(115200);
printf("\n*** [ATSAMR21-XPro] LPP Receiver ***\n");
AT86RF233.begin();
node_ext_id[6] = highByte(node_id);
node_ext_id[7] = lowByte(node_id);
Lpp = new LPPMac();
Lpp->begin(AT86RF233, 0x1234, 0xFFFF, node_ext_id);
Lpp->setProbePeriod(3000);
Lpp->setListenTimeout(3300);
Lpp->setTxTimeout(632);
Lpp->setRxTimeout(465);
Lpp->setRxWaitTimeout(30);
//Lpp->setRadioAlwaysOn(true);
Lpp->onReceive(received);
Lpp->onReceiveProbe(receivedProbe);
ledOnTask(NULL);
}
static void ledOnTask(void *) {
ledTimer.onFired(ledOffTask, NULL);
ledTimer.startOneShot(10);
System.ledOn(0);
}
static void ledOffTask(void *) {
ledTimer.onFired(ledOnTask, NULL);
ledTimer.startOneShot(990);
System.ledOff(0);
}
static void received(IEEE802_15_4Mac &radio, const IEEE802_15_4Frame *frame) {
IEEE802_15_4Address srcAddr = frame->getSrcAddr();
if (srcAddr.len == 2) {
printf("RX : %x, ", srcAddr.id.s16);
} else if (srcAddr.len == 8) {
printf(
"RX : %02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x, ",
srcAddr.id.s64[0],
srcAddr.id.s64[1],
srcAddr.id.s64[2],
srcAddr.id.s64[3],
srcAddr.id.s64[4],
srcAddr.id.s64[5],
srcAddr.id.s64[6],
srcAddr.id.s64[7]
);
}
printf("RSSI(%d dBm), LQI(%d) (length:%u)",
frame->power,
frame->meta.DSSS.corr,
frame->getPayloadLength());
for (uint16_t i = 0; i < frame->getPayloadLength(); i++)
printf(" %02X", frame->getPayloadAt(i));
printf("\n");
}
static void receivedProbe(uint16_t panId,
const uint8_t *eui64,
uint16_t shortId,
int16_t rssi,
const uint8_t *payload,
uint8_t payloadLen,
uint32_t channel) {
printf("* Probe received from PAN:0x%04X", panId);
if (eui64) {
printf(", Node EUI64:%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x",
eui64[0], eui64[1], eui64[2], eui64[3],
eui64[4], eui64[5], eui64[6], eui64[7]);
}
if (shortId != 0xFFFF) {
printf(", ID:%x", shortId);
}
printf(", RSSI:%d", rssi);
if (payloadLen > 0) {
uint8_t i;
printf(", length:%u, ", payloadLen);
for (i = 0; i < payloadLen; i++) {
printf("%02X ", payload[i]);
}
}
printf("\n");
}
LPPMac class.
IEEE 802.15.4 address.
Definition IEEE802_15_4Frame.hpp:60
uint16_t id
Definition IEEE802_15_4Frame.hpp:95
uint8_t len
Definition IEEE802_15_4Frame.hpp:94
IEEE 802.15.4 frame.
Definition IEEE802_15_4Frame.hpp:163
int16_t getPayloadAt(uint16_t index) const
Get an octet of the payload buffer at index.
uint16_t getPayloadLength() const
Get payload length in unit of octets.
IEEE802_15_4Address getSrcAddr() const
Get source address.
Definition IEEE802_15_4Frame.hpp:395
IEEE 802.15.4 MAC Protocol.
Definition IEEE802_15_4Mac.hpp:60
void onReceive(void(*receiveHandler)(IEEE802_15_4Mac &, const IEEE802_15_4Frame *))
수신이 완료될 때 호출될 함수를 지정합니다.
Low-Power Probing: 비동기 (asynchronous) 방식의 저전력 MAC 프로토콜
Definition LPPMac.hpp:230
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 수신시 콜백함수를 지정합니다.
error_t setTxTimeout(uint16_t msec)
TxTimeout 시간을 msec 밀리초로 설정합니다.
error_t setProbePeriod(uint32_t msec)
ProbePeriod 를 msec 밀리초로 설정합니다.
error_t setRxTimeout(uint16_t msec)
RxTimeout 시간을 msec 밀리초로 설정합니다.
error_t setRxWaitTimeout(uint16_t msec)
RxWaitTimeout 시간을 msec 밀리초로 설정합니다.
void begin(PacketRadioChip &chip, uint16_t panId, uint16_t nodeId, const uint8_t *eui64)
프로토콜을 초기화합니다.
error_t setListenTimeout(uint32_t msec)
ListenTimeout 시간을 msec 밀리초로 설정합니다.
uint8_t corr
송신시 사용할, 또는 수신시 사용된 correlation
Definition RadioPacket.hpp:279
union RadioPacket::@261372047013264035370155367365124341065140254135 meta
변복조 방식에 대한 속성
int16_t power
송신시 사용할 power (단위: dBm) 또는 수신시의 신호 세기 (단위: dB)
Definition RadioPacket.hpp:137
struct RadioPacket::@261372047013264035370155367365124341065140254135::@020003251252223043172167113170254232021141153330 DSSS
modulation 이 Radio::MOD_DSSS 인 경우 사용되는 변수
Timer는 일정 시간 이후에 1회 실행될 작업, 매 일정 시간마다 실행될 작업 등을 위한 기능입니다.
Definition Timer.hpp:61
bool startOneShot(uint32_t millis, bool interrupt=false)
작업함수를 millis 밀리초 이후 1회 실행합니다.
void onFired(void(*func)(void *), void *args=nullptr)
타이머 만료시 실행시킬 작업함수를 지정합니다.
API and definitions.
#define highByte(w)
변수의 높은 (가장 왼쪽) 바이트를 구합니다.
Definition nola-common.h:321
#define lowByte(w)
변수의 낮은 (가장 오른쪽) 바이트를 구합니다.
Definition nola-common.h:312