[Tinyos-contrib-commits] CVS: tinyos-1.x/contrib/imote2/test/RadioCommP2PTest Makefile, NONE, 1.1 RadioCommP2PTest.nc, NONE, 1.1 RadioCommP2PTestM.nc, NONE, 1.1 WSN.h, NONE, 1.1 WSN_Settings.h, NONE, 1.1

Lama Nachman lnachman at users.sourceforge.net
Wed Nov 29 09:59:16 PST 2006


Update of /cvsroot/tinyos/tinyos-1.x/contrib/imote2/test/RadioCommP2PTest
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv27714

Added Files:
	Makefile RadioCommP2PTest.nc RadioCommP2PTestM.nc WSN.h 
	WSN_Settings.h 
Log Message:
Radio test app, cycles through channels and collects stats on packet success
rates.


--- NEW FILE: Makefile ---
COMPONENT=RadioCommP2PTest
TXRES_VAL=88
include ../MakeRules


--- NEW FILE: RadioCommP2PTest.nc ---
includes WSN;
configuration RadioCommP2PTest {
}

implementation {
   components Main, 
              RadioCommP2PTestM, 
              RadioCRCPacket as Comm, 
              TimerC, 
              CC2420ControlM,
              SettingsC,
              LedsC;

   Main.StdControl -> RadioCommP2PTestM.Init;

   RadioCommP2PTestM.TimerControl -> TimerC;
   RadioCommP2PTestM.Timer->TimerC.Timer[unique("Timer")];

   RadioCommP2PTestM.RadioControl -> Comm;
   RadioCommP2PTestM.RadioSend -> Comm;
   RadioCommP2PTestM.RadioReceive -> Comm;

   RadioCommP2PTestM.CC2420Control -> CC2420ControlM;

   RadioCommP2PTestM.Leds -> LedsC;
   RadioCommP2PTestM.ReadResetCause -> SettingsC;
}

--- NEW FILE: RadioCommP2PTestM.nc ---
includes WSN;
#include "Reset.h"

module RadioCommP2PTestM {
   provides {
      interface StdControl as Init;
   }
   uses {
      interface StdControl as TimerControl;
      interface Timer;

      interface StdControl as RadioControl;
      interface BareSendMsg as RadioSend;
      interface ReceiveMsg as RadioReceive;

      interface CC2420Control;

      interface Leds;
      command uint8_t ReadResetCause();
   }
}

#define CLOCK_TICK 50

