Add RADIOSTATS

This commit is contained in:
dak664 2010-02-12 16:41:02 +00:00
parent eb2ac1a154
commit a6ab27402a
2 changed files with 76 additions and 16 deletions

View File

@ -36,7 +36,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
* *
* $Id: radio.c,v 1.3 2009/07/05 18:50:44 dak664 Exp $ * $Id: radio.c,v 1.4 2010/02/12 16:41:02 dak664 Exp $
*/ */
/** /**
@ -112,6 +112,14 @@ static radio_rx_callback rx_frame_callback;
static uint8_t rssi_val; static uint8_t rssi_val;
static uint8_t rx_mode; static uint8_t rx_mode;
uint8_t rxMode = RX_AACK_ON; uint8_t rxMode = RX_AACK_ON;
/* See clock.c and httpd-cgi.c for RADIOSTATS code */
#define RADIOSTATS 0
#if RADIOSTATS
uint8_t RF230_radio_on, RF230_rsigsi;
uint16_t RF230_sendpackets,RF230_receivepackets,RF230_sendfail,RF230_receivefail;
#endif
static hal_rx_frame_t rx_frame; static hal_rx_frame_t rx_frame;
static parsed_frame_t parsed_frame; static parsed_frame_t parsed_frame;
@ -187,6 +195,9 @@ radio_init(bool cal_rc_osc,
else else
hal_register_write(RG_IRQ_MASK, RF230_SUPPORTED_INTERRUPT_MASK); hal_register_write(RG_IRQ_MASK, RF230_SUPPORTED_INTERRUPT_MASK);
} }
#if RADIOSTATS
RF230_radio_on = 1;
#endif
} }
/* set callbacks for events. Save user's rx_event, which we will */ /* set callbacks for events. Save user's rx_event, which we will */
@ -246,6 +257,10 @@ radio_trx_end_event(uint32_t const isr_timestamp)
} }
if (rx_mode){ if (rx_mode){
/* radio has received frame, store it away */ /* radio has received frame, store it away */
#if RADIOSTATS
RF230_rssi=rssi_val;
RF230_receivepackets++;
#endif
parsed_frame.time = isr_timestamp; parsed_frame.time = isr_timestamp;
parsed_frame.rssi = rssi_val; parsed_frame.rssi = rssi_val;
@ -271,12 +286,18 @@ radio_trx_end_event(uint32_t const isr_timestamp)
case TRAC_NO_ACK: case TRAC_NO_ACK:
case TRAC_CHANNEL_ACCESS_FAILURE: case TRAC_CHANNEL_ACCESS_FAILURE:
event.event = MAC_EVENT_NACK; event.event = MAC_EVENT_NACK;
#if RADIOSTATS
RF230_sendfail++;
#endif
break; break;
case TRAC_SUCCESS_WAIT_FOR_ACK: case TRAC_SUCCESS_WAIT_FOR_ACK:
/* should only happen in RX mode */ /* should only happen in RX mode */
case TRAC_INVALID: case TRAC_INVALID:
/* should never happen here */ /* should never happen here */
default: default:
#if RADIOSTATS
RF230_sendfail++;
#endif
break; break;
} }
if (event.event) if (event.event)
@ -893,6 +914,9 @@ radio_enter_sleep_mode(void)
/* Enter Sleep. */ /* Enter Sleep. */
hal_set_slptr_high(); hal_set_slptr_high();
enter_sleep_status = RADIO_SUCCESS; enter_sleep_status = RADIO_SUCCESS;
#if RADIOSTATS
RF230_radio_on = 0;
#endif
} }
return enter_sleep_status; return enter_sleep_status;
@ -921,6 +945,9 @@ radio_leave_sleep_mode(void)
/* Ensure that the radio transceiver is in the TRX_OFF state. */ /* Ensure that the radio transceiver is in the TRX_OFF state. */
if (radio_get_trx_state() == TRX_OFF){ if (radio_get_trx_state() == TRX_OFF){
leave_sleep_status = RADIO_SUCCESS; leave_sleep_status = RADIO_SUCCESS;
#if RADIOSTATS
RF230_radio_on = 1;
#endif
} }
return leave_sleep_status; return leave_sleep_status;
@ -990,12 +1017,18 @@ radio_send_data(uint8_t data_length, uint8_t *data)
{ {
/*Check function parameters and current state.*/ /*Check function parameters and current state.*/
if (data_length > RF230_MAX_TX_FRAME_LENGTH){ if (data_length > RF230_MAX_TX_FRAME_LENGTH){
#if RADIOSTATS
RF230_sendfail++;
#endif
return RADIO_INVALID_ARGUMENT; return RADIO_INVALID_ARGUMENT;
} }
/* If we are busy, return */ /* If we are busy, return */
if ((radio_get_trx_state() == BUSY_TX) || (radio_get_trx_state() == BUSY_TX_ARET) ) if ((radio_get_trx_state() == BUSY_TX) || (radio_get_trx_state() == BUSY_TX_ARET) )
{ {
#if RADIOSTATS
RF230_sendfail++;
#endif
return RADIO_WRONG_STATE; return RADIO_WRONG_STATE;
} }
@ -1008,7 +1041,9 @@ radio_send_data(uint8_t data_length, uint8_t *data)
hal_set_slptr_low(); hal_set_slptr_low();
hal_frame_write(data, data_length); /* Then write data to the frame buffer. */ hal_frame_write(data, data_length); /* Then write data to the frame buffer. */
#if RADIOSTATS
RF230_sendpackets++;
#endif
return RADIO_SUCCESS; return RADIO_SUCCESS;
} }

