JLC test
Dependencies: PinDetect libmDot mbed-rtos mbed
commandline.cpp
- Committer:
- tmulrooney
- Date:
- 2016-01-30
- Revision:
- 2:376af6a70e8a
- Parent:
- 1:96c429800568
File content as of revision 2:376af6a70e8a:
/* ======================================== * Filename: commandLine.c * * Description: functions and operations needed for command line operation * * Copyright J-Factor Embedded Technologies 2015 * Copyright TJM Embedded Software 2015 * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF J-Factor Embedded Technologies. * * ======================================== */ //#include <project.h> #include "mbed.h" #include "stdio.h" #include "common.h" /** \file * \brief command line - contains all functions related to the command line. */ /* externals */ /* Globals */ char line[LINE_SIZE]; //!< character array read char lastLine[NUM_LINES][LINE_SIZE]; //!< array of previous command lines int8 indexNextLineIn = 0; //!< index of next position to save current command line int8 indexNextLineOut = 0; //!< index of next position to read out saved comman dlines int8 linesInBuffer = 0; //!< number of lines in command line buffer uint8 enableCLI = 1; uint8 escapeSeen = 0; //!< escape character seen int8 charCount; //!< number of characters in the current command line int8 cursorPosition; //!< current cursor position in the current command line char TransmitBuffer[TRANSMIT_BUFFER_SIZE]; //!< charaters to be sent to the console uint8 ptrCmd = 0; uint8 binaryParameter; //!< result of any 8 bit integer read operation uint16 digitalParameter; //!< result of any 16 bit integer read operation float analogParameter; //!< result of any floating point read operation char *validCmds[] = {"help","version","read","readReg","write","writeReg","info","find","run","stop","date","hvstate"}; //!< array of valid commands - case insensitive uint16 regAddress; uint16 regLength; uint8 regData[MAX_REGISTER_DATA]; /** * \fn getLine * * \brief Reads characters from UART and retuns a line when new line seen. * if enableCLI == 1 - process input characters<p> * if enableCLI == 0 - return 0<p> * * will call UART_1_CetChar() to get the next character.<p> * if ch == 0 - no character available<p> * if ch != 0 - add ch to line array<p> * features: <p> * up arrow will go through last NUM_LINES commands. <p> * backspace will remove last typed character<p> * * \return uint8 - 0 - no character ready or line not finished, 1 - line complete (CR seen)<p> * */ uint8 getLine() { /* Variable to store UART received character */ uint8 ch,i; /* check if CLI enabled */ if(enableCLI == 0) return 0; /* Non-blocking call to get the latest data recieved */ if(pc.readable()) ch = pc.getc(); else ch = '\0'; /* Set flags based on UART command */ switch(ch) { case 0: /* No new data was recieved */ return 0; case 0x1B: /* up arrow seen */ escapeSeen = 1; break; case '\n': /* new line seen */ case '\r': pc.printf("\r\n"); line[charCount] = '\0'; charCount = 0; cursorPosition = charCount; escapeSeen = 0; if(strlen(line) > 0) { strcpy(&lastLine[indexNextLineIn][0],line); /* save current command line in buffer */ if(linesInBuffer < NUM_LINES) linesInBuffer++; indexNextLineIn++; /* point to next free space in command line buffer */ if(indexNextLineIn == NUM_LINES - 1) /* wrap around if past end */ indexNextLineIn = 0; indexNextLineOut = indexNextLineIn; } return 1; default: // sprintf(TransmitBuffer,"char: %02X %c charCount: %d\r\n",ch,ch,charCount); // UART_1_PutString(TransmitBuffer); if( (escapeSeen == 1) && (ch == '[') ) { escapeSeen++; break; } else if( (escapeSeen == 2) && (ch == 'A') ) /* look for up arrow escape sequence */ { if(linesInBuffer == 0) break; indexNextLineOut--; /* point to last line in */ if(indexNextLineOut < 0) /* check if wrap around */ { if(linesInBuffer < NUM_LINES) indexNextLineOut = linesInBuffer -1; else indexNextLineOut = NUM_LINES - 1; } strcpy(line,&lastLine[indexNextLineOut][0]); /* copy command line from buffer to command line */ charCount = strlen(line); cursorPosition = charCount; escapeSeen = 0; pc.printf("\r"); for (i=0;i<sizeof(line);i++) /* clear line of last command */ pc.printf(" "); sprintf(TransmitBuffer,"\r%s cmd>%s",time_string,line); /* restore with selected command */ pc.printf(TransmitBuffer); break; } else if( (escapeSeen == 2) && (ch == 'D') ) /* look for left arrow escape sequence */ { if( cursorPosition > 0 ) { pc.printf("\b"); cursorPosition--; } escapeSeen = 0; break; } else if( (escapeSeen == 2) && (ch == 'C') ) /* look for right arrow escape sequence */ { if( cursorPosition < charCount ) { sprintf(TransmitBuffer,"%c",line[cursorPosition]); pc.printf(TransmitBuffer); cursorPosition++; } escapeSeen = 0; break; } else if( (ch == 0x7F) || (ch == '\b') ) /* backspace seen */ { if( (charCount > 0) && (charCount == cursorPosition) ) { pc.printf("\b \b"); charCount--; cursorPosition = charCount; line[charCount] = '\0'; } } else { if(charCount < (LINE_SIZE - 1)) { sprintf(TransmitBuffer,"%c",ch); pc.printf(TransmitBuffer); if(charCount != cursorPosition) /* move characters at cursor up to fit in new character */ { for(i = charCount ; i > cursorPosition; i--) line[i] = line[i-1]; line[cursorPosition] = ch; line[++charCount] = '\0'; for (i=cursorPosition + 1;i<charCount;i++) { sprintf(TransmitBuffer,"%c",line[i]); pc.printf(TransmitBuffer); } cursorPosition = charCount; } else { line[charCount++] = ch; cursorPosition = charCount; } } } break; } return 0; } /** * \fn executeCmd * * \brief executes the command in line array. * * calls getCmd to parse command and then switches to proper command handler. * command list kept short for simplicity.<p> * read, write, and info command will read and verify parametsr on command line. * \return None<p> * */ void executeCmd() { int8 cmd; uint8 type,i; int32 convertFloat1,convertFloat2; float floatValue; int value,num, pos; char str[40] = "", str2[40] = ""; uint8 statusRegister; cmd = getCmd(); // sprintf(TransmitBuffer,"cmd: %d ptrCmd: %d\r\n",cmd,ptrCmd); // UART_1_PutString(TransmitBuffer); /* execute command */ switch (cmd) { case HELP: pc.printf("Valid Commands (case insensitive)\r\n"); pc.printf("find [string] - find all parameters or all parameters that contain the string\r\n"); pc.printf("help - display list of valid commands\r\n"); pc.printf("info [parameter]- display info on all or parameter\r\n"); pc.printf("read parameter - read value of parameter\r\n"); pc.printf("readReg parameter register length - read N values from parameter registers\r\n"); pc.printf("version - display version information\r\n"); pc.printf("write parameter register value - write value to parameter register\r\n"); pc.printf("writeReg parameter value - write value to parameter\r\n"); pc.printf("run - start control running\r\n"); pc.printf("stop - stop control running\r\n"); pc.printf("date [date string]- display/set current time and date\r\n"); pc.printf("hvstate - current HV status\r\n"); break; case DATE: num = sscanf(&line[ptrCmd],"%s",str); /* optional parameter on the command line - date string */ if(num > 0) { setDate(&line[ptrCmd]); } date(); sprintf(TransmitBuffer,"current time is %s\r\n",c_time_string); pc.printf(TransmitBuffer); break; case VERSION: printVersion(); // sprintf(TransmitBuffer,"PSK15-5 CSE: V%d.%02d %s\r\n",VERSION_MAJOR,VERSION_MINOR,VERSION_DATE); // UART_1_PutString(TransmitBuffer); // sprintf(TransmitBuffer,"Built on: %s %s\r\n",__DATE__,__TIME__); // UART_1_PutString(TransmitBuffer); break; case READ: num = sscanf(&line[ptrCmd],"%s",str); /* expecting one parameter on the command line - parameter name */ if(num == 1) { num = getParameter(str); /* get paramter position in parameters array from paramter name */ if (num >= 0) { type = readParam(num); /* read paramter value and return parameter type */ if(type == BINARY) { sprintf(TransmitBuffer,"%s: %d %s\r\n",parameters[num].name,binaryParameter,parameters[num].uints); } else if(type == DIGITAL) { sprintf(TransmitBuffer,"%s: %d %s\r\n",parameters[num].name,digitalParameter,parameters[num].uints); } else if(type == ANALOG) { convertFloat1 = analogParameter * 100.0; sprintf(TransmitBuffer,"%s: %ld.%02ld %s\r\n",parameters[num].name,convertFloat1/100,convertFloat1%100,parameters[num].uints); } pc.printf(TransmitBuffer); } else { sprintf(TransmitBuffer,"Invalid parameter\r\nType help for list of valid parameters\r\n"); pc.printf(TransmitBuffer); } } else { sprintf(TransmitBuffer,"Missing parameter\r\nformat: read parameter\r\n"); pc.printf(TransmitBuffer); } break; case READ_REG: num = sscanf(&line[ptrCmd],"%s %X %X",str, ®Address, ®Length); if(num < 0) { sprintf(TransmitBuffer,"Missing parameter\r\nformat: read parameter [Reg Address (hex)] [Length (hex)]\r\n"); pc.printf(TransmitBuffer); return; } pos = getParameter(str); /* get paramter position in parameters array from paramter name */ if(pos == -1) { sprintf(TransmitBuffer,"Invalid parameter\r\nType help for list of valid parameters\r\n"); pc.printf(TransmitBuffer); return; } switch(num) { case 1: regAddress = 0; regLength = 1; break; case 2: regLength = 1; break; case 3: break; } type = readParam(pos); /* read paramter value and return parameter type */ for(i=0; i< bytesRead; i++) { if( i == 0 ) pc.printf("%04X ",regAddress); else if( (i % 0x10) == 0 ) pc.printf("\r\n%04X ",regAddress + i); pc.printf("%02X ",regData[i]); } pc.printf("\r\n"); break; #if 0 case WRITE: floatValue = 0.0; num = sscanf(&line[ptrCmd],"%s %s",str,str2); /* expecting two parameters on the command line - parameter name and parameter value */ if(num == 2) { num = getParameter(str); /* get paramter position in parameters array from paramter name */ if (num >= 0) { type = readParam(num); /* read paramter value and return parameter type */ if(type == ANALOG) { floatValue = strtofloat(str2); /* paramters name and floating point number */ } else { sscanf(&line[ptrCmd],"%s %d",str,&value); /* parameters name and integer value */ } if(type == BINARY) { if(value > parameters[num].maxInt) { sprintf(TransmitBuffer,"%d exceeds maximum value %d\r\n",value,parameters[num].maxInt); } else { writeParam(num,value,floatValue); type = readParam(num); sprintf(TransmitBuffer,"%s: %d %s\r\n",parameters[num].name,binaryParameter,parameters[num].uints); } } else if(type == DIGITAL) { if(value > parameters[num].maxInt) { sprintf(TransmitBuffer,"%d %s exceeds maximum value %d %s\r\n",value,parameters[num].uints,parameters[num].maxInt,parameters[num].uints); } else if(value < parameters[num].minInt) { sprintf(TransmitBuffer,"%d %s less than minimum value %d %s\r\n",value,parameters[num].uints,parameters[num].minInt,parameters[num].uints); } else { writeParam(num,value,floatValue); type = readParam(num); sprintf(TransmitBuffer,"%s: %d %s\r\n",parameters[num].name,digitalParameter,parameters[num].uints); } } else if(type == ANALOG) { if(floatValue > parameters[num].maxFloat) { convertFloat1 = floatValue * 100; convertFloat2 = parameters[num].maxFloat * 100; sprintf(TransmitBuffer,"%ld.%02ld %s exceeds maximum value %ld.%02ld %s\r\n",convertFloat1/100,convertFloat1%100,parameters[num].uints,convertFloat2/100,convertFloat2%100,parameters[num].uints); } else if(floatValue < parameters[num].minFloat) { convertFloat1 = floatValue * 100; convertFloat2 = parameters[num].minFloat * 100; sprintf(TransmitBuffer,"%ld.%02ld %s is less than value %ld.%02ld %s\r\n",convertFloat1/100,convertFloat1%100,parameters[num].uints,convertFloat2/100,convertFloat2%100,parameters[num].uints); } else { writeParam(num,value,floatValue); type = readParam(num); convertFloat1 = analogParameter * 100; sprintf(TransmitBuffer,"%s: %ld.%02ld %s\r\n",parameters[num].name,convertFloat1/100,convertFloat1%100,parameters[num].uints); } } pc.printf(TransmitBuffer); } else { pc.printf("Invalid parameter\r\nType help for list of valid parameters\r\n"); } } else { pc.printf("Missing parameter(s)\r\nformat: write parameter value\r\n"); } break; #endif case WRITE_REG: num = sscanf(&line[ptrCmd],"%s %X %X",str, ®Address, ®Data); if(num != 3) { pc.printf("Missing parameter\r\nformat: write parameter Reg Address (hex) Value (hex)\r\n"); return; } pos = getParameter(str); /* get paramter position in parameters array from paramter name */ if(pos == -1) { sprintf(TransmitBuffer,"Invalid parameter\r\nType help for list of valid parameters\r\n"); pc.printf(TransmitBuffer); return; } writeParam(pos,regData); /* write paramter value and return parameter type */ regLength = 1; readParam(pos); for(i=0; i< bytesRead; i++) { if( i == 0 ) pc.printf("%04X ",regAddress); else if( (i % 0x10) == 0 ) pc.printf("\r\n%04X ",regAddress + i); pc.printf("%02X ",regData[i]); } pc.printf("\r\n"); break; #if 0 floatValue = 0.0; num = sscanf(&line[ptrCmd],"%s %s",str,str2); /* expecting two parameters on the command line - parameter name and parameter value */ if(num == 2) { num = getParameter(str); /* get paramter position in parameters array from paramter name */ if (num >= 0) { type = readParam(num); /* read paramter value and return parameter type */ if(type == ANALOG) { floatValue = strtofloat(str2); /* paramters name and floating point number */ } else { sscanf(&line[ptrCmd],"%s %d",str,&value); /* parameters name and integer value */ } if(type == BINARY) { if(value > parameters[num].maxInt) { sprintf(TransmitBuffer,"%d exceeds maximum value %d\r\n",value,parameters[num].maxInt); } else { writeParam(num,value,floatValue); type = readParam(num); sprintf(TransmitBuffer,"%s: %d %s\r\n",parameters[num].name,binaryParameter,parameters[num].uints); } } else if(type == DIGITAL) { if(value > parameters[num].maxInt) { sprintf(TransmitBuffer,"%d %s exceeds maximum value %d %s\r\n",value,parameters[num].uints,parameters[num].maxInt,parameters[num].uints); } else if(value < parameters[num].minInt) { sprintf(TransmitBuffer,"%d %s less than minimum value %d %s\r\n",value,parameters[num].uints,parameters[num].minInt,parameters[num].uints); } else { writeParam(num,value,floatValue); type = readParam(num); sprintf(TransmitBuffer,"%s: %d %s\r\n",parameters[num].name,digitalParameter,parameters[num].uints); } } else if(type == ANALOG) { if(floatValue > parameters[num].maxFloat) { convertFloat1 = floatValue * 100; convertFloat2 = parameters[num].maxFloat * 100; sprintf(TransmitBuffer,"%ld.%02ld %s exceeds maximum value %ld.%02ld %s\r\n",convertFloat1/100,convertFloat1%100,parameters[num].uints,convertFloat2/100,convertFloat2%100,parameters[num].uints); } else if(floatValue < parameters[num].minFloat) { convertFloat1 = floatValue * 100; convertFloat2 = parameters[num].minFloat * 100; sprintf(TransmitBuffer,"%ld.%02ld %s is less than value %ld.%02ld %s\r\n",convertFloat1/100,convertFloat1%100,parameters[num].uints,convertFloat2/100,convertFloat2%100,parameters[num].uints); } else { writeParam(num,value,floatValue); type = readParam(num); convertFloat1 = analogParameter * 100; sprintf(TransmitBuffer,"%s: %ld.%02ld %s\r\n",parameters[num].name,convertFloat1/100,convertFloat1%100,parameters[num].uints); } } pc.printf(TransmitBuffer); } else { pc.printf("Invalid parameter\r\nType help for list of valid parameters\r\n"); } } else { pc.printf("Missing parameter(s)\r\nformat: write parameter value\r\n"); } break; #endif #if 0 case INFO: num = sscanf(&line[ptrCmd],"%s",str); /* expecting one parameter on the command line - parameter name */ if(num == 1) { num = getParameter(str); /* get paramter position in parameters array from paramter name */ if (num >= 0) { // type = readParam(num); displayParameter(num); } else { UART_1_PutString("Invalid parameter\r\nType help for list of valid parameters\r\n"); } } else { // for(i=0;strcmpi(parameters[i].name,"end") != 0;i++) for(i=0;strcasecmp(parameters[i].name,"end") != 0;i++) displayParameter(i); } break; case FIND: num = sscanf(&line[ptrCmd],"%s",str); /* expecting one parameter on the command line - parameter name */ if(num == 1) { num = findParameter(str); /* get paramter position in parameters array from paramter name */ if (num < 0) { sprintf(TransmitBuffer,"String %s not found in any parameter name\r\n",str); UART_1_PutString(TransmitBuffer); } } else { UART_1_PutString("\r\nValid Paramters\r\n"); /* print parameter list */ // for(i=0;strcmpi(parameters[i].name,"end") != 0;i++) for(i=0;strcasecmp(parameters[i].name,"end") != 0;i++) { sprintf(TransmitBuffer,"%s\r\n",parameters[i].name); UART_1_PutString(TransmitBuffer); } } break; case RUN: if(runStatus == TRUE) { sprintf(TransmitBuffer,"%s Control already Running\r\n",time_string); UART_1_PutString(TransmitBuffer); } else { runStatus = TRUE; lampTestStatus = LAMPTESTNOTRUN; sprintf(TransmitBuffer,"%s Control Running\r\n",time_string); UART_1_PutString(TransmitBuffer); } break; case STOP: if(runStatus == FALSE) { sprintf(TransmitBuffer,"%s Control already Stopped\r\n",time_string); UART_1_PutString(TransmitBuffer); } else { runStatus = FALSE; sprintf(TransmitBuffer,"%s Control Stopped\r\n",time_string); UART_1_PutString(TransmitBuffer); phaseUV = (PHASE_AB_UV_Read() << 0); phaseUV |= (PHASE_AC_UV_Read() << 1); phaseUV |= (PHASE_BC_UV_Read() << 2); statusRegister = STATUS_REGISTER1_ReadMask(); statusRegister |= (PHASEABUVIN | PHASEBCUVIN | PHASEACUVIN); STATUS_REGISTER1_INT_ClearPending(); STATUS_REGISTER1_WriteMask(statusRegister); HVState = HVSTATEOFF; eStopSeen = FALSE; outputOCSeen = FALSE; HVStateMsg = 0; /* no messages printed yet */ flashCtrlSys = 0; tempFailed = FALSE; pendantTestStatus = 0; pendantPresent = FALSE; waitForPowerCycle = FALSE; PEND_PRESENT_NOT_INT_Stop(); SOFT_START_RELAY_CTRL_Write(0); PWM_DC_Stop(); statusRegister = STATUS_REGISTER1_ReadMask(); statusRegister &= ~(BRIDGEOCFLAGIN | OUTPUTOCFLAGIN | UTILOCFLAGIN ); STATUS_REGISTER1_WriteMask(statusRegister); ENCODER_COUNTER_Stop(); initializeAllParameters(); writeCurrent0(0.0); /* test prurposes only */ } break; case HVSTATE: sprintf(TransmitBuffer,"%s HV State: %02X\r\n",time_string,HVState); UART_1_PutString(TransmitBuffer); printHVState(); break; #endif default: if(strlen(line) !=0) { sprintf(TransmitBuffer,"Unknown cmd: %s\r\nType help for list of valid commands\r\n",line); pc.printf(TransmitBuffer); // linesInBuffer--; // indexNextLineIn--; // if(linesInBuffer == NUM_LINES) // indexNextLineIn = NUM_LINES -1; } break; } for(i=0;i < sizeof(line);i++) line[i] = '\0'; } /** * \fn getCmd * * \brief parses command line to find position of command in validCmds array. * * copies line array into cmd array until a space or end of line then * searches cmd array for a match in validCmds array. * \return int8 - position of command in command array if found. -1 if not found<p> * */ int8 getCmd() { uint i; char cmd[40]; for(i=0;i<strlen(line);i++) { if(line[i] == ' ') { break; } cmd[i] = line[i]; } cmd[i] = '\0'; ptrCmd = strlen(cmd) + 1; // sprintf(TransmitBuffer,"cmd: %d %s\r\n",strlen(cmd),cmd); // UART_1_PutString(TransmitBuffer); for(i=0;i< sizeof(validCmds)/sizeof(validCmds[0]);i++) { // if(strcmpi(validCmds[i],cmd) == 0) if(strcasecmp(validCmds[i],cmd) == 0) { return i; } } return -1; } /** * \fn int8 getParameter(char *param) * * \brief searches parameters array to find position of command in parameters array. * * searches the entire parameters array for a name match with param. * * \param[in] param - pointer to an array containing the parameter name. * * \return int8 - position of command in command array if found. -1 if not found<p> * */ int8 getParameter(char *param) { uint i; // sprintf(TransmitBuffer,"param: %d %s\r\n",strlen(param),param); // pc.printf(TransmitBuffer); for(i=0;strcasecmp(parameters[i].name,"end") != 0;i++) { if(strcasecmp(parameters[i].name,param) == 0) { return i; } } return -1; } /** * \fn int8 findParameter(char *string) * * \brief finds all parameters with string in the name. * * searches the entire parameters array for all names * that contain string. * * \param[in] string - pointer to a string. * * \return int8 - 0 string found in some names. -1 if string not found in any name<p> * */ int8 findParameter(char *string) { uint i,j; int8 result = -1; char name[40]; char string1[40]; // sprintf(TransmitBuffer,"param: %d %s\r\n",strlen(param),param); // UART_1_PutString(TransmitBuffer); strcpy(string1,string); for(i=0;i < strlen(string1);i++) string1[i] = tolower((unsigned char)string1[i]); // for(i=0;strcmpi(parameters[i].name,"end") != 0;i++) for(i=0;strcasecmp(parameters[i].name,"end") != 0;i++) { strcpy(name,parameters[i].name); /* copy parameter name and convert to lower case */ for(j=0;j < strlen(name);j++) name[j] = tolower((unsigned char)name[j]); if(strstr(name,string1) != NULL) { sprintf(TransmitBuffer,"%s\r\n",parameters[i].name); pc.printf(TransmitBuffer); result = 0; } } return result; } /** * \fn uint8 readParam(uint8 paramNum) * * \brief reads in parameter at position paramNum. * * This will only be called if there was a valid parameter match found. * will read correct parameter based on parameter type. This will call the * correct read function specified in the paramter array. A parameter will be * read into one of binaryParameter, digitalParameter, or analogParameter based on type. * * \param[in] paramNum - pointer to a character string containing parameter name * \return uint8 - type of parameter<p> * */ uint8 readParam(uint8 paramNum) { uint8 type = parameters[paramNum].type; if(type == BINARY) { if(parameters[paramNum].ptrRead == NULL) { sprintf(TransmitBuffer,"%s has a NULL ptrRead parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); binaryParameter = 0; } else binaryParameter = parameters[paramNum].ptrRead(); return type; } if(type == ANALOG) { if(parameters[paramNum].ptrRead == NULL) { sprintf(TransmitBuffer,"%s has a NULL ptrRead parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); analogParameter = 0.0; } else parameters[paramNum].ptrRead(); return type; } if(type == DIGITAL) { if(parameters[paramNum].ptrRead == NULL) { sprintf(TransmitBuffer,"%s has a NULL ptrRead parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); digitalParameter = 0; } else parameters[paramNum].ptrRead(); return type; } if(type == REGISTER) { bytesRead = 0; if(parameters[paramNum].ptrReadRegLength == NULL) { sprintf(TransmitBuffer,"%s has a NULL ptrReadRegLength parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); digitalParameter = 0; } else bytesRead = parameters[paramNum].ptrReadRegLength(regAddress, regData, regLength); return type; } return type; } /** * \fn void writeParam(uint8 paramNum,uint16 value, float floatValue) * * \brief reads in parameter at position paramNum. * * This will only be called if there was a valid parameter match found. * will write value to the correct parameter based on parameter type. This will call the * correct write function specified in the paramter array. value will not be written * to read only paramters. * * \param[in] paramNum - pointer to a character string containing the parameter name * \param[in] value - 16 bit value to write to a digital parameter. * \param[in] floatValue - analog value to write to an anlog parameter. * \return uint8 - type of parameter<p> * */ void writeParam(uint8 paramNum,uint8 *value) { uint8 type = parameters[paramNum].type; if(parameters[paramNum].mode == READONLY) { sprintf(TransmitBuffer,"%s is a read only parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); return; } #if 0 if(type == BINARY) { if(parameters[paramNum].ptrWrite8 == NULL) { sprintf(TransmitBuffer,"%s has a NULL pteWrite8 parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); } else parameters[paramNum].ptrWrite8(value); } else if(type == DIGITAL) { if(parameters[paramNum].ptrWrite16 == NULL) { sprintf(TransmitBuffer,"%s has a NULL pteWrite16 parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); } else parameters[paramNum].ptrWrite16(value); } #endif else if(type == REGISTER) { if(parameters[paramNum].ptrWriteReg8 == NULL) { sprintf(TransmitBuffer,"%s has a NULL ptrWriteReg8 parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); } else parameters[paramNum].ptrWriteReg8(regAddress, value); } #if 0 else if(type == ANALOG) { if(parameters[paramNum].ptrWriteAnalog == NULL) { sprintf(TransmitBuffer,"%s has a NULL pteWriteAnalog parameter\r\n",parameters[paramNum].name); pc.printf(TransmitBuffer); } else parameters[paramNum].ptrWriteAnalog(floatValue); } #endif return; } /** * \fn void displayParameter(uint8 num) * * \brief displays information about a parameter * * This routine all of the information in the parameters array * for the selected parameter. * * \param[in] num - 8 bit integer location in the parameters array * \return uint16 - 16 bit num to the power pow<p> * */ void displayParameter(uint8 num) { char *strType; char *strMode; uint16 convertFloat1,convertFloat2,convertFloat3; switch (parameters[num].type) { case BINARY: strType = "Binary"; break; case DIGITAL: strType = "16 Bit"; break; case ANALOG: strType = "Analog"; break; default: strType = "Unknown"; break; } switch (parameters[num].mode) { case READONLY: strMode = "Read Only"; break; case READWRITE: strMode = "Read/Write"; break; case WRITEONLY: strMode = "Write Only"; break; default: strMode = "Unknown"; break; } sprintf(TransmitBuffer,"Name:\t'%s' Port: '%s' Connector: '%s' Units: '%s'\r\n",parameters[num].name,parameters[num].port,parameters[num].connector,parameters[num].uints); pc.printf(TransmitBuffer); sprintf(TransmitBuffer,"\tDescription: '%s'\r\n",parameters[num].description); pc.printf(TransmitBuffer); if(parameters[num].type != ANALOG) { sprintf(TransmitBuffer,"\tType: '%s' mode: '%s' Initial: %d Min: %d Max: %d\r\n",strType,strMode,parameters[num].initialInt,parameters[num].minInt,parameters[num].maxInt); pc.printf(TransmitBuffer); } else { convertFloat1 = parameters[num].initialFloat * 100; convertFloat2 = parameters[num].minFloat * 100; convertFloat3 = parameters[num].maxFloat * 100; sprintf(TransmitBuffer,"\tType: '%s' mode: '%s' Initial: %d.%02d Min: %d.%02d Max: %d.%02d\r\n",strType,strMode,convertFloat1/100,convertFloat1%100,convertFloat2/100,convertFloat2%100,convertFloat3/100,convertFloat3%100); pc.printf(TransmitBuffer); } } uint16 readSPIReg(uint16 regAddress, uint8 *regData, uint16 length) { // sprintf(TransmitBuffer,"read SPI %02X %04X\r\n",regAddress, length); // pc.printf(TransmitBuffer); if(length > MAX_REGISTER_DATA) { sprintf(TransmitBuffer,"Length 0x%X > 0x%X",length,MAX_REGISTER_DATA); pc.printf(TransmitBuffer); return 0; } SPIRead(regAddress,regData,length); return(length); } void writeSPIReg(uint16 regAddress, uint8 *regData) { sprintf(TransmitBuffer,"write SPI %02X %02X\r\n",regAddress, regData[0]); pc.printf(TransmitBuffer); SPIWrite(regAddress, regData,1); return; } uint16 readI2CReg(uint16 regAddress, uint8 *regData, uint16 length) { // sprintf(TransmitBuffer,"read I2C %02X %04X\r\n",regAddress, length); // pc.printf(TransmitBuffer); if(length > MAX_REGISTER_DATA) { sprintf(TransmitBuffer,"Length 0x%X > 0x%X",length,MAX_REGISTER_DATA); pc.printf(TransmitBuffer); return 0; } I2CRead(regAddress,regData,length); return(length); } void writeI2CReg(uint16 regAddress, uint8 *regData) { sprintf(TransmitBuffer,"write I2C %02X %02X\r\n",regAddress, regData[0]); pc.printf(TransmitBuffer); I2CWrite(regAddress, regData,1); return; } /* [] END OF FILE */