From da393f0d6e7bca649d8d0ce0894cb1ad10ba4212 Mon Sep 17 00:00:00 2001 From: razvanm Date: Wed, 11 Jul 2007 18:53:38 +0000 Subject: [PATCH] This commit from Chieh-Jan (Mike) Liang contains the following: - tos-deluge now syncs the flash volume after writing the image and updating the image version number. - Update section 5 for the new reboot/reprogram command. --- doc/html/deluge-t2-manual.html | 46 ++++++++++-------- doc/pdf/deluge-t2-manual.pdf | Bin 46042 -> 46183 bytes tools/tinyos/misc/tos-deluge | 36 +++++++++++--- tos/lib/net/Deluge/DelugeP.nc | 31 +++++------- .../FlashVolumeManager/FlashVolumeManager.h | 1 + .../FlashVolumeManager/FlashVolumeManagerP.nc | 6 ++- tos/lib/net/Deluge/ObjectTransferP.nc | 8 +-- 7 files changed, 76 insertions(+), 52 deletions(-) diff --git a/doc/html/deluge-t2-manual.html b/doc/html/deluge-t2-manual.html index 3dd87e3f..6bc5bc75 100644 --- a/doc/html/deluge-t2-manual.html +++ b/doc/html/deluge-t2-manual.html @@ -25,7 +25,7 @@ Deluge T2 - Programming Manual

Chieh-Jan Mike Liang
-Razvan Musaloiu-E.

July 9, 2007

+Razvan Musaloiu-E.

July 11, 2007

@@ -42,10 +42,10 @@ Hui, and Deluge 2.0 is the most recent version. Documentations on Deluge http://www.cs.berkeley.edu/~jwhui/research/deluge/.

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.

+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.

Deluge T2 is still in experimental phase. One current limitation is platform support. Deluge T2 has been developed on Tmote Sky (telosb) @@ -230,8 +230,8 @@ This command instructs the base station to notify the whole network of 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. After all motes receive the image -over-the-air, you can instruct the base station to disseminate a command -to reprogram the network. For example, +over-the-air, you can instruct the base station to disseminate the +command to reprogram in the network. For example,

   % tos-deluge /dev/ttyUSB0 telosb -r 1
 

@@ -242,8 +242,7 @@ to reprogram the network. For example,

Different from Deluge 2.0, Deluge T2 toolchain is written in Python. -However, as demonstrated in the previous section, the usage is very -similar.

+However, as demonstrated in the previous section, the usage is similar.

@@ -262,33 +261,38 @@ no state is stored on the PC.

-

5.3  -r -reboot

+

5.3  -b -reprogram_bs

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.

+it reboots the mote. This command is applicable only to the base station +mote.

5.4  -d -dissemination

-

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.

+

This command instructs the base station mote to disseminate an image to +the network. This image is specified by the volume ID.

-

5.5  -e -erase

-

This command erases a flash volume on the directly connected mote.

+

5.5  -r -reprogram

+

This command instructs the base station mote to disseminate the +command to reprogram in the network. This command does not reprogram the +base station mote. The image is specified by the volume ID.

-

5.6  -s -reset

+

5.6  -e -erase

+

This command erases a flash volume on the base station mote.

+

+

+ +

5.7  -s -reset

This command resets versioning information of a specific image on the -directly connected mote.

+base station mote.

-
Last modified: Monday, July 9th, 2007 8:43:40pm
+
Last modified: Wednesday, July 11th, 2007 2:26:06pm
diff --git a/doc/pdf/deluge-t2-manual.pdf b/doc/pdf/deluge-t2-manual.pdf index 98025dd39fd42b80389aee3f60d8ffe01859eb4d..f51e79b73b113b397e6f96680a15eb30db3f649a 100644 GIT binary patch delta 26938 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

