cc1200: removed the hardware dependent sniffer stuff from cc1200
This commit is contained in:
parent
ed0460e369
commit
584b6ae4ca
3 changed files with 77 additions and 106 deletions
|
@ -25,7 +25,7 @@
|
|||
#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
|
||||
|
@ -119,7 +119,7 @@ static const registerSetting_t preferredSettings[]=
|
|||
/*---------------------------------------------------------------------------*/
|
||||
/* Global linkage: symbol name must be different in each exported file! */
|
||||
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,
|
||||
.size_of_register_settings = sizeof(preferredSettings),
|
||||
.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 */
|
||||
typedef struct cc1200_rf_cfg {
|
||||
/* A string describing the mode */
|
||||
const char *rf_cfg_descriptor;
|
||||
const char *cfg_descriptor;
|
||||
/* A pointer to a register setup exported from SmartRF */
|
||||
const cc1200_register_settings_t *register_settings;
|
||||
/* The size of the register setup */
|
||||
|
|
|
@ -67,6 +67,16 @@
|
|||
* The channel is set according to CC1200_DEFAULT_CHANNEL
|
||||
*/
|
||||
#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
|
||||
* 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
|
||||
*/
|
||||
#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 */
|
||||
#if CC1200_802154G
|
||||
|
@ -199,23 +194,6 @@ extern const cc1200_rf_cfg_t CC1200_RF_CFG;
|
|||
#error Invalid settings for frequency calculation
|
||||
#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
|
||||
/* We use the MARC_STATE register to poll the chip's status */
|
||||
#define STATE_IDLE CC1200_MARC_STATE_IDLE
|
||||
|
@ -672,7 +650,7 @@ static int
|
|||
init(void)
|
||||
{
|
||||
|
||||
INFO("RF: Init\n");
|
||||
INFO("RF: Init (%s)\n", CC1200_RF_CFG.cfg_descriptor);
|
||||
|
||||
if(!(rf_flags & RF_INITIALIZED)) {
|
||||
|
||||
|
@ -884,9 +862,6 @@ static int
|
|||
read(void *buf, unsigned short buf_len)
|
||||
{
|
||||
|
||||
#if CC1200_SNIFFER
|
||||
int i;
|
||||
#endif
|
||||
int 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);
|
||||
|
||||
/* Release rx_pkt as soon as possible */
|
||||
/* Release rx_pkt */
|
||||
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);
|
||||
/* Mask out CRC bit */
|
||||
packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY,
|
||||
|
@ -934,10 +892,6 @@ read(void *buf, unsigned short buf_len)
|
|||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
|
@ -2117,7 +2070,7 @@ static int
|
|||
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) {
|
||||
if(addr[i] != 0xff) {
|
||||
|
@ -2130,19 +2083,37 @@ is_broadcast_addr(uint8_t mode, uint8_t *addr)
|
|||
}
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Validate address and send ACK if requested. */
|
||||
#if CC1200_SNIFFER
|
||||
static int
|
||||
addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
||||
{
|
||||
|
||||
frame802154_t info154;
|
||||
|
||||
#if ALWAYS_SEND_ACK
|
||||
info154.seq = (uint8_t)frame_len;
|
||||
#endif
|
||||
if(frame802154_parse(frame, frame_len, &info154) != 0) {
|
||||
|
||||
#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) {
|
||||
|
||||
/* We received a valid 802.15.4 frame */
|
||||
|
||||
if(!(rx_mode_value & RADIO_RX_MODE_ADDRESS_FILTER) ||
|
||||
info154.fcf.frame_type == FRAME802154_ACKFRAME ||
|
||||
is_broadcast_addr(info154.fcf.dest_addr_mode,
|
||||
|
@ -2150,55 +2121,58 @@ addr_check_auto_ack(uint8_t *frame, uint16_t frame_len)
|
|||
linkaddr_cmp((linkaddr_t *)&info154.dest_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) &&
|
||||
info154.fcf.frame_type == FRAME802154_DATAFRAME &&
|
||||
info154.fcf.ack_required != 0 &&
|
||||
linkaddr_cmp((linkaddr_t *)&info154.dest_addr,
|
||||
&linkaddr_node_addr)) {
|
||||
(!(rx_mode_value & RADIO_RX_MODE_ADDRESS_FILTER) ||
|
||||
linkaddr_cmp((linkaddr_t *)&info154.dest_addr,
|
||||
&linkaddr_node_addr))) {
|
||||
|
||||
#endif /* #if !ALWAYS_SEND_ACK */
|
||||
/*
|
||||
* Data frame destined for us & ACK request bit set -> send ACK.
|
||||
* Make sure the preamble length is configured accordingly as
|
||||
* MAC timing parameters rely on this!
|
||||
*/
|
||||
|
||||
/* Data frame destined for us & ACK request bit set -> send ACK */
|
||||
|
||||
/*
|
||||
* Make sure the preamble length is configured accordingly as
|
||||
* MAC timing parameters rely on this!
|
||||
*/
|
||||
|
||||
uint8_t ack[ACK_LEN] = { FRAME802154_ACKFRAME, 0, info154.seq };
|
||||
uint8_t ack[ACK_LEN] = { FRAME802154_ACKFRAME, 0, info154.seq };
|
||||
|
||||
#if (RXOFF_MODE_RX == 1)
|
||||
/*
|
||||
* This turns off GPIOx interrupts. Make sure they are turned on
|
||||
* in rx_rx() later on!
|
||||
*/
|
||||
idle();
|
||||
/*
|
||||
* This turns off GPIOx interrupts. Make sure they are turned on
|
||||
* in rx_rx() later on!
|
||||
*/
|
||||
idle();
|
||||
#endif
|
||||
|
||||
idle_tx_rx((const uint8_t *)ack, ACK_LEN);
|
||||
|
||||
/* rx_rx() will follow */
|
||||
|
||||
return ADDR_CHECK_OK_ACK_SEND;
|
||||
|
||||
}
|
||||
|
||||
idle_tx_rx((const uint8_t *)ack, ACK_LEN);
|
||||
return ADDR_CHECK_OK;
|
||||
|
||||
} else {
|
||||
|
||||
/* rx_rx() will follow */
|
||||
return ADDR_CHECK_FAILED;
|
||||
|
||||
return ADDR_CHECK_OK_ACK_SEND;
|
||||
}
|
||||
|
||||
#if !ALWAYS_SEND_ACK
|
||||
|
||||
}
|
||||
return ADDR_CHECK_OK;
|
||||
|
||||
} else {
|
||||
return ADDR_CHECK_FAILED;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return INVALID_FRAME;
|
||||
|
||||
#endif /* #if !ALWAYS_SEND_ACK */
|
||||
}
|
||||
|
||||
return INVALID_FRAME;
|
||||
|
||||
}
|
||||
#endif /* #if CC1200_SNIFFER */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/*
|
||||
* 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 */
|
||||
WARNING("RF: Packet pending!\n");
|
||||
} 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);
|
||||
#endif
|
||||
|
||||
if((ret == ADDR_CHECK_OK) ||
|
||||
(ret == ADDR_CHECK_OK_ACK_SEND)) {
|
||||
#if APPEND_STATUS
|
||||
|
|
Loading…
Reference in a new issue