This application sends periodically a test frame and is the rest of the time in receive mode. All parameters of the received frames (ED, LQI, sequence number) are printed to the host interface.
#include <stdio.h>
#include "board.h"
#include "hif.h"
#include "radio.h"
#include "xmpl.h"
#define T_TX_PERIOD MSEC(500)
#define RT_ADDR (0x1234)
#define RT_PANID (0xcafe)
#define GET_CFG_ADDR() (0xfffc)
#define ABSDIFF(a,b) ( (a>b) ? a - b : b - a )
#define FRAME_CTRL (0x8841)
typedef struct
{
uint16_t fctl;
uint8_t seq;
uint16_t pan;
uint16_t dst;
uint16_t src;
uint8_t keycnt;
uint8_t data[8];
uint16_t crc;
} rt_frame_t;
rt_frame_t TxFrame = {
.fctl = FRAME_CTRL,
.pan = RT_PANID,
.dst = RT_ADDR,
.src = 0xffff
};
volatile bool do_init = true;
volatile uint8_t keycnt = 0;
void app_init(void)
{
#if RADIO_TYPE == RADIO_AT86RF212
#endif
}
int main(void)
{
app_init();
PRINTF(
"Simple Range Test\n\r This is node: 0x%04x TX-FRAME: %d\n\r",
PRINTF(
"PWR: 0x%x CHAN: %d\r\n",
do_init = true;
while(1)
{
{
keycnt ++;
}
}
}
{
TxFrame.keycnt = keycnt;
return 0;
}
{
rt_frame_t *pfrm;
static struct rxstatus_tag
{
uint8_t seq;
uint16_t lostpckts;
uint16_t rxdpckts;
uint16_t src;
uint8_t keycnt;
uint8_t lqi;
int8_t ed;
} rxstatus;
bool doprint;
pfrm = (rt_frame_t *) frm;
doprint = false;
if (do_init == true)
{
do_init = false;
rxstatus.seq = pfrm->seq;
rxstatus.rxdpckts = 0;
rxstatus.lostpckts = 0;
}
rxstatus.rxdpckts ++;
if(pfrm->seq != rxstatus.seq)
{
rxstatus.lostpckts += ABSDIFF(pfrm->seq, rxstatus.seq);
doprint = true;
}
if(pfrm->src != rxstatus.src)
{
rxstatus.src = pfrm->src;
doprint = true;
}
if(pfrm->keycnt != rxstatus.keycnt)
{
rxstatus.keycnt = pfrm->keycnt;
doprint = true;
}
if(lqi != rxstatus.lqi)
{
rxstatus.lqi = lqi;
doprint = true;
}
if(ed != rxstatus.ed)
{
rxstatus.ed = ed;
doprint = true;
}
if (doprint == true)
{
PRINTF(
":sta 0x%04x seq %d key %d lqi %d ed %d rxd %d lost %d \n\r",
pfrm->src, pfrm->seq, pfrm->keycnt, lqi, ed,
rxstatus.rxdpckts, rxstatus.lostpckts );
rxstatus.rxdpckts = 0;
rxstatus.lostpckts = 0;
}
rxstatus.seq = pfrm->seq + 1;
return frm;
}
{
{
TxFrame.seq++;
}
}