<#7oSGeuwrGoH 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 - + switch (delugeDis->msg_type) { case DISSMSG_DISS: if (imgDesc->uid == delugeDis->uid && imgDesc->uid != DELUGE_INVALID_UID) { if (imgDesc->vNum < delugeDis->vNum) { + recv_uid = delugeDis->uid; + recv_size = delugeDis->size; + recv_imgNum = delugeDis->imgNum; call ObjectTransfer.receive(delugeDis->uid, delugeDis->size, delugeDis->imgNum); } } else { + recv_uid = delugeDis->uid; + recv_size = delugeDis->size; + recv_imgNum = delugeDis->imgNum; call ObjectTransfer.receive(delugeDis->uid, delugeDis->size, delugeDis->imgNum); } @@ -133,11 +141,7 @@ implementation event void ObjectTransfer.receiveDone(error_t error) { - //call ObjectTransfer.publish(imgDesc->uid, imgDesc->size, imgDesc->imgNum); - call ObjectTransfer.stop(); -// if (error == SUCCESS) { -// call NetProg.programImgAndReboot(img_num); -// } + call ObjectTransfer.publish(recv_uid, recv_size, recv_imgNum); } /** @@ -146,17 +150,6 @@ implementation event void RadioSplitControl.startDone(error_t error) { if (error == SUCCESS) { -// // Start publishing the current image -// DelugeImgDesc *imgDesc; -// DelugeNodeDesc nodeDesc; -// call IFlash.read((uint8_t*)IFLASH_NODE_DESC_ADDR, -// &nodeDesc, -// sizeof(DelugeNodeDesc)); // Reads which image was just reprogrammed -// imgDesc = call DelugeMetadata.getImgDesc(nodeDesc.imgNum); -// if (nodeDesc.uid == imgDesc->uid && imgDesc->uid != DELUGE_INVALID_UID) { -// call ObjectTransfer.publish(imgDesc->uid, imgDesc->size, imgDesc->imgNum); -// } - call StdControlDissemination.start(); } } diff --git a/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManager.h b/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManager.h index 9ca55a45..35c1a188 100644 --- a/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManager.h +++ b/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManager.h @@ -35,6 +35,7 @@ #define SERIALMSG_REPROG 5 #define SERIALMSG_DISS 6 #define SERIALMSG_REPROG_BS 7 +#define SERIALMSG_SYNC 8 typedef nx_struct SerialReqPacket { nx_uint8_t msg_type; diff --git a/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManagerP.nc b/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManagerP.nc index 216c00d2..2021f2e0 100644 --- a/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManagerP.nc +++ b/tos/lib/net/Deluge/FlashVolumeManager/FlashVolumeManagerP.nc @@ -58,6 +58,7 @@ implementation S_READ, S_CRC, S_REPROG, + S_SYNC, }; message_t serialMsg; @@ -130,7 +131,7 @@ implementation event void BlockWrite.syncDone[uint8_t img_num](error_t error) { - if (state == S_ERASE) { + if (state == S_ERASE || state == S_SYNC) { state = S_IDLE; sendReply(error, sizeof(SerialReplyPacket)); } @@ -180,6 +181,9 @@ implementation error = call BlockRead.computeCrc[img_num](srpkt->offset, srpkt->len, 0); break; + case SERIALMSG_SYNC: // === Sync the flash === + state = S_SYNC; + error = call BlockWrite.sync[img_num](); #ifdef DELUGE case SERIALMSG_ADDR: // === Gets the physical starting address of a volume === *(nx_uint32_t*)(&serialMsg_payload->data) = diff --git a/tos/lib/net/Deluge/ObjectTransferP.nc b/tos/lib/net/Deluge/ObjectTransferP.nc index 777a6cfa..ab92c554 100644 --- a/tos/lib/net/Deluge/ObjectTransferP.nc +++ b/tos/lib/net/Deluge/ObjectTransferP.nc @@ -111,8 +111,8 @@ implementation resetTimer(); } else { call DelugePageTransfer.setWorkingPage(DELUGE_INVALID_OBJID, DELUGE_INVALID_PGNUM); - state = S_SYNC; call ObjectTransfer.stop(); + state = S_SYNC; call BlockWrite.sync[cont_receive_img_num](); } } @@ -248,9 +248,11 @@ implementation setNextPage(); } else { call DelugePageTransfer.setWorkingPage(curObjDesc.objid, curObjDesc.numPgsComplete); - state = S_SYNC; call ObjectTransfer.stop(); - call BlockWrite.sync[cont_receive_img_num](); + state = S_SYNC; + if (call BlockWrite.sync[cont_receive_img_num]() != SUCCESS) { + post signalObjRecvDone(); + } } } } -- 2.39.2