Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL2

Dependencies:   mbed

Committer:
mfwic
Date:
Thu Dec 06 16:22:11 2018 +0000
Revision:
8:d3d7dca419b3
Parent:
7:860b3a8275cb
Child:
9:816b9a4e4f21
Added CAL and UNCAL commands.; Added correction factors for voltage and current inputs.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfwic 0:44a3005d4f20 1 //-------------------------------------------------------------------------------
mfwic 0:44a3005d4f20 2 //
mfwic 0:44a3005d4f20 3 // Treehouse Inc.
mfwic 0:44a3005d4f20 4 // Colorado Springs, Colorado
mfwic 0:44a3005d4f20 5 //
mfwic 0:44a3005d4f20 6 // Copyright (c) 2016 by Treehouse Designs Inc.
mfwic 0:44a3005d4f20 7 //
mfwic 0:44a3005d4f20 8 // This code is the property of Treehouse, Inc. (Treehouse)
mfwic 0:44a3005d4f20 9 // and may not be redistributed in any form without prior written
mfwic 0:44a3005d4f20 10 // permission of the copyright holder, Treehouse.
mfwic 0:44a3005d4f20 11 //
mfwic 0:44a3005d4f20 12 // The above copyright notice and this permission notice shall be included in
mfwic 0:44a3005d4f20 13 // all copies or substantial portions of the Software.
mfwic 0:44a3005d4f20 14 //
mfwic 0:44a3005d4f20 15 //
mfwic 0:44a3005d4f20 16 //-------------------------------------------------------------------------------
mfwic 0:44a3005d4f20 17 //
mfwic 0:44a3005d4f20 18 // REVISION HISTORY:
mfwic 0:44a3005d4f20 19 //
mfwic 0:44a3005d4f20 20 // $Author: $
mfwic 0:44a3005d4f20 21 // $Rev: $
mfwic 0:44a3005d4f20 22 // $Date: $
mfwic 0:44a3005d4f20 23 // $URL: $
mfwic 0:44a3005d4f20 24 //
mfwic 0:44a3005d4f20 25 //-------------------------------------------------------------------------------
mfwic 0:44a3005d4f20 26
mfwic 0:44a3005d4f20 27 #include "mbed.h"
mfwic 0:44a3005d4f20 28 #include "string.h"
mfwic 0:44a3005d4f20 29 #include "stdio.h"
mfwic 0:44a3005d4f20 30 #include "stdlib.h"
mfwic 0:44a3005d4f20 31 #include "ctype.h"
mfwic 0:44a3005d4f20 32 #include "serial.h"
mfwic 0:44a3005d4f20 33 #include "globals.h"
mfwic 0:44a3005d4f20 34 #include "math.h"
mfwic 0:44a3005d4f20 35 #include "RTC.h"
mfwic 0:44a3005d4f20 36 #include "parameters.h"
mfwic 1:9f8583ba2431 37 #include "all_io.h"
mfwic 1:9f8583ba2431 38 //#include "calibrate.h"
mfwic 1:9f8583ba2431 39 #include "boards.h"
mfwic 1:9f8583ba2431 40 #include "menu.h"
mfwic 8:d3d7dca419b3 41 #include "command.h"
mfwic 0:44a3005d4f20 42
mfwic 5:09be5bbb5020 43 extern unsigned int boardsActive;
mfwic 5:09be5bbb5020 44 extern unsigned int boardMults;
mfwic 4:db38665c3727 45 extern unsigned int binCode[6];
mfwic 6:39442d493098 46 extern unsigned int thermCode[17];
mfwic 5:09be5bbb5020 47 extern unsigned int commandData;
mfwic 6:39442d493098 48 extern unsigned short my12;
mfwic 0:44a3005d4f20 49
mfwic 0:44a3005d4f20 50 /************* FILE SCOPE VARIABLES ************************/
mfwic 0:44a3005d4f20 51 char setvalue = FALSE;
mfwic 0:44a3005d4f20 52 int endOfCommand = 0;
mfwic 0:44a3005d4f20 53 int commandError = 0;
mfwic 0:44a3005d4f20 54 int menuLevel = LEVEL_MAIN;
mfwic 0:44a3005d4f20 55 int readback = 0;
mfwic 0:44a3005d4f20 56
mfwic 0:44a3005d4f20 57 /************************************************************
mfwic 0:44a3005d4f20 58 * Routine: getDelimiter
mfwic 0:44a3005d4f20 59 * Input: none
mfwic 0:44a3005d4f20 60 * Output: none
mfwic 0:44a3005d4f20 61 * Description:
mfwic 0:44a3005d4f20 62 * searches for a delimiter and moves the buffer location
mfwic 0:44a3005d4f20 63 * to be just past it
mfwic 0:44a3005d4f20 64 *
mfwic 0:44a3005d4f20 65 **************************************************************/
mfwic 0:44a3005d4f20 66 void getDelimiter(void)
mfwic 0:44a3005d4f20 67 {
mfwic 0:44a3005d4f20 68 ++bufloc;
mfwic 0:44a3005d4f20 69
mfwic 0:44a3005d4f20 70 while ((rxbuf[bufloc] != ' ') &&
mfwic 0:44a3005d4f20 71 (rxbuf[bufloc] != ',') &&
mfwic 0:44a3005d4f20 72 (rxbuf[bufloc] != '=') &&
mfwic 0:44a3005d4f20 73 (rxbuf[bufloc] != 0 ))
mfwic 0:44a3005d4f20 74 {
mfwic 0:44a3005d4f20 75 bufloc++;
mfwic 0:44a3005d4f20 76 }
mfwic 0:44a3005d4f20 77 }
mfwic 0:44a3005d4f20 78
mfwic 0:44a3005d4f20 79
mfwic 0:44a3005d4f20 80
mfwic 0:44a3005d4f20 81 /************************************************************
mfwic 0:44a3005d4f20 82 * Routine: gethex
mfwic 0:44a3005d4f20 83 * Input: hex character
mfwic 0:44a3005d4f20 84 * Returns: hex integer
mfwic 0:44a3005d4f20 85 * Description:
mfwic 0:44a3005d4f20 86 * Converts a hex character to a value
mfwic 0:44a3005d4f20 87 **************************************************************/
mfwic 0:44a3005d4f20 88 char gethex(char val)
mfwic 0:44a3005d4f20 89 {
mfwic 0:44a3005d4f20 90 int retval;
mfwic 0:44a3005d4f20 91 switch(val)
mfwic 0:44a3005d4f20 92 {
mfwic 0:44a3005d4f20 93 case '0':
mfwic 0:44a3005d4f20 94 retval = 0;
mfwic 0:44a3005d4f20 95 break;
mfwic 0:44a3005d4f20 96 case '1':
mfwic 0:44a3005d4f20 97 retval = 1;
mfwic 0:44a3005d4f20 98 break;
mfwic 0:44a3005d4f20 99 case '2':
mfwic 0:44a3005d4f20 100 retval = 2;
mfwic 0:44a3005d4f20 101 break;
mfwic 0:44a3005d4f20 102 case '3':
mfwic 0:44a3005d4f20 103 retval = 3;
mfwic 0:44a3005d4f20 104 break;
mfwic 0:44a3005d4f20 105 case '4':
mfwic 0:44a3005d4f20 106 retval = 4;
mfwic 0:44a3005d4f20 107 break;
mfwic 0:44a3005d4f20 108 case '5':
mfwic 0:44a3005d4f20 109 retval = 5;
mfwic 0:44a3005d4f20 110 break;
mfwic 0:44a3005d4f20 111 case '6':
mfwic 0:44a3005d4f20 112 retval = 6;
mfwic 0:44a3005d4f20 113 break;
mfwic 0:44a3005d4f20 114 case '7':
mfwic 0:44a3005d4f20 115 retval = 7;
mfwic 0:44a3005d4f20 116 break;
mfwic 0:44a3005d4f20 117 case '8':
mfwic 0:44a3005d4f20 118 retval = 8;
mfwic 0:44a3005d4f20 119 break;
mfwic 0:44a3005d4f20 120 case '9':
mfwic 0:44a3005d4f20 121 retval = 9;
mfwic 0:44a3005d4f20 122 break;
mfwic 0:44a3005d4f20 123 case 'A':
mfwic 0:44a3005d4f20 124 retval = 10;
mfwic 0:44a3005d4f20 125 break;
mfwic 0:44a3005d4f20 126 case 'B':
mfwic 0:44a3005d4f20 127 retval = 11;
mfwic 0:44a3005d4f20 128 break;
mfwic 0:44a3005d4f20 129 case 'C':
mfwic 0:44a3005d4f20 130 retval = 12;
mfwic 0:44a3005d4f20 131 break;
mfwic 0:44a3005d4f20 132 case 'D':
mfwic 0:44a3005d4f20 133 retval = 13;
mfwic 0:44a3005d4f20 134 break;
mfwic 0:44a3005d4f20 135 case 'E':
mfwic 0:44a3005d4f20 136 retval = 14;
mfwic 0:44a3005d4f20 137 break;
mfwic 0:44a3005d4f20 138 case 'F':
mfwic 0:44a3005d4f20 139 retval = 15;
mfwic 0:44a3005d4f20 140 break;
mfwic 0:44a3005d4f20 141 default:
mfwic 0:44a3005d4f20 142 retval = 0;
mfwic 0:44a3005d4f20 143 break;
mfwic 0:44a3005d4f20 144
mfwic 0:44a3005d4f20 145 }
mfwic 0:44a3005d4f20 146 return retval;
mfwic 0:44a3005d4f20 147 }
mfwic 0:44a3005d4f20 148
mfwic 0:44a3005d4f20 149 /************************************************************
mfwic 0:44a3005d4f20 150 * Routine: showfval
mfwic 0:44a3005d4f20 151 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 152 * value (float value to display)
mfwic 0:44a3005d4f20 153 * Output: none
mfwic 0:44a3005d4f20 154 * Description:
mfwic 0:44a3005d4f20 155 * Sends a floating point number (value) over the serial port
mfwic 0:44a3005d4f20 156 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 157 *
mfwic 0:44a3005d4f20 158 **************************************************************/
mfwic 0:44a3005d4f20 159 void showfval(char setval,float value)
mfwic 0:44a3005d4f20 160 {
mfwic 0:44a3005d4f20 161 if(!setval)
mfwic 0:44a3005d4f20 162 {
mfwic 1:9f8583ba2431 163 sprintf(strbuf," %4.9f",value);
mfwic 1:9f8583ba2431 164 sendSerial(strbuf);
mfwic 0:44a3005d4f20 165 }
mfwic 0:44a3005d4f20 166 }
mfwic 0:44a3005d4f20 167
mfwic 0:44a3005d4f20 168 /************************************************************
mfwic 0:44a3005d4f20 169 * Routine: showival
mfwic 0:44a3005d4f20 170 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 171 * value (integer value to display)
mfwic 0:44a3005d4f20 172 * Output: none
mfwic 0:44a3005d4f20 173 * Description:
mfwic 0:44a3005d4f20 174 * Sends an integer (value) over the serial port
mfwic 0:44a3005d4f20 175 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 176 *
mfwic 0:44a3005d4f20 177 **************************************************************/
mfwic 0:44a3005d4f20 178 void showival(char setval, int value)
mfwic 0:44a3005d4f20 179 {
mfwic 0:44a3005d4f20 180 if(!setval)
mfwic 0:44a3005d4f20 181 {
mfwic 1:9f8583ba2431 182 sprintf(strbuf," %i",value);
mfwic 1:9f8583ba2431 183 sendSerial(strbuf);
mfwic 0:44a3005d4f20 184 }
mfwic 0:44a3005d4f20 185 }
mfwic 0:44a3005d4f20 186 /************************************************************
mfwic 0:44a3005d4f20 187 * Routine: showcval
mfwic 0:44a3005d4f20 188 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 189 * value (character to display)
mfwic 0:44a3005d4f20 190 * Output: none
mfwic 0:44a3005d4f20 191 * Description:
mfwic 0:44a3005d4f20 192 * Sends a character over the serial port
mfwic 0:44a3005d4f20 193 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 194 *
mfwic 0:44a3005d4f20 195 **************************************************************/
mfwic 0:44a3005d4f20 196 void showcval(char setval, int value)
mfwic 0:44a3005d4f20 197 {
mfwic 0:44a3005d4f20 198 if(!setval)
mfwic 0:44a3005d4f20 199 {
mfwic 1:9f8583ba2431 200 sprintf(strbuf," %c",(char)value);
mfwic 1:9f8583ba2431 201 sendSerial(strbuf);
mfwic 0:44a3005d4f20 202 }
mfwic 0:44a3005d4f20 203 }
mfwic 0:44a3005d4f20 204
mfwic 0:44a3005d4f20 205 /************************************************************
mfwic 0:44a3005d4f20 206 * Routine: showlval
mfwic 0:44a3005d4f20 207 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 208 * value (integer value to display)
mfwic 0:44a3005d4f20 209 * Output: none
mfwic 0:44a3005d4f20 210 * Description:
mfwic 0:44a3005d4f20 211 * Sends an long (value) over the serial port
mfwic 0:44a3005d4f20 212 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 213 *
mfwic 0:44a3005d4f20 214 **************************************************************/
mfwic 0:44a3005d4f20 215 void showlval(char setval, long value)
mfwic 0:44a3005d4f20 216 {
mfwic 0:44a3005d4f20 217 if(!setval)
mfwic 0:44a3005d4f20 218 {
mfwic 1:9f8583ba2431 219 sprintf(strbuf," %ld",value);
mfwic 1:9f8583ba2431 220 sendSerial(strbuf);
mfwic 0:44a3005d4f20 221 }
mfwic 0:44a3005d4f20 222 }
mfwic 0:44a3005d4f20 223
mfwic 0:44a3005d4f20 224 /************************************************************
mfwic 0:44a3005d4f20 225 * Routine: showuival
mfwic 0:44a3005d4f20 226 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 227 * value (integer value to display)
mfwic 0:44a3005d4f20 228 * Output: none
mfwic 0:44a3005d4f20 229 * Description:
mfwic 0:44a3005d4f20 230 * Sends an unsigned int (value) over the serial port
mfwic 0:44a3005d4f20 231 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 232 *
mfwic 0:44a3005d4f20 233 **************************************************************/
mfwic 0:44a3005d4f20 234 void showuival(char setval, unsigned int value)
mfwic 0:44a3005d4f20 235 {
mfwic 0:44a3005d4f20 236 if(!setval)
mfwic 0:44a3005d4f20 237 {
mfwic 1:9f8583ba2431 238 sprintf(strbuf," %u",value);
mfwic 1:9f8583ba2431 239 sendSerial(strbuf);
mfwic 0:44a3005d4f20 240 }
mfwic 0:44a3005d4f20 241 }
mfwic 0:44a3005d4f20 242
mfwic 0:44a3005d4f20 243 /************************************************************
mfwic 0:44a3005d4f20 244 * Routine: showhval
mfwic 0:44a3005d4f20 245 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 246 * value (hex integeger value to display)
mfwic 0:44a3005d4f20 247 * Output: none
mfwic 0:44a3005d4f20 248 * Description:
mfwic 0:44a3005d4f20 249 * Sends an integer (value) in hex over the serial port
mfwic 0:44a3005d4f20 250 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 251 *
mfwic 0:44a3005d4f20 252 **************************************************************/
mfwic 0:44a3005d4f20 253 void showhval(char setval, int value)
mfwic 0:44a3005d4f20 254 {
mfwic 0:44a3005d4f20 255 if(!setval)
mfwic 0:44a3005d4f20 256 {
mfwic 0:44a3005d4f20 257 if(serialStatus.computer)
mfwic 1:9f8583ba2431 258 sprintf(strbuf," %u",(unsigned int)value);
mfwic 0:44a3005d4f20 259 else
mfwic 1:9f8583ba2431 260 sprintf(strbuf," 0x%04x",value);
mfwic 1:9f8583ba2431 261 sendSerial(strbuf);
mfwic 0:44a3005d4f20 262 }
mfwic 0:44a3005d4f20 263 }
mfwic 0:44a3005d4f20 264
mfwic 0:44a3005d4f20 265
mfwic 0:44a3005d4f20 266 /************************************************************
mfwic 0:44a3005d4f20 267 * Routine: getival
mfwic 0:44a3005d4f20 268 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 269 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 270 * Description:
mfwic 0:44a3005d4f20 271 * Gets an integer from the serial port connection.
mfwic 0:44a3005d4f20 272 *
mfwic 0:44a3005d4f20 273 **************************************************************/
mfwic 0:44a3005d4f20 274 int getival(char setval)
mfwic 0:44a3005d4f20 275 {
mfwic 0:44a3005d4f20 276 if (setval)
mfwic 0:44a3005d4f20 277 {
mfwic 0:44a3005d4f20 278 return atoi(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 279 }
mfwic 0:44a3005d4f20 280
mfwic 0:44a3005d4f20 281 return 0;
mfwic 0:44a3005d4f20 282 }
mfwic 0:44a3005d4f20 283
mfwic 0:44a3005d4f20 284 /************************************************************
mfwic 0:44a3005d4f20 285 * Routine: getcval
mfwic 0:44a3005d4f20 286 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 287 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 288 * Description:
mfwic 0:44a3005d4f20 289 * Gets an character from the serial port connection.
mfwic 0:44a3005d4f20 290 *
mfwic 0:44a3005d4f20 291 **************************************************************/
mfwic 0:44a3005d4f20 292 int getcval(char setval)
mfwic 0:44a3005d4f20 293 {
mfwic 0:44a3005d4f20 294 if(setval)
mfwic 0:44a3005d4f20 295 {
mfwic 0:44a3005d4f20 296 // skip one space
mfwic 0:44a3005d4f20 297 ++bufloc;
mfwic 0:44a3005d4f20 298 // skip spaces and the equals sign
mfwic 0:44a3005d4f20 299 while((rxbuf[bufloc] == ' ') || (rxbuf[bufloc] == '='))
mfwic 0:44a3005d4f20 300 bufloc++;
mfwic 0:44a3005d4f20 301 return rxbuf[bufloc++];
mfwic 0:44a3005d4f20 302 }
mfwic 0:44a3005d4f20 303 else
mfwic 0:44a3005d4f20 304 return 0;
mfwic 0:44a3005d4f20 305
mfwic 0:44a3005d4f20 306 }
mfwic 0:44a3005d4f20 307 /************************************************************
mfwic 0:44a3005d4f20 308 * Routine: getlval
mfwic 0:44a3005d4f20 309 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 310 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 311 * Description:
mfwic 0:44a3005d4f20 312 * Gets an long from the serial port connection.
mfwic 0:44a3005d4f20 313 *
mfwic 0:44a3005d4f20 314 **************************************************************/
mfwic 0:44a3005d4f20 315 long getlval(char setval)
mfwic 0:44a3005d4f20 316 {
mfwic 0:44a3005d4f20 317 if(setval)
mfwic 0:44a3005d4f20 318 return atol(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 319 else
mfwic 0:44a3005d4f20 320 return 0;
mfwic 0:44a3005d4f20 321
mfwic 0:44a3005d4f20 322 }
mfwic 0:44a3005d4f20 323
mfwic 0:44a3005d4f20 324 /************************************************************
mfwic 0:44a3005d4f20 325 * Routine: getfval
mfwic 0:44a3005d4f20 326 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 327 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 328 * Description:
mfwic 0:44a3005d4f20 329 * Gets an float from the serial port connection.
mfwic 0:44a3005d4f20 330 *
mfwic 0:44a3005d4f20 331 **************************************************************/
mfwic 0:44a3005d4f20 332 float getfval(char setval)
mfwic 0:44a3005d4f20 333 {
mfwic 0:44a3005d4f20 334 if(setval)
mfwic 0:44a3005d4f20 335 return atof(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 336 else
mfwic 0:44a3005d4f20 337 return 0;
mfwic 0:44a3005d4f20 338 }
mfwic 0:44a3005d4f20 339
mfwic 0:44a3005d4f20 340 /************************************************************
mfwic 0:44a3005d4f20 341 * Routine: validateEntry
mfwic 0:44a3005d4f20 342 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 343 * limlo -- low limit
mfwic 0:44a3005d4f20 344 * limhi -- high limit
mfwic 0:44a3005d4f20 345 * address -- address in eeprom to use
mfwic 0:44a3005d4f20 346 * Returns: 0 if entry validates and is written
mfwic 0:44a3005d4f20 347 * 1 if entry fails
mfwic 0:44a3005d4f20 348 * Description:
mfwic 0:44a3005d4f20 349 * Gets or sets a value in eeprom at the address but only
mfwic 0:44a3005d4f20 350 * if it is between the limits will it write the value to
mfwic 0:44a3005d4f20 351 * eeprom
mfwic 0:44a3005d4f20 352 *
mfwic 0:44a3005d4f20 353 **************************************************************/
mfwic 0:44a3005d4f20 354 int validateEntry(char setvalue, float limlo, float limhi, float *address)
mfwic 0:44a3005d4f20 355 {
mfwic 0:44a3005d4f20 356 float val;
mfwic 0:44a3005d4f20 357
mfwic 0:44a3005d4f20 358 if (setvalue)
mfwic 0:44a3005d4f20 359 {
mfwic 0:44a3005d4f20 360 val = getfval(SET);
mfwic 0:44a3005d4f20 361
mfwic 0:44a3005d4f20 362 if ((val >= limlo) && (val <= limhi))
mfwic 0:44a3005d4f20 363 {
mfwic 0:44a3005d4f20 364 *address = val;
mfwic 0:44a3005d4f20 365 }
mfwic 0:44a3005d4f20 366 else
mfwic 0:44a3005d4f20 367 {
mfwic 0:44a3005d4f20 368 showRangeError(0, 0, val);
mfwic 0:44a3005d4f20 369 return 0;
mfwic 0:44a3005d4f20 370 }
mfwic 0:44a3005d4f20 371 }
mfwic 0:44a3005d4f20 372 else
mfwic 0:44a3005d4f20 373 {
mfwic 0:44a3005d4f20 374 val = *address;
mfwic 1:9f8583ba2431 375 sprintf(strbuf, " %4.3f", val);
mfwic 1:9f8583ba2431 376 sendSerial(strbuf);
mfwic 0:44a3005d4f20 377 }
mfwic 0:44a3005d4f20 378
mfwic 0:44a3005d4f20 379 return 1;
mfwic 0:44a3005d4f20 380 }
mfwic 0:44a3005d4f20 381
mfwic 0:44a3005d4f20 382
mfwic 0:44a3005d4f20 383 /************************************************************
mfwic 0:44a3005d4f20 384 * Routine: validateEntry
mfwic 0:44a3005d4f20 385 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 386 * limlo -- low limit
mfwic 0:44a3005d4f20 387 * limhi -- high limit
mfwic 0:44a3005d4f20 388 * address -- address in eeprom to use
mfwic 0:44a3005d4f20 389 *
mfwic 0:44a3005d4f20 390 * Returns: FALSE if entry fails
mfwic 0:44a3005d4f20 391 * TRUE if entry validates and is written
mfwic 0:44a3005d4f20 392 *
mfwic 0:44a3005d4f20 393 * Description:
mfwic 0:44a3005d4f20 394 * Gets or sets a value in eeprom at the address but only
mfwic 0:44a3005d4f20 395 * if it is between the limits will it write the value to
mfwic 0:44a3005d4f20 396 * eeprom
mfwic 0:44a3005d4f20 397 *
mfwic 0:44a3005d4f20 398 **************************************************************/
mfwic 0:44a3005d4f20 399 int validateInt(char setvalue, int limlo, int limhi, int *address)
mfwic 0:44a3005d4f20 400 {
mfwic 0:44a3005d4f20 401 float val;
mfwic 0:44a3005d4f20 402
mfwic 0:44a3005d4f20 403 if (setvalue)
mfwic 0:44a3005d4f20 404 {
mfwic 0:44a3005d4f20 405 val = getfval(SET);
mfwic 0:44a3005d4f20 406
mfwic 0:44a3005d4f20 407 if ((val >= limlo) && (val <= limhi))
mfwic 0:44a3005d4f20 408 {
mfwic 0:44a3005d4f20 409 *address = val;
mfwic 0:44a3005d4f20 410 }
mfwic 0:44a3005d4f20 411 else
mfwic 0:44a3005d4f20 412 {
mfwic 0:44a3005d4f20 413 showRangeError(1, val, 0);
mfwic 0:44a3005d4f20 414 return FALSE;
mfwic 0:44a3005d4f20 415 }
mfwic 0:44a3005d4f20 416 }
mfwic 0:44a3005d4f20 417 else
mfwic 0:44a3005d4f20 418 {
mfwic 0:44a3005d4f20 419 val = *address;
mfwic 1:9f8583ba2431 420 sprintf(strbuf, " %4.0f", val);
mfwic 1:9f8583ba2431 421 sendSerial(strbuf);
mfwic 0:44a3005d4f20 422 }
mfwic 0:44a3005d4f20 423
mfwic 0:44a3005d4f20 424 return TRUE;
mfwic 0:44a3005d4f20 425 }
mfwic 0:44a3005d4f20 426
mfwic 0:44a3005d4f20 427
mfwic 0:44a3005d4f20 428 /************************************************************
mfwic 0:44a3005d4f20 429 * Routine: parseCommand
mfwic 0:44a3005d4f20 430 * Input: setvalue (GET or SET), command buffer
mfwic 0:44a3005d4f20 431 * Returns: none
mfwic 0:44a3005d4f20 432 * Description:
mfwic 0:44a3005d4f20 433 * parses a command and gets the commandstring
mfwic 0:44a3005d4f20 434 **************************************************************/
mfwic 0:44a3005d4f20 435 void parseCommand(char setvalue, char *commandString)
mfwic 0:44a3005d4f20 436 {
mfwic 0:44a3005d4f20 437 int i, endofc;
mfwic 0:44a3005d4f20 438 char store;
mfwic 0:44a3005d4f20 439
mfwic 0:44a3005d4f20 440 // Ignore any white space and the optional ';' character before the start of
mfwic 0:44a3005d4f20 441 // the command string (any ']' character is from the last command so skip that,
mfwic 0:44a3005d4f20 442 // too)
mfwic 0:44a3005d4f20 443 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == ';') || (rxbuf[bufloc] == ']'))
mfwic 0:44a3005d4f20 444 {
mfwic 0:44a3005d4f20 445 bufloc++;
mfwic 0:44a3005d4f20 446 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0)) break;
mfwic 0:44a3005d4f20 447 }
mfwic 0:44a3005d4f20 448
mfwic 0:44a3005d4f20 449 if (setvalue)
mfwic 0:44a3005d4f20 450 {
mfwic 0:44a3005d4f20 451 // We need a value for SET so hitting the end is a problem
mfwic 0:44a3005d4f20 452 if ((rxbuf[bufloc] == 0) || (rxbuf[bufloc] == 0x0D))
mfwic 0:44a3005d4f20 453 {
mfwic 0:44a3005d4f20 454 commandError = 1;
mfwic 0:44a3005d4f20 455 return;
mfwic 0:44a3005d4f20 456 }
mfwic 0:44a3005d4f20 457 }
mfwic 0:44a3005d4f20 458
mfwic 0:44a3005d4f20 459 // Find the end of the command string
mfwic 0:44a3005d4f20 460 endofc = bufloc + 1;
mfwic 0:44a3005d4f20 461
mfwic 0:44a3005d4f20 462 // White space, '[' and '?' all terminate the command string
mfwic 0:44a3005d4f20 463 while ((!isspace(rxbuf[endofc])) && (rxbuf[endofc] != '[') && (rxbuf[endofc] != '?'))
mfwic 0:44a3005d4f20 464 {
mfwic 0:44a3005d4f20 465 endofc++;
mfwic 0:44a3005d4f20 466 // (As does hitting the end of rxbuf!)
mfwic 0:44a3005d4f20 467 if ((rxbuf[endofc] == 0x0D) || (rxbuf[endofc] == 0)) break;
mfwic 0:44a3005d4f20 468 }
mfwic 0:44a3005d4f20 469
mfwic 0:44a3005d4f20 470 // Save the character that marks the end of the command string
mfwic 0:44a3005d4f20 471 store = rxbuf[endofc];
mfwic 0:44a3005d4f20 472
mfwic 1:9f8583ba2431 473 // sprintf(strbuf, "store == %c\r\n", store);
mfwic 1:9f8583ba2431 474 // sendSerial(strbuf);
mfwic 0:44a3005d4f20 475
mfwic 0:44a3005d4f20 476 // Command strings ending in '?' are readbacks
mfwic 0:44a3005d4f20 477 readback = ((store == '?') ? 1 : 0);
mfwic 0:44a3005d4f20 478
mfwic 0:44a3005d4f20 479 // Set end to null character so string can now be copied
mfwic 0:44a3005d4f20 480 rxbuf[endofc] = 0;
mfwic 0:44a3005d4f20 481
mfwic 0:44a3005d4f20 482 // Copy the command string into commandString
mfwic 5:09be5bbb5020 483 char commandStringBuf[80];
mfwic 5:09be5bbb5020 484 char *tok;
mfwic 5:09be5bbb5020 485 strcpy(commandStringBuf, &rxbuf[bufloc]);
mfwic 5:09be5bbb5020 486 if(strstr(commandStringBuf, "=")){
mfwic 5:09be5bbb5020 487 tok = strtok(commandStringBuf, "=");
mfwic 5:09be5bbb5020 488 strcpy(commandString, tok);
mfwic 5:09be5bbb5020 489 tok = strtok(NULL, "=");
mfwic 5:09be5bbb5020 490 commandData = atoi(tok);
mfwic 6:39442d493098 491 //if(DEBUG){
mfwic 6:39442d493098 492 // sprintf(strbuf, "commandStringBuf= %s, commandData= %d", commandStringBuf, commandData);
mfwic 6:39442d493098 493 // sendSerial(strbuf);
mfwic 6:39442d493098 494 //}
mfwic 5:09be5bbb5020 495 }
mfwic 5:09be5bbb5020 496 else{
mfwic 5:09be5bbb5020 497 strcpy(commandString, commandStringBuf);
mfwic 5:09be5bbb5020 498 }
mfwic 0:44a3005d4f20 499
mfwic 0:44a3005d4f20 500 // Convert the command string to all uppercase characters
mfwic 0:44a3005d4f20 501 for (i = 0; i < strlen(commandString); i++)
mfwic 0:44a3005d4f20 502 {
mfwic 0:44a3005d4f20 503 commandString[i] = toupper(commandString[i]);
mfwic 0:44a3005d4f20 504 }
mfwic 0:44a3005d4f20 505
mfwic 0:44a3005d4f20 506 // Replace the character we clobbered in rxbuf
mfwic 0:44a3005d4f20 507 rxbuf[endofc] = store;
mfwic 0:44a3005d4f20 508
mfwic 0:44a3005d4f20 509 // Update bufloc to the end of the command string
mfwic 0:44a3005d4f20 510 bufloc = endofc;
mfwic 0:44a3005d4f20 511 }
mfwic 0:44a3005d4f20 512
mfwic 0:44a3005d4f20 513 /************************************************************
mfwic 0:44a3005d4f20 514 * Routine: validateChannel
mfwic 0:44a3005d4f20 515 * Input: channel
mfwic 0:44a3005d4f20 516 * Returns: none
mfwic 0:44a3005d4f20 517 * Description:
mfwic 0:44a3005d4f20 518 * Verifies that the channel number is a valid value between
mfwic 0:44a3005d4f20 519 * 1 and MAX_BOARDS, setting commandError if the check fails
mfwic 0:44a3005d4f20 520 **************************************************************/
mfwic 0:44a3005d4f20 521 void validateChannel(int channel)
mfwic 0:44a3005d4f20 522 {
mfwic 0:44a3005d4f20 523 if ((channel < 1) || (channel > MAX_BOARDS))
mfwic 0:44a3005d4f20 524 {
mfwic 1:9f8583ba2431 525 sprintf(strbuf, " Invalid channel/board: %d (range is 1 - %d)", channel, MAX_BOARDS);
mfwic 1:9f8583ba2431 526 sendSerial(strbuf);
mfwic 0:44a3005d4f20 527 commandError = 1;
mfwic 0:44a3005d4f20 528 }
mfwic 0:44a3005d4f20 529 }
mfwic 0:44a3005d4f20 530
mfwic 0:44a3005d4f20 531 /************************************************************
mfwic 0:44a3005d4f20 532 * Routine: setPairVariable
mfwic 0:44a3005d4f20 533 * Input: *avariable,*bvariable
mfwic 0:44a3005d4f20 534 * Returns: none
mfwic 0:44a3005d4f20 535 * Description:
mfwic 0:44a3005d4f20 536 * sets a single channel variable
mfwic 0:44a3005d4f20 537 **************************************************************/
mfwic 0:44a3005d4f20 538 void setPairVariable(float *avariable, float *bvariable, float limitlo, float limithi)
mfwic 0:44a3005d4f20 539 {
mfwic 0:44a3005d4f20 540 if (!readback)
mfwic 0:44a3005d4f20 541 {
mfwic 0:44a3005d4f20 542 if (validateEntry(SET, limitlo, limithi, avariable))
mfwic 0:44a3005d4f20 543 {
mfwic 0:44a3005d4f20 544 *bvariable = *avariable;
mfwic 0:44a3005d4f20 545 }
mfwic 0:44a3005d4f20 546 }
mfwic 0:44a3005d4f20 547 }
mfwic 0:44a3005d4f20 548
mfwic 0:44a3005d4f20 549
mfwic 0:44a3005d4f20 550 /************************************************************
mfwic 0:44a3005d4f20 551 * Routine: chlprMenu
mfwic 0:44a3005d4f20 552 * Input: none
mfwic 0:44a3005d4f20 553 * Returns: none
mfwic 0:44a3005d4f20 554 * Description:
mfwic 0:44a3005d4f20 555 * Channel Pair Menu
mfwic 0:44a3005d4f20 556 **************************************************************/
mfwic 1:9f8583ba2431 557 /*void chlprMenu(void)
mfwic 0:44a3005d4f20 558 {
mfwic 0:44a3005d4f20 559 int ival;
mfwic 0:44a3005d4f20 560
mfwic 0:44a3005d4f20 561 char commandString[80] = { 0 };
mfwic 0:44a3005d4f20 562
mfwic 0:44a3005d4f20 563 commandError = 0;
mfwic 0:44a3005d4f20 564 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 565
mfwic 0:44a3005d4f20 566 if (!strcmp(commandString, "AMPL"))
mfwic 0:44a3005d4f20 567 {
mfwic 0:44a3005d4f20 568 if (!readback)
mfwic 0:44a3005d4f20 569 {
mfwic 0:44a3005d4f20 570 setPairVariable(&ch[chpair][registerno].a_dwell1_volts, &ch[chpair][registerno].b_dwell1_volts, MIN_VOLTAGE, MAX_VOLTAGE);
mfwic 0:44a3005d4f20 571
mfwic 0:44a3005d4f20 572 ch[chpair][registerno].a_dwell2_volts = ch[chpair][registerno].a_dwell1_volts;
mfwic 0:44a3005d4f20 573 ch[chpair][registerno].b_dwell2_volts = ch[chpair][registerno].b_dwell1_volts;
mfwic 1:9f8583ba2431 574 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 575 sendSerial(strbuf);
mfwic 0:44a3005d4f20 576 }
mfwic 0:44a3005d4f20 577
mfwic 1:9f8583ba2431 578 sprintf(strbuf, " [%d, %d] peak voltage = %0.3f V", chpair, registerno, ch[chpair][registerno].a_dwell1_volts);
mfwic 1:9f8583ba2431 579 sendSerial(strbuf);
mfwic 0:44a3005d4f20 580 return;
mfwic 0:44a3005d4f20 581 }
mfwic 0:44a3005d4f20 582
mfwic 0:44a3005d4f20 583 if (!strcmp(commandString, "DWLPHS"))
mfwic 0:44a3005d4f20 584 {
mfwic 0:44a3005d4f20 585 if (!readback)
mfwic 0:44a3005d4f20 586 {
mfwic 0:44a3005d4f20 587 // Set dwell times using the specified value
mfwic 0:44a3005d4f20 588 setPairVariable(&dwells[registerno].a_dwell1_time, &dwells[registerno].b_dwell1_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 589
mfwic 1:9f8583ba2431 590 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 591 sendSerial(strbuf);
mfwic 0:44a3005d4f20 592 }
mfwic 0:44a3005d4f20 593
mfwic 1:9f8583ba2431 594 sprintf(strbuf, " [%d] in-phase dwell time = %0.3f ms", registerno, dwells[registerno].a_dwell1_time);
mfwic 1:9f8583ba2431 595 sendSerial(strbuf);
mfwic 0:44a3005d4f20 596 return;
mfwic 0:44a3005d4f20 597 }
mfwic 0:44a3005d4f20 598
mfwic 0:44a3005d4f20 599 if (!strcmp(commandString,"DWLPHS_OV"))
mfwic 0:44a3005d4f20 600 {
mfwic 0:44a3005d4f20 601 if (!readback)
mfwic 0:44a3005d4f20 602 {
mfwic 0:44a3005d4f20 603 setPairVariable(&ch[chpair][registerno].a_dwell1_ov, &ch[chpair][registerno].b_dwell1_ov, MIN_VOLTAGE, MAX_VOLTAGE);
mfwic 0:44a3005d4f20 604
mfwic 0:44a3005d4f20 605 ch[chpair][registerno].a_dwell2_ov = ch[chpair][registerno].a_dwell1_ov;
mfwic 0:44a3005d4f20 606 ch[chpair][registerno].b_dwell2_ov = ch[chpair][registerno].b_dwell1_ov;
mfwic 0:44a3005d4f20 607
mfwic 1:9f8583ba2431 608 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 609 sendSerial(strbuf);
mfwic 0:44a3005d4f20 610 }
mfwic 0:44a3005d4f20 611
mfwic 1:9f8583ba2431 612 sprintf(strbuf, " [%d, %d] in-phase overvoltage = %0.3f V", chpair, registerno, ch[chpair][registerno].a_dwell1_ov);
mfwic 1:9f8583ba2431 613 sendSerial(strbuf);
mfwic 0:44a3005d4f20 614 return;
mfwic 0:44a3005d4f20 615 }
mfwic 0:44a3005d4f20 616
mfwic 0:44a3005d4f20 617 if (!strcmp(commandString,"DWLPHS_OV_TIME"))
mfwic 0:44a3005d4f20 618 {
mfwic 0:44a3005d4f20 619 if (!readback)
mfwic 0:44a3005d4f20 620 {
mfwic 0:44a3005d4f20 621 // Set overvoltage times using the specified value
mfwic 0:44a3005d4f20 622 setPairVariable(&dwells[registerno].a_dwell1_ov_time, &dwells[registerno].b_dwell1_ov_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 623 dwells[registerno].a_dwell2_ov_time = dwells[registerno].a_dwell1_ov_time;
mfwic 0:44a3005d4f20 624 dwells[registerno].b_dwell2_ov_time = dwells[registerno].b_dwell1_ov_time;
mfwic 0:44a3005d4f20 625
mfwic 1:9f8583ba2431 626 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 627 sendSerial(strbuf);
mfwic 0:44a3005d4f20 628 }
mfwic 0:44a3005d4f20 629
mfwic 1:9f8583ba2431 630 sprintf(strbuf, " [%d] in-phase overvoltage time = %0.3f ms", registerno, dwells[registerno].a_dwell1_ov_time);
mfwic 1:9f8583ba2431 631 sendSerial(strbuf);
mfwic 0:44a3005d4f20 632 return;
mfwic 0:44a3005d4f20 633 }
mfwic 0:44a3005d4f20 634
mfwic 0:44a3005d4f20 635 if (!strcmp(commandString,"DWLDIFFL"))
mfwic 0:44a3005d4f20 636 {
mfwic 0:44a3005d4f20 637 if (!readback)
mfwic 0:44a3005d4f20 638 {
mfwic 0:44a3005d4f20 639 // Set dwell times using the specified value
mfwic 0:44a3005d4f20 640 setPairVariable(&dwells[registerno].a_dwell2_time, &dwells[registerno].b_dwell2_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 641
mfwic 1:9f8583ba2431 642 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 643 sendSerial(strbuf);
mfwic 0:44a3005d4f20 644 }
mfwic 0:44a3005d4f20 645
mfwic 1:9f8583ba2431 646 sprintf(strbuf, " [%d] differential dwell time = %0.3f ms", registerno, dwells[registerno].a_dwell2_time);
mfwic 1:9f8583ba2431 647 sendSerial(strbuf);
mfwic 0:44a3005d4f20 648 return;
mfwic 0:44a3005d4f20 649 }
mfwic 0:44a3005d4f20 650
mfwic 0:44a3005d4f20 651 if (!strcmp(commandString, "ENABLE"))
mfwic 0:44a3005d4f20 652 {
mfwic 0:44a3005d4f20 653 ival = getival(SET);
mfwic 0:44a3005d4f20 654 if ((ival != 0) && (ival != 1)) ival = 0;
mfwic 0:44a3005d4f20 655
mfwic 0:44a3005d4f20 656 if (!readback)
mfwic 0:44a3005d4f20 657 {
mfwic 0:44a3005d4f20 658 ch[chpair][registerno].enabled = ival;
mfwic 0:44a3005d4f20 659
mfwic 1:9f8583ba2431 660 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 661 sendSerial(strbuf);
mfwic 0:44a3005d4f20 662 }
mfwic 0:44a3005d4f20 663
mfwic 1:9f8583ba2431 664 sprintf(strbuf, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 1:9f8583ba2431 665 sendSerial(strbuf);
mfwic 0:44a3005d4f20 666 return;
mfwic 0:44a3005d4f20 667 }
mfwic 0:44a3005d4f20 668
mfwic 0:44a3005d4f20 669 if (!strcmp(commandString, "DISABLE"))
mfwic 0:44a3005d4f20 670 {
mfwic 0:44a3005d4f20 671 if (!readback)
mfwic 0:44a3005d4f20 672 {
mfwic 0:44a3005d4f20 673 ch[chpair][registerno].enabled = 0;
mfwic 0:44a3005d4f20 674
mfwic 1:9f8583ba2431 675 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 676 sendSerial(strbuf);
mfwic 0:44a3005d4f20 677 }
mfwic 0:44a3005d4f20 678
mfwic 1:9f8583ba2431 679 sprintf(strbuf, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 1:9f8583ba2431 680 sendSerial(strbuf);
mfwic 0:44a3005d4f20 681 return;
mfwic 0:44a3005d4f20 682 }
mfwic 0:44a3005d4f20 683
mfwic 0:44a3005d4f20 684 if (!strcmp(commandString, "DIFF"))
mfwic 0:44a3005d4f20 685 {
mfwic 0:44a3005d4f20 686 ival = getival(SET);
mfwic 0:44a3005d4f20 687 if ((ival != 0) && (ival != 1)) ival = 0;
mfwic 0:44a3005d4f20 688
mfwic 0:44a3005d4f20 689 if (!readback)
mfwic 0:44a3005d4f20 690 {
mfwic 0:44a3005d4f20 691 ch[chpair][registerno].differential_dwell = ival;
mfwic 0:44a3005d4f20 692
mfwic 1:9f8583ba2431 693 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 694 sendSerial(strbuf);
mfwic 0:44a3005d4f20 695 }
mfwic 0:44a3005d4f20 696
mfwic 1:9f8583ba2431 697 sprintf(strbuf, " [%d, %d] differential_dwell = %d", chpair, registerno, ch[chpair][registerno].differential_dwell);
mfwic 1:9f8583ba2431 698 sendSerial(strbuf);
mfwic 0:44a3005d4f20 699 return;
mfwic 0:44a3005d4f20 700 }
mfwic 0:44a3005d4f20 701
mfwic 0:44a3005d4f20 702 if (!strcmp(commandString, "INVERT"))
mfwic 0:44a3005d4f20 703 {
mfwic 0:44a3005d4f20 704 ival = getival(SET);
mfwic 0:44a3005d4f20 705 if ((ival != 0) && (ival != 1)) ival = 0;
mfwic 0:44a3005d4f20 706
mfwic 0:44a3005d4f20 707 if (!readback)
mfwic 0:44a3005d4f20 708 {
mfwic 0:44a3005d4f20 709 ch[chpair][registerno].inverted = ival;
mfwic 0:44a3005d4f20 710
mfwic 1:9f8583ba2431 711 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 712 sendSerial(strbuf);
mfwic 0:44a3005d4f20 713 }
mfwic 0:44a3005d4f20 714
mfwic 1:9f8583ba2431 715 sprintf(strbuf, " [%d, %d] inverted = %d", chpair, registerno, ch[chpair][registerno].inverted);
mfwic 1:9f8583ba2431 716 sendSerial(strbuf);
mfwic 0:44a3005d4f20 717 return;
mfwic 0:44a3005d4f20 718 }
mfwic 0:44a3005d4f20 719
mfwic 0:44a3005d4f20 720 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 721 {
mfwic 0:44a3005d4f20 722 commandError = 1;
mfwic 0:44a3005d4f20 723 }
mfwic 1:9f8583ba2431 724 }*/
mfwic 0:44a3005d4f20 725
mfwic 0:44a3005d4f20 726
mfwic 0:44a3005d4f20 727 /************************************************************
mfwic 0:44a3005d4f20 728 * Routine: setSingleVariable
mfwic 0:44a3005d4f20 729 * Input: *avariable,*bvariable
mfwic 0:44a3005d4f20 730 * Returns: none
mfwic 0:44a3005d4f20 731 * Description:
mfwic 0:44a3005d4f20 732 * sets a single channel variable
mfwic 0:44a3005d4f20 733 **************************************************************/
mfwic 1:9f8583ba2431 734 /*void setSingleVariable(float* avariable, float* bvariable, float limitlo, float limithi)
mfwic 0:44a3005d4f20 735 {
mfwic 0:44a3005d4f20 736 float* variable;
mfwic 0:44a3005d4f20 737
mfwic 0:44a3005d4f20 738 if ((chsgl == 'A') || (chsgl == 'a'))
mfwic 0:44a3005d4f20 739 {
mfwic 0:44a3005d4f20 740 variable = avariable;
mfwic 0:44a3005d4f20 741 }
mfwic 0:44a3005d4f20 742 else
mfwic 0:44a3005d4f20 743 {
mfwic 0:44a3005d4f20 744 variable = bvariable;
mfwic 0:44a3005d4f20 745 }
mfwic 0:44a3005d4f20 746
mfwic 0:44a3005d4f20 747 if (!readback)
mfwic 0:44a3005d4f20 748 {
mfwic 0:44a3005d4f20 749 validateEntry(SET, limitlo, limithi, variable);
mfwic 0:44a3005d4f20 750 }
mfwic 1:9f8583ba2431 751 }*/
mfwic 0:44a3005d4f20 752
mfwic 0:44a3005d4f20 753
mfwic 0:44a3005d4f20 754 /************************************************************
mfwic 0:44a3005d4f20 755 * Routine: chlsglMenu
mfwic 0:44a3005d4f20 756 * Input: none
mfwic 0:44a3005d4f20 757 * Returns: none
mfwic 0:44a3005d4f20 758 * Description:
mfwic 0:44a3005d4f20 759 * Channel Single Menu
mfwic 0:44a3005d4f20 760 **************************************************************/
mfwic 1:9f8583ba2431 761 /*void chlsglMenu(void)
mfwic 0:44a3005d4f20 762 {
mfwic 0:44a3005d4f20 763 int channelSide;
mfwic 0:44a3005d4f20 764 float value;
mfwic 0:44a3005d4f20 765
mfwic 0:44a3005d4f20 766 char commandString[80] = { 0 };
mfwic 0:44a3005d4f20 767
mfwic 0:44a3005d4f20 768 commandError = 0;
mfwic 0:44a3005d4f20 769 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 770
mfwic 0:44a3005d4f20 771 channelSide = (((chsgl == 'A') || (chsgl == 'a')) ? 1 : 2);
mfwic 0:44a3005d4f20 772
mfwic 0:44a3005d4f20 773 if (!strcmp(commandString, "DWL1AMPL"))
mfwic 0:44a3005d4f20 774 {
mfwic 0:44a3005d4f20 775 if (!readback)
mfwic 0:44a3005d4f20 776 {
mfwic 0:44a3005d4f20 777 setSingleVariable(&ch[chpair][registerno].a_dwell1_volts, &ch[chpair][registerno].b_dwell1_volts, MIN_VOLTAGE, MAX_VOLTAGE);
mfwic 0:44a3005d4f20 778
mfwic 1:9f8583ba2431 779 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 780 sendSerial(strbuf);
mfwic 0:44a3005d4f20 781 }
mfwic 0:44a3005d4f20 782
mfwic 0:44a3005d4f20 783 value = ((channelSide == 1) ? ch[chpair][registerno].a_dwell1_volts : ch[chpair][registerno].b_dwell1_volts);
mfwic 0:44a3005d4f20 784
mfwic 1:9f8583ba2431 785 sprintf(strbuf, " [%d%c, %d] dwell 1 peak amplitude = %0.3f V", chpair, chsgl, registerno, value);
mfwic 1:9f8583ba2431 786 sendSerial(strbuf);
mfwic 0:44a3005d4f20 787 return;
mfwic 0:44a3005d4f20 788 }
mfwic 0:44a3005d4f20 789
mfwic 0:44a3005d4f20 790 if (!strcmp(commandString, "DWL1"))
mfwic 0:44a3005d4f20 791 {
mfwic 0:44a3005d4f20 792 if (!readback)
mfwic 0:44a3005d4f20 793 {
mfwic 0:44a3005d4f20 794 // Set dwell times using the specified value
mfwic 0:44a3005d4f20 795 setSingleVariable(&dwells[registerno].a_dwell1_time, &dwells[registerno].b_dwell1_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 796
mfwic 1:9f8583ba2431 797 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 798 sendSerial(strbuf);
mfwic 0:44a3005d4f20 799 }
mfwic 0:44a3005d4f20 800
mfwic 0:44a3005d4f20 801 value = ((channelSide == 1) ? dwells[registerno].a_dwell1_time : dwells[registerno].b_dwell1_time);
mfwic 0:44a3005d4f20 802
mfwic 1:9f8583ba2431 803 sprintf(strbuf, " [%d] dwell 1 time = %0.3f ms", registerno, value);
mfwic 1:9f8583ba2431 804 sendSerial(strbuf);
mfwic 0:44a3005d4f20 805 return;
mfwic 0:44a3005d4f20 806 }
mfwic 0:44a3005d4f20 807
mfwic 0:44a3005d4f20 808 if (!strcmp(commandString, "DWL1_OV"))
mfwic 0:44a3005d4f20 809 {
mfwic 0:44a3005d4f20 810 if (!readback)
mfwic 0:44a3005d4f20 811 {
mfwic 0:44a3005d4f20 812 setSingleVariable(&ch[chpair][registerno].a_dwell1_ov, &ch[chpair][registerno].b_dwell1_ov, MIN_VOLTAGE, MAX_VOLTAGE);
mfwic 0:44a3005d4f20 813
mfwic 1:9f8583ba2431 814 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 815 sendSerial(strbuf);
mfwic 0:44a3005d4f20 816 }
mfwic 0:44a3005d4f20 817
mfwic 0:44a3005d4f20 818 value = ((channelSide == 1) ? ch[chpair][registerno].a_dwell1_ov : ch[chpair][registerno].b_dwell1_ov);
mfwic 0:44a3005d4f20 819
mfwic 1:9f8583ba2431 820 sprintf(strbuf, " [%d%c, %d] dwell 1 overvoltage = %0.3f V", chpair, chsgl, registerno, value);
mfwic 1:9f8583ba2431 821 sendSerial(strbuf);
mfwic 0:44a3005d4f20 822 return;
mfwic 0:44a3005d4f20 823 }
mfwic 0:44a3005d4f20 824
mfwic 0:44a3005d4f20 825 if (!strcmp(commandString, "DWL1_OV_TIME"))
mfwic 0:44a3005d4f20 826 {
mfwic 0:44a3005d4f20 827 if (!readback)
mfwic 0:44a3005d4f20 828 {
mfwic 0:44a3005d4f20 829 // Set channel 1's dwell 1 overvoltage time
mfwic 0:44a3005d4f20 830 setSingleVariable(&dwells[registerno].a_dwell1_ov_time, &dwells[registerno].b_dwell1_ov_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 831
mfwic 1:9f8583ba2431 832 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 833 sendSerial(strbuf);
mfwic 0:44a3005d4f20 834 }
mfwic 0:44a3005d4f20 835
mfwic 0:44a3005d4f20 836 value = ((channelSide == 1) ? dwells[registerno].a_dwell1_ov_time : dwells[registerno].b_dwell1_ov_time);
mfwic 0:44a3005d4f20 837
mfwic 1:9f8583ba2431 838 sprintf(strbuf, " [%d] dwell 1 overvoltage time = %0.3f ms", registerno, value);
mfwic 1:9f8583ba2431 839 sendSerial(strbuf);
mfwic 0:44a3005d4f20 840 return;
mfwic 0:44a3005d4f20 841 }
mfwic 0:44a3005d4f20 842
mfwic 0:44a3005d4f20 843 if (!strcmp(commandString, "DWL2AMPL"))
mfwic 0:44a3005d4f20 844 {
mfwic 0:44a3005d4f20 845 if (!readback)
mfwic 0:44a3005d4f20 846 {
mfwic 0:44a3005d4f20 847 setSingleVariable(&ch[chpair][registerno].a_dwell2_volts, &ch[chpair][registerno].b_dwell2_volts, MIN_VOLTAGE, MAX_VOLTAGE);
mfwic 0:44a3005d4f20 848
mfwic 1:9f8583ba2431 849 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 850 sendSerial(strbuf);
mfwic 0:44a3005d4f20 851 }
mfwic 0:44a3005d4f20 852
mfwic 0:44a3005d4f20 853 value = ((channelSide == 1) ? ch[chpair][registerno].a_dwell2_volts : ch[chpair][registerno].b_dwell2_volts);
mfwic 0:44a3005d4f20 854
mfwic 1:9f8583ba2431 855 sprintf(strbuf, " [%d%c, %d] dwell 2 peak amplitude = %0.3f V", chpair, chsgl, registerno, value);
mfwic 1:9f8583ba2431 856 sendSerial(strbuf);
mfwic 0:44a3005d4f20 857 return;
mfwic 0:44a3005d4f20 858 }
mfwic 0:44a3005d4f20 859
mfwic 0:44a3005d4f20 860 if (!strcmp(commandString,"DWL2"))
mfwic 0:44a3005d4f20 861 {
mfwic 0:44a3005d4f20 862 if (!readback)
mfwic 0:44a3005d4f20 863 {
mfwic 0:44a3005d4f20 864 // Set dwell 2 time
mfwic 0:44a3005d4f20 865 setSingleVariable(&dwells[registerno].a_dwell2_time, &dwells[registerno].b_dwell2_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 866
mfwic 1:9f8583ba2431 867 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 868 sendSerial(strbuf);
mfwic 0:44a3005d4f20 869 }
mfwic 0:44a3005d4f20 870
mfwic 0:44a3005d4f20 871 value = ((channelSide == 1) ? dwells[registerno].a_dwell2_time : dwells[registerno].b_dwell2_time);
mfwic 0:44a3005d4f20 872
mfwic 1:9f8583ba2431 873 sprintf(strbuf, " [%d] dwell 2 time = %0.3f ms", registerno, value);
mfwic 1:9f8583ba2431 874 sendSerial(strbuf);
mfwic 0:44a3005d4f20 875 return;
mfwic 0:44a3005d4f20 876 }
mfwic 0:44a3005d4f20 877
mfwic 0:44a3005d4f20 878 if (!strcmp(commandString, "DWL2_OV"))
mfwic 0:44a3005d4f20 879 {
mfwic 0:44a3005d4f20 880 if (!readback)
mfwic 0:44a3005d4f20 881 {
mfwic 0:44a3005d4f20 882 setSingleVariable(&ch[chpair][registerno].a_dwell2_ov, &ch[chpair][registerno].b_dwell2_ov, MIN_VOLTAGE, MAX_VOLTAGE);
mfwic 0:44a3005d4f20 883
mfwic 1:9f8583ba2431 884 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 885 sendSerial(strbuf);
mfwic 0:44a3005d4f20 886 }
mfwic 0:44a3005d4f20 887
mfwic 0:44a3005d4f20 888 value = ((channelSide == 1) ? ch[chpair][registerno].a_dwell2_ov : ch[chpair][registerno].b_dwell2_ov);
mfwic 0:44a3005d4f20 889
mfwic 1:9f8583ba2431 890 sprintf(strbuf, " [%d%c, %d] dwell 2 overvoltage = %0.3f V", chpair, chsgl, registerno, value);
mfwic 1:9f8583ba2431 891 sendSerial(strbuf);
mfwic 0:44a3005d4f20 892 return;
mfwic 0:44a3005d4f20 893 }
mfwic 0:44a3005d4f20 894
mfwic 0:44a3005d4f20 895 if (!strcmp(commandString, "DWL2_OV_TIME"))
mfwic 0:44a3005d4f20 896 {
mfwic 0:44a3005d4f20 897 if (!readback)
mfwic 0:44a3005d4f20 898 {
mfwic 0:44a3005d4f20 899 // Set dwell 2 overvoltage time
mfwic 0:44a3005d4f20 900 setSingleVariable(&dwells[registerno].a_dwell2_ov_time, &dwells[registerno].b_dwell2_ov_time, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS);
mfwic 0:44a3005d4f20 901
mfwic 1:9f8583ba2431 902 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 903 sendSerial(strbuf);
mfwic 0:44a3005d4f20 904 }
mfwic 0:44a3005d4f20 905
mfwic 0:44a3005d4f20 906 value = ((channelSide == 1) ? dwells[registerno].a_dwell2_ov_time : dwells[registerno].b_dwell2_ov_time);
mfwic 0:44a3005d4f20 907
mfwic 1:9f8583ba2431 908 sprintf(strbuf, " [%d] dwell 2 overvoltage time = %0.3f ms", registerno, value);
mfwic 1:9f8583ba2431 909 sendSerial(strbuf);
mfwic 0:44a3005d4f20 910 return;
mfwic 0:44a3005d4f20 911 }
mfwic 0:44a3005d4f20 912
mfwic 0:44a3005d4f20 913 if (!strcmp(commandString, "ENABLE"))
mfwic 0:44a3005d4f20 914 {
mfwic 0:44a3005d4f20 915 if (!readback)
mfwic 0:44a3005d4f20 916 {
mfwic 0:44a3005d4f20 917 ch[chpair][registerno].enabled = 1;
mfwic 0:44a3005d4f20 918
mfwic 1:9f8583ba2431 919 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 920 sendSerial(strbuf);
mfwic 0:44a3005d4f20 921 }
mfwic 0:44a3005d4f20 922
mfwic 1:9f8583ba2431 923 sprintf(strbuf, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 1:9f8583ba2431 924 sendSerial(strbuf);
mfwic 0:44a3005d4f20 925 return;
mfwic 0:44a3005d4f20 926 }
mfwic 0:44a3005d4f20 927
mfwic 0:44a3005d4f20 928 if (!strcmp(commandString,"DISABLE"))
mfwic 0:44a3005d4f20 929 {
mfwic 0:44a3005d4f20 930 if (!readback)
mfwic 0:44a3005d4f20 931 {
mfwic 0:44a3005d4f20 932 ch[chpair][registerno].enabled = 0;
mfwic 0:44a3005d4f20 933
mfwic 1:9f8583ba2431 934 sprintf(strbuf, " Setting");
mfwic 1:9f8583ba2431 935 sendSerial(strbuf);
mfwic 0:44a3005d4f20 936 }
mfwic 0:44a3005d4f20 937
mfwic 1:9f8583ba2431 938 sprintf(strbuf, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 1:9f8583ba2431 939 sendSerial(strbuf);
mfwic 0:44a3005d4f20 940 return;
mfwic 0:44a3005d4f20 941 }
mfwic 0:44a3005d4f20 942
mfwic 0:44a3005d4f20 943 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 944 {
mfwic 0:44a3005d4f20 945 commandError = 1;
mfwic 0:44a3005d4f20 946 }
mfwic 1:9f8583ba2431 947 }*/
mfwic 0:44a3005d4f20 948
mfwic 0:44a3005d4f20 949
mfwic 0:44a3005d4f20 950 /************************************************************
mfwic 0:44a3005d4f20 951 * Routine: testMenu
mfwic 0:44a3005d4f20 952 * Input: none
mfwic 0:44a3005d4f20 953 * Returns: none
mfwic 0:44a3005d4f20 954 * Description:
mfwic 0:44a3005d4f20 955 * testMenu
mfwic 0:44a3005d4f20 956 **************************************************************/
mfwic 0:44a3005d4f20 957 void testMenu(void)
mfwic 0:44a3005d4f20 958 {
mfwic 0:44a3005d4f20 959 int ival;
mfwic 0:44a3005d4f20 960 int ch, dac;
mfwic 6:39442d493098 961 //float fval;
mfwic 0:44a3005d4f20 962 unsigned int data;
mfwic 0:44a3005d4f20 963
mfwic 0:44a3005d4f20 964 char commandString[80] = { 0 };
mfwic 5:09be5bbb5020 965
mfwic 0:44a3005d4f20 966
mfwic 0:44a3005d4f20 967 commandError = 0;
mfwic 0:44a3005d4f20 968 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 969
mfwic 0:44a3005d4f20 970 if (!strcmp(commandString, "LEDS")) // duh do I have to tell you?
mfwic 0:44a3005d4f20 971 {
mfwic 1:9f8583ba2431 972 //testLEDs();
mfwic 0:44a3005d4f20 973 return;
mfwic 0:44a3005d4f20 974 }
mfwic 0:44a3005d4f20 975
mfwic 0:44a3005d4f20 976 if (!strcmp(commandString, "SELFTEST"))
mfwic 0:44a3005d4f20 977 {
mfwic 0:44a3005d4f20 978 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0))
mfwic 0:44a3005d4f20 979 {
mfwic 1:9f8583ba2431 980 //ival = DEFAULT_SELFTEST_BOARDS;
mfwic 1:9f8583ba2431 981 ival = 0;
mfwic 0:44a3005d4f20 982 }
mfwic 0:44a3005d4f20 983 else
mfwic 0:44a3005d4f20 984 {
mfwic 0:44a3005d4f20 985 ival = getival(SET);
mfwic 0:44a3005d4f20 986
mfwic 0:44a3005d4f20 987 if ((ival < 1) || (ival > MAX_BOARDS))
mfwic 0:44a3005d4f20 988 {
mfwic 1:9f8583ba2431 989 sprintf(strbuf, " Invalid number of channels/boards (range is 1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 990 sendSerial(strbuf);
mfwic 0:44a3005d4f20 991 commandError = 1;
mfwic 0:44a3005d4f20 992 return;
mfwic 0:44a3005d4f20 993 }
mfwic 0:44a3005d4f20 994 }
mfwic 0:44a3005d4f20 995
mfwic 1:9f8583ba2431 996 //selfTest(ival);
mfwic 0:44a3005d4f20 997 return;
mfwic 0:44a3005d4f20 998 }
mfwic 0:44a3005d4f20 999
mfwic 0:44a3005d4f20 1000 if (!strcmp(commandString, "HVEN")) // high voltage enable
mfwic 0:44a3005d4f20 1001 {
mfwic 0:44a3005d4f20 1002 ival = getival(SET);
mfwic 1:9f8583ba2431 1003 //hv_en = ival;
mfwic 0:44a3005d4f20 1004 return;
mfwic 0:44a3005d4f20 1005 }
mfwic 0:44a3005d4f20 1006
mfwic 0:44a3005d4f20 1007 if (!strcmp(commandString, "DAC"))
mfwic 0:44a3005d4f20 1008 {
mfwic 0:44a3005d4f20 1009 ch = getival(SET);
mfwic 0:44a3005d4f20 1010 getDelimiter();
mfwic 0:44a3005d4f20 1011 dac = getival(SET);
mfwic 0:44a3005d4f20 1012 getDelimiter();
mfwic 0:44a3005d4f20 1013 data = getival(SET);
mfwic 0:44a3005d4f20 1014
mfwic 0:44a3005d4f20 1015 validateChannel(ch);
mfwic 0:44a3005d4f20 1016 if (commandError) return;
mfwic 0:44a3005d4f20 1017 ch--;
mfwic 0:44a3005d4f20 1018
mfwic 1:9f8583ba2431 1019 //sendData((unsigned int)ch, (unsigned int)dac, data);
mfwic 1:9f8583ba2431 1020 sprintf(strbuf, " ch: %u dac: %u value: %u", ch + 1, dac, data);
mfwic 1:9f8583ba2431 1021 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1022 return;
mfwic 0:44a3005d4f20 1023 }
mfwic 0:44a3005d4f20 1024
mfwic 0:44a3005d4f20 1025 if (!strcmp(commandString, "DINIT"))
mfwic 0:44a3005d4f20 1026 {
mfwic 1:9f8583ba2431 1027 //initDACs();
mfwic 0:44a3005d4f20 1028 return;
mfwic 0:44a3005d4f20 1029 }
mfwic 0:44a3005d4f20 1030
mfwic 0:44a3005d4f20 1031 if (!strcmp(commandString, "FINIT"))
mfwic 0:44a3005d4f20 1032 {
mfwic 1:9f8583ba2431 1033 //formatParameterSector();
mfwic 0:44a3005d4f20 1034 return;
mfwic 0:44a3005d4f20 1035 }
mfwic 0:44a3005d4f20 1036
mfwic 0:44a3005d4f20 1037 if (!strcmp(commandString, "CINIT"))
mfwic 0:44a3005d4f20 1038 {
mfwic 1:9f8583ba2431 1039 //initCalParameters();
mfwic 1:9f8583ba2431 1040 sprintf(strbuf, " All calibration parameters set to default values");
mfwic 1:9f8583ba2431 1041 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1042 return;
mfwic 0:44a3005d4f20 1043 }
mfwic 1:9f8583ba2431 1044 /*
mfwic 0:44a3005d4f20 1045 if (!strcmp(commandString, "VOLTS"))
mfwic 0:44a3005d4f20 1046 {
mfwic 0:44a3005d4f20 1047 ch = getival(SET);
mfwic 0:44a3005d4f20 1048 getDelimiter();
mfwic 0:44a3005d4f20 1049 dac = getival(SET);
mfwic 0:44a3005d4f20 1050 getDelimiter();
mfwic 0:44a3005d4f20 1051 fval = getfval(SET);
mfwic 0:44a3005d4f20 1052
mfwic 0:44a3005d4f20 1053 validateChannel(ch);
mfwic 0:44a3005d4f20 1054 if (commandError) return;
mfwic 0:44a3005d4f20 1055 ch--;
mfwic 0:44a3005d4f20 1056
mfwic 0:44a3005d4f20 1057 if (dac == 1)
mfwic 0:44a3005d4f20 1058 {
mfwic 0:44a3005d4f20 1059 data = (unsigned int)(cal[ch].a_scale * fval + cal[ch].a_offset);
mfwic 0:44a3005d4f20 1060 dac = ADC_CH1;
mfwic 0:44a3005d4f20 1061 }
mfwic 0:44a3005d4f20 1062 else
mfwic 0:44a3005d4f20 1063 {
mfwic 0:44a3005d4f20 1064 data = (unsigned int)(cal[ch].b_scale * fval + cal[ch].b_offset);
mfwic 0:44a3005d4f20 1065 dac = ADC_CH2;
mfwic 0:44a3005d4f20 1066 }
mfwic 0:44a3005d4f20 1067
mfwic 0:44a3005d4f20 1068 sendData((unsigned int)ch, (unsigned int)dac, data);
mfwic 1:9f8583ba2431 1069 sprintf(strbuf, " ch: %u dac: %u value: %u", ch + 1, dac, data);
mfwic 1:9f8583ba2431 1070 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1071 return;
mfwic 0:44a3005d4f20 1072 }
mfwic 0:44a3005d4f20 1073
mfwic 0:44a3005d4f20 1074 if (!strcmp(commandString, "BENB")) // board enable bits
mfwic 0:44a3005d4f20 1075 {
mfwic 0:44a3005d4f20 1076 ival = getival(SET);
mfwic 0:44a3005d4f20 1077 setBoardEnables((unsigned int)ival);
mfwic 1:9f8583ba2431 1078 sprintf(strbuf, " Board Enable Bits = 0x%04x\r\n", ival);
mfwic 1:9f8583ba2431 1079 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1080 return;
mfwic 0:44a3005d4f20 1081 }
mfwic 0:44a3005d4f20 1082
mfwic 0:44a3005d4f20 1083 if (!strcmp(commandString, "BEN")) // board enable
mfwic 0:44a3005d4f20 1084 {
mfwic 0:44a3005d4f20 1085 ch = getival(SET);
mfwic 0:44a3005d4f20 1086 getDelimiter();
mfwic 0:44a3005d4f20 1087 ival = getival(SET);
mfwic 0:44a3005d4f20 1088
mfwic 0:44a3005d4f20 1089 validateChannel(ch);
mfwic 0:44a3005d4f20 1090 if (commandError) return;
mfwic 0:44a3005d4f20 1091 ch--;
mfwic 0:44a3005d4f20 1092
mfwic 0:44a3005d4f20 1093 setBoardEnable(ch, (unsigned int)ival);
mfwic 1:9f8583ba2431 1094 sprintf(strbuf, " Board Enable %d = %d\r\n", ch + 1, ival);
mfwic 1:9f8583ba2431 1095 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1096 return;
mfwic 0:44a3005d4f20 1097 }
mfwic 0:44a3005d4f20 1098
mfwic 0:44a3005d4f20 1099 if (!strcmp(commandString, "LD"))
mfwic 0:44a3005d4f20 1100 {
mfwic 0:44a3005d4f20 1101 ival = getival(SET);
mfwic 0:44a3005d4f20 1102
mfwic 0:44a3005d4f20 1103 if (ival)
mfwic 0:44a3005d4f20 1104 {
mfwic 0:44a3005d4f20 1105 tst_ld = 1;
mfwic 0:44a3005d4f20 1106 }
mfwic 0:44a3005d4f20 1107 else
mfwic 0:44a3005d4f20 1108 {
mfwic 0:44a3005d4f20 1109 tst_ld = 0;
mfwic 0:44a3005d4f20 1110 }
mfwic 0:44a3005d4f20 1111
mfwic 0:44a3005d4f20 1112 Delay(100);
mfwic 0:44a3005d4f20 1113 ival = dtst_out;
mfwic 1:9f8583ba2431 1114 sprintf(strbuf, " DTST_OUT = %d\r\n", ival);
mfwic 1:9f8583ba2431 1115 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1116 return;
mfwic 0:44a3005d4f20 1117 }
mfwic 0:44a3005d4f20 1118
mfwic 0:44a3005d4f20 1119 if (!strcmp(commandString, "SCK"))
mfwic 0:44a3005d4f20 1120 {
mfwic 0:44a3005d4f20 1121 ival = getival(SET);
mfwic 0:44a3005d4f20 1122
mfwic 0:44a3005d4f20 1123 if (ival)
mfwic 0:44a3005d4f20 1124 {
mfwic 0:44a3005d4f20 1125 sclk = 1;
mfwic 0:44a3005d4f20 1126 }
mfwic 0:44a3005d4f20 1127 else
mfwic 0:44a3005d4f20 1128 {
mfwic 0:44a3005d4f20 1129 sclk = 0;
mfwic 0:44a3005d4f20 1130 }
mfwic 0:44a3005d4f20 1131
mfwic 0:44a3005d4f20 1132 ival = dtst_out;
mfwic 1:9f8583ba2431 1133 sprintf(strbuf, " DTST_OUT = %d\r\n", ival);
mfwic 1:9f8583ba2431 1134 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1135 return;
mfwic 0:44a3005d4f20 1136 }
mfwic 0:44a3005d4f20 1137
mfwic 0:44a3005d4f20 1138 if (!strcmp(commandString, "FLASHDEMO")) // flash test
mfwic 0:44a3005d4f20 1139 {
mfwic 0:44a3005d4f20 1140 flashdemo();
mfwic 0:44a3005d4f20 1141 return;
mfwic 0:44a3005d4f20 1142 }
mfwic 0:44a3005d4f20 1143
mfwic 0:44a3005d4f20 1144 if (!strcmp(commandString, "HVGOOD"))
mfwic 0:44a3005d4f20 1145 {
mfwic 1:9f8583ba2431 1146 sprintf(strbuf, " HVCMP1: %i HVCMP2: %i", (int)hv_cmptr1, (int)hv_cmptr2);
mfwic 1:9f8583ba2431 1147 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1148 return;
mfwic 0:44a3005d4f20 1149 }
mfwic 1:9f8583ba2431 1150 */
mfwic 0:44a3005d4f20 1151 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 1152 {
mfwic 0:44a3005d4f20 1153 commandError = 1;
mfwic 0:44a3005d4f20 1154 }
mfwic 0:44a3005d4f20 1155 }
mfwic 0:44a3005d4f20 1156
mfwic 0:44a3005d4f20 1157 /************************************************************
mfwic 0:44a3005d4f20 1158 * Routine: setDwellTime
mfwic 0:44a3005d4f20 1159 * Input: dwellType (enum)
mfwic 0:44a3005d4f20 1160 * Returns: none
mfwic 0:44a3005d4f20 1161 * Description:
mfwic 0:44a3005d4f20 1162 * Set the specified dwell time in [registerno] to the indicated
mfwic 0:44a3005d4f20 1163 * number of milliseconds
mfwic 0:44a3005d4f20 1164 **************************************************************/
mfwic 1:9f8583ba2431 1165 /*enum { DWELL_1_OV_TIME, DWELL_1_TIME, DWELL_2_OV_TIME, DWELL_2_TIME };
mfwic 0:44a3005d4f20 1166
mfwic 0:44a3005d4f20 1167 void setDwellTime(int dwellType)
mfwic 0:44a3005d4f20 1168 {
mfwic 0:44a3005d4f20 1169 char channelSideChar, setSingleChannel;
mfwic 0:44a3005d4f20 1170 float fValue;
mfwic 0:44a3005d4f20 1171
mfwic 0:44a3005d4f20 1172 if (readback)
mfwic 0:44a3005d4f20 1173 {
mfwic 0:44a3005d4f20 1174 if (dwellType == DWELL_1_OV_TIME)
mfwic 0:44a3005d4f20 1175 {
mfwic 1:9f8583ba2431 1176 sprintf(strbuf, "\r\n Channel A Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell1_ov_time);
mfwic 1:9f8583ba2431 1177 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1178 sprintf(strbuf, "\r\n Channel B Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell1_ov_time);
mfwic 1:9f8583ba2431 1179 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1180 }
mfwic 1:9f8583ba2431 1181
mfwic 0:44a3005d4f20 1182 }
mfwic 0:44a3005d4f20 1183 else if (running == 1)
mfwic 0:44a3005d4f20 1184 {
mfwic 1:9f8583ba2431 1185 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1186 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1187 }
mfwic 0:44a3005d4f20 1188 else
mfwic 0:44a3005d4f20 1189 {
mfwic 0:44a3005d4f20 1190 // Find the next command string character
mfwic 0:44a3005d4f20 1191 while (rxbuf[bufloc] == ' ' || rxbuf[bufloc] == '[' && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1192
mfwic 0:44a3005d4f20 1193 // Is the user setting a single channel or a channel pair?
mfwic 0:44a3005d4f20 1194 channelSideChar = toupper(rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1195 setSingleChannel = ((channelSideChar == 'A') || (channelSideChar == 'B'));
mfwic 0:44a3005d4f20 1196
mfwic 0:44a3005d4f20 1197 if (setSingleChannel)
mfwic 0:44a3005d4f20 1198 {
mfwic 0:44a3005d4f20 1199 chsgl = channelSideChar;
mfwic 0:44a3005d4f20 1200
mfwic 0:44a3005d4f20 1201 // Skip over the channel side character
mfwic 0:44a3005d4f20 1202 bufloc++;
mfwic 0:44a3005d4f20 1203
mfwic 0:44a3005d4f20 1204 // Find the next command string character
mfwic 0:44a3005d4f20 1205 while (rxbuf[bufloc] == ' ' || rxbuf[bufloc] == ',' && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1206 }
mfwic 0:44a3005d4f20 1207
mfwic 0:44a3005d4f20 1208 // Back up because the current character should be the start of the register
mfwic 0:44a3005d4f20 1209 // number but validateInt() is going to advance one character before calling
mfwic 0:44a3005d4f20 1210 // atof()
mfwic 0:44a3005d4f20 1211 bufloc--;
mfwic 0:44a3005d4f20 1212
mfwic 0:44a3005d4f20 1213 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1214 {
mfwic 1:9f8583ba2431 1215 sprintf(strbuf, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 1:9f8583ba2431 1216 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1217 commandError = 1;
mfwic 0:44a3005d4f20 1218 }
mfwic 0:44a3005d4f20 1219
mfwic 0:44a3005d4f20 1220 if (!commandError)
mfwic 0:44a3005d4f20 1221 {
mfwic 0:44a3005d4f20 1222 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1223 registerno--;
mfwic 0:44a3005d4f20 1224
mfwic 0:44a3005d4f20 1225 // Skip over the register number
mfwic 0:44a3005d4f20 1226 while (isdigit(rxbuf[bufloc]) && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1227
mfwic 0:44a3005d4f20 1228 // Skip over white space and delimiters
mfwic 0:44a3005d4f20 1229 while (rxbuf[bufloc] == ' ' || rxbuf[bufloc] == ',' && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1230
mfwic 0:44a3005d4f20 1231 // Back up because the current character should be the start of the value
mfwic 0:44a3005d4f20 1232 // but validateEntry() is going to advance one character before calling
mfwic 0:44a3005d4f20 1233 // atof()
mfwic 0:44a3005d4f20 1234 bufloc--;
mfwic 0:44a3005d4f20 1235
mfwic 0:44a3005d4f20 1236 // Read and validate the dwell time value
mfwic 0:44a3005d4f20 1237 if (!validateEntry(SET, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS, &fValue))
mfwic 0:44a3005d4f20 1238 {
mfwic 1:9f8583ba2431 1239 sprintf(strbuf, " Invalid dwell time");
mfwic 1:9f8583ba2431 1240 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1241 commandError = 1;
mfwic 0:44a3005d4f20 1242 }
mfwic 0:44a3005d4f20 1243 }
mfwic 0:44a3005d4f20 1244
mfwic 0:44a3005d4f20 1245 if (!commandError)
mfwic 0:44a3005d4f20 1246 {
mfwic 0:44a3005d4f20 1247 if (dwellType == DWELL_1_OV_TIME)
mfwic 0:44a3005d4f20 1248 {
mfwic 0:44a3005d4f20 1249 if ((!setSingleChannel) || (channelSideChar == 'A'))
mfwic 0:44a3005d4f20 1250 {
mfwic 0:44a3005d4f20 1251 dwells[registerno].a_dwell1_ov_time = fValue;
mfwic 1:9f8583ba2431 1252 sprintf(strbuf, "\r\n Channel A Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell1_ov_time);
mfwic 1:9f8583ba2431 1253 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1254 }
mfwic 0:44a3005d4f20 1255 if ((!setSingleChannel) || (channelSideChar == 'B'))
mfwic 0:44a3005d4f20 1256 {
mfwic 0:44a3005d4f20 1257 dwells[registerno].b_dwell1_ov_time = fValue;
mfwic 1:9f8583ba2431 1258 sprintf(strbuf, "\r\n Channel B Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell1_ov_time);
mfwic 1:9f8583ba2431 1259 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1260 }
mfwic 0:44a3005d4f20 1261 }
mfwic 1:9f8583ba2431 1262
mfwic 0:44a3005d4f20 1263 }
mfwic 0:44a3005d4f20 1264 }
mfwic 1:9f8583ba2431 1265 }*/
mfwic 0:44a3005d4f20 1266
mfwic 0:44a3005d4f20 1267
mfwic 0:44a3005d4f20 1268 // Clear the specified register
mfwic 1:9f8583ba2431 1269 /*
mfwic 0:44a3005d4f20 1270 void clearRegister(unsigned int reg)
mfwic 0:44a3005d4f20 1271 {
mfwic 0:44a3005d4f20 1272 int i;
mfwic 0:44a3005d4f20 1273
mfwic 0:44a3005d4f20 1274 dwells[reg].a_dwell1_time = 0;
mfwic 0:44a3005d4f20 1275 dwells[reg].a_dwell2_time = 0;
mfwic 0:44a3005d4f20 1276 dwells[reg].a_dwell1_ov_time = 0;
mfwic 0:44a3005d4f20 1277 dwells[reg].a_dwell2_ov_time = 0;
mfwic 0:44a3005d4f20 1278 dwells[reg].b_dwell1_time = 0;
mfwic 0:44a3005d4f20 1279 dwells[reg].b_dwell2_time = 0;
mfwic 0:44a3005d4f20 1280 dwells[reg].b_dwell1_ov_time = 0;
mfwic 0:44a3005d4f20 1281 dwells[reg].b_dwell2_ov_time = 0;
mfwic 0:44a3005d4f20 1282
mfwic 0:44a3005d4f20 1283 for (i = 0; i < MAX_BOARDS; i++)
mfwic 0:44a3005d4f20 1284 {
mfwic 0:44a3005d4f20 1285 ch[i][reg].enabled = 0;
mfwic 0:44a3005d4f20 1286 ch[i][reg].installed = 0;
mfwic 0:44a3005d4f20 1287 ch[i][reg].inverted = 0;
mfwic 0:44a3005d4f20 1288 ch[i][reg].differential_dwell = 1;
mfwic 0:44a3005d4f20 1289
mfwic 0:44a3005d4f20 1290 ch[i][reg].a_dwell1_volts = 0;
mfwic 0:44a3005d4f20 1291 ch[i][reg].a_dwell2_volts = 0;
mfwic 0:44a3005d4f20 1292 ch[i][reg].a_dwell1_ov = 0;
mfwic 0:44a3005d4f20 1293 ch[i][reg].a_dwell2_ov = 0;
mfwic 0:44a3005d4f20 1294 ch[i][reg].b_dwell1_volts = 0;
mfwic 0:44a3005d4f20 1295 ch[i][reg].b_dwell2_volts = 0;
mfwic 0:44a3005d4f20 1296 ch[i][reg].b_dwell1_ov = 0;
mfwic 0:44a3005d4f20 1297 ch[i][reg].b_dwell2_ov = 0;
mfwic 0:44a3005d4f20 1298 }
mfwic 1:9f8583ba2431 1299 }*/
mfwic 0:44a3005d4f20 1300
mfwic 0:44a3005d4f20 1301
mfwic 0:44a3005d4f20 1302 /************************************************************
mfwic 0:44a3005d4f20 1303 * Routine: doCommand
mfwic 0:44a3005d4f20 1304 * Input: none
mfwic 0:44a3005d4f20 1305 * Returns: none
mfwic 0:44a3005d4f20 1306 * Description:
mfwic 0:44a3005d4f20 1307 * This is the start of the command string.
mfwic 0:44a3005d4f20 1308 **************************************************************/
mfwic 0:44a3005d4f20 1309 void doCommand(void)
mfwic 0:44a3005d4f20 1310 {
mfwic 6:39442d493098 1311 //int channelNum, channelSide, numPoints, i;
mfwic 6:39442d493098 1312 int ival;
mfwic 6:39442d493098 1313 //char channelSideChar;
mfwic 0:44a3005d4f20 1314 unsigned int boardEnables;
mfwic 0:44a3005d4f20 1315
mfwic 0:44a3005d4f20 1316 char commandString[80] = { 0 };
mfwic 0:44a3005d4f20 1317
mfwic 0:44a3005d4f20 1318 bufloc = 0;
mfwic 0:44a3005d4f20 1319 commandError = 0;
mfwic 0:44a3005d4f20 1320
mfwic 0:44a3005d4f20 1321 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 1322
mfwic 1:9f8583ba2431 1323 if (!strcmp(commandString, "MENU"))
mfwic 1:9f8583ba2431 1324 {
mfwic 8:d3d7dca419b3 1325 menuRedraw(NO_PROMPT);
mfwic 1:9f8583ba2431 1326 }
mfwic 3:d8948c5b2951 1327 else if (!strcmp(commandString, "HELP"))
mfwic 3:d8948c5b2951 1328 {
mfwic 8:d3d7dca419b3 1329 menuRedraw(NO_PROMPT);
mfwic 3:d8948c5b2951 1330 }
mfwic 1:9f8583ba2431 1331 else if (!strcmp(commandString, "BRDS"))
mfwic 1:9f8583ba2431 1332 // BRDS is used to get/set the wr_out value.
mfwic 5:09be5bbb5020 1333 // The integer value of boardsActive is used to change wr_out via setBoardEnables(boardsActive).
mfwic 1:9f8583ba2431 1334 // Slots 12 to 0 are activated with the wr_out signals
mfwic 1:9f8583ba2431 1335 // wr_out[13] = slots[12:0]
mfwic 0:44a3005d4f20 1336 {
mfwic 5:09be5bbb5020 1337
mfwic 5:09be5bbb5020 1338 boardsActive = commandData;
mfwic 5:09be5bbb5020 1339
mfwic 0:44a3005d4f20 1340 if (readback)
mfwic 0:44a3005d4f20 1341 {
mfwic 5:09be5bbb5020 1342 sprintf(strbuf, " %d", boardsActive);
mfwic 1:9f8583ba2431 1343 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1344 }
mfwic 1:9f8583ba2431 1345 //else if (running == 1)
mfwic 1:9f8583ba2431 1346 //{
mfwic 1:9f8583ba2431 1347 // sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1348 // sendSerial(strbuf);
mfwic 1:9f8583ba2431 1349 //}
mfwic 0:44a3005d4f20 1350 else
mfwic 0:44a3005d4f20 1351 {
mfwic 5:09be5bbb5020 1352 if(checkRange(boardsActive, 0, 63) == 1){
mfwic 6:39442d493098 1353 en_out_code = setBoardWeights(boardsActive);
mfwic 1:9f8583ba2431 1354 }else{
mfwic 5:09be5bbb5020 1355 showRangeError(1, boardsActive, 0.0);
mfwic 1:9f8583ba2431 1356 }
mfwic 1:9f8583ba2431 1357 }
mfwic 1:9f8583ba2431 1358 }
mfwic 1:9f8583ba2431 1359 else if (!strcmp(commandString, "MULT"))
mfwic 1:9f8583ba2431 1360 // MULT is used to get/set the en_out value.
mfwic 5:09be5bbb5020 1361 // The integer value of boardMults is used to change en_out via setBoardWeights(boardMults).
mfwic 1:9f8583ba2431 1362 // en_out are binary weighted signals that activate groups of DC-DC converters on the slot cards.
mfwic 1:9f8583ba2431 1363 // en_out[6] = {en32, en16, en8, en4, en2, en1}
mfwic 1:9f8583ba2431 1364 {
mfwic 5:09be5bbb5020 1365 boardMults = commandData;
mfwic 5:09be5bbb5020 1366
mfwic 1:9f8583ba2431 1367 if (readback)
mfwic 1:9f8583ba2431 1368 {
mfwic 5:09be5bbb5020 1369 sprintf(strbuf, " %d", boardMults);
mfwic 1:9f8583ba2431 1370 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1371 }
mfwic 1:9f8583ba2431 1372 //else if (running == 1)
mfwic 1:9f8583ba2431 1373 //{
mfwic 1:9f8583ba2431 1374 // sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1375 // sendSerial(strbuf);
mfwic 1:9f8583ba2431 1376 //}
mfwic 1:9f8583ba2431 1377 else
mfwic 1:9f8583ba2431 1378 {
mfwic 5:09be5bbb5020 1379 if(checkRange(boardMults, 0, 63) == 1){
mfwic 6:39442d493098 1380 en_out_code = setBoardWeights(boardMults);
mfwic 1:9f8583ba2431 1381 }else{
mfwic 5:09be5bbb5020 1382 showRangeError(1, boardMults, 0.0);
mfwic 1:9f8583ba2431 1383 }
mfwic 0:44a3005d4f20 1384 }
mfwic 0:44a3005d4f20 1385 }
mfwic 6:39442d493098 1386 else if (!strcmp(commandString, "MY12"))
mfwic 6:39442d493098 1387 // MULT is used to get/set the en_out value.
mfwic 6:39442d493098 1388 // The integer value of boardMults is used to change en_out via setBoardWeights(boardMults).
mfwic 6:39442d493098 1389 // en_out are binary weighted signals that activate groups of DC-DC converters on the slot cards.
mfwic 6:39442d493098 1390 // en_out[6] = {en32, en16, en8, en4, en2, en1}
mfwic 6:39442d493098 1391 {
mfwic 6:39442d493098 1392 my12 = commandData;
mfwic 6:39442d493098 1393
mfwic 6:39442d493098 1394 //if(DEBUG){
mfwic 6:39442d493098 1395 // sprintf(strbuf, "my12=%d commandData=%d\r\n", my12, commandData);
mfwic 6:39442d493098 1396 // sendSerial(strbuf);
mfwic 6:39442d493098 1397 //}
mfwic 6:39442d493098 1398
mfwic 6:39442d493098 1399 if (readback)
mfwic 6:39442d493098 1400 {
mfwic 6:39442d493098 1401 sprintf(strbuf, " %d", my12);
mfwic 6:39442d493098 1402 sendSerial(strbuf);
mfwic 6:39442d493098 1403 }
mfwic 6:39442d493098 1404 }
mfwic 0:44a3005d4f20 1405 else if (!strcmp(commandString, "ALLOFF"))
mfwic 0:44a3005d4f20 1406 {
mfwic 7:860b3a8275cb 1407
mfwic 1:9f8583ba2431 1408 //hv_en = 1;
mfwic 7:860b3a8275cb 1409 //wr_out_code = setBoardEnables((unsigned int)ALLOFF);
mfwic 7:860b3a8275cb 1410 my12 = 0;
mfwic 7:860b3a8275cb 1411 running = FALSE;
mfwic 6:39442d493098 1412 //setBoardEnables((unsigned int *)alloff);
mfwic 7:860b3a8275cb 1413 if(DEBUG){
mfwic 7:860b3a8275cb 1414 sprintf(strbuf, "wr_out_code=%d\r\n", wr_out_code);
mfwic 7:860b3a8275cb 1415 sendSerial(strbuf);
mfwic 7:860b3a8275cb 1416 }
mfwic 0:44a3005d4f20 1417 }
mfwic 0:44a3005d4f20 1418 else if (!strcmp(commandString, "ALLON"))
mfwic 0:44a3005d4f20 1419 {
mfwic 1:9f8583ba2431 1420 //hv_en = 0;
mfwic 6:39442d493098 1421 //setBoardEnables((unsigned int *)allon);
mfwic 7:860b3a8275cb 1422 wr_out_code = setBoardEnables((unsigned int)ALLON);
mfwic 0:44a3005d4f20 1423 }
mfwic 0:44a3005d4f20 1424 else if (!strcmp(commandString, "DWL1_OV_TIME"))
mfwic 0:44a3005d4f20 1425 {
mfwic 1:9f8583ba2431 1426 //setDwellTime(DWELL_1_OV_TIME);
mfwic 0:44a3005d4f20 1427 }
mfwic 0:44a3005d4f20 1428 else if (!strcmp(commandString, "DWL1_TIME"))
mfwic 0:44a3005d4f20 1429 {
mfwic 1:9f8583ba2431 1430 //setDwellTime(DWELL_1_TIME);
mfwic 0:44a3005d4f20 1431 }
mfwic 0:44a3005d4f20 1432 else if (!strcmp(commandString, "RUN"))
mfwic 0:44a3005d4f20 1433 {
mfwic 0:44a3005d4f20 1434 // Skip over any white space and the optional '[' character
mfwic 0:44a3005d4f20 1435 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == '[')) bufloc++;
mfwic 0:44a3005d4f20 1436
mfwic 0:44a3005d4f20 1437 if (rxbuf[bufloc] == '0')
mfwic 0:44a3005d4f20 1438 {
mfwic 1:9f8583ba2431 1439 stopConverter();
mfwic 1:9f8583ba2431 1440 //setDacsToZeroVolts();
mfwic 0:44a3005d4f20 1441 }
mfwic 1:9f8583ba2431 1442 else if ((rxbuf[bufloc] > '0') && (rxbuf[bufloc] < '0' + MAX_BOARDS))
mfwic 0:44a3005d4f20 1443 {
mfwic 0:44a3005d4f20 1444 ival = atoi(&rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1445 ival--;
mfwic 0:44a3005d4f20 1446
mfwic 0:44a3005d4f20 1447 if (running == 0)
mfwic 0:44a3005d4f20 1448 {
mfwic 1:9f8583ba2431 1449 //setDacsToZeroVolts();
mfwic 1:9f8583ba2431 1450 //Delay(1000);
mfwic 1:9f8583ba2431 1451 wait(0.5);
mfwic 1:9f8583ba2431 1452 boardsActive = ival;
mfwic 1:9f8583ba2431 1453 startConverter(boardsActive);
mfwic 0:44a3005d4f20 1454 }
mfwic 0:44a3005d4f20 1455 else
mfwic 0:44a3005d4f20 1456 {
mfwic 0:44a3005d4f20 1457 // Compare the board enable flags between registers
mfwic 0:44a3005d4f20 1458 boardEnables = checkRegisterCompatibility(ival);
mfwic 0:44a3005d4f20 1459
mfwic 0:44a3005d4f20 1460 // If board enable flags match, change the register set
mfwic 0:44a3005d4f20 1461 if (boardEnables == 0)
mfwic 0:44a3005d4f20 1462 {
mfwic 1:9f8583ba2431 1463 boardsActive = ival;
mfwic 0:44a3005d4f20 1464 }
mfwic 0:44a3005d4f20 1465 else
mfwic 0:44a3005d4f20 1466 {
mfwic 1:9f8583ba2431 1467 sprintf(strbuf, " Board enable flags do not match (0x%08x)", boardEnables);
mfwic 1:9f8583ba2431 1468 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1469 }
mfwic 0:44a3005d4f20 1470 }
mfwic 0:44a3005d4f20 1471 }
mfwic 0:44a3005d4f20 1472 else
mfwic 0:44a3005d4f20 1473 {
mfwic 1:9f8583ba2431 1474 sprintf(strbuf, " Invalid register number (1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 1475 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1476 commandError = 1;
mfwic 0:44a3005d4f20 1477 }
mfwic 0:44a3005d4f20 1478 }
mfwic 0:44a3005d4f20 1479 else if (!strcmp(commandString, "STOP"))
mfwic 0:44a3005d4f20 1480 {
mfwic 1:9f8583ba2431 1481 stopConverter();
mfwic 1:9f8583ba2431 1482 //hv_en = OFF;
mfwic 0:44a3005d4f20 1483 }
mfwic 1:9f8583ba2431 1484 /* else if (!strcmp(commandString, "CLEAR"))
mfwic 0:44a3005d4f20 1485 {
mfwic 0:44a3005d4f20 1486 if (running == 1)
mfwic 0:44a3005d4f20 1487 {
mfwic 1:9f8583ba2431 1488 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1489 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1490 commandError = 1;
mfwic 0:44a3005d4f20 1491 }
mfwic 0:44a3005d4f20 1492 else if (!validateInt(SET, 0, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1493 {
mfwic 1:9f8583ba2431 1494 sprintf(strbuf, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 1:9f8583ba2431 1495 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1496 commandError = 1;
mfwic 0:44a3005d4f20 1497 }
mfwic 0:44a3005d4f20 1498
mfwic 0:44a3005d4f20 1499 if (!commandError)
mfwic 0:44a3005d4f20 1500 {
mfwic 0:44a3005d4f20 1501 if (registerno == 0)
mfwic 0:44a3005d4f20 1502 {
mfwic 0:44a3005d4f20 1503 frequency = 1000;
mfwic 0:44a3005d4f20 1504
mfwic 0:44a3005d4f20 1505 clearRegister(0);
mfwic 0:44a3005d4f20 1506 clearRegister(1);
mfwic 0:44a3005d4f20 1507 clearRegister(2);
mfwic 0:44a3005d4f20 1508 clearRegister(3);
mfwic 0:44a3005d4f20 1509
mfwic 0:44a3005d4f20 1510 initCalParameters();
mfwic 0:44a3005d4f20 1511
mfwic 1:9f8583ba2431 1512 sprintf(strbuf, " All parameters reset to default values");
mfwic 1:9f8583ba2431 1513 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1514 }
mfwic 0:44a3005d4f20 1515 else
mfwic 0:44a3005d4f20 1516 {
mfwic 0:44a3005d4f20 1517 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1518 registerno--;
mfwic 0:44a3005d4f20 1519
mfwic 0:44a3005d4f20 1520 clearRegister(registerno);
mfwic 0:44a3005d4f20 1521
mfwic 1:9f8583ba2431 1522 sprintf(strbuf, " [x, %d] voltages are 0", registerno);
mfwic 1:9f8583ba2431 1523 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1524 }
mfwic 0:44a3005d4f20 1525 }
mfwic 1:9f8583ba2431 1526 }*/
mfwic 0:44a3005d4f20 1527 else if(!strcmp(commandString, "TEST"))
mfwic 0:44a3005d4f20 1528 {
mfwic 0:44a3005d4f20 1529 if (running == 1)
mfwic 0:44a3005d4f20 1530 {
mfwic 1:9f8583ba2431 1531 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1532 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1533 }
mfwic 0:44a3005d4f20 1534 else
mfwic 0:44a3005d4f20 1535 {
mfwic 0:44a3005d4f20 1536 testMenu();
mfwic 0:44a3005d4f20 1537 }
mfwic 0:44a3005d4f20 1538 }
mfwic 1:9f8583ba2431 1539 /* else if(!strcmp(commandString, "READ"))
mfwic 0:44a3005d4f20 1540 {
mfwic 0:44a3005d4f20 1541 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1542 {
mfwic 1:9f8583ba2431 1543 sprintf(strbuf, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 1:9f8583ba2431 1544 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1545 commandError = 1;
mfwic 0:44a3005d4f20 1546 }
mfwic 0:44a3005d4f20 1547
mfwic 0:44a3005d4f20 1548 if (!commandError)
mfwic 0:44a3005d4f20 1549 {
mfwic 0:44a3005d4f20 1550 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1551 registerno--;
mfwic 0:44a3005d4f20 1552
mfwic 1:9f8583ba2431 1553 sprintf(strbuf, "\r\n Register [x, %d]: ", registerno + 1);
mfwic 1:9f8583ba2431 1554 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1555 sprintf(strbuf, "\r\n frequency = %0.3f Hz", frequency);
mfwic 1:9f8583ba2431 1556 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1557 sprintf(strbuf, "\r\n dwell1_ov_time = %0.3f ms", dwells[registerno].a_dwell1_ov_time);
mfwic 1:9f8583ba2431 1558 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1559 sprintf(strbuf, "\r\n dwell1_time = %0.3f ms", dwells[registerno].a_dwell1_time);
mfwic 1:9f8583ba2431 1560 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1561
mfwic 0:44a3005d4f20 1562 for (i = 0; i < MAX_BOARDS; i++)
mfwic 0:44a3005d4f20 1563 {
mfwic 1:9f8583ba2431 1564 sprintf(strbuf, "\r\n\r\n Register [%d, %d]: ", i + 1, registerno + 1);
mfwic 1:9f8583ba2431 1565 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1566 sprintf(strbuf, "\r\n enabled = %d", ch[i][registerno].enabled);
mfwic 1:9f8583ba2431 1567 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1568 sprintf(strbuf, "\r\n a_dwell1_ov = %0.3f V", ch[i][registerno].a_dwell1_ov);
mfwic 1:9f8583ba2431 1569 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1570 sprintf(strbuf, "\r\n a_dwell1_volts = %0.3f V", ch[i][registerno].a_dwell1_volts);
mfwic 1:9f8583ba2431 1571 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1572
mfwic 0:44a3005d4f20 1573 }
mfwic 0:44a3005d4f20 1574 }
mfwic 1:9f8583ba2431 1575 }*/
mfwic 8:d3d7dca419b3 1576 else if(!strcmp(commandString, "CAL"))
mfwic 0:44a3005d4f20 1577 {
mfwic 0:44a3005d4f20 1578 if (running == 1)
mfwic 0:44a3005d4f20 1579 {
mfwic 1:9f8583ba2431 1580 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1581 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1582 commandError = 1;
mfwic 0:44a3005d4f20 1583 }
mfwic 8:d3d7dca419b3 1584 /*else if (!validateInt(SET, 1, MAX_BOARDS, &channelNum))
mfwic 0:44a3005d4f20 1585 {
mfwic 1:9f8583ba2431 1586 sprintf(strbuf, " Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 1587 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1588 commandError = 1;
mfwic 8:d3d7dca419b3 1589 }*/
mfwic 8:d3d7dca419b3 1590 if (!commandError){
mfwic 8:d3d7dca419b3 1591 raw = TRUE;
mfwic 8:d3d7dca419b3 1592 menuRedraw(NO_PROMPT);
mfwic 0:44a3005d4f20 1593 }
mfwic 8:d3d7dca419b3 1594 }
mfwic 8:d3d7dca419b3 1595 else if(!strcmp(commandString, "UNCAL"))
mfwic 8:d3d7dca419b3 1596 {
mfwic 8:d3d7dca419b3 1597 if (running == 1)
mfwic 8:d3d7dca419b3 1598 {
mfwic 8:d3d7dca419b3 1599 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 8:d3d7dca419b3 1600 sendSerial(strbuf);
mfwic 8:d3d7dca419b3 1601 commandError = 1;
mfwic 8:d3d7dca419b3 1602 }
mfwic 8:d3d7dca419b3 1603 /*else if (!validateInt(SET, 1, MAX_BOARDS, &channelNum))
mfwic 8:d3d7dca419b3 1604 {
mfwic 8:d3d7dca419b3 1605 sprintf(strbuf, " Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 8:d3d7dca419b3 1606 sendSerial(strbuf);
mfwic 8:d3d7dca419b3 1607 commandError = 1;
mfwic 8:d3d7dca419b3 1608 }*/
mfwic 8:d3d7dca419b3 1609 if (!commandError){
mfwic 8:d3d7dca419b3 1610 raw = FALSE;
mfwic 8:d3d7dca419b3 1611 menuRedraw(NO_PROMPT);
mfwic 8:d3d7dca419b3 1612 }
mfwic 8:d3d7dca419b3 1613 }
mfwic 8:d3d7dca419b3 1614 /*
mfwic 0:44a3005d4f20 1615 if (!commandError)
mfwic 0:44a3005d4f20 1616 {
mfwic 0:44a3005d4f20 1617 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1618 channelNum--;
mfwic 0:44a3005d4f20 1619
mfwic 0:44a3005d4f20 1620 // Skip over digits parsed as part of the atoi() call
mfwic 0:44a3005d4f20 1621 while (isdigit(rxbuf[bufloc])) bufloc++;
mfwic 0:44a3005d4f20 1622
mfwic 0:44a3005d4f20 1623 // Does the user simply want to read the current cal parameters?
mfwic 0:44a3005d4f20 1624 if (rxbuf[bufloc] == '?')
mfwic 0:44a3005d4f20 1625 {
mfwic 1:9f8583ba2431 1626 sprintf(strbuf, "\r\nChannel %dA Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].a_scale, cal[channelNum].a_offset);
mfwic 1:9f8583ba2431 1627 sendSerial(strbuf);
mfwic 1:9f8583ba2431 1628 sprintf(strbuf, "\r\nChannel %dB Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].b_scale, cal[channelNum].b_offset);
mfwic 1:9f8583ba2431 1629 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1630 sendCRLF();
mfwic 0:44a3005d4f20 1631 return;
mfwic 0:44a3005d4f20 1632 }
mfwic 0:44a3005d4f20 1633
mfwic 0:44a3005d4f20 1634 // First character after digits must be either 'A' or 'B'
mfwic 0:44a3005d4f20 1635 channelSideChar = toupper(rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1636
mfwic 0:44a3005d4f20 1637 if ((channelSideChar != 'A') && (channelSideChar != 'B'))
mfwic 0:44a3005d4f20 1638 {
mfwic 1:9f8583ba2431 1639 sprintf(strbuf, " Invalid channel (A/B)");
mfwic 1:9f8583ba2431 1640 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1641 commandError = 1;
mfwic 0:44a3005d4f20 1642 }
mfwic 0:44a3005d4f20 1643 }
mfwic 0:44a3005d4f20 1644
mfwic 0:44a3005d4f20 1645 if (!commandError)
mfwic 0:44a3005d4f20 1646 {
mfwic 0:44a3005d4f20 1647 // Translate 'A' to CHAN1 and 'B' to CHAN2
mfwic 0:44a3005d4f20 1648 channelSide = (channelSideChar == 'A' ? 1 : 2);
mfwic 0:44a3005d4f20 1649
mfwic 0:44a3005d4f20 1650 // Move past the channel side character
mfwic 0:44a3005d4f20 1651 bufloc++;
mfwic 0:44a3005d4f20 1652
mfwic 0:44a3005d4f20 1653 // Does the user simply want to read the current cal parameters?
mfwic 0:44a3005d4f20 1654 if (rxbuf[bufloc] == '?')
mfwic 0:44a3005d4f20 1655 {
mfwic 0:44a3005d4f20 1656 if (channelSide == 1)
mfwic 0:44a3005d4f20 1657 {
mfwic 1:9f8583ba2431 1658 sprintf(strbuf, "\r\nChannel %dA Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].a_scale, cal[channelNum].a_offset);
mfwic 1:9f8583ba2431 1659 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1660 }
mfwic 0:44a3005d4f20 1661 else
mfwic 0:44a3005d4f20 1662 {
mfwic 1:9f8583ba2431 1663 sprintf(strbuf, "\r\nChannel %dB Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].b_scale, cal[channelNum].b_offset);
mfwic 1:9f8583ba2431 1664 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1665 }
mfwic 0:44a3005d4f20 1666
mfwic 0:44a3005d4f20 1667 sendCRLF();
mfwic 0:44a3005d4f20 1668 return;
mfwic 0:44a3005d4f20 1669 }
mfwic 0:44a3005d4f20 1670
mfwic 0:44a3005d4f20 1671 // If no point value specified, silently default to 3-point cal
mfwic 0:44a3005d4f20 1672 if (!strcmp(&rxbuf[bufloc], ""))
mfwic 0:44a3005d4f20 1673 {
mfwic 0:44a3005d4f20 1674 numPoints = 3;
mfwic 0:44a3005d4f20 1675 }
mfwic 0:44a3005d4f20 1676 else if (!validateInt(SET, 3, 11, &numPoints))
mfwic 0:44a3005d4f20 1677 {
mfwic 1:9f8583ba2431 1678 sprintf(strbuf, " Invalid number of cal points (3 - 11)");
mfwic 1:9f8583ba2431 1679 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1680 commandError = 1;
mfwic 0:44a3005d4f20 1681 }
mfwic 0:44a3005d4f20 1682 }
mfwic 0:44a3005d4f20 1683
mfwic 0:44a3005d4f20 1684 if (!commandError)
mfwic 0:44a3005d4f20 1685 {
mfwic 1:9f8583ba2431 1686 sprintf(strbuf, " Starting %d-point Calibration on Channel %d%c", numPoints, channelNum, channelSideChar);
mfwic 1:9f8583ba2431 1687 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1688
mfwic 0:44a3005d4f20 1689 // Reset the serial buffer for the incoming user input
mfwic 0:44a3005d4f20 1690 bufloc = 0;
mfwic 0:44a3005d4f20 1691 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 1692
mfwic 0:44a3005d4f20 1693 calibrate(channelNum, channelSide, numPoints);
mfwic 0:44a3005d4f20 1694 }
mfwic 0:44a3005d4f20 1695 }
mfwic 0:44a3005d4f20 1696 else if (!strcmp(commandString, "COMMIT"))
mfwic 0:44a3005d4f20 1697 {
mfwic 0:44a3005d4f20 1698 commitParametersToFlash();
mfwic 0:44a3005d4f20 1699 }
mfwic 0:44a3005d4f20 1700 else if (!strcmp(commandString, "CHLPR"))
mfwic 0:44a3005d4f20 1701 {
mfwic 0:44a3005d4f20 1702 if (readback)
mfwic 0:44a3005d4f20 1703 {
mfwic 1:9f8583ba2431 1704 sprintf(strbuf, " [%i, %i]", chpair, registerno);
mfwic 1:9f8583ba2431 1705 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1706 }
mfwic 0:44a3005d4f20 1707 else if (running == 1)
mfwic 0:44a3005d4f20 1708 {
mfwic 1:9f8583ba2431 1709 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1710 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1711 }
mfwic 0:44a3005d4f20 1712 else
mfwic 0:44a3005d4f20 1713 {
mfwic 0:44a3005d4f20 1714 if (!validateInt(SET, 1, MAX_BOARDS, &chpair))
mfwic 0:44a3005d4f20 1715 {
mfwic 1:9f8583ba2431 1716 sprintf(strbuf, "Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 1717 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1718 commandError = 1;
mfwic 0:44a3005d4f20 1719 }
mfwic 0:44a3005d4f20 1720
mfwic 0:44a3005d4f20 1721 if (!commandError)
mfwic 0:44a3005d4f20 1722 {
mfwic 0:44a3005d4f20 1723 getDelimiter();
mfwic 0:44a3005d4f20 1724
mfwic 0:44a3005d4f20 1725 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1726 {
mfwic 1:9f8583ba2431 1727 sprintf(strbuf, "Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 1:9f8583ba2431 1728 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1729 commandError = 1;
mfwic 0:44a3005d4f20 1730 }
mfwic 0:44a3005d4f20 1731 }
mfwic 0:44a3005d4f20 1732
mfwic 0:44a3005d4f20 1733 if (!commandError)
mfwic 0:44a3005d4f20 1734 {
mfwic 0:44a3005d4f20 1735 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1736 chpair--;
mfwic 0:44a3005d4f20 1737 registerno--;
mfwic 0:44a3005d4f20 1738
mfwic 0:44a3005d4f20 1739 // ignore spaces
mfwic 0:44a3005d4f20 1740 while ((rxbuf[bufloc++] == ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] != ';'));
mfwic 0:44a3005d4f20 1741
mfwic 0:44a3005d4f20 1742 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1743 {
mfwic 0:44a3005d4f20 1744 commandError = 1;
mfwic 0:44a3005d4f20 1745 }
mfwic 0:44a3005d4f20 1746 else
mfwic 0:44a3005d4f20 1747 {
mfwic 0:44a3005d4f20 1748 while((rxbuf[bufloc++] != ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] == ';') );
mfwic 0:44a3005d4f20 1749
mfwic 0:44a3005d4f20 1750 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1751 {
mfwic 0:44a3005d4f20 1752 commandError = 1;
mfwic 0:44a3005d4f20 1753 }
mfwic 0:44a3005d4f20 1754 else
mfwic 0:44a3005d4f20 1755 {
mfwic 0:44a3005d4f20 1756 chlprMenu();
mfwic 0:44a3005d4f20 1757 }
mfwic 0:44a3005d4f20 1758 }
mfwic 0:44a3005d4f20 1759 }
mfwic 0:44a3005d4f20 1760 }
mfwic 0:44a3005d4f20 1761 }
mfwic 0:44a3005d4f20 1762 else if (!strcmp(commandString, "CHLSGL"))
mfwic 0:44a3005d4f20 1763 {
mfwic 0:44a3005d4f20 1764 if (readback)
mfwic 0:44a3005d4f20 1765 {
mfwic 1:9f8583ba2431 1766 sprintf(strbuf, " [%i%c, %i]", chpair, chsgl, registerno);
mfwic 1:9f8583ba2431 1767 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1768 }
mfwic 0:44a3005d4f20 1769 else if (running == 1)
mfwic 0:44a3005d4f20 1770 {
mfwic 1:9f8583ba2431 1771 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 1772 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1773 }
mfwic 0:44a3005d4f20 1774 else
mfwic 0:44a3005d4f20 1775 {
mfwic 0:44a3005d4f20 1776 if (!validateInt(SET, 1, MAX_BOARDS, &chpair))
mfwic 0:44a3005d4f20 1777 {
mfwic 1:9f8583ba2431 1778 sprintf(strbuf, "Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 1779 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1780 commandError = 1;
mfwic 0:44a3005d4f20 1781 }
mfwic 0:44a3005d4f20 1782
mfwic 0:44a3005d4f20 1783 if (!commandError)
mfwic 0:44a3005d4f20 1784 {
mfwic 0:44a3005d4f20 1785 while(rxbuf[bufloc] == ' ' || rxbuf[bufloc] == '[' || isdigit(rxbuf[bufloc]) && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1786
mfwic 0:44a3005d4f20 1787 channelSideChar = toupper(rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1788
mfwic 0:44a3005d4f20 1789 if ((channelSideChar != 'A') && (channelSideChar != 'B'))
mfwic 0:44a3005d4f20 1790 {
mfwic 1:9f8583ba2431 1791 sprintf(strbuf, "Invalid channel (A/B)");
mfwic 1:9f8583ba2431 1792 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1793 commandError = 1;
mfwic 0:44a3005d4f20 1794 }
mfwic 0:44a3005d4f20 1795
mfwic 0:44a3005d4f20 1796 if (!commandError)
mfwic 0:44a3005d4f20 1797 {
mfwic 0:44a3005d4f20 1798 chsgl = channelSideChar;
mfwic 0:44a3005d4f20 1799 getDelimiter();
mfwic 0:44a3005d4f20 1800
mfwic 0:44a3005d4f20 1801 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1802 {
mfwic 1:9f8583ba2431 1803 sprintf(strbuf, "Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 1:9f8583ba2431 1804 sendSerial(strbuf);
mfwic 0:44a3005d4f20 1805 commandError = 1;
mfwic 0:44a3005d4f20 1806 }
mfwic 0:44a3005d4f20 1807 }
mfwic 0:44a3005d4f20 1808
mfwic 0:44a3005d4f20 1809 if (!commandError)
mfwic 0:44a3005d4f20 1810 {
mfwic 0:44a3005d4f20 1811 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1812 chpair--;
mfwic 0:44a3005d4f20 1813 registerno--;
mfwic 0:44a3005d4f20 1814
mfwic 0:44a3005d4f20 1815 // ignore spaces
mfwic 0:44a3005d4f20 1816 while ((rxbuf[bufloc++] == ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] == ';'));
mfwic 0:44a3005d4f20 1817
mfwic 0:44a3005d4f20 1818 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1819 {
mfwic 0:44a3005d4f20 1820 commandError = 1;
mfwic 0:44a3005d4f20 1821 }
mfwic 0:44a3005d4f20 1822 }
mfwic 0:44a3005d4f20 1823
mfwic 0:44a3005d4f20 1824 if (!commandError)
mfwic 0:44a3005d4f20 1825 {
mfwic 0:44a3005d4f20 1826 while ((rxbuf[bufloc++] != ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] == ';'));
mfwic 0:44a3005d4f20 1827
mfwic 0:44a3005d4f20 1828 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1829 {
mfwic 0:44a3005d4f20 1830 commandError = 1;
mfwic 0:44a3005d4f20 1831 }
mfwic 0:44a3005d4f20 1832 else
mfwic 0:44a3005d4f20 1833 {
mfwic 0:44a3005d4f20 1834 chlsglMenu();
mfwic 0:44a3005d4f20 1835 }
mfwic 0:44a3005d4f20 1836 }
mfwic 0:44a3005d4f20 1837 }
mfwic 0:44a3005d4f20 1838 }
mfwic 1:9f8583ba2431 1839 }*/
mfwic 0:44a3005d4f20 1840 else
mfwic 0:44a3005d4f20 1841 {
mfwic 0:44a3005d4f20 1842 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 1843 {
mfwic 0:44a3005d4f20 1844 commandError = 1;
mfwic 0:44a3005d4f20 1845 }
mfwic 0:44a3005d4f20 1846 }
mfwic 0:44a3005d4f20 1847
mfwic 0:44a3005d4f20 1848 if (commandError)
mfwic 0:44a3005d4f20 1849 {
mfwic 6:39442d493098 1850 sendSerial(" !");
mfwic 0:44a3005d4f20 1851 }
mfwic 0:44a3005d4f20 1852
mfwic 3:d8948c5b2951 1853 //sendCRLF();
mfwic 3:d8948c5b2951 1854 menuPrompt(MENU_DCM1);
mfwic 0:44a3005d4f20 1855 }
mfwic 0:44a3005d4f20 1856
mfwic 0:44a3005d4f20 1857 /************************************************************
mfwic 0:44a3005d4f20 1858 * Routine: processCommand
mfwic 0:44a3005d4f20 1859 * Input: none
mfwic 0:44a3005d4f20 1860 * Returns: none
mfwic 0:44a3005d4f20 1861 * Description:
mfwic 0:44a3005d4f20 1862 * This is the main serial communications routine. Everything
mfwic 0:44a3005d4f20 1863 * starts here as soon as a command is avaiable for processing.
mfwic 0:44a3005d4f20 1864 **************************************************************/
mfwic 0:44a3005d4f20 1865 void processCommand(void)
mfwic 0:44a3005d4f20 1866 {
mfwic 0:44a3005d4f20 1867 if (!serialStatus.command && !serialStatus.repeat)
mfwic 0:44a3005d4f20 1868 {
mfwic 0:44a3005d4f20 1869 return;
mfwic 0:44a3005d4f20 1870 }
mfwic 0:44a3005d4f20 1871
mfwic 0:44a3005d4f20 1872 doCommand(); // if not computer (i.e. terminal) you can do the command as well
mfwic 0:44a3005d4f20 1873
mfwic 0:44a3005d4f20 1874 bufloc = 0;
mfwic 0:44a3005d4f20 1875 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 1876
mfwic 0:44a3005d4f20 1877 serialStatus.computer = FALSE;
mfwic 0:44a3005d4f20 1878 serialStatus.command = FALSE;
mfwic 0:44a3005d4f20 1879 }
mfwic 8:d3d7dca419b3 1880
mfwic 8:d3d7dca419b3 1881 /************************************************************
mfwic 8:d3d7dca419b3 1882 * Routine: waitCommand
mfwic 8:d3d7dca419b3 1883 * Input: none
mfwic 8:d3d7dca419b3 1884 * Returns: none
mfwic 8:d3d7dca419b3 1885 * Description:
mfwic 8:d3d7dca419b3 1886 **************************************************************/
mfwic 8:d3d7dca419b3 1887 bool waitCommand(void)
mfwic 8:d3d7dca419b3 1888 {
mfwic 8:d3d7dca419b3 1889 if (!serialStatus.command && !serialStatus.repeat)
mfwic 8:d3d7dca419b3 1890 {
mfwic 8:d3d7dca419b3 1891 return TRUE;
mfwic 8:d3d7dca419b3 1892 }
mfwic 8:d3d7dca419b3 1893
mfwic 8:d3d7dca419b3 1894 serialStatus.computer = FALSE;
mfwic 8:d3d7dca419b3 1895 serialStatus.command = FALSE;
mfwic 8:d3d7dca419b3 1896
mfwic 8:d3d7dca419b3 1897 return FALSE;
mfwic 8:d3d7dca419b3 1898 }