- Replaced TR1001 statistics with rimestats

- Fixed typo in constant name
- Changed all occurences of u8_t and u16_t to uint8_t and uint16_t
This commit is contained in:
nifi 2008-07-08 12:27:22 +00:00
parent 6e657ad3d8
commit 8db3671d65
3 changed files with 56 additions and 289 deletions

View file

@ -28,7 +28,7 @@
*
* This file is part of the Contiki operating system.
*
* @(#)$Id: tr1001-gcr.c,v 1.12 2007/11/28 21:28:03 nifi Exp $
* @(#)$Id: tr1001-gcr.c,v 1.13 2008/07/08 12:27:22 nifi Exp $
*/
/**
* \addtogroup esb
@ -56,27 +56,19 @@
#include "dev/radio-sensor.h"
#include "lib/gcr.h"
#include "lib/crc16.h"
#include "net/rime/rimestats.h"
#include <io.h>
#include <signal.h>
#include <string.h>
#define RXSTATE_READY 0
#define RXSTATE_RECEVING 1
#define RXSTATE_FULL 2
#define RXSTATE_READY 0
#define RXSTATE_RECEIVING 1
#define RXSTATE_FULL 2
#define SYNCH1 0x3c
#define SYNCH2 0x03
#if TR1001_STATISTICS
static unsigned short sstrength_dropped,
sstrength_max, sstrength_min, tmp_sstrength_max, tmp_sstrength_min;
/* The number of dropped packets */
static unsigned short packets_err;
/* The number of accepted packets */
static unsigned short packets_ok;
#endif /* TR1001_STATISTICS */
/*
* The buffer which holds incoming data.
*/
@ -93,15 +85,13 @@ static unsigned short tr1001_rxlen = 0;
*/
volatile unsigned char tr1001_rxstate = RXSTATE_READY;
static u8_t radio_active;
static u16_t rxcrc, rxcrctmp;
static uint16_t rxcrc, rxcrctmp;
/*
* The structure of the packet header.
*/
struct tr1001_hdr {
u8_t len[2]; /**< The 16-bit length of the packet in network byte
uint8_t len[2]; /**< The 16-bit length of the packet in network byte
order. */
};
@ -112,7 +102,7 @@ struct tr1001_hdr {
#define OFF 0
#define ON 1
static u8_t onoroff = OFF;
static uint8_t onoroff = OFF;
#define NUM_SYNCHBYTES 4
@ -160,23 +150,6 @@ const struct radio_driver tr1001_driver = {
tr1001_off
};
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
#define PACKET_DROPPED() do { \
if(packets_err < ~0) {\
packets_err++;\
}\
sstrength_dropped = (tmp_count ? ((tmp_sstrength / tmp_count) << 2) : 0);\
} while(0)
#define PACKET_ACCEPTED() do {\
if(packets_ok < ~0) {\
packets_ok++;\
}\
} while(0);
#else
#define PACKET_DROPPED()
#define PACKET_ACCEPTED()
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
/*
* Turn on data transmission in On-Off-Keyed mode.
@ -297,25 +270,6 @@ send(unsigned char b)
*
* \param b The byte to be sent.
*/
/* static void */
/* send2(unsigned char b) */
/* { */
/* u16_t m; */
/* m = me_encode(b); */
/* send(m >> 8); */
/* send(m & 0xff); */
/* } */
/* static u16_t */
/* send2_crc16(unsigned char b, u16_t crcacc) */
/* { */
/* u16_t m; */
/* m = me_encode(b); */
/* send(m >> 8); */
/* send(m & 0xff); */
/* return crc16_add(b, crcacc); */
/* } */
static void
sendx(unsigned char b)
{
@ -328,8 +282,8 @@ sendx(unsigned char b)
}
}
static u16_t
sendx_crc16(unsigned char b, u16_t crcacc)
static uint16_t
sendx_crc16(unsigned char b, uint16_t crcacc)
{
gcr_encode(b);
GCRLOG("(%02x)", b);
@ -341,7 +295,6 @@ sendx_crc16(unsigned char b, u16_t crcacc)
return crcacc;
}
/*---------------------------------------------------------------------------*/
void
tr1001_set_txpower(unsigned char p)
@ -380,16 +333,10 @@ tr1001_set_receiver(void (* recv)(const struct radio_driver *))
}
/*---------------------------------------------------------------------------*/
void
tr1001_init()
tr1001_init(void)
{
PT_INIT(&rxhandler_pt);
#if TR1001_STATISTICS
packets_ok = packets_err = 0;
sstrength_dropped = 0;
sstrength_min = 0xFFFF;
sstrength_max = 0;
#endif /* TR1001_STATISTICS */
onoroff = OFF;
UCTL0 = CHAR; /* 8-bit character */
@ -444,16 +391,10 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
timer_restart(&rxtimer);
if(tr1001_rxstate == RXSTATE_RECEVING) {
unsigned short signal = radio_sensor.value(0);;
if(tr1001_rxstate == RXSTATE_RECEIVING) {
unsigned short signal = radio_sensor.value(0);
tmp_sstrength += (signal >> 2);
tmp_count++;
if(signal < tmp_sstrength_min) {
tmp_sstrength_min = signal;
}
if(signal > tmp_sstrength_max) {
tmp_sstrength_max = signal;
}
}
PT_BEGIN(&rxhandler_pt);
@ -466,7 +407,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* Wait until we receive the first syncronization byte. */
PT_WAIT_UNTIL(&rxhandler_pt, incoming_byte == SYNCH1);
tr1001_rxstate = RXSTATE_RECEVING;
tr1001_rxstate = RXSTATE_RECEIVING;
/* Read all incoming syncronization bytes. */
PT_WAIT_WHILE(&rxhandler_pt, incoming_byte == SYNCH1);
@ -480,8 +421,6 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* Start signal strength measurement */
tmp_sstrength = 0;
tmp_count = 0;
tmp_sstrength_max = 0;
tmp_sstrength_min = 0xFFFF;
/* Reset the CRC. */
rxcrc = 0xffff;
@ -503,7 +442,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
if(!gcr_valid()) {
beep_beep(1000);
LOG("Incorrect GCR in header at byte %d/1 %x\n", tmppos, incoming_byte);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
} while(!gcr_get_decoded(&rxtmp));
@ -521,7 +460,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* If the length is longer than we can handle, we'll start from
the beginning. */
if(tmppos + tr1001_rxlen > sizeof(tr1001_rxbuf)) {
PACKET_DROPPED();
RIMESTATS_ADD(toolong);
PT_RESTART(&rxhandler_pt);
}
@ -540,7 +479,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
beep_beep(1000);
LOG("Incorrect GCR 0x%02x at byte %d/1\n", incoming_byte,
tmppos - TR1001_HDRLEN);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
} while(!gcr_get_decoded(&rxtmp));
@ -561,7 +500,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
gcr_decode(incoming_byte);
if(!gcr_valid()) {
beep_beep(1000);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
} while(!gcr_get_decoded(&rxtmp));
@ -575,7 +514,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* A full packet has been received and the CRC checks out. We'll
request the driver to take care of the incoming data. */
PACKET_ACCEPTED();
RIMESTATS_ADD(llrx);
process_poll(&tr1001_process);
/* We'll set the receive state flag to signal that a full frame
@ -587,7 +526,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
} else {
LOG("Incorrect CRC\n");
beep_beep(1000);
PACKET_DROPPED();
RIMESTATS_ADD(badcrc);
}
}
PT_END(&rxhandler_pt);
@ -612,7 +551,7 @@ prepare_transmission(int synchbytes)
we wait until the reception has been completed. Reception is done
with interrupts so it is OK for us to wait in a while() loop. */
while(tr1001_rxstate == RXSTATE_RECEVING &&
while(tr1001_rxstate == RXSTATE_RECEIVING &&
!timer_expired(&rxtimer)) {
/* Delay the transmission for a short random duration. */
clock_delay(random_rand() & 0x7ff);
@ -649,7 +588,7 @@ int
tr1001_send(const void *packet, unsigned short len)
{
int i;
u16_t crc16;
uint16_t crc16;
LOG("tr1001_send: sending %d bytes\n", len);
@ -658,8 +597,6 @@ tr1001_send(const void *packet, unsigned short len)
/* Prepare the transmission. */
prepare_transmission(NUM_SYNCHBYTES);
radio_active = 1;
crc16 = 0xffff;
gcr_init();
@ -672,7 +609,7 @@ tr1001_send(const void *packet, unsigned short len)
/* Send packet data. */
for(i = 0; i < len; ++i) {
crc16 = sendx_crc16(((u8_t *)packet)[i], crc16);
crc16 = sendx_crc16(((uint8_t *)packet)[i], crc16);
}
/* Send CRC */
@ -702,7 +639,8 @@ tr1001_send(const void *packet, unsigned short len)
}
ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT);
RIMESTATS_ADD(lltx);
return 0;
}
/*---------------------------------------------------------------------------*/
@ -726,8 +664,6 @@ tr1001_read(void *buf, unsigned short bufsize)
/* header + content + CRC */
/* sstrength = (tmp_sstrength / (TR1001_HDRLEN + tr1001_rxlen + 2)) << 1; */
sstrength = (tmp_count ? ((tmp_sstrength / tmp_count) << 2) : 0);
sstrength_max = tmp_sstrength_max;
sstrength_min = tmp_sstrength_min;
rxclear();
@ -753,7 +689,7 @@ PROCESS_THREAD(tr1001_process, ev, data)
LOG("tr1001 has no receive function\n");
/* Perform a dummy read to drop the message. */
tr1001_read((u8_t *) &data, 0);
tr1001_read((uint8_t *)&data, 0);
}
}
@ -792,59 +728,6 @@ tr1001_sstrength(void)
{
return sstrength;
}
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
unsigned short
tr1001_packets_ok(void)
{
return packets_ok;
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
unsigned short
tr1001_packets_dropped(void)
{
return packets_err;
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
void
tr1001_clear_packets(void)
{
packets_ok = packets_err = 0;
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
unsigned short
tr1001_sstrength_value(unsigned int type)
{
switch(type) {
case TR1001_SSTRENGTH_DROPPED:
return sstrength_dropped;
case TR1001_SSTRENGTH_MAX:
return sstrength_max;
case TR1001_SSTRENGTH_MIN:
return sstrength_min < sstrength_max ? sstrength_min : 0;
default:
return 0;
}
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
unsigned char
tr1001_active(void)
{
return radio_active;
}
/*--------------------------------------------------------------------------*/
void
tr1001_clear_active(void)
{
radio_active = 0;
}
/*--------------------------------------------------------------------------*/
/** @} */
/** @} */

View file

@ -28,7 +28,7 @@
*
* This file is part of the Contiki operating system.
*
* @(#)$Id: tr1001.c,v 1.9 2007/11/28 21:28:03 nifi Exp $
* @(#)$Id: tr1001.c,v 1.10 2008/07/08 12:27:22 nifi Exp $
*/
/**
* \addtogroup esb
@ -56,28 +56,19 @@
#include "dev/radio-sensor.h"
#include "lib/me.h"
#include "lib/crc16.h"
#include "net/rime/rimestats.h"
#include <io.h>
#include <signal.h>
#include <string.h>
#define RXSTATE_READY 0
#define RXSTATE_RECEVING 1
#define RXSTATE_FULL 2
#define RXSTATE_READY 0
#define RXSTATE_RECEIVING 1
#define RXSTATE_FULL 2
#define SYNCH1 0x3c
#define SYNCH2 0x03
#if TR1001_STATISTICS
static unsigned short sstrength_dropped,
sstrength_max, sstrength_min, tmp_sstrength_max, tmp_sstrength_min;
/* The number of dropped packets */
static unsigned short packets_err;
/* The number of accepted packets */
static unsigned short packets_ok;
#endif /* TR1001_STATISTICS */
/*
* The buffer which holds incoming data.
*/
@ -94,15 +85,13 @@ static unsigned short tr1001_rxlen = 0;
*/
volatile unsigned char tr1001_rxstate = RXSTATE_READY;
static u8_t radio_active;
static u16_t rxcrc, rxcrctmp;
static uint16_t rxcrc, rxcrctmp;
/*
* The structure of the packet header.
*/
struct tr1001_hdr {
u8_t len[2]; /**< The 16-bit length of the packet in network byte
uint8_t len[2]; /**< The 16-bit length of the packet in network byte
order. */
};
@ -113,7 +102,7 @@ struct tr1001_hdr {
#define OFF 0
#define ON 1
static u8_t onoroff = OFF;
static uint8_t onoroff = OFF;
#define NUM_SYNCHBYTES 4
@ -158,23 +147,6 @@ const struct radio_driver tr1001_driver = {
tr1001_off
};
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
#define PACKET_DROPPED() do { \
if(packets_err < ~0) {\
packets_err++;\
}\
sstrength_dropped = (tmp_count ? ((tmp_sstrength / tmp_count) << 2) : 0);\
} while(0)
#define PACKET_ACCEPTED() do {\
if(packets_ok < ~0) {\
packets_ok++;\
}\
} while(0);
#else
#define PACKET_DROPPED()
#define PACKET_ACCEPTED()
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
/*
* Turn on data transmission in On-Off-Keyed mode.
@ -298,15 +270,15 @@ send(unsigned char b)
static void
send2(unsigned char b)
{
u16_t m;
uint16_t m;
m = me_encode(b);
send(m >> 8);
send(m & 0xff);
}
static u16_t
send2_crc16(unsigned char b, u16_t crcacc)
static uint16_t
send2_crc16(unsigned char b, uint16_t crcacc)
{
u16_t m;
uint16_t m;
m = me_encode(b);
send(m >> 8);
send(m & 0xff);
@ -355,12 +327,6 @@ tr1001_init(void)
PT_INIT(&rxhandler_pt);
#if TR1001_STATISTICS
packets_ok = packets_err = 0;
sstrength_dropped = 0;
sstrength_min = 0xFFFF;
sstrength_max = 0;
#endif /* TR1001_STATISTICS */
onoroff = OFF;
UCTL0 = CHAR; /* 8-bit character */
@ -415,16 +381,10 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
timer_restart(&rxtimer);
if(tr1001_rxstate == RXSTATE_RECEVING) {
if(tr1001_rxstate == RXSTATE_RECEIVING) {
unsigned short signal = radio_sensor.value(0);
tmp_sstrength += (signal >> 2);
tmp_count++;
if(signal < tmp_sstrength_min) {
tmp_sstrength_min = signal;
}
if(signal > tmp_sstrength_max) {
tmp_sstrength_max = signal;
}
}
PT_BEGIN(&rxhandler_pt);
@ -437,7 +397,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* Wait until we receive the first syncronization byte. */
PT_WAIT_UNTIL(&rxhandler_pt, incoming_byte == SYNCH1);
tr1001_rxstate = RXSTATE_RECEVING;
tr1001_rxstate = RXSTATE_RECEIVING;
/* Read all incoming syncronization bytes. */
PT_WAIT_WHILE(&rxhandler_pt, incoming_byte == SYNCH1);
@ -451,8 +411,6 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* Start signal strength measurement */
tmp_sstrength = 0;
tmp_count = 0;
tmp_sstrength_max = 0;
tmp_sstrength_min = 0xFFFF;
/* Reset the CRC. */
rxcrc = 0xffff;
@ -464,11 +422,11 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
PT_YIELD(&rxhandler_pt);
/* If the incoming byte isn't a valid Manchester encoded byte,
we start again from the beinning. */
we start again from the beginning. */
if(!me_valid(incoming_byte)) {
beep_beep(1000);
LOG("Incorrect manchester in header at byte %d/1\n", tmppos);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
@ -480,7 +438,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
if(!me_valid(incoming_byte)) {
beep_beep(1000);
LOG("Incorrect manchester in header at byte %d/2\n", tmppos);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
@ -502,7 +460,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* If the length is longer than we can handle, we'll start from
the beginning. */
if(tmppos + tr1001_rxlen > sizeof(tr1001_rxbuf)) {
PACKET_DROPPED();
RIMESTATS_ADD(toolong);
PT_RESTART(&rxhandler_pt);
}
@ -514,7 +472,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
LOG("Incorrect manchester 0x%02x at byte %d/1\n", incoming_byte,
tmppos - TR1001_HDRLEN);
beep_beep(1000);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
@ -525,7 +483,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
if(!me_valid(incoming_byte)) {
LOG("Incorrect manchester at byte %d/2\n", tmppos - TR1001_HDRLEN);
beep_beep(1000);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
@ -541,7 +499,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
if(!me_valid(incoming_byte)) {
beep_beep(1000);
PACKET_DROPPED();
RIMESTATS_ADD(badsynch);
PT_RESTART(&rxhandler_pt);
}
@ -552,7 +510,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
/* A full packet has been received and the CRC checks out. We'll
request the driver to take care of the incoming data. */
PACKET_ACCEPTED();
RIMESTATS_ADD(llrx);
process_poll(&tr1001_process);
/* We'll set the receive state flag to signal that a full frame
@ -564,7 +522,7 @@ PT_THREAD(tr1001_default_rxhandler_pt(unsigned char incoming_byte))
} else {
LOG("Incorrect CRC");
beep_beep(1000);
PACKET_DROPPED();
RIMESTATS_ADD(badcrc);
}
}
PT_END(&rxhandler_pt);
@ -589,7 +547,7 @@ prepare_transmission(int synchbytes)
we wait until the reception has been completed. Reception is done
with interrupts so it is OK for us to wait in a while() loop. */
while(tr1001_rxstate == RXSTATE_RECEVING &&
while(tr1001_rxstate == RXSTATE_RECEIVING &&
!timer_expired(&rxtimer)) {
/* Delay the transmission for a short random duration. */
clock_delay(random_rand() & 0x7ff);
@ -623,10 +581,10 @@ prepare_transmission(int synchbytes)
}
/*---------------------------------------------------------------------------*/
int
tr1001_send(const u8_t *packet, u16_t len)
tr1001_send(const uint8_t *packet, uint16_t len)
{
int i;
u16_t crc16;
uint16_t crc16;
LOG("tr1001_send: sending %d bytes\n", len);
@ -635,8 +593,6 @@ tr1001_send(const u8_t *packet, u16_t len)
/* Prepare the transmission. */
prepare_transmission(NUM_SYNCHBYTES);
radio_active = 1;
crc16 = 0xffff;
/* Send packet header. */
@ -668,12 +624,13 @@ tr1001_send(const u8_t *packet, u16_t len)
}
ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT);
RIMESTATS_ADD(lltx);
return 0;
}
/*---------------------------------------------------------------------------*/
u16_t
tr1001_read(u8_t *buf, u16_t bufsize)
uint16_t
tr1001_read(uint8_t *buf, uint16_t bufsize)
{
unsigned short tmplen;
@ -694,8 +651,6 @@ tr1001_read(u8_t *buf, u16_t bufsize)
/* header + content + CRC */
sstrength = (tmp_count ? ((tmp_sstrength / tmp_count) << 2) : 0);
sstrength_max = tmp_sstrength_max;
sstrength_min = tmp_sstrength_min;
rxclear();
@ -761,58 +716,5 @@ tr1001_sstrength(void)
return sstrength;
}
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
unsigned short
tr1001_packets_ok(void)
{
return packets_ok;
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
unsigned short
tr1001_packets_dropped(void)
{
return packets_err;
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
void
tr1001_clear_packets(void)
{
packets_ok = packets_err = 0;
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
#if TR1001_STATISTICS
unsigned short
tr1001_sstrength_value(unsigned int type)
{
switch(type) {
case TR1001_SSTRENGTH_DROPPED:
return sstrength_dropped;
case TR1001_SSTRENGTH_MAX:
return sstrength_max;
case TR1001_SSTRENGTH_MIN:
return sstrength_min < sstrength_max ? sstrength_min : 0;
default:
return 0;
}
}
#endif /* TR1001_STATISTICS */
/*---------------------------------------------------------------------------*/
unsigned char
tr1001_active(void)
{
return radio_active;
}
/*--------------------------------------------------------------------------*/
void
tr1001_clear_active(void)
{
radio_active = 0;
}
/*---------------------------------------------------------------------------*/
/** @} */
/** @} */

View file

@ -28,7 +28,7 @@
*
* This file is part of the Contiki operating system.
*
* @(#)$Id: tr1001.h,v 1.6 2007/11/19 09:50:54 adamdunkels Exp $
* @(#)$Id: tr1001.h,v 1.7 2008/07/08 12:27:22 nifi Exp $
*/
#ifndef __TR1001_H__
#define __TR1001_H__
@ -140,22 +140,4 @@ extern volatile unsigned char tr1001_rxstate;
*/
unsigned short tr1001_sstrength(void);
#ifdef TR1001_CONF_STATISTICS
#define TR1001_STATISTICS TR1001_CONF_STATISTICS
#else
#define TR1001_STATISTICS 1
#endif
#if TR1001_STATISTICS
#define TR1001_SSTRENGTH_DROPPED 1
#define TR1001_SSTRENGTH_MAX 2
#define TR1001_SSTRENGTH_MIN 3
unsigned short tr1001_packets_ok(void);
unsigned short tr1001_packets_dropped(void);
void tr1001_clear_packets(void);
unsigned short tr1001_sstrength_value(unsigned int type);
unsigned char tr1001_active(void);
void tr1001_clear_active(void);
#endif /* TR1001_STATISTICS */
#endif /* __TR1001_H__ */