move cc2430_process to home bank since it needs to be called from a function pointer.

disable led code to make room in home bank.
This commit is contained in:
anthony-a 2010-01-29 19:15:44 +00:00
parent 507460d29a
commit 76749a382d
2 changed files with 41 additions and 30 deletions

View file

@ -14,14 +14,12 @@
#include "dev/radio.h" #include "dev/radio.h"
#include "dev/cc2430_rf.h" #include "dev/cc2430_rf.h"
#include "cc2430_sfr.h" #include "cc2430_sfr.h"
#include "dev/leds.h"
#include "sys/clock.h" #include "sys/clock.h"
#include "net/rime/packetbuf.h" #include "net/rime/packetbuf.h"
#include "net/rime/rimestats.h" #include "net/rime/rimestats.h"
void (* receiver_callback)(const struct radio_driver *); extern void (* receiver_callback)(const struct radio_driver *);
#ifndef RF_DEFAULT_POWER #ifndef RF_DEFAULT_POWER
#define RF_DEFAULT_POWER 100 #define RF_DEFAULT_POWER 100
#endif #endif
@ -40,12 +38,21 @@ void (* receiver_callback)(const struct radio_driver *);
#else #else
#define CHECKSUM_LEN 2 #define CHECKSUM_LEN 2
#endif /* CC2430_CONF_CHECKSUM */ #endif /* CC2430_CONF_CHECKSUM */
#if DEBUG_LEDS
/* moved leds code to BANK1 to make space for cc2430_rf_process in HOME */
/* can't call code in BANK1 from alternate banks unless it is marked with __banked */
#include "dev/leds.h"
#define RF_RX_LED_ON() leds_on(LEDS_RED); #define RF_RX_LED_ON() leds_on(LEDS_RED);
#define RF_RX_LED_OFF() leds_off(LEDS_RED); #define RF_RX_LED_OFF() leds_off(LEDS_RED);
#define RF_TX_LED_ON() leds_on(LEDS_GREEN); #define RF_TX_LED_ON() leds_on(LEDS_GREEN);
#define RF_TX_LED_OFF() leds_off(LEDS_GREEN); #define RF_TX_LED_OFF() leds_off(LEDS_GREEN);
#else
#define RF_RX_LED_ON()
#define RF_RX_LED_OFF()
#define RF_TX_LED_ON()
#define RF_TX_LED_OFF()
#endif
#include "dev/brione_lcd.h"
#define DEBUG 1 #define DEBUG 1
#if DEBUG #if DEBUG
#define PRINTF(...) printf(__VA_ARGS__) #define PRINTF(...) printf(__VA_ARGS__)
@ -72,7 +79,7 @@ uint8_t rf_softack;
uint16_t rf_panid; uint16_t rf_panid;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
PROCESS(cc2430_rf_process, "CC2430 RF driver"); PROCESS_NAME(cc2430_rf_process);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
const struct radio_driver cc2430_rf_driver = const struct radio_driver cc2430_rf_driver =
@ -84,25 +91,6 @@ const struct radio_driver cc2430_rf_driver =
cc2430_rf_off, cc2430_rf_off,
}; };
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(cc2430_rf_process, ev, data)
{
PROCESS_BEGIN();
while(1) {
PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
if(receiver_callback != NULL) {
PRINTF("cc2430_rf_process: calling receiver callback\n");
receiver_callback(&cc2430_rf_driver);
} else {
PRINTF("cc2430_rf_process: no receiver callback\n");
cc2430_rf_command(ISFLUSHRX);
}
}
PROCESS_END();
}
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void void
cc2430_rf_init(void) __banked cc2430_rf_init(void) __banked
@ -227,7 +215,6 @@ cc2430_rf_read_banked(void *buf, unsigned short bufsize) __banked
/* Check the length */ /* Check the length */
len = RFD; len = RFD;
PRINTF("cc2430_rf: received %d bytes\n", len);
/* Check for validity */ /* Check for validity */
if(len > CC2430_MAX_PACKET_LEN) { if(len > CC2430_MAX_PACKET_LEN) {
@ -266,7 +253,6 @@ cc2430_rf_read_banked(void *buf, unsigned short bufsize) __banked
checksum = RFD * 256; checksum = RFD * 256;
checksum += RFD; checksum += RFD;
#endif /* CC2430_CONF_CHECKSUM */ #endif /* CC2430_CONF_CHECKSUM */
packetbuf_set_attr(PACKETBUF_ATTR_RSSI, ((int8_t) RFD) - 45); packetbuf_set_attr(PACKETBUF_ATTR_RSSI, ((int8_t) RFD) - 45);
packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY, RFD); packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY, RFD);

View file

@ -23,6 +23,12 @@
#include "net/rime/packetbuf.h" #include "net/rime/packetbuf.h"
#include "net/rime/rimestats.h" #include "net/rime/rimestats.h"
#define DEBUG 1
#if DEBUG
#define PRINTF(...) printf(__VA_ARGS__)
#else
#define PRINTF(...) do {} while (0)
#endif
#ifdef RF_LED_ENABLE #ifdef RF_LED_ENABLE
#define RF_RX_LED_ON() leds_on(LEDS_RED); #define RF_RX_LED_ON() leds_on(LEDS_RED);
@ -42,7 +48,7 @@ uint8_t rf_error = 0;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
PROCESS_NAME(cc2430_rf_process); PROCESS(cc2430_rf_process, "CC2430 RF driver");
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/** /**
@ -94,7 +100,8 @@ cc2430_rf_error_ISR( void ) __interrupt (RFERR_VECTOR)
EA = 1; EA = 1;
} }
extern void (* receiver_callback)(const struct radio_driver *); void (* receiver_callback)(const struct radio_driver *);
void void
cc2430_rf_set_receiver(void (* recv)(const struct radio_driver *)) cc2430_rf_set_receiver(void (* recv)(const struct radio_driver *))
{ {
@ -123,8 +130,26 @@ cc2430_rf_send(void *payload, unsigned short payload_len)
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
int int
cc2430_rf_read(void *buf, unsigned short bufsize) __banked cc2430_rf_read(void *buf, unsigned short bufsize)
{ {
return cc2430_rf_read_banked(buf, bufsize); return cc2430_rf_read_banked(buf, bufsize);
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(cc2430_rf_process, ev, data)
{
PROCESS_BEGIN();
while(1) {
PROCESS_YIELD_UNTIL(ev == PROCESS_EVENT_POLL);
if(receiver_callback != NULL) {
PRINTF("cc2430_rf_process: calling receiver callback\n");
receiver_callback(&cc2430_rf_driver);
} else {
PRINTF("cc2430_rf_process: no receiver callback\n");
cc2430_rf_command(ISFLUSHRX);
}
}
PROCESS_END();
}