]> oss.titaniummirror.com Git - tinyos-2.x.git/commitdiff
update the latest driver code for T2.
authorpipeng <pipeng>
Thu, 15 Feb 2007 10:28:46 +0000 (10:28 +0000)
committerpipeng <pipeng>
Thu, 15 Feb 2007 10:28:46 +0000 (10:28 +0000)
tos/sensorboards/mts300/.sensor
tos/sensorboards/mts300/AccelConfigP.nc
tos/sensorboards/mts300/AccelP.nc
tos/sensorboards/mts300/PhotoC.nc
tos/sensorboards/mts300/PhotoTempP.nc
tos/sensorboards/mts300/SensorMts300C.nc
tos/sensorboards/mts300/SensorMts300P.nc
tos/sensorboards/mts300/SounderC.nc
tos/sensorboards/mts300/SounderP.nc
tos/sensorboards/mts300/mts300.h

index b67f0304b728c97e4e8a4bfead648d6af557021d..191bed2bd6a47881df44990ee5a59b71c6744fd7 100644 (file)
@@ -10,5 +10,7 @@
 # $Id$
 #
 push( @includes, qw(
-  %T/sensorboards/mts300
+  %T/sensorboards/mts300_me
+  %T/chips/atm128/i2c
+#  %T/chips/atm128/adc
 ) );
index d55464115c1dac10d5428359b6fda0fdac8c59ad..6005babd16224bf14e73c2d248165e854668f092 100644 (file)
@@ -1,41 +1,44 @@
-/* $Id$
- * Copyright (c) 2006 Intel Corporation
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached INTEL-LICENSE     
- * file. If you do not find these files, copies can be found by writing to
- * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
- * 94704.  Attention:  Intel License Inquiry.
- */
-/**
- * Internal component for basicsb photodiode. Arbitrates access to the photo
- * diode and automatically turns it on or off based on user requests.
- * 
- * @author David Gay
- */
-
-configuration AccelConfigP { 
-  provides {
-    interface Resource[uint8_t client];
-    interface Atm128AdcConfig as ConfigX;
-    interface Atm128AdcConfig as ConfigY;
-  }
-}
-implementation {
-  components AccelP, MicaBusC, new TimerMilliC() as WarmupTimer,
-    new RoundRobinArbiterC(UQ_ACCEL_RESOURCE) as Arbiter,
-    new SplitControlPowerManagerC() as PowerManager;
-
-  Resource = Arbiter;
-  ConfigX = AccelP.ConfigX;
-  ConfigY = AccelP.ConfigY;
-
-  PowerManager.ResourceDefaultOwner -> Arbiter;
-  PowerManager.ArbiterInfo -> Arbiter;
-  PowerManager.SplitControl -> AccelP;
-
-  AccelP.Timer -> WarmupTimer;
-  AccelP.AccelPin -> MicaBusC.PW4;
-  AccelP.AccelAdcX -> MicaBusC.Adc3;
-  AccelP.AccelAdcY -> MicaBusC.Adc4;
-}
+/* $Id$\r
+ * Copyright (c) 2006 Intel Corporation\r
+ * All rights reserved.\r
+ *\r
+ * This file is distributed under the terms in the attached INTEL-LICENSE\r
+ * file. If you do not find these files, copies can be found by writing to\r
+ * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA,\r
+ * 94704.  Attention:  Intel License Inquiry.\r
+ */\r
+/**\r
+ * Internal component for basicsb photodiode. Arbitrates access to the photo\r
+ * diode and automatically turns it on or off based on user requests.\r
+ *\r
+ * @author David Gay\r
+ */\r
+\r
+#include "mts300.h"\r
+\r
+configuration AccelConfigP {\r
+  provides {\r
+    interface Init;\r
+    interface StdControl;\r
+\r
+    interface Atm128AdcConfig as ConfigX;\r
+    interface Atm128AdcConfig as ConfigY;\r
+    interface ResourceConfigure as ResourceX;\r
+    interface ResourceConfigure as ResourceY;\r
+  }\r
+}\r
+implementation {\r
+  components AccelP, MicaBusC;\r
+\r
+       Init = AccelP;\r
+       StdControl = AccelP;\r
+\r
+  ConfigX = AccelP.ConfigX;\r
+  ConfigY = AccelP.ConfigY;\r
+  ResourceX = AccelP.ResourceX;\r
+  ResourceY = AccelP.ResourceY;\r
+\r
+  AccelP.AccelPower -> MicaBusC.PW4;\r
+  AccelP.AccelAdcX -> MicaBusC.Adc3;\r
+  AccelP.AccelAdcY -> MicaBusC.Adc4;\r
+}\r
index c3742a7857d64080b00caad210faff0caa2cc914..cfe5c59720cfd87a3aa28cd47427926bc9238b92 100644 (file)
@@ -1,76 +1,71 @@
-/* $Id$
- * Copyright (c) 2006 Intel Corporation
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached INTEL-LICENSE     
- * file. If you do not find these files, copies can be found by writing to
- * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
- * 94704.  Attention:  Intel License Inquiry.
- */
-/**
- * ADXL202JE accelerometer ADC configuration and power management.
- * @author David Gay <david.e.gay@intel.com>
- */
-module AccelP
-{
-  provides {
-    interface SplitControl;
-    interface Atm128AdcConfig as ConfigX;
-    interface Atm128AdcConfig as ConfigY;
-  }
-  uses {
-    interface Timer<TMilli>;
-    interface GeneralIO as AccelPin;
-    interface MicaBusAdc as AccelAdcX;
-    interface MicaBusAdc as AccelAdcY;
-  }
-}
-implementation
-{
-  async command uint8_t ConfigX.getChannel() {
-    return call AccelAdcX.getChannel();
-  }
-
-  async command uint8_t ConfigX.getRefVoltage() {
-    return ATM128_ADC_VREF_OFF;
-  }
-
-  async command uint8_t ConfigX.getPrescaler() {
-    return ATM128_ADC_PRESCALE;
-  }
-
-  async command uint8_t ConfigY.getChannel() {
-    return call AccelAdcY.getChannel();
-  }
-
-  async command uint8_t ConfigY.getRefVoltage() {
-    return ATM128_ADC_VREF_OFF;
-  }
-
-  async command uint8_t ConfigY.getPrescaler() {
-    return ATM128_ADC_PRESCALE;
-  }
-
-  command error_t SplitControl.start() {
-    call AccelPin.makeOutput();
-    call AccelPin.set();
-    /* Startup time is 16.3ms for 0.1uF capacitors,
-       according to the ADXL202E data sheet */
-    call Timer.startOneShot(17); 
-    return SUCCESS;
-  }
-
-  event void Timer.fired() {
-    signal SplitControl.startDone(SUCCESS);
-  }
-
-  task void stopDone() {
-    call AccelPin.clr();
-    signal SplitControl.stopDone(SUCCESS);
-  }
-
-  command error_t SplitControl.stop() {
-    post stopDone();
-    return SUCCESS;
-  }
-}
+#include "mts300.h"\r
+#include "Timer.h"\r
+\r
+module AccelP\r
+{\r
+  provides interface Init;\r
+  provides interface StdControl;\r
+\r
+  provides interface Atm128AdcConfig as ConfigX;\r
+  provides interface Atm128AdcConfig as ConfigY;\r
+  provides interface ResourceConfigure as ResourceX;\r
+  provides interface ResourceConfigure as ResourceY;\r
+\r
+       uses interface GeneralIO as AccelPower;\r
+       uses interface MicaBusAdc as AccelAdcX;\r
+       uses interface MicaBusAdc as AccelAdcY;\r
+}\r
+\r
+implementation\r
+{\r
+  command error_t Init.init()\r
+  {\r
+    call AccelPower.makeOutput();\r
+               call AccelPower.clr();\r
+\r
+    return SUCCESS;\r
+       }\r
+\r
+  command error_t StdControl.start()\r
+  {\r
+    call AccelPower.set();\r
+    return SUCCESS;\r
+  }\r
+\r
+  command error_t StdControl.stop()\r
+  {\r
+    call AccelPower.clr();\r
+    call AccelPower.makeInput();\r
+\r
+    return SUCCESS;\r
+  }\r
+\r
+  async command uint8_t ConfigX.getChannel() {\r
+    return call AccelAdcX.getChannel();\r
+  }\r
+\r
+  async command uint8_t ConfigX.getRefVoltage() {\r
+    return ATM128_ADC_VREF_OFF;\r
+  }\r
+\r
+  async command uint8_t ConfigX.getPrescaler() {\r
+    return ATM128_ADC_PRESCALE;\r
+  }\r
+\r
+  async command uint8_t ConfigY.getChannel() {\r
+    return call AccelAdcY.getChannel();\r
+  }\r
+\r
+  async command uint8_t ConfigY.getRefVoltage() {\r
+    return ATM128_ADC_VREF_OFF;\r
+  }\r
+\r
+  async command uint8_t ConfigY.getPrescaler() {\r
+    return ATM128_ADC_PRESCALE;\r
+  }\r
+\r
+  async command void ResourceX.configure() { }  \r
+  async command void ResourceX.unconfigure() { } \r
+  async command void ResourceY.configure() { }  \r
+  async command void ResourceY.unconfigure() {}\r
+}
\ No newline at end of file
index d6acb651efea1e5f43f47e228f1d1c913637ebf9..38f788ea2ab3317f2b7c07165171b97577d9f35b 100644 (file)
@@ -1,25 +1,49 @@
-/* $Id$
- * Copyright (c) 2006 Intel Corporation
- * All rights reserved.
+/**
+ *  Copyright (c) 2005-2006 Crossbow Technology, Inc.
+ *  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 (updated) modification history and the author appear in
+ *  all copies of this source code.
+ *
+ *  Permission is also granted to distribute this software under the
+ *  standard BSD license as contained in the TinyOS distribution.
  *
- * This file is distributed under the terms in the attached INTEL-LICENSE     
- * file. If you do not find these files, copies can be found by writing to
- * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
- * 94704.  Attention:  Intel License Inquiry.
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+ *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,
+ *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ *  THE POSSIBILITY OF SUCH DAMAGE.
  */
