From a008d7eaca8f0677654b1d9e0553d6bf346d4bfc Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 17 Mar 2023 08:25:59 -1000 Subject: [PATCH 1/6] VCT: BUG FIX - PC command queue type --- Firmware/Tools/VcServerTest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/Tools/VcServerTest.c b/Firmware/Tools/VcServerTest.c index 28de675f..a554f55d 100644 --- a/Firmware/Tools/VcServerTest.c +++ b/Firmware/Tools/VcServerTest.c @@ -161,7 +161,7 @@ int myVc = VC_SERVER; uint8_t outputBuffer[VC_SERIAL_HEADER_BYTES + BUFFER_SIZE]; uint32_t pcActiveCommand = CMD_LIST_SIZE; char pcCommandBuffer[128]; -uint8_t pcCommandQueue[COMMAND_QUEUE_SIZE]; +QUEUE_T pcCommandQueue[COMMAND_QUEUE_SIZE]; uint32_t pcCommandTimer; int pcCommandVc = MAX_VC; uint8_t remoteCommandVc; From 8d077793dce5c102bc5176c60f86e4f1d21d7f3a Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 17 Mar 2023 08:32:28 -1000 Subject: [PATCH 2/6] VCT: Remove sprinkler server stuff --- Firmware/Tools/VcServerTest.c | 43 ++++++----------------------------- 1 file changed, 7 insertions(+), 36 deletions(-) diff --git a/Firmware/Tools/VcServerTest.c b/Firmware/Tools/VcServerTest.c index a554f55d..95600863 100644 --- a/Firmware/Tools/VcServerTest.c +++ b/Firmware/Tools/VcServerTest.c @@ -39,7 +39,6 @@ #define DISPLAY_UNKNOWN_COMMANDS 0 #define DISPLAY_VC_STATE 0 #define DUMP_RADIO_TO_PC 0 -#define SEND_ATC_COMMAND 1 #define QUEUE_T uint32_t #define QUEUE_T_BITS ((int)(sizeof(QUEUE_T) * 8)) @@ -93,40 +92,17 @@ typedef enum CMD_ATI11 = 0, //Get myVC CMD_ATB, //Break all VC links CMD_ATA, //Get VC status + + //Connect to the remote radio CMD_AT_CMDVC, //Select target VC CMD_ATC, //Start the 3-way handshake CMD_WAIT_CONNECTED, //Wait until the client is connected + + //Get remote radio connection status, type and ID CMD_AT_CMDVC_2, //Select target VC CMD_ATI12, //Get the VC state - CMD_GET_SERVER_MODEL, //Get the model name - CMD_GET_CLIENT_MODEL, //Get the model name CMD_ATI, //Get the device type CMD_ATI8, //Get the radio's unique ID - CMD_AT_DISABLE_CONTROLLER, //Disable the sprinkler controller - CMD_AT_DAY_OF_WEEK, //Set the day of week - CMD_AT_TIME_OF_DAY, //Set the time of day - CMD_ATI89, //Display the date and time - - //Select the solenoids for each of the zone - CMD_SELECT_ZONE, //Select the zone number - CMD_SELECT_SOLENOID, //Select the solenoid for the zone - COMPLETE_ZONE_CONFIGURATION,//Verify that all of the zones are configured - - //Set the start times - CMD_SET_DAY_OF_WEEK, //Set the day of the week - CMD_SET_START_TIME, //Set the start time - CMD_SET_ALL_START_TIMES, //Verify that all of the start times are set - - //Set the zone durations - CMD_SET_DAY_OF_WEEK_2, //Set the day of the week - CMD_SELECT_ZONE_2, //Select the zone number - CMD_SET_ZONE_DURATION, //Set the zone on duration - CMD_SET_ALL_DURATIONS, //Verify that all of the durations are set - -/* -#define SET_MANUAL_ON "AT-ZoneManualOn=" -#define SET_ZONE_DURATION "AT-ZoneDuration=" -*/ //Last in the list CMD_LIST_SIZE @@ -134,15 +110,11 @@ typedef enum const char * const commandName[] = { - "ATI11", "ATIB", "ATA", "AT-CMDVC", "ATC", "WAIT_CONNECT", "AT-CMDVC_2", "ATI12", - "ATI93", "ATI81", "ATI", "ATI8", "AT-EnableController=0", - "AT-DayOfWeek", "AT-TimeOfDay", "ATI89", - "AT-CommandZone", "AT-LatchingSolenoid", "COMPLETE_ZONE_CONFIGURATION", - "AT-CommandDay", "AT-StartTime", "CMD_SET_ALL_START_TIMES", - "AT-CommandDay-2", "AT-CommandZone-2", "AT-ZoneDuration", "CMD_SET_ALL_DURATIONS", + "ATI11", "ATIB", "ATA", "AT-CMDVC", "ATC", + "WAIT_CONNECT", + "AT-CMDVC_2", "ATI12", "ATI", "ATI8", }; - typedef struct _VIRTUAL_CIRCUIT { int vcState; @@ -470,7 +442,6 @@ int hostToStdout(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint8_t byte void radioToPcLinkStatus(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint8_t length) { - int durationBase; int newState; int previousState; int srcVc; From 51d2cafc1bda5a81e1d40e9bf1d80e4a0d0b2637 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 17 Mar 2023 08:19:47 -1000 Subject: [PATCH 3/6] VCT: Use proper VC commands, remove some sprinkler server stuff --- Firmware/Tools/VcServerTest.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Firmware/Tools/VcServerTest.c b/Firmware/Tools/VcServerTest.c index 95600863..2e9bee21 100644 --- a/Firmware/Tools/VcServerTest.c +++ b/Firmware/Tools/VcServerTest.c @@ -22,7 +22,7 @@ #define GET_DEVICE_INFO "ati" #define GET_MY_VC_ADDRESS "ati30" #define GET_UNIQUE_ID "ati8" -#define GET_VC_STATE "ati12" +#define GET_VC_STATE "ati31" #define GET_VC_STATUS "ata" #define LINK_RESET_COMMAND "atz" #define MY_VC_ADDRESS "myVc: " @@ -89,7 +89,7 @@ typedef enum { //List commands in priority order - CMD_ATI11 = 0, //Get myVC + CMD_ATI30 = 0, //Get myVC CMD_ATB, //Break all VC links CMD_ATA, //Get VC status @@ -100,7 +100,7 @@ typedef enum //Get remote radio connection status, type and ID CMD_AT_CMDVC_2, //Select target VC - CMD_ATI12, //Get the VC state + CMD_ATI31, //Get the VC state CMD_ATI, //Get the device type CMD_ATI8, //Get the radio's unique ID @@ -110,9 +110,9 @@ typedef enum const char * const commandName[] = { - "ATI11", "ATIB", "ATA", "AT-CMDVC", "ATC", + "ATI30", "ATIB", "ATA", "AT-CMDVC", "ATC", "WAIT_CONNECT", - "AT-CMDVC_2", "ATI12", "ATI", "ATI8", + "AT-CMDVC_2", "ATI31", "ATI", "ATI8", }; typedef struct _VIRTUAL_CIRCUIT @@ -576,7 +576,7 @@ void radioToPcLinkStatus(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint else { COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_AT_CMDVC_2); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI12); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI31); COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI); COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI8); } @@ -840,18 +840,18 @@ void issuePcCommands() cmdToRadio((uint8_t *)BREAK_LINKS_COMMAND, strlen(BREAK_LINKS_COMMAND)); return; - case CMD_ATI11: //Get myVC + case CMD_ATI30: //Get myVC if (myVc == VC_UNASSIGNED) { //Get myVc address if (DEBUG_PC_CMD_ISSUE) - printf("Issuing ATI11 command\n"); + printf("Issuing ATI30 command\n"); findMyVc = true; cmdToRadio((uint8_t *)GET_MY_VC_ADDRESS, strlen(GET_MY_VC_ADDRESS)); return; } if (DEBUG_PC_CMD_ISSUE) - printf("Skipping ATI11 command, myVC already known\n"); + printf("Skipping ATI30 command, myVC already known\n"); COMMAND_COMPLETE(pcCommandQueue, pcActiveCommand); break; @@ -877,10 +877,10 @@ void issuePcCommands() cmdToRadio((uint8_t *)START_3_WAY_HANDSHAKE, strlen(START_3_WAY_HANDSHAKE)); return; - case CMD_ATI12: + case CMD_ATI31: //Get the VC state if (DEBUG_PC_CMD_ISSUE) - printf("Issuing ATI12 command\n"); + printf("Issuing ATI31 command\n"); cmdToRadio((uint8_t *)GET_VC_STATE, strlen(GET_VC_STATE)); return; @@ -1041,7 +1041,7 @@ bool issueVcCommands(int vcIndex) //Get the VC state COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_AT_CMDVC_2); - COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI12); + COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI31); break; case CMD_AT_CMDVC_2: @@ -1049,16 +1049,16 @@ bool issueVcCommands(int vcIndex) if (commandProcessorIdle(vcIndex)) { if (DEBUG_PC_CMD_ISSUE) - printf("Migrating AT-CMDVC and ATI12 commands to PC command queue\n"); + printf("Migrating AT-CMDVC and ATI31 commands to PC command queue\n"); COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_AT_CMDVC_2); - if (COMMAND_PENDING(virtualCircuitList[vcIndex].commandQueue, CMD_ATI12)) - COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI12); + if (COMMAND_PENDING(virtualCircuitList[vcIndex].commandQueue, CMD_ATI31)) + COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI31); return true; } virtualCircuitList[vcIndex].activeCommand = CMD_LIST_SIZE; return true; - case CMD_ATI12: + case CMD_ATI31: return true; case CMD_ATI: @@ -1183,7 +1183,7 @@ int main(int argc, char **argv) //Perform the initialization commands pcCommandTimer = 1; - COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI11); //Get myVC + COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI30); //Get myVC COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATA); //Get all the VC states //Break the links if requested From c4fc88ee8b265856c85362a50fd0e4e039947345 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 17 Mar 2023 09:02:59 -1000 Subject: [PATCH 4/6] VCT: Add DISPLAY_RESOURCE_USAGE --- Firmware/Tools/VcServerTest.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Firmware/Tools/VcServerTest.c b/Firmware/Tools/VcServerTest.c index 2e9bee21..ab2aa7e1 100644 --- a/Firmware/Tools/VcServerTest.c +++ b/Firmware/Tools/VcServerTest.c @@ -35,6 +35,7 @@ #define DISPLAY_COMMAND_COMPLETE 0 #define DISPLAY_DATA_ACK 0 #define DISPLAY_DATA_NACK 1 +#define DISPLAY_RESOURCE_USAGE 0 #define DISPLAY_STATE_TRANSITION 0 #define DISPLAY_UNKNOWN_COMMANDS 0 #define DISPLAY_VC_STATE 0 @@ -1271,7 +1272,7 @@ int main(int argc, char **argv) // Check the resource usage //---------------------------------------- - if (!(timeoutCount % (ONE_SECOND_COUNT * 60))) + if (DISPLAY_RESOURCE_USAGE && (!(timeoutCount % (ONE_SECOND_COUNT * 60)))) { struct rusage usage; int s_days; From 1d802f387f629f96cbe3cff3cdb6e7e44afe1200 Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 17 Mar 2023 09:08:28 -1000 Subject: [PATCH 5/6] VCT: Reduce stall check from 15 seconds to 5 seconds --- Firmware/Tools/VcServerTest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/Tools/VcServerTest.c b/Firmware/Tools/VcServerTest.c index ab2aa7e1..8d3f9dd4 100644 --- a/Firmware/Tools/VcServerTest.c +++ b/Firmware/Tools/VcServerTest.c @@ -7,9 +7,9 @@ #define POLL_TIMEOUT_USEC 1000 #endif // POLL_TIMEOUT_USEC -#define ONE_SECOND_COUNT 20 // (1000000 / POLL_TIMEOUT_USEC) +#define ONE_SECOND_COUNT (1000000 / POLL_TIMEOUT_USEC) #define COMMAND_POLL_COUNT (ONE_SECOND_COUNT / 10) //100 mSec -#define STALL_CHECK_COUNT 15 * ONE_SECOND_COUNT //15 Sec +#define STALL_CHECK_COUNT 5 * ONE_SECOND_COUNT //5 Sec #define BUFFER_SIZE 2048 #define INPUT_BUFFER_SIZE BUFFER_SIZE From b868590dc75ff51b97abab92adb707652f5addbc Mon Sep 17 00:00:00 2001 From: Lee Leahy Date: Fri, 17 Mar 2023 09:16:38 -1000 Subject: [PATCH 6/6] VCT: Reorder command processing --- Firmware/Tools/VcServerTest.c | 104 +++++++++++++++++++--------------- 1 file changed, 59 insertions(+), 45 deletions(-) diff --git a/Firmware/Tools/VcServerTest.c b/Firmware/Tools/VcServerTest.c index 8d3f9dd4..d4ebcfab 100644 --- a/Firmware/Tools/VcServerTest.c +++ b/Firmware/Tools/VcServerTest.c @@ -92,6 +92,8 @@ typedef enum //List commands in priority order CMD_ATI30 = 0, //Get myVC CMD_ATB, //Break all VC links + CMD_ATI, //Get the device type + CMD_ATI8, //Get the radio's unique ID CMD_ATA, //Get VC status //Connect to the remote radio @@ -102,8 +104,8 @@ typedef enum //Get remote radio connection status, type and ID CMD_AT_CMDVC_2, //Select target VC CMD_ATI31, //Get the VC state - CMD_ATI, //Get the device type - CMD_ATI8, //Get the radio's unique ID + CMD_ATI_2, //Get the device type + CMD_ATI8_2, //Get the radio's unique ID //Last in the list CMD_LIST_SIZE @@ -111,9 +113,9 @@ typedef enum const char * const commandName[] = { - "ATI30", "ATIB", "ATA", "AT-CMDVC", "ATC", + "ATI30", "ATIB", "ATI", "ATI8", "ATA", "AT-CMDVC", "ATC", "WAIT_CONNECT", - "AT-CMDVC_2", "ATI31", "ATI", "ATI8", + "AT-CMDVC_2", "ATI31", "ATI_2", "ATI8_2", }; typedef struct _VIRTUAL_CIRCUIT @@ -526,9 +528,15 @@ void radioToPcLinkStatus(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint { if (DEBUG_PC_CMD_ISSUE) printf("VC %d ALIVE\n", srcVc); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_AT_CMDVC); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATC); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_WAIT_CONNECTED); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_AT_CMDVC); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_ATC); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_WAIT_CONNECTED); } if (DISPLAY_VC_STATE) @@ -567,24 +575,25 @@ void radioToPcLinkStatus(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uint { if (virtualCircuitList[srcVc].activeCommand == CMD_ATC) COMMAND_COMPLETE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].activeCommand); - - //Get the device information - if (srcVc == VC_SERVER) - { - COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI); - COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI8); - } - else - { - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_AT_CMDVC_2); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI31); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI); - COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].commandTimer, CMD_ATI8); - } } COMMAND_COMPLETE(pcCommandQueue, pcActiveCommand); if (DISPLAY_VC_STATE) printf("======= VC %d CONNECTED ======\n", srcVc); + if (srcVc != myVc) + { + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_AT_CMDVC_2); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_ATI31); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_ATI_2); + COMMAND_ISSUE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].commandTimer, + CMD_ATI8_2); + } break; } @@ -645,20 +654,23 @@ void radioCommandComplete(VC_SERIAL_MESSAGE_HEADER * header, uint8_t * data, uin { if (pcCommandVc < MAX_VC) { - COMMAND_COMPLETE(virtualCircuitList[pcCommandVc].commandQueue, virtualCircuitList[pcCommandVc].activeCommand); + COMMAND_COMPLETE(virtualCircuitList[pcCommandVc].commandQueue, + virtualCircuitList[pcCommandVc].activeCommand); } COMMAND_COMPLETE(pcCommandQueue, pcActiveCommand); } else if (virtualCircuitList[pcCommandVc].activeCommand < CMD_LIST_SIZE) { //This was a VC command - COMMAND_COMPLETE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].activeCommand); + COMMAND_COMPLETE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].activeCommand); } } else { //This was a VC command - COMMAND_COMPLETE(virtualCircuitList[srcVc].commandQueue, virtualCircuitList[srcVc].activeCommand); + COMMAND_COMPLETE(virtualCircuitList[srcVc].commandQueue, + virtualCircuitList[srcVc].activeCommand); } vcMsg = (VC_COMMAND_COMPLETE_MESSAGE *)data; @@ -835,12 +847,6 @@ void issuePcCommands() pcActiveCommand = cmd; switch (cmd) { - case CMD_ATB: //Break all of the VC links - if (DEBUG_PC_CMD_ISSUE) - printf("Issuing ATB command\n"); - cmdToRadio((uint8_t *)BREAK_LINKS_COMMAND, strlen(BREAK_LINKS_COMMAND)); - return; - case CMD_ATI30: //Get myVC if (myVc == VC_UNASSIGNED) { @@ -856,6 +862,24 @@ void issuePcCommands() COMMAND_COMPLETE(pcCommandQueue, pcActiveCommand); break; + case CMD_ATB: //Break all of the VC links + if (DEBUG_PC_CMD_ISSUE) + printf("Issuing ATB command\n"); + cmdToRadio((uint8_t *)BREAK_LINKS_COMMAND, strlen(BREAK_LINKS_COMMAND)); + return; + + case CMD_ATI: + if (DEBUG_PC_CMD_ISSUE) + printf("Issuing ATI command\n"); + cmdToRadio((uint8_t *)GET_DEVICE_INFO, strlen(GET_DEVICE_INFO)); + return; + + case CMD_ATI8: + if (DEBUG_PC_CMD_ISSUE) + printf("Issuing ATI8 command\n"); + cmdToRadio((uint8_t *)GET_UNIQUE_ID, strlen(GET_UNIQUE_ID)); + return; + case CMD_ATA: //Get all the VC states if (DEBUG_PC_CMD_ISSUE) printf("Issuing ATA command\n"); @@ -884,18 +908,6 @@ void issuePcCommands() printf("Issuing ATI31 command\n"); cmdToRadio((uint8_t *)GET_VC_STATE, strlen(GET_VC_STATE)); return; - - case CMD_ATI: - if (DEBUG_PC_CMD_ISSUE) - printf("Issuing ATI command\n"); - cmdToRadio((uint8_t *)GET_DEVICE_INFO, strlen(GET_DEVICE_INFO)); - return; - - case CMD_ATI8: - if (DEBUG_PC_CMD_ISSUE) - printf("Issuing ATI8 command\n"); - cmdToRadio((uint8_t *)GET_UNIQUE_ID, strlen(GET_UNIQUE_ID)); - return; } } } @@ -1050,7 +1062,7 @@ bool issueVcCommands(int vcIndex) if (commandProcessorIdle(vcIndex)) { if (DEBUG_PC_CMD_ISSUE) - printf("Migrating AT-CMDVC and ATI31 commands to PC command queue\n"); + printf("Migrating AT-CMDVC_2 and ATI31 commands to PC command queue\n"); COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_AT_CMDVC_2); if (COMMAND_PENDING(virtualCircuitList[vcIndex].commandQueue, CMD_ATI31)) COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI31); @@ -1062,11 +1074,11 @@ bool issueVcCommands(int vcIndex) case CMD_ATI31: return true; - case CMD_ATI: + case CMD_ATI_2: sendVcCommand(GET_DEVICE_INFO, vcIndex); return true; - case CMD_ATI8: + case CMD_ATI8_2: sendVcCommand(GET_UNIQUE_ID, vcIndex); return true; } @@ -1185,6 +1197,8 @@ int main(int argc, char **argv) //Perform the initialization commands pcCommandTimer = 1; COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI30); //Get myVC + COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI); //Get Radio type + COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATI8); //Get Radio unique ID COMMAND_ISSUE(pcCommandQueue, pcCommandTimer, CMD_ATA); //Get all the VC states //Break the links if requested