Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL2

Dependencies:   mbed

Committer:
mfwic
Date:
Tue Jan 08 22:05:53 2019 +0000
Revision:
20:5de24e4ae1c5
Parent:
16:5791665200cb
Child:
21:fe0ea1860c9f
Corrected BusOut order

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 "parameters.h"
mfwic 1:9f8583ba2431 36 #include "all_io.h"
mfwic 1:9f8583ba2431 37 //#include "calibrate.h"
mfwic 1:9f8583ba2431 38 #include "boards.h"
mfwic 1:9f8583ba2431 39 #include "menu.h"
mfwic 8:d3d7dca419b3 40 #include "command.h"
mfwic 0:44a3005d4f20 41
mfwic 16:5791665200cb 42 unsigned int boardsActive = 1;
mfwic 16:5791665200cb 43 unsigned int boardMults = 1;
mfwic 11:01dcfb29fbc4 44 unsigned int commandData;
mfwic 6:39442d493098 45 extern unsigned short my12;
mfwic 0:44a3005d4f20 46
mfwic 0:44a3005d4f20 47 /************* FILE SCOPE VARIABLES ************************/
mfwic 0:44a3005d4f20 48 char setvalue = FALSE;
mfwic 0:44a3005d4f20 49 int endOfCommand = 0;
mfwic 0:44a3005d4f20 50 int commandError = 0;
mfwic 0:44a3005d4f20 51 int menuLevel = LEVEL_MAIN;
mfwic 0:44a3005d4f20 52 int readback = 0;
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 * Routine: gethex
mfwic 0:44a3005d4f20 78 * Input: hex character
mfwic 0:44a3005d4f20 79 * Returns: hex integer
mfwic 0:44a3005d4f20 80 * Description:
mfwic 0:44a3005d4f20 81 * Converts a hex character to a value
mfwic 0:44a3005d4f20 82 **************************************************************/
mfwic 0:44a3005d4f20 83 char gethex(char val)
mfwic 0:44a3005d4f20 84 {
mfwic 0:44a3005d4f20 85 int retval;
mfwic 0:44a3005d4f20 86 switch(val)
mfwic 0:44a3005d4f20 87 {
mfwic 0:44a3005d4f20 88 case '0':
mfwic 0:44a3005d4f20 89 retval = 0;
mfwic 0:44a3005d4f20 90 break;
mfwic 0:44a3005d4f20 91 case '1':
mfwic 0:44a3005d4f20 92 retval = 1;
mfwic 0:44a3005d4f20 93 break;
mfwic 0:44a3005d4f20 94 case '2':
mfwic 0:44a3005d4f20 95 retval = 2;
mfwic 0:44a3005d4f20 96 break;
mfwic 0:44a3005d4f20 97 case '3':
mfwic 0:44a3005d4f20 98 retval = 3;
mfwic 0:44a3005d4f20 99 break;
mfwic 0:44a3005d4f20 100 case '4':
mfwic 0:44a3005d4f20 101 retval = 4;
mfwic 0:44a3005d4f20 102 break;
mfwic 0:44a3005d4f20 103 case '5':
mfwic 0:44a3005d4f20 104 retval = 5;
mfwic 0:44a3005d4f20 105 break;
mfwic 0:44a3005d4f20 106 case '6':
mfwic 0:44a3005d4f20 107 retval = 6;
mfwic 0:44a3005d4f20 108 break;
mfwic 0:44a3005d4f20 109 case '7':
mfwic 0:44a3005d4f20 110 retval = 7;
mfwic 0:44a3005d4f20 111 break;
mfwic 0:44a3005d4f20 112 case '8':
mfwic 0:44a3005d4f20 113 retval = 8;
mfwic 0:44a3005d4f20 114 break;
mfwic 0:44a3005d4f20 115 case '9':
mfwic 0:44a3005d4f20 116 retval = 9;
mfwic 0:44a3005d4f20 117 break;
mfwic 0:44a3005d4f20 118 case 'A':
mfwic 0:44a3005d4f20 119 retval = 10;
mfwic 0:44a3005d4f20 120 break;
mfwic 0:44a3005d4f20 121 case 'B':
mfwic 0:44a3005d4f20 122 retval = 11;
mfwic 0:44a3005d4f20 123 break;
mfwic 0:44a3005d4f20 124 case 'C':
mfwic 0:44a3005d4f20 125 retval = 12;
mfwic 0:44a3005d4f20 126 break;
mfwic 0:44a3005d4f20 127 case 'D':
mfwic 0:44a3005d4f20 128 retval = 13;
mfwic 0:44a3005d4f20 129 break;
mfwic 0:44a3005d4f20 130 case 'E':
mfwic 0:44a3005d4f20 131 retval = 14;
mfwic 0:44a3005d4f20 132 break;
mfwic 0:44a3005d4f20 133 case 'F':
mfwic 0:44a3005d4f20 134 retval = 15;
mfwic 0:44a3005d4f20 135 break;
mfwic 0:44a3005d4f20 136 default:
mfwic 0:44a3005d4f20 137 retval = 0;
mfwic 0:44a3005d4f20 138 break;
mfwic 0:44a3005d4f20 139
mfwic 0:44a3005d4f20 140 }
mfwic 0:44a3005d4f20 141 return retval;
mfwic 0:44a3005d4f20 142 }
mfwic 0:44a3005d4f20 143
mfwic 0:44a3005d4f20 144 /************************************************************
mfwic 0:44a3005d4f20 145 * Routine: showfval
mfwic 0:44a3005d4f20 146 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 147 * value (float value to display)
mfwic 0:44a3005d4f20 148 * Output: none
mfwic 0:44a3005d4f20 149 * Description:
mfwic 0:44a3005d4f20 150 * Sends a floating point number (value) over the serial port
mfwic 0:44a3005d4f20 151 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 152 *
mfwic 0:44a3005d4f20 153 **************************************************************/
mfwic 0:44a3005d4f20 154 void showfval(char setval,float value)
mfwic 0:44a3005d4f20 155 {
mfwic 0:44a3005d4f20 156 if(!setval)
mfwic 0:44a3005d4f20 157 {
mfwic 1:9f8583ba2431 158 sprintf(strbuf," %4.9f",value);
mfwic 1:9f8583ba2431 159 sendSerial(strbuf);
mfwic 0:44a3005d4f20 160 }
mfwic 0:44a3005d4f20 161 }
mfwic 0:44a3005d4f20 162
mfwic 0:44a3005d4f20 163 /************************************************************
mfwic 0:44a3005d4f20 164 * Routine: showival
mfwic 0:44a3005d4f20 165 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 166 * value (integer value to display)
mfwic 0:44a3005d4f20 167 * Output: none
mfwic 0:44a3005d4f20 168 * Description:
mfwic 0:44a3005d4f20 169 * Sends an integer (value) over the serial port
mfwic 0:44a3005d4f20 170 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 171 *
mfwic 0:44a3005d4f20 172 **************************************************************/
mfwic 0:44a3005d4f20 173 void showival(char setval, int value)
mfwic 0:44a3005d4f20 174 {
mfwic 0:44a3005d4f20 175 if(!setval)
mfwic 0:44a3005d4f20 176 {
mfwic 1:9f8583ba2431 177 sprintf(strbuf," %i",value);
mfwic 1:9f8583ba2431 178 sendSerial(strbuf);
mfwic 0:44a3005d4f20 179 }
mfwic 0:44a3005d4f20 180 }
mfwic 0:44a3005d4f20 181 /************************************************************
mfwic 0:44a3005d4f20 182 * Routine: showcval
mfwic 0:44a3005d4f20 183 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 184 * value (character to display)
mfwic 0:44a3005d4f20 185 * Output: none
mfwic 0:44a3005d4f20 186 * Description:
mfwic 0:44a3005d4f20 187 * Sends a character over the serial port
mfwic 0:44a3005d4f20 188 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 189 *
mfwic 0:44a3005d4f20 190 **************************************************************/
mfwic 0:44a3005d4f20 191 void showcval(char setval, int value)
mfwic 0:44a3005d4f20 192 {
mfwic 0:44a3005d4f20 193 if(!setval)
mfwic 0:44a3005d4f20 194 {
mfwic 1:9f8583ba2431 195 sprintf(strbuf," %c",(char)value);
mfwic 1:9f8583ba2431 196 sendSerial(strbuf);
mfwic 0:44a3005d4f20 197 }
mfwic 0:44a3005d4f20 198 }
mfwic 0:44a3005d4f20 199
mfwic 0:44a3005d4f20 200 /************************************************************
mfwic 0:44a3005d4f20 201 * Routine: showlval
mfwic 0:44a3005d4f20 202 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 203 * value (integer value to display)
mfwic 0:44a3005d4f20 204 * Output: none
mfwic 0:44a3005d4f20 205 * Description:
mfwic 0:44a3005d4f20 206 * Sends an long (value) over the serial port
mfwic 0:44a3005d4f20 207 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 208 *
mfwic 0:44a3005d4f20 209 **************************************************************/
mfwic 0:44a3005d4f20 210 void showlval(char setval, long value)
mfwic 0:44a3005d4f20 211 {
mfwic 0:44a3005d4f20 212 if(!setval)
mfwic 0:44a3005d4f20 213 {
mfwic 1:9f8583ba2431 214 sprintf(strbuf," %ld",value);
mfwic 1:9f8583ba2431 215 sendSerial(strbuf);
mfwic 0:44a3005d4f20 216 }
mfwic 0:44a3005d4f20 217 }
mfwic 0:44a3005d4f20 218
mfwic 0:44a3005d4f20 219 /************************************************************
mfwic 0:44a3005d4f20 220 * Routine: showuival
mfwic 0:44a3005d4f20 221 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 222 * value (integer value to display)
mfwic 0:44a3005d4f20 223 * Output: none
mfwic 0:44a3005d4f20 224 * Description:
mfwic 0:44a3005d4f20 225 * Sends an unsigned int (value) over the serial port
mfwic 0:44a3005d4f20 226 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 227 *
mfwic 0:44a3005d4f20 228 **************************************************************/
mfwic 0:44a3005d4f20 229 void showuival(char setval, unsigned int value)
mfwic 0:44a3005d4f20 230 {
mfwic 0:44a3005d4f20 231 if(!setval)
mfwic 0:44a3005d4f20 232 {
mfwic 1:9f8583ba2431 233 sprintf(strbuf," %u",value);
mfwic 1:9f8583ba2431 234 sendSerial(strbuf);
mfwic 0:44a3005d4f20 235 }
mfwic 0:44a3005d4f20 236 }
mfwic 0:44a3005d4f20 237
mfwic 0:44a3005d4f20 238 /************************************************************
mfwic 0:44a3005d4f20 239 * Routine: showhval
mfwic 0:44a3005d4f20 240 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 241 * value (hex integeger value to display)
mfwic 0:44a3005d4f20 242 * Output: none
mfwic 0:44a3005d4f20 243 * Description:
mfwic 0:44a3005d4f20 244 * Sends an integer (value) in hex over the serial port
mfwic 0:44a3005d4f20 245 * if it is being retrieved (GET)
mfwic 0:44a3005d4f20 246 *
mfwic 0:44a3005d4f20 247 **************************************************************/
mfwic 0:44a3005d4f20 248 void showhval(char setval, int value)
mfwic 0:44a3005d4f20 249 {
mfwic 0:44a3005d4f20 250 if(!setval)
mfwic 0:44a3005d4f20 251 {
mfwic 0:44a3005d4f20 252 if(serialStatus.computer)
mfwic 1:9f8583ba2431 253 sprintf(strbuf," %u",(unsigned int)value);
mfwic 0:44a3005d4f20 254 else
mfwic 1:9f8583ba2431 255 sprintf(strbuf," 0x%04x",value);
mfwic 1:9f8583ba2431 256 sendSerial(strbuf);
mfwic 0:44a3005d4f20 257 }
mfwic 0:44a3005d4f20 258 }
mfwic 0:44a3005d4f20 259
mfwic 0:44a3005d4f20 260
mfwic 0:44a3005d4f20 261 /************************************************************
mfwic 0:44a3005d4f20 262 * Routine: getival
mfwic 0:44a3005d4f20 263 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 264 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 265 * Description:
mfwic 0:44a3005d4f20 266 * Gets an integer from the serial port connection.
mfwic 0:44a3005d4f20 267 *
mfwic 0:44a3005d4f20 268 **************************************************************/
mfwic 0:44a3005d4f20 269 int getival(char setval)
mfwic 0:44a3005d4f20 270 {
mfwic 0:44a3005d4f20 271 if (setval)
mfwic 0:44a3005d4f20 272 {
mfwic 0:44a3005d4f20 273 return atoi(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 274 }
mfwic 0:44a3005d4f20 275
mfwic 0:44a3005d4f20 276 return 0;
mfwic 0:44a3005d4f20 277 }
mfwic 0:44a3005d4f20 278
mfwic 0:44a3005d4f20 279 /************************************************************
mfwic 0:44a3005d4f20 280 * Routine: getcval
mfwic 0:44a3005d4f20 281 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 282 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 283 * Description:
mfwic 0:44a3005d4f20 284 * Gets an character from the serial port connection.
mfwic 0:44a3005d4f20 285 *
mfwic 0:44a3005d4f20 286 **************************************************************/
mfwic 0:44a3005d4f20 287 int getcval(char setval)
mfwic 0:44a3005d4f20 288 {
mfwic 0:44a3005d4f20 289 if(setval)
mfwic 0:44a3005d4f20 290 {
mfwic 0:44a3005d4f20 291 // skip one space
mfwic 0:44a3005d4f20 292 ++bufloc;
mfwic 0:44a3005d4f20 293 // skip spaces and the equals sign
mfwic 0:44a3005d4f20 294 while((rxbuf[bufloc] == ' ') || (rxbuf[bufloc] == '='))
mfwic 0:44a3005d4f20 295 bufloc++;
mfwic 0:44a3005d4f20 296 return rxbuf[bufloc++];
mfwic 0:44a3005d4f20 297 }
mfwic 0:44a3005d4f20 298 else
mfwic 0:44a3005d4f20 299 return 0;
mfwic 0:44a3005d4f20 300
mfwic 0:44a3005d4f20 301 }
mfwic 0:44a3005d4f20 302 /************************************************************
mfwic 0:44a3005d4f20 303 * Routine: getlval
mfwic 0:44a3005d4f20 304 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 305 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 306 * Description:
mfwic 0:44a3005d4f20 307 * Gets an long from the serial port connection.
mfwic 0:44a3005d4f20 308 *
mfwic 0:44a3005d4f20 309 **************************************************************/
mfwic 0:44a3005d4f20 310 long getlval(char setval)
mfwic 0:44a3005d4f20 311 {
mfwic 0:44a3005d4f20 312 if(setval)
mfwic 0:44a3005d4f20 313 return atol(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 314 else
mfwic 0:44a3005d4f20 315 return 0;
mfwic 0:44a3005d4f20 316
mfwic 0:44a3005d4f20 317 }
mfwic 0:44a3005d4f20 318
mfwic 0:44a3005d4f20 319 /************************************************************
mfwic 0:44a3005d4f20 320 * Routine: getfval
mfwic 0:44a3005d4f20 321 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 322 * Returns: the value if it is being SET or 0 if it is a GET
mfwic 0:44a3005d4f20 323 * Description:
mfwic 0:44a3005d4f20 324 * Gets an float from the serial port connection.
mfwic 0:44a3005d4f20 325 *
mfwic 0:44a3005d4f20 326 **************************************************************/
mfwic 0:44a3005d4f20 327 float getfval(char setval)
mfwic 0:44a3005d4f20 328 {
mfwic 0:44a3005d4f20 329 if(setval)
mfwic 0:44a3005d4f20 330 return atof(&rxbuf[++bufloc]);
mfwic 0:44a3005d4f20 331 else
mfwic 0:44a3005d4f20 332 return 0;
mfwic 0:44a3005d4f20 333 }
mfwic 0:44a3005d4f20 334
mfwic 0:44a3005d4f20 335 /************************************************************
mfwic 0:44a3005d4f20 336 * Routine: validateEntry
mfwic 0:44a3005d4f20 337 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 338 * limlo -- low limit
mfwic 0:44a3005d4f20 339 * limhi -- high limit
mfwic 0:44a3005d4f20 340 * address -- address in eeprom to use
mfwic 0:44a3005d4f20 341 * Returns: 0 if entry validates and is written
mfwic 0:44a3005d4f20 342 * 1 if entry fails
mfwic 0:44a3005d4f20 343 * Description:
mfwic 0:44a3005d4f20 344 * Gets or sets a value in eeprom at the address but only
mfwic 0:44a3005d4f20 345 * if it is between the limits will it write the value to
mfwic 0:44a3005d4f20 346 * eeprom
mfwic 0:44a3005d4f20 347 *
mfwic 0:44a3005d4f20 348 **************************************************************/
mfwic 0:44a3005d4f20 349 int validateEntry(char setvalue, float limlo, float limhi, float *address)
mfwic 0:44a3005d4f20 350 {
mfwic 0:44a3005d4f20 351 float val;
mfwic 0:44a3005d4f20 352
mfwic 0:44a3005d4f20 353 if (setvalue)
mfwic 0:44a3005d4f20 354 {
mfwic 0:44a3005d4f20 355 val = getfval(SET);
mfwic 0:44a3005d4f20 356
mfwic 0:44a3005d4f20 357 if ((val >= limlo) && (val <= limhi))
mfwic 0:44a3005d4f20 358 {
mfwic 0:44a3005d4f20 359 *address = val;
mfwic 0:44a3005d4f20 360 }
mfwic 0:44a3005d4f20 361 else
mfwic 0:44a3005d4f20 362 {
mfwic 0:44a3005d4f20 363 showRangeError(0, 0, val);
mfwic 0:44a3005d4f20 364 return 0;
mfwic 0:44a3005d4f20 365 }
mfwic 0:44a3005d4f20 366 }
mfwic 0:44a3005d4f20 367 else
mfwic 0:44a3005d4f20 368 {
mfwic 0:44a3005d4f20 369 val = *address;
mfwic 1:9f8583ba2431 370 sprintf(strbuf, " %4.3f", val);
mfwic 1:9f8583ba2431 371 sendSerial(strbuf);
mfwic 0:44a3005d4f20 372 }
mfwic 0:44a3005d4f20 373
mfwic 0:44a3005d4f20 374 return 1;
mfwic 0:44a3005d4f20 375 }
mfwic 0:44a3005d4f20 376
mfwic 0:44a3005d4f20 377
mfwic 0:44a3005d4f20 378 /************************************************************
mfwic 0:44a3005d4f20 379 * Routine: validateEntry
mfwic 0:44a3005d4f20 380 * Input: setval (GET or SET)
mfwic 0:44a3005d4f20 381 * limlo -- low limit
mfwic 0:44a3005d4f20 382 * limhi -- high limit
mfwic 0:44a3005d4f20 383 * address -- address in eeprom to use
mfwic 0:44a3005d4f20 384 *
mfwic 0:44a3005d4f20 385 * Returns: FALSE if entry fails
mfwic 0:44a3005d4f20 386 * TRUE if entry validates and is written
mfwic 0:44a3005d4f20 387 *
mfwic 0:44a3005d4f20 388 * Description:
mfwic 0:44a3005d4f20 389 * Gets or sets a value in eeprom at the address but only
mfwic 0:44a3005d4f20 390 * if it is between the limits will it write the value to
mfwic 0:44a3005d4f20 391 * eeprom
mfwic 0:44a3005d4f20 392 *
mfwic 0:44a3005d4f20 393 **************************************************************/
mfwic 0:44a3005d4f20 394 int validateInt(char setvalue, int limlo, int limhi, int *address)
mfwic 0:44a3005d4f20 395 {
mfwic 0:44a3005d4f20 396 float val;
mfwic 0:44a3005d4f20 397
mfwic 0:44a3005d4f20 398 if (setvalue)
mfwic 0:44a3005d4f20 399 {
mfwic 0:44a3005d4f20 400 val = getfval(SET);
mfwic 0:44a3005d4f20 401
mfwic 0:44a3005d4f20 402 if ((val >= limlo) && (val <= limhi))
mfwic 0:44a3005d4f20 403 {
mfwic 0:44a3005d4f20 404 *address = val;
mfwic 0:44a3005d4f20 405 }
mfwic 0:44a3005d4f20 406 else
mfwic 0:44a3005d4f20 407 {
mfwic 0:44a3005d4f20 408 showRangeError(1, val, 0);
mfwic 0:44a3005d4f20 409 return FALSE;
mfwic 0:44a3005d4f20 410 }
mfwic 0:44a3005d4f20 411 }
mfwic 0:44a3005d4f20 412 else
mfwic 0:44a3005d4f20 413 {
mfwic 0:44a3005d4f20 414 val = *address;
mfwic 1:9f8583ba2431 415 sprintf(strbuf, " %4.0f", val);
mfwic 1:9f8583ba2431 416 sendSerial(strbuf);
mfwic 0:44a3005d4f20 417 }
mfwic 0:44a3005d4f20 418
mfwic 0:44a3005d4f20 419 return TRUE;
mfwic 0:44a3005d4f20 420 }
mfwic 0:44a3005d4f20 421
mfwic 0:44a3005d4f20 422
mfwic 0:44a3005d4f20 423 /************************************************************
mfwic 0:44a3005d4f20 424 * Routine: parseCommand
mfwic 0:44a3005d4f20 425 * Input: setvalue (GET or SET), command buffer
mfwic 0:44a3005d4f20 426 * Returns: none
mfwic 0:44a3005d4f20 427 * Description:
mfwic 0:44a3005d4f20 428 * parses a command and gets the commandstring
mfwic 0:44a3005d4f20 429 **************************************************************/
mfwic 0:44a3005d4f20 430 void parseCommand(char setvalue, char *commandString)
mfwic 0:44a3005d4f20 431 {
mfwic 0:44a3005d4f20 432 int i, endofc;
mfwic 0:44a3005d4f20 433 char store;
mfwic 0:44a3005d4f20 434
mfwic 0:44a3005d4f20 435 // Ignore any white space and the optional ';' character before the start of
mfwic 0:44a3005d4f20 436 // the command string (any ']' character is from the last command so skip that,
mfwic 0:44a3005d4f20 437 // too)
mfwic 0:44a3005d4f20 438 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == ';') || (rxbuf[bufloc] == ']'))
mfwic 0:44a3005d4f20 439 {
mfwic 0:44a3005d4f20 440 bufloc++;
mfwic 0:44a3005d4f20 441 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0)) break;
mfwic 0:44a3005d4f20 442 }
mfwic 0:44a3005d4f20 443
mfwic 0:44a3005d4f20 444 if (setvalue)
mfwic 0:44a3005d4f20 445 {
mfwic 0:44a3005d4f20 446 // We need a value for SET so hitting the end is a problem
mfwic 0:44a3005d4f20 447 if ((rxbuf[bufloc] == 0) || (rxbuf[bufloc] == 0x0D))
mfwic 0:44a3005d4f20 448 {
mfwic 0:44a3005d4f20 449 commandError = 1;
mfwic 0:44a3005d4f20 450 return;
mfwic 0:44a3005d4f20 451 }
mfwic 0:44a3005d4f20 452 }
mfwic 0:44a3005d4f20 453
mfwic 0:44a3005d4f20 454 // Find the end of the command string
mfwic 0:44a3005d4f20 455 endofc = bufloc + 1;
mfwic 0:44a3005d4f20 456
mfwic 0:44a3005d4f20 457 // White space, '[' and '?' all terminate the command string
mfwic 0:44a3005d4f20 458 while ((!isspace(rxbuf[endofc])) && (rxbuf[endofc] != '[') && (rxbuf[endofc] != '?'))
mfwic 0:44a3005d4f20 459 {
mfwic 0:44a3005d4f20 460 endofc++;
mfwic 0:44a3005d4f20 461 // (As does hitting the end of rxbuf!)
mfwic 0:44a3005d4f20 462 if ((rxbuf[endofc] == 0x0D) || (rxbuf[endofc] == 0)) break;
mfwic 0:44a3005d4f20 463 }
mfwic 0:44a3005d4f20 464
mfwic 0:44a3005d4f20 465 // Save the character that marks the end of the command string
mfwic 0:44a3005d4f20 466 store = rxbuf[endofc];
mfwic 0:44a3005d4f20 467
mfwic 1:9f8583ba2431 468 // sprintf(strbuf, "store == %c\r\n", store);
mfwic 1:9f8583ba2431 469 // sendSerial(strbuf);
mfwic 0:44a3005d4f20 470
mfwic 0:44a3005d4f20 471 // Command strings ending in '?' are readbacks
mfwic 0:44a3005d4f20 472 readback = ((store == '?') ? 1 : 0);
mfwic 0:44a3005d4f20 473
mfwic 0:44a3005d4f20 474 // Set end to null character so string can now be copied
mfwic 0:44a3005d4f20 475 rxbuf[endofc] = 0;
mfwic 0:44a3005d4f20 476
mfwic 0:44a3005d4f20 477 // Copy the command string into commandString
mfwic 5:09be5bbb5020 478 char commandStringBuf[80];
mfwic 5:09be5bbb5020 479 char *tok;
mfwic 5:09be5bbb5020 480 strcpy(commandStringBuf, &rxbuf[bufloc]);
mfwic 5:09be5bbb5020 481 if(strstr(commandStringBuf, "=")){
mfwic 5:09be5bbb5020 482 tok = strtok(commandStringBuf, "=");
mfwic 5:09be5bbb5020 483 strcpy(commandString, tok);
mfwic 5:09be5bbb5020 484 tok = strtok(NULL, "=");
mfwic 5:09be5bbb5020 485 commandData = atoi(tok);
mfwic 6:39442d493098 486 //if(DEBUG){
mfwic 6:39442d493098 487 // sprintf(strbuf, "commandStringBuf= %s, commandData= %d", commandStringBuf, commandData);
mfwic 6:39442d493098 488 // sendSerial(strbuf);
mfwic 6:39442d493098 489 //}
mfwic 5:09be5bbb5020 490 }
mfwic 5:09be5bbb5020 491 else{
mfwic 5:09be5bbb5020 492 strcpy(commandString, commandStringBuf);
mfwic 5:09be5bbb5020 493 }
mfwic 0:44a3005d4f20 494
mfwic 0:44a3005d4f20 495 // Convert the command string to all uppercase characters
mfwic 0:44a3005d4f20 496 for (i = 0; i < strlen(commandString); i++)
mfwic 0:44a3005d4f20 497 {
mfwic 0:44a3005d4f20 498 commandString[i] = toupper(commandString[i]);
mfwic 0:44a3005d4f20 499 }
mfwic 0:44a3005d4f20 500
mfwic 0:44a3005d4f20 501 // Replace the character we clobbered in rxbuf
mfwic 0:44a3005d4f20 502 rxbuf[endofc] = store;
mfwic 0:44a3005d4f20 503
mfwic 0:44a3005d4f20 504 // Update bufloc to the end of the command string
mfwic 0:44a3005d4f20 505 bufloc = endofc;
mfwic 0:44a3005d4f20 506 }
mfwic 0:44a3005d4f20 507
mfwic 0:44a3005d4f20 508 /************************************************************
mfwic 0:44a3005d4f20 509 * Routine: validateChannel
mfwic 0:44a3005d4f20 510 * Input: channel
mfwic 0:44a3005d4f20 511 * Returns: none
mfwic 0:44a3005d4f20 512 * Description:
mfwic 0:44a3005d4f20 513 * Verifies that the channel number is a valid value between
mfwic 0:44a3005d4f20 514 * 1 and MAX_BOARDS, setting commandError if the check fails
mfwic 0:44a3005d4f20 515 **************************************************************/
mfwic 0:44a3005d4f20 516 void validateChannel(int channel)
mfwic 0:44a3005d4f20 517 {
mfwic 0:44a3005d4f20 518 if ((channel < 1) || (channel > MAX_BOARDS))
mfwic 0:44a3005d4f20 519 {
mfwic 1:9f8583ba2431 520 sprintf(strbuf, " Invalid channel/board: %d (range is 1 - %d)", channel, MAX_BOARDS);
mfwic 1:9f8583ba2431 521 sendSerial(strbuf);
mfwic 0:44a3005d4f20 522 commandError = 1;
mfwic 0:44a3005d4f20 523 }
mfwic 0:44a3005d4f20 524 }
mfwic 0:44a3005d4f20 525
mfwic 0:44a3005d4f20 526 /************************************************************
mfwic 0:44a3005d4f20 527 * Routine: setPairVariable
mfwic 0:44a3005d4f20 528 * Input: *avariable,*bvariable
mfwic 0:44a3005d4f20 529 * Returns: none
mfwic 0:44a3005d4f20 530 * Description:
mfwic 0:44a3005d4f20 531 * sets a single channel variable
mfwic 0:44a3005d4f20 532 **************************************************************/
mfwic 0:44a3005d4f20 533 void setPairVariable(float *avariable, float *bvariable, float limitlo, float limithi)
mfwic 0:44a3005d4f20 534 {
mfwic 0:44a3005d4f20 535 if (!readback)
mfwic 0:44a3005d4f20 536 {
mfwic 0:44a3005d4f20 537 if (validateEntry(SET, limitlo, limithi, avariable))
mfwic 0:44a3005d4f20 538 {
mfwic 0:44a3005d4f20 539 *bvariable = *avariable;
mfwic 0:44a3005d4f20 540 }
mfwic 0:44a3005d4f20 541 }
mfwic 0:44a3005d4f20 542 }
mfwic 0:44a3005d4f20 543
mfwic 0:44a3005d4f20 544 /************************************************************
mfwic 0:44a3005d4f20 545 * Routine: testMenu
mfwic 0:44a3005d4f20 546 * Input: none
mfwic 0:44a3005d4f20 547 * Returns: none
mfwic 0:44a3005d4f20 548 * Description:
mfwic 0:44a3005d4f20 549 * testMenu
mfwic 0:44a3005d4f20 550 **************************************************************/
mfwic 0:44a3005d4f20 551 void testMenu(void)
mfwic 0:44a3005d4f20 552 {
mfwic 0:44a3005d4f20 553 int ival;
mfwic 0:44a3005d4f20 554 int ch, dac;
mfwic 6:39442d493098 555 //float fval;
mfwic 0:44a3005d4f20 556 unsigned int data;
mfwic 0:44a3005d4f20 557
mfwic 0:44a3005d4f20 558 char commandString[80] = { 0 };
mfwic 5:09be5bbb5020 559
mfwic 0:44a3005d4f20 560
mfwic 0:44a3005d4f20 561 commandError = 0;
mfwic 0:44a3005d4f20 562 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 563
mfwic 0:44a3005d4f20 564 if (!strcmp(commandString, "LEDS")) // duh do I have to tell you?
mfwic 0:44a3005d4f20 565 {
mfwic 1:9f8583ba2431 566 //testLEDs();
mfwic 0:44a3005d4f20 567 return;
mfwic 0:44a3005d4f20 568 }
mfwic 0:44a3005d4f20 569
mfwic 0:44a3005d4f20 570 if (!strcmp(commandString, "SELFTEST"))
mfwic 0:44a3005d4f20 571 {
mfwic 0:44a3005d4f20 572 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0))
mfwic 0:44a3005d4f20 573 {
mfwic 1:9f8583ba2431 574 //ival = DEFAULT_SELFTEST_BOARDS;
mfwic 1:9f8583ba2431 575 ival = 0;
mfwic 0:44a3005d4f20 576 }
mfwic 0:44a3005d4f20 577 else
mfwic 0:44a3005d4f20 578 {
mfwic 0:44a3005d4f20 579 ival = getival(SET);
mfwic 0:44a3005d4f20 580
mfwic 0:44a3005d4f20 581 if ((ival < 1) || (ival > MAX_BOARDS))
mfwic 0:44a3005d4f20 582 {
mfwic 1:9f8583ba2431 583 sprintf(strbuf, " Invalid number of channels/boards (range is 1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 584 sendSerial(strbuf);
mfwic 0:44a3005d4f20 585 commandError = 1;
mfwic 0:44a3005d4f20 586 return;
mfwic 0:44a3005d4f20 587 }
mfwic 0:44a3005d4f20 588 }
mfwic 0:44a3005d4f20 589
mfwic 1:9f8583ba2431 590 //selfTest(ival);
mfwic 0:44a3005d4f20 591 return;
mfwic 0:44a3005d4f20 592 }
mfwic 0:44a3005d4f20 593
mfwic 0:44a3005d4f20 594 if (!strcmp(commandString, "HVEN")) // high voltage enable
mfwic 0:44a3005d4f20 595 {
mfwic 0:44a3005d4f20 596 ival = getival(SET);
mfwic 1:9f8583ba2431 597 //hv_en = ival;
mfwic 0:44a3005d4f20 598 return;
mfwic 0:44a3005d4f20 599 }
mfwic 0:44a3005d4f20 600
mfwic 0:44a3005d4f20 601 if (!strcmp(commandString, "DAC"))
mfwic 0:44a3005d4f20 602 {
mfwic 0:44a3005d4f20 603 ch = getival(SET);
mfwic 0:44a3005d4f20 604 getDelimiter();
mfwic 0:44a3005d4f20 605 dac = getival(SET);
mfwic 0:44a3005d4f20 606 getDelimiter();
mfwic 0:44a3005d4f20 607 data = getival(SET);
mfwic 0:44a3005d4f20 608
mfwic 0:44a3005d4f20 609 validateChannel(ch);
mfwic 0:44a3005d4f20 610 if (commandError) return;
mfwic 0:44a3005d4f20 611 ch--;
mfwic 0:44a3005d4f20 612
mfwic 1:9f8583ba2431 613 //sendData((unsigned int)ch, (unsigned int)dac, data);
mfwic 1:9f8583ba2431 614 sprintf(strbuf, " ch: %u dac: %u value: %u", ch + 1, dac, data);
mfwic 1:9f8583ba2431 615 sendSerial(strbuf);
mfwic 0:44a3005d4f20 616 return;
mfwic 0:44a3005d4f20 617 }
mfwic 0:44a3005d4f20 618
mfwic 0:44a3005d4f20 619 if (!strcmp(commandString, "DINIT"))
mfwic 0:44a3005d4f20 620 {
mfwic 1:9f8583ba2431 621 //initDACs();
mfwic 0:44a3005d4f20 622 return;
mfwic 0:44a3005d4f20 623 }
mfwic 0:44a3005d4f20 624
mfwic 0:44a3005d4f20 625 if (!strcmp(commandString, "FINIT"))
mfwic 0:44a3005d4f20 626 {
mfwic 1:9f8583ba2431 627 //formatParameterSector();
mfwic 0:44a3005d4f20 628 return;
mfwic 0:44a3005d4f20 629 }
mfwic 0:44a3005d4f20 630
mfwic 0:44a3005d4f20 631 if (!strcmp(commandString, "CINIT"))
mfwic 0:44a3005d4f20 632 {
mfwic 1:9f8583ba2431 633 //initCalParameters();
mfwic 1:9f8583ba2431 634 sprintf(strbuf, " All calibration parameters set to default values");
mfwic 1:9f8583ba2431 635 sendSerial(strbuf);
mfwic 0:44a3005d4f20 636 return;
mfwic 0:44a3005d4f20 637 }
mfwic 0:44a3005d4f20 638
mfwic 0:44a3005d4f20 639 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 640 {
mfwic 0:44a3005d4f20 641 commandError = 1;
mfwic 0:44a3005d4f20 642 }
mfwic 11:01dcfb29fbc4 643 }//end void testMenu
mfwic 0:44a3005d4f20 644
mfwic 11:01dcfb29fbc4 645 unsigned int checkRegisterCompatibility(unsigned int reg)
mfwic 0:44a3005d4f20 646 {
mfwic 0:44a3005d4f20 647 int i;
mfwic 11:01dcfb29fbc4 648
mfwic 11:01dcfb29fbc4 649 unsigned int boardsEnabled = 0;
mfwic 0:44a3005d4f20 650
mfwic 0:44a3005d4f20 651 for (i = 0; i < MAX_BOARDS; i++)
mfwic 0:44a3005d4f20 652 {
mfwic 11:01dcfb29fbc4 653 //if (ch[i][reg].enabled == 1)
mfwic 11:01dcfb29fbc4 654 //{
mfwic 11:01dcfb29fbc4 655 // Set the corresponding bit
mfwic 11:01dcfb29fbc4 656 boardsEnabled |= (1 << i);
mfwic 11:01dcfb29fbc4 657 //}
mfwic 11:01dcfb29fbc4 658 }
mfwic 11:01dcfb29fbc4 659
mfwic 11:01dcfb29fbc4 660 // Invert the bits because 0 == enabled on the SPI write
mfwic 11:01dcfb29fbc4 661 boardsEnabled = ~boardsEnabled;
mfwic 0:44a3005d4f20 662
mfwic 11:01dcfb29fbc4 663 return (boardsEnabled ^ boardEnableBits) & 0x000003FF;
mfwic 11:01dcfb29fbc4 664 }
mfwic 0:44a3005d4f20 665
mfwic 0:44a3005d4f20 666 /************************************************************
mfwic 0:44a3005d4f20 667 * Routine: doCommand
mfwic 0:44a3005d4f20 668 * Input: none
mfwic 0:44a3005d4f20 669 * Returns: none
mfwic 0:44a3005d4f20 670 * Description:
mfwic 0:44a3005d4f20 671 * This is the start of the command string.
mfwic 0:44a3005d4f20 672 **************************************************************/
mfwic 0:44a3005d4f20 673 void doCommand(void)
mfwic 0:44a3005d4f20 674 {
mfwic 6:39442d493098 675 int ival;
mfwic 0:44a3005d4f20 676 unsigned int boardEnables;
mfwic 0:44a3005d4f20 677
mfwic 0:44a3005d4f20 678 char commandString[80] = { 0 };
mfwic 0:44a3005d4f20 679
mfwic 0:44a3005d4f20 680 bufloc = 0;
mfwic 0:44a3005d4f20 681 commandError = 0;
mfwic 0:44a3005d4f20 682
mfwic 0:44a3005d4f20 683 parseCommand(GET, commandString);
mfwic 0:44a3005d4f20 684
mfwic 1:9f8583ba2431 685 if (!strcmp(commandString, "MENU"))
mfwic 1:9f8583ba2431 686 {
mfwic 8:d3d7dca419b3 687 menuRedraw(NO_PROMPT);
mfwic 1:9f8583ba2431 688 }
mfwic 3:d8948c5b2951 689 else if (!strcmp(commandString, "HELP"))
mfwic 3:d8948c5b2951 690 {
mfwic 8:d3d7dca419b3 691 menuRedraw(NO_PROMPT);
mfwic 3:d8948c5b2951 692 }
mfwic 1:9f8583ba2431 693 else if (!strcmp(commandString, "BRDS"))
mfwic 1:9f8583ba2431 694 // BRDS is used to get/set the wr_out value.
mfwic 5:09be5bbb5020 695 // The integer value of boardsActive is used to change wr_out via setBoardEnables(boardsActive).
mfwic 1:9f8583ba2431 696 // Slots 12 to 0 are activated with the wr_out signals
mfwic 1:9f8583ba2431 697 // wr_out[13] = slots[12:0]
mfwic 0:44a3005d4f20 698 {
mfwic 0:44a3005d4f20 699 if (readback)
mfwic 0:44a3005d4f20 700 {
mfwic 5:09be5bbb5020 701 sprintf(strbuf, " %d", boardsActive);
mfwic 1:9f8583ba2431 702 sendSerial(strbuf);
mfwic 0:44a3005d4f20 703 }
mfwic 12:fd1fd1857628 704 else if (running == 1)
mfwic 12:fd1fd1857628 705 {
mfwic 12:fd1fd1857628 706 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 12:fd1fd1857628 707 sendSerial(strbuf);
mfwic 12:fd1fd1857628 708 }
mfwic 0:44a3005d4f20 709 else
mfwic 0:44a3005d4f20 710 {
mfwic 12:fd1fd1857628 711 boardsActive = commandData;
mfwic 12:fd1fd1857628 712 if(checkRange(boardsActive, 0, 8191) == 1){
mfwic 12:fd1fd1857628 713 wr_out_code = setBoardEnables(boardsActive);
mfwic 12:fd1fd1857628 714 testing = TRUE;
mfwic 1:9f8583ba2431 715 }else{
mfwic 5:09be5bbb5020 716 showRangeError(1, boardsActive, 0.0);
mfwic 1:9f8583ba2431 717 }
mfwic 1:9f8583ba2431 718 }
mfwic 1:9f8583ba2431 719 }
mfwic 1:9f8583ba2431 720 else if (!strcmp(commandString, "MULT"))
mfwic 1:9f8583ba2431 721 // MULT is used to get/set the en_out value.
mfwic 5:09be5bbb5020 722 // The integer value of boardMults is used to change en_out via setBoardWeights(boardMults).
mfwic 1:9f8583ba2431 723 // en_out are binary weighted signals that activate groups of DC-DC converters on the slot cards.
mfwic 1:9f8583ba2431 724 // en_out[6] = {en32, en16, en8, en4, en2, en1}
mfwic 1:9f8583ba2431 725 {
mfwic 1:9f8583ba2431 726 if (readback)
mfwic 1:9f8583ba2431 727 {
mfwic 5:09be5bbb5020 728 sprintf(strbuf, " %d", boardMults);
mfwic 1:9f8583ba2431 729 sendSerial(strbuf);
mfwic 1:9f8583ba2431 730 }
mfwic 12:fd1fd1857628 731 else if (running == 1)
mfwic 12:fd1fd1857628 732 {
mfwic 12:fd1fd1857628 733 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 12:fd1fd1857628 734 sendSerial(strbuf);
mfwic 12:fd1fd1857628 735 }
mfwic 1:9f8583ba2431 736 else
mfwic 1:9f8583ba2431 737 {
mfwic 12:fd1fd1857628 738 boardMults = commandData;
mfwic 5:09be5bbb5020 739 if(checkRange(boardMults, 0, 63) == 1){
mfwic 6:39442d493098 740 en_out_code = setBoardWeights(boardMults);
mfwic 20:5de24e4ae1c5 741 /*unsigned int bmult=boardMults;
mfwic 20:5de24e4ae1c5 742 for(int count=0;count<33;count++){
mfwic 20:5de24e4ae1c5 743 en_out_code = setBoardWeights(bmult++);
mfwic 20:5de24e4ae1c5 744 wait(0.25);
mfwic 20:5de24e4ae1c5 745 }
mfwic 20:5de24e4ae1c5 746 en_out_code = setBoardWeights(boardMults);
mfwic 20:5de24e4ae1c5 747 sprintf(strbuf, " en_out_code=%d\r\n", en_out_code);
mfwic 20:5de24e4ae1c5 748 sendSerial(strbuf);*/
mfwic 12:fd1fd1857628 749 testing = TRUE;
mfwic 1:9f8583ba2431 750 }else{
mfwic 5:09be5bbb5020 751 showRangeError(1, boardMults, 0.0);
mfwic 1:9f8583ba2431 752 }
mfwic 0:44a3005d4f20 753 }
mfwic 0:44a3005d4f20 754 }
mfwic 6:39442d493098 755 else if (!strcmp(commandString, "MY12"))
mfwic 6:39442d493098 756 // MULT is used to get/set the en_out value.
mfwic 6:39442d493098 757 // The integer value of boardMults is used to change en_out via setBoardWeights(boardMults).
mfwic 6:39442d493098 758 // en_out are binary weighted signals that activate groups of DC-DC converters on the slot cards.
mfwic 6:39442d493098 759 // en_out[6] = {en32, en16, en8, en4, en2, en1}
mfwic 6:39442d493098 760 {
mfwic 6:39442d493098 761 //if(DEBUG){
mfwic 6:39442d493098 762 // sprintf(strbuf, "my12=%d commandData=%d\r\n", my12, commandData);
mfwic 6:39442d493098 763 // sendSerial(strbuf);
mfwic 6:39442d493098 764 //}
mfwic 6:39442d493098 765
mfwic 6:39442d493098 766 if (readback)
mfwic 6:39442d493098 767 {
mfwic 6:39442d493098 768 sprintf(strbuf, " %d", my12);
mfwic 6:39442d493098 769 sendSerial(strbuf);
mfwic 12:fd1fd1857628 770 }else{
mfwic 12:fd1fd1857628 771 my12 = commandData;
mfwic 12:fd1fd1857628 772 testing = FALSE;
mfwic 6:39442d493098 773 }
mfwic 6:39442d493098 774 }
mfwic 0:44a3005d4f20 775 else if (!strcmp(commandString, "ALLOFF"))
mfwic 0:44a3005d4f20 776 {
mfwic 7:860b3a8275cb 777 my12 = 0;
mfwic 7:860b3a8275cb 778 running = FALSE;
mfwic 12:fd1fd1857628 779 testing = FALSE;
mfwic 7:860b3a8275cb 780 if(DEBUG){
mfwic 7:860b3a8275cb 781 sprintf(strbuf, "wr_out_code=%d\r\n", wr_out_code);
mfwic 7:860b3a8275cb 782 sendSerial(strbuf);
mfwic 7:860b3a8275cb 783 }
mfwic 0:44a3005d4f20 784 }
mfwic 0:44a3005d4f20 785 else if (!strcmp(commandString, "ALLON"))
mfwic 0:44a3005d4f20 786 {
mfwic 7:860b3a8275cb 787 wr_out_code = setBoardEnables((unsigned int)ALLON);
mfwic 12:fd1fd1857628 788 testing = TRUE;
mfwic 0:44a3005d4f20 789 }
mfwic 0:44a3005d4f20 790 else if (!strcmp(commandString, "RUN"))
mfwic 0:44a3005d4f20 791 {
mfwic 0:44a3005d4f20 792 // Skip over any white space and the optional '[' character
mfwic 0:44a3005d4f20 793 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == '[')) bufloc++;
mfwic 0:44a3005d4f20 794
mfwic 9:816b9a4e4f21 795 if(rxbuf[bufloc] == NULL){
mfwic 9:816b9a4e4f21 796 boardsActive = 1;
mfwic 9:816b9a4e4f21 797 startConverter(boardsActive);
mfwic 12:fd1fd1857628 798 testing = FALSE;
mfwic 9:816b9a4e4f21 799 }
mfwic 9:816b9a4e4f21 800 else if (rxbuf[bufloc] == '0')
mfwic 9:816b9a4e4f21 801 //if (rxbuf[bufloc] == '0')
mfwic 0:44a3005d4f20 802 {
mfwic 1:9f8583ba2431 803 stopConverter();
mfwic 1:9f8583ba2431 804 //setDacsToZeroVolts();
mfwic 12:fd1fd1857628 805 testing = FALSE;
mfwic 0:44a3005d4f20 806 }
mfwic 1:9f8583ba2431 807 else if ((rxbuf[bufloc] > '0') && (rxbuf[bufloc] < '0' + MAX_BOARDS))
mfwic 0:44a3005d4f20 808 {
mfwic 0:44a3005d4f20 809 ival = atoi(&rxbuf[bufloc]);
mfwic 9:816b9a4e4f21 810 //ival--;
mfwic 0:44a3005d4f20 811
mfwic 0:44a3005d4f20 812 if (running == 0)
mfwic 0:44a3005d4f20 813 {
mfwic 1:9f8583ba2431 814 boardsActive = ival;
mfwic 1:9f8583ba2431 815 startConverter(boardsActive);
mfwic 12:fd1fd1857628 816 testing = FALSE;
mfwic 0:44a3005d4f20 817 }
mfwic 0:44a3005d4f20 818 else
mfwic 0:44a3005d4f20 819 {
mfwic 0:44a3005d4f20 820 // Compare the board enable flags between registers
mfwic 0:44a3005d4f20 821 boardEnables = checkRegisterCompatibility(ival);
mfwic 0:44a3005d4f20 822
mfwic 0:44a3005d4f20 823 // If board enable flags match, change the register set
mfwic 0:44a3005d4f20 824 if (boardEnables == 0)
mfwic 0:44a3005d4f20 825 {
mfwic 1:9f8583ba2431 826 boardsActive = ival;
mfwic 0:44a3005d4f20 827 }
mfwic 0:44a3005d4f20 828 else
mfwic 0:44a3005d4f20 829 {
mfwic 1:9f8583ba2431 830 sprintf(strbuf, " Board enable flags do not match (0x%08x)", boardEnables);
mfwic 1:9f8583ba2431 831 sendSerial(strbuf);
mfwic 0:44a3005d4f20 832 }
mfwic 0:44a3005d4f20 833 }
mfwic 0:44a3005d4f20 834 }
mfwic 0:44a3005d4f20 835 else
mfwic 0:44a3005d4f20 836 {
mfwic 9:816b9a4e4f21 837 sprintf(strbuf, " Invalid number of boards (1 - %d)", MAX_BOARDS);
mfwic 1:9f8583ba2431 838 sendSerial(strbuf);
mfwic 0:44a3005d4f20 839 commandError = 1;
mfwic 0:44a3005d4f20 840 }
mfwic 0:44a3005d4f20 841 }
mfwic 0:44a3005d4f20 842 else if (!strcmp(commandString, "STOP"))
mfwic 0:44a3005d4f20 843 {
mfwic 1:9f8583ba2431 844 stopConverter();
mfwic 12:fd1fd1857628 845 testing = FALSE;
mfwic 12:fd1fd1857628 846 my12 = 0;
mfwic 1:9f8583ba2431 847 //hv_en = OFF;
mfwic 0:44a3005d4f20 848 }
mfwic 0:44a3005d4f20 849 else if(!strcmp(commandString, "TEST"))
mfwic 0:44a3005d4f20 850 {
mfwic 0:44a3005d4f20 851 if (running == 1)
mfwic 0:44a3005d4f20 852 {
mfwic 1:9f8583ba2431 853 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 854 sendSerial(strbuf);
mfwic 0:44a3005d4f20 855 }
mfwic 0:44a3005d4f20 856 else
mfwic 0:44a3005d4f20 857 {
mfwic 0:44a3005d4f20 858 testMenu();
mfwic 0:44a3005d4f20 859 }
mfwic 0:44a3005d4f20 860 }
mfwic 8:d3d7dca419b3 861 else if(!strcmp(commandString, "CAL"))
mfwic 0:44a3005d4f20 862 {
mfwic 0:44a3005d4f20 863 if (running == 1)
mfwic 0:44a3005d4f20 864 {
mfwic 1:9f8583ba2431 865 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 1:9f8583ba2431 866 sendSerial(strbuf);
mfwic 0:44a3005d4f20 867 commandError = 1;
mfwic 0:44a3005d4f20 868 }
mfwic 11:01dcfb29fbc4 869
mfwic 8:d3d7dca419b3 870 if (!commandError){
mfwic 8:d3d7dca419b3 871 raw = TRUE;
mfwic 8:d3d7dca419b3 872 menuRedraw(NO_PROMPT);
mfwic 0:44a3005d4f20 873 }
mfwic 8:d3d7dca419b3 874 }
mfwic 8:d3d7dca419b3 875 else if(!strcmp(commandString, "UNCAL"))
mfwic 8:d3d7dca419b3 876 {
mfwic 8:d3d7dca419b3 877 if (running == 1)
mfwic 8:d3d7dca419b3 878 {
mfwic 8:d3d7dca419b3 879 sprintf(strbuf, " Parameters may not be updated while running!");
mfwic 8:d3d7dca419b3 880 sendSerial(strbuf);
mfwic 8:d3d7dca419b3 881 commandError = 1;
mfwic 8:d3d7dca419b3 882 }
mfwic 11:01dcfb29fbc4 883
mfwic 8:d3d7dca419b3 884 if (!commandError){
mfwic 8:d3d7dca419b3 885 raw = FALSE;
mfwic 8:d3d7dca419b3 886 menuRedraw(NO_PROMPT);
mfwic 8:d3d7dca419b3 887 }
mfwic 8:d3d7dca419b3 888 }
mfwic 0:44a3005d4f20 889 else
mfwic 0:44a3005d4f20 890 {
mfwic 0:44a3005d4f20 891 if (strcmp(commandString, ""))
mfwic 0:44a3005d4f20 892 {
mfwic 0:44a3005d4f20 893 commandError = 1;
mfwic 0:44a3005d4f20 894 }
mfwic 0:44a3005d4f20 895 }
mfwic 0:44a3005d4f20 896
mfwic 0:44a3005d4f20 897 if (commandError)
mfwic 0:44a3005d4f20 898 {
mfwic 6:39442d493098 899 sendSerial(" !");
mfwic 0:44a3005d4f20 900 }
mfwic 0:44a3005d4f20 901
mfwic 3:d8948c5b2951 902 //sendCRLF();
mfwic 3:d8948c5b2951 903 menuPrompt(MENU_DCM1);
mfwic 0:44a3005d4f20 904 }
mfwic 0:44a3005d4f20 905
mfwic 0:44a3005d4f20 906 /************************************************************
mfwic 0:44a3005d4f20 907 * Routine: processCommand
mfwic 0:44a3005d4f20 908 * Input: none
mfwic 0:44a3005d4f20 909 * Returns: none
mfwic 0:44a3005d4f20 910 * Description:
mfwic 0:44a3005d4f20 911 * This is the main serial communications routine. Everything
mfwic 0:44a3005d4f20 912 * starts here as soon as a command is avaiable for processing.
mfwic 0:44a3005d4f20 913 **************************************************************/
mfwic 0:44a3005d4f20 914 void processCommand(void)
mfwic 0:44a3005d4f20 915 {
mfwic 0:44a3005d4f20 916 if (!serialStatus.command && !serialStatus.repeat)
mfwic 0:44a3005d4f20 917 {
mfwic 0:44a3005d4f20 918 return;
mfwic 0:44a3005d4f20 919 }
mfwic 0:44a3005d4f20 920
mfwic 0:44a3005d4f20 921 doCommand(); // if not computer (i.e. terminal) you can do the command as well
mfwic 0:44a3005d4f20 922
mfwic 0:44a3005d4f20 923 bufloc = 0;
mfwic 0:44a3005d4f20 924 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 925
mfwic 0:44a3005d4f20 926 serialStatus.computer = FALSE;
mfwic 0:44a3005d4f20 927 serialStatus.command = FALSE;
mfwic 9:816b9a4e4f21 928
mfwic 9:816b9a4e4f21 929 //sendSerial("didCommand\r\n");
mfwic 0:44a3005d4f20 930 }
mfwic 8:d3d7dca419b3 931
mfwic 8:d3d7dca419b3 932 /************************************************************
mfwic 8:d3d7dca419b3 933 * Routine: waitCommand
mfwic 8:d3d7dca419b3 934 * Input: none
mfwic 8:d3d7dca419b3 935 * Returns: none
mfwic 8:d3d7dca419b3 936 * Description:
mfwic 8:d3d7dca419b3 937 **************************************************************/
mfwic 8:d3d7dca419b3 938 bool waitCommand(void)
mfwic 8:d3d7dca419b3 939 {
mfwic 8:d3d7dca419b3 940 if (!serialStatus.command && !serialStatus.repeat)
mfwic 8:d3d7dca419b3 941 {
mfwic 8:d3d7dca419b3 942 return TRUE;
mfwic 8:d3d7dca419b3 943 }
mfwic 8:d3d7dca419b3 944
mfwic 8:d3d7dca419b3 945 serialStatus.computer = FALSE;
mfwic 8:d3d7dca419b3 946 serialStatus.command = FALSE;
mfwic 8:d3d7dca419b3 947
mfwic 8:d3d7dca419b3 948 return FALSE;
mfwic 8:d3d7dca419b3 949 }
mfwic 11:01dcfb29fbc4 950
mfwic 11:01dcfb29fbc4 951 // Verify that the same boards are enabled in both the current register and
mfwic 11:01dcfb29fbc4 952 // the specified register
mfwic 11:01dcfb29fbc4 953
mfwic 11:01dcfb29fbc4 954