implementation {
   TOS_Msg radio_data;
   TOS_MsgPtr radio_msg;
   bool radio_send_pending;
   uint8_t seqnum;
   uint8_t state;
   uint32_t myTime;
   uint32_t startedState;
   uint32_t echoSent;
   uint32_t echoRecv;
   uint32_t dataSent;
   uint32_t dataRecv;
   uint32_t nextTry;
   uint8_t nextChannel;

   enum {
      P_SNDR = 0,
      P_SEQ = 1,
      P_TYPE = 2,
      P_RESVAL = 3,
      P_BINSEP = 4,
      P_COUNT_0 = 5,
      P_COUNT_1 = 6,
      P_COUNT_2 = 7,
      P_COUNT_3 = 8,
      P_NEXT_CHANNEL = 9,

      P_PLD = 10
   };

   enum {
      TXRX2TYPE = 0x12,
      SEND_ECHO = 0x13,
      SEND_TXRX = 0x14,
      SWITCH_CHANNEL = 0x15
   };

   enum {
      STATE_IDLE = 0,
      STATE_SENT_TXRX = 1,
      STATE_SENT_ECHO = 2,
      STATE_RECV_TXRX = 3,
      STATE_RECV_ECHO = 4,
      STATE_DONE = 5,
      STATE_SWITCH_CHANNEL = 6
   };

   void resetCounters() {
      seqnum = 0;
      echoSent = 0;
      echoRecv = 0;
      dataSent = 0;
      dataRecv = 0;
      nextTry = 0;
      radio_send_pending = FALSE;
   }

   command result_t Init.init() {
      result_t ok1, ok2, ok3;

      /* initialize lower components */
      ok2 = call RadioControl.init();
      ok3 = call Leds.init();

      call TimerControl.init();

      atomic {
#if SINK_NODE
      state = STATE_SWITCH_CHANNEL;
#else
      state = STATE_IDLE;
#endif
         radio_msg = &radio_data;
         resetCounters();
         nextChannel = 11;
      }

#if SINK_NODE
      trace(DBG_USR1, (" Comm Test, Sink Node\n"));
#else
      trace(DBG_USR1, (" Comm Test, Sensor Node\n"));
#endif
     
      return rcombine(ok1, ok2);
   }

   command result_t Init.start() {
      result_t ok1, ok2, ok3, ok4;
      uint8_t ResetCause;

      ok2 = call RadioControl.start();
      ok3 = call CC2420Control.SetRFPower(TXRES_VAL);
      ok4 = call TimerControl.start();
      call Timer.start(TIMER_REPEAT, CLOCK_TICK);

      ResetCause = call ReadResetCause();
      if (ResetCause == SLEEP_RESET) {
         trace(DBG_USR1, "Sleep Reset\r\n");
      }
      trace(DBG_USR1, "Reset Cause %d\r\n", ResetCause);

      return rcombine(ok1, rcombine3(ok2, ok3, ok4));
   }

   command result_t Init.stop() {
      result_t ok1, ok2, ok3;

      ok1 = call TimerControl.stop();
      ok3 = call RadioControl.stop();

      return rcombine3(ok1, ok2, ok3);
   }

   task void sendMessage() {
      int i;

      radio_msg->addr = TOS_BCAST_ADDR;
      radio_msg->length = DATA_LENGTH;

      radio_msg->data[P_SNDR] = TOS_LOCAL_ADDRESS;
      radio_msg->data[P_SEQ] = seqnum;
      radio_msg->data[P_TYPE] = TXRX2TYPE;
      radio_msg->data[P_RESVAL] = call CC2420Control.GetRFPower();
      radio_msg->data[P_BINSEP] = 0xff;
      radio_msg->data[P_COUNT_0] = dataSent & 0xff;
      radio_msg->data[P_COUNT_1] = (dataSent >> 8) & 0xff;
      radio_msg->data[P_COUNT_2] = (dataSent >> 16) & 0xff;
      radio_msg->data[P_COUNT_3] = (dataSent >> 24) & 0xff;
      //trace(DBG_USR1, "seq %x, data %x\r\n", seqnum, dataSent);

      for (i=P_PLD; i<DATA_LENGTH; i++) {
          radio_msg->data[i] = (uint8_t)((i-P_PLD)+'A');
      }

      if (call RadioSend.send(radio_msg)) {
          seqnum++;
          dataSent++;
      } else {
          atomic {
             radio_send_pending = FALSE;
          }
      }
   }

   void sendCmd(uint8_t cmd) {

      uint8_t i;
      radio_msg->addr = TOS_BCAST_ADDR;
      radio_msg->length = DATA_LENGTH;

      radio_msg->data[P_SNDR] = TOS_LOCAL_ADDRESS;
      radio_msg->data[P_SEQ] = seqnum;
      radio_msg->data[P_TYPE] = cmd;
      radio_msg->data[P_RESVAL] = call CC2420Control.GetRFPower();
      radio_msg->data[P_BINSEP] = 0xff;
      radio_msg->data[P_NEXT_CHANNEL] = nextChannel;

      for (i=P_PLD; i<DATA_LENGTH; i++) {
          radio_msg->data[i] = (uint8_t)((i-P_PLD)+'A');
      }

      if (call RadioSend.send(radio_msg)) {
          seqnum++;
      } else {
          atomic {
             radio_send_pending = FALSE;
          }
      }
   }

   task void sendTxRxCmd() {
      sendCmd(SEND_TXRX);
   }

   task void sendEchoCmd() {
      sendCmd(SEND_ECHO);
   }
   
   task void sendSwitchChannel() {
      sendCmd(SWITCH_CHANNEL);
   }

   task void SwitchChannels() {
      trace(DBG_USR1, "Switching to channel %d\r\n", nextChannel);
      call CC2420Control.TunePreset(nextChannel);
   }

   task void reportStats() {
      trace(DBG_USR1, "*********Results*********\r\n");
      trace(DBG_USR1, "Sender Sent %d packets, I received %d packets\r\n", 
            dataSent, dataRecv);
      trace(DBG_USR1, "I Sent %d packets, Received %d echo\r\n", echoSent,
            echoRecv);
      trace(DBG_USR1, "Current Channel %d\r\n", nextChannel);
   }

   /*
    * Sink node : wait 4 seconds, 
    *             go to SENT_TXRX, send req for data packets
    *             when receive first data packet, switch to  
    *             go to IDLE
    *
    *
    */
   event result_t Timer.fired() {
      myTime+= CLOCK_TICK;

#if SINK_NODE
      switch (state) {
      case STATE_DONE:
         if (myTime > 3000) {
            nextChannel++;
            if (nextChannel == 27) {
               nextChannel = 11;
            }
            state = STATE_SWITCH_CHANNEL;
            myTime = 1000;
         }
         return SUCCESS;

      case STATE_SWITCH_CHANNEL:
         // Keep sending change channel commands for 4 seconds
         if (myTime > 8000) {
            // Assume channel switch occured
            post SwitchChannels();
            myTime = 1000;
            state = STATE_IDLE;	// start data cycle
            resetCounters();
            return SUCCESS;
         }

         if (myTime > 2000) {
            if((radio_send_pending == FALSE) && (myTime > nextTry)) {
               if (post sendSwitchChannel()) {
                  radio_send_pending = TRUE;
                  nextTry = myTime + 500;
                  trace(DBG_USR1, "Send Channel Switch %d\r\n", nextChannel);
               }
            }
         }
         return SUCCESS;

      case STATE_IDLE:
         if (myTime >= 4000) {
            trace(DBG_USR1, "Switched to TXRX send\r\n");
            state = STATE_SENT_TXRX;
            if(radio_send_pending == FALSE) {
               if (post sendTxRxCmd()) {
                  radio_send_pending = TRUE;
                  state = STATE_SENT_TXRX;
                  nextTry = myTime + 500;
               }
            }
         } 
         return SUCCESS;
      case STATE_SENT_TXRX:
          if (myTime > 40000) {
             // give up and send a message
             trace(DBG_USR1, "Failed to communicate with sensor node \r\n");
             state = STATE_DONE;
             nextTry = 0;
             myTime = 1000;
             return SUCCESS;
          }

          if (myTime > nextTry) {
            //trace(DBG_USR1, "Sending TxRx request\r\n");
            if(radio_send_pending == FALSE) {
               if (post sendTxRxCmd()) {
                  radio_send_pending = TRUE;
                  state = STATE_SENT_TXRX;
                  nextTry = myTime + 500;
               }
            }
         }
         return SUCCESS;
      
      case STATE_RECV_TXRX:
      case STATE_SENT_ECHO:
         // Stay in this state for 30 seconds
         if (echoSent > 100) {
            state = STATE_DONE;
            myTime = 1000;
            nextTry = 0;
            post reportStats();
            return SUCCESS;
         }

         
         if ((myTime - startedState > 40000) && (myTime > nextTry)) {
            if (post sendEchoCmd()) {
               radio_send_pending = TRUE;
               state = STATE_SENT_ECHO;
               echoSent++;
               nextTry = myTime + 100;
            }
         }
      }
      return SUCCESS;
#endif
     if (state == STATE_RECV_TXRX) {
         if(radio_send_pending == FALSE) {
            if (post sendMessage()) {
               radio_send_pending = TRUE;
            }
         }
      }
      return SUCCESS;
   }

   event TOS_MsgPtr RadioReceive.receive(TOS_MsgPtr data) {
    TOS_MsgPtr tmp = data;
    uint32_t tempCounter;
    uint8_t d0, d1, d2, d3;
    uint8_t channel;


    if (data->crc == 0) { 
        trace(DBG_USR1, ("Dropping packet with bad crc...\n"));
       return tmp;
    }


#if SINK_NODE
    switch (data->data[P_TYPE]) {
       case TXRX2TYPE:
          dataRecv++;
          
           
          d0 = (uint8_t) data->data[P_COUNT_0];
          d1 = (uint8_t) data->data[P_COUNT_1];
          d2 = (uint8_t) data->data[P_COUNT_2];
          d3 = (uint8_t) data->data[P_COUNT_3];
          dataSent = d0 | d1 << 8 | d2 << 16 | d3 << 24;
#if 0
          trace(DBG_USR1, "dataSent %x, %x, %x, %x, %x\r\n", dataSent, d0,
                d1, d2, d3);
#endif
          if (state == STATE_SENT_TXRX) {
             trace(DBG_USR1, "Recieved 1st TXRX\r\n");
             state = STATE_RECV_TXRX;
             startedState = myTime;
          }
                     
          break;

       case SEND_ECHO:
          call Leds.redToggle();
          echoRecv++;
          break;

       default:
          break;
    }
    return tmp;
#endif

    switch (data->data[P_TYPE]) {
       case SEND_TXRX:
          state = STATE_RECV_TXRX;
          trace(DBG_USR1, "Start sending data\r\n");
          break;

       case SEND_ECHO:
          dataSent = 0;
          call Leds.redToggle();
          //trace(DBG_USR1, "Sent %d data\r\n", dataSent);
          if (post sendEchoCmd()) {
             radio_send_pending = TRUE;
             state = STATE_RECV_ECHO;
          }
          break;

       case SWITCH_CHANNEL:
          channel = data->data[P_NEXT_CHANNEL];
          trace(DBG_USR1, "Switching to channel %d\r\n", channel);
          call CC2420Control.TunePreset(channel);
          break;

       default:
          break;
    }

    return tmp;

   }

   event result_t RadioSend.sendDone(TOS_MsgPtr data, result_t success) {
    if(radio_msg == data){
        atomic {
           radio_send_pending = FALSE;
        }
    } else {
        trace(DBG_USR1, "Mismatch\r\n");
    }

    //call Leds.greenToggle();

    return SUCCESS;
   }

   async default command result_t Leds.init() {
      return SUCCESS;
   }

   async default command result_t Leds.yellowToggle() {
      return SUCCESS;
   }

   async default command result_t Leds.greenToggle() {
      return SUCCESS;
   }

   async default command result_t Leds.redToggle() {
      return SUCCESS;
   }


}

