* @date March 19, 2005
*/
-
-configuration NoLedsC {
+module NoLedsC {
provides interface Init;
provides interface Leds;
}
implementation {
- components NoLedsP;
- Init = NoLedsP;
- Leds = NoLedsP;
-}
+ command error_t Init.init() {return SUCCESS;}
+
+ async command void Leds.led0On() {}
+ async command void Leds.led0Off() {}
+ async command void Leds.led0Toggle() {}
+
+ async command void Leds.led1On() {}
+ async command void Leds.led1Off() {}
+ async command void Leds.led1Toggle() {}
+
+ async command void Leds.led2On() {}
+ async command void Leds.led2Off() {}
+ async command void Leds.led2Toggle() {}
+
+ async command uint8_t Leds.get() {return 0;}
+ async command void Leds.set(uint8_t val) {}
+}
+++ /dev/null
-// $Id$
-
-/* tab:4
- * "Copyright (c) 2000-2005 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."
- */
-
-/**
- * The implementation of the NoLedsC component: every call is a null
- * operation. See NoLedsC.
- *
- * @author Philip Levis
- * @date March 19, 2005
- */
-
-module NoLedsP {
- provides interface Init;
- provides interface Leds;
-}
-implementation {
-
- command error_t Init.init() {return SUCCESS;}
-
- async command void Leds.led0On() {}
- async command void Leds.led0Off() {}
- async command void Leds.led0Toggle() {}
-
- async command void Leds.led1On() {}
- async command void Leds.led1Off() {}
- async command void Leds.led1Toggle() {}
-
- async command void Leds.led2On() {}
- async command void Leds.led2Off() {}
- async command void Leds.led2Toggle() {}
-
- async command uint8_t Leds.get() {return 0;}
- async command void Leds.set(uint8_t val) {}
-}
+// $Id$
+
/* tab:4
* "Copyright (c) 2000-2003 The Regents of the University of California.
* All rights reserved.
* 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.
+ */
+
+/*
+ *
+ * Authors: Alec Woo, David Gay, Philip Levis
+ * Date last modified: 8/8/05
*
- * Date last modified: 6/25/02
*/
/**
* This is a 16 bit Linear Feedback Shift Register pseudo random number
- * generator. It is faster than the MLCG generator but does not generate
- * nearly as good random numbers.
+ generator. It is faster than the MLCG generator, but the numbers generated
+ * have less randomness.
*
- * @author Philip Levis
- * @author David Gay
* @author Alec Woo
- * @date Jan 20 2005
+ * @author David Gay
+ * @author Philip Levis
+ * @date August 8 2005
*/
-configuration RandomLfsrC
+module RandomLfsrC
{
provides interface Init;
provides interface Random;
}
implementation
{
- components RandomLfsrP;
+ uint16_t shiftReg;
+ uint16_t initSeed;
+ uint16_t mask;
+
+ /* Initialize the seed from the ID of the node */
+ command error_t Init.init() {
+ atomic {
+ shiftReg = 119 * 119 * (TOS_NODE_ID + 1);
+ initSeed = shiftReg;
+ mask = 137 * 29 * (TOS_NODE_ID + 1);
+ }
+ return SUCCESS;
+ }
+
+ /* Return the next 16 bit random number */
+ async command uint16_t Random.rand16() {
+ bool endbit;
+ uint16_t tmpShiftReg;
+ atomic {
+ tmpShiftReg = shiftReg;
+ endbit = ((tmpShiftReg & 0x8000) != 0);
+ tmpShiftReg <<= 1;
+ if (endbit)
+ tmpShiftReg ^= 0x100b;
+ tmpShiftReg++;
+ shiftReg = tmpShiftReg;
+ tmpShiftReg = tmpShiftReg ^ mask;
+ }
+ return tmpShiftReg;
+ }
- Init = RandomLfsrP;
- Random = RandomLfsrP;
+ async command uint32_t Random.rand32() {
+ return (uint32_t)call Random.rand16() << 16 | call Random.rand16();
+ }
}
+++ /dev/null
-// $Id$
-
-/* 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."
- *
- * Copyright (c) 2002-2005 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.
- */
-
-/*
- *
- * Authors: Alec Woo, David Gay, Philip Levis
- * Date last modified: 8/8/05
- *
- */
-
-/**
- * This is a 16 bit Linear Feedback Shift Register pseudo random number
- generator. It is faster than the MLCG generator, but the numbers generated
- * have less randomness.
- *
- * @author Alec Woo
- * @author David Gay
- * @author Philip Levis
- * @date August 8 2005
- */
-
-module RandomLfsrP
-{
- provides interface Init;
- provides interface Random;
-}
-implementation
-{
- uint16_t shiftReg;
- uint16_t initSeed;
- uint16_t mask;
-
- /* Initialize the seed from the ID of the node */
- command error_t Init.init() {
- atomic {
- shiftReg = 119 * 119 * (TOS_NODE_ID + 1);
- initSeed = shiftReg;
- mask = 137 * 29 * (TOS_NODE_ID + 1);
- }
- return SUCCESS;
- }
-
- /* Return the next 16 bit random number */
- async command uint16_t Random.rand16() {
- bool endbit;
- uint16_t tmpShiftReg;
- atomic {
- tmpShiftReg = shiftReg;
- endbit = ((tmpShiftReg & 0x8000) != 0);
- tmpShiftReg <<= 1;
- if (endbit)
- tmpShiftReg ^= 0x100b;
- tmpShiftReg++;
- shiftReg = tmpShiftReg;
- tmpShiftReg = tmpShiftReg ^ mask;
- }
- return tmpShiftReg;
- }
-
- async command uint32_t Random.rand32() {
- return (uint32_t)call Random.rand16() << 16 | call Random.rand16();
- }
-}
* ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
*/
-
-/**
- * This is the configuration for RandomMlcgC, a
- * multiplicative linear congruential generator.
+/** This code is a fast implementation of the Park-Miller Minimal Standard
+ * Generator for pseudo-random numbers. It uses the 32 bit multiplicative
+ * linear congruential generator,
+ *
+ * S' = (A x S) mod (2^31 - 1)
+ *
+ * for A = 16807.
+ *
*
- * @author Barbara Hohlt
- * @author Philip Levis
- * @date March 1 2005
+ * @author Barbara Hohlt
+ * @date March 1 2005
*/
-configuration RandomMlcgC {
+module RandomMlcgC {
provides interface Init;
provides interface ParameterInit<uint16_t> as SeedInit;
- provides interface Random as Random;
+ provides interface Random;
}
+implementation
+{
+ uint32_t seed ;
-implementation {
- components RandomMlcgP;
+ /* Initialize the seed from the ID of the node */
+ command error_t Init.init() {
+ atomic seed = (uint32_t)(TOS_NODE_ID + 1);
+
+ return SUCCESS;
+ }
- Init = RandomMlcgP;
- SeedInit = RandomMlcgP;
- Random = RandomMlcgP;
+ /* Initialize with 16-bit seed */
+ command error_t SeedInit.init(uint16_t s) {
+ atomic seed = (uint32_t)(s + 1);
+
+ return SUCCESS;
+ }
-}
+ /* Return the next 32 bit random number */
+ async command uint32_t Random.rand32() {
+ uint32_t mlcg,p,q;
+ uint64_t tmpseed;
+ atomic
+ {
+ tmpseed = (uint64_t)33614U * (uint64_t)seed;
+ q = tmpseed; /* low */
+ q = q >> 1;
+ p = tmpseed >> 32 ; /* hi */
+ mlcg = p + q;
+ if (mlcg & 0x80000000) {
+ mlcg = mlcg & 0x7FFFFFFF;
+ mlcg++;
+ }
+ seed = mlcg;
+ }
+ return mlcg;
+ }
+
+ /* Return low 16 bits of next 32 bit random number */
+ async command uint16_t Random.rand16() {
+ return (uint16_t)call Random.rand32();
+ }
+
+#if 0
+ /* Return high 16 bits of 32 bit number */
+ inline uint16_t getHigh16(uint32_t num) {
+ return num >> 16;
+ }
+#endif
+}
+++ /dev/null
-/*
- * "Copyright (c) 2002-2005 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."
- */
-/** This code is a fast implementation of the Park-Miller Minimal Standard
- * Generator for pseudo-random numbers. It uses the 32 bit multiplicative
- * linear congruential generator,
- *
- * S' = (A x S) mod (2^31 - 1)
- *
- * for A = 16807.
- *
- *
- * @author Barbara Hohlt
- * @date March 1 2005
- */
-
-module RandomMlcgP {
- provides interface Init;
- provides interface ParameterInit<uint16_t> as SeedInit;
- provides interface Random as Random;
-}
-implementation
-{
- uint32_t seed ;
-
- /* Initialize the seed from the ID of the node */
- command error_t Init.init() {
- atomic seed = (uint32_t)(TOS_NODE_ID + 1);
-
- return SUCCESS;
- }
-
- /* Initialize with 16-bit seed */
- command error_t SeedInit.init(uint16_t s) {
- atomic seed = (uint32_t)(s + 1);
-
- return SUCCESS;
- }
-
- /* Return the next 32 bit random number */
- async command uint32_t Random.rand32() {
- uint32_t mlcg,p,q;
- uint64_t tmpseed;
- atomic
- {
- tmpseed = (uint64_t)33614U * (uint64_t)seed;
- q = tmpseed; /* low */
- q = q >> 1;
- p = tmpseed >> 32 ; /* hi */
- mlcg = p + q;
- if (mlcg & 0x80000000) {
- mlcg = mlcg & 0x7FFFFFFF;
- mlcg++;
- }
- seed = mlcg;
- }
- return mlcg;
- }
-
- /* Return low 16 bits of next 32 bit random number */
- async command uint16_t Random.rand16() {
- return (uint16_t)call Random.rand32();
- }
-
-#if 0
- /* Return high 16 bits of 32 bit number */
- inline uint16_t getHigh16(uint32_t num) {
- return num >> 16;
- }
-#endif
-}