41 #include <aducrf101-contiki.h> 
   44 #include "contiki-net.h" 
   48 #define MAX_PACKET_LEN 240 
   50 static uint8_t tx_buf[MAX_PACKET_LEN];
 
   52 #ifndef ADUCRF101_RADIO_BASE_CONFIG 
   53 #define ADUCRF101_RADIO_BASE_CONFIG DR_38_4kbps_Dev20kHz 
   57 static int current_channel = 915000000;
 
   58 static int current_power = 31;
 
   59 static int radio_is_on = 0;
 
   64 #ifndef ADUCRF101_RF_CONF_SNIFFER 
   65 #if CC2538_RF_CONF_SNIFFER 
   66 #define ADUCRF101_RF_CONF_SNIFFER 1 
   70 #if ADUCRF101_RF_CONF_SNIFFER 
   72 static const uint8_t magic[] = { 0x53, 0x6E, 0x69, 0x66 }; 
 
   79 #define MIN_CHANNEL 431000000 
   80 #define MAX_CHANNEL 928000000 
   82 _set_channel(
int freq)
 
   84   if(freq < 431000000) {
 
   86   } 
else if(freq > 464000000 && freq < 663000000) {
 
   88   } 
else if(freq >= 663000000 && freq < 862000000) {
 
   90   } 