--- NEW FILE: WSN.h ---
/*                                                                      tab:4
 *  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.  By
 *  downloading, copying, installing or using the software you agree to
 *  this license.  If you do not agree to this license, do not download,
 *
 */
/*                                                                      tab:4
 * "Copyright (c) 2000-2003 The Regents of the University  of California.
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 *
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */
/*                                                                      tab:4
 * Copyright (c) 2003 Intel Corporation
 * All rights reserved Contributions to the above software program by Intel
 * Corporation is program is licensed subject to the BSD License, available at
 * http://www.opensource.org/licenses/bsd-license.html
 *
 */
/*
 * Authors:	Mark Yarvis, York Liu
 *
 */

#ifndef WSN_H
#define WSN_H

enum {
#ifdef CONST_TXRES_VAL
   TXRES_VAL = CONST_TXRES_VAL
#else
   TXRES_VAL = 70
#endif
};

enum {
#ifdef CONST_PROGVER
   PROGVER = CONST_PROGVER
#else
   PROGVER = 0
#endif
};

// A result that indicates what to do with a packet
typedef uint8_t PacketResult_t;
enum {
   FORWARD = 0,
   DROP = 1,
   RTS = 2     // return to sender
};

enum {
   INVALID_NODE_ID = 255,
   INVALID_INDEX = 255
};

