28#include "net/ieee802154/radio.h" 
   36#define CC2538_AUTOCRC_LEN          (2) 
   37#define CC2538_RF_FIFO_SIZE         (128) 
   38#define CC2538_PACKET_LENGTH_SIZE   (1) 
   39#define CC2538_LENGTH_BYTE_MASK     (0x7F)  
   41#define CC2538_RF_MAX_DATA_LEN (CC2538_RF_FIFO_SIZE - CC2538_PACKET_LENGTH_SIZE) 
   45#define IEEE802154_MIN_FREQ         (2405)  
   46#define IEEE802154_MAX_FREQ         (2480)  
   48#define IEEE802154_CHANNEL_SPACING  (5)     
   50#define IEEE802154_CHAN2FREQ(chan)  ( IEEE802154_MIN_FREQ + ((chan) - IEEE802154_CHANNEL_MIN) * IEEE802154_CHANNEL_SPACING ) 
   51#define IEEE802154_FREQ2CHAN(freq)  ( IEEE802154_CHANNEL_MIN + ((freq) - IEEE802154_MIN_FREQ) / IEEE802154_CHANNEL_SPACING ) 
   54#define CC2538_MIN_FREQ             (2394) 
   55#define CC2538_MAX_FREQ             (2507) 
   57#define CC2538_RF_POWER_DEFAULT     (CONFIG_IEEE802154_DEFAULT_TXPOWER)     
   58#define CC2538_RF_CHANNEL_DEFAULT   (CONFIG_IEEE802154_DEFAULT_CHANNEL) 
   60#define OUTPUT_POWER_MIN            (-24)   
   61#define OUTPUT_POWER_MAX            (7)     
   62#define NUM_POWER_LEVELS            ( OUTPUT_POWER_MAX - OUTPUT_POWER_MIN + 1 ) 
   64#define CC2538_CORR_VAL_MIN         (50U) 
   65#define CC2538_CORR_VAL_MAX         (110U) 
   66#define CC2538_CORR_VAL_MASK        (0x7F) 
   68#define CC2538_CRC_BIT_MASK         (0x80) 
   70#define CC2538_CCA_THR_MASK         (0x000000FF)     
   72#define CC2538_CCA_MODE_MASK        (0x18)           
   73#define CC2538_CCA_MODE_POS         (3U)             
   75#define CC2538_CSP_SKIP_INST_MASK   (0x70)           
   76#define CC2538_CSP_SKIP_INST_POS    (4U)             
   78#define CC2538_CSP_SKIP_N_MASK      (0x08)           
   80#define CC2538_CSP_SKIP_COND_CCA    (0x00)           
   81#define CC2538_CSP_SKIP_COND_CSPZ   (0x06)           
   82#define CC2538_CSP_SKIP_COND_RSSI   (0x07)           
   84#define CC2538_SFR_MTMSEL_MASK      (0x7)            
   85#define CC2538_SFR_MTMSEL_TIMER_P   (0x2)            
   86#define CC2538_MCTRL_SYNC_MASK      (0x2)            
   87#define CC2538_MCTRL_RUN_MASK       (0x1)            
   89#define CC2538_CSP_MCU_CTRL_MASK    (0x1)            
   91#define CC2538_CSP_INCMAXY_MAX_MASK (0x7)            
   94#define CC2538_RXENABLE_RXON_MASK   (0x80)           
   96#define CC2538_RSSI_OFFSET          (-73)   
   97#define CC2538_RF_SENSITIVITY       (-97)   
   99#define CC2538_ACCEPT_FT_0_BEACON        (1 << 3)  
  100#define CC2538_ACCEPT_FT_1_DATA          (1 << 4)  
  101#define CC2538_ACCEPT_FT_2_ACK           (1 << 5)  
  102#define CC2538_ACCEPT_FT_3_CMD           (1 << 6)  
  103#define CC2538_STATE_SFD_WAIT_RANGE_MIN  (0x03U)   
  104#define CC2538_STATE_SFD_WAIT_RANGE_MAX  (0x06U)   
  105#define CC2538_FRMCTRL1_PENDING_OR_MASK  (0x04)    
  107#define CC2538_FRMCTRL0_RX_MODE_DIS      (0xC)     
  110#define RFCORE_ASSERT(expr) (void)( (expr) || RFCORE_ASSERT_failure(#expr, __FUNCTION__, __LINE__) ) 
  113#define RFCORE_WAIT_UNTIL(expr) while (!(expr)) {                                        \ 
  114    DEBUG("RFCORE_WAIT_UNTIL(%s) at line %u in %s()\n", #expr, __LINE__, __FUNCTION__);  \ 
  118#define RFCORE_WAIT_UNTIL(expr) while (!(expr)) thread_yield() 
  121#define RFCORE_FLUSH_RECEIVE_FIFO() rfcore_strobe(ISFLUSHRX) 
  123#define ABS_DIFF(x, y)          ( ((x) < (y))? ((y) - (x)) : ((x) - (y)) ) 
  124#define BOOLEAN(x)              ( (x) != 0 ) 
  125#define NOT(x)                  ( (x) == 0 ) 
  126#define GET_BYTE(buffer, index) ( (unsigned char*)(buffer) )[index] 
  128#define BIT(n) ( 1 << (n) ) 
  132    FSM_STATE_RX_CALIBRATION =  2,
 
  133    FSM_STATE_TX_CALIBRATION = 32,
 
  153    SET_RXENMASK_ON_TX  = BIT(0),
 
  154    IGNORE_TX_UNDERF    = BIT(1),
 
  162    ENERGY_SCAN      = BIT(4),
 
  165    APPEND_DATA_MODE = BIT(7),
 
  175    SRC_MATCH_DONE   = BIT(3),
 
  176    SRC_MATCH_FOUND  = BIT(4),
 
  177    FRAME_ACCEPTED   = BIT(5),
 
  255#ifndef CONFIG_CC2538_RF_OBS_0 
  256#define CONFIG_CC2538_RF_OBS_0      tx_active 
  258#ifndef CONFIG_CC2538_RF_OBS_1 
  259#define CONFIG_CC2538_RF_OBS_1      rx_active 
  261#ifndef CONFIG_CC2538_RF_OBS_2 
  262#define CONFIG_CC2538_RF_OBS_2      rssi_valid 
  266#ifndef CONFIG_CC2538_RF_OBS_SIG_0_PCX 
  267#define CONFIG_CC2538_RF_OBS_SIG_0_PCX  0    
  269#ifndef CONFIG_CC2538_RF_OBS_SIG_1_PCX 
  270#define CONFIG_CC2538_RF_OBS_SIG_1_PCX  1    
  272#ifndef CONFIG_CC2538_RF_OBS_SIG_2_PCX 
  273#define CONFIG_CC2538_RF_OBS_SIG_2_PCX  2    
  275#if ((CONFIG_CC2538_RF_OBS_SIG_2_PCX > 7) || \ 
  276     (CONFIG_CC2538_RF_OBS_SIG_1_PCX > 7) || \ 
  277     (CONFIG_CC2538_RF_OBS_SIG_0_PCX > 7)) 
  278#error "CONFIG_CC2538_RF_OBS_SIG_X_PCX must be between 0-7 (PC0-PC7)" 