else if(freq > 928000000) {
 
   93   current_channel = freq;
 
   95     return RADIO_RESULT_ERROR;
 
   97   return RADIO_RESULT_OK;
 
  106 _set_power(
int power)
 
  120   current_power = power;
 
  122     return RADIO_RESULT_ERROR;
 
  124   return RADIO_RESULT_OK;
 
  127 PROCESS(aducrf101_rf_process, 
"ADuCRF101 RF driver");
 
  143   if(_set_channel(current_channel) != RADIO_RESULT_OK) {
 
  146   if(_set_power(current_power) != RADIO_RESULT_OK) {
 
  182 prepare(
const void *payload, 
unsigned short payload_len)
 
  185   if(payload_len > MAX_PACKET_LEN) {
 
  186     payload_len = MAX_PACKET_LEN;
 
  188   memcpy(tx_buf, payload, payload_len);
 
  194 transmit(
unsigned short transmit_len)
 
  200   if(transmit_len > MAX_PACKET_LEN) {
 
  201     transmit_len = MAX_PACKET_LEN;
 
  217 send(
const void *payload, 
unsigned short payload_len)
 
  219   prepare(payload, payload_len);
 
  220   return transmit(payload_len);
 
  225 read(
void *buf, 
unsigned short buf_len)
 
  233   if(buf_len > MAX_PACKET_LEN) {
 
  234     buf_len = MAX_PACKET_LEN;
 
  242   if(packet_len > buf_len) {
 
  243     packet_len = buf_len;
 
  249 #if ADUCRF101_RF_CONF_SNIFFER 
  254   uart_put(packet_len + 2);
 
  255   for(
int i = 0; i < packet_len; i++) {
 
  256     uart_put(((uint8_t *)buf)[i]);
 
  277 receiving_packet(
void)
 
  294 static radio_result_t
 
  298     return RADIO_RESULT_INVALID_VALUE;
 
  302   case RADIO_PARAM_RSSI:
 
  306       return RADIO_RESULT_ERROR;
 
  309     return RADIO_RESULT_OK;
 
  312   case RADIO_PARAM_CHANNEL:
 
  313     *value = current_channel;
 
  314     return RADIO_RESULT_OK;
 
  315   case RADIO_CONST_CHANNEL_MIN:
 
  316     *value = MIN_CHANNEL;
 
  317     return RADIO_RESULT_OK;
 
  318   case RADIO_CONST_CHANNEL_MAX:
 
  319     *value = MAX_CHANNEL;
 
  320     return RADIO_RESULT_OK;
 
  322   case RADIO_PARAM_TXPOWER:
 
  323     *value = current_power;
 
  324     return RADIO_RESULT_OK;
 
  325   case RADIO_CONST_TXPOWER_MIN:
 
  327     return RADIO_RESULT_OK;
 
  328   case RADIO_CONST_TXPOWER_MAX:
 
  330     return RADIO_RESULT_OK;
 
  333     return RADIO_RESULT_NOT_SUPPORTED;
 
  338 static radio_result_t
 
  342   case RADIO_PARAM_CHANNEL:
 
  343     return _set_channel(value);
 
  345   case RADIO_PARAM_TXPOWER:
 
  346     return _set_power(value);
 
  349     return RADIO_RESULT_NOT_SUPPORTED;
 
  358 static radio_result_t
 
  359 get_object(radio_param_t param, 
void *dest, 
size_t size)
 
  361   return RADIO_RESULT_NOT_SUPPORTED;
 
  368 static radio_result_t
 
  369 set_object(radio_param_t param, 
const void *src, 
size_t size)
 
  371   return RADIO_RESULT_NOT_SUPPORTED;
 
  394       NETSTACK_RDC.input();
 
RIE_BOOL RadioTxPacketComplete(void)
Checks if a packet has finished transmitting. 
 
void process_poll(struct process *p)
Request a process to be polled. 
 
#define PROCESS_BEGIN()
Define the beginning of a process. 
 
#define NULL
The null pointer. 
 
The structure of a device driver for a radio in Contiki. 
 
RIE_Responses RadioRxPacketRead(RIE_U8 BufferLen, RIE_U8 *pPktLen, RIE_U8 *pData, RIE_S8 *pRSSIdBm)
Read the packet that was received by the radio. 
 
int(* pending_packet)(void)
Check if the radio driver has just received a packet. 
 
int radio_value_t
Each radio has a set of parameters that designate the current configuration and state of the radio...
 
int(* prepare)(const void *payload, unsigned short payload_len)
Prepare the radio with a packet to be sent. 
 
void packetbuf_set_datalen(uint16_t len)
Set the length of the data in the packetbuf. 
 
void aducrf101_rx_packet_hook(void)
Trigger function called by ADI radio engine upon packet RX. 
 
int(* send)(const void *payload, unsigned short payload_len)
Prepare & transmit a packet. 
 
RIE_BOOL RadioRxPacketAvailable(void)
Checks if a packet has been received. 
 
int(* receiving_packet)(void)
Check if the radio driver is currently receiving a packet. 
 
#define PROCESS_THREAD(name, ev, data)
Define the body of a process. 
 
#define PROCESS_END()
Define the end of a process. 
 
int(* channel_clear)(void)
Perform a Clear-Channel Assessment (CCA) to find out if there is a packet in the air or not...
 
RIE_Responses RadioPowerOff(void)
Shutdown the radio and place it in its lowest power sleep mode. 
 
RIE_Responses RadioRadioGetRSSI(RIE_S8 *pRSSIdBm)
Return a Received Signal Strength Indicator value. 
 
int(* on)(void)
Turn the radio on. 
 
radio_result_t(* get_value)(radio_param_t param, radio_value_t *value)
Get a radio parameter value. 
 
RIE_Responses RadioSetFrequency(RIE_U32 Frequency)
Set frequency for radio communications. 
 
radio_result_t(* get_object)(radio_param_t param, void *dest, size_t size)
Get a radio parameter object. 
 
#define PROCESS(name, strname)
Declare a process. 
 
int(* transmit)(unsigned short transmit_len)
Send the packet that has previously been prepared. 
 
void packetbuf_clear(void)
Clear and reset the packetbuf. 
 
void process_start(struct process *p, process_data_t data)
Start a process. 
 
RIE_Responses RadioRxPacketVariableLen(void)
Enter receive mode and wait for a packet to be received. 
 
#define PACKETBUF_SIZE
The size of the packetbuf, in bytes. 
 
RIE_Responses RadioTxSetPA(RIE_PATypes PAType, RIE_PAPowerLevel Power)
Set PA Type and the Transmit Power Level for Radio Transmission. 
 
void * packetbuf_dataptr(void)
Get a pointer to the data in the packetbuf. 
 
radio_result_t(* set_object)(radio_param_t param, const void *src, size_t size)
Set a radio parameter object. 
 
RIE_Responses RadioTxPacketVariableLen(RIE_U8 Len, RIE_U8 *pData)
Transmit a Variable length packet. 
 
#define PROCESS_YIELD_UNTIL(c)
Yield the currently running process until a condition occurs. 
 
RIE_Responses RadioInit(RIE_BaseConfigs BaseConfig)
Initialise the Radio, using specified configuration. 
 
radio_result_t(* set_value)(radio_param_t param, radio_value_t value)
Set a radio parameter value. 
 
int(* read)(void *buf, unsigned short buf_len)
Read a received packet into a buffer. 
 
int(* off)(void)
Turn the radio off. 
 
    Include file for the Contiki low-layer network stack (NETSTACK)