36 #include "sys/cooja_mt.h"
37 #include "lib/simEnvChange.h"
44 #include "dev/cooja-radio.h"
46 #define COOJA_RADIO_BUFSIZE PACKETBUF_SIZE
47 #define CCA_SS_THRESHOLD -95
49 #define WITH_TURNAROUND 1
50 #define WITH_SEND_CCA 1
52 const struct simInterface radio_interface;
55 char simReceiving = 0;
56 char simInDataBuffer[COOJA_RADIO_BUFSIZE];
58 char simOutDataBuffer[COOJA_RADIO_BUFSIZE];
60 char simRadioHWOn = 1;
61 int simSignalStrength = -100;
62 int simLastSignalStrength = -100;
64 int simRadioChannel = 26;
67 static const void *pending_data;
69 PROCESS(cooja_radio_process,
"cooja radio process");
73 radio_set_channel(
int channel)
75 simRadioChannel = channel;
79 radio_set_txpower(
unsigned char power)
86 radio_signal_strength_last(
void)
88 return simLastSignalStrength;
92 radio_signal_strength_current(
void)
94 return simSignalStrength;
118 doInterfaceActionsBeforeTick(
void)
125 simLastSignalStrength = simSignalStrength;
135 doInterfaceActionsAfterTick(
void)
140 radio_read(
void *buf,
unsigned short bufsize)
147 if(bufsize < simInSize) {
149 RIMESTATS_ADD(toolong);
153 memcpy(buf, simInDataBuffer, simInSize);
155 packetbuf_set_attr(PACKETBUF_ATTR_RSSI, simSignalStrength);
156 packetbuf_set_attr(PACKETBUF_ATTR_LINK_QUALITY, simLQI);
164 if(simSignalStrength > CCA_SS_THRESHOLD) {
171 radio_send(
const void *payload,
unsigned short payload_len)
173 int radiostate = simRadioHWOn;
177 simProcessRunValue = 1;
179 if(payload_len > 3) {
180 simProcessRunValue = 1;
189 if(payload_len > COOJA_RADIO_BUFSIZE) {
192 if(payload_len == 0) {
201 if(!channel_clear()) {
202 return RADIO_TX_COLLISION;
207 memcpy(simOutDataBuffer, payload, payload_len);
208 simOutSize = payload_len;
210 for(idx = 0; idx < payload_len; idx++) {
214 printf(
"%02x ", simOutDataBuffer[idx] & 0xFF);
219 while(simOutSize > 0) {
223 simRadioHWOn = radiostate;
228 prepare_packet(
const void *data,
unsigned short len)
235 transmit_packet(
unsigned short len)
237 int ret = RADIO_TX_ERR;
238 if(pending_data !=
NULL) {
239 ret = radio_send(pending_data, len);
245 receiving_packet(
void)
253 return !simReceiving && simInSize > 0;
269 NETSTACK_RDC.input();
297 SIM_INTERFACE(radio_interface,
298 doInterfaceActionsBeforeTick,
299 doInterfaceActionsAfterTick);