#define RFCORE_XREG_RFIRQM0
RF interrupt masks.
 
#define RFCORE_XREG_RFIRQM1
RF interrupt masks.
 
void cc2538_set_pan(uint16_t pan)
Set the PAN ID of the device.
 
void cc2538_set_addr_long(const uint8_t *addr)
Set the long address of the device.
 
unsigned int cc2538_get_chan(void)
Get the configured channel number of the device.
 
void cc2538_off(void)
Deactivate the CC2538 radio device.
 
bool cc2538_on(void)
Activate the CC2538 radio device.
 
void cc2538_rf_hal_setup(ieee802154_dev_t *hal)
Setup CC2538 in order to be used with the IEEE 802.15.4 Radio HAL.
 
void cc2538_irq_handler(void)
IRQ handler for RF events.
 
bool cc2538_channel_clear(void)
Trigger a clear channel assessment.
 
void cc2538_set_addr_short(const uint8_t *addr)
Set the short address of the device.
 
void cc2538_set_chan(unsigned int chan)
Set the channel number of the device.
 
static void cc2538_rf_enable_irq(void)
Enable CC2538 RF IRQs.
 
@ RXPKTDONE
End of frame event.
 
@ SFD
Start of frame event.
 
void cc2538_init(void)
Initialise the CC2538 radio hardware.
 
uint16_t cc2538_get_pan(void)
Get the configured PAN ID of the device.
 
void cc2538_set_tx_power(int dBm)
Set the transmission power for the device.
 
void cc2538_set_monitor(bool mode)
Enable/disable monitor (promiscuous) mode for the device.
 
void cc2538_get_addr_short(uint8_t *addr)
Get the configured short address of the device.
 
static void cc2538_rf_disable_irq(void)
Disable CC2538 RF IRQs.
 
bool cc2538_is_on(void)
Check if device is active.
 
bool cc2538_get_monitor(void)
Check if device is in monitor (promiscuous) mode.
 
@ rfc_rand_i
Random data output from the I channel of the receiver.
 
@ lna_pd
LNA power-down signal.
 
@ rssi_valid
Pin is high when the RSSI value has been updated at least once since RX was started.
 
@ packet_done
A complete frame has been received.
 
@ rx_active
Indicates that FFCTRL is in one of the RX states.
 
@ constant_value_0
Constant value 0.
 
@ sampled_cca
A sampled version of the CCA bit from demodulator.
 
@ rfc_xor_rand_i_q
XOR between I and Q random outputs.
 
@ rfc_sniff_data
Data from packet sniffer.
 
@ ffctrl_fifop
Pin is high when the number of bytes in the RXFIFO exceeds the programmable threshold or at least one...
 
@ pa_pd
Power amplifier power-down signal.
 
@ sfd_sync
Pin is high when a SFD has been received or transmitted.
 
@ demod_cca
Clear channel assessment.
 
@ constant_value_1
Constant value 1.
 
@ tx_active
Indicates that FFCTRL is in one of the TX states.
 
@ ffctrl_fifo
Pin is high when one or more bytes are in the RXFIFO.
 
@ rfc_rand_q
Random data output from the Q channel of the receiver.
 
@ rfc_sniff_clk
250kHz clock for packet sniffer data.
 
@ lock_status
1 when PLL is in lock, otherwise 0
 
void cc2538_set_state(cc2538_rf_t *dev, netopt_state_t state)
Set the state of the device.
 
void cc2538_set_freq(unsigned int MHz)
Set the frequency of the device.
 
void cc2538_get_addr_long(uint8_t *addr)
Get the configured long address of the device.
 
int cc2538_get_tx_power(void)
Get the configured transmission power of the device.
 
void cc2538_setup(cc2538_rf_t *dev)
Setup a CC2538 radio device.
 
CC2538 RF core interface.
 
struct ieee802154_dev ieee802154_dev_t
Forward declaration of the IEEE802.15.4 device descriptor.
 
netopt_state_t
Option parameter to be used with NETOPT_STATE to set or get the state of a network device or protocol...
 
Common macros and compiler attributes/pragmas configuration.
 
Definition of global configuration options.
 
Device descriptor for CC2538 transceiver.
 
uint8_t state
current state of the radio
 
IEEE 802.15.4 header definitions.