Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

Committer:
mfwic
Date:
Sat Nov 24 18:22:31 2018 +0000
Revision:
0:44a3005d4f20
Child:
1:9f8583ba2431
1st commit after starting minor edits from base code. Major sections will be deleted in this version.

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 0:44a3005d4f20 37 #include "spi_bb.h"
mfwic 0:44a3005d4f20 38 #include "selfTest.h"
mfwic 0:44a3005d4f20 39 #include "dio.h"
mfwic 0:44a3005d4f20 40 #include "SOFBlock.h"
mfwic 0:44a3005d4f20 41 #include "flash.h"
mfwic 0:44a3005d4f20 42 #include "calibrate.h"
mfwic 0:44a3005d4f20 43
mfwic 0:44a3005d4f20 44
mfwic 0:44a3005d4f20 45 /************* FILE SCOPE VARIABLES ************************/
mfwic 0:44a3005d4f20 46 char setvalue = FALSE;
mfwic 0:44a3005d4f20 47 int endOfCommand = 0;
mfwic 0:44a3005d4f20 48 int commandError = 0;
mfwic 0:44a3005d4f20 49 int menuLevel = LEVEL_MAIN;
mfwic 0:44a3005d4f20 50 int readback = 0;
mfwic 0:44a3005d4f20 51
mfwic 0:44a3005d4f20 52
mfwic 0:44a3005d4f20 53
mfwic 0:44a3005d4f20 54 /************************************************************
mfwic 0:44a3005d4f20 55 * Routine: getDelimiter
mfwic 0:44a3005d4f20 56 * Input: none
mfwic 0:44a3005d4f20 57 * Output: none
mfwic 0:44a3005d4f20 58 * Description:
mfwic 0:44a3005d4f20 59 * searches for a delimiter and moves the buffer location
mfwic 0:44a3005d4f20 60 * to be just past it
mfwic 0:44a3005d4f20 61 *
mfwic 0:44a3005d4f20 62 **************************************************************/
mfwic 0:44a3005d4f20 63 void getDelimiter(void)
mfwic 0:44a3005d4f20 64 {
mfwic 0:44a3005d4f20 65 ++bufloc;
mfwic 0:44a3005d4f20 66
mfwic 0:44a3005d4f20 67 while ((rxbuf[bufloc] != ' ') &&
mfwic 0:44a3005d4f20 68 (rxbuf[bufloc] != ',') &&
mfwic 0:44a3005d4f20 69 (rxbuf[bufloc] != '=') &&
mfwic 0:44a3005d4f20 70 (rxbuf[bufloc] != 0 ))
mfwic 0:44a3005d4f20 71 {
mfwic 0:44a3005d4f20 72 bufloc++;
mfwic 0:44a3005d4f20 73 }
mfwic 0:44a3005d4f20 74 }
mfwic 0:44a3005d4f20 75
mfwic 0:44a3005d4f20 76
mfwic 0:44a3005d4f20 77
mfwic 0:44a3005d4f20 78 /************************************************************
mfwic 0:44a3005d4f20 79 * Routine: gethex
mfwic 0:44a3005d4f20 80 * Input: hex character
mfwic 0:44a3005d4f20 81 * Returns: hex integer
mfwic 0:44a3005d4f20 82 * Description:
mfwic 0:44a3005d4f20 83 * Converts a hex character to a value
mfwic 0:44a3005d4f20 84 **************************************************************/
mfwic 0:44a3005d4f20 85 char gethex(char val)
mfwic 0:44a3005d4f20 86 {
mfwic 0:44a3005d4f20 87 int retval;
mfwic 0:44a3005d4f20 88 switch(val)
mfwic 0:44a3005d4f20 89 {
mfwic 0:44a3005d4f20 90 case '0':
mfwic 0:44a3005d4f20 91 retval = 0;
mfwic 0:44a3005d4f20 92 break;
mfwic 0:44a3005d4f20 93 case '1':
mfwic 0:44a3005d4f20 94 retval = 1;
mfwic 0:44a3005d4f20 95 break;
mfwic 0:44a3005d4f20 96 case '2':
mfwic 0:44a3005d4f20 97 retval = 2;
mfwic 0:44a3005d4f20 98 break;
mfwic 0:44a3005d4f20 99 case '3':
mfwic 0:44a3005d4f20 100 retval = 3;
mfwic 0:44a3005d4f20 101 break;
mfwic 0:44a3005d4f20 102 case '4':
mfwic 0:44a3005d4f20 103 retval = 4;
mfwic 0:44a3005d4f20 104 break;
mfwic 0:44a3005d4f20 105 case '5':
mfwic 0:44a3005d4f20 106 retval = 5;
mfwic 0:44a3005d4f20 107 break;
mfwic 0:44a3005d4f20 108 case '6':
mfwic 0:44a3005d4f20 109 retval = 6;
mfwic 0:44a3005d4f20 110 break;
mfwic 0:44a3005d4f20 111 case '7':
mfwic 0:44a3005d4f20 112 retval = 7;
mfwic 0:44a3005d4f20 113 break;
mfwic 0:44a3005d4f20 114 case '8':
mfwic 0:44a3005d4f20 115 retval = 8;
mfwic 0:44a3005d4f20 116 break;
mfwic 0:44a3005d4f20 117 case '9':
mfwic 0:44a3005d4f20 118 retval = 9;
mfwic 0:44a3005d4f20 119 break;
mfwic 0:44a3005d4f20 120 case 'A':
mfwic 0:44a3005d4f20 121 retval = 10;
mfwic 0:44a3005d4f20 122 break;
mfwic 0:44a3005d4f20 123 case 'B':
mfwic 0:44a3005d4f20 124 retval = 11;
mfwic 0:44a3005d4f20 125 break;
mfwic 0:44a3005d4f20 126 case 'C':
mfwic 0:44a3005d4f20 127 retval = 12;
mfwic 0:44a3005d4f20 128 break;
mfwic 0:44a3005d4f20 129 case 'D':
mfwic 0:44a3005d4f20 130 retval = 13;
mfwic 0:44a3005d4f20 131 break;
mfwic 0:44a3005d4f20 132 case 'E':
mfwic 0:44a3005d4f20 133 retval = 14;
mfwic 0:44a3005d4f20 134 break;
mfwic 0:44a3005d4f20 135 case 'F':
mfwic 0:44a3005d4f20 136 retval = 15;
mfwic 0:44a3005d4f20 137 break;
mfwic 0:44a3005d4f20 138 default:
mfwic 0:44a3005d4f20 139 retval = 0;
mfwic 0:44a3005d4f20 140 break;
mfwic 0:44a3005d4f20 141
mfwic 0:44a3005d4f20 142 }
mfwic 0:44a3005d4f20 143 return retval;
mfwic 0:44a3005d4f20 144 }
mfwic 0:44a3005d4f20 145
mfwic 0:44a3005d4f20 146 /************************************************************
mfwic 0:44a3005d4f20 147 * Routine: showfval
mfwic 0:44a3005d4f20 148 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 149 * value (float value to display)
mfwic 0:44a3005d4f20 150 * Output: none
mfwic 0:44a3005d4f20 151 * Description:
mfwic 0:44a3005d4f20 152 * Sends a floating point number (value) over the serial port
mfwic 0:44a3005d4f20 153 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 154 *
mfwic 0:44a3005d4f20 155 **************************************************************/
mfwic 0:44a3005d4f20 156 void showfval(char setval,float value)
mfwic 0:44a3005d4f20 157 {
mfwic 0:44a3005d4f20 158 if(!setval)
mfwic 0:44a3005d4f20 159 {
mfwic 0:44a3005d4f20 160 sprintf(stemp," %4.9f",value);
mfwic 0:44a3005d4f20 161 sendSerial(stemp);
mfwic 0:44a3005d4f20 162 }
mfwic 0:44a3005d4f20 163 }
mfwic 0:44a3005d4f20 164
mfwic 0:44a3005d4f20 165 /************************************************************
mfwic 0:44a3005d4f20 166 * Routine: showival
mfwic 0:44a3005d4f20 167 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 168 * value (integer value to display)
mfwic 0:44a3005d4f20 169 * Output: none
mfwic 0:44a3005d4f20 170 * Description:
mfwic 0:44a3005d4f20 171 * Sends an integer (value) over the serial port
mfwic 0:44a3005d4f20 172 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 173 *
mfwic 0:44a3005d4f20 174 **************************************************************/
mfwic 0:44a3005d4f20 175 void showival(char setval, int value)
mfwic 0:44a3005d4f20 176 {
mfwic 0:44a3005d4f20 177 if(!setval)
mfwic 0:44a3005d4f20 178 {
mfwic 0:44a3005d4f20 179 sprintf(stemp," %i",value);
mfwic 0:44a3005d4f20 180 sendSerial(stemp);
mfwic 0:44a3005d4f20 181 }
mfwic 0:44a3005d4f20 182 }
mfwic 0:44a3005d4f20 183 /************************************************************
mfwic 0:44a3005d4f20 184 * Routine: showcval
mfwic 0:44a3005d4f20 185 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 186 * value (character to display)
mfwic 0:44a3005d4f20 187 * Output: none
mfwic 0:44a3005d4f20 188 * Description:
mfwic 0:44a3005d4f20 189 * Sends a character over the serial port
mfwic 0:44a3005d4f20 190 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 191 *
mfwic 0:44a3005d4f20 192 **************************************************************/
mfwic 0:44a3005d4f20 193 void showcval(char setval, int value)
mfwic 0:44a3005d4f20 194 {
mfwic 0:44a3005d4f20 195 if(!setval)
mfwic 0:44a3005d4f20 196 {
mfwic 0:44a3005d4f20 197 sprintf(stemp," %c",(char)value);
mfwic 0:44a3005d4f20 198 sendSerial(stemp);
mfwic 0:44a3005d4f20 199 }
mfwic 0:44a3005d4f20 200 }
mfwic 0:44a3005d4f20 201
mfwic 0:44a3005d4f20 202 /************************************************************
mfwic 0:44a3005d4f20 203 * Routine: showlval
mfwic 0:44a3005d4f20 204 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 205 * value (integer value to display)
mfwic 0:44a3005d4f20 206 * Output: none
mfwic 0:44a3005d4f20 207 * Description:
mfwic 0:44a3005d4f20 208 * Sends an long (value) over the serial port
mfwic 0:44a3005d4f20 209 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 210 *
mfwic 0:44a3005d4f20 211 **************************************************************/
mfwic 0:44a3005d4f20 212 void showlval(char setval, long value)
mfwic 0:44a3005d4f20 213 {
mfwic 0:44a3005d4f20 214 if(!setval)
mfwic 0:44a3005d4f20 215 {
mfwic 0:44a3005d4f20 216 sprintf(stemp," %ld",value);
mfwic 0:44a3005d4f20 217 sendSerial(stemp);
mfwic 0:44a3005d4f20 218 }
mfwic 0:44a3005d4f20 219 }
mfwic 0:44a3005d4f20 220
mfwic 0:44a3005d4f20 221 /************************************************************
mfwic 0:44a3005d4f20 222 * Routine: showuival
mfwic 0:44a3005d4f20 223 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 224 * value (integer value to display)
mfwic 0:44a3005d4f20 225 * Output: none
mfwic 0:44a3005d4f20 226 * Description:
mfwic 0:44a3005d4f20 227 * Sends an unsigned int (value) over the serial port
mfwic 0:44a3005d4f20 228 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 229 *
mfwic 0:44a3005d4f20 230 **************************************************************/
mfwic 0:44a3005d4f20 231 void showuival(char setval, unsigned int value)
mfwic 0:44a3005d4f20 232 {
mfwic 0:44a3005d4f20 233 if(!setval)
mfwic 0:44a3005d4f20 234 {
mfwic 0:44a3005d4f20 235 sprintf(stemp," %u",value);
mfwic 0:44a3005d4f20 236 sendSerial(stemp);
mfwic 0:44a3005d4f20 237 }
mfwic 0:44a3005d4f20 238 }
mfwic 0:44a3005d4f20 239
mfwic 0:44a3005d4f20 240 /************************************************************
mfwic 0:44a3005d4f20 241 * Routine: showhval
mfwic 0:44a3005d4f20 242 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 243 * value (hex integeger value to display)
mfwic 0:44a3005d4f20 244 * Output: none
mfwic 0:44a3005d4f20 245 * Description:
mfwic 0:44a3005d4f20 246 * Sends an integer (value) in hex over the serial port
mfwic 0:44a3005d4f20 247 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 248 *
mfwic 0:44a3005d4f20 249 **************************************************************/
mfwic 0:44a3005d4f20 250 void showhval(char setval, int value)
mfwic 0:44a3005d4f20 251 {
mfwic 0:44a3005d4f20 252 if(!setval)
mfwic 0:44a3005d4f20 253 {
mfwic 0:44a3005d4f20 254 if(serialStatus.computer)
mfwic 0:44a3005d4f20 255 sprintf(stemp," %u",(unsigned int)value);
mfwic 0:44a3005d4f20 256 else
mfwic 0:44a3005d4f20 257 sprintf(stemp," 0x%04x",value);
mfwic 0:44a3005d4f20 258 sendSerial(stemp);
mfwic 0:44a3005d4f20 259 }
mfwic 0:44a3005d4f20 260 }
mfwic 0:44a3005d4f20 261
mfwic 0:44a3005d4f20 262
mfwic 0:44a3005d4f20 263 /************************************************************
mfwic 0:44a3005d4f20 264 * Routine: getival
mfwic 0:44a3005d4f20 265 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 266 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 267 * Description:
mfwic 0:44a3005d4f20 268 * Gets an integer from the serial port connection.
mfwic 0:44a3005d4f20 269 *
mfwic 0:44a3005d4f20 270 **************************************************************/
mfwic 0:44a3005d4f20 271 int getival(char setval)
mfwic 0:44a3005d4f20 272 {
mfwic 0:44a3005d4f20 273 if (setval)
mfwic 0:44a3005d4f20 274 {
mfwic 0:44a3005d4f20 275 return atoi(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 276 }
mfwic 0:44a3005d4f20 277
mfwic 0:44a3005d4f20 278 return 0;
mfwic 0:44a3005d4f20 279 }
mfwic 0:44a3005d4f20 280
mfwic 0:44a3005d4f20 281 /************************************************************
mfwic 0:44a3005d4f20 282 * Routine: getcval
mfwic 0:44a3005d4f20 283 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 284 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 285 * Description:
mfwic 0:44a3005d4f20 286 * Gets an character from the serial port connection.
mfwic 0:44a3005d4f20 287 *
mfwic 0:44a3005d4f20 288 **************************************************************/
mfwic 0:44a3005d4f20 289 int getcval(char setval)
mfwic 0:44a3005d4f20 290 {
mfwic 0:44a3005d4f20 291 if(setval)
mfwic 0:44a3005d4f20 292 {
mfwic 0:44a3005d4f20 293 // skip one space
mfwic 0:44a3005d4f20 294 ++bufloc;
mfwic 0:44a3005d4f20 295 // skip spaces and the equals sign
mfwic 0:44a3005d4f20 296 while((rxbuf[bufloc] == ' ') || (rxbuf[bufloc] == '='))
mfwic 0:44a3005d4f20 297 bufloc++;
mfwic 0:44a3005d4f20 298 return rxbuf[bufloc++];
mfwic 0:44a3005d4f20 299 }
mfwic 0:44a3005d4f20 300 else
mfwic 0:44a3005d4f20 301 return 0;
mfwic 0:44a3005d4f20 302
mfwic 0:44a3005d4f20 303 }
mfwic 0:44a3005d4f20 304 /************************************************************
mfwic 0:44a3005d4f20 305 * Routine: getlval
mfwic 0:44a3005d4f20 306 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 307 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 308 * Description:
mfwic 0:44a3005d4f20 309 * Gets an long from the serial port connection.
mfwic 0:44a3005d4f20 310 *
mfwic 0:44a3005d4f20 311 **************************************************************/
mfwic 0:44a3005d4f20 312 long getlval(char setval)
mfwic 0:44a3005d4f20 313 {
mfwic 0:44a3005d4f20 314 if(setval)
mfwic 0:44a3005d4f20 315 return atol(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 316 else
mfwic 0:44a3005d4f20 317 return 0;
mfwic 0:44a3005d4f20 318
mfwic 0:44a3005d4f20 319 }
mfwic 0:44a3005d4f20 320
mfwic 0:44a3005d4f20 321 /************************************************************
mfwic 0:44a3005d4f20 322 * Routine: getfval
mfwic 0:44a3005d4f20 323 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 324 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 325 * Description:
mfwic 0:44a3005d4f20 326 * Gets an float from the serial port connection.
mfwic 0:44a3005d4f20 327 *
mfwic 0:44a3005d4f20 328 **************************************************************/
mfwic 0:44a3005d4f20 329 float getfval(char setval)
mfwic 0:44a3005d4f20 330 {
mfwic 0:44a3005d4f20 331 if(setval)
mfwic 0:44a3005d4f20 332 return atof(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 333 else
mfwic 0:44a3005d4f20 334 return 0;
mfwic 0:44a3005d4f20 335 }
mfwic 0:44a3005d4f20 336
mfwic 0:44a3005d4f20 337
mfwic 0:44a3005d4f20 338 /************************************************************
mfwic 0:44a3005d4f20 339 * Routine: showRangeError
mfwic 0:44a3005d4f20 340 * Input: error -- 0 = in range, 1 = out of range
mfwic 0:44a3005d4f20 341 * Output: none
mfwic 0:44a3005d4f20 342 * Description:
mfwic 0:44a3005d4f20 343 * Sends a floating point number (value) over the serial port
mfwic 0:44a3005d4f20 344 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 345 *
mfwic 0:44a3005d4f20 346 **************************************************************/
mfwic 0:44a3005d4f20 347 void showRangeError(int intValue, int iBadValue, float fBadValue)
mfwic 0:44a3005d4f20 348 {
mfwic 0:44a3005d4f20 349 if (intValue) sprintf(stemp, "Out of Range: %d", iBadValue);
mfwic 0:44a3005d4f20 350 else sprintf(stemp, "Out of Range: %0.3f", fBadValue);
mfwic 0:44a3005d4f20 351
mfwic 0:44a3005d4f20 352 sendSerial(stemp);
mfwic 0:44a3005d4f20 353 }
mfwic 0:44a3005d4f20 354
mfwic 0:44a3005d4f20 355 /************************************************************
mfwic 0:44a3005d4f20 356 * Routine: validateEntry
mfwic 0:44a3005d4f20 357 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 358 * limlo -- low limit
mfwic 0:44a3005d4f20 359 * limhi -- high limit
mfwic 0:44a3005d4f20 360 * address -- address in eeprom to use
mfwic 0:44a3005d4f20 361 * Returns: 0 if entry validates and is written
mfwic 0:44a3005d4f20 362 * 1 if entry fails
mfwic 0:44a3005d4f20 363 * Description:
mfwic 0:44a3005d4f20 364 * Gets or sets a value in eeprom at the address but only
mfwic 0:44a3005d4f20 365 * if it is between the limits will it write the value to
mfwic 0:44a3005d4f20 366 * eeprom
mfwic 0:44a3005d4f20 367 *
mfwic 0:44a3005d4f20 368 **************************************************************/
mfwic 0:44a3005d4f20 369 int validateEntry(char setvalue, float limlo, float limhi, float *address)
mfwic 0:44a3005d4f20 370 {
mfwic 0:44a3005d4f20 371 float val;
mfwic 0:44a3005d4f20 372
mfwic 0:44a3005d4f20 373 if (setvalue)
mfwic 0:44a3005d4f20 374 {
mfwic 0:44a3005d4f20 375 val = getfval(SET);
mfwic 0:44a3005d4f20 376
mfwic 0:44a3005d4f20 377 if ((val >= limlo) && (val <= limhi))
mfwic 0:44a3005d4f20 378 {
mfwic 0:44a3005d4f20 379 *address = val;
mfwic 0:44a3005d4f20 380 }
mfwic 0:44a3005d4f20 381 else
mfwic 0:44a3005d4f20 382 {
mfwic 0:44a3005d4f20 383 showRangeError(0, 0, val);
mfwic 0:44a3005d4f20 384 return 0;
mfwic 0:44a3005d4f20 385 }
mfwic 0:44a3005d4f20 386 }
mfwic 0:44a3005d4f20 387 else
mfwic 0:44a3005d4f20 388 {
mfwic 0:44a3005d4f20 389 val = *address;
mfwic 0:44a3005d4f20 390 sprintf(stemp, " %4.3f", val);
mfwic 0:44a3005d4f20 391 sendSerial(stemp);
mfwic 0:44a3005d4f20 392 }
mfwic 0:44a3005d4f20 393
mfwic 0:44a3005d4f20 394 return 1;
mfwic 0:44a3005d4f20 395 }
mfwic 0:44a3005d4f20 396
mfwic 0:44a3005d4f20 397
mfwic 0:44a3005d4f20 398 /************************************************************
mfwic 0:44a3005d4f20 399 * Routine: validateEntry
mfwic 0:44a3005d4f20 400 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 401 * limlo -- low limit
mfwic 0:44a3005d4f20 402 * limhi -- high limit
mfwic 0:44a3005d4f20 403 * address -- address in eeprom to use
mfwic 0:44a3005d4f20 404 *
mfwic 0:44a3005d4f20 405 * Returns: FALSE if entry fails
mfwic 0:44a3005d4f20 406 * TRUE if entry validates and is written
mfwic 0:44a3005d4f20 407 *
mfwic 0:44a3005d4f20 408 * Description:
mfwic 0:44a3005d4f20 409 * Gets or sets a value in eeprom at the address but only
mfwic 0:44a3005d4f20 410 * if it is between the limits will it write the value to
mfwic 0:44a3005d4f20 411 * eeprom
mfwic 0:44a3005d4f20 412 *
mfwic 0:44a3005d4f20 413 **************************************************************/
mfwic 0:44a3005d4f20 414 int validateInt(char setvalue, int limlo, int limhi, int *address)
mfwic 0:44a3005d4f20 415 {
mfwic 0:44a3005d4f20 416 float val;
mfwic 0:44a3005d4f20 417
mfwic 0:44a3005d4f20 418 if (setvalue)
mfwic 0:44a3005d4f20 419 {
mfwic 0:44a3005d4f20 420 val = getfval(SET);
mfwic 0:44a3005d4f20 421
mfwic 0:44a3005d4f20 422 if ((val >= limlo) && (val <= limhi))
mfwic 0:44a3005d4f20 423 {
mfwic 0:44a3005d4f20 424 *address = val;
mfwic 0:44a3005d4f20 425 }
mfwic 0:44a3005d4f20 426 else
mfwic 0:44a3005d4f20 427 {
mfwic 0:44a3005d4f20 428 showRangeError(1, val, 0);
mfwic 0:44a3005d4f20 429 return FALSE;
mfwic 0:44a3005d4f20 430 }
mfwic 0:44a3005d4f20 431 }
mfwic 0:44a3005d4f20 432 else
mfwic 0:44a3005d4f20 433 {
mfwic 0:44a3005d4f20 434 val = *address;
mfwic 0:44a3005d4f20 435 sprintf(stemp, " %4.0f", val);
mfwic 0:44a3005d4f20 436 sendSerial(stemp);
mfwic 0:44a3005d4f20 437 }
mfwic 0:44a3005d4f20 438
mfwic 0:44a3005d4f20 439 return TRUE;
mfwic 0:44a3005d4f20 440 }
mfwic 0:44a3005d4f20 441
mfwic 0:44a3005d4f20 442
mfwic 0:44a3005d4f20 443 /************************************************************
mfwic 0:44a3005d4f20 444 * Routine: parseCommand
mfwic 0:44a3005d4f20 445 * Input: setvalue (GET or SET), command buffer
mfwic 0:44a3005d4f20 446 * Returns: none
mfwic 0:44a3005d4f20 447 * Description:
mfwic 0:44a3005d4f20 448 * parses a command and gets the commandstring
mfwic 0:44a3005d4f20 449 **************************************************************/
mfwic 0:44a3005d4f20 450 void parseCommand(char setvalue, char *commandString)
mfwic 0:44a3005d4f20 451 {
mfwic 0:44a3005d4f20 452 int i, endofc;
mfwic 0:44a3005d4f20 453 char store;
mfwic 0:44a3005d4f20 454
mfwic 0:44a3005d4f20 455 // Ignore any white space and the optional ';' character before the start of
mfwic 0:44a3005d4f20 456 // the command string (any ']' character is from the last command so skip that,
mfwic 0:44a3005d4f20 457 // too)
mfwic 0:44a3005d4f20 458 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == ';') || (rxbuf[bufloc] == ']'))
mfwic 0:44a3005d4f20 459 {
mfwic 0:44a3005d4f20 460 bufloc++;
mfwic 0:44a3005d4f20 461 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0)) break;
mfwic 0:44a3005d4f20 462 }
mfwic 0:44a3005d4f20 463
mfwic 0:44a3005d4f20 464 if (setvalue)
mfwic 0:44a3005d4f20 465 {
mfwic 0:44a3005d4f20 466 // We need a value for SET so hitting the end is a problem
mfwic 0:44a3005d4f20 467 if ((rxbuf[bufloc] == 0) || (rxbuf[bufloc] == 0x0D))
mfwic 0:44a3005d4f20 468 {
mfwic 0:44a3005d4f20 469 commandError = 1;
mfwic 0:44a3005d4f20 470 return;
mfwic 0:44a3005d4f20 471 }
mfwic 0:44a3005d4f20 472 }
mfwic 0:44a3005d4f20 473
mfwic 0:44a3005d4f20 474 // Find the end of the command string
mfwic 0:44a3005d4f20 475 endofc = bufloc + 1;
mfwic 0:44a3005d4f20 476
mfwic 0:44a3005d4f20 477 // White space, '[' and '?' all terminate the command string
mfwic 0:44a3005d4f20 478 while ((!isspace(rxbuf[endofc])) && (rxbuf[endofc] != '[') && (rxbuf[endofc] != '?'))
mfwic 0:44a3005d4f20 479 {
mfwic 0:44a3005d4f20 480 endofc++;
mfwic 0:44a3005d4f20 481 // (As does hitting the end of rxbuf!)
mfwic 0:44a3005d4f20 482 if ((rxbuf[endofc] == 0x0D) || (rxbuf[endofc] == 0)) break;
mfwic 0:44a3005d4f20 483 }
mfwic 0:44a3005d4f20 484
mfwic 0:44a3005d4f20 485 // Save the character that marks the end of the command string
mfwic 0:44a3005d4f20 486 store = rxbuf[endofc];
mfwic 0:44a3005d4f20 487
mfwic 0:44a3005d4f20 488 // sprintf(stemp, "store == %c\r\n", store);
mfwic 0:44a3005d4f20 489 // sendSerial(stemp);
mfwic 0:44a3005d4f20 490
mfwic 0:44a3005d4f20 491 // Command strings ending in '?' are readbacks
mfwic 0:44a3005d4f20 492 readback = ((store == '?') ? 1 : 0);
mfwic 0:44a3005d4f20 493
mfwic 0:44a3005d4f20 494 // Set end to null character so string can now be copied
mfwic 0:44a3005d4f20 495 rxbuf[endofc] = 0;
mfwic 0:44a3005d4f20 496
mfwic 0:44a3005d4f20 497 // Copy the command string into commandString
mfwic 0:44a3005d4f20 498 strcpy(commandString, &rxbuf[bufloc]);
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 0:44a3005d4f20 525 sprintf(stemp, " Invalid channel/board: %d (range is 1 - %d)", channel, MAX_BOARDS);
mfwic 0:44a3005d4f20 526 sendSerial(stemp);
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 0:44a3005d4f20 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 0:44a3005d4f20 574 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 575 sendSerial(stemp);
mfwic 0:44a3005d4f20 576 }
mfwic 0:44a3005d4f20 577
mfwic 0:44a3005d4f20 578 sprintf(stemp, " [%d, %d] peak voltage = %0.3f V", chpair, registerno, ch[chpair][registerno].a_dwell1_volts);
mfwic 0:44a3005d4f20 579 sendSerial(stemp);
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 0:44a3005d4f20 590 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 591 sendSerial(stemp);
mfwic 0:44a3005d4f20 592 }
mfwic 0:44a3005d4f20 593
mfwic 0:44a3005d4f20 594 sprintf(stemp, " [%d] in-phase dwell time = %0.3f ms", registerno, dwells[registerno].a_dwell1_time);
mfwic 0:44a3005d4f20 595 sendSerial(stemp);
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 0:44a3005d4f20 608 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 609 sendSerial(stemp);
mfwic 0:44a3005d4f20 610 }
mfwic 0:44a3005d4f20 611
mfwic 0:44a3005d4f20 612 sprintf(stemp, " [%d, %d] in-phase overvoltage = %0.3f V", chpair, registerno, ch[chpair][registerno].a_dwell1_ov);
mfwic 0:44a3005d4f20 613 sendSerial(stemp);
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 0:44a3005d4f20 626 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 627 sendSerial(stemp);
mfwic 0:44a3005d4f20 628 }
mfwic 0:44a3005d4f20 629
mfwic 0:44a3005d4f20 630 sprintf(stemp, " [%d] in-phase overvoltage time = %0.3f ms", registerno, dwells[registerno].a_dwell1_ov_time);
mfwic 0:44a3005d4f20 631 sendSerial(stemp);
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 0:44a3005d4f20 642 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 643 sendSerial(stemp);
mfwic 0:44a3005d4f20 644 }
mfwic 0:44a3005d4f20 645
mfwic 0:44a3005d4f20 646 sprintf(stemp, " [%d] differential dwell time = %0.3f ms", registerno, dwells[registerno].a_dwell2_time);
mfwic 0:44a3005d4f20 647 sendSerial(stemp);
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 0:44a3005d4f20 660 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 661 sendSerial(stemp);
mfwic 0:44a3005d4f20 662 }
mfwic 0:44a3005d4f20 663
mfwic 0:44a3005d4f20 664 sprintf(stemp, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 0:44a3005d4f20 665 sendSerial(stemp);
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 0:44a3005d4f20 675 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 676 sendSerial(stemp);
mfwic 0:44a3005d4f20 677 }
mfwic 0:44a3005d4f20 678
mfwic 0:44a3005d4f20 679 sprintf(stemp, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 0:44a3005d4f20 680 sendSerial(stemp);
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 0:44a3005d4f20 693 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 694 sendSerial(stemp);
mfwic 0:44a3005d4f20 695 }
mfwic 0:44a3005d4f20 696
mfwic 0:44a3005d4f20 697 sprintf(stemp, " [%d, %d] differential_dwell = %d", chpair, registerno, ch[chpair][registerno].differential_dwell);
mfwic 0:44a3005d4f20 698 sendSerial(stemp);
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 0:44a3005d4f20 711 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 712 sendSerial(stemp);
mfwic 0:44a3005d4f20 713 }
mfwic 0:44a3005d4f20 714
mfwic 0:44a3005d4f20 715 sprintf(stemp, " [%d, %d] inverted = %d", chpair, registerno, ch[chpair][registerno].inverted);
mfwic 0:44a3005d4f20 716 sendSerial(stemp);
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 0:44a3005d4f20 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 0:44a3005d4f20 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 0:44a3005d4f20 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 0:44a3005d4f20 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 0:44a3005d4f20 779 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 780 sendSerial(stemp);
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 0:44a3005d4f20 785 sprintf(stemp, " [%d%c, %d] dwell 1 peak amplitude = %0.3f V", chpair, chsgl, registerno, value);
mfwic 0:44a3005d4f20 786 sendSerial(stemp);
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 0:44a3005d4f20 797 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 798 sendSerial(stemp);
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 0:44a3005d4f20 803 sprintf(stemp, " [%d] dwell 1 time = %0.3f ms", registerno, value);
mfwic 0:44a3005d4f20 804 sendSerial(stemp);
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 0:44a3005d4f20 814 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 815 sendSerial(stemp);
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 0:44a3005d4f20 820 sprintf(stemp, " [%d%c, %d] dwell 1 overvoltage = %0.3f V", chpair, chsgl, registerno, value);
mfwic 0:44a3005d4f20 821 sendSerial(stemp);
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 0:44a3005d4f20 832 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 833 sendSerial(stemp);
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 0:44a3005d4f20 838 sprintf(stemp, " [%d] dwell 1 overvoltage time = %0.3f ms", registerno, value);
mfwic 0:44a3005d4f20 839 sendSerial(stemp);
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 0:44a3005d4f20 849 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 850 sendSerial(stemp);
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 0:44a3005d4f20 855 sprintf(stemp, " [%d%c, %d] dwell 2 peak amplitude = %0.3f V", chpair, chsgl, registerno, value);
mfwic 0:44a3005d4f20 856 sendSerial(stemp);
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 0:44a3005d4f20 867 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 868 sendSerial(stemp);
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 0:44a3005d4f20 873 sprintf(stemp, " [%d] dwell 2 time = %0.3f ms", registerno, value);
mfwic 0:44a3005d4f20 874 sendSerial(stemp);
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 0:44a3005d4f20 884 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 885 sendSerial(stemp);
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 0:44a3005d4f20 890 sprintf(stemp, " [%d%c, %d] dwell 2 overvoltage = %0.3f V", chpair, chsgl, registerno, value);
mfwic 0:44a3005d4f20 891 sendSerial(stemp);
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 0:44a3005d4f20 902 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 903 sendSerial(stemp);
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 0:44a3005d4f20 908 sprintf(stemp, " [%d] dwell 2 overvoltage time = %0.3f ms", registerno, value);
mfwic 0:44a3005d4f20 909 sendSerial(stemp);
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 0:44a3005d4f20 919 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 920 sendSerial(stemp);
mfwic 0:44a3005d4f20 921 }
mfwic 0:44a3005d4f20 922
mfwic 0:44a3005d4f20 923 sprintf(stemp, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 0:44a3005d4f20 924 sendSerial(stemp);
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 0:44a3005d4f20 934 sprintf(stemp, " Setting");
mfwic 0:44a3005d4f20 935 sendSerial(stemp);
mfwic 0:44a3005d4f20 936 }
mfwic 0:44a3005d4f20 937
mfwic 0:44a3005d4f20 938 sprintf(stemp, " [%d, %d] enable = %d", chpair, registerno, ch[chpair][registerno].enabled);
mfwic 0:44a3005d4f20 939 sendSerial(stemp);
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 0:44a3005d4f20 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 0:44a3005d4f20 961 float fval;
mfwic 0:44a3005d4f20 962 unsigned int data;
mfwic 0:44a3005d4f20 963
mfwic 0:44a3005d4f20 964 char commandString[80] = { 0 };
mfwic 0:44a3005d4f20 965
mfwic 0:44a3005d4f20 966 commandError = 0;
mfwic 0:44a3005d4f20 967 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 968
mfwic 0:44a3005d4f20 969 if (!strcmp(commandString, "LEDS")) // duh do I have to tell you?
mfwic 0:44a3005d4f20 970 {
mfwic 0:44a3005d4f20 971 testLEDs();
mfwic 0:44a3005d4f20 972 return;
mfwic 0:44a3005d4f20 973 }
mfwic 0:44a3005d4f20 974
mfwic 0:44a3005d4f20 975 if (!strcmp(commandString, "SELFTEST"))
mfwic 0:44a3005d4f20 976 {
mfwic 0:44a3005d4f20 977 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0))
mfwic 0:44a3005d4f20 978 {
mfwic 0:44a3005d4f20 979 ival = DEFAULT_SELFTEST_BOARDS;
mfwic 0:44a3005d4f20 980 }
mfwic 0:44a3005d4f20 981 else
mfwic 0:44a3005d4f20 982 {
mfwic 0:44a3005d4f20 983 ival = getival(SET);
mfwic 0:44a3005d4f20 984
mfwic 0:44a3005d4f20 985 if ((ival < 1) || (ival > MAX_BOARDS))
mfwic 0:44a3005d4f20 986 {
mfwic 0:44a3005d4f20 987 sprintf(stemp, " Invalid number of channels/boards (range is 1 - %d)", MAX_BOARDS);
mfwic 0:44a3005d4f20 988 sendSerial(stemp);
mfwic 0:44a3005d4f20 989 commandError = 1;
mfwic 0:44a3005d4f20 990 return;
mfwic 0:44a3005d4f20 991 }
mfwic 0:44a3005d4f20 992 }
mfwic 0:44a3005d4f20 993
mfwic 0:44a3005d4f20 994 selfTest(ival);
mfwic 0:44a3005d4f20 995 return;
mfwic 0:44a3005d4f20 996 }
mfwic 0:44a3005d4f20 997
mfwic 0:44a3005d4f20 998 if (!strcmp(commandString, "HVEN")) // high voltage enable
mfwic 0:44a3005d4f20 999 {
mfwic 0:44a3005d4f20 1000 ival = getival(SET);
mfwic 0:44a3005d4f20 1001 hv_en = ival;
mfwic 0:44a3005d4f20 1002 return;
mfwic 0:44a3005d4f20 1003 }
mfwic 0:44a3005d4f20 1004
mfwic 0:44a3005d4f20 1005 if (!strcmp(commandString, "DAC"))
mfwic 0:44a3005d4f20 1006 {
mfwic 0:44a3005d4f20 1007 ch = getival(SET);
mfwic 0:44a3005d4f20 1008 getDelimiter();
mfwic 0:44a3005d4f20 1009 dac = getival(SET);
mfwic 0:44a3005d4f20 1010 getDelimiter();
mfwic 0:44a3005d4f20 1011 data = getival(SET);
mfwic 0:44a3005d4f20 1012
mfwic 0:44a3005d4f20 1013 validateChannel(ch);
mfwic 0:44a3005d4f20 1014 if (commandError) return;
mfwic 0:44a3005d4f20 1015 ch--;
mfwic 0:44a3005d4f20 1016
mfwic 0:44a3005d4f20 1017 sendData((unsigned int)ch, (unsigned int)dac, data);
mfwic 0:44a3005d4f20 1018 sprintf(stemp, " ch: %u dac: %u value: %u", ch + 1, dac, data);
mfwic 0:44a3005d4f20 1019 sendSerial(stemp);
mfwic 0:44a3005d4f20 1020 return;
mfwic 0:44a3005d4f20 1021 }
mfwic 0:44a3005d4f20 1022
mfwic 0:44a3005d4f20 1023 if (!strcmp(commandString, "DINIT"))
mfwic 0:44a3005d4f20 1024 {
mfwic 0:44a3005d4f20 1025 initDACs();
mfwic 0:44a3005d4f20 1026 return;
mfwic 0:44a3005d4f20 1027 }
mfwic 0:44a3005d4f20 1028
mfwic 0:44a3005d4f20 1029 if (!strcmp(commandString, "FINIT"))
mfwic 0:44a3005d4f20 1030 {
mfwic 0:44a3005d4f20 1031 formatParameterSector();
mfwic 0:44a3005d4f20 1032 return;
mfwic 0:44a3005d4f20 1033 }
mfwic 0:44a3005d4f20 1034
mfwic 0:44a3005d4f20 1035 if (!strcmp(commandString, "CINIT"))
mfwic 0:44a3005d4f20 1036 {
mfwic 0:44a3005d4f20 1037 initCalParameters();
mfwic 0:44a3005d4f20 1038 sprintf(stemp, " All calibration parameters set to default values");
mfwic 0:44a3005d4f20 1039 sendSerial(stemp);
mfwic 0:44a3005d4f20 1040 return;
mfwic 0:44a3005d4f20 1041 }
mfwic 0:44a3005d4f20 1042
mfwic 0:44a3005d4f20 1043 if (!strcmp(commandString, "VOLTS"))
mfwic 0:44a3005d4f20 1044 {
mfwic 0:44a3005d4f20 1045 ch = getival(SET);
mfwic 0:44a3005d4f20 1046 getDelimiter();
mfwic 0:44a3005d4f20 1047 dac = getival(SET);
mfwic 0:44a3005d4f20 1048 getDelimiter();
mfwic 0:44a3005d4f20 1049 fval = getfval(SET);
mfwic 0:44a3005d4f20 1050
mfwic 0:44a3005d4f20 1051 validateChannel(ch);
mfwic 0:44a3005d4f20 1052 if (commandError) return;
mfwic 0:44a3005d4f20 1053 ch--;
mfwic 0:44a3005d4f20 1054
mfwic 0:44a3005d4f20 1055 if (dac == 1)
mfwic 0:44a3005d4f20 1056 {
mfwic 0:44a3005d4f20 1057 data = (unsigned int)(cal[ch].a_scale * fval + cal[ch].a_offset);
mfwic 0:44a3005d4f20 1058 dac = ADC_CH1;
mfwic 0:44a3005d4f20 1059 }
mfwic 0:44a3005d4f20 1060 else
mfwic 0:44a3005d4f20 1061 {
mfwic 0:44a3005d4f20 1062 data = (unsigned int)(cal[ch].b_scale * fval + cal[ch].b_offset);
mfwic 0:44a3005d4f20 1063 dac = ADC_CH2;
mfwic 0:44a3005d4f20 1064 }
mfwic 0:44a3005d4f20 1065
mfwic 0:44a3005d4f20 1066 sendData((unsigned int)ch, (unsigned int)dac, data);
mfwic 0:44a3005d4f20 1067 sprintf(stemp, " ch: %u dac: %u value: %u", ch + 1, dac, data);
mfwic 0:44a3005d4f20 1068 sendSerial(stemp);
mfwic 0:44a3005d4f20 1069 return;
mfwic 0:44a3005d4f20 1070 }
mfwic 0:44a3005d4f20 1071
mfwic 0:44a3005d4f20 1072 if (!strcmp(commandString, "BENB")) // board enable bits
mfwic 0:44a3005d4f20 1073 {
mfwic 0:44a3005d4f20 1074 ival = getival(SET);
mfwic 0:44a3005d4f20 1075 setBoardEnables((unsigned int)ival);
mfwic 0:44a3005d4f20 1076 sprintf(stemp, " Board Enable Bits = 0x%04x\r\n", ival);
mfwic 0:44a3005d4f20 1077 sendSerial(stemp);
mfwic 0:44a3005d4f20 1078 return;
mfwic 0:44a3005d4f20 1079 }
mfwic 0:44a3005d4f20 1080
mfwic 0:44a3005d4f20 1081 if (!strcmp(commandString, "BEN")) // board enable
mfwic 0:44a3005d4f20 1082 {
mfwic 0:44a3005d4f20 1083 ch = getival(SET);
mfwic 0:44a3005d4f20 1084 getDelimiter();
mfwic 0:44a3005d4f20 1085 ival = getival(SET);
mfwic 0:44a3005d4f20 1086
mfwic 0:44a3005d4f20 1087 validateChannel(ch);
mfwic 0:44a3005d4f20 1088 if (commandError) return;
mfwic 0:44a3005d4f20 1089 ch--;
mfwic 0:44a3005d4f20 1090
mfwic 0:44a3005d4f20 1091 setBoardEnable(ch, (unsigned int)ival);
mfwic 0:44a3005d4f20 1092 sprintf(stemp, " Board Enable %d = %d\r\n", ch + 1, ival);
mfwic 0:44a3005d4f20 1093 sendSerial(stemp);
mfwic 0:44a3005d4f20 1094 return;
mfwic 0:44a3005d4f20 1095 }
mfwic 0:44a3005d4f20 1096
mfwic 0:44a3005d4f20 1097 if (!strcmp(commandString, "LD"))
mfwic 0:44a3005d4f20 1098 {
mfwic 0:44a3005d4f20 1099 ival = getival(SET);
mfwic 0:44a3005d4f20 1100
mfwic 0:44a3005d4f20 1101 if (ival)
mfwic 0:44a3005d4f20 1102 {
mfwic 0:44a3005d4f20 1103 tst_ld = 1;
mfwic 0:44a3005d4f20 1104 }
mfwic 0:44a3005d4f20 1105 else
mfwic 0:44a3005d4f20 1106 {
mfwic 0:44a3005d4f20 1107 tst_ld = 0;
mfwic 0:44a3005d4f20 1108 }
mfwic 0:44a3005d4f20 1109
mfwic 0:44a3005d4f20 1110 Delay(100);
mfwic 0:44a3005d4f20 1111 ival = dtst_out;
mfwic 0:44a3005d4f20 1112 sprintf(stemp, " DTST_OUT = %d\r\n", ival);
mfwic 0:44a3005d4f20 1113 sendSerial(stemp);
mfwic 0:44a3005d4f20 1114 return;
mfwic 0:44a3005d4f20 1115 }
mfwic 0:44a3005d4f20 1116
mfwic 0:44a3005d4f20 1117 if (!strcmp(commandString, "SCK"))
mfwic 0:44a3005d4f20 1118 {
mfwic 0:44a3005d4f20 1119 ival = getival(SET);
mfwic 0:44a3005d4f20 1120
mfwic 0:44a3005d4f20 1121 if (ival)
mfwic 0:44a3005d4f20 1122 {
mfwic 0:44a3005d4f20 1123 sclk = 1;
mfwic 0:44a3005d4f20 1124 }
mfwic 0:44a3005d4f20 1125 else
mfwic 0:44a3005d4f20 1126 {
mfwic 0:44a3005d4f20 1127 sclk = 0;
mfwic 0:44a3005d4f20 1128 }
mfwic 0:44a3005d4f20 1129
mfwic 0:44a3005d4f20 1130 ival = dtst_out;
mfwic 0:44a3005d4f20 1131 sprintf(stemp, " DTST_OUT = %d\r\n", ival);
mfwic 0:44a3005d4f20 1132 sendSerial(stemp);
mfwic 0:44a3005d4f20 1133 return;
mfwic 0:44a3005d4f20 1134 }
mfwic 0:44a3005d4f20 1135
mfwic 0:44a3005d4f20 1136 if (!strcmp(commandString, "FLASHDEMO")) // flash test
mfwic 0:44a3005d4f20 1137 {
mfwic 0:44a3005d4f20 1138 flashdemo();
mfwic 0:44a3005d4f20 1139 return;
mfwic 0:44a3005d4f20 1140 }
mfwic 0:44a3005d4f20 1141
mfwic 0:44a3005d4f20 1142 if (!strcmp(commandString, "HVGOOD"))
mfwic 0:44a3005d4f20 1143 {
mfwic 0:44a3005d4f20 1144 sprintf(stemp, " HVCMP1: %i HVCMP2: %i", (int)hv_cmptr1, (int)hv_cmptr2);
mfwic 0:44a3005d4f20 1145 sendSerial(stemp);
mfwic 0:44a3005d4f20 1146 return;
mfwic 0:44a3005d4f20 1147 }
mfwic 0:44a3005d4f20 1148
mfwic 0:44a3005d4f20 1149 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 1150 {
mfwic 0:44a3005d4f20 1151 commandError = 1;
mfwic 0:44a3005d4f20 1152 }
mfwic 0:44a3005d4f20 1153 }
mfwic 0:44a3005d4f20 1154
mfwic 0:44a3005d4f20 1155 /************************************************************
mfwic 0:44a3005d4f20 1156 * Routine: setDwellTime
mfwic 0:44a3005d4f20 1157 * Input: dwellType (enum)
mfwic 0:44a3005d4f20 1158 * Returns: none
mfwic 0:44a3005d4f20 1159 * Description:
mfwic 0:44a3005d4f20 1160 * Set the specified dwell time in [registerno] to the indicated
mfwic 0:44a3005d4f20 1161 * number of milliseconds
mfwic 0:44a3005d4f20 1162 **************************************************************/
mfwic 0:44a3005d4f20 1163 enum { DWELL_1_OV_TIME, DWELL_1_TIME, DWELL_2_OV_TIME, DWELL_2_TIME };
mfwic 0:44a3005d4f20 1164
mfwic 0:44a3005d4f20 1165 void setDwellTime(int dwellType)
mfwic 0:44a3005d4f20 1166 {
mfwic 0:44a3005d4f20 1167 char channelSideChar, setSingleChannel;
mfwic 0:44a3005d4f20 1168 float fValue;
mfwic 0:44a3005d4f20 1169
mfwic 0:44a3005d4f20 1170 if (readback)
mfwic 0:44a3005d4f20 1171 {
mfwic 0:44a3005d4f20 1172 if (dwellType == DWELL_1_OV_TIME)
mfwic 0:44a3005d4f20 1173 {
mfwic 0:44a3005d4f20 1174 sprintf(stemp, "\r\n Channel A Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell1_ov_time);
mfwic 0:44a3005d4f20 1175 sendSerial(stemp);
mfwic 0:44a3005d4f20 1176 sprintf(stemp, "\r\n Channel B Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell1_ov_time);
mfwic 0:44a3005d4f20 1177 sendSerial(stemp);
mfwic 0:44a3005d4f20 1178 }
mfwic 0:44a3005d4f20 1179 else if (dwellType == DWELL_1_TIME)
mfwic 0:44a3005d4f20 1180 {
mfwic 0:44a3005d4f20 1181 sprintf(stemp, "\r\n Channel A Dwell 1 Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell1_time);
mfwic 0:44a3005d4f20 1182 sendSerial(stemp);
mfwic 0:44a3005d4f20 1183 sprintf(stemp, "\r\n Channel B Dwell 1 Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell1_time);
mfwic 0:44a3005d4f20 1184 sendSerial(stemp);
mfwic 0:44a3005d4f20 1185 }
mfwic 0:44a3005d4f20 1186 else if (dwellType == DWELL_2_OV_TIME)
mfwic 0:44a3005d4f20 1187 {
mfwic 0:44a3005d4f20 1188 sprintf(stemp, "\r\n Channel A Dwell 2 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell2_ov_time);
mfwic 0:44a3005d4f20 1189 sendSerial(stemp);
mfwic 0:44a3005d4f20 1190 sprintf(stemp, "\r\n Channel B Dwell 2 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell2_ov_time);
mfwic 0:44a3005d4f20 1191 sendSerial(stemp);
mfwic 0:44a3005d4f20 1192 }
mfwic 0:44a3005d4f20 1193 else if (dwellType == DWELL_2_TIME)
mfwic 0:44a3005d4f20 1194 {
mfwic 0:44a3005d4f20 1195 sprintf(stemp, "\r\n Channel A Dwell 2 Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell2_time);
mfwic 0:44a3005d4f20 1196 sendSerial(stemp);
mfwic 0:44a3005d4f20 1197 sprintf(stemp, "\r\n Channel B Dwell 2 Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell2_time);
mfwic 0:44a3005d4f20 1198 sendSerial(stemp);
mfwic 0:44a3005d4f20 1199 }
mfwic 0:44a3005d4f20 1200 }
mfwic 0:44a3005d4f20 1201 else if (running == 1)
mfwic 0:44a3005d4f20 1202 {
mfwic 0:44a3005d4f20 1203 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1204 sendSerial(stemp);
mfwic 0:44a3005d4f20 1205 }
mfwic 0:44a3005d4f20 1206 else
mfwic 0:44a3005d4f20 1207 {
mfwic 0:44a3005d4f20 1208 // Find the next command string character
mfwic 0:44a3005d4f20 1209 while (rxbuf[bufloc] == ' ' || rxbuf[bufloc] == '[' && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1210
mfwic 0:44a3005d4f20 1211 // Is the user setting a single channel or a channel pair?
mfwic 0:44a3005d4f20 1212 channelSideChar = toupper(rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1213 setSingleChannel = ((channelSideChar == 'A') || (channelSideChar == 'B'));
mfwic 0:44a3005d4f20 1214
mfwic 0:44a3005d4f20 1215 if (setSingleChannel)
mfwic 0:44a3005d4f20 1216 {
mfwic 0:44a3005d4f20 1217 chsgl = channelSideChar;
mfwic 0:44a3005d4f20 1218
mfwic 0:44a3005d4f20 1219 // Skip over the channel side character
mfwic 0:44a3005d4f20 1220 bufloc++;
mfwic 0:44a3005d4f20 1221
mfwic 0:44a3005d4f20 1222 // Find the next command string character
mfwic 0:44a3005d4f20 1223 while (rxbuf[bufloc] == ' ' || rxbuf[bufloc] == ',' && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1224 }
mfwic 0:44a3005d4f20 1225
mfwic 0:44a3005d4f20 1226 // Back up because the current character should be the start of the register
mfwic 0:44a3005d4f20 1227 // number but validateInt() is going to advance one character before calling
mfwic 0:44a3005d4f20 1228 // atof()
mfwic 0:44a3005d4f20 1229 bufloc--;
mfwic 0:44a3005d4f20 1230
mfwic 0:44a3005d4f20 1231 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1232 {
mfwic 0:44a3005d4f20 1233 sprintf(stemp, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 0:44a3005d4f20 1234 sendSerial(stemp);
mfwic 0:44a3005d4f20 1235 commandError = 1;
mfwic 0:44a3005d4f20 1236 }
mfwic 0:44a3005d4f20 1237
mfwic 0:44a3005d4f20 1238 if (!commandError)
mfwic 0:44a3005d4f20 1239 {
mfwic 0:44a3005d4f20 1240 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1241 registerno--;
mfwic 0:44a3005d4f20 1242
mfwic 0:44a3005d4f20 1243 // Skip over the register number
mfwic 0:44a3005d4f20 1244 while (isdigit(rxbuf[bufloc]) && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1245
mfwic 0:44a3005d4f20 1246 // Skip over white space and delimiters
mfwic 0:44a3005d4f20 1247 while (rxbuf[bufloc] == ' ' || rxbuf[bufloc] == ',' && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1248
mfwic 0:44a3005d4f20 1249 // Back up because the current character should be the start of the value
mfwic 0:44a3005d4f20 1250 // but validateEntry() is going to advance one character before calling
mfwic 0:44a3005d4f20 1251 // atof()
mfwic 0:44a3005d4f20 1252 bufloc--;
mfwic 0:44a3005d4f20 1253
mfwic 0:44a3005d4f20 1254 // Read and validate the dwell time value
mfwic 0:44a3005d4f20 1255 if (!validateEntry(SET, MIN_DWELL_TIME_MS, MAX_DWELL_TIME_MS, &fValue))
mfwic 0:44a3005d4f20 1256 {
mfwic 0:44a3005d4f20 1257 sprintf(stemp, " Invalid dwell time");
mfwic 0:44a3005d4f20 1258 sendSerial(stemp);
mfwic 0:44a3005d4f20 1259 commandError = 1;
mfwic 0:44a3005d4f20 1260 }
mfwic 0:44a3005d4f20 1261 }
mfwic 0:44a3005d4f20 1262
mfwic 0:44a3005d4f20 1263 if (!commandError)
mfwic 0:44a3005d4f20 1264 {
mfwic 0:44a3005d4f20 1265 if (dwellType == DWELL_1_OV_TIME)
mfwic 0:44a3005d4f20 1266 {
mfwic 0:44a3005d4f20 1267 if ((!setSingleChannel) || (channelSideChar == 'A'))
mfwic 0:44a3005d4f20 1268 {
mfwic 0:44a3005d4f20 1269 dwells[registerno].a_dwell1_ov_time = fValue;
mfwic 0:44a3005d4f20 1270 sprintf(stemp, "\r\n Channel A Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell1_ov_time);
mfwic 0:44a3005d4f20 1271 sendSerial(stemp);
mfwic 0:44a3005d4f20 1272 }
mfwic 0:44a3005d4f20 1273 if ((!setSingleChannel) || (channelSideChar == 'B'))
mfwic 0:44a3005d4f20 1274 {
mfwic 0:44a3005d4f20 1275 dwells[registerno].b_dwell1_ov_time = fValue;
mfwic 0:44a3005d4f20 1276 sprintf(stemp, "\r\n Channel B Dwell 1 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell1_ov_time);
mfwic 0:44a3005d4f20 1277 sendSerial(stemp);
mfwic 0:44a3005d4f20 1278 }
mfwic 0:44a3005d4f20 1279 }
mfwic 0:44a3005d4f20 1280 else if (dwellType == DWELL_1_TIME)
mfwic 0:44a3005d4f20 1281 {
mfwic 0:44a3005d4f20 1282 if ((!setSingleChannel) || (channelSideChar == 'A'))
mfwic 0:44a3005d4f20 1283 {
mfwic 0:44a3005d4f20 1284 dwells[registerno].a_dwell1_time = fValue;
mfwic 0:44a3005d4f20 1285 sprintf(stemp, "\r\n Channel A Dwell 1 Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell1_time);
mfwic 0:44a3005d4f20 1286 sendSerial(stemp);
mfwic 0:44a3005d4f20 1287 }
mfwic 0:44a3005d4f20 1288 if ((!setSingleChannel) || (channelSideChar == 'B'))
mfwic 0:44a3005d4f20 1289 {
mfwic 0:44a3005d4f20 1290 dwells[registerno].b_dwell1_time = fValue;
mfwic 0:44a3005d4f20 1291 sprintf(stemp, "\r\n Channel B Dwell 1 Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell1_time);
mfwic 0:44a3005d4f20 1292 sendSerial(stemp);
mfwic 0:44a3005d4f20 1293 }
mfwic 0:44a3005d4f20 1294 }
mfwic 0:44a3005d4f20 1295 else if (dwellType == DWELL_2_OV_TIME)
mfwic 0:44a3005d4f20 1296 {
mfwic 0:44a3005d4f20 1297 if ((!setSingleChannel) || (channelSideChar == 'A'))
mfwic 0:44a3005d4f20 1298 {
mfwic 0:44a3005d4f20 1299 dwells[registerno].a_dwell2_ov_time = fValue;
mfwic 0:44a3005d4f20 1300 sprintf(stemp, "\r\n Channel A Dwell 2 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell2_ov_time);
mfwic 0:44a3005d4f20 1301 sendSerial(stemp);
mfwic 0:44a3005d4f20 1302 }
mfwic 0:44a3005d4f20 1303 if ((!setSingleChannel) || (channelSideChar == 'B'))
mfwic 0:44a3005d4f20 1304 {
mfwic 0:44a3005d4f20 1305 dwells[registerno].b_dwell2_ov_time = fValue;
mfwic 0:44a3005d4f20 1306 sprintf(stemp, "\r\n Channel B Dwell 2 OV Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell2_ov_time);
mfwic 0:44a3005d4f20 1307 sendSerial(stemp);
mfwic 0:44a3005d4f20 1308 }
mfwic 0:44a3005d4f20 1309 }
mfwic 0:44a3005d4f20 1310 else if (dwellType == DWELL_2_TIME)
mfwic 0:44a3005d4f20 1311 {
mfwic 0:44a3005d4f20 1312 if ((!setSingleChannel) || (channelSideChar == 'A'))
mfwic 0:44a3005d4f20 1313 {
mfwic 0:44a3005d4f20 1314 dwells[registerno].a_dwell2_time = fValue;
mfwic 0:44a3005d4f20 1315 sprintf(stemp, "\r\n Channel A Dwell 2 Time [%i] = %0.3f", registerno + 1, dwells[registerno].a_dwell2_time);
mfwic 0:44a3005d4f20 1316 sendSerial(stemp);
mfwic 0:44a3005d4f20 1317 }
mfwic 0:44a3005d4f20 1318 if ((!setSingleChannel) || (channelSideChar == 'B'))
mfwic 0:44a3005d4f20 1319 {
mfwic 0:44a3005d4f20 1320 dwells[registerno].b_dwell2_time = fValue;
mfwic 0:44a3005d4f20 1321 sprintf(stemp, "\r\n Channel B Dwell 2 Time [%i] = %0.3f", registerno + 1, dwells[registerno].b_dwell2_time);
mfwic 0:44a3005d4f20 1322 sendSerial(stemp);
mfwic 0:44a3005d4f20 1323 }
mfwic 0:44a3005d4f20 1324 }
mfwic 0:44a3005d4f20 1325 }
mfwic 0:44a3005d4f20 1326 }
mfwic 0:44a3005d4f20 1327 }
mfwic 0:44a3005d4f20 1328
mfwic 0:44a3005d4f20 1329
mfwic 0:44a3005d4f20 1330 // Clear the specified register
mfwic 0:44a3005d4f20 1331
mfwic 0:44a3005d4f20 1332 void clearRegister(unsigned int reg)
mfwic 0:44a3005d4f20 1333 {
mfwic 0:44a3005d4f20 1334 int i;
mfwic 0:44a3005d4f20 1335
mfwic 0:44a3005d4f20 1336 dwells[reg].a_dwell1_time = 0;
mfwic 0:44a3005d4f20 1337 dwells[reg].a_dwell2_time = 0;
mfwic 0:44a3005d4f20 1338 dwells[reg].a_dwell1_ov_time = 0;
mfwic 0:44a3005d4f20 1339 dwells[reg].a_dwell2_ov_time = 0;
mfwic 0:44a3005d4f20 1340 dwells[reg].b_dwell1_time = 0;
mfwic 0:44a3005d4f20 1341 dwells[reg].b_dwell2_time = 0;
mfwic 0:44a3005d4f20 1342 dwells[reg].b_dwell1_ov_time = 0;
mfwic 0:44a3005d4f20 1343 dwells[reg].b_dwell2_ov_time = 0;
mfwic 0:44a3005d4f20 1344
mfwic 0:44a3005d4f20 1345 for (i = 0; i < MAX_BOARDS; i++)
mfwic 0:44a3005d4f20 1346 {
mfwic 0:44a3005d4f20 1347 ch[i][reg].enabled = 0;
mfwic 0:44a3005d4f20 1348 ch[i][reg].installed = 0;
mfwic 0:44a3005d4f20 1349 ch[i][reg].inverted = 0;
mfwic 0:44a3005d4f20 1350 ch[i][reg].differential_dwell = 1;
mfwic 0:44a3005d4f20 1351
mfwic 0:44a3005d4f20 1352 ch[i][reg].a_dwell1_volts = 0;
mfwic 0:44a3005d4f20 1353 ch[i][reg].a_dwell2_volts = 0;
mfwic 0:44a3005d4f20 1354 ch[i][reg].a_dwell1_ov = 0;
mfwic 0:44a3005d4f20 1355 ch[i][reg].a_dwell2_ov = 0;
mfwic 0:44a3005d4f20 1356 ch[i][reg].b_dwell1_volts = 0;
mfwic 0:44a3005d4f20 1357 ch[i][reg].b_dwell2_volts = 0;
mfwic 0:44a3005d4f20 1358 ch[i][reg].b_dwell1_ov = 0;
mfwic 0:44a3005d4f20 1359 ch[i][reg].b_dwell2_ov = 0;
mfwic 0:44a3005d4f20 1360 }
mfwic 0:44a3005d4f20 1361 }
mfwic 0:44a3005d4f20 1362
mfwic 0:44a3005d4f20 1363
mfwic 0:44a3005d4f20 1364 /************************************************************
mfwic 0:44a3005d4f20 1365 * Routine: doCommand
mfwic 0:44a3005d4f20 1366 * Input: none
mfwic 0:44a3005d4f20 1367 * Returns: none
mfwic 0:44a3005d4f20 1368 * Description:
mfwic 0:44a3005d4f20 1369 * This is the start of the command string.
mfwic 0:44a3005d4f20 1370 **************************************************************/
mfwic 0:44a3005d4f20 1371 void doCommand(void)
mfwic 0:44a3005d4f20 1372 {
mfwic 0:44a3005d4f20 1373 int channelNum, channelSide, numPoints, i, ival;
mfwic 0:44a3005d4f20 1374 char channelSideChar;
mfwic 0:44a3005d4f20 1375 unsigned int boardEnables;
mfwic 0:44a3005d4f20 1376
mfwic 0:44a3005d4f20 1377 char commandString[80] = { 0 };
mfwic 0:44a3005d4f20 1378
mfwic 0:44a3005d4f20 1379 bufloc = 0;
mfwic 0:44a3005d4f20 1380 commandError = 0;
mfwic 0:44a3005d4f20 1381
mfwic 0:44a3005d4f20 1382 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 1383
mfwic 0:44a3005d4f20 1384 if (!strcmp(commandString, "FREQ"))
mfwic 0:44a3005d4f20 1385 {
mfwic 0:44a3005d4f20 1386 if (readback)
mfwic 0:44a3005d4f20 1387 {
mfwic 0:44a3005d4f20 1388 sprintf(stemp, " %f", frequency);
mfwic 0:44a3005d4f20 1389 sendSerial(stemp);
mfwic 0:44a3005d4f20 1390 }
mfwic 0:44a3005d4f20 1391 else if (running == 1)
mfwic 0:44a3005d4f20 1392 {
mfwic 0:44a3005d4f20 1393 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1394 sendSerial(stemp);
mfwic 0:44a3005d4f20 1395 }
mfwic 0:44a3005d4f20 1396 else
mfwic 0:44a3005d4f20 1397 {
mfwic 0:44a3005d4f20 1398 validateEntry(SET, 1.0, 10000.0, &frequency);
mfwic 0:44a3005d4f20 1399 }
mfwic 0:44a3005d4f20 1400 }
mfwic 0:44a3005d4f20 1401 else if (!strcmp(commandString, "ALLOFF"))
mfwic 0:44a3005d4f20 1402 {
mfwic 0:44a3005d4f20 1403 hv_en = 1;
mfwic 0:44a3005d4f20 1404 setBoardEnables(ALLOFF);
mfwic 0:44a3005d4f20 1405 }
mfwic 0:44a3005d4f20 1406 else if (!strcmp(commandString, "ALLON"))
mfwic 0:44a3005d4f20 1407 {
mfwic 0:44a3005d4f20 1408 hv_en = 0;
mfwic 0:44a3005d4f20 1409 setBoardEnables(ALLON);
mfwic 0:44a3005d4f20 1410 }
mfwic 0:44a3005d4f20 1411 else if (!strcmp(commandString, "DWL1_OV_TIME"))
mfwic 0:44a3005d4f20 1412 {
mfwic 0:44a3005d4f20 1413 setDwellTime(DWELL_1_OV_TIME);
mfwic 0:44a3005d4f20 1414 }
mfwic 0:44a3005d4f20 1415 else if (!strcmp(commandString, "DWL1_TIME"))
mfwic 0:44a3005d4f20 1416 {
mfwic 0:44a3005d4f20 1417 setDwellTime(DWELL_1_TIME);
mfwic 0:44a3005d4f20 1418 }
mfwic 0:44a3005d4f20 1419 else if (!strcmp(commandString, "DWL2_OV_TIME"))
mfwic 0:44a3005d4f20 1420 {
mfwic 0:44a3005d4f20 1421 setDwellTime(DWELL_2_OV_TIME);
mfwic 0:44a3005d4f20 1422 }
mfwic 0:44a3005d4f20 1423 else if (!strcmp(commandString, "DWL2_TIME"))
mfwic 0:44a3005d4f20 1424 {
mfwic 0:44a3005d4f20 1425 setDwellTime(DWELL_2_TIME);
mfwic 0:44a3005d4f20 1426 }
mfwic 0:44a3005d4f20 1427 else if (!strcmp(commandString, "RUN"))
mfwic 0:44a3005d4f20 1428 {
mfwic 0:44a3005d4f20 1429 // Skip over any white space and the optional '[' character
mfwic 0:44a3005d4f20 1430 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == '[')) bufloc++;
mfwic 0:44a3005d4f20 1431
mfwic 0:44a3005d4f20 1432 if (rxbuf[bufloc] == '0')
mfwic 0:44a3005d4f20 1433 {
mfwic 0:44a3005d4f20 1434 stopPulser();
mfwic 0:44a3005d4f20 1435 setDacsToZeroVolts();
mfwic 0:44a3005d4f20 1436 }
mfwic 0:44a3005d4f20 1437 else if ((rxbuf[bufloc] > '0') && (rxbuf[bufloc] < '0' + MAX_REGISTERS))
mfwic 0:44a3005d4f20 1438 {
mfwic 0:44a3005d4f20 1439 ival = atoi(&rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1440 ival--;
mfwic 0:44a3005d4f20 1441
mfwic 0:44a3005d4f20 1442 if (running == 0)
mfwic 0:44a3005d4f20 1443 {
mfwic 0:44a3005d4f20 1444 setDacsToZeroVolts();
mfwic 0:44a3005d4f20 1445 Delay(1000);
mfwic 0:44a3005d4f20 1446 registerno = ival;
mfwic 0:44a3005d4f20 1447 startPulser(registerno);
mfwic 0:44a3005d4f20 1448 }
mfwic 0:44a3005d4f20 1449 else
mfwic 0:44a3005d4f20 1450 {
mfwic 0:44a3005d4f20 1451 // Compare the board enable flags between registers
mfwic 0:44a3005d4f20 1452 boardEnables = checkRegisterCompatibility(ival);
mfwic 0:44a3005d4f20 1453
mfwic 0:44a3005d4f20 1454 // If board enable flags match, change the register set
mfwic 0:44a3005d4f20 1455 if (boardEnables == 0)
mfwic 0:44a3005d4f20 1456 {
mfwic 0:44a3005d4f20 1457 registerno = ival;
mfwic 0:44a3005d4f20 1458 }
mfwic 0:44a3005d4f20 1459 else
mfwic 0:44a3005d4f20 1460 {
mfwic 0:44a3005d4f20 1461 sprintf(stemp, " Board enable flags do not match (0x%08x)", boardEnables);
mfwic 0:44a3005d4f20 1462 sendSerial(stemp);
mfwic 0:44a3005d4f20 1463 }
mfwic 0:44a3005d4f20 1464 }
mfwic 0:44a3005d4f20 1465 }
mfwic 0:44a3005d4f20 1466 else
mfwic 0:44a3005d4f20 1467 {
mfwic 0:44a3005d4f20 1468 sprintf(stemp, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 0:44a3005d4f20 1469 sendSerial(stemp);
mfwic 0:44a3005d4f20 1470 commandError = 1;
mfwic 0:44a3005d4f20 1471 }
mfwic 0:44a3005d4f20 1472 }
mfwic 0:44a3005d4f20 1473 else if (!strcmp(commandString, "STOP"))
mfwic 0:44a3005d4f20 1474 {
mfwic 0:44a3005d4f20 1475 stopPulser();
mfwic 0:44a3005d4f20 1476 setBoardEnables(ALLOFF);
mfwic 0:44a3005d4f20 1477 hv_en = OFF;
mfwic 0:44a3005d4f20 1478 }
mfwic 0:44a3005d4f20 1479 else if (!strcmp(commandString, "CLEAR"))
mfwic 0:44a3005d4f20 1480 {
mfwic 0:44a3005d4f20 1481 if (running == 1)
mfwic 0:44a3005d4f20 1482 {
mfwic 0:44a3005d4f20 1483 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1484 sendSerial(stemp);
mfwic 0:44a3005d4f20 1485 commandError = 1;
mfwic 0:44a3005d4f20 1486 }
mfwic 0:44a3005d4f20 1487 else if (!validateInt(SET, 0, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1488 {
mfwic 0:44a3005d4f20 1489 sprintf(stemp, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 0:44a3005d4f20 1490 sendSerial(stemp);
mfwic 0:44a3005d4f20 1491 commandError = 1;
mfwic 0:44a3005d4f20 1492 }
mfwic 0:44a3005d4f20 1493
mfwic 0:44a3005d4f20 1494 if (!commandError)
mfwic 0:44a3005d4f20 1495 {
mfwic 0:44a3005d4f20 1496 if (registerno == 0)
mfwic 0:44a3005d4f20 1497 {
mfwic 0:44a3005d4f20 1498 frequency = 1000;
mfwic 0:44a3005d4f20 1499
mfwic 0:44a3005d4f20 1500 clearRegister(0);
mfwic 0:44a3005d4f20 1501 clearRegister(1);
mfwic 0:44a3005d4f20 1502 clearRegister(2);
mfwic 0:44a3005d4f20 1503 clearRegister(3);
mfwic 0:44a3005d4f20 1504
mfwic 0:44a3005d4f20 1505 initCalParameters();
mfwic 0:44a3005d4f20 1506
mfwic 0:44a3005d4f20 1507 sprintf(stemp, " All parameters reset to default values");
mfwic 0:44a3005d4f20 1508 sendSerial(stemp);
mfwic 0:44a3005d4f20 1509 }
mfwic 0:44a3005d4f20 1510 else
mfwic 0:44a3005d4f20 1511 {
mfwic 0:44a3005d4f20 1512 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1513 registerno--;
mfwic 0:44a3005d4f20 1514
mfwic 0:44a3005d4f20 1515 clearRegister(registerno);
mfwic 0:44a3005d4f20 1516
mfwic 0:44a3005d4f20 1517 sprintf(stemp, " [x, %d] voltages are 0", registerno);
mfwic 0:44a3005d4f20 1518 sendSerial(stemp);
mfwic 0:44a3005d4f20 1519 }
mfwic 0:44a3005d4f20 1520 }
mfwic 0:44a3005d4f20 1521 }
mfwic 0:44a3005d4f20 1522 else if(!strcmp(commandString, "TEST"))
mfwic 0:44a3005d4f20 1523 {
mfwic 0:44a3005d4f20 1524 if (running == 1)
mfwic 0:44a3005d4f20 1525 {
mfwic 0:44a3005d4f20 1526 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1527 sendSerial(stemp);
mfwic 0:44a3005d4f20 1528 }
mfwic 0:44a3005d4f20 1529 else
mfwic 0:44a3005d4f20 1530 {
mfwic 0:44a3005d4f20 1531 testMenu();
mfwic 0:44a3005d4f20 1532 }
mfwic 0:44a3005d4f20 1533 }
mfwic 0:44a3005d4f20 1534 else if(!strcmp(commandString, "READ"))
mfwic 0:44a3005d4f20 1535 {
mfwic 0:44a3005d4f20 1536 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1537 {
mfwic 0:44a3005d4f20 1538 sprintf(stemp, " Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 0:44a3005d4f20 1539 sendSerial(stemp);
mfwic 0:44a3005d4f20 1540 commandError = 1;
mfwic 0:44a3005d4f20 1541 }
mfwic 0:44a3005d4f20 1542
mfwic 0:44a3005d4f20 1543 if (!commandError)
mfwic 0:44a3005d4f20 1544 {
mfwic 0:44a3005d4f20 1545 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1546 registerno--;
mfwic 0:44a3005d4f20 1547
mfwic 0:44a3005d4f20 1548 sprintf(stemp, "\r\n Register [x, %d]: ", registerno + 1);
mfwic 0:44a3005d4f20 1549 sendSerial(stemp);
mfwic 0:44a3005d4f20 1550 sprintf(stemp, "\r\n frequency = %0.3f Hz", frequency);
mfwic 0:44a3005d4f20 1551 sendSerial(stemp);
mfwic 0:44a3005d4f20 1552 sprintf(stemp, "\r\n dwell1_ov_time = %0.3f ms", dwells[registerno].a_dwell1_ov_time);
mfwic 0:44a3005d4f20 1553 sendSerial(stemp);
mfwic 0:44a3005d4f20 1554 sprintf(stemp, "\r\n dwell1_time = %0.3f ms", dwells[registerno].a_dwell1_time);
mfwic 0:44a3005d4f20 1555 sendSerial(stemp);
mfwic 0:44a3005d4f20 1556 sprintf(stemp, "\r\n dwell2_ov_time = %0.3f ms", dwells[registerno].a_dwell2_ov_time);
mfwic 0:44a3005d4f20 1557 sendSerial(stemp);
mfwic 0:44a3005d4f20 1558 sprintf(stemp, "\r\n dwell2_time = %0.3f ms", dwells[registerno].a_dwell2_time);
mfwic 0:44a3005d4f20 1559 sendSerial(stemp);
mfwic 0:44a3005d4f20 1560
mfwic 0:44a3005d4f20 1561 for (i = 0; i < MAX_BOARDS; i++)
mfwic 0:44a3005d4f20 1562 {
mfwic 0:44a3005d4f20 1563 sprintf(stemp, "\r\n\r\n Register [%d, %d]: ", i + 1, registerno + 1);
mfwic 0:44a3005d4f20 1564 sendSerial(stemp);
mfwic 0:44a3005d4f20 1565 sprintf(stemp, "\r\n enabled = %d", ch[i][registerno].enabled);
mfwic 0:44a3005d4f20 1566 sendSerial(stemp);
mfwic 0:44a3005d4f20 1567 sprintf(stemp, "\r\n differential = %d", ch[i][registerno].differential_dwell);
mfwic 0:44a3005d4f20 1568 sendSerial(stemp);
mfwic 0:44a3005d4f20 1569 sprintf(stemp, "\r\n inverted = %d", ch[i][registerno].inverted);
mfwic 0:44a3005d4f20 1570 sendSerial(stemp);
mfwic 0:44a3005d4f20 1571 sprintf(stemp, "\r\n a_dwell1_ov = %0.3f V", ch[i][registerno].a_dwell1_ov);
mfwic 0:44a3005d4f20 1572 sendSerial(stemp);
mfwic 0:44a3005d4f20 1573 sprintf(stemp, "\r\n a_dwell1_volts = %0.3f V", ch[i][registerno].a_dwell1_volts);
mfwic 0:44a3005d4f20 1574 sendSerial(stemp);
mfwic 0:44a3005d4f20 1575 sprintf(stemp, "\r\n a_dwell2_ov = %0.3f V", ch[i][registerno].a_dwell2_ov);
mfwic 0:44a3005d4f20 1576 sendSerial(stemp);
mfwic 0:44a3005d4f20 1577 sprintf(stemp, "\r\n a_dwell2_volts = %0.3f V", ch[i][registerno].a_dwell2_volts);
mfwic 0:44a3005d4f20 1578 sendSerial(stemp);
mfwic 0:44a3005d4f20 1579 sprintf(stemp, "\r\n b_dwell1_ov = %0.3f V", ch[i][registerno].b_dwell1_ov);
mfwic 0:44a3005d4f20 1580 sendSerial(stemp);
mfwic 0:44a3005d4f20 1581 sprintf(stemp, "\r\n b_dwell1_volts = %0.3f V", ch[i][registerno].b_dwell1_volts);
mfwic 0:44a3005d4f20 1582 sendSerial(stemp);
mfwic 0:44a3005d4f20 1583 sprintf(stemp, "\r\n b_dwell2_ov = %0.3f V", ch[i][registerno].b_dwell2_ov);
mfwic 0:44a3005d4f20 1584 sendSerial(stemp);
mfwic 0:44a3005d4f20 1585 sprintf(stemp, "\r\n b_dwell2_volts = %0.3f V", ch[i][registerno].b_dwell2_volts);
mfwic 0:44a3005d4f20 1586 sendSerial(stemp);
mfwic 0:44a3005d4f20 1587 }
mfwic 0:44a3005d4f20 1588 }
mfwic 0:44a3005d4f20 1589 }
mfwic 0:44a3005d4f20 1590 else if(!strcmp(commandString, "CAL"))
mfwic 0:44a3005d4f20 1591 {
mfwic 0:44a3005d4f20 1592 if (running == 1)
mfwic 0:44a3005d4f20 1593 {
mfwic 0:44a3005d4f20 1594 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1595 sendSerial(stemp);
mfwic 0:44a3005d4f20 1596 commandError = 1;
mfwic 0:44a3005d4f20 1597 }
mfwic 0:44a3005d4f20 1598 else if (!validateInt(SET, 1, MAX_BOARDS, &channelNum))
mfwic 0:44a3005d4f20 1599 {
mfwic 0:44a3005d4f20 1600 sprintf(stemp, " Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 0:44a3005d4f20 1601 sendSerial(stemp);
mfwic 0:44a3005d4f20 1602 commandError = 1;
mfwic 0:44a3005d4f20 1603 }
mfwic 0:44a3005d4f20 1604
mfwic 0:44a3005d4f20 1605 if (!commandError)
mfwic 0:44a3005d4f20 1606 {
mfwic 0:44a3005d4f20 1607 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1608 channelNum--;
mfwic 0:44a3005d4f20 1609
mfwic 0:44a3005d4f20 1610 // Skip over digits parsed as part of the atoi() call
mfwic 0:44a3005d4f20 1611 while (isdigit(rxbuf[bufloc])) bufloc++;
mfwic 0:44a3005d4f20 1612
mfwic 0:44a3005d4f20 1613 // Does the user simply want to read the current cal parameters?
mfwic 0:44a3005d4f20 1614 if (rxbuf[bufloc] == '?')
mfwic 0:44a3005d4f20 1615 {
mfwic 0:44a3005d4f20 1616 sprintf(stemp, "\r\nChannel %dA Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].a_scale, cal[channelNum].a_offset);
mfwic 0:44a3005d4f20 1617 sendSerial(stemp);
mfwic 0:44a3005d4f20 1618 sprintf(stemp, "\r\nChannel %dB Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].b_scale, cal[channelNum].b_offset);
mfwic 0:44a3005d4f20 1619 sendSerial(stemp);
mfwic 0:44a3005d4f20 1620 sendCRLF();
mfwic 0:44a3005d4f20 1621 return;
mfwic 0:44a3005d4f20 1622 }
mfwic 0:44a3005d4f20 1623
mfwic 0:44a3005d4f20 1624 // First character after digits must be either 'A' or 'B'
mfwic 0:44a3005d4f20 1625 channelSideChar = toupper(rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1626
mfwic 0:44a3005d4f20 1627 if ((channelSideChar != 'A') && (channelSideChar != 'B'))
mfwic 0:44a3005d4f20 1628 {
mfwic 0:44a3005d4f20 1629 sprintf(stemp, " Invalid channel (A/B)");
mfwic 0:44a3005d4f20 1630 sendSerial(stemp);
mfwic 0:44a3005d4f20 1631 commandError = 1;
mfwic 0:44a3005d4f20 1632 }
mfwic 0:44a3005d4f20 1633 }
mfwic 0:44a3005d4f20 1634
mfwic 0:44a3005d4f20 1635 if (!commandError)
mfwic 0:44a3005d4f20 1636 {
mfwic 0:44a3005d4f20 1637 // Translate 'A' to CHAN1 and 'B' to CHAN2
mfwic 0:44a3005d4f20 1638 channelSide = (channelSideChar == 'A' ? 1 : 2);
mfwic 0:44a3005d4f20 1639
mfwic 0:44a3005d4f20 1640 // Move past the channel side character
mfwic 0:44a3005d4f20 1641 bufloc++;
mfwic 0:44a3005d4f20 1642
mfwic 0:44a3005d4f20 1643 // Does the user simply want to read the current cal parameters?
mfwic 0:44a3005d4f20 1644 if (rxbuf[bufloc] == '?')
mfwic 0:44a3005d4f20 1645 {
mfwic 0:44a3005d4f20 1646 if (channelSide == 1)
mfwic 0:44a3005d4f20 1647 {
mfwic 0:44a3005d4f20 1648 sprintf(stemp, "\r\nChannel %dA Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].a_scale, cal[channelNum].a_offset);
mfwic 0:44a3005d4f20 1649 sendSerial(stemp);
mfwic 0:44a3005d4f20 1650 }
mfwic 0:44a3005d4f20 1651 else
mfwic 0:44a3005d4f20 1652 {
mfwic 0:44a3005d4f20 1653 sprintf(stemp, "\r\nChannel %dB Scale = %0.4f Offset = %0.4f", channelNum, cal[channelNum].b_scale, cal[channelNum].b_offset);
mfwic 0:44a3005d4f20 1654 sendSerial(stemp);
mfwic 0:44a3005d4f20 1655 }
mfwic 0:44a3005d4f20 1656
mfwic 0:44a3005d4f20 1657 sendCRLF();
mfwic 0:44a3005d4f20 1658 return;
mfwic 0:44a3005d4f20 1659 }
mfwic 0:44a3005d4f20 1660
mfwic 0:44a3005d4f20 1661 // If no point value specified, silently default to 3-point cal
mfwic 0:44a3005d4f20 1662 if (!strcmp(&rxbuf[bufloc], ""))
mfwic 0:44a3005d4f20 1663 {
mfwic 0:44a3005d4f20 1664 numPoints = 3;
mfwic 0:44a3005d4f20 1665 }
mfwic 0:44a3005d4f20 1666 else if (!validateInt(SET, 3, 11, &numPoints))
mfwic 0:44a3005d4f20 1667 {
mfwic 0:44a3005d4f20 1668 sprintf(stemp, " Invalid number of cal points (3 - 11)");
mfwic 0:44a3005d4f20 1669 sendSerial(stemp);
mfwic 0:44a3005d4f20 1670 commandError = 1;
mfwic 0:44a3005d4f20 1671 }
mfwic 0:44a3005d4f20 1672 }
mfwic 0:44a3005d4f20 1673
mfwic 0:44a3005d4f20 1674 if (!commandError)
mfwic 0:44a3005d4f20 1675 {
mfwic 0:44a3005d4f20 1676 sprintf(stemp, " Starting %d-point Calibration on Channel %d%c", numPoints, channelNum, channelSideChar);
mfwic 0:44a3005d4f20 1677 sendSerial(stemp);
mfwic 0:44a3005d4f20 1678
mfwic 0:44a3005d4f20 1679 // Reset the serial buffer for the incoming user input
mfwic 0:44a3005d4f20 1680 bufloc = 0;
mfwic 0:44a3005d4f20 1681 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 1682
mfwic 0:44a3005d4f20 1683 calibrate(channelNum, channelSide, numPoints);
mfwic 0:44a3005d4f20 1684 }
mfwic 0:44a3005d4f20 1685 }
mfwic 0:44a3005d4f20 1686 else if (!strcmp(commandString, "COMMIT"))
mfwic 0:44a3005d4f20 1687 {
mfwic 0:44a3005d4f20 1688 commitParametersToFlash();
mfwic 0:44a3005d4f20 1689 }
mfwic 0:44a3005d4f20 1690 else if (!strcmp(commandString, "CHLPR"))
mfwic 0:44a3005d4f20 1691 {
mfwic 0:44a3005d4f20 1692 if (readback)
mfwic 0:44a3005d4f20 1693 {
mfwic 0:44a3005d4f20 1694 sprintf(stemp, " [%i, %i]", chpair, registerno);
mfwic 0:44a3005d4f20 1695 sendSerial(stemp);
mfwic 0:44a3005d4f20 1696 }
mfwic 0:44a3005d4f20 1697 else if (running == 1)
mfwic 0:44a3005d4f20 1698 {
mfwic 0:44a3005d4f20 1699 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1700 sendSerial(stemp);
mfwic 0:44a3005d4f20 1701 }
mfwic 0:44a3005d4f20 1702 else
mfwic 0:44a3005d4f20 1703 {
mfwic 0:44a3005d4f20 1704 if (!validateInt(SET, 1, MAX_BOARDS, &chpair))
mfwic 0:44a3005d4f20 1705 {
mfwic 0:44a3005d4f20 1706 sprintf(stemp, "Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 0:44a3005d4f20 1707 sendSerial(stemp);
mfwic 0:44a3005d4f20 1708 commandError = 1;
mfwic 0:44a3005d4f20 1709 }
mfwic 0:44a3005d4f20 1710
mfwic 0:44a3005d4f20 1711 if (!commandError)
mfwic 0:44a3005d4f20 1712 {
mfwic 0:44a3005d4f20 1713 getDelimiter();
mfwic 0:44a3005d4f20 1714
mfwic 0:44a3005d4f20 1715 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1716 {
mfwic 0:44a3005d4f20 1717 sprintf(stemp, "Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 0:44a3005d4f20 1718 sendSerial(stemp);
mfwic 0:44a3005d4f20 1719 commandError = 1;
mfwic 0:44a3005d4f20 1720 }
mfwic 0:44a3005d4f20 1721 }
mfwic 0:44a3005d4f20 1722
mfwic 0:44a3005d4f20 1723 if (!commandError)
mfwic 0:44a3005d4f20 1724 {
mfwic 0:44a3005d4f20 1725 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1726 chpair--;
mfwic 0:44a3005d4f20 1727 registerno--;
mfwic 0:44a3005d4f20 1728
mfwic 0:44a3005d4f20 1729 // ignore spaces
mfwic 0:44a3005d4f20 1730 while ((rxbuf[bufloc++] == ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] != ';'));
mfwic 0:44a3005d4f20 1731
mfwic 0:44a3005d4f20 1732 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1733 {
mfwic 0:44a3005d4f20 1734 commandError = 1;
mfwic 0:44a3005d4f20 1735 }
mfwic 0:44a3005d4f20 1736 else
mfwic 0:44a3005d4f20 1737 {
mfwic 0:44a3005d4f20 1738 while((rxbuf[bufloc++] != ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] == ';') );
mfwic 0:44a3005d4f20 1739
mfwic 0:44a3005d4f20 1740 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1741 {
mfwic 0:44a3005d4f20 1742 commandError = 1;
mfwic 0:44a3005d4f20 1743 }
mfwic 0:44a3005d4f20 1744 else
mfwic 0:44a3005d4f20 1745 {
mfwic 0:44a3005d4f20 1746 chlprMenu();
mfwic 0:44a3005d4f20 1747 }
mfwic 0:44a3005d4f20 1748 }
mfwic 0:44a3005d4f20 1749 }
mfwic 0:44a3005d4f20 1750 }
mfwic 0:44a3005d4f20 1751 }
mfwic 0:44a3005d4f20 1752 else if (!strcmp(commandString, "CHLSGL"))
mfwic 0:44a3005d4f20 1753 {
mfwic 0:44a3005d4f20 1754 if (readback)
mfwic 0:44a3005d4f20 1755 {
mfwic 0:44a3005d4f20 1756 sprintf(stemp, " [%i%c, %i]", chpair, chsgl, registerno);
mfwic 0:44a3005d4f20 1757 sendSerial(stemp);
mfwic 0:44a3005d4f20 1758 }
mfwic 0:44a3005d4f20 1759 else if (running == 1)
mfwic 0:44a3005d4f20 1760 {
mfwic 0:44a3005d4f20 1761 sprintf(stemp, " Parameters may not be updated while running!");
mfwic 0:44a3005d4f20 1762 sendSerial(stemp);
mfwic 0:44a3005d4f20 1763 }
mfwic 0:44a3005d4f20 1764 else
mfwic 0:44a3005d4f20 1765 {
mfwic 0:44a3005d4f20 1766 if (!validateInt(SET, 1, MAX_BOARDS, &chpair))
mfwic 0:44a3005d4f20 1767 {
mfwic 0:44a3005d4f20 1768 sprintf(stemp, "Invalid board number (1 - %d)", MAX_BOARDS);
mfwic 0:44a3005d4f20 1769 sendSerial(stemp);
mfwic 0:44a3005d4f20 1770 commandError = 1;
mfwic 0:44a3005d4f20 1771 }
mfwic 0:44a3005d4f20 1772
mfwic 0:44a3005d4f20 1773 if (!commandError)
mfwic 0:44a3005d4f20 1774 {
mfwic 0:44a3005d4f20 1775 while(rxbuf[bufloc] == ' ' || rxbuf[bufloc] == '[' || isdigit(rxbuf[bufloc]) && rxbuf[bufloc] != 0x0D ){ bufloc++; }
mfwic 0:44a3005d4f20 1776
mfwic 0:44a3005d4f20 1777 channelSideChar = toupper(rxbuf[bufloc]);
mfwic 0:44a3005d4f20 1778
mfwic 0:44a3005d4f20 1779 if ((channelSideChar != 'A') && (channelSideChar != 'B'))
mfwic 0:44a3005d4f20 1780 {
mfwic 0:44a3005d4f20 1781 sprintf(stemp, "Invalid channel (A/B)");
mfwic 0:44a3005d4f20 1782 sendSerial(stemp);
mfwic 0:44a3005d4f20 1783 commandError = 1;
mfwic 0:44a3005d4f20 1784 }
mfwic 0:44a3005d4f20 1785
mfwic 0:44a3005d4f20 1786 if (!commandError)
mfwic 0:44a3005d4f20 1787 {
mfwic 0:44a3005d4f20 1788 chsgl = channelSideChar;
mfwic 0:44a3005d4f20 1789 getDelimiter();
mfwic 0:44a3005d4f20 1790
mfwic 0:44a3005d4f20 1791 if (!validateInt(SET, 1, MAX_REGISTERS, &registerno))
mfwic 0:44a3005d4f20 1792 {
mfwic 0:44a3005d4f20 1793 sprintf(stemp, "Invalid register number (1 - %d)", MAX_REGISTERS);
mfwic 0:44a3005d4f20 1794 sendSerial(stemp);
mfwic 0:44a3005d4f20 1795 commandError = 1;
mfwic 0:44a3005d4f20 1796 }
mfwic 0:44a3005d4f20 1797 }
mfwic 0:44a3005d4f20 1798
mfwic 0:44a3005d4f20 1799 if (!commandError)
mfwic 0:44a3005d4f20 1800 {
mfwic 0:44a3005d4f20 1801 // Adjust user values (1 - MAX) to 0 offset values (0 - (MAX - 1))
mfwic 0:44a3005d4f20 1802 chpair--;
mfwic 0:44a3005d4f20 1803 registerno--;
mfwic 0:44a3005d4f20 1804
mfwic 0:44a3005d4f20 1805 // ignore spaces
mfwic 0:44a3005d4f20 1806 while ((rxbuf[bufloc++] == ' ') && (rxbuf[bufloc] != 0x0D) && (rxbuf[bufloc] != 0) && (rxbuf[bufloc] == ';'));
mfwic 0:44a3005d4f20 1807
mfwic 0:44a3005d4f20 1808 if (rxbuf[bufloc] == 0 || rxbuf[bufloc] == 0x0D)
mfwic 0:44a3005d4f20 1809 {
mfwic 0:44a3005d4f20 1810 commandError = 1;
mfwic 0:44a3005d4f20 1811 }
mfwic 0:44a3005d4f20 1812 }
mfwic 0:44a3005d4f20 1813
mfwic 0:44a3005d4f20 1814 if (!commandError)
mfwic 0:44a3005d4f20 1815 {
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 else
mfwic 0:44a3005d4f20 1823 {
mfwic 0:44a3005d4f20 1824 chlsglMenu();
mfwic 0:44a3005d4f20 1825 }
mfwic 0:44a3005d4f20 1826 }
mfwic 0:44a3005d4f20 1827 }
mfwic 0:44a3005d4f20 1828 }
mfwic 0:44a3005d4f20 1829 }
mfwic 0:44a3005d4f20 1830 else
mfwic 0:44a3005d4f20 1831 {
mfwic 0:44a3005d4f20 1832 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 1833 {
mfwic 0:44a3005d4f20 1834 commandError = 1;
mfwic 0:44a3005d4f20 1835 }
mfwic 0:44a3005d4f20 1836 }
mfwic 0:44a3005d4f20 1837
mfwic 0:44a3005d4f20 1838 if (commandError)
mfwic 0:44a3005d4f20 1839 {
mfwic 0:44a3005d4f20 1840 sendSerial(" ?");
mfwic 0:44a3005d4f20 1841 }
mfwic 0:44a3005d4f20 1842
mfwic 0:44a3005d4f20 1843 sendCRLF();
mfwic 0:44a3005d4f20 1844 }
mfwic 0:44a3005d4f20 1845
mfwic 0:44a3005d4f20 1846 /************************************************************
mfwic 0:44a3005d4f20 1847 * Routine: processCommand
mfwic 0:44a3005d4f20 1848 * Input: none
mfwic 0:44a3005d4f20 1849 * Returns: none
mfwic 0:44a3005d4f20 1850 * Description:
mfwic 0:44a3005d4f20 1851 * This is the main serial communications routine. Everything
mfwic 0:44a3005d4f20 1852 * starts here as soon as a command is avaiable for processing.
mfwic 0:44a3005d4f20 1853 **************************************************************/
mfwic 0:44a3005d4f20 1854 void processCommand(void)
mfwic 0:44a3005d4f20 1855 {
mfwic 0:44a3005d4f20 1856 if (!serialStatus.command && !serialStatus.repeat)
mfwic 0:44a3005d4f20 1857 {
mfwic 0:44a3005d4f20 1858 return;
mfwic 0:44a3005d4f20 1859 }
mfwic 0:44a3005d4f20 1860
mfwic 0:44a3005d4f20 1861 doCommand(); // if not computer (i.e. terminal) you can do the command as well
mfwic 0:44a3005d4f20 1862
mfwic 0:44a3005d4f20 1863 bufloc = 0;
mfwic 0:44a3005d4f20 1864 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 1865
mfwic 0:44a3005d4f20 1866 serialStatus.computer = FALSE;
mfwic 0:44a3005d4f20 1867 serialStatus.command = FALSE;
mfwic 0:44a3005d4f20 1868 }