enum {
  TASK_DONE = 0,
  TASK_PENDING = 1,
  TASK_REPOSTREQ = 2
};
typedef uint8_t wsnAddr;

#ifndef CLOCK_SCALE
#define CLOCK_SCALE 1000L
#endif

#endif

--- NEW FILE: WSN_Settings.h ---
/*                                                                      tab:4
 *  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.  By
 *  downloading, copying, installing or using the software you agree to
 *  this license.  If you do not agree to this license, do not download,
 *
 */
/*                                                                      tab:4
 * "Copyright (c) 2000-2003 The Regents of the University  of California.
 * All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 *
 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
 * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 */
/*                                                                      tab:4
 * Copyright (c) 2003 Intel Corporation
 * All rights reserved Contributions to the above software program by Intel
 * Corporation is program is licensed subject to the BSD License, available at
 * http://www.opensource.org/licenses/bsd-license.html
 *
 */
/*
 * Authors:	Mark Yarvis
 * Modified:	Shane B. Eisenman (8.31.2005) - Added additional setting IDs for
 *                                              the BP app and also included the
 *                                              setting lengths.
 * Modified:    Rahul Shah (09.15.2005)  - Added support for enabling/disabling
 * 					   statistics collection dynamically
 */

#include "WSN.h"
enum {
  SETTING_ID_INVALID 				=	0,
  SETTING_ID_FEEDBACK_LIST			=	1,
  SETTING_ID_FEEDBACK_ID			=	2,
  SETTING_ID_PROGVER				=	3,
  SETTING_ID_SETVER				=	4,
  SETTING_ID_POTSET				=	5,
  SETTING_ID_BUILD_DATE				=	6,
  SETTING_ID_TRACEROUTE				=	7,
  SETTING_ID_DSDV_PKT_FW			=	8,
  SETTING_ID_DSDV_RUPDATE			=	9,
  SETTING_ID_NBR_HISTORY			=	10,
  SETTING_ID_NBR_QUALITY			=	11,
  SETTING_ID_TX_Control				=	12,  // for use by the single hop manager
  SETTING_ID_ADJUVANT				=	13,
  SETTING_ID_DSDV_METRIC			=	14,
  SETTING_ID_METRIC_MEASURE			=	15,
  SETTING_ID_MESH_ENABLE			=	16,
  SETTING_ID_DSDV_METRIC_SELECT			=	17,  // used to choose between DSDV metrics
  // temp stuff for now
  SETTING_ID_AODV_PKT_FW			=	18,
  SETTING_ID_AODV_RUPDATE			=	19,
  SETTING_ID_ENERGY_MEASURE			=	20, // used to start/stop energy measurement
  SETTING_ID_STATIC_ROUTE			=	21,   // set next hop for static routing
  SETTING_ID_RELIABLE_TRANSPORT			=	22,
  SETTING_ID_RESET				=	23,
  SETTING_ID_VOTE_UI				=	24,
  SETTING_ID_BALL				=	25,
  SETTING_ID_ONOFF_TRACEROUTE			=	26,

