cc1200: removed the hardware dependent sniffer stuff from cc1200
This commit is contained in:
parent
ed0460e369
commit
584b6ae4ca
|
@ -25,7 +25,7 @@
|
||||||
#define RF_CFG_CCA_THRESHOLD (-91)
|
#define RF_CFG_CCA_THRESHOLD (-91)
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
static const char rf_cfg_descriptor[] = "802.15.4g 863-870MHz MR-FSK mode #1\n";
|
static const char rf_cfg_descriptor[] = "802.15.4g 863-870MHz MR-FSK mode #1";
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
* Register settings exported from SmartRF Studio using the standard template
|
* Register settings exported from SmartRF Studio using the standard template
|
||||||
|
@ -119,7 +119,7 @@ static const registerSetting_t preferredSettings[]=
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Global linkage: symbol name must be different in each exported file! */
|
/* Global linkage: symbol name must be different in each exported file! */
|
||||||
const cc1200_rf_cfg_t cc1200_802154g_863_870_fsk_50kbps = {
|
const cc1200_rf_cfg_t cc1200_802154g_863_870_fsk_50kbps = {
|
||||||
.rf_cfg_descriptor = rf_cfg_descriptor,
|
.cfg_descriptor = rf_cfg_descriptor,
|
||||||
.register_settings = preferredSettings,
|
.register_settings = preferredSettings,
|
||||||
.size_of_register_settings = sizeof(preferredSettings),
|
.size_of_register_settings = sizeof(preferredSettings),
|
||||||
.tx_pkt_lifetime = (RTIMER_SECOND / 20),
|
.tx_pkt_lifetime = (RTIMER_SECOND / 20),
|
||||||
|
|
|
@ -57,7 +57,7 @@ typedef registerSetting_t cc1200_register_settings_t;
|
||||||
/* This struct holds the complete configuration for a given mode */
|
/* This struct holds the complete configuration for a given mode */
|
||||||
typedef struct cc1200_rf_cfg {
|
typedef struct cc1200_rf_cfg {
|
||||||
/* A string describing the mode */
|
/* A string describing the mode */
|
||||||
const char *rf_cfg_descriptor;
|
const char *cfg_descriptor;
|
||||||
/* A pointer to a register setup exported from SmartRF */
|
/* A pointer to a register setup exported from SmartRF */
|
||||||
const cc1200_register_settings_t *register_settings;
|
const cc1200_register_settings_t *register_settings;
|
||||||
/* The size of the register setup */
|
/* The size of the register setup */
|
||||||
|
|
|
@ -67,6 +67,16 @@
|
||||||
* The channel is set according to CC1200_DEFAULT_CHANNEL
|
* The channel is set according to CC1200_DEFAULT_CHANNEL
|
||||||
*/
|
*/
|
||||||
#define RF_TESTMODE 0
|
#define RF_TESTMODE 0
|
||||||
|
#if RF_TESTMODE
|
||||||
|
#undef CC1200_RF_CFG
|
||||||
|
#if RF_TESTMODE == 1
|
||||||
|
#define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps
|
||||||
|
#elif RF_TESTMODE == 2
|
||||||
|
#define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps
|
||||||
|
#elif RF_TESTMODE == 3
|
||||||
|
#define CC1200_RF_CFG cc1200_802154g_863_870_fsk_50kbps
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* Set this parameter to 1 in order to use the MARC_STATE register when
|
* Set this parameter to 1 in order to use the MARC_STATE register when
|
||||||
* polling the chips's status. Else use the status byte returned when sending
|
* polling the chips's status. Else use the status byte returned when sending
|
||||||
|
@ -82,21 +92,6 @@
|
||||||
* TODO: Option to be removed upon approval of the driver
|
* TODO: Option to be removed upon approval of the driver
|
||||||
*/
|
*/
|
||||||
#define USE_SFSTXON 1
|
#define USE_SFSTXON 1
|
||||||
/*
|
|
||||||
* Set this parameter to 1 in order to force the transmission of an ACK
|
|
||||||
* regardless of the frame received. Used during development in order
|
|
||||||
* to determine various timing parameters (e.g. RX/TX turnaround)
|
|
||||||
*
|
|
||||||
* TODO: Option to be removed upon approval of the driver
|
|
||||||
*/
|
|
||||||
#define ALWAYS_SEND_ACK 0
|
|
||||||
/*
|
|
||||||
* Set this parameter to 1 in order to avoid passing data to the next upper
|
|
||||||
* layer. Used to test RX path and timings
|
|
||||||
*
|
|
||||||
* TODO: Option to be removed upon approval of the driver
|
|
||||||
*/
|
|
||||||
#define RX_STRESSTEST 0
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Phy header length */
|
/* Phy header length */
|
||||||
#if CC1200_802154G
|
#if CC1200_802154G
|
||||||
|
@ -199,23 +194,6 @@ extern const cc1200_rf_cfg_t CC1200_RF_CFG;
|
||||||
#error Invalid settings for frequency calculation
|
#error Invalid settings for frequency calculation
|
||||||
#endif
|
#endif
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Sniffer configuration */
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
#if CC1200_SNIFFER
|
|
||||||
#if CC1200_SNIFFER_USB
|
|
||||||
#include "usb/usb-serial.h"
|
|
||||||
#define write_byte(b) usb_serial_writeb(b)
|
|
||||||
#define flush() usb_serial_flush()
|
|
||||||
#else
|
|
||||||
#include "dev/uart.h"
|
|
||||||
#define write_byte(b) uart_write_byte(CC1200_SNIFFER_UART, b)
|
|
||||||
#define flush()
|
|
||||||
#endif /* CC1200_SNIFFER_USB */
|
|
||||||
#else /* CC1200_SNIFFER */
|
|
||||||
#define write_byte(b)
|
|
||||||
#define flush()
|
|
||||||
#endif /* CC1200_SNIFFER */
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
#if STATE_USES_MARC_STATE
|
#if STATE_USES_MARC_STATE
|
||||||
/* We use the MARC_STATE register to poll the chip's status */
|
/* We use the MARC_STATE register to poll the chip's status */
|
||||||
#define STATE_IDLE CC1200_MARC_STATE_IDLE
|
#define STATE_IDLE CC1200_MARC_STATE_IDLE
|
||||||
|
@ -672,7 +650,7 @@ static int
|
||||||
init(void)
|
init(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
INFO("RF: Init\n");
|
INFO("RF: Init (%s)\n", CC1200_RF_CFG.cfg_descriptor);
|
||||||
|
|
||||||
if(!(rf_flags & RF_INITIALIZED)) {
|
if(!(rf_flags & RF_INITIALIZED)) {
|
||||||
|
|
||||||
|
@ -884,9 +862,6 @@ static int
|
||||||
read(void *buf, unsigned short buf_len)
|
read(void *buf, unsigned short buf_len)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if CC1200_SNIFFER
|
|
||||||
int i;
|
|
||||||
#endif
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
if(rx_pkt_len > 0) {
|
if(rx_pkt_len > 0) {
|
||||||
|
@ -907,26 +882,9 @@ read(void *buf, unsigned short buf_len)
|
||||||
|
|
||||||
memcpy((void *)buf, (const void *)rx_pkt, len);
|
memcpy((void *)buf, (const void *)rx_pkt, len);
|
||||||
|
|
||||||
/* Release rx_pkt as soon as possible */
|
/* Release rx_pkt */
|
||||||
rx_pkt_len = 0;
|
rx_pkt_len = 0;
|
||||||
|
|
||||||
#if CC1200_SNIFFER
|
|
||||||
|
|
||||||
/* Use sensniff tool + Wireshark */
|
|
||||||
write_byte('S');
|
|
||||||
write_byte('n');
|
|
||||||
write_byte('i');
|
|
||||||
write_byte('f');
|
|
||||||
write_byte(len + APPENDIX_LEN);
|
|
||||||
for(i = 0; i < len; i++) {
|
|
||||||
write_byte(((uint8_t *)buf)[i]);
|
|
||||||
}
|
|
||||||
write_byte(rssi);
|
|
||||||
write_byte(crc_lqi);
|
|
||||||
flush();
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
packetbuf_set_attr(PACKETBUF_ATTR_RSSI, rssi);
|
packetbuf_set_attr(PACKETBUF_ATTR_RSSI, rssi);
|
||||||
/* Mask out CRC bit */
|
/* Mask out CRC bit */
|
||||||
packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY,
|
packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY,
|
||||||
|
@ -934,10 +892,6 @@ read(void *buf, unsigned short buf_len)
|
||||||
|
|
||||||
RIMESTATS_ADD(llrx);
|
RIMESTATS_ADD(llrx);
|
||||||
|
|
||||||
#if DONT_PASS_DATA
|
|
||||||
len = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1347,7 +1301,6 @@ set_object(radio_param_t param, const void *src, size_t size)
|
||||||
return RADIO_RESULT_NOT_SUPPORTED;
|
return RADIO_RESULT_NOT_SUPPORTED;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
|
@ -2117,7 +2070,7 @@ static int
|
||||||
is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
||||||
{
|
{
|
||||||
|
|
||||||
int i = ((mode == FRAME802154_SHORTADDRMODE) ? 2 : 8);
|
int i = mode == FRAME802154_SHORTADDRMODE ? 2 : 8;
|
||||||
|
|
||||||
while(i-- > 0) {
|
while(i-- > 0) {
|
||||||
if(addr[i] != 0xff) {
|
if(addr[i] != 0xff) {
|
||||||
|
@ -2130,19 +2083,37 @@ is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/* Validate address and send ACK if requested. */
|
/* Validate address and send ACK if requested. */
|
||||||
|
#if CC1200_SNIFFER
|
||||||
static int
|
static int
|
||||||
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
{
|
{
|
||||||
|
|
||||||
frame802154_t info154;
|
frame802154_t info154;
|
||||||
|
|
||||||
#if ALWAYS_SEND_ACK
|
if(frame802154_parse(frame, frame_len, &info154) != 0) {
|
||||||
info154.seq = (uint8_t)frame_len;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !ALWAYS_SEND_ACK
|
/* We accept all 802.15.4 frames ... */
|
||||||
|
return ADDR_CHECK_OK;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* .. and discard others. */
|
||||||
|
return INVALID_FRAME;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#else /* #if CC1200_SNIFFER */
|
||||||
|
static int
|
||||||
|
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
|
{
|
||||||
|
|
||||||
|
frame802154_t info154;
|
||||||
|
|
||||||
if(frame802154_parse(frame, frame_len, &info154) != 0) {
|
if(frame802154_parse(frame, frame_len, &info154) != 0) {
|
||||||
|
|
||||||
|
/* We received a valid 802.15.4 frame */
|
||||||
|
|
||||||
if(!(rx_mode_value & RADIO_RX_MODE_ADDRESS_FILTER) ||
|
if(!(rx_mode_value & RADIO_RX_MODE_ADDRESS_FILTER) ||
|
||||||
info154.fcf.frame_type == FRAME802154_ACKFRAME ||
|
info154.fcf.frame_type == FRAME802154_ACKFRAME ||
|
||||||
is_broadcast_addr(info154.fcf.dest_addr_mode,
|
is_broadcast_addr(info154.fcf.dest_addr_mode,
|
||||||
|
@ -2150,19 +2121,22 @@ addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
linkaddr_cmp((linkaddr_t *)&info154.dest_addr,
|
linkaddr_cmp((linkaddr_t *)&info154.dest_addr,
|
||||||
&linkaddr_node_addr)) {
|
&linkaddr_node_addr)) {
|
||||||
|
|
||||||
/* Address check succeeded */
|
/*
|
||||||
|
* Address check succeeded or address filter disabled.
|
||||||
|
* We send an ACK in case a corresponding data frame
|
||||||
|
* is received even in promiscuous mode (if auto-ack is
|
||||||
|
* enabled)!
|
||||||
|
*/
|
||||||
|
|
||||||
if((rx_mode_value & RADIO_RX_MODE_AUTOACK) &&
|
if((rx_mode_value & RADIO_RX_MODE_AUTOACK) &&
|
||||||
info154.fcf.frame_type == FRAME802154_DATAFRAME &&
|
info154.fcf.frame_type == FRAME802154_DATAFRAME &&
|
||||||
info154.fcf.ack_required != 0 &&
|
info154.fcf.ack_required != 0 &&
|
||||||
|
(!(rx_mode_value & RADIO_RX_MODE_ADDRESS_FILTER) ||
|
||||||
linkaddr_cmp((linkaddr_t *)&info154.dest_addr,
|
linkaddr_cmp((linkaddr_t *)&info154.dest_addr,
|
||||||
&linkaddr_node_addr)) {
|
&linkaddr_node_addr))) {
|
||||||
|
|
||||||
#endif /* #if !ALWAYS_SEND_ACK */
|
|
||||||
|
|
||||||
/* Data frame destined for us & ACK request bit set -> send ACK */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Data frame destined for us & ACK request bit set -> send ACK.
|
||||||
* Make sure the preamble length is configured accordingly as
|
* Make sure the preamble length is configured accordingly as
|
||||||
* MAC timing parameters rely on this!
|
* MAC timing parameters rely on this!
|
||||||
*/
|
*/
|
||||||
|
@ -2183,22 +2157,22 @@ addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||||
|
|
||||||
return ADDR_CHECK_OK_ACK_SEND;
|
return ADDR_CHECK_OK_ACK_SEND;
|
||||||
|
|
||||||
#if !ALWAYS_SEND_ACK
|
}
|
||||||
|
|
||||||
}
|
return ADDR_CHECK_OK;
|
||||||
return ADDR_CHECK_OK;
|
|
||||||
|
} else {
|
||||||
|
|
||||||
} else {
|
|
||||||
return ADDR_CHECK_FAILED;
|
return ADDR_CHECK_FAILED;
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
return INVALID_FRAME;
|
|
||||||
|
return INVALID_FRAME;
|
||||||
#endif /* #if !ALWAYS_SEND_ACK */
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* #if CC1200_SNIFFER */
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
* The CC1200 interrupt handler: called by the hardware interrupt
|
* The CC1200 interrupt handler: called by the hardware interrupt
|
||||||
|
@ -2387,12 +2361,9 @@ cc1200_rx_interrupt(void)
|
||||||
/* An old packet is pending. Drop the packet */
|
/* An old packet is pending. Drop the packet */
|
||||||
WARNING("RF: Packet pending!\n");
|
WARNING("RF: Packet pending!\n");
|
||||||
} else {
|
} else {
|
||||||
#if CC1200_SNIFFER
|
|
||||||
/* Skip address check in sniffer mode */
|
|
||||||
int ret = ADDR_CHECK_OK;
|
|
||||||
#else
|
|
||||||
int ret = addr_check_auto_ack(buf, bytes_read);
|
int ret = addr_check_auto_ack(buf, bytes_read);
|
||||||
#endif
|
|
||||||
if((ret == ADDR_CHECK_OK) ||
|
if((ret == ADDR_CHECK_OK) ||
|
||||||
(ret == ADDR_CHECK_OK_ACK_SEND)) {
|
(ret == ADDR_CHECK_OK_ACK_SEND)) {
|
||||||
#if APPEND_STATUS
|
#if APPEND_STATUS
|
||||||
|
|
Loading…
Reference in a new issue