View File

@ -27,7 +27,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* *
* $Id: rf230bb.c,v 1.1 2009/07/08 16:17:07 dak664 Exp $ * $Id: rf230bb.c,v 1.2 2010/02/12 16:41:02 dak664 Exp $
*/ */
/** /**
@ -84,6 +84,13 @@
#define WITH_SEND_CCA 0 #define WITH_SEND_CCA 0
/* See clock.c and httpd-cgi.c for RADIOSTATS code */
uint8_t RF230_radio_on;
#define RADIOSTATS 0
#if RADIOSTATS
uint8_t RF230_rsigsi;
uint16_t RF230_sendpackets,RF230_receivepackets,RF230_sendfail,RF230_receivefail;
#endif
#if RF230_CONF_TIMESTAMPS #if RF230_CONF_TIMESTAMPS
#include "net/rime/timesynch.h" #include "net/rime/timesynch.h"
@ -172,8 +179,6 @@ static void (* receiver_callback)(const struct radio_driver *);
//signed char rf230_last_rssi; //signed char rf230_last_rssi;
//uint8_t rf230_last_correlation; //uint8_t rf230_last_correlation;
static uint8_t receive_on;
//static uint8_t rssi_val; //static uint8_t rssi_val;
uint8_t rx_mode; uint8_t rx_mode;
/* Radio stuff in network byte order. */ /* Radio stuff in network byte order. */
@ -396,7 +401,7 @@ on(void)
{ {
ENERGEST_ON(ENERGEST_TYPE_LISTEN); ENERGEST_ON(ENERGEST_TYPE_LISTEN);
PRINTF("rf230 internal on\n"); PRINTF("rf230 internal on\n");
receive_on = 1; RF230_radio_on = 1;
hal_set_slptr_low(); hal_set_slptr_low();
//radio_is_waking=1;//can test this before tx instead of delaying //radio_is_waking=1;//can test this before tx instead of delaying
@ -410,7 +415,7 @@ static void
off(void) off(void)
{ {
PRINTF("rf230 internal off\n"); PRINTF("rf230 internal off\n");
receive_on = 0; RF230_radio_on = 0;
/* Wait for transmission to end before turning radio off. */ /* Wait for transmission to end before turning radio off. */
rf230_waitidle(); rf230_waitidle();
@ -450,7 +455,7 @@ rf230_off(void)
{ {
// PRINTF("rf230_off\n"); // PRINTF("rf230_off\n");
/* Don't do anything if we are already turned off. */ /* Don't do anything if we are already turned off. */
if(receive_on == 0) { if(RF230_radio_on == 0) {
return 1; return 1;
} }
@ -469,7 +474,7 @@ int
rf230_on(void) rf230_on(void)
{ {
//PRINTF("rf230_on\n"); //PRINTF("rf230_on\n");
if(receive_on) { if(RF230_radio_on) {
return 1; return 1;
} }
if(locked) { if(locked) {
@ -665,6 +670,9 @@ bomb
rxframe.length=0; rxframe.length=0;
// framep+=len-AUX_LEN+2; // framep+=len-AUX_LEN+2;
#if RADIOSTATS
RF230_receivepackets++;
#endif
#if RF230_CONF_CHECKSUM #if RF230_CONF_CHECKSUM
bomb bomb
@ -706,7 +714,9 @@ bomb
packetbuf_set_addr(PACKETBUF_ADDR_SENDER, (const rimeaddr_t *)src_reversed); packetbuf_set_addr(PACKETBUF_ADDR_SENDER, (const rimeaddr_t *)src_reversed);
*/ */
#if RADIOSTATS
RF230_rsigsi=hal_subregister_read( SR_RSSI );
#endif
packetbuf_set_attr(PACKETBUF_ATTR_RSSI, hal_subregister_read( SR_RSSI )); packetbuf_set_attr(PACKETBUF_ATTR_RSSI, hal_subregister_read( SR_RSSI ));
packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY, rxframe.lqi); packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY, rxframe.lqi);
@ -726,6 +736,11 @@ bomb
} else { } else {
PRINTF("rf230: Bad CRC\n"); PRINTF("rf230: Bad CRC\n");
#if RADIOSTATS
RF230_receivefail++;
#endif
RIMESTATS_ADD(badcrc); RIMESTATS_ADD(badcrc);
len = AUX_LEN; len = AUX_LEN;
} }
@ -775,7 +790,7 @@ rf230_rssi(void)
int radio_was_off = 0; int radio_was_off = 0;
/*The RSSI measurement should only be done in RX_ON or BUSY_RX.*/ /*The RSSI measurement should only be done in RX_ON or BUSY_RX.*/
if(!receive_on) { if(!RF230_radio_on) {
radio_was_off = 1; radio_was_off = 1;
rf230_on(); rf230_on();
} }
@ -800,6 +815,10 @@ rf230_send(const void *payload, unsigned short payload_len)
uint16_t checksum; uint16_t checksum;
#endif /* RF230_CONF_CHECKSUM */ #endif /* RF230_CONF_CHECKSUM */
#if RADIOSTATS
RF230_sendpackets++;
#endif
GET_LOCK(); GET_LOCK();
if(packetbuf_attr(PACKETBUF_ATTR_RADIO_TXPOWER) > 0) { if(packetbuf_attr(PACKETBUF_ATTR_RADIO_TXPOWER) > 0) {
@ -816,6 +835,9 @@ rf230_send(const void *payload, unsigned short payload_len)
total_len = payload_len + AUX_LEN; total_len = payload_len + AUX_LEN;
/*Check function parameters and current state.*/ /*Check function parameters and current state.*/
if (total_len > RF230_MAX_TX_FRAME_LENGTH){ if (total_len > RF230_MAX_TX_FRAME_LENGTH){
#if RADIOSTATS
RF230_sendfail++;
#endif
return -1; return -1;
} }
pbuf=&buffer[0]; pbuf=&buffer[0];
@ -874,7 +896,7 @@ rf230_send(const void *payload, unsigned short payload_len)
rtimer_clock_t txtime = timesynch_time(); rtimer_clock_t txtime = timesynch_time();
#endif /* RF230_CONF_TIMESTAMPS */ #endif /* RF230_CONF_TIMESTAMPS */
if(receive_on) { if(RF230_radio_on) {
ENERGEST_OFF(ENERGEST_TYPE_LISTEN); ENERGEST_OFF(ENERGEST_TYPE_LISTEN);
} }
ENERGEST_ON(ENERGEST_TYPE_TRANSMIT); ENERGEST_ON(ENERGEST_TYPE_TRANSMIT);
@ -897,7 +919,7 @@ rf230_send(const void *payload, unsigned short payload_len)
ENERGEST_OFF_LEVEL(ENERGEST_TYPE_TRANSMIT,rf230_get_txpower()); ENERGEST_OFF_LEVEL(ENERGEST_TYPE_TRANSMIT,rf230_get_txpower());
#endif #endif
ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT); ENERGEST_OFF(ENERGEST_TYPE_TRANSMIT);
if(receive_on) { if(RF230_radio_on) {
ENERGEST_ON(ENERGEST_TYPE_LISTEN); ENERGEST_ON(ENERGEST_TYPE_LISTEN);
} }
@ -910,6 +932,9 @@ rf230_send(const void *payload, unsigned short payload_len)
transmitted because of other channel activity. */ transmitted because of other channel activity. */
RIMESTATS_ADD(contentiondrop); RIMESTATS_ADD(contentiondrop);
PRINTF("rf230: do_send() transmission never started\n"); PRINTF("rf230: do_send() transmission never started\n");
#if RADIOSTATS
RF230_sendfail++;
#endif
RELEASE_LOCK(); RELEASE_LOCK();
return -3; /* Transmission never started! */ return -3; /* Transmission never started! */
}/*---------------------------------------------------------------------------*/ }/*---------------------------------------------------------------------------*/