Changeset 225
- Timestamp:
- 10/19/09 09:44:00 (4 years ago)
- Location:
- apps/TSCH
- Files:
-
- 10 edited
-
TODO.txt (modified) (1 diff)
-
TSCH.h (modified) (1 diff)
-
TSCHAppC.nc (modified) (4 diffs)
-
debugwsn.py (modified) (22 diffs)
-
deploy.sh (modified) (1 diff)
-
neighbors/NeighborsP.nc (modified) (3 diffs)
-
reservation/ReservationP.nc (modified) (1 diff)
-
tschqueue/TSCHQueueP.nc (modified) (3 diffs)
-
wiring.pdf (modified) (previous)
-
wiring.vsd (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
apps/TSCH/TODO.txt
r217 r225 1 - CellUsageC: TXRES cells will always be reserved, regardless of the previous state. This can cause trouble. Enquire. 1 - slots get crazy 2 - when a node reboots, it forgets all its RES slots. So should its neighbors. 3 - when a node gets out of sync, it keeps its tables. If it stays out of sync for over delays, it should erase its tables. 4 - at each new RES, node should tell its neighbor how many TXDATA/RXDATA slots it has to that neighbor 2 5 - based on gathered statistics, trigger garbage collection of cells/neighbors -
apps/TSCH/TSCH.h
r224 r225 9 9 LOST_SYNC_DELAY = 30, //in seconds 10 10 TXRETRIES = 5, 11 RESRETRIES = 3,11 RESRETRIES = 5, 12 12 DELAY_REMOVE_FROZEN_RESERVATIONS =10000, //in ms 13 13 DELAY_REMOVE_DEAD_NEIGHBOR =320000, //32000=1s -
apps/TSCH/TSCHAppC.nc
r221 r225 53 53 ReservationC.SerialIO->SerialIOC; 54 54 55 NeighborsC.GlobalTime->GlobalTimeC; 55 56 NeighborsC.DeQueue->TSCHQueueC; 56 NeighborsC.GlobalTime->GlobalTimeC;57 57 NeighborsC.SendADV->TSCHQueueC.SendADV; 58 58 NeighborsC.SendDATA->TSCHQueueC.SendDATA; … … 66 66 NeighborsC.SerialIO->SerialIOC; 67 67 68 CellUsageC. GlobalSync->GlobalTimeC;68 CellUsageC.NeighborGet->NeighborsC; 69 69 CellUsageC.GlobalTime->GlobalTimeC; 70 70 CellUsageC.IDManager->IDManagerC; 71 CellUsageC. NeighborGet->NeighborsC;71 CellUsageC.GlobalSync->GlobalTimeC; 72 72 CellUsageC.SerialIO->SerialIOC; 73 73 … … 95 95 SlotEngineC.GlobalSync->GlobalTimeC; 96 96 SlotEngineC.CellUsageGet->CellUsageC; 97 SlotEngineC.NeighborGet->NeighborsC; 97 98 SlotEngineC.GlobalTime->GlobalTimeC; 98 99 SlotEngineC.IDManager->IDManagerC; … … 100 101 SlotEngineC.CellStats->CellUsageC; 101 102 SlotEngineC.SerialIO->SerialIOC; 102 SlotEngineC.NeighborGet->NeighborsC;103 103 104 104 GlobalTimeC.SubReceive->SlotEngineC; -
apps/TSCH/debugwsn.py
r224 r225 75 75 text.insert(END,"input too short to be a command ("+str(len(input))+" chars)\n") 76 76 except: 77 pass 77 print "ERROR 1" 78 err = sys.exc_info() 79 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 78 80 return 79 81 #byte 0 is the type of status message … … 84 86 text.insert(END,"data\n", (serial_port)) 85 87 except: 86 pass 88 print "ERROR 2" 89 err = sys.exc_info() 90 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 87 91 elif (input[0]=="S"): 88 92 #bytes 1 and 2 is moteID … … 93 97 if (statusElementNumber==0): displayAdvertise(serial_port,input) 94 98 elif (statusElementNumber==1): recordCellTableRow(serial_port,input) 95 elif (statusElementNumber==2): recordNeighborsRow(serial_port,input)96 elif (statusElementNumber==3): recordOngoingResRow(serial_port,input)99 elif (statusElementNumber==2): recordNeighborsRow(serial_port,input) 100 elif (statusElementNumber==3): recordOngoingResRow(serial_port,input) 97 101 elif (statusElementNumber==4): displayOutputBufferIndexes(serial_port,input) 98 elif (statusElementNumber==5): recordQueueRow(serial_port,input) 99 else: 100 try: 101 text.insert(END,"STATUS_ELEMENT_UNKNOWN\n", (serial_port)) 102 except: 103 pass 102 elif (statusElementNumber==5): recordQueueRow(serial_port,input) 103 else: 104 try: 105 text.insert(END,"STATUS_ELEMENT_UNKNOWN\n", (serial_port)) 106 except: 107 print "ERROR 3" 108 err = sys.exc_info() 109 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 104 110 else: 105 111 try: 106 112 text.insert(END,"status message of unknown type="+input[0]+"\n") 107 113 except: 108 pass 114 print "ERROR 4" 115 err = sys.exc_info() 116 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 109 117 110 118 #========================= state translators ======================== … … 113 121 if (slotState==0):return "S_SETTING_CHAN" 114 122 elif (slotState==1):return "S_STARTING" 115 elif (slotState==2):return "S_STARTED"123 elif (slotState==2):return "S_STARTED" 116 124 elif (slotState==3):return "S_SYNCHRONIZING" 117 elif (slotState==4):return "S_TXDATA"125 elif (slotState==4):return "S_TXDATA" 118 126 elif (slotState==5):return "S_WAIT_RXACK" 119 elif (slotState==6):return "S_ACK"127 elif (slotState==6):return "S_ACK" 120 128 elif (slotState==7):return "S_RXDATA" 121 elif (slotState==8):return "S_WAIT_TXACK"129 elif (slotState==8):return "S_WAIT_TXACK" 122 130 elif (slotState==9):return "S_TXACK" 123 elif (slotState==10):return "S_STOPPING"131 elif (slotState==10):return "S_STOPPING" 124 132 elif (slotState==11):return "S_SLEEP" 125 else: return "!!unknow state ("+str(slotState)+")!!"133 else: return "!!unknow state ("+str(slotState)+")!!" 126 134 127 135 def getComponentName(componentName): 128 136 if (componentName==0):return "[TSCHP]" 129 137 elif (componentName==1):return "[ForwardingP]" 130 elif (componentName==2):return "[ReservationP]"138 elif (componentName==2):return "[ReservationP]" 131 139 elif (componentName==3):return "[NeighborsP]" 132 elif (componentName==4):return "[CellUsageP]"140 elif (componentName==4):return "[CellUsageP]" 133 141 elif (componentName==5):return "[AdvertiseP]" 134 elif (componentName==6):return "[TSCHQueueP]"142 elif (componentName==6):return "[TSCHQueueP]" 135 143 elif (componentName==7):return "[KeepAliveP]" 136 elif (componentName==8):return "[MultiplexP]"144 elif (componentName==8):return "[MultiplexP]" 137 145 elif (componentName==9):return "[SlotEngineP]" 138 elif (componentName==10):return "[GlobalTimeP]"146 elif (componentName==10):return "[GlobalTimeP]" 139 147 elif (componentName==11):return "[SerialIOP]" 140 elif (componentName==12):return "[TestLowerTSCHP]"141 else: output=output+"[!!unknow component("+str(componentName)+")!!] "148 elif (componentName==12):return "[TestLowerTSCHP]" 149 else: return "[!!unknow component("+str(componentName)+")!!] " 142 150 143 151 def getCellType(cellType): 144 152 if (cellType==0):return "OFF" 145 153 elif (cellType==1):return "RESER" 146 elif (cellType==2):return "ADV"154 elif (cellType==2):return "ADV" 147 155 elif (cellType==3):return "TXSER" 148 elif (cellType==4):return "RXSER"156 elif (cellType==4):return "RXSER" 149 157 elif (cellType==5):return "RES" 150 elif (cellType==6):return "TXDAT"158 elif (cellType==6):return "TXDAT" 151 159 elif (cellType==7):return "RXDAT" 152 else: output=output+"[!!unknow cellType("+str(cellType)+")!!] "160 else: return "[!!unknow cellType("+str(cellType)+")!!] " 153 161 154 162 def getReservationTodo(todo): 155 163 if (todo==0):return "UNUSED" 156 164 elif (todo==1):return "LOCAL_RES" 157 elif (todo==2):return "DISTANT_RES"165 elif (todo==2):return "DISTANT_RES" 158 166 elif (todo==3):return "WAIT_SENT" 159 elif (todo==4):return "WAIT_RES"167 elif (todo==4):return "WAIT_RES" 160 168 elif (todo==5):return "DISTANT_FAILED_RESTART_LOCAL" 161 elif (todo==6):return "INFORM_REQUESTER"162 else: output=output+"[!!unknow Todo("+str(todo)+")!!] "169 elif (todo==6):return "INFORM_REQUESTER" 170 else: return "[!!unknow Todo("+str(todo)+")!!] " 163 171 164 172 def getReservationRequest(request): 165 173 if (request==0):return "REQ_CELL" 166 174 elif (request==1):return "FREE_CELL" 167 elif (request==2):return "SUCCESS"175 elif (request==2):return "SUCCESS" 168 176 elif (request==3):return "FAIL" 169 else: output=output+"[!!unknow request("+str(request)+")!!] "177 else: return "[!!unknow request("+str(request)+")!!] " 170 178 171 179 #========================= parsing and displaying =================== … … 176 184 text.insert(END,"input too short to be of type \"error\" ("+str(len(input))+" chars)\n") 177 185 except: 178 pass 186 print "ERROR 5" 187 err = sys.exc_info() 188 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 179 189 return 180 190 #bytes 1 and 2 is moteID … … 382 392 seriousness="debug" 383 393 elif (command==57): 384 #output=output+"neighbor "+str(arg1)+" assumed dead, removed" 385 #output=output+"neighbor remove "+str(ord(input[5]))+","+str(ord(input[6]))+","+str(ord(input[7]))+","+str(ord(input[8])) 386 output=output+"neighbor remove "+str(ord(input[5])*256*256*256+ord(input[6])*256*256+ord(input[7])*256+ord(input[8])) 394 output=output+"neighbor "+str(arg1)+" assumed dead, removed" 387 395 seriousness="warning" 388 396 else: … … 392 400 text.insert(END,output, (serial_port,seriousness)) 393 401 except: 394 pass 402 print "ERROR 6" 403 err = sys.exc_info() 404 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 395 405 396 406 def displayAdvertise(serial_port,input): … … 399 409 text.insert(END,"input too short to be status message from AdvertiseP ("+str(len(input))+" chars)\n") 400 410 except: 401 pass 411 print "ERROR 7" 412 err = sys.exc_info() 413 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 402 414 return 403 415 #bytes 4 and 5 is the length … … 412 424 text.insert(END,"input too short to be status message from SerialIOP ("+str(len(input))+" chars)\n") 413 425 except: 414 pass 426 print "ERROR 8" 427 err = sys.exc_info() 428 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 415 429 return 416 430 #bytes 4 and 5 is the length … … 427 441 elements[serial_port]["STATUS_SERIALIOP_OUTPUTBUFFERINDEXES"].insert(END,output) 428 442 except: 429 pass 443 print "ERROR 9" 444 err = sys.exc_info() 445 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 430 446 431 447 def recordCellTableRow(serial_port,input): … … 434 450 text.insert(END,"input too short to be status message from CellUsageP ("+str(len(input))+" chars)\n") 435 451 except: 436 pass 452 print "ERROR 10" 453 err = sys.exc_info() 454 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 437 455 return 438 456 #bytes 4 and 5 is the length … … 468 486 elements[serial_port]["STATUS_CELLUSAGEP_CELLTABLE"]["TABLE_ELEM"].insert(END,output) 469 487 except: 470 pass 488 print "ERROR 11" 489 err = sys.exc_info() 490 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 471 491 for key, value in elements[serial_port]["STATUS_CELLUSAGEP_CELLTABLE"]["TABLE"].iteritems(): 472 492 output = str(key)+"\t| "+str(value["type"])+"\t| "+str(value["neighbor"])+"\t| "+str(value["channel"])+"\t| "+str(value["numUser"])+"\t| "+str(value["numACK"])+"\t| "+str(value["lastUsedTimestamp"])+"\n" … … 475 495 elements[serial_port]["STATUS_CELLUSAGEP_CELLTABLE"]["TABLE_ELEM"].insert(END,output,("last_row")) 476 496 except: 477 pass 497 print "ERROR 12" 498 err = sys.exc_info() 499 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 478 500 else: 479 501 try: 480 502 elements[serial_port]["STATUS_CELLUSAGEP_CELLTABLE"]["TABLE_ELEM"].insert(END,output) 481 503 except: 482 pass 504 print "ERROR 13" 505 err = sys.exc_info() 506 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 483 507 484 508 def recordQueueRow(serial_port,input): … … 487 511 text.insert(END,"input too short to be status message from TSCHQueueP ("+str(len(input))+" chars)\n") 488 512 except: 489 pass 513 print "ERROR 14" 514 err = sys.exc_info() 515 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 490 516 return 491 517 #bytes 4 and 5 is the length … … 508 534 elements[serial_port]["STATUS_TSCHQUEUEP_QUEUE"]["TABLE_ELEM"].insert(END,output) 509 535 except: 510 pass 536 print "ERROR 15" 537 err = sys.exc_info() 538 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 511 539 for key, value in elements[serial_port]["STATUS_TSCHQUEUEP_QUEUE"]["TABLE"].iteritems(): 512 540 output = str(key)+" | "+str(value["used"])+"\t| "+str(value["retries"])+"\n" … … 515 543 elements[serial_port]["STATUS_TSCHQUEUEP_QUEUE"]["TABLE_ELEM"].insert(END,output,("last_row")) 516 544 except: 517 pass 545 print "ERROR 16" 546 err = sys.exc_info() 547 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 518 548 else: 519 549 try: 520 550 elements[serial_port]["STATUS_TSCHQUEUEP_QUEUE"]["TABLE_ELEM"].insert(END,output) 521 551 except: 522 pass 552 print "ERROR 17" 553 err = sys.exc_info() 554 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 523 555 524 556 def recordNeighborsRow(serial_port,input): … … 527 559 text.insert(END,"input too short to be status message from NeighborsP ("+str(len(input))+" chars)\n") 528 560 except: 529 pass 561 print "ERROR 18" 562 err = sys.exc_info() 563 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 530 564 return 531 565 #bytes 4 and 5 is the length … … 570 604 elements[serial_port]["STATUS_NEIGHBORSP_NEIGHBORS"]["TABLE_ELEM"].insert(END,output) 571 605 except: 572 pass 606 print "ERROR 19" 607 err = sys.exc_info() 608 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 573 609 for key, value in elements[serial_port]["STATUS_NEIGHBORSP_NEIGHBORS"]["TABLE"].iteritems(): 574 610 output = str(key)+" | "+str(value["used"])+"\t| "+str(value["id"])+"\t| "+str(value["DAGrank"])+"\t| "+str(value["RESchannelOffset"])+"\t| "+str(value["linkQuality"])+"\t| "+str(value["confidence"])+"\t| "+str(value["numSent"])+"\t| "+str(value["numSentOK"])+"\t| "+str(value["lastHeardTimeStamp"])+"\n" … … 577 613 elements[serial_port]["STATUS_NEIGHBORSP_NEIGHBORS"]["TABLE_ELEM"].insert(END,output,("last_row")) 578 614 except: 579 pass 615 print "ERROR 20" 616 err = sys.exc_info() 617 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 580 618 else: 581 619 try: 582 620 elements[serial_port]["STATUS_NEIGHBORSP_NEIGHBORS"]["TABLE_ELEM"].insert(END,output) 583 621 except: 584 pass 622 print "ERROR 21" 623 err = sys.exc_info() 624 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 585 625 586 626 def recordOngoingResRow(serial_port,input): … … 589 629 text.insert(END,"input too short to be status message from ReservationP ("+str(len(input))+" chars)\n") 590 630 except: 591 pass 631 print "ERROR 22" 632 err = sys.exc_info() 633 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 592 634 return 593 635 #bytes 4 and 5 is the length … … 634 676 elements[serial_port]["STATUS_RESERVATIONP_ONGOINGRES"]["TABLE_ELEM"].insert(END,output) 635 677 except: 636 pass 678 print "ERROR 23" 679 err = sys.exc_info() 680 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 637 681 for key, value in elements[serial_port]["STATUS_RESERVATIONP_ONGOINGRES"]["TABLE"].iteritems(): 638 682 output = str(key)+" | "+str(value["todo"])+"\t| "+str(value["type"])+"\t| "+str(value["neighbor"])+"\t| "+str(value["retries"])+"\t| "+str(value["randomCell"])+"\t| "+str(value["slotOffset"])+"\t| "+str(value["channelOffset"])+"\t| "+str(value["localRequester"])+"\t| "+str(value["outcome"])+"\t| "+str(value["timestamp"])+"\n" … … 641 685 elements[serial_port]["STATUS_RESERVATIONP_ONGOINGRES"]["TABLE_ELEM"].insert(END,output,("last_row")) 642 686 except: 643 pass 687 print "ERROR 24" 688 err = sys.exc_info() 689 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 644 690 else: 645 691 try: 646 692 elements[serial_port]["STATUS_RESERVATIONP_ONGOINGRES"]["TABLE_ELEM"].insert(END,output) 647 693 except: 648 pass 694 print "ERROR 25" 695 err = sys.exc_info() 696 sys.stderr.write( "Error serialRx:%s (%s) \n" % (str(err[0]), str(err[1]))) 649 697 650 698 #================================= GUI ============================== -
apps/TSCH/deploy.sh
r222 r225 2 2 make telosb install.1 bsl,20 3 3 make telosb install.2 bsl,21 4 #make telosb install.3 bsl,224 make telosb install.3 bsl,22 5 5 6 6 #make telosb install.4 bsl,23 -
apps/TSCH/neighbors/NeighborsP.nc
r224 r225 40 40 debugNeighborEntry_t temp; 41 41 debugRow = (debugRow+1)%MAXNUMNEIGHBORS; 42 debugRow = 0;//poipoi43 42 temp.row = debugRow; 44 43 temp.neighborEntry = neighbors[debugRow]; … … 60 59 call DeQueue.removeAllPacketsToNeighbor(deadNeighbor); 61 60 call ReservationUpdate.removeAllOngoingResToNeighbor(deadNeighbor); 62 //call SerialIO.printError(COMPONENT_NEIGHBORS,ERR_REMOVE_NEIGHBOR,(uint16_t)deadNeighbor,0); 63 call SerialIO.printError(COMPONENT_NEIGHBORS,ERR_REMOVE_NEIGHBOR, 64 (uint16_t)((actualTimeSinceLastHeard & 0xFFFF0000)>>16), 65 (uint16_t)(actualTimeSinceLastHeard & 0x0000FFFF)); 61 call SerialIO.printError(COMPONENT_NEIGHBORS,ERR_REMOVE_NEIGHBOR,(uint16_t)deadNeighbor,0); 66 62 } 67 63 } … … 76 72 neighbors[i].numSent++; 77 73 if (ack==TRUE) { 78 neighbors[i].lastHeardTimestamp=timestamp; //poipoi: error is here74 neighbors[i].lastHeardTimestamp=timestamp; 79 75 neighbors[i].numSentOK++; 80 76 } -
apps/TSCH/reservation/ReservationP.nc
r223 r225 90 90 } else { 91 91 ongoingRes[i].outcome = FAIL; 92 if (ongoingRes[i].localRequester==LOCAL) {93 if (call CellUsageSet.setUsage(ongoingRes[i].slotOffset,CELLTYPE_OFF,0,0)==FAIL) {94 call SerialIO.printError(COMPONENT_RESERVATION,ERR_SETUSAGE_OFF_FAILED,(uint16_t)ongoingRes[i].slotOffset,(uint16_t)ongoingRes[i].channelOffset);95 }96 }97 92 ongoingRes[i].todo = INFORM_REQUESTER; 98 93 } -
apps/TSCH/tschqueue/TSCHQueueP.nc
r224 r225 28 28 29 29 task void taskPrintTable(); 30 task void sendDoneTaskDATA();31 task void sendDoneTaskKA();32 void sendDoneTaskRES();33 void sendDoneTaskADV();30 task void taskSendDoneDATA(); 31 task void taskSendDoneKA(); 32 task void taskSendDoneRES(); 33 task void taskSendDoneADV(); 34 34 35 35 void informRequester(); … … 46 46 } 47 47 48 task void sendDoneTaskDATA() {48 task void taskSendDoneDATA() { 49 49 signal SendDATA.sendDone(current_msg,current_error); 50 50 busy=FALSE; 51 51 } 52 52 53 task void sendDoneTaskKA() {53 task void taskSendDoneKA() { 54 54 signal SendKA.sendDone(current_msg,current_error); 55 55 busy=FALSE; 56 56 } 57 57 58 void sendDoneTaskRES() {58 task void taskSendDoneRES() { 59 59 signal SendRES.sendDone(current_msg, current_error); 60 60 busy=FALSE; 61 61 } 62 62 63 void sendDoneTaskADV(){63 task void taskSendDoneADV(){ 64 64 signal SendADV.sendDone(current_msg,current_error); 65 65 busy=FALSE; … … 105 105 if (((cc2420_header_t*)current_msg->header)->length==sizeof(cc2420_header_t)+1) {//KA 106 106 busy = TRUE; 107 post sendDoneTaskKA();107 post taskSendDoneKA(); 108 108 } else {//DATA 109 109 busy = TRUE; 110 post sendDoneTaskDATA();110 post taskSendDoneDATA(); 111 111 } 112 112 break; 113 113 case AM_TSCH_RES: 114 114 busy = TRUE; 115 sendDoneTaskRES();115 post taskSendDoneRES(); 116 116 break; 117 117 case AM_TSCH_ADV: 118 118 busy = TRUE; 119 sendDoneTaskADV();119 post taskSendDoneADV(); 120 120 break; 121 121 case AM_TSCH_ACK:
Note: See TracChangeset
for help on using the changeset viewer.