-/**
- * Photodiode of the mts300 sensor board.
- * 
- * @author David Gay
+ /*
+ *  @author Hu Siquan <husq@xbow.com>
+ *
+ *  $Id$
  */
 
 #include "mts300.h"
 
-generic configuration PhotoC() {
+generic configuration PhotoC()
+{
   provides interface Read<uint16_t>;
+  provides interface StdControl;
+  provides interface Init;
 }
-implementation {
-  components ArbitratedPhotoDeviceP;
+implementation
+{
+  components new AdcReadClientC(), PhotoTempDeviceP;
+
+  Init = PhotoTempDeviceP;
+  StdControl = PhotoTempDeviceP;
 
-  Read = ArbitratedPhotoDeviceP.Read[unique(UQ_PHOTO_RESOURCE)];
+  Read = AdcReadClientC;
+  AdcReadClientC.Atm128AdcConfig -> PhotoTempDeviceP.PhotoAtm128AdcConfig;
+  AdcReadClientC.ResourceConfigure -> PhotoTempDeviceP.PhotoResourceConfigure;
 }
index 185f6f7a447c59a24a76ed3d23dc2224f8112b23..dc4a6387bb782e8b65852a94ff4b2929c2943972 100644 (file)
-/* $Id$
- * Copyright (c) 2007 Intel Corporation
- * All rights reserved.
- *
- * This file is distributed under the terms in the attached INTEL-LICENSE     
- * file. If you do not find these files, copies can be found by writing to
- * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, Berkeley, CA, 
- * 94704.  Attention:  Intel License Inquiry.
- */
-/**
- * MTS300 photo and temp sensor ADC configuration.
- * @author David Gay <david.e.gay@intel.com>
- */
-module PhotoTempP
-{
-  provides interface Atm128AdcConfig;
-  uses interface MicaBusAdc as PhotoTempAdc;
-}
-implementation
-{
-  async command uint8_t Atm128AdcConfig.getChannel() {
-    return call PhotoTempAdc.getChannel();
-  }
-
-  async command uint8_t Atm128AdcConfig.getRefVoltage() {
-    return ATM128_ADC_VREF_OFF;
-  }
-
-  async command uint8_t Atm128AdcConfig.getPrescaler() {
-    return ATM128_ADC_PRESCALE;
-  }
-}
+/**\r
+ *  Copyright (c) 2005-2006 Crossbow Technology, Inc.\r
+ *  All rights reserved.\r
+ *\r
+ *  Permission to use, copy, modify, and distribute this software and its\r
+ *  documentation for any purpose, without fee, and without written\r
+ *  agreement is hereby granted, provided that the above copyright\r
+ *  notice, the (updated) modification history and the author appear in\r
+ *  all copies of this source code.\r
+ *\r
+ *  Permission is also granted to distribute this software under the\r
+ *  standard BSD license as contained in the TinyOS distribution.\r
+ *\r
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\r
+ *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,\r
+ *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r
+ *  THE POSSIBILITY OF SUCH DAMAGE.\r
+ *\r
+ *  @author Martin Turon <mturon@xbow.com>\r
+ *  @author Hu Siquan <husq@xbow.com>\r
+ *\r
+ *  $Id$\r
+ */\r
+\r
+#include "Timer.h"\r
+\r
+module PhotoTempP\r
+{\r
+  provides\r
+  {\r
+               interface Init;                                                                                         //!< Standard Initialization\r
+               interface StdControl;           //!< Start/Stop for Temp Sensor's Power Management\r
+    interface ResourceConfigure as TempResourceConfigure;\r
+    interface ResourceConfigure as PhotoResourceConfigure;\r
+    interface Atm128AdcConfig as TempAtm128AdcConfig;\r
+    interface Atm128AdcConfig as PhotoAtm128AdcConfig;\r
+  }\r
+  uses\r
+  {\r
+       interface GeneralIO as TempPower;\r
+       interface GeneralIO as LightPower;\r
+       interface MicaBusAdc as SensorAdc;\r
+       interface Leds as DebugLeds;\r
+    }\r
+}\r
+implementation\r
+{\r
+/*\r
+    enum\r
+    {\r
+       STATE_IDLE = 0,\r
+       STATE_LIGHT_WARMING,   //!< Powering on sensor\r
+       STATE_LIGHT_READY,     //!< Power up of sensor complete\r
+       STATE_LIGHT_SAMPLING,  //!< Sampling sensor\r
+       STATE_TEMP_WARMING,    //!< Powering on sensor\r
+       STATE_TEMP_READY,      //!< Power up of sensor complete\r
+       STATE_TEMP_SAMPLING,   //!< Sampling sensor\r
+    };\r
+\r
+    /// Yes, this could be a simple uint8_t.  There used to be more bits here,\r
+    /// but they were optimized out and removed.\r
+    union\r
+    {\r
+       uint8_t flat;\r
+       struct\r
+       {\r
+           uint8_t state       : 4;   //!< sensorboard state\r
+         } bits;\r
+    } g_flags;\r
+*/\r
+\r
+    void inline TOSH_uwait(int u_sec)\r
+    {\r
+      /* In most cases (constant arg), the test is elided at compile-time */\r
+      if (u_sec)\r
+        /* loop takes 4 cycles, aka 1us */\r
+        asm volatile (\r
+    "1:        sbiw    %0,1\n"\r
+    "  brne    1b" : "+w" (u_sec));\r
+    }\r
+   /**\r
+    * Initialize this component. Initialization should not assume that\r
+    * any component is running: init() cannot call any commands besides\r
+    * those that initialize other components.\r
+    *\r
+    */\r
+    command error_t Init.init()\r
+    {\r
+           return SUCCESS;\r
+    }\r
+\r
+\r
+    /**\r
+     * Start the component and its subcomponents.\r
+     *\r
+     * @return SUCCESS if the component was successfully started.\r
+     */\r
+    command error_t StdControl.start()\r
+    {\r
+      call TempPower.makeOutput();\r
+       call TempPower.clr();\r
+       call LightPower.makeOutput();\r
+       call LightPower.clr();\r
+       \r
+       return SUCCESS;\r
+    }\r
+\r
+    /**\r
+     * Stop the component and pertinent subcomponents (not all\r
+     * subcomponents may be turned off due to wakeup timers, etc.).\r
+     *\r
+     * @return SUCCESS if the component was successfully stopped.\r
+     */\r
+    command error_t StdControl.stop()\r
+    {\r
+       call TempPower.clr();\r
+       call LightPower.clr();\r
+       call TempPower.makeInput();\r
+       call LightPower.makeInput();\r
+       \r
+       return SUCCESS;\r
+    }\r
+\r
+    async command uint8_t TempAtm128AdcConfig.getChannel() \r
+    {\r
+      return call SensorAdc.getChannel();\r
+    }\r
+  \r
+    async command uint8_t TempAtm128AdcConfig.getRefVoltage() \r
+    {\r
+      return ATM128_ADC_VREF_OFF;\r
+    }\r
+  \r
+    async command uint8_t TempAtm128AdcConfig.getPrescaler() \r
+    {\r
+      return ATM128_ADC_PRESCALE;\r
+    }\r
+  \r
+    async command uint8_t PhotoAtm128AdcConfig.getChannel() \r
+    {\r
+      return call SensorAdc.getChannel();\r
+    }\r
+  \r
+    async command uint8_t PhotoAtm128AdcConfig.getRefVoltage() \r
+    {\r
+      return ATM128_ADC_VREF_OFF;\r
+    }\r
+  \r
+    async command uint8_t PhotoAtm128AdcConfig.getPrescaler() \r
+    {\r
+      return ATM128_ADC_PRESCALE;\r
+    }\r
+  \r
+    async command void TempResourceConfigure.configure() \r
+    {\r
+      call DebugLeds.led0On();\r
+               call LightPower.clr();\r
+               call LightPower.makeInput();\r
+               call TempPower.makeOutput();\r
+               call TempPower.set();\r
+               TOSH_uwait(1000);\r
+    }\r
+  \r
+    async command void TempResourceConfigure.unconfigure() \r
+    {\r
+      call DebugLeds.led0Off();\r
+               call TempPower.clr();\r
+               call TempPower.makeInput();\r
+    }\r
+  \r
+      /** Turns on the light sensor and turns the thermistor off. */\r
+    async command void PhotoResourceConfigure.configure() \r
+    {\r
+      call DebugLeds.led1On();\r
+               call TempPower.clr();\r
+               call TempPower.makeInput();\r
+               call LightPower.makeOutput();\r
+               call LightPower.set();\r
+               TOSH_uwait(1000);\r
+    }\r
+  \r
+    async command void PhotoResourceConfigure.unconfigure() \r
+    {\r
+      call DebugLeds.led1Off();\r
+               call LightPower.clr();\r
+               call LightPower.makeInput();\r
+    }\r
+}\r
index df62369acdff387f5994b32d9ac6bd4dc169d794..12e093b2edef72a2e4f35412fdb74332a5bcaa2e 100644 (file)
@@ -1,5 +1,5 @@
 /**\r
- *  Copyright (c) 2004-2005 Crossbow Technology, Inc.\r
+ *  Copyright (c) 2005-2006 Crossbow Technology, Inc.\r
  *  All rights reserved.\r
  *\r
  *  Permission to use, copy, modify, and distribute this software and its\r
  *  standard BSD license as contained in the TinyOS distribution.\r
  *\r
  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
- *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS \r
- *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r
- *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, \r
- *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \r
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \r
- *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF \r
+ *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\r
+ *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,\r
+ *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r
  *  THE POSSIBILITY OF SUCH DAMAGE.\r
  *\r
  *  @author Martin Turon <mturon@xbow.com>\r
- *  @author Miguel Freitas\r
+ *  @author Hu Siquan <husq@xbow.com>\r
  *\r
  *  $Id$\r
  */\r
 \r
-configuration SensorMts300C\r
+//configuration SensorMts300C\r
+generic configuration SensorMts300C()\r
 {\r
-    provides {\r
-       interface Init;                 //!< Standard Initialization\r
-       interface StdControl;           //!< Start/Stop for Power Management\r
-       interface Read<uint16_t> as Temp;  //!< Thermister\r
-       interface Read<uint16_t> as Light; //!< Photo sensor\r
-    }\r
+  provides\r
+  {\r
+       interface Init;                 //!< Standard Initialization\r
+       interface StdControl;           //!< Start/Stop for Power Management\r
+       interface Read<uint16_t> as Vref; //!< voltage\r
+       interface Read<uint16_t> as Temp; //!< Thermister\r
+       interface Read<uint16_t> as Light; //!< Photo sensor\r
+       interface Read<uint16_t> as Microphone; //!< Mic sensor\r
+       interface Read<uint16_t> as AccelX; //!< Accelerometer sensor\r
+       interface Read<uint16_t> as AccelY; //!< Accelerometer sensor\r
+       interface Read<uint16_t> as MagX; //!< magnetometer sensor\r
+       interface Read<uint16_t> as MagY; //!< magnetometer sensor\r
+  }\r
 }\r
-implementation \r
+implementation\r
 {\r
-    components \r
-       SensorMts300P,\r
-       SensorMts300DeviceP,\r
-       HplAtm128GeneralIOC as IO,\r
-       new AdcReadClientC() as SensorADC,\r
-       new TimerMilliC() as WarmUpTimer\r
-       ;\r
+    components         SensorMts300P,  HplAtm128GeneralIOC as IO,\r
+    new VoltageC(),\r
+    new PhotoC(),\r
+    new TempC(),\r
+    new MicC(),\r
+    new MagC(),\r
+    new AccelC(),\r
+         new TimerMilliC() as WarmUpTimer;\r
 \r
     Init       = SensorMts300P.Init;\r
+    Init       = PhotoC.Init;\r
+    Init       = MicC.Init;\r
     StdControl = SensorMts300P.StdControl;\r
+    Vref       = SensorMts300P.Vref;\r
     Temp       = SensorMts300P.Temp;\r
     Light      = SensorMts300P.Light;\r
+    Microphone = SensorMts300P.Microphone;\r
+    AccelX     = SensorMts300P.AccelX;\r
+    AccelY     = SensorMts300P.AccelY;\r
+    MagX       = SensorMts300P.MagX;\r
+    MagY       = SensorMts300P.MagY;\r
 \r
-    SensorADC.Atm128AdcConfig -> SensorMts300DeviceP;\r
-    SensorADC.ResourceConfigure -> SensorMts300DeviceP;\r
+    SensorMts300P.WarmUpTimer -> WarmUpTimer;\r
 \r
-    SensorMts300P.SensorADC -> SensorADC;\r
-    SensorMts300P.TempPower -> IO.PortE6;\r
+    SensorMts300P.VrefRead -> VoltageC.Read;\r
+    SensorMts300P.PhotoControl -> PhotoC.StdControl;\r
+    SensorMts300P.TempRead -> TempC.Read;\r
+    SensorMts300P.LightRead -> PhotoC.Read;\r
     SensorMts300P.LightPower -> IO.PortE5;\r
-    SensorMts300P.WarmUpTimer -> WarmUpTimer;\r
+    SensorMts300P.TempPower -> IO.PortE6;\r
+\r
+    SensorMts300P.MicControl -> MicC.StdControl;\r
+    SensorMts300P.Mic -> MicC.Mic;\r
+    SensorMts300P.MicRead -> MicC.Read;\r
+\r
+    SensorMts300P.MagControl -> MagC.StdControl;\r
+    SensorMts300P.Mag -> MagC.Mag;\r
+    SensorMts300P.MagXRead -> MagC.MagX;\r
+    SensorMts300P.MagYRead -> MagC.MagY;\r
+\r
+    SensorMts300P.AccelControl -> AccelC.StdControl;\r
+    SensorMts300P.AccelXRead -> AccelC.AccelX;\r
+    SensorMts300P.AccelYRead -> AccelC.AccelY;\r
+    \r
 }\r
index 5984093c2dee6a3cd09fe3b099f7214ebfed127b..82a90bde30d49ab09daecadec87f4efa19250470 100644 (file)
@@ -1,5 +1,5 @@
 /**\r
- *  Copyright (c) 2004-2005 Crossbow Technology, Inc.\r
+ *  Copyright (c) 2005-2006 Crossbow Technology, Inc.\r
  *  All rights reserved.\r
  *\r
  *  Permission to use, copy, modify, and distribute this software and its\r
  *  standard BSD license as contained in the TinyOS distribution.\r
  *\r
  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
- *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS \r
- *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r
- *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, \r
- *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN \r
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) \r
- *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF \r
+ *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS\r
+ *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA,\r
+ *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r
  *  THE POSSIBILITY OF SUCH DAMAGE.\r
  *\r
  *  @author Martin Turon <mturon@xbow.com>\r
- *  @author Miguel Freitas\r
  *\r
  *  $Id$\r
  */\r
 /**\r
  * This component is the "platform" of the sensorboard space.\r
  * It handles particulars of initialization, and glues all the\r
- * member sensor "chips" into one place.  The current implementation \r
- * is overly monolithic, and should be divided into smaller \r
+ * member sensor "chips" into one place.  The current implementation\r
+ * is overly monolithic, and should be divided into smaller\r
  * components that handle each individual sensor.  The temperature\r
  * and light sensors are tightly coupled however and in the case\r
  * of the micaz, interfere with the radio (INT2), so more can\r
  * be done to clean up the design here.\r
- * \r
+ *\r
  * @author  Martin Turon\r
  * @date    October 19, 2005\r
  */\r
 module SensorMts300P\r
 {\r
-    provides {\r
-       interface Init;                 //!< Standard Initialization\r
-       interface StdControl;           //!< Start/Stop for Power Management\r
-       interface Read<uint16_t> as Temp;  //!< Thermister\r
-       interface Read<uint16_t> as Light; //!< Photo sensor\r
-    }\r
+  provides\r
+  {\r
+       interface Init;                 //!< Standard Initialization\r
+       interface StdControl;           //!< Start/Stop for Power Management\r
+       interface Read<uint16_t> as Vref; //!< voltage\r
+       interface Read<uint16_t> as Temp;  //!< Thermister\r
+       interface Read<uint16_t> as Light; //!< Photo sensor\r
+       interface Read<uint16_t> as Microphone; //!< Mic sensor\r
+       interface Read<uint16_t> as AccelX; //!< Accelerometer sensor\r
+       interface Read<uint16_t> as AccelY; //!< Accelerometer sensor\r
+       interface Read<uint16_t> as MagX; //!< magnetometer sensor\r
+       interface Read<uint16_t> as MagY; //!< magnetometer sensor\r
+  }\r
 \r
-    uses {\r
-       interface GeneralIO as TempPower;\r
-       interface GeneralIO as LightPower;\r
-       interface Read<uint16_t> as SensorADC;\r
-       interface Timer<TMilli> as WarmUpTimer;\r
-    }\r
+  uses\r
+  {\r
+       interface GeneralIO as TempPower;\r
+       interface GeneralIO as LightPower;\r
+       interface StdControl as PhotoControl;\r
+       interface StdControl as MicControl;\r
+       interface Mic;\r
+    interface StdControl as MagControl;\r
+    interface Mag;\r
+    interface StdControl as AccelControl;\r
+\r
+    interface Read<uint16_t> as VrefRead;\r
+       interface Read<uint16_t> as TempRead;  //!< Thermister\r
+       interface Read<uint16_t> as LightRead; //!< Photo sensor\r
+       interface Read<uint16_t> as MicRead; //!< Mic sensor\r
+       interface Read<uint16_t> as AccelXRead; //!< Magnetometer sensor\r
+       interface Read<uint16_t> as AccelYRead; //!< Magnetometer sensor\r
+       interface Read<uint16_t> as MagXRead; //!< Magnetometer sensor\r
+       interface Read<uint16_t> as MagYRead; //!< Magnetometer sensor\r
+       interface Timer<TMilli> as WarmUpTimer;\r
+  }\r
 }\r
-implementation \r
+implementation\r
 {\r
-    enum {\r
-       STATE_IDLE = 0,\r
-       STATE_LIGHT_WARMING,   //!< Powering on sensor\r
-       STATE_LIGHT_READY,     //!< Power up of sensor complete\r
-       STATE_LIGHT_SAMPLING,  //!< Sampling sensor\r
-       STATE_TEMP_WARMING,    //!< Powering on sensor\r
-       STATE_TEMP_READY,      //!< Power up of sensor complete\r
-       STATE_TEMP_SAMPLING,   //!< Sampling sensor\r
-    };\r
+  enum\r
+  {\r
+       STATE_IDLE = 0,\r
+       STATE_LIGHT_WARMING,   //!< Powering on sensor\r
+       STATE_LIGHT_READY,     //!< Power up of sensor complete\r
+       STATE_LIGHT_SAMPLING,  //!< Sampling sensor\r
+       STATE_TEMP_WARMING,    //!< Powering on sensor\r
+       STATE_TEMP_READY,      //!< Power up of sensor complete\r
+       STATE_TEMP_SAMPLING,   //!< Sampling sensor\r
+       STATE_MIC_WARMING,    //!< Powering on sensor\r
+       STATE_MIC_READY,      //!< Power up of sensor complete\r
+       STATE_MIC_SAMPLING,   //!< Sampling sensor\r
+  };\r
 \r
     /// Yes, this could be a simple uint8_t.  There used to be more bits here,\r
     /// but they were optimized out and removed.\r
-    union {\r
-       uint8_t flat;\r
-       struct {\r
+  union\r
+  {\r
+       uint8_t flat;\r
+         struct\r
+         {\r
            uint8_t state       : 4;   //!< sensorboard state\r
-       } bits;\r
-    } g_flags;\r
+         } bits;\r
+   } g_flags;\r
 \r
    /**\r
     * Initialize this component. Initialization should not assume that\r
     * any component is running: init() cannot call any commands besides\r
-    * those that initialize other components. \r
+    * those that initialize other components.\r
     *\r
     */\r
-    command error_t Init.init() {\r
-       g_flags.flat = STATE_IDLE;\r
-       return SUCCESS;\r
+    command error_t Init.init()\r
+    {\r
+           g_flags.flat = STATE_IDLE;\r
+      call Mic.muxSel(1);  // Set the mux so that raw microhpone output is selected\r
+      call Mic.gainAdjust(64);  // Set the gain of the microphone.\r
+\r
+           return SUCCESS;\r
     }\r
 \r
     /**\r
@@ -96,109 +127,130 @@ implementation
      *\r
      * @return SUCCESS if the component was successfully started.\r
      */\r
-    command error_t StdControl.start() {\r
-        return SUCCESS;\r
+    command error_t StdControl.start()\r
+    {\r
+      call PhotoControl.start();\r
+      call MicControl.start();\r
+      call MagControl.start();\r
+      call AccelControl.start();\r
+      return SUCCESS;\r
     }\r
-    \r
+\r
     /**\r
      * Stop the component and pertinent subcomponents (not all\r
      * subcomponents may be turned off due to wakeup timers, etc.).\r
      *\r
      * @return SUCCESS if the component was successfully stopped.\r
      */\r
-    command error_t StdControl.stop() {\r
-       call TempPower.clr();\r
-       call LightPower.clr();\r
-       call TempPower.makeInput();\r
-       call LightPower.makeInput();\r
-       atomic g_flags.bits.state = STATE_IDLE;\r
-       return SUCCESS;\r
+    command error_t StdControl.stop()\r
+    {\r
+           call TempPower.clr();\r
+           call LightPower.clr();\r
+           call TempPower.makeInput();\r
+           call LightPower.makeInput();\r
+           atomic g_flags.bits.state = STATE_IDLE;\r
+\r
+      call PhotoControl.stop();\r
+      call MicControl.stop();\r
+      call MagControl.stop();\r
+      call AccelControl.stop();\r
+\r
+           return SUCCESS;\r
     }\r
 \r
     /** Turns on the light sensor and turns the thermistor off. */\r
-    void switchLightOn() {\r
-       atomic g_flags.bits.state = STATE_LIGHT_WARMING;\r
-       call TempPower.clr();\r
-       call TempPower.makeInput();\r
-       call LightPower.makeOutput();\r
-       call LightPower.set();\r
-       call WarmUpTimer.startOneShot(10);\r
+    void switchLightOn()\r
+    {\r
+       atomic g_flags.bits.state = STATE_LIGHT_WARMING;\r
+       call TempPower.clr();\r
+       call TempPower.makeInput();\r
+       call LightPower.makeOutput();\r
+       call LightPower.set();\r
+       call WarmUpTimer.startOneShot(10);\r
     }\r
 \r
     /** Turns on the thermistor and turns the light sensor off. */\r
-    void switchTempOn() {\r
-       atomic g_flags.bits.state = STATE_TEMP_WARMING;\r
-       call LightPower.clr();\r
-       call LightPower.makeInput();\r
-       call TempPower.makeOutput();\r
-       call TempPower.set();\r
-       call WarmUpTimer.startOneShot(10);\r
+    void switchTempOn()\r
+    {\r
+       atomic g_flags.bits.state = STATE_TEMP_WARMING;\r
+       call LightPower.clr();\r
+       call LightPower.makeInput();\r
+       call TempPower.makeOutput();\r
+       call TempPower.set();\r
+       call WarmUpTimer.startOneShot(10);\r
     }\r
 \r
-    task void getLightSample() {\r
-       switch (g_flags.bits.state) {\r
-           case STATE_TEMP_WARMING:\r
-           case STATE_TEMP_READY:\r
-           case STATE_TEMP_SAMPLING:\r
-               // If Temperature is busy, repost and try again later.\r
-               // This will not let the CPU sleep.  Add delay timer.\r
-               post getLightSample();\r
-               return;\r
-\r
-           case STATE_IDLE: \r
-               // Okay, grab the sensor.\r
-               switchLightOn();\r
-               return;\r
-               \r
-           case STATE_LIGHT_WARMING:\r
-               // Warm-up Timer will switch out of this state.\r
-               return;\r
-\r
-           case STATE_LIGHT_READY:\r
-               // Start the sample.\r
-               atomic { g_flags.bits.state = STATE_LIGHT_SAMPLING; }\r
-               call SensorADC.read();\r
-               return;\r
+    void switchMicOn()\r
+    {\r
+      atomic g_flags.bits.state = STATE_MIC_WARMING;\r
+      call WarmUpTimer.startOneShot(10);\r
+    }\r
 \r
-           case STATE_LIGHT_SAMPLING:\r
-               // SensorADC.dataReady will switch out of this state.\r
-               return;\r
-       }\r
+    task void getLightSample()\r
+    {\r
+       switch (g_flags.bits.state)\r
+       {\r
+       case STATE_IDLE:\r
+               // Okay, grab the sensor.\r
+               switchLightOn();\r
+         return;\r
+       case STATE_LIGHT_READY:\r
+               // Start the sample.\r
+               atomic { g_flags.bits.state = STATE_LIGHT_SAMPLING; }\r
+               call LightRead.read();\r
+         return;\r
+       case STATE_LIGHT_WARMING:\r
+               // Warm-up Timer will switch out of this state.\r
+       case STATE_LIGHT_SAMPLING:\r
+               // LightRead.readDone will switch out of this state.\r
+         return;\r
+       }\r
     }\r
 \r
-    task void getTempSample() {\r
-       switch (g_flags.bits.state) {\r
-           case STATE_LIGHT_WARMING:\r
-           case STATE_LIGHT_READY:\r
-           case STATE_LIGHT_SAMPLING:\r
-               // If Temperature is busy, repost and try again later.\r
-               // This will not let the CPU sleep.  Add delay timer.\r
-               post getTempSample();\r
-               return;\r
-\r
-           case STATE_IDLE: \r
-               // Okay, grab the sensor.\r
-               switchTempOn();\r
-               return;\r
-               \r
-           case STATE_TEMP_WARMING:\r
-               // Warm-up Timer will switch out of this state.\r
-               return;\r
-\r
-           case STATE_TEMP_READY:\r
-               // Start the sample.\r
-               atomic { g_flags.bits.state = STATE_TEMP_SAMPLING; }\r
-               call SensorADC.read();\r
-               return;\r
+    task void getTempSample()\r
+    {\r
+       switch (g_flags.bits.state)\r
+       {\r
+       case STATE_IDLE:\r
+               // Okay, grab the sensor.\r
+               switchTempOn();\r
+               return;\r
+       case STATE_TEMP_READY:\r
+               // Start the sample.\r
+               atomic { g_flags.bits.state = STATE_TEMP_SAMPLING; }\r
+               call TempRead.read();\r
+               return;\r
+       case STATE_TEMP_WARMING:\r
+               // Warm-up Timer will switch out of this state.\r
+       case STATE_TEMP_SAMPLING:\r
+               // TempRead.readDone will switch out of this state.\r
+               return;\r
+       }\r
+    }\r
 \r
-           case STATE_TEMP_SAMPLING:\r
-               // SensorADC.dataReady will switch out of this state.\r
-               return;\r
-       }\r
+    task void getMicSample()\r
+    {\r
+       switch (g_flags.bits.state)\r
+       {\r
+       case STATE_IDLE:\r
+               // Okay, grab the sensor.\r
+               switchMicOn();\r
+               return;\r
+       case STATE_MIC_READY:\r
+               // Start the sample.\r
+               atomic { g_flags.bits.state = STATE_MIC_SAMPLING; }\r
+               call MicRead.read();\r
+               return;\r
+       case STATE_MIC_WARMING:\r
+               // Warm-up Timer will switch out of this state.\r
+       case STATE_MIC_SAMPLING:\r
+               // MicRead.readDone will switch out of this state.\r
+               return;\r
+       }\r
     }\r
 \r
-    /** \r
-     * Start Temperature data acquisition.  \r
+    /**\r
+     * Start Temperature data acquisition.\r
      *\r
      *   This will post a task which will handle sequential states:\r
      *      WARMING, READY, SAMPLING, DONE (IDLE)\r
@@ -207,77 +259,191 @@ implementation
      * @return SUCCESS if request accepted, EBUSY if it is refused\r
      *    'dataReady' or 'error' will be signaled if SUCCESS is returned\r
      */\r
-    command error_t Temp.read() {\r
-       post getTempSample();   \r
-       return SUCCESS;\r
+    command error_t Temp.read()\r
+    {\r
+       post getTempSample();\r
+       return SUCCESS;\r
     }\r
-\r
-    /** \r
-     * Start Light data acquisition.\r
-     *\r
-     *   This will post a task which will handle sequential states:\r
-     *      WARMING, READY, SAMPLING, DONE (IDLE)\r
-     *   and repost itself until it is completed.\r
-     *\r
-     *  @return SUCCESS if request accepted, EBUSY if it is refused\r
-     *    'dataReady' or 'error' will be signaled if SUCCESS is returned\r
-     */\r
-    command error_t Light.read() {\r
-       post getLightSample();  \r
-       return SUCCESS;\r
+    command error_t Light.read()\r
+    {\r
+       post getLightSample();\r
+       return SUCCESS;\r
     }\r
-\r
-    /** \r
+    command error_t Microphone.read()\r
+    {\r
+       post getMicSample();\r
+       return SUCCESS;\r
+    }\r
+    command error_t Vref.read()\r
+    {\r
+       call VrefRead.read();\r
+       return SUCCESS;\r
+    }\r
+    command error_t AccelX.read()\r
+    {\r
+       //signal AccelX.readDone(SUCCESS,0x1);\r
+       call AccelXRead.read();\r
+       return SUCCESS;\r
+    }\r
+    command error_t AccelY.read()\r
+    {\r
+       //signal AccelY.readDone(SUCCESS,0x2);\r
+       call AccelYRead.read();\r
+       return SUCCESS;\r
+    }\r
+    command error_t MagX.read()\r
+    {\r
+       //signal MagX.readDone(SUCCESS,0x3);\r
+       call MagXRead.read();\r
+       return SUCCESS;\r
+    }\r
+    command error_t MagY.read()\r
+    {\r
+       //signal MagY.readDone(SUCCESS,0x4);\r
+       call MagYRead.read();\r
+       return SUCCESS;\r
+    }\r
+    /**\r
      * Timer to allow either thermistor or light sensor to warm up for 10 msec.\r
      */\r
-    event void WarmUpTimer.fired() {\r
-       switch (g_flags.bits.state) {\r
-           case STATE_LIGHT_WARMING:\r
-               atomic { g_flags.bits.state = STATE_LIGHT_READY; }\r
-               post getLightSample();\r
-               return;\r
-\r
-           case STATE_TEMP_WARMING:\r
-               atomic { g_flags.bits.state = STATE_TEMP_READY; }\r
-               post getTempSample();\r
-               return;\r
-\r
-           default:\r
-               //ERROR!!!\r
-               signal Light.readDone( FAIL, 0 );\r
-               signal Temp.readDone( FAIL, 0 );\r
-       }\r
-       // Worst case -- return to the IDLE state so next task can progress !!\r
-       atomic { g_flags.bits.state = STATE_IDLE; }\r
+    event void WarmUpTimer.fired()\r
+    {\r
+       switch (g_flags.bits.state)\r
+       {\r
+           case STATE_LIGHT_WARMING:\r
+               atomic { g_flags.bits.state = STATE_LIGHT_READY; }\r
+               post getLightSample();\r
+               return;\r
+\r
+           case STATE_TEMP_WARMING:\r
+               atomic { g_flags.bits.state = STATE_TEMP_READY; }\r
+               post getTempSample();\r
+               return;\r
+\r
+           case STATE_MIC_WARMING:\r
+               atomic { g_flags.bits.state = STATE_MIC_READY; }\r
+               post getMicSample();\r
+               return;\r
+\r
+           default:\r
+               //ERROR!!!\r
+               signal Light.readDone(FAIL,0);\r
+               signal Temp.readDone(FAIL,0);\r
+               signal Microphone.readDone(FAIL,0);\r
+      }\r
+       // Worst case -- return to the IDLE state so next task can progress !!\r
+       atomic { g_flags.bits.state = STATE_IDLE; }\r
     }\r
 \r
-    /** \r
+    /**\r
      * Data has been acquired.\r
-     * @param data Acquired value\r
-     *   Values are "left-justified" within each 16-bit integer, i.e., if\r
-     *   the data is acquired with n bits of precision, each value is \r
-     *   shifted left by 16-n bits.\r
+     * @param result Acquired success flag\r
+     * @param val Acquired value\r
      */\r
-    event void SensorADC.readDone( error_t result, uint16_t data ) {\r
-       switch (g_flags.bits.state) {\r
+    event void LightRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+           switch (g_flags.bits.state)\r
+           {\r
            case STATE_LIGHT_SAMPLING:\r
-               signal Light.readDone(result, data);\r
-               break;\r
+                   signal Light.readDone(result,val);\r
+                   break;\r
+           default: //ERROR!!!\r
+               signal Light.readDone(FAIL,0);\r
+      }\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
+    }\r
 \r
+    event void TempRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+           switch (g_flags.bits.state)\r
+           {\r
            case STATE_TEMP_SAMPLING:\r
-               signal Temp.readDone(result, data);\r
-               break;\r
-\r
-           default:\r
-               //ERROR!!!\r
-               signal Light.readDone( FAIL, 0 );\r
-               signal Temp.readDone( FAIL, 0 );\r
-       }\r
-       // ADC.dataReady must return to IDLE state so next task can progress !!\r
-       atomic { g_flags.bits.state = STATE_IDLE; }\r
+                   signal Temp.readDone(result,val);\r
+                   break;\r
+           default: //ERROR!!!\r
+               signal Temp.readDone(FAIL,0);\r
+      }\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
     }\r
 \r
+    event void MicRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+           switch (g_flags.bits.state)\r
+           {\r
+           case STATE_MIC_SAMPLING:\r
+                   signal Microphone.readDone(result,val);\r
+                   break;\r
+           default: //ERROR!!!\r
+               signal Microphone.readDone(FAIL,0);\r
+      }\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
+        }\r
+\r
+    event void VrefRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+                 signal Vref.readDone(result,val);\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
+        }\r
+\r
+    event void AccelXRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+                 signal AccelX.readDone(result,val);\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
+         }\r
+\r
+    event void AccelYRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+                 signal AccelY.readDone(result,val);\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
+         }\r
+\r
+    event void MagXRead.readDone( error_t result, uint16_t val )\r
+    {\r
+      //val = (val >>6);\r
+      val &= 0x3ff;\r
+                 signal MagX.readDone(result,val);\r
+           // state must return to IDLE state so next task can progress !!\r
+           atomic { g_flags.bits.state = STATE_IDLE; }\r
+        }\r
+\r
+   event void MagYRead.readDone( error_t result, uint16_t val )\r
+   {\r
+     //val = (val >>6);\r
+     val &= 0x3ff;\r
+                signal MagY.readDone(result,val);\r
+          // state must return to IDLE state so next task can progress !!\r
+          atomic { g_flags.bits.state = STATE_IDLE; }\r
+        }\r
+\r
+   event error_t Mag.gainAdjustXDone(bool result)\r
+   {\r
+     return result;\r
+   }\r
+   event error_t Mag.gainAdjustYDone(bool result)\r
+   {\r
+     return result;\r
+   }\r
 }\r
 \r
 \r
 \r
+\r
+\r
index a121e89e93aad727e277bed2189b3bc496fbaae8..52ec479c56154929cb7bc4c9e82a5f833dc7268d 100644 (file)
@@ -1,12 +1,45 @@
+/**
+ *  Copyright (c) 2005-2006 Crossbow Technology, Inc.
+ *  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 (updated) modification history and the author appear in
+ *  all copies of this source code.
+ *
+ *  Permission is also granted to distribute this software under the
+ *  standard BSD license as contained in the TinyOS distribution.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+ *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS 
+ *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, 
+ *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+ *  THE POSSIBILITY OF SUCH DAMAGE.
+ */ 
+ /*
+ *  @author Hu Siquan <husq@xbow.com>
+ *
+ *  $Id$
+ */
+#include "mts300.h"
+
 configuration SounderC
 {
-  provides interface Mts300Sounder;
+  provides interface Init;
+  provides interface StdControl;
 }
 implementation
 {
-  components SounderP, new TimerMilliC(), MicaBusC;
+  components SounderP,         MicaBusC;
 
-  Mts300Sounder = SounderP;
-  SounderP.Timer -> TimerMilliC;
+       Init       = SounderP;
+  StdControl = SounderP;
   SounderP.SounderPin -> MicaBusC.PW2;
 }
index e5f2c06471b79aa097d2d999ee7c503512506c21..7b71bc052b01ba49af3de05fb565ff3c7ff973e7 100644 (file)
@@ -1,31 +1,65 @@
-module SounderP
+/**
+ *  Copyright (c) 2005-2006 Crossbow Technology, Inc.
+ *  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 (updated) modification history and the author appear in
+ *  all copies of this source code.
+ *
+ *  Permission is also granted to distribute this software under the
+ *  standard BSD license as contained in the TinyOS distribution.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+ *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ *  ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS 
+ *  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, LOSS OF USE, DATA, 
+ *  OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
+ *  THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *  @author Hu Siquan <husq@xbow.com> 
+ *
+ *  $Id$
+ */
+
+#include "mts300.h"
+
+module SounderP 
 {
-  provides interface Mts300Sounder;
-  uses {
-    interface Timer<TMilli>;
-    interface GeneralIO as SounderPin;
-  }
+  provides interface Init;
+  provides interface StdControl;
+  uses interface GeneralIO as SounderPin;  
 }
-implementation
-{
-  command void Mts300Sounder.beep(uint16_t length) {
-    if (call Timer.isRunning())
-      {
-       uint32_t remaining = call Timer.getdt(),
-         elapsed = call Timer.getNow() - call Timer.gett0();
-
-       /* If more time left than we are requesting, just exit */
-       if (remaining > elapsed && (remaining - elapsed) > length)
-         return;
 
-       /* Override timer with new duration */
-      }
-    call Timer.startOneShot(length);
+implementation 
+{
+  command error_t Init.init() 
+  {
+#if SOUNDER
     call SounderPin.makeOutput();
+    call SounderPin.clr();
+#endif
+    return SUCCESS;
+  }
+
+  command error_t StdControl.start() 
+  {
+#if SOUNDER
     call SounderPin.set();
+#endif
+    return SUCCESS;
   }
 
-  event void Timer.fired() {
+  command error_t StdControl.stop() 
+  {
+#if SOUNDER
     call SounderPin.clr();
+#endif
+    return SUCCESS;
   }
 }
index 8c2f7af9bc71c69210e6d35fe5d768dfff106b46..9424ae287a7eeb54da2e049f4bdea4fb78ce6889 100644 (file)
@@ -1,9 +1,55 @@
-#ifndef MTS300_H
-#define MTS300_H
+/* $Id$ */
+/*
+ * Copyright (c) 2005-2006 Crossbow Technology, Inc.  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 CROSSBOW TECHNOLOGY OR ANY OF ITS LICENSORS 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 CROSSBOW OR ITS LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 
+ * DAMAGE. 
+ *
+ * CROSSBOW TECHNOLOGY AND ITS LICENSORS SPECIFICALLY DISCLAIM ALL 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 NEITHER CROSSBOW NOR ANY LICENSOR HAS ANY 
+ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 
+ * MODIFICATIONS.
+ */
+/**
+ * 
+ * @author Hu Siquan <husq@xbow.com>
+ * Revision: $Revision$
+ *
+ */
 
-#define UQ_ACCEL_RESOURCE "mts300.accel"
-#define UQ_PHOTO_RESOURCE "mts300.photo"
-#define UQ_TEMP_RESOURCE "mts300.temp"
-#define UQ_PHOTOTEMP_RESOURCE "mts300.phototemp"
+#ifndef _MTS300_H
+#define _MTS300_H
 
+// sounder enable (1) /disable (0)
+#ifndef SOUNDER
+#define SOUNDER 1
 #endif
+
+#define MTS3X0_PHOTO_TEMP "mts300.photo.temp"
+#define MTS3X0_MAG_RESOURCE "mts300.mag"
+
+enum
+{
+  TOS_MIC_POT_ADDR = 0x5A,
+  TOS_MAG_POT_ADDR = 0x58,
+};
+
+// debug leds
+//#define _DEBUG_LEDS
+#ifdef _DEBUG_LEDS
+#define DEBUG_LEDS(X)         X.DebugLeds -> LedsC
+#else
+#define DEBUG_LEDS(X)         X.DebugLeds -> NoLedsC
+#endif
+#endif /* _MTS300_H */
+