[Tinyos-beta-commits] CVS: tinyos-1.x/beta/Deluge/delugetools
Deluge.java, 1.2, 1.3
Jonathan Hui
jwhui at users.sourceforge.net
Fri Nov 26 10:59:14 PST 2004
- Previous message: [Tinyos-beta-commits]
CVS: tinyos-1.x/beta/Deluge/TestDeluge/GoldenImage
GoldenImageWriterM.nc, 1.1, 1.2
- Next message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/Deluge/Deluge/TOSBoot
TOSBoot.nc, 1.1, 1.2 TOSBootExtFlash.h, 1.1,
1.2 TOSBootExtFlash.nc, 1.1, 1.2 TOSBootM.nc, 1.1,
1.2 TOSBootProgFlash.h, 1.1, 1.2 TOSBootProgFlash.nc, 1.1,
1.2 TOSBootProgFlashM.nc, 1.1, 1.2 TOSBootSTM25PC.nc, 1.1,
1.2 TOSBootSTM25PM.nc, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/tinyos/tinyos-1.x/beta/Deluge/delugetools
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19824/delugetools
Modified Files:
Deluge.java
Log Message:
- All features currently planned for Deluge 2.0 are now implemented.
- On startup, Deluge searches the flash for complete and partially
complete images. Any partially complete images will be recovered,
allowing the user to resume an injection.
- All CRC checks now implemented and enabled. CRC checks on: (i)
deluge metadata (e.g. version number, etc.), (ii) entire pages, and
(iii) the reboot command itself. All CRCs are generated by the PC
only, thus minimizing the chance that a misbehaving node will
propagate corrupt data.
- Auto-detection of TOSBase node. Eliminates the need of the '-t'
option at the command line (which is very easy to forget).
- Auto-detection of identical images. When a user tries to inject an
identical image, Deluge will resume the injection if the image is
incomplete, or notify the user that the image is already in the
network if it is already complete.
- Works well on 2 nodes: (i) both with Deluge, (ii) one TOSBase, one
Deluge.
Index: Deluge.java
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/Deluge/delugetools/Deluge.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Deluge.java 23 Nov 2004 02:56:15 -0000 1.2
--- Deluge.java 26 Nov 2004 18:59:11 -0000 1.3
***************
*** 43,50 ****
private static final int S_NONE = 0;
private static final int S_PING = 1;
! private static final int S_INJECT = 2;
! private static final int S_REBOOT = 3;
! private static final int S_ERASE = 4;
! private static final int S_DUMP = 5;
private static final int RECTYP_DATA = 0;
--- 43,51 ----
private static final int S_NONE = 0;
private static final int S_PING = 1;
! private static final int S_PING_INJECT = 2;
! private static final int S_INJECT = 3;
! private static final int S_REBOOT = 4;
! private static final int S_ERASE = 5;
! private static final int S_DUMP = 6;
private static final int RECTYP_DATA = 0;
***************
*** 52,56 ****
private static final int RECTYP_EXTSEG = 2;
! private short TOS_UART_ADDR = 0x007e;
private DelugeImg image;
--- 53,57 ----
private static final int RECTYP_EXTSEG = 2;
! private static final short TOS_UART_ADDR = 0x007e;
private DelugeImg image;
***************
*** 62,67 ****
--- 63,73 ----
private boolean printAllMsgs = false;
private short imgID = -1;
+ private short curImg = 0;
private ImageInfo imageInfo[] = new ImageInfo[DelugeConsts.DELUGE_NUM_IMAGES];
private boolean sentReq = false;
+ private boolean resolvedNodeType = false;
+ private short pcAddr = (short)MoteIF.TOS_BCAST_ADDR;
+
+ private ProgramMetadata programMetadata;
private int mode = S_NONE;
***************
*** 78,84 ****
System.err.println(" -f, --file <file> : binary file (arbitrary data)");
System.err.println(" -in, --imgnum <num> : image num");
- System.err.println(" -g, --goldenimg : golden image");
- System.err.println(" -vn, --vnum <num> : version number");
- System.err.println(" -t, --tosbase : use with TOSBase node");
System.err.println(" -v, --verbose : print all sent/received msgs");
System.err.println(" -h, --help : print this message");
--- 84,87 ----
***************
*** 116,129 ****
imgID = Short.parseShort(args[i]);
}
- else if (args[i].equals("-g") || args[i].equals("--goldenimg")) {
- imgID = DelugeConsts.DELUGE_FACTORY_IMAGE_NUM;
- }
- else if (args[i].equals("-vn") || args[i].equals("--vnum")) {
- if (++i < args.length)
- vNum = (short)Integer.parseInt(args[i]);
- }
- else if (args[i].equals("-t") || args[i].equals("--tosbase")) {
- TOS_UART_ADDR = (short)0xffff;
- }
else if (args[i].equals("-v") || args[i].equals("--verbose")) {
printAllMsgs = true;
--- 119,122 ----
***************
*** 139,143 ****
else if (args[i].equals("-i") || args[i].equals("--inject")) {
if (mode == S_NONE)
! mode = S_INJECT;
else {
System.out.println("ERROR: Only one action may be specified.");
--- 132,136 ----
else if (args[i].equals("-i") || args[i].equals("--inject")) {
if (mode == S_NONE)
! mode = S_PING_INJECT;
else {
System.out.println("ERROR: Only one action may be specified.");
***************
*** 178,186 ****
switch(mode) {
case S_PING:
- imgID = 0;
break;
case S_DUMP:
break;
! case S_INJECT: case S_ERASE:
if (imgID < 0 || imgID >= DelugeConsts.DELUGE_NUM_IMAGES
|| imgID == DelugeConsts.DELUGE_FACTORY_IMAGE_NUM) {
--- 171,178 ----
switch(mode) {
case S_PING:
break;
case S_DUMP:
break;
! case S_PING_INJECT: case S_ERASE:
if (imgID < 0 || imgID >= DelugeConsts.DELUGE_NUM_IMAGES
|| imgID == DelugeConsts.DELUGE_FACTORY_IMAGE_NUM) {
***************
*** 202,206 ****
}
! if (mode == S_DUMP || mode == S_INJECT) {
if (binMode) {
if (!readBinary(infile))
--- 194,198 ----
}
! if (mode == S_DUMP || mode == S_PING_INJECT) {
if (binMode) {
if (!readBinary(infile))
***************
*** 237,246 ****
// setup advertisement message
! advMsg.set_sourceAddr(TOS_UART_ADDR);
advMsg.set_version(DelugeConsts.DELUGE_VERSION);
advMsg.set_type((short)DelugeConsts.DELUGE_ADV_PC);
advMsg.set_nodeDesc_vNum(DelugeConsts.DELUGE_INVALID_VNUM);
advMsg.set_nodeDesc_imgNum(DelugeConsts.DELUGE_INVALID_IMGNUM);
! advMsg.set_imgDesc_imgNum(imgID);
}
--- 229,268 ----
// setup advertisement message
! advMsg.set_sourceAddr(pcAddr);
advMsg.set_version(DelugeConsts.DELUGE_VERSION);
advMsg.set_type((short)DelugeConsts.DELUGE_ADV_PC);
advMsg.set_nodeDesc_vNum(DelugeConsts.DELUGE_INVALID_VNUM);
advMsg.set_nodeDesc_imgNum(DelugeConsts.DELUGE_INVALID_IMGNUM);
! if (mode == S_REBOOT || mode == S_ERASE)
! advMsg.set_imgDesc_imgNum(imgID);
! else
! advMsg.set_imgDesc_imgNum(curImg);
!
! }
!
! void sendAdvMsg() {
!
! // calc crc of adv message
! byte[] tmpBytes = advMsg.dataGet();
! short crc;
!
! int start = DelugeAdvMsg.offset_nodeDesc_vNum();
! int stop = DelugeAdvMsg.offset_nodeDesc_crc();
!
! crc = 0;
! for ( int i = start; i < stop; i++ )
! crc = crcByte(crc, tmpBytes[i]);
! advMsg.set_nodeDesc_crc(crc);
!
! start = DelugeAdvMsg.offset_imgDesc_vNum();
! stop = DelugeAdvMsg.offset_imgDesc_crc();
!
! crc = 0;
! for ( int i = start; i < stop; i++ )
! crc = crcByte(crc, tmpBytes[i]);
! advMsg.set_imgDesc_crc(crc);
!
! if (printAllMsgs) System.out.print(advMsg);
! send(advMsg);
}
***************
*** 248,269 ****
public void run() {
while(true) {
try {
// send an advertisement message every second
! if (mode == S_PING)
! System.out.println("Pinging node ...");
! /*
! // calc crc of adv message
! byte[] tmpBytes = advMsg.dataGet();
! short crc = 0;
! for ( int i = 0; i < DelugeAdvMsg.DEFAULT_MESSAGE_SIZE-DelugeAdvMsg.size_crc(); i++ )
! crc = crcByte(crc, tmpBytes[i]);
! advMsg.set_crc(crc);
! */
if (image == null || !image.isTransmitting()) {
! if (printAllMsgs) System.out.print(advMsg);
! send(advMsg);
}
if (mode == S_REBOOT) {
--- 270,290 ----
public void run() {
+ if (mode == S_PING)
+ System.out.println("Pinging network ...");
+
while(true) {
try {
// send an advertisement message every second
! if (!resolvedNodeType) {
! if (pcAddr == (short)MoteIF.TOS_BCAST_ADDR)
! pcAddr = TOS_UART_ADDR;
! else
! pcAddr = (short)MoteIF.TOS_BCAST_ADDR;
! }
! advMsg.set_sourceAddr(pcAddr);
if (image == null || !image.isTransmitting()) {
! sendAdvMsg();
}
if (mode == S_REBOOT) {
***************
*** 279,475 ****
}
! /*
! // calc crc
! for ( int i = 0; i < DelugeAdvMsg.DEFAULT_MESSAGE_SIZE-DelugeAdvMsg.size_crc(); i++ )
! crc = crcByte(crc, tmpBytes[i]);
!
! // drop packet if crc fails
! if (crc != (short)rxAdvMsg.get_crc())
! return;
! */
!
! synchronized public void messageReceived(int to, Message m) {
!
! switch(m.amType()) {
! case DelugeAdvMsg.AM_TYPE:
! DelugeAdvMsg rxAdvMsg = (DelugeAdvMsg)m;
! byte[] tmpBytes = rxAdvMsg.dataGet();
! short crc = 0;
! if (printAllMsgs) System.out.print(rxAdvMsg);
! if (rxAdvMsg.get_type() == DelugeConsts.DELUGE_ADV_NOT_READY) {
! System.out.println("ERROR: Deluge is not running on node "
! + rxAdvMsg.get_sourceAddr() + ".");
! allDone(1);
}
! switch(mode) {
! case S_PING:
!
! // only accept advertisements for current image number
! if (rxAdvMsg.get_imgDesc_imgNum() != imgID
! || sentReq)
! return;
!
! // build new image information handler if needed
! if (imageInfo[imgID] == null)
! imageInfo[imgID] = new ImageInfo(rxAdvMsg.get_imgDesc_vNum(), imgID,
! rxAdvMsg.get_imgDesc_numPgs(),
! rxAdvMsg.get_imgDesc_numPgsComplete());
! if (imageInfo[imgID].getVNum() == DelugeConsts.DELUGE_INVALID_VNUM
! || imageInfo[imgID].getNumPgs() == 0) {
! if (imgID == DelugeConsts.DELUGE_NUM_IMAGES-1) {
! printPingResults();
! allDone(0);
}
else {
! imgID++;
! advMsg.set_nodeDesc_vNum(DelugeConsts.DELUGE_INVALID_VNUM);
! advMsg.set_nodeDesc_imgNum(DelugeConsts.DELUGE_INVALID_IMGNUM);
! advMsg.set_imgDesc_imgNum(imgID);
}
}
else {
! imageInfo[imgID].requestData(rxAdvMsg.get_sourceAddr());
}
!
sentReq = true;
! break;
!
! case S_REBOOT:
! if (vNum != DelugeConsts.DELUGE_INVALID_VNUM
! && vNum == rxAdvMsg.get_nodeDesc_vNum()) {
! // ALL DONE, QUIT!
! System.out.println("Reboot message sent.");
! allDone(0);
! }
! if (imgID != DelugeConsts.DELUGE_FACTORY_IMAGE_NUM) {
! if (rxAdvMsg.get_imgDesc_numPgs() != rxAdvMsg.get_imgDesc_numPgsComplete()) {
! System.out.println("ERROR: Cannot reboot to an incomplete image.");
! allDone(1);
! }
! else if (rxAdvMsg.get_imgDesc_numPgs() == 0) {
! System.out.println("ERROR: Cannot reboot to an empty image.");
! allDone(1);
! }
! }
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM) {
! vNum = (short)((short)rxAdvMsg.get_nodeDesc_vNum() + (short)1);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! vNum = 0;
}
! else if ((short)(vNum - (short)rxAdvMsg.get_nodeDesc_vNum()) < 0) {
! System.out.println("ERROR: Invalid version number.");
allDone(1);
}
! advMsg.set_nodeDesc_vNum(vNum);
! advMsg.set_nodeDesc_imgNum(imgID);
! break;
! case S_ERASE:
! numPgs = 0;
! // fall through
! case S_INJECT:
! if (vNum == rxAdvMsg.get_imgDesc_vNum()
! && numPgs == rxAdvMsg.get_imgDesc_numPgsComplete()) {
! // ALL DONE, QUIT!
! if (mode == S_ERASE)
! System.out.println("ERASE message sent.");
! else if (mode == S_INJECT) {
! System.out.println();
! System.out.println("INJECTION COMPLETE!");
! }
! allDone(0);
! }
! if (advMsg.get_nodeDesc_imgNum() == imgID)
! return;
! advMsg.set_nodeDesc_vNum(rxAdvMsg.get_nodeDesc_vNum());
! advMsg.set_nodeDesc_imgNum(imgID);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM) {
! vNum = (short)((short)rxAdvMsg.get_imgDesc_vNum() + (short)1);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! vNum = 0;
! }
! else if ((short)(vNum - (short)rxAdvMsg.get_imgDesc_vNum()) < 0) {
! System.out.println("ERROR: Invalid version number.");
! allDone(1);
}
! short prevVNum = (short)rxAdvMsg.get_imgDesc_vNum();
! if (prevVNum == DelugeConsts.DELUGE_INVALID_VNUM) {
! System.out.println("Upgrading image [" + imgID + "] from version [NONE] to ["
! + ((int)vNum&0xffff) + "] ...");
}
! else {
! System.out.println("Upgrading image [" + imgID + "] from version ["
! + ((int)prevVNum&0xffff) + "] to ["
! + ((int)vNum&0xffff) + "] ...");
! }
! advMsg.set_imgDesc_vNum(vNum);
! advMsg.set_imgDesc_numPgs((byte)numPgs);
! advMsg.set_imgDesc_numPgsComplete((byte)numPgs);
- break;
- default:
- System.err.println("ERROR: Unexpected mode: " + mode);
- allDone(1);
- }
-
break;
! case DelugeReqMsg.AM_TYPE:
! DelugeReqMsg req = (DelugeReqMsg)m;
! boolean pktsToSend[] = new boolean[DelugeConsts.DELUGE_PKTS_PER_PAGE];
! if (printAllMsgs) System.out.print(req);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! return;
! if (vNum != req.get_vNum()) {
! System.out.println("ERROR: Node requesting version " + req.get_vNum()
! + ", wrong version.");
! allDone(1);
! }
! for ( int i = 0; i < DelugeConsts.DELUGE_PKTS_PER_PAGE; i++ ) {
! short[] tmp = req.get_requestedPkts();
! if ((tmp[i/8]&(1 << (i%8))) != 0)
! pktsToSend[i] = true;
! }
! image.transmitPage(req.get_pgNum(), pktsToSend);
! break;
! case DelugeDataMsg.AM_TYPE:
! if (imageInfo[imgID].receivedData((DelugeDataMsg)m)) {
! if (imgID == DelugeConsts.DELUGE_NUM_IMAGES-1) {
! printPingResults();
! allDone(0);
}
else {
! imgID++;
! advMsg.set_nodeDesc_vNum(DelugeConsts.DELUGE_INVALID_VNUM);
! advMsg.set_nodeDesc_imgNum(DelugeConsts.DELUGE_INVALID_IMGNUM);
! advMsg.set_imgDesc_imgNum(imgID);
}
}
! break;
}
--- 300,552 ----
}
! boolean compareImages(int imgID) {
! ProgramMetadata metadata = imageInfo[imgID].getMetadata();
! return (metadata.getName().compareTo(programMetadata.getName()) == 0
! && metadata.getUnixTime() == programMetadata.getUnixTime()
! && metadata.getUserHash() == programMetadata.getUserHash());
! }
! void advMsgReceived(DelugeAdvMsg rxAdvMsg) {
! byte[] tmpBytes = rxAdvMsg.dataGet();
! short crc = 0;
!
! if (printAllMsgs) System.out.print(rxAdvMsg);
!
! if (rxAdvMsg.get_type() == DelugeConsts.DELUGE_ADV_NOT_READY) {
! System.out.println("ERROR: Deluge has not initialized correctly on node "
! + rxAdvMsg.get_sourceAddr() + ".");
! allDone(1);
! }
! switch(mode) {
! case S_PING:
! case S_PING_INJECT:
! // only accept advertisements for current image number
! if (rxAdvMsg.get_imgDesc_imgNum() != curImg
! || sentReq) {
! System.out.println("reject " + sentReq);
! return;
}
! if (imageInfo[curImg] == null)
! imageInfo[curImg] = new ImageInfo(rxAdvMsg.get_imgDesc_vNum(), curImg,
! rxAdvMsg.get_imgDesc_numPgs(),
! rxAdvMsg.get_imgDesc_numPgsComplete());
! if (imageInfo[curImg].getVNum() == DelugeConsts.DELUGE_INVALID_VNUM
! || imageInfo[curImg].getNumPgsComplete() == 0) {
! advMsg.set_nodeDesc_vNum(DelugeConsts.DELUGE_INVALID_VNUM);
! advMsg.set_nodeDesc_imgNum(DelugeConsts.DELUGE_INVALID_IMGNUM);
! if (curImg == DelugeConsts.DELUGE_NUM_IMAGES-1) {
! if (mode == S_PING_INJECT) {
! advMsg.set_imgDesc_imgNum(imgID);
! mode = S_INJECT;
}
else {
! printPingResults();
! allDone(0);
}
}
else {
! curImg++;
! advMsg.set_imgDesc_imgNum(curImg);
! sentReq = false;
! sendAdvMsg();
}
! }
! else {
! imageInfo[curImg].requestData(rxAdvMsg.get_sourceAddr());
sentReq = true;
! }
!
! break;
! case S_REBOOT:
! if (vNum != DelugeConsts.DELUGE_INVALID_VNUM
! && vNum == rxAdvMsg.get_nodeDesc_vNum()) {
! // ALL DONE, QUIT!
! System.out.println("Reboot message sent.");
! allDone(0);
! }
! if (imgID != DelugeConsts.DELUGE_FACTORY_IMAGE_NUM) {
! if (rxAdvMsg.get_imgDesc_numPgs() != rxAdvMsg.get_imgDesc_numPgsComplete()) {
! System.out.println("ERROR: Cannot reboot to an incomplete image.");
! allDone(1);
}
! else if (rxAdvMsg.get_imgDesc_numPgs() == 0) {
! System.out.println("ERROR: Cannot reboot to an empty image.");
allDone(1);
}
+ }
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM) {
! vNum = (short)((short)rxAdvMsg.get_nodeDesc_vNum() + (short)1);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! vNum = 0;
! }
! else if ((short)(vNum - (short)rxAdvMsg.get_nodeDesc_vNum()) < 0) {
! System.out.println("ERROR: Invalid version number.");
! allDone(1);
! }
! advMsg.set_nodeDesc_vNum(vNum);
! advMsg.set_nodeDesc_imgNum(imgID);
! break;
! case S_ERASE:
! numPgs = 0;
! // fall through
! case S_INJECT:
! if (vNum == rxAdvMsg.get_imgDesc_vNum()
! && numPgs == rxAdvMsg.get_imgDesc_numPgsComplete()) {
! // ALL DONE, QUIT!
! if (mode == S_ERASE)
! System.out.println("ERASE message sent.");
! else if (mode == S_INJECT) {
! System.out.println();
! System.out.println("INJECTION COMPLETE!");
! }
! allDone(0);
! }
! if (advMsg.get_nodeDesc_imgNum() == imgID)
! return;
! if (mode == S_INJECT) {
! for ( int i = 0; i < imgID; i++ ) {
! if (imageInfo[i].getNumPgsComplete() != imageInfo[i].getNumPgs()) {
! System.out.println("ERROR: Image [" + i + "] is incomplete.");
! System.out.println(" Please complete or erase this image first.");
! allDone(1);
! }
}
+ }
! advMsg.set_nodeDesc_vNum(rxAdvMsg.get_nodeDesc_vNum());
! advMsg.set_nodeDesc_imgNum(imgID);
! advMsg.set_imgDesc_imgNum(imgID);
! vNum = (short)((short)rxAdvMsg.get_imgDesc_vNum());
! if (mode == S_ERASE) {
! System.out.println("Erasing image [" + imgID + "] ...");
! vNum = (short)((short)rxAdvMsg.get_imgDesc_vNum() + (short)1);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! vNum = 0;
! }
! else if (compareImages(imgID)) {
! if (rxAdvMsg.get_imgDesc_numPgsComplete() == rxAdvMsg.get_imgDesc_numPgs()) {
! System.out.println("ERROR: Image [" + imgID + "] is identical.");
! allDone(1);
}
! else
! System.out.println("Resuming injection to image [" + imgID + "] ...");
! }
! else {
! System.out.println("New injection to image [" + imgID + "] ...");
! vNum = (short)((short)rxAdvMsg.get_imgDesc_vNum() + (short)1);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! vNum = 0;
! }
! short prevVNum = (short)rxAdvMsg.get_imgDesc_vNum();
!
! advMsg.set_imgDesc_vNum(vNum);
! advMsg.set_imgDesc_numPgs((byte)numPgs);
! advMsg.set_imgDesc_numPgsComplete((byte)numPgs);
break;
+ default:
+ System.err.println("ERROR: Unexpected mode: " + mode);
+ allDone(1);
+ }
! }
! void reqMsgReceived(DelugeReqMsg req) {
! boolean pktsToSend[] = new boolean[DelugeConsts.DELUGE_PKTS_PER_PAGE];
! if (printAllMsgs) System.out.print(req);
! if (vNum == DelugeConsts.DELUGE_INVALID_VNUM)
! return;
!
! if (vNum != req.get_vNum()) {
! System.out.println("ERROR: Node requesting version " + req.get_vNum()
! + ", wrong version.");
! allDone(1);
! }
! for ( int i = 0; i < DelugeConsts.DELUGE_PKTS_PER_PAGE; i++ ) {
! short[] tmp = req.get_requestedPkts();
! if ((tmp[i/8]&(1 << (i%8))) != 0)
! pktsToSend[i] = true;
! }
! image.transmitPage(req.get_pgNum(), pktsToSend);
! }
! void dataMsgReceived(DelugeDataMsg dataMsg) {
! if (printAllMsgs) System.out.print(dataMsg);
!
! if (curImg >= DelugeConsts.DELUGE_NUM_IMAGES)
! return;
!
! if (imageInfo[curImg].receivedData(dataMsg)) {
! advMsg.set_nodeDesc_vNum(DelugeConsts.DELUGE_INVALID_VNUM);
! advMsg.set_nodeDesc_imgNum(DelugeConsts.DELUGE_INVALID_IMGNUM);
! if (curImg == DelugeConsts.DELUGE_NUM_IMAGES-1) {
! if (mode == S_PING_INJECT) {
! advMsg.set_imgDesc_imgNum(imgID);
! mode = S_INJECT;
}
else {
! printPingResults();
! allDone(0);
}
}
+ else {
+ curImg++;
+ advMsg.set_imgDesc_imgNum(curImg);
+ sentReq = false;
+ sendAdvMsg();
+ }
+ }
! }
!
! synchronized public void messageReceived(int toAddr, Message m) {
+ // figure out what type of node we're connected to
+ if (!resolvedNodeType) {
+ if (toAddr != TOS_UART_ADDR) {
+ pcAddr = (short)MoteIF.TOS_BCAST_ADDR;
+ resolvedNodeType = true;
+ System.out.println("Connected to TOSBase node.");
+ }
+ else if (toAddr == TOS_UART_ADDR) {
+ pcAddr = TOS_UART_ADDR;
+ resolvedNodeType = true;
+ System.out.println("Connected to Deluge node.");
+ }
+ }
+
+ switch(m.amType()) {
+ case DelugeAdvMsg.AM_TYPE:
+ DelugeAdvMsg rxAdvMsg = (DelugeAdvMsg)m;
+ advMsgReceived(rxAdvMsg);
+ break;
+ case DelugeReqMsg.AM_TYPE:
+ DelugeReqMsg req = (DelugeReqMsg)m;
+ reqMsgReceived(req);
+ break;
+ case DelugeDataMsg.AM_TYPE:
+ DelugeDataMsg dataMsg = (DelugeDataMsg)m;
+ dataMsgReceived(dataMsg);
+ break;
}
***************
*** 501,505 ****
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
if (isEmptyImage(i))
! System.out.print("\tN/A");
else {
System.out.print("\t" + metadata[i].getName());
--- 578,582 ----
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
if (isEmptyImage(i))
! System.out.print("\tN/A ");
else {
System.out.print("\t" + metadata[i].getName());
***************
*** 516,520 ****
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
if (isEmptyImage(i))
! System.out.print("\tN/A");
else
System.out.print("\t0x" + Long.toHexString(metadata[i].getUnixTime()));
--- 593,597 ----
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
if (isEmptyImage(i))
! System.out.print("\tN/A ");
else
System.out.print("\t0x" + Long.toHexString(metadata[i].getUnixTime()));
***************
*** 525,529 ****
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
if (isEmptyImage(i))
! System.out.print("\tN/A");
else
System.out.print("\t0x" + Long.toHexString(metadata[i].getUserHash()));
--- 602,606 ----
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
if (isEmptyImage(i))
! System.out.print("\tN/A ");
else
System.out.print("\t0x" + Long.toHexString(metadata[i].getUserHash()));
***************
*** 533,538 ****
System.out.print(" Num Pages");
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
! if (isEmptyImage(i))
! System.out.print("\tN/A");
else {
System.out.print("\t" + imageInfo[i].getNumPgsComplete() + "/" +
--- 610,615 ----
System.out.print(" Num Pages");
for ( int i = 0; i < DelugeConsts.DELUGE_NUM_IMAGES; i++ ) {
! if ((i == 0) || isEmptyImage(i))
! System.out.print("\tN/A ");
else {
System.out.print("\t" + imageInfo[i].getNumPgsComplete() + "/" +
***************
*** 610,615 ****
String identFile = buildDir + "/ident_flags.txt";
- ProgramMetadata programMetadata;
-
try {
programMetadata = new ProgramMetadata(buildDir);
--- 687,690 ----
***************
*** 625,630 ****
imgStartOffset = tmpImageOffset = 128;
- System.out.println();
-
// read binary executable
try {
--- 700,703 ----
***************
*** 762,765 ****
--- 835,842 ----
}
+ /************************************************************
+ * ImageInfo
+ ************************************************************/
+
private class ImageInfo {
***************
*** 768,775 ****
private int pktsReceived = 0;
private short vNum, imgNum, numPgs, numPgsComplete;
public ImageInfo(short newVNum, short newImgNum, short newNumPgs, short newNumPgsComplete) {
! for ( int i = 0; i < pktsToReceive.length; i++ )
! pktsToReceive[i] = 0xff;
vNum = newVNum;
imgNum = newImgNum;
--- 845,856 ----
private int pktsReceived = 0;
private short vNum, imgNum, numPgs, numPgsComplete;
+ private int numPktsRequired;
public ImageInfo(short newVNum, short newImgNum, short newNumPgs, short newNumPgsComplete) {
! int start = DelugeConsts.DELUGE_CRC_BLOCK_SIZE/DelugeConsts.DELUGE_PKT_PAYLOAD_SIZE;
! int end = DelugeConsts.DELUGE_IDENT_SIZE/DelugeConsts.DELUGE_PKT_PAYLOAD_SIZE;
! numPktsRequired = end;
! for ( int i = start; i < start+end; i++ )
! pktsToReceive[i/8] |= (0x1 << (i%8));
vNum = newVNum;
imgNum = newImgNum;
***************
*** 780,784 ****
public void requestData(int dest) {
DelugeReqMsg reqMsg = new DelugeReqMsg();
! reqMsg.set_sourceAddr(TOS_UART_ADDR);
reqMsg.set_dest(dest);
reqMsg.set_vNum(vNum);
--- 861,865 ----
public void requestData(int dest) {
DelugeReqMsg reqMsg = new DelugeReqMsg();
! reqMsg.set_sourceAddr(pcAddr);
reqMsg.set_dest(dest);
reqMsg.set_vNum(vNum);
***************
*** 812,816 ****
}
! if (pktsReceived >= DelugeConsts.DELUGE_PKTS_PER_PAGE)
return true;
--- 893,897 ----
}
! if (isComplete())
return true;
***************
*** 820,824 ****
public boolean isComplete() {
! return (pktsReceived >= DelugeConsts.DELUGE_PKTS_PER_PAGE);
}
--- 901,905 ----
public boolean isComplete() {
! return (pktsReceived >= numPktsRequired);
}
***************
*** 949,954 ****
private class DelugeImg implements Runnable {
- private final static int MAX_NUM_PAGES = 128;
-
private short image[];
private boolean pktsToSend[] = new boolean[DelugeConsts.DELUGE_PKTS_PER_PAGE];
--- 1030,1033 ----
***************
*** 969,986 ****
int i;
! int pages = (length-1)/DelugeConsts.DELUGE_PAGE_SIZE + 1;
!
! size = 2*MAX_NUM_PAGES;
! int totalSize = size + pages*DelugeConsts.DELUGE_PAGE_SIZE;
! image = new short[(((totalSize-1)/DelugeConsts.DELUGE_BYTES_PER_PAGE)+1)
! *DelugeConsts.DELUGE_BYTES_PER_PAGE];
short crc = 0;
for ( i = 0; i < length; i++ ) {
! if ((i % DelugeConsts.DELUGE_PAGE_SIZE) == 0
! && i != 0) {
! int offset = 2*((i-1)/DelugeConsts.DELUGE_PAGE_SIZE);
image[offset+0] = (short)((crc >> 0x0) & 0xff);
image[offset+1] = (short)((crc >> 0x8) & 0xff);
--- 1048,1063 ----
int i;
! size = 2*DelugeConsts.DELUGE_MAX_PAGES;
! int totalSize = size + length;
! totalSize = (totalSize-1)/DelugeConsts.DELUGE_BYTES_PER_PAGE+1;
! totalSize *= DelugeConsts.DELUGE_BYTES_PER_PAGE;
! image = new short[totalSize];
short crc = 0;
for ( i = 0; i < length; i++ ) {
! if ((size % DelugeConsts.DELUGE_BYTES_PER_PAGE) == 0) {
! int offset = 2*((size-1)/DelugeConsts.DELUGE_BYTES_PER_PAGE);
image[offset+0] = (short)((crc >> 0x0) & 0xff);
image[offset+1] = (short)((crc >> 0x8) & 0xff);
***************
*** 992,996 ****
// finish out rest of page and calculate CRC
! while((i % DelugeConsts.DELUGE_PAGE_SIZE) != 0) {
crc = crcByte(crc, (byte)0x0);
image[size++] = 0;
--- 1069,1073 ----
// finish out rest of page and calculate CRC
! while((size % DelugeConsts.DELUGE_BYTES_PER_PAGE) != 0) {
crc = crcByte(crc, (byte)0x0);
image[size++] = 0;
***************
*** 998,1002 ****
}
! int offset = 2*((i-1)/DelugeConsts.DELUGE_PAGE_SIZE);
image[offset+0] = (short)((crc >> 0x0) & 0xff);
image[offset+1] = (short)((crc >> 0x8) & 0xff);
--- 1075,1079 ----
}
! int offset = 2*((size-1)/DelugeConsts.DELUGE_BYTES_PER_PAGE);
image[offset+0] = (short)((crc >> 0x0) & 0xff);
image[offset+1] = (short)((crc >> 0x8) & 0xff);
***************
*** 1040,1047 ****
}
- private boolean isCrcByte(int offset) {
- return (((offset + 2) % DelugeConsts.DELUGE_PAGE_SIZE) == 0);
- }
-
private boolean arePacketsToSend() {
for ( int i = 0; i < DelugeConsts.DELUGE_PKTS_PER_PAGE; i++ ) {
--- 1117,1120 ----
- Previous message: [Tinyos-beta-commits]
CVS: tinyos-1.x/beta/Deluge/TestDeluge/GoldenImage
GoldenImageWriterM.nc, 1.1, 1.2
- Next message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/Deluge/Deluge/TOSBoot
TOSBoot.nc, 1.1, 1.2 TOSBootExtFlash.h, 1.1,
1.2 TOSBootExtFlash.nc, 1.1, 1.2 TOSBootM.nc, 1.1,
1.2 TOSBootProgFlash.h, 1.1, 1.2 TOSBootProgFlash.nc, 1.1,
1.2 TOSBootProgFlashM.nc, 1.1, 1.2 TOSBootSTM25PC.nc, 1.1,
1.2 TOSBootSTM25PM.nc, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Tinyos-beta-commits
mailing list