+<?xml version="1.0" encoding="utf-8" ?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name=robots content="index,follow">
</head>
<body>
+<div id=title>
+<p></p>
<p>
</p>
</p>
-<h1 class=title align=center><br><br>Deluge T2 - Programming Manual</h1>
+<h1 class=title>Deluge T2 - Programming Manual</h1>
<p></p>
<div align=center>
Chieh-Jan Mike Liang<br>
-Razvan Musaloiu-E.<p>May 18, 2007</p>
+Razvan Musaloiu-E.<p>January 14, 2008</p>
</div>
<p></p>
<p>
<a href="http://www.cs.berkeley.edu/~jwhui/research/deluge/">http://www.cs.berkeley.edu/~jwhui/research/deluge/</a>.</p>
<p>
Deluge T2 is an effort to port Deluge 2.0 from TinyOS 1 to TinyOS 2.
-Since the code from Deluge 2.0 is reused as much as possible, the
-behavior and the usage of Deluge T2 should be similar to Deluge 2.0.
-Having said that, it would be helpful to read the Deluge 2.0 manual and
-related documentations.</p>
+Although the code from Deluge 2.0 is reused as much as possible, the
+behavior and the usage of Deluge T2 are not entirely identical to Deluge
+2.0. Having said that, it would still be helpful to read the Deluge 2.0
+manual and related documentations.</p>
<p>
Deluge T2 is still in experimental phase. One current limitation is
-platform support. Deluge T2 has been developed and tested on tmote sky
-(<i>telosb</i>) only. In addition, Deluge T2 comes with 2 flash volumes by
+platform support. Deluge T2 has been developed on Tmote Sky (<i>telosb</i>)
+and MicaZ only. In addition, Deluge T2 comes with 2 flash volumes by
default. However, more volumes can be added, if necessary. There are
-also minor details that will be improved in future releases.</p>
+also some minor details that will be improved in future releases.</p>
<p>
</p>
<a name="node_sec_2"></a>
-<h1>2 Quick Start</h1>
+<h1>2 Tools Installation</h1>
+<p>Deluge T2 requires a few Python scripts that not yet included in the
+official <code class=verbatim>tinyos-tools</code> RPM package. On the CVS, the scripts are
+located in <code class=verbatim>tinyos-2.x/tools/tinyos/misc</code>. The steps to install
+them are the following:</p>
+<p>
+</p>
+<pre class=verbatim> % cd $TOSROOT/tools
+ % ./Bootstrap
+ ...
+ % ./configure
+ ...
+ % cd tinyos/misc
+ % make ; make install
+ ...
+</pre><p></p>
+<p>
+By default, the files will be installed in <code class=verbatim>/usr/local/bin</code>. If
+desired, the <code class=verbatim>--prefix</code> parameter from <code class=verbatim>configure</code> can be
+used to indicate a different path. </p>
+<p>
+</p>
+<a name="node_sec_3"></a>
+<h1>3 Quick Start</h1>
<p></p>
<p>
This section introduces the basics of reprogramming with an example. In
TinyOS 2 CVS tree and Python 2.4 with pySerial support are recommended
for running Deluge T2.</p>
<p>
-To start the example, we run a <code class=verbatim>burn</code> script provided in
-<code class=verbatim>tinyos-2.x/apps/tests/deluge/Blink</code>. For example,
+To start the example, we first compile tosboot provided in <code class=verbatim>tinyos-2.x/tos/lib/tosboot</code>.
+For example,
+</p>
+<pre class=verbatim> % make telosb
+</pre><p>
+Then, we run the <code class=verbatim>burn</code> script provided in <code class=verbatim>tinyos-2.x/apps/tests/deluge/Blink</code>.
+For example,
</p>
-<pre class=verbatim> % ./burn /dev/ttyUSB0
+<pre class=verbatim> % ./burn /dev/ttyUSB0 telosb
</pre><p>
This <code class=verbatim>burn</code> script programs the directly-connected mote with one
-version of blink. Then, it injects and reprograms the mote with another
-version of blink. At this point, you can try to retrieve program image
+version of Blink. Then, it injects and reprograms the mote with another
+version of Blink. At this point, you can try to retrieve program image
versioning information. The script to interface with the mote is
-provided in <code class=verbatim>tinyos-2.x/tools/</code>. For example,
+provided in <code class=verbatim>tinyos-2.x/tools/tinyos/misc</code>. For example,
</p>
-<pre class=verbatim> % tos-deluge.py /dev/ttyUSB0 -p 0
+<pre class=verbatim> % tos-deluge /dev/ttyUSB0 telosb -p 0
</pre><p>
-You should see something similar to the output below.</p>
-<p>
+You should see something similar to the output below.
</p>
<pre class=verbatim> Pinging node ...
- Connected to Deluge node.
--------------------------------------------------
- Stored image 0
- Prog Name: BlinkAppC
- Compiled On: Thu May 17 00:36:33 2007
- Platform: telosb
- User ID: mike
- Host Name: sprite
- User Hash: 0xC50D8DA4L
- Num Pages: 24/24
+ Currently Executing:
+ Prog Name: BlinkAppC
+ UID: 0xA274CBBE
+ Compiled On: Mon Jan 14 13:09:38 2008
+ Node ID: 1
- Size: 26512
- UID: 2302157803
- Version: 6
+ Stored image 0
+ Prog Name: BlinkAppC
+ UID: 0xD7EEFACE
+ Compiled On: Mon Jan 14 12:40:06 2008
+ Platform: telosb
+ User ID: tinyos2
+ Host Name: bluephase
+ User Hash: 0x587C9C16
+ Size: 33504
+ Num Pages: 30
--------------------------------------------------
</pre><p></p>
<p>
-The usage of <code class=verbatim>delugy.py</code> is available by running the script without
-any arguments, and it will be discussed in section <a href="#node_sec_4">4</a>.</p>
+The usage of <code class=verbatim>tos-deluge</code> is available by running the script without
+any arguments, and it will be discussed in section <a href="#node_sec_5">5</a>.</p>
<p>
</p>
-<a name="node_sec_3"></a>
-<h1>3 Reprogramming a Network</h1>
+<a name="node_sec_4"></a>
+<h1>4 Reprogramming a Network</h1>
<p></p>
<p>
This section illustrates the procedure to reprogram a network.
versioning information is retrieved.</p>
<p>
</p>
-<a name="node_sec_3.1"></a>
-<h2>3.1 Setting Up the Motes</h2>
-<p>We first install both TOSBoot and a program that runs Deluge T2. For
+<a name="node_sec_4.1"></a>
+<h2>4.1 Setting Up the Motes</h2>
+<p>We first install both tosboot and a program that runs Deluge T2. For
simplicity, we use the golden image as the program. The golden image is
provided in <code class=verbatim>tinyos-2.x/apps/tests/deluge/GoldenImage</code>, and it does
nothing except initializing Deluge T2. This step can be done by
compiling and programming the mote normally. For example,
</p>
-<pre class=verbatim> % make telosb install,0 bsl,/dev/ttyUSB0
+<pre class=verbatim> % CFLAGS=-DDELUGE_BASESTATION make telosb install,0 bsl,/dev/ttyUSB0
</pre><p>
+<code class=verbatim>CFLAGS=-DDELUGE_BASESTATION</code> indicates that the current mote will
+act as a base station, which requires an additional component to accept
+user commands from the serial port. Normally, only one mote in the
+network needs to be the base station, and other motes are reprogrammed
+over-the-air. If error occurs when running the command above, you might
+need to compile tosboot as shown in section <a href="#node_sec_3">3</a>.
Deluge T2 makes sure the mote ID remain persistent over image
reprogramming. You can test the installation by interacting with the
-mote through <code class=verbatim>deluge.py</code>.</p>
+mote through <code class=verbatim>tos-deluge</code>.</p>
<p>
</p>
-<a name="node_sec_3.2"></a>
-<h2>3.2 Preparing Your Application</h2>
+<a name="node_sec_4.2"></a>
+<h2>4.2 Preparing Your Application</h2>
<p>In most cases, the only two files you need to modify are the top-level
-wiring file and the Make file. You need to make sure <code class=verbatim>DelugeC</code>
-component is included. In addition, the Make file should have the
-following lines:
+wiring file and the Makefile. You need to make sure <code class=verbatim>DelugeC</code>
+component is included. In addition, the Makefile should have the
+following line:
</p>
<pre class=verbatim> TINYOS_NP=BNP
- CFLAGS += -DTOSH_DATA_LENGTH=100
</pre><p>
Finally, compile your application without installing it on the mote. For
example,
</pre><p></p>
<p>
</p>
-<a name="node_sec_3.3"></a>
-<h2>3.3 Injecting Your Application</h2>
+<a name="node_sec_4.3"></a>
+<h2>4.3 Injecting Your Application</h2>
<p>Before a program image is disseminated in the network, we need to first
inject it to the base station. For example,
</p>
-<pre class=verbatim> % tos-deluge.py /dev/ttyUSB0 -i 1 apps/Blink/build/telosb/tos_image.xml
+<pre class=verbatim> % tos-deluge /dev/ttyUSB0 telosb -i 1 apps/Blink/build/telosb/tos_image.xml
</pre><p>
You should see something similar to the output below.</p>
<p>
</p>
<pre class=verbatim> Pinging node ...
Connected to Deluge nodes.
+ No valid image was detected.
--------------------------------------------------
- Stored image 1
- No proper Deluge image found!
- --------------------------------------------------
+ Create image: /home/tinyos2/local/bin/tos-build-deluge-image -i 1 build/telosb/tos_image.xml
Ihex read complete:
- Total bytes = 25526
- Sections = 2
+ 35916 bytes starting at 0x4A00
+ 32 bytes starting at 0xFFE0
+ 35948 bytes in 2 sections
+ CRCs:
+ 0xCC0E 0xE57B 0xC224 0xE4FA 0x63EB 0xEBA5 0xE50B
+ 0x8073 0x345E 0x3BBF 0xF415 0xA7DB 0xA67C 0x6953
+ 0x6638 0x3D76 0x7218 0x0E8F 0x9C93 0xD679 0x7A50
+ 0xBFCD 0x8B57 0x7A47 0x323E 0x29FF 0x5EFF 0xB0AE
+ 0x1392 0x4A82 0xACFB 0x69D7 0x8C07
+ --------------------------------------------------
+ 36816 bytes in 28.23 seconds (1303.9932 bytes/s)
--------------------------------------------------
Replace image with:
- Prog Name: BlinkAppC
- Compiled On: Mon May 07 00:01:43 2007
- Platform: telosb
- User ID: mike
- Host Name: sprite
- User Hash: 0xC50D8DA4L
- Num Pages: 24/24
-
- Size: 26512
- UID: 507153792
- Version: 0
+ Prog Name: BlinkAppC
+ UID: 0x76D2FB1B
+ Compiled On: Sun Jan 13 21:47:54 2008
+ Platform: telosb
+ User ID: tinyos2
+ Host Name: bluephase
+ User Hash: 0x587C9C16
+ Size: 36816
+ Num Pages: 33
--------------------------------------------------
</pre><p></p>
<p>
</p>
-<a name="node_sec_3.4"></a>
-<h2>3.4 Reprogramming with New Image</h2>
+<a name="node_sec_4.4"></a>
+<h2>4.4 Reprogramming with New Image</h2>
<p>After you decide which program image you want to reprogram, you can
first test on the base station by issuing the reboot command. For
example,
</p>
-<pre class=verbatim> % tos-deluge.py /dev/ttyUSB0 -r 1
+<pre class=verbatim> % tos-deluge /dev/ttyUSB0 telosb -r 1
</pre><p>
After a few moments, the mote will begin quickly flashing the LEDs to
signify the reprogramming process.</p>
Now, you can have the base station disseminate a program image to the rest of
the network. For example,
</p>
-<pre class=verbatim> % tos-deluge.py /dev/ttyUSB0 -d 1
+<pre class=verbatim> % tos-deluge /dev/ttyUSB0 telosb -d 1
</pre><p>
This command instructs the base station to notify the whole network of
-the availablility of a new program image. This notification is currently
+the availability of a new program image. This notification is currently
done via TinyOS dissemination service, and it triggers all motes in the
-network to get the new program image. Upon receiving the complete image
-over-the-air, each node automatically reboots and reprograms itself.</p>
+network to get the new program image. After all motes receive the image
+over-the-air, you can instruct the base station to disseminate the
+command to reprogram in the network. For example,
+</p>
+<pre class=verbatim> % tos-deluge /dev/ttyUSB0 telosb -dr 1
+</pre><p></p>
<p>
</p>
-<a name="node_sec_4"></a>
-<h1>4 Deluge T2 Python Toolchain</h1>
+<a name="node_sec_5"></a>
+<h1>5 Deluge T2 Python Toolchain</h1>
<p></p>
<p>
Different from Deluge 2.0, Deluge T2 toolchain is written in Python.
-However, as demonstrated in the previous section, the usage is very
-similar.</p>
+However, as demonstrated in the previous section, the usage is similar.</p>
<p>
</p>
-<a name="node_sec_4.1"></a>
-<h2>4.1 -p -ping</h2>
+<a name="node_sec_5.1"></a>
+<h2>5.1 -p -ping</h2>
<p>This command is useful for checking the status of program images on a
mote. It provides information such as program name, compile time, size
of the image, and so on.</p>
<p>
</p>
-<a name="node_sec_4.2"></a>
-<h2>4.2 -i -inject</h2>
-<p>This command creates a program image from the supplied
-<code class=verbatim>tos_image.xml</code> file, and it injects the image into specified
-volume on the mote. All versioning information is kept on the mote, so
-no state is stored on the PC.</p>
+<a name="node_sec_5.2"></a>
+<h2>5.2 -i -inject</h2>
+<p>This command creates a program image from the supplied
+<code class=verbatim>tos_image.xml</code> file, and it injects the image into specified
+volume on the mote. </p>
<p>
</p>
-<a name="node_sec_4.3"></a>
-<h2>4.3 -r -reboot</h2>
-<p>This command sets up the mote to reprogram itself after reboot, and then
-it reboots the mote. This command is applicable only to the directly
-connected mote.</p>
+<a name="node_sec_5.3"></a>
+<h2>5.3 -r -reprogram</h2>
+<p>This command sets up the directly-connected mote to reprogram itself
+after reboot, and then it reboots the mote.</p>
<p>
</p>
-<a name="node_sec_4.4"></a>
-<h2>4.4 -d -dissemination</h2>
-<p>This command instructs the directly connected mote to disseminate an
-image to the network. This image is specified by the volume ID. Upon
-successfully receiving an image, motes in the network automatically
-reprogram themselves.</p>
+<a name="node_sec_5.4"></a>
+<h2>5.4 -d -disseminate</h2>
+<p>This command instructs the base station mote to disseminate an image to
+the network. This image is specified by the volume ID.</p>
<p>
</p>
-<a name="node_sec_4.5"></a>
-<h2>4.5 -e -erase</h2>
-<p>This command erases a flash volume on the directly connected mote.</p>
+<a name="node_sec_5.5"></a>
+<h2>5.5 -dr -disseminate-and-reprogram</h2>
+<p>This command asks the motes in the network not only to disseminate an
+image but also to start running it. This is accomplish using a reboot.</p>
<p>
</p>
-<a name="node_sec_4.6"></a>
-<h2>4.6 -s -reset</h2>
-<p>This command resets versioning information of a specific image on the
-directly connected mote.</p>
+<a name="node_sec_5.6"></a>
+<h2>5.6 -e -erase</h2>
+<p>This command erases a flash volume on the base station mote.</p>
<p>
</p>
-<div align=right class=colophon>
-<i>Last modified: Friday, May 18th, 2007<br>
-HTML conversion by <a href="http://www.ccs.neu.edu/~dorai/tex2page/tex2page-doc.html">TeX2page 2004-09-11</a></i>
+<a name="node_sec_5.7"></a>
+<h2>5.7 -s -stop</h2>
+<p>The effect of <code class=verbatim>-d</code> and <code class=verbatim>-dr</code> is continuous which means a new
+mote will become ``infected'' if he is nearby. This command stops the
+``infection''.</p>
+<p>
+</p>
+<a name="node_sec_5.8"></a>
+<h2>5.8 -ls -local-stop</h2>
+<p>When <code class=verbatim>-d</code> or <code class=verbatim>-dr</code> are in effect, the volume used by them is
+locked. This command can be used to unlock the volume in order to
+erase or inject a new image.</p>
+<p>
+</p>
+<p></p>
+<div align=right class=colophon>Last modified: Monday, January 14th, 2008 2:11:03pm<br><div align=right class=advertisement>HTML conversion by <a href="http://www.ccs.neu.edu/~dorai/tex2page/tex2page-doc.html">TeX2page 20050501</a></div></div>
</div>
</body>
</html>