#define IEEE802154_RADIO_RESOURCE "RadioRxTxP.resource"
enum {
+ // The following identfiers map to components that access the radio
+ // via RadioClientC(). They are used as parameters for RadioClientC(),
+ // the TransferableResource.transferTo() command and in
+ // the TransferableResource.transferredFrom() event
+
+ RADIO_CLIENT_SCAN = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_PIB = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_PROMISCUOUSMODE = unique(IEEE802154_RADIO_RESOURCE),
+
+ RADIO_CLIENT_BEACONTRANSMIT = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_COORDBROADCAST = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_COORDCAP = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_COORDCFP = unique(IEEE802154_RADIO_RESOURCE),
+
+ RADIO_CLIENT_BEACONSYNCHRONIZE = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_DEVICECAP = unique(IEEE802154_RADIO_RESOURCE),
+ RADIO_CLIENT_DEVICECFP = unique(IEEE802154_RADIO_RESOURCE),
+};
+
+enum {
+ // parameter for the generic DispatchSlottedCsmaP
OUTGOING_SUPERFRAME,
INCOMING_SUPERFRAME,
};
IEEE154_aUnitBackoffPeriod = 20,
};
+// combine function for IsRadioTokenRequested (GetNow) interface
+typedef bool token_requested_t __attribute__((combine(rcombine)));
+token_requested_t rcombine(token_requested_t r1, token_requested_t r2)
+{
+ return r1 && r2;
+}
+
#ifdef TKN154_DEBUG
/******************************************************************
* ATTENTION! Debugging over serial is a lot of overhead. To
* keep it simple, here are the rules you have to follow when
- * using the dbg_serial() command:
+ * using the dbg_serial() macro:
*
* - dbg_serial() is used like dbg(), i.e. you pass it at least
* two strings, the first one describing the component/file,
* - no data is sent over serial, unless dbg_serial_flush() is
* called; try to call it when the system is idle or at least
* when no time-critical operations are pending
- * - on the PC use the printf java client to display the text
- * (see tinyos-2.x/apps/tests/TestPrintf/README.txt)
+ * - on the PC use the printf java client to display the debug
+ * output (see tinyos-2.x/apps/tests/TestPrintf/README.txt)
*
* The ASSERT(X) macro is used to test for errors. If X evaluates
* to zero, then 3 leds start blinking simulataneously (about 2Hz)
- * and the node *continuously* outputs over serial the filename+line
+ * and the node *continuously* outputs over serial the filename/line
* where the (first) ASSERT has failed. This means, even if your
* TelosB was not attached to your PC while the ASSERT failed you
- * can still pull the information out later.
+ * can typically still pull the information out later.
*
- * All dbg_serial() and ASSERT() statements are removed, if
- * TKN154_DEBUG is not defined (which is the default).
+ * If TKN154_DEBUG is not defined (which is the default), then
+ * dbg_serial() maps to dbg(), i.e. is completely removed unless
+ * the platform is TOSSIM, and in the ASSERT(X) statement X is
+ * evaluated/executed, but the result is ignored.
**/
/* -> functions are defined in DebugP.nc */
#define dbg_serial(m, ...) tkn154_dbg_serial(m, __LINE__,__VA_ARGS__)
#define dbg_serial_flush() tkn154_dbg_serial_flush()
#else
- #define ASSERT(X) if ((X)==0){}
+ // Note: in an ASSERT(X) the X must always be evaluated/executed!
+ #define ASSERT(X) while(!(X)){ break;}
#define dbg_serial(m, ...) dbg(m, __VA_ARGS__)
#define dbg_serial_flush()
#endif