Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 25 additions & 53 deletions Firmware/Tools/VcServerTest.c
Original file line number Diff line number Diff line change
Expand Up @@ -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: "
Expand All @@ -35,11 +35,11 @@
#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
#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))
Expand Down Expand Up @@ -90,59 +90,32 @@
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

//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_ATI31, //Get the VC state
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
} COMMANDS;

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",
"ATI30", "ATIB", "ATA", "AT-CMDVC", "ATC",
"WAIT_CONNECT",
"AT-CMDVC_2", "ATI31", "ATI", "ATI8",
};


typedef struct _VIRTUAL_CIRCUIT
{
int vcState;
Expand All @@ -161,7 +134,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;
Expand Down Expand Up @@ -470,7 +443,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;
Expand Down Expand Up @@ -605,7 +577,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);
}
Expand Down Expand Up @@ -869,18 +841,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;

Expand All @@ -906,10 +878,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;

Expand Down Expand Up @@ -1070,24 +1042,24 @@ 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:
//Determine if the local command processor is idle
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:
Expand Down Expand Up @@ -1212,7 +1184,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
Expand Down Expand Up @@ -1300,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;
Expand Down