From 8229228e5e65d58920f3fecc174d07e74ed5e8fa Mon Sep 17 00:00:00 2001 From: mmaroti Date: Tue, 27 Jan 2009 20:17:51 +0000 Subject: [PATCH] export a setChannel command to applications --- tos/chips/rf230/MessageBufferLayerC.nc | 4 ++- tos/chips/rf230/MessageBufferLayerP.nc | 34 +++++++++++++++++++++-- tos/chips/rf230/RF230ActiveMessageC.nc | 2 ++ tos/chips/rf230/RadioConfig.nc | 38 ++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 tos/chips/rf230/RadioConfig.nc diff --git a/tos/chips/rf230/MessageBufferLayerC.nc b/tos/chips/rf230/MessageBufferLayerC.nc index 89f00594..b746abbe 100644 --- a/tos/chips/rf230/MessageBufferLayerC.nc +++ b/tos/chips/rf230/MessageBufferLayerC.nc @@ -28,6 +28,7 @@ configuration MessageBufferLayerC interface SplitControl; interface Send; interface Receive; + interface RadioConfig; } uses { @@ -47,7 +48,8 @@ implementation SplitControl = MessageBufferLayerP; Send = MessageBufferLayerP; - Receive = MessageBufferLayerP.Receive; + Receive = MessageBufferLayerP; + RadioConfig = MessageBufferLayerP; RadioState = MessageBufferLayerP; MessageBufferLayerP.Tasklet -> TaskletC; diff --git a/tos/chips/rf230/MessageBufferLayerP.nc b/tos/chips/rf230/MessageBufferLayerP.nc index 738835b0..bc31ef72 100644 --- a/tos/chips/rf230/MessageBufferLayerP.nc +++ b/tos/chips/rf230/MessageBufferLayerP.nc @@ -33,6 +33,7 @@ module MessageBufferLayerP interface Send; interface Receive; + interface RadioConfig; } uses { @@ -58,6 +59,7 @@ implementation STATE_TX_DONE = 3, STATE_TURN_ON = 4, STATE_TURN_OFF = 5, + STATE_CHANNEL = 6, }; command error_t SplitControl.start() @@ -98,6 +100,25 @@ implementation return error; } + command error_t RadioConfig.setChannel(uint8_t channel) + { + error_t error; + + call Tasklet.suspend(); + + if( state != STATE_READY ) + error = EBUSY; + else + error = call RadioState.setChannel(channel); + + if( error == SUCCESS ) + state = STATE_CHANNEL; + + call Tasklet.resume(); + + return error; + } + task void stateDoneTask() { uint8_t s; @@ -105,13 +126,16 @@ implementation s = state; // change the state before so we can be reentered from the event - if( s == STATE_TURN_ON || s == STATE_TURN_OFF ) - state = STATE_READY; + state = STATE_READY; if( s == STATE_TURN_ON ) signal SplitControl.startDone(SUCCESS); - else + else if( s == STATE_TURN_OFF ) signal SplitControl.stopDone(SUCCESS); + else if( s == STATE_CHANNEL ) + signal RadioConfig.setChannelDone(); + else // not our event, ignore it + state = s; } tasklet_async event void RadioState.done() @@ -127,6 +151,10 @@ implementation { } + default event void RadioConfig.setChannelDone() + { + } + /*----------------- Send -----------------*/ message_t* txMsg; diff --git a/tos/chips/rf230/RF230ActiveMessageC.nc b/tos/chips/rf230/RF230ActiveMessageC.nc index 9b8e7141..6a026044 100644 --- a/tos/chips/rf230/RF230ActiveMessageC.nc +++ b/tos/chips/rf230/RF230ActiveMessageC.nc @@ -37,6 +37,7 @@ configuration RF230ActiveMessageC interface AMPacket; interface PacketAcknowledgements; interface LowPowerListening; + interface RadioConfig; interface PacketField as PacketLinkQuality; interface PacketField as PacketTransmitPower; @@ -68,6 +69,7 @@ implementation PacketTimeStampRadio = RF230PacketC; PacketTimeStampMilli = RF230PacketC; LowPowerListening = LowPowerListeningLayerC; + RadioConfig = MessageBufferLayerC; components ActiveMessageLayerC; #ifdef TFRAMES_ENABLED diff --git a/tos/chips/rf230/RadioConfig.nc b/tos/chips/rf230/RadioConfig.nc new file mode 100644 index 00000000..82864a61 --- /dev/null +++ b/tos/chips/rf230/RadioConfig.nc @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2009, Vanderbilt University + * 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 VANDERBILT UNIVERSITY 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 VANDERBILT + * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * THE VANDERBILT UNIVERSITY 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 VANDERBILT UNIVERSITY HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Author: Miklos Maroti + */ + +interface RadioConfig +{ + /** + * Sets the current channel. Returns EBUSY if the stack is unable + * to change the channel this time (some other operation is in progress), + * EALREADY if the selected channel is already set, SUCCESS otherwise. + */ + command error_t setChannel(uint8_t channel); + + /** + * This event is signaled exactly once for each sucessfully posted state + * setChannel command when it is completed. + */ + event void setChannelDone(); +} -- 2.39.2