  // Special Settings
  SETTING_ID_SETTINGS_START			= 	27,
  SETTING_ID_UPDATE_SETTINGS_DONE 		=	28,
  SETTING_ID_QUERY_SETTINGS_VALIDATION 		=	29,
  SETTING_ID_NEW_CFG_AVAILABLE 			=	30,

  // Query Params Settings
  SETTING_ID_QUERY_GROUP 			=	31,
  SETTING_ID_CHANNEL_PARAMETER_SET 		=	32,
  SETTING_ID_STATS_COLLECTION			=	33,
  
  // Cluster Head App Settings
  SETTING_ID_PERIODIC_COLLECTION 		=	50,
  SETTING_ID_CHANNEL_CFG 			=	51,
  SETTING_ID_NODE_DISCOVERY_CFG 		=	52,

  SETTING_ID_FREQSET				=	0xFF
};

/**
 * Defines the length in bytes of the defined settings.
 **/
enum {
  SETTING_LENGTH_FEEDBACK_LIST			=	3, // plus a list of addrs
  SETTING_LENGTH_FEEDBACK_ID			=	2,
  SETTING_LENGTH_SETVER				=	2,
  SETTING_LENGTH_POT_SET			=	2,
  SETTING_LENGTH_TRACEROUTE			=	2,
  SETTING_LENGTH_DSDV_PKT_FW			=	2,
  SETTING_LENGTH_DSDV_RUPDATE			=	3,
  SETTING_LENGTH_NBR_HISTORY			=	3,
  SETTING_LENGTH_NBR_QUALITY			=	4,
  SETTING_LENGTH_TX_Control			=	2,
  SETTING_LENGTH_ADJUVANT			=	4, // plus a list of addrs
  SETTING_LENGTH_DSDV_METRIC			=	5,
  SETTING_LENGTH_METRIC_MEASURE			=	2,
  SETTING_LENGTH_MESH_ENABLE			=	3, // plus a list of addrs
  SETTING_LENGTH_ENERGY_MEASURE			=	2,
  SETTING_LENGTH_STATIC_ROUTE			=	1 + 2 * sizeof(wsnAddr),
  SETTING_LENGTH_RESET				=	1,

// Cluster Head App Settings (including the setting ID byte)
  SETTING_LENGTH_PERIODIC_COLLECTION 		=	8,
  SETTING_LENGTH_CHANNEL_CFG			=	5,
  SETTING_LENGTH_NODE_DISCOVERY_CFG 		=	6,

// Query Params Settings (including the setting ID byte)
  SETTING_LENGTH_QUERY_GROUP			=	0, // variable, this val is not used
  SETTING_LENGTH_CHANNEL_PARAMETER_SET		=	0, // variable, this val is not used
  SETTING_LENGTH_STATS_COLLECTION		=	4 + sizeof(wsnAddr),

// Special Settings (including the setting ID byte)
  SETTING_LENGTH_SETTINGS_START			=	1, // actual length
  SETTING_LENGTH_UPDATE_SETTINGS_DONE		=	3, // actual length 
  SETTING_LENGTH_QUERY_SETTINGS_VALIDATION 	=	1, // actual length 
  SETTING_LENGTH_NEW_CFG_AVAILABLE 		=	1, // actual length 
};


/**
 * Setting Request Types - these mirror the Setting ID being requested.
 **/ 
enum {
  REQUEST_ALL = 				SETTING_ID_INVALID,
  REQUEST_PERIODIC_COLLECTION_SETTING =		SETTING_ID_PERIODIC_COLLECTION,
  REQUEST_CHANNEL_CFG_SETTING =			SETTING_ID_CHANNEL_CFG,
  REQUEST_NODE_DISCOVERY_CFG_SETTING =		SETTING_ID_NODE_DISCOVERY_CFG,
  REQUEST_QUERY_GROUP_SETTING = 		SETTING_ID_QUERY_GROUP,
  REQUEST_CHANNEL_PARAMETER_SET_SETTING =	SETTING_ID_CHANNEL_PARAMETER_SET,
  REQUEST_STATS_COLLECTION_SETTING =		SETTING_ID_STATS_COLLECTION
};



More information about the Tinyos-contrib-commits mailing list