@@ -582,13 +582,13 @@ void radioToPcLinkStatus(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint
582582 printf ("VC %d ALIVE\n" , srcVc );
583583 COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
584584 virtualCircuitList [srcVc ].commandTimer ,
585- CMD_AT_CMDVC );
585+ CMD_WAIT_CONNECTED );
586586 COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
587587 virtualCircuitList [srcVc ].commandTimer ,
588588 CMD_ATC );
589589 COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
590590 virtualCircuitList [srcVc ].commandTimer ,
591- CMD_WAIT_CONNECTED );
591+ CMD_AT_CMDVC );
592592 }
593593
594594 if (DISPLAY_VC_STATE )
@@ -621,38 +621,25 @@ void radioToPcLinkStatus(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint
621621 break ;
622622
623623 case VC_STATE_CONNECTED :
624+ if ((previousState == VC_STATE_LINK_DOWN ) && (srcVc < MAX_VC )
625+ && (!COMMAND_PENDING (virtualCircuitList [srcVc ].commandQueue , CMD_WAIT_CONNECTED )))
626+ {
627+ //Issue the necessary commands when the link is connected
628+ COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
629+ virtualCircuitList [srcVc ].commandTimer ,
630+ CMD_WAIT_CONNECTED );
631+ }
624632 if (DEBUG_PC_CMD_ISSUE )
625633 printf ("VC %d CONNECTED\n" , srcVc );
626- if (COMMAND_PENDING (pcCommandQueue , CMD_ATC )
627- && (pcActiveCommand == CMD_ATC ) && (srcVc == pcCommandVc ))
634+ if ((pcActiveCommand == CMD_ATC ) && COMMAND_PENDING (pcCommandQueue , CMD_ATC ))
628635 {
629- if (virtualCircuitList [srcVc ].activeCommand == CMD_ATC )
630- COMMAND_COMPLETE (virtualCircuitList [srcVc ].commandQueue , virtualCircuitList [srcVc ].activeCommand );
631- COMMAND_COMPLETE (pcCommandQueue , pcActiveCommand );
636+ if (srcVc == pcCommandVc )
637+ COMMAND_COMPLETE (pcCommandQueue , pcActiveCommand );
638+ if ((pcCommandVc < MAX_VC ) && (virtualCircuitList [pcCommandVc ].activeCommand == CMD_ATC ))
639+ COMMAND_COMPLETE (virtualCircuitList [pcCommandVc ].commandQueue , virtualCircuitList [srcVc ].activeCommand );
632640 }
633641 if (DISPLAY_VC_STATE )
634642 printf ("======= VC %d CONNECTED ======\n" , srcVc );
635- if (srcVc != myVc )
636- {
637- COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
638- virtualCircuitList [srcVc ].commandTimer ,
639- CMD_AT_CMDVC_2 );
640- COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
641- virtualCircuitList [srcVc ].commandTimer ,
642- CMD_ATI31 );
643- COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
644- virtualCircuitList [srcVc ].commandTimer ,
645- CMD_ATI_2 );
646- COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
647- virtualCircuitList [srcVc ].commandTimer ,
648- CMD_ATI8_2 );
649- COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
650- virtualCircuitList [srcVc ].commandTimer ,
651- CMD_ATI11 );
652- COMMAND_ISSUE (virtualCircuitList [srcVc ].commandQueue ,
653- virtualCircuitList [srcVc ].commandTimer ,
654- CHECK_FOR_UPDATE );
655- }
656643 break ;
657644 }
658645
@@ -1218,9 +1205,9 @@ bool issueVcCommands(int vcIndex)
12181205 {
12191206 if (DEBUG_PC_CMD_ISSUE )
12201207 printf ("Migrating AT-CMDVC=%d and ATC commands to PC command queue\n" , vcIndex );
1221- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_AT_CMDVC );
12221208 if (COMMAND_PENDING (virtualCircuitList [vcIndex ].commandQueue , CMD_ATC ))
12231209 COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATC );
1210+ COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_AT_CMDVC );
12241211 return true;
12251212 }
12261213 virtualCircuitList [vcIndex ].activeCommand = CMD_LIST_SIZE ;
@@ -1242,23 +1229,37 @@ bool issueVcCommands(int vcIndex)
12421229 COMMAND_COMPLETE (virtualCircuitList [vcIndex ].commandQueue ,
12431230 virtualCircuitList [vcIndex ].activeCommand );
12441231
1232+ //Get the sprinkler controller information
1233+ if (vcIndex != myVc )
1234+ {
1235+ COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
1236+ virtualCircuitList [vcIndex ].commandTimer ,
1237+ CHECK_FOR_UPDATE );
1238+ COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
1239+ virtualCircuitList [vcIndex ].commandTimer ,
1240+ CMD_ATI11 );
1241+ COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
1242+ virtualCircuitList [vcIndex ].commandTimer ,
1243+ CMD_ATI8_2 );
1244+ COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
1245+ virtualCircuitList [vcIndex ].commandTimer ,
1246+ CMD_ATI_2 );
1247+ }
1248+
12451249 //Get the VC state
1246- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_AT_CMDVC_2 );
1250+ if (vcIndex != myVc )
1251+ COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
1252+ virtualCircuitList [vcIndex ].commandTimer ,
1253+ CMD_ATI31 );
12471254 COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI31 );
1255+ if (vcIndex != myVc )
1256+ COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
1257+ virtualCircuitList [vcIndex ].commandTimer ,
1258+ CMD_AT_CMDVC_2 );
1259+ COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_AT_CMDVC_2 );
12481260 break ;
12491261
12501262 case CMD_AT_CMDVC_2 :
1251- //Determine if the local command processor is idle
1252- if (commandProcessorIdle (vcIndex ))
1253- {
1254- if (DEBUG_PC_CMD_ISSUE )
1255- printf ("Migrating AT-CMDVC_2 and ATI31 commands to PC command queue\n" );
1256- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_AT_CMDVC_2 );
1257- if (COMMAND_PENDING (virtualCircuitList [vcIndex ].commandQueue , CMD_ATI31 ))
1258- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI31 );
1259- return true;
1260- }
1261- virtualCircuitList [vcIndex ].activeCommand = CMD_LIST_SIZE ;
12621263 return true;
12631264
12641265 case CMD_ATI31 :
@@ -1277,21 +1278,22 @@ bool issueVcCommands(int vcIndex)
12771278 return true;
12781279
12791280 case CHECK_FOR_UPDATE :
1281+ //Done with the CHECK_FOR_UPDATE command
1282+ COMMAND_COMPLETE (virtualCircuitList [vcIndex ].commandQueue ,
1283+ virtualCircuitList [vcIndex ].activeCommand );
1284+
1285+ //Determine if the sprinkler controller needs to be programmed
12801286 if ((!virtualCircuitList [vcIndex ].programUpdated )
12811287 || (virtualCircuitList [vcIndex ].programUpdated > virtualCircuitList [vcIndex ].programmed ))
12821288 {
12831289 //Complete the programming
12841290 COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
12851291 virtualCircuitList [vcIndex ].commandTimer ,
1286- CMD_ATI12 );
1292+ PROGRAMMING_COMPLETED );
12871293 COMMAND_ISSUE (virtualCircuitList [vcIndex ].commandQueue ,
12881294 virtualCircuitList [vcIndex ].commandTimer ,
1289- PROGRAMMING_COMPLETED );
1295+ CMD_ATI12 );
12901296 }
1291-
1292- //Done with the CHECK_FOR_UPDATE command
1293- COMMAND_COMPLETE (virtualCircuitList [vcIndex ].commandQueue ,
1294- virtualCircuitList [vcIndex ].activeCommand );
12951297 return true;
12961298
12971299 case PROGRAMMING_COMPLETED :
@@ -1419,10 +1421,10 @@ int main(int argc, char **argv)
14191421
14201422 //Perform the initialization commands
14211423 pcCommandTimer = 1 ;
1422- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI30 ); //Get myVC
1423- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI ); //Get Radio type
1424- COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI8 ); //Get Radio unique ID
14251424 COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATA ); //Get all the VC states
1425+ COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI8 ); //Get Radio unique ID
1426+ COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI ); //Get Radio type
1427+ COMMAND_ISSUE (pcCommandQueue , pcCommandTimer , CMD_ATI30 ); //Get myVC
14261428
14271429 //Break the links if requested
14281430 if (breakLinks )
0 commit comments