Treehouse Mbed Team / Mbed 2 deprecated 1U5_proto_X

Dependencies:   mbed

Committer:
Slord2142
Date:
Tue Dec 06 18:47:01 2022 +0000
Revision:
1:bc3509459a27
Parent:
0:b3410a1e9843
Helix commit 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Slord2142 0:b3410a1e9843 1 //-------------------------------------------------------------------------------
Slord2142 0:b3410a1e9843 2 //
Slord2142 0:b3410a1e9843 3 // Treehouse Inc.
Slord2142 0:b3410a1e9843 4 // Colorado Springs, Colorado
Slord2142 0:b3410a1e9843 5 //
Slord2142 0:b3410a1e9843 6 // Copyright (c) 2016 by Treehouse Designs Inc.
Slord2142 0:b3410a1e9843 7 //
Slord2142 0:b3410a1e9843 8 // This code is the property of Treehouse, Inc. (Treehouse)
Slord2142 0:b3410a1e9843 9 // and may not be redistributed in any form without prior written
Slord2142 0:b3410a1e9843 10 // permission of the copyright holder, Treehouse.
Slord2142 0:b3410a1e9843 11 //
Slord2142 0:b3410a1e9843 12 // The above copyright notice and this permission notice shall be included in
Slord2142 0:b3410a1e9843 13 // all copies or substantial portions of the Software.
Slord2142 0:b3410a1e9843 14 //
Slord2142 0:b3410a1e9843 15 //
Slord2142 0:b3410a1e9843 16 //-------------------------------------------------------------------------------
Slord2142 0:b3410a1e9843 17 //
Slord2142 0:b3410a1e9843 18 // REVISION HISTORY:
Slord2142 0:b3410a1e9843 19 //
Slord2142 0:b3410a1e9843 20 // $Author: $
Slord2142 0:b3410a1e9843 21 // $Rev: $
Slord2142 0:b3410a1e9843 22 // $Date: $
Slord2142 0:b3410a1e9843 23 // $URL: $
Slord2142 0:b3410a1e9843 24 //
Slord2142 0:b3410a1e9843 25 //-------------------------------------------------------------------------------
Slord2142 0:b3410a1e9843 26
Slord2142 0:b3410a1e9843 27 #include "mbed.h"
Slord2142 0:b3410a1e9843 28 #include "string.h"
Slord2142 0:b3410a1e9843 29 #include "stdio.h"
Slord2142 0:b3410a1e9843 30 #include "stdlib.h"
Slord2142 0:b3410a1e9843 31 #include "ctype.h"
Slord2142 0:b3410a1e9843 32 #include "serial.h"
Slord2142 0:b3410a1e9843 33 #include "globals.h"
Slord2142 0:b3410a1e9843 34 #include "math.h"
Slord2142 0:b3410a1e9843 35 #include "parameters.h"
Slord2142 0:b3410a1e9843 36 #include "all_io.h"
Slord2142 1:bc3509459a27 37 #include "adc.h"
Slord2142 0:b3410a1e9843 38 //#include "calibrate.h"
Slord2142 0:b3410a1e9843 39 #include "boards.h"
Slord2142 0:b3410a1e9843 40 #include "menu.h"
Slord2142 0:b3410a1e9843 41 #include "command.h"
Slord2142 0:b3410a1e9843 42
Slord2142 0:b3410a1e9843 43 unsigned int boardsActive = ALLON;
Slord2142 0:b3410a1e9843 44 unsigned int boardMults = 32;
Slord2142 0:b3410a1e9843 45 unsigned int commandData;
Slord2142 0:b3410a1e9843 46 extern unsigned short my12;
Slord2142 0:b3410a1e9843 47
Slord2142 0:b3410a1e9843 48 /************* FILE SCOPE VARIABLES ************************/
Slord2142 0:b3410a1e9843 49 char setvalue = FALSE;
Slord2142 0:b3410a1e9843 50 int endOfCommand = 0;
Slord2142 0:b3410a1e9843 51 int commandError = 0;
Slord2142 0:b3410a1e9843 52 int menuLevel = LEVEL_MAIN;
Slord2142 0:b3410a1e9843 53 int readback = 0;
Slord2142 0:b3410a1e9843 54
Slord2142 0:b3410a1e9843 55 /************************************************************
Slord2142 0:b3410a1e9843 56 * Routine: getDelimiter
Slord2142 0:b3410a1e9843 57 * Input: none
Slord2142 0:b3410a1e9843 58 * Output: none
Slord2142 0:b3410a1e9843 59 * Description:
Slord2142 0:b3410a1e9843 60 * searches for a delimiter and moves the buffer location
Slord2142 0:b3410a1e9843 61 * to be just past it
Slord2142 0:b3410a1e9843 62 *
Slord2142 0:b3410a1e9843 63 **************************************************************/
Slord2142 0:b3410a1e9843 64 void getDelimiter(void)
Slord2142 0:b3410a1e9843 65 {
Slord2142 0:b3410a1e9843 66 ++bufloc;
Slord2142 0:b3410a1e9843 67
Slord2142 0:b3410a1e9843 68 while ((rxbuf[bufloc] != ' ') &&
Slord2142 0:b3410a1e9843 69 (rxbuf[bufloc] != ',') &&
Slord2142 0:b3410a1e9843 70 (rxbuf[bufloc] != '=') &&
Slord2142 0:b3410a1e9843 71 (rxbuf[bufloc] != 0 ))
Slord2142 0:b3410a1e9843 72 {
Slord2142 0:b3410a1e9843 73 bufloc++;
Slord2142 0:b3410a1e9843 74 }
Slord2142 0:b3410a1e9843 75 }
Slord2142 0:b3410a1e9843 76
Slord2142 0:b3410a1e9843 77 /************************************************************
Slord2142 0:b3410a1e9843 78 * Routine: gethex
Slord2142 0:b3410a1e9843 79 * Input: hex character
Slord2142 0:b3410a1e9843 80 * Returns: hex integer
Slord2142 0:b3410a1e9843 81 * Description:
Slord2142 0:b3410a1e9843 82 * Converts a hex character to a value
Slord2142 0:b3410a1e9843 83 **************************************************************/
Slord2142 0:b3410a1e9843 84 char gethex(char val)
Slord2142 0:b3410a1e9843 85 {
Slord2142 0:b3410a1e9843 86 int retval;
Slord2142 0:b3410a1e9843 87 switch(val)
Slord2142 0:b3410a1e9843 88 {
Slord2142 0:b3410a1e9843 89 case '0':
Slord2142 0:b3410a1e9843 90 retval = 0;
Slord2142 0:b3410a1e9843 91 break;
Slord2142 0:b3410a1e9843 92 case '1':
Slord2142 0:b3410a1e9843 93 retval = 1;
Slord2142 0:b3410a1e9843 94 break;
Slord2142 0:b3410a1e9843 95 case '2':
Slord2142 0:b3410a1e9843 96 retval = 2;
Slord2142 0:b3410a1e9843 97 break;
Slord2142 0:b3410a1e9843 98 case '3':
Slord2142 0:b3410a1e9843 99 retval = 3;
Slord2142 0:b3410a1e9843 100 break;
Slord2142 0:b3410a1e9843 101 case '4':
Slord2142 0:b3410a1e9843 102 retval = 4;
Slord2142 0:b3410a1e9843 103 break;
Slord2142 0:b3410a1e9843 104 case '5':
Slord2142 0:b3410a1e9843 105 retval = 5;
Slord2142 0:b3410a1e9843 106 break;
Slord2142 0:b3410a1e9843 107 case '6':
Slord2142 0:b3410a1e9843 108 retval = 6;
Slord2142 0:b3410a1e9843 109 break;
Slord2142 0:b3410a1e9843 110 case '7':
Slord2142 0:b3410a1e9843 111 retval = 7;
Slord2142 0:b3410a1e9843 112 break;
Slord2142 0:b3410a1e9843 113 case '8':
Slord2142 0:b3410a1e9843 114 retval = 8;
Slord2142 0:b3410a1e9843 115 break;
Slord2142 0:b3410a1e9843 116 case '9':
Slord2142 0:b3410a1e9843 117 retval = 9;
Slord2142 0:b3410a1e9843 118 break;
Slord2142 0:b3410a1e9843 119 case 'A':
Slord2142 0:b3410a1e9843 120 retval = 10;
Slord2142 0:b3410a1e9843 121 break;
Slord2142 0:b3410a1e9843 122 case 'B':
Slord2142 0:b3410a1e9843 123 retval = 11;
Slord2142 0:b3410a1e9843 124 break;
Slord2142 0:b3410a1e9843 125 case 'C':
Slord2142 0:b3410a1e9843 126 retval = 12;
Slord2142 0:b3410a1e9843 127 break;
Slord2142 0:b3410a1e9843 128 case 'D':
Slord2142 0:b3410a1e9843 129 retval = 13;
Slord2142 0:b3410a1e9843 130 break;
Slord2142 0:b3410a1e9843 131 case 'E':
Slord2142 0:b3410a1e9843 132 retval = 14;
Slord2142 0:b3410a1e9843 133 break;
Slord2142 0:b3410a1e9843 134 case 'F':
Slord2142 0:b3410a1e9843 135 retval = 15;
Slord2142 0:b3410a1e9843 136 break;
Slord2142 0:b3410a1e9843 137 default:
Slord2142 0:b3410a1e9843 138 retval = 0;
Slord2142 0:b3410a1e9843 139 break;
Slord2142 0:b3410a1e9843 140
Slord2142 0:b3410a1e9843 141 }
Slord2142 0:b3410a1e9843 142 return retval;
Slord2142 0:b3410a1e9843 143 }
Slord2142 0:b3410a1e9843 144
Slord2142 0:b3410a1e9843 145 /************************************************************
Slord2142 0:b3410a1e9843 146 * Routine: showfval
Slord2142 0:b3410a1e9843 147 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 148 * value (float value to display)
Slord2142 0:b3410a1e9843 149 * Output: none
Slord2142 0:b3410a1e9843 150 * Description:
Slord2142 0:b3410a1e9843 151 * Sends a floating point number (value) over the serial port
Slord2142 0:b3410a1e9843 152 * if it is being retrieved (GET)
Slord2142 0:b3410a1e9843 153 *
Slord2142 0:b3410a1e9843 154 **************************************************************/
Slord2142 0:b3410a1e9843 155 void showfval(char setval,float value)
Slord2142 0:b3410a1e9843 156 {
Slord2142 0:b3410a1e9843 157 if(!setval)
Slord2142 0:b3410a1e9843 158 {
Slord2142 0:b3410a1e9843 159 sprintf(strbuf," %4.9f",value);
Slord2142 0:b3410a1e9843 160 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 161 }
Slord2142 0:b3410a1e9843 162 }
Slord2142 0:b3410a1e9843 163
Slord2142 0:b3410a1e9843 164 /************************************************************
Slord2142 0:b3410a1e9843 165 * Routine: showival
Slord2142 0:b3410a1e9843 166 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 167 * value (integer value to display)
Slord2142 0:b3410a1e9843 168 * Output: none
Slord2142 0:b3410a1e9843 169 * Description:
Slord2142 0:b3410a1e9843 170 * Sends an integer (value) over the serial port
Slord2142 0:b3410a1e9843 171 * if it is being retrieved (GET)
Slord2142 0:b3410a1e9843 172 *
Slord2142 0:b3410a1e9843 173 **************************************************************/
Slord2142 0:b3410a1e9843 174 void showival(char setval, int value)
Slord2142 0:b3410a1e9843 175 {
Slord2142 0:b3410a1e9843 176 if(!setval)
Slord2142 0:b3410a1e9843 177 {
Slord2142 0:b3410a1e9843 178 sprintf(strbuf," %i",value);
Slord2142 0:b3410a1e9843 179 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 180 }
Slord2142 0:b3410a1e9843 181 }
Slord2142 0:b3410a1e9843 182 /************************************************************
Slord2142 0:b3410a1e9843 183 * Routine: showcval
Slord2142 0:b3410a1e9843 184 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 185 * value (character to display)
Slord2142 0:b3410a1e9843 186 * Output: none
Slord2142 0:b3410a1e9843 187 * Description:
Slord2142 0:b3410a1e9843 188 * Sends a character over the serial port
Slord2142 0:b3410a1e9843 189 * if it is being retrieved (GET)
Slord2142 0:b3410a1e9843 190 *
Slord2142 0:b3410a1e9843 191 **************************************************************/
Slord2142 0:b3410a1e9843 192 void showcval(char setval, int value)
Slord2142 0:b3410a1e9843 193 {
Slord2142 0:b3410a1e9843 194 if(!setval)
Slord2142 0:b3410a1e9843 195 {
Slord2142 0:b3410a1e9843 196 sprintf(strbuf," %c",(char)value);
Slord2142 0:b3410a1e9843 197 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 198 }
Slord2142 0:b3410a1e9843 199 }
Slord2142 0:b3410a1e9843 200
Slord2142 0:b3410a1e9843 201 /************************************************************
Slord2142 0:b3410a1e9843 202 * Routine: showlval
Slord2142 0:b3410a1e9843 203 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 204 * value (integer value to display)
Slord2142 0:b3410a1e9843 205 * Output: none
Slord2142 0:b3410a1e9843 206 * Description:
Slord2142 0:b3410a1e9843 207 * Sends an long (value) over the serial port
Slord2142 0:b3410a1e9843 208 * if it is being retrieved (GET)
Slord2142 0:b3410a1e9843 209 *
Slord2142 0:b3410a1e9843 210 **************************************************************/
Slord2142 0:b3410a1e9843 211 void showlval(char setval, long value)
Slord2142 0:b3410a1e9843 212 {
Slord2142 0:b3410a1e9843 213 if(!setval)
Slord2142 0:b3410a1e9843 214 {
Slord2142 0:b3410a1e9843 215 sprintf(strbuf," %ld",value);
Slord2142 0:b3410a1e9843 216 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 217 }
Slord2142 0:b3410a1e9843 218 }
Slord2142 0:b3410a1e9843 219
Slord2142 0:b3410a1e9843 220 /************************************************************
Slord2142 0:b3410a1e9843 221 * Routine: showuival
Slord2142 0:b3410a1e9843 222 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 223 * value (integer value to display)
Slord2142 0:b3410a1e9843 224 * Output: none
Slord2142 0:b3410a1e9843 225 * Description:
Slord2142 0:b3410a1e9843 226 * Sends an unsigned int (value) over the serial port
Slord2142 0:b3410a1e9843 227 * if it is being retrieved (GET)
Slord2142 0:b3410a1e9843 228 *
Slord2142 0:b3410a1e9843 229 **************************************************************/
Slord2142 0:b3410a1e9843 230 void showuival(char setval, unsigned int value)
Slord2142 0:b3410a1e9843 231 {
Slord2142 0:b3410a1e9843 232 if(!setval)
Slord2142 0:b3410a1e9843 233 {
Slord2142 0:b3410a1e9843 234 sprintf(strbuf," %u",value);
Slord2142 0:b3410a1e9843 235 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 236 }
Slord2142 0:b3410a1e9843 237 }
Slord2142 0:b3410a1e9843 238
Slord2142 0:b3410a1e9843 239 /************************************************************
Slord2142 0:b3410a1e9843 240 * Routine: showhval
Slord2142 0:b3410a1e9843 241 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 242 * value (hex integeger value to display)
Slord2142 0:b3410a1e9843 243 * Output: none
Slord2142 0:b3410a1e9843 244 * Description:
Slord2142 0:b3410a1e9843 245 * Sends an integer (value) in hex over the serial port
Slord2142 0:b3410a1e9843 246 * if it is being retrieved (GET)
Slord2142 0:b3410a1e9843 247 *
Slord2142 0:b3410a1e9843 248 **************************************************************/
Slord2142 0:b3410a1e9843 249 void showhval(char setval, int value)
Slord2142 0:b3410a1e9843 250 {
Slord2142 0:b3410a1e9843 251 if(!setval)
Slord2142 0:b3410a1e9843 252 {
Slord2142 0:b3410a1e9843 253 if(serialStatus.computer)
Slord2142 0:b3410a1e9843 254 sprintf(strbuf," %u",(unsigned int)value);
Slord2142 0:b3410a1e9843 255 else
Slord2142 0:b3410a1e9843 256 sprintf(strbuf," 0x%04x",value);
Slord2142 0:b3410a1e9843 257 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 258 }
Slord2142 0:b3410a1e9843 259 }
Slord2142 0:b3410a1e9843 260
Slord2142 0:b3410a1e9843 261
Slord2142 0:b3410a1e9843 262 /************************************************************
Slord2142 0:b3410a1e9843 263 * Routine: getival
Slord2142 0:b3410a1e9843 264 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 265 * Returns: the value if it is being SET or 0 if it is a GET
Slord2142 0:b3410a1e9843 266 * Description:
Slord2142 0:b3410a1e9843 267 * Gets an integer from the serial port connection.
Slord2142 0:b3410a1e9843 268 *
Slord2142 0:b3410a1e9843 269 **************************************************************/
Slord2142 0:b3410a1e9843 270 int getival(char setval)
Slord2142 0:b3410a1e9843 271 {
Slord2142 0:b3410a1e9843 272 if (setval)
Slord2142 0:b3410a1e9843 273 {
Slord2142 0:b3410a1e9843 274 return atoi(&rxbuf[++bufloc]);
Slord2142 0:b3410a1e9843 275 }
Slord2142 0:b3410a1e9843 276
Slord2142 0:b3410a1e9843 277 return 0;
Slord2142 0:b3410a1e9843 278 }
Slord2142 0:b3410a1e9843 279
Slord2142 0:b3410a1e9843 280 /************************************************************
Slord2142 0:b3410a1e9843 281 * Routine: getcval
Slord2142 0:b3410a1e9843 282 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 283 * Returns: the value if it is being SET or 0 if it is a GET
Slord2142 0:b3410a1e9843 284 * Description:
Slord2142 0:b3410a1e9843 285 * Gets an character from the serial port connection.
Slord2142 0:b3410a1e9843 286 *
Slord2142 0:b3410a1e9843 287 **************************************************************/
Slord2142 0:b3410a1e9843 288 int getcval(char setval)
Slord2142 0:b3410a1e9843 289 {
Slord2142 0:b3410a1e9843 290 if(setval)
Slord2142 0:b3410a1e9843 291 {
Slord2142 0:b3410a1e9843 292 // skip one space
Slord2142 0:b3410a1e9843 293 ++bufloc;
Slord2142 0:b3410a1e9843 294 // skip spaces and the equals sign
Slord2142 0:b3410a1e9843 295 while((rxbuf[bufloc] == ' ') || (rxbuf[bufloc] == '='))
Slord2142 0:b3410a1e9843 296 bufloc++;
Slord2142 0:b3410a1e9843 297 return rxbuf[bufloc++];
Slord2142 0:b3410a1e9843 298 }
Slord2142 0:b3410a1e9843 299 else
Slord2142 0:b3410a1e9843 300 return 0;
Slord2142 0:b3410a1e9843 301
Slord2142 0:b3410a1e9843 302 }
Slord2142 0:b3410a1e9843 303 /************************************************************
Slord2142 0:b3410a1e9843 304 * Routine: getlval
Slord2142 0:b3410a1e9843 305 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 306 * Returns: the value if it is being SET or 0 if it is a GET
Slord2142 0:b3410a1e9843 307 * Description:
Slord2142 0:b3410a1e9843 308 * Gets an long from the serial port connection.
Slord2142 0:b3410a1e9843 309 *
Slord2142 0:b3410a1e9843 310 **************************************************************/
Slord2142 0:b3410a1e9843 311 long getlval(char setval)
Slord2142 0:b3410a1e9843 312 {
Slord2142 0:b3410a1e9843 313 if(setval)
Slord2142 0:b3410a1e9843 314 return atol(&rxbuf[++bufloc]);
Slord2142 0:b3410a1e9843 315 else
Slord2142 0:b3410a1e9843 316 return 0;
Slord2142 0:b3410a1e9843 317
Slord2142 0:b3410a1e9843 318 }
Slord2142 0:b3410a1e9843 319
Slord2142 0:b3410a1e9843 320 /************************************************************
Slord2142 0:b3410a1e9843 321 * Routine: getfval
Slord2142 0:b3410a1e9843 322 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 323 * Returns: the value if it is being SET or 0 if it is a GET
Slord2142 0:b3410a1e9843 324 * Description:
Slord2142 0:b3410a1e9843 325 * Gets an float from the serial port connection.
Slord2142 0:b3410a1e9843 326 *
Slord2142 0:b3410a1e9843 327 **************************************************************/
Slord2142 0:b3410a1e9843 328 float getfval(char setval)
Slord2142 0:b3410a1e9843 329 {
Slord2142 0:b3410a1e9843 330 if(setval)
Slord2142 0:b3410a1e9843 331 return atof(&rxbuf[++bufloc]);
Slord2142 0:b3410a1e9843 332 else
Slord2142 0:b3410a1e9843 333 return 0;
Slord2142 0:b3410a1e9843 334 }
Slord2142 0:b3410a1e9843 335
Slord2142 0:b3410a1e9843 336 /************************************************************
Slord2142 0:b3410a1e9843 337 * Routine: validateEntry
Slord2142 0:b3410a1e9843 338 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 339 * limlo -- low limit
Slord2142 0:b3410a1e9843 340 * limhi -- high limit
Slord2142 0:b3410a1e9843 341 * address -- address in eeprom to use
Slord2142 0:b3410a1e9843 342 * Returns: 0 if entry validates and is written
Slord2142 0:b3410a1e9843 343 * 1 if entry fails
Slord2142 0:b3410a1e9843 344 * Description:
Slord2142 0:b3410a1e9843 345 * Gets or sets a value in eeprom at the address but only
Slord2142 0:b3410a1e9843 346 * if it is between the limits will it write the value to
Slord2142 0:b3410a1e9843 347 * eeprom
Slord2142 0:b3410a1e9843 348 *
Slord2142 0:b3410a1e9843 349 **************************************************************/
Slord2142 0:b3410a1e9843 350 int validateEntry(char setvalue, float limlo, float limhi, float *address)
Slord2142 0:b3410a1e9843 351 {
Slord2142 0:b3410a1e9843 352 float val;
Slord2142 0:b3410a1e9843 353
Slord2142 0:b3410a1e9843 354 if (setvalue)
Slord2142 0:b3410a1e9843 355 {
Slord2142 0:b3410a1e9843 356 val = getfval(SET);
Slord2142 0:b3410a1e9843 357
Slord2142 0:b3410a1e9843 358 if ((val >= limlo) && (val <= limhi))
Slord2142 0:b3410a1e9843 359 {
Slord2142 0:b3410a1e9843 360 *address = val;
Slord2142 0:b3410a1e9843 361 }
Slord2142 0:b3410a1e9843 362 else
Slord2142 0:b3410a1e9843 363 {
Slord2142 0:b3410a1e9843 364 showRangeError(0, 0, val);
Slord2142 0:b3410a1e9843 365 return 0;
Slord2142 0:b3410a1e9843 366 }
Slord2142 0:b3410a1e9843 367 }
Slord2142 0:b3410a1e9843 368 else
Slord2142 0:b3410a1e9843 369 {
Slord2142 0:b3410a1e9843 370 val = *address;
Slord2142 0:b3410a1e9843 371 sprintf(strbuf, " %4.3f", val);
Slord2142 0:b3410a1e9843 372 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 373 }
Slord2142 0:b3410a1e9843 374
Slord2142 0:b3410a1e9843 375 return 1;
Slord2142 0:b3410a1e9843 376 }
Slord2142 0:b3410a1e9843 377
Slord2142 0:b3410a1e9843 378
Slord2142 0:b3410a1e9843 379 /************************************************************
Slord2142 0:b3410a1e9843 380 * Routine: validateEntry
Slord2142 0:b3410a1e9843 381 * Input: setval (GET or SET)
Slord2142 0:b3410a1e9843 382 * limlo -- low limit
Slord2142 0:b3410a1e9843 383 * limhi -- high limit
Slord2142 0:b3410a1e9843 384 * address -- address in eeprom to use
Slord2142 0:b3410a1e9843 385 *
Slord2142 0:b3410a1e9843 386 * Returns: FALSE if entry fails
Slord2142 0:b3410a1e9843 387 * TRUE if entry validates and is written
Slord2142 0:b3410a1e9843 388 *
Slord2142 0:b3410a1e9843 389 * Description:
Slord2142 0:b3410a1e9843 390 * Gets or sets a value in eeprom at the address but only
Slord2142 0:b3410a1e9843 391 * if it is between the limits will it write the value to
Slord2142 0:b3410a1e9843 392 * eeprom
Slord2142 0:b3410a1e9843 393 *
Slord2142 0:b3410a1e9843 394 **************************************************************/
Slord2142 0:b3410a1e9843 395 int validateInt(char setvalue, int limlo, int limhi, int *address)
Slord2142 0:b3410a1e9843 396 {
Slord2142 0:b3410a1e9843 397 float val;
Slord2142 0:b3410a1e9843 398
Slord2142 0:b3410a1e9843 399 if (setvalue)
Slord2142 0:b3410a1e9843 400 {
Slord2142 0:b3410a1e9843 401 val = getfval(SET);
Slord2142 0:b3410a1e9843 402
Slord2142 0:b3410a1e9843 403 if ((val >= limlo) && (val <= limhi))
Slord2142 0:b3410a1e9843 404 {
Slord2142 0:b3410a1e9843 405 *address = val;
Slord2142 0:b3410a1e9843 406 }
Slord2142 0:b3410a1e9843 407 else
Slord2142 0:b3410a1e9843 408 {
Slord2142 0:b3410a1e9843 409 showRangeError(1, val, 0);
Slord2142 0:b3410a1e9843 410 return FALSE;
Slord2142 0:b3410a1e9843 411 }
Slord2142 0:b3410a1e9843 412 }
Slord2142 0:b3410a1e9843 413 else
Slord2142 0:b3410a1e9843 414 {
Slord2142 0:b3410a1e9843 415 val = *address;
Slord2142 0:b3410a1e9843 416 sprintf(strbuf, " %4.0f", val);
Slord2142 0:b3410a1e9843 417 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 418 }
Slord2142 0:b3410a1e9843 419
Slord2142 0:b3410a1e9843 420 return TRUE;
Slord2142 0:b3410a1e9843 421 }
Slord2142 0:b3410a1e9843 422
Slord2142 0:b3410a1e9843 423
Slord2142 0:b3410a1e9843 424 /************************************************************
Slord2142 0:b3410a1e9843 425 * Routine: parseCommand
Slord2142 0:b3410a1e9843 426 * Input: setvalue (GET or SET), command buffer
Slord2142 0:b3410a1e9843 427 * Returns: none
Slord2142 0:b3410a1e9843 428 * Description:
Slord2142 0:b3410a1e9843 429 * parses a command and gets the commandstring
Slord2142 0:b3410a1e9843 430 **************************************************************/
Slord2142 0:b3410a1e9843 431 void parseCommand(char setvalue, char *commandString)
Slord2142 0:b3410a1e9843 432 {
Slord2142 0:b3410a1e9843 433 int i, endofc;
Slord2142 0:b3410a1e9843 434 char store;
Slord2142 0:b3410a1e9843 435
Slord2142 0:b3410a1e9843 436 // Ignore any white space and the optional ';' character before the start of
Slord2142 0:b3410a1e9843 437 // the command string (any ']' character is from the last command so skip that,
Slord2142 0:b3410a1e9843 438 // too)
Slord2142 0:b3410a1e9843 439 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == ';') || (rxbuf[bufloc] == ']'))
Slord2142 0:b3410a1e9843 440 {
Slord2142 0:b3410a1e9843 441 bufloc++;
Slord2142 0:b3410a1e9843 442 if ((rxbuf[bufloc] == 0x0D) || (rxbuf[bufloc] == 0)) break;
Slord2142 0:b3410a1e9843 443 }
Slord2142 0:b3410a1e9843 444
Slord2142 0:b3410a1e9843 445 if (setvalue)
Slord2142 0:b3410a1e9843 446 {
Slord2142 0:b3410a1e9843 447 // We need a value for SET so hitting the end is a problem
Slord2142 0:b3410a1e9843 448 if ((rxbuf[bufloc] == 0) || (rxbuf[bufloc] == 0x0D))
Slord2142 0:b3410a1e9843 449 {
Slord2142 0:b3410a1e9843 450 commandError = 1;
Slord2142 0:b3410a1e9843 451 return;
Slord2142 0:b3410a1e9843 452 }
Slord2142 0:b3410a1e9843 453 }
Slord2142 0:b3410a1e9843 454
Slord2142 0:b3410a1e9843 455 // Find the end of the command string
Slord2142 0:b3410a1e9843 456 endofc = bufloc + 1;
Slord2142 0:b3410a1e9843 457
Slord2142 0:b3410a1e9843 458 // White space, '[' and '?' all terminate the command string
Slord2142 0:b3410a1e9843 459 while ((!isspace(rxbuf[endofc])) && (rxbuf[endofc] != '[') && (rxbuf[endofc] != '?'))
Slord2142 0:b3410a1e9843 460 {
Slord2142 0:b3410a1e9843 461 endofc++;
Slord2142 0:b3410a1e9843 462 // (As does hitting the end of rxbuf!)
Slord2142 0:b3410a1e9843 463 if ((rxbuf[endofc] == 0x0D) || (rxbuf[endofc] == 0)) break;
Slord2142 0:b3410a1e9843 464 }
Slord2142 0:b3410a1e9843 465
Slord2142 0:b3410a1e9843 466 // Save the character that marks the end of the command string
Slord2142 0:b3410a1e9843 467 store = rxbuf[endofc];
Slord2142 0:b3410a1e9843 468
Slord2142 0:b3410a1e9843 469 // sprintf(strbuf, "store == %c\r\n", store);
Slord2142 0:b3410a1e9843 470 // sendSerial(strbuf);
Slord2142 0:b3410a1e9843 471
Slord2142 0:b3410a1e9843 472 // Command strings ending in '?' are readbacks
Slord2142 0:b3410a1e9843 473 readback = ((store == '?') ? 1 : 0);
Slord2142 0:b3410a1e9843 474
Slord2142 0:b3410a1e9843 475 // Set end to null character so string can now be copied
Slord2142 0:b3410a1e9843 476 rxbuf[endofc] = 0;
Slord2142 0:b3410a1e9843 477
Slord2142 0:b3410a1e9843 478 // Copy the command string into commandString
Slord2142 0:b3410a1e9843 479 char commandStringBuf[80];
Slord2142 0:b3410a1e9843 480 char *tok;
Slord2142 0:b3410a1e9843 481 strcpy(commandStringBuf, &rxbuf[bufloc]);
Slord2142 0:b3410a1e9843 482 if(strstr(commandStringBuf, "=")){
Slord2142 0:b3410a1e9843 483 tok = strtok(commandStringBuf, "=");
Slord2142 0:b3410a1e9843 484 strcpy(commandString, tok);
Slord2142 0:b3410a1e9843 485 tok = strtok(NULL, "=");
Slord2142 0:b3410a1e9843 486 commandData = atoi(tok);
Slord2142 0:b3410a1e9843 487 //if(DEBUG){
Slord2142 0:b3410a1e9843 488 // sprintf(strbuf, "commandStringBuf= %s, commandData= %d", commandStringBuf, commandData);
Slord2142 0:b3410a1e9843 489 // sendSerial(strbuf);
Slord2142 0:b3410a1e9843 490 //}
Slord2142 0:b3410a1e9843 491 }
Slord2142 0:b3410a1e9843 492 else{
Slord2142 0:b3410a1e9843 493 strcpy(commandString, commandStringBuf);
Slord2142 0:b3410a1e9843 494 }
Slord2142 0:b3410a1e9843 495
Slord2142 0:b3410a1e9843 496 // Convert the command string to all uppercase characters
Slord2142 0:b3410a1e9843 497 for (i = 0; i < strlen(commandString); i++)
Slord2142 0:b3410a1e9843 498 {
Slord2142 0:b3410a1e9843 499 commandString[i] = toupper(commandString[i]);
Slord2142 0:b3410a1e9843 500 }
Slord2142 0:b3410a1e9843 501
Slord2142 0:b3410a1e9843 502 // Replace the character we clobbered in rxbuf
Slord2142 0:b3410a1e9843 503 rxbuf[endofc] = store;
Slord2142 0:b3410a1e9843 504
Slord2142 0:b3410a1e9843 505 // Update bufloc to the end of the command string
Slord2142 0:b3410a1e9843 506 bufloc = endofc;
Slord2142 0:b3410a1e9843 507 }
Slord2142 0:b3410a1e9843 508
Slord2142 0:b3410a1e9843 509 /************************************************************
Slord2142 0:b3410a1e9843 510 * Routine: doCommand
Slord2142 0:b3410a1e9843 511 * Input: none
Slord2142 0:b3410a1e9843 512 * Returns: none
Slord2142 0:b3410a1e9843 513 * Description:
Slord2142 0:b3410a1e9843 514 * This is the start of the command string.
Slord2142 0:b3410a1e9843 515 **************************************************************/
Slord2142 0:b3410a1e9843 516 void doCommand(void)
Slord2142 0:b3410a1e9843 517 {
Slord2142 0:b3410a1e9843 518 int ival;
Slord2142 0:b3410a1e9843 519 unsigned int boardEnables;
Slord2142 0:b3410a1e9843 520
Slord2142 0:b3410a1e9843 521 char commandString[80] = { 0 };
Slord2142 0:b3410a1e9843 522 //Serial dcm2(PC_10, PC_11);
Slord2142 0:b3410a1e9843 523
Slord2142 0:b3410a1e9843 524 bufloc = 0;
Slord2142 0:b3410a1e9843 525 commandError = 0;
Slord2142 0:b3410a1e9843 526
Slord2142 0:b3410a1e9843 527 parseCommand(GET, commandString);
Slord2142 0:b3410a1e9843 528
Slord2142 0:b3410a1e9843 529
Slord2142 0:b3410a1e9843 530 if (!strcmp(commandString, "MENU"))
Slord2142 0:b3410a1e9843 531 {
Slord2142 0:b3410a1e9843 532 menuRedraw(NO_PROMPT);
Slord2142 0:b3410a1e9843 533 //dcm2.printf("Menu");
Slord2142 0:b3410a1e9843 534 }
Slord2142 0:b3410a1e9843 535 else if (!strcmp(commandString, "HELP"))
Slord2142 0:b3410a1e9843 536 {
Slord2142 0:b3410a1e9843 537 menuRedraw(NO_PROMPT);
Slord2142 0:b3410a1e9843 538 }
Slord2142 0:b3410a1e9843 539 else if (!strcmp(commandString, "MAXB"))
Slord2142 0:b3410a1e9843 540 // MAXB is used to get/set the max_boards value.
Slord2142 0:b3410a1e9843 541 // The integer value of max_boards is used to select the appropriate lookup table.
Slord2142 0:b3410a1e9843 542 {
Slord2142 0:b3410a1e9843 543 if (readback)
Slord2142 0:b3410a1e9843 544 {
Slord2142 0:b3410a1e9843 545 sprintf(strbuf, " %d", max_boards);
Slord2142 0:b3410a1e9843 546 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 547 }
Slord2142 0:b3410a1e9843 548 else if (running == 1)
Slord2142 0:b3410a1e9843 549 {
Slord2142 0:b3410a1e9843 550 sprintf(strbuf, " Parameters may not be updated while running!");
Slord2142 0:b3410a1e9843 551 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 552 }
Slord2142 0:b3410a1e9843 553 else
Slord2142 0:b3410a1e9843 554 {
Slord2142 0:b3410a1e9843 555 max_boards = commandData;
Slord2142 0:b3410a1e9843 556 }
Slord2142 0:b3410a1e9843 557 }
Slord2142 1:bc3509459a27 558 else if (!strcmp(commandString, "ZERO"))
Slord2142 1:bc3509459a27 559 // Used to zero out the board amperage measurements
Slord2142 1:bc3509459a27 560 {
Slord2142 1:bc3509459a27 561 if (running == 1)
Slord2142 1:bc3509459a27 562 {
Slord2142 1:bc3509459a27 563 sprintf(strbuf, " Parameters may not be updated while running!");
Slord2142 1:bc3509459a27 564 sendSerial(strbuf);
Slord2142 1:bc3509459a27 565 }
Slord2142 1:bc3509459a27 566 else
Slord2142 1:bc3509459a27 567 {
Slord2142 1:bc3509459a27 568 initADC();
Slord2142 1:bc3509459a27 569 }
Slord2142 1:bc3509459a27 570 }
Slord2142 0:b3410a1e9843 571 else if (!strcmp(commandString, "BRDS"))
Slord2142 0:b3410a1e9843 572 // BRDS is used to get/set the wr_out value.
Slord2142 0:b3410a1e9843 573 // The integer value of boardsActive is used to change wr_out via setBoardEnables(boardsActive).
Slord2142 0:b3410a1e9843 574 // Slots 12 to 0 are activated with the wr_out signals
Slord2142 0:b3410a1e9843 575 // wr_out[13] = slots[12:0]
Slord2142 0:b3410a1e9843 576 {
Slord2142 0:b3410a1e9843 577 if (readback)
Slord2142 0:b3410a1e9843 578 {
Slord2142 0:b3410a1e9843 579 sprintf(strbuf, " %d", boardsActive);
Slord2142 0:b3410a1e9843 580 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 581 }
Slord2142 0:b3410a1e9843 582 else if (running == 1)
Slord2142 0:b3410a1e9843 583 {
Slord2142 0:b3410a1e9843 584 sprintf(strbuf, " Parameters may not be updated while running!");
Slord2142 0:b3410a1e9843 585 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 586 }
Slord2142 0:b3410a1e9843 587 else
Slord2142 0:b3410a1e9843 588 {
Slord2142 0:b3410a1e9843 589 boardsActive = commandData;
Slord2142 0:b3410a1e9843 590 if(checkRange(boardsActive, 0, 8191) == 1){
Slord2142 0:b3410a1e9843 591 wr_out_code = setBoardEnables(boardsActive);
Slord2142 0:b3410a1e9843 592 testing = TRUE;
Slord2142 0:b3410a1e9843 593 }else{
Slord2142 0:b3410a1e9843 594 showRangeError(1, boardsActive, 0.0);
Slord2142 0:b3410a1e9843 595 }
Slord2142 0:b3410a1e9843 596 }
Slord2142 0:b3410a1e9843 597 }
Slord2142 0:b3410a1e9843 598 else if (!strcmp(commandString, "MULT"))
Slord2142 0:b3410a1e9843 599 // MULT is used to get/set the en_out value.
Slord2142 0:b3410a1e9843 600 // The integer value of boardMults is used to change en_out via setBoardWeights(boardMults).
Slord2142 0:b3410a1e9843 601 // en_out are binary weighted signals that activate groups of DC-DC converters on the slot cards.
Slord2142 0:b3410a1e9843 602 // en_out[6] = {en32, en16, en8, en4, en2, en1}
Slord2142 0:b3410a1e9843 603 {
Slord2142 0:b3410a1e9843 604 if (readback)
Slord2142 0:b3410a1e9843 605 {
Slord2142 0:b3410a1e9843 606 sprintf(strbuf, " %d", boardMults);
Slord2142 0:b3410a1e9843 607 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 608 }
Slord2142 0:b3410a1e9843 609 else if (running == 1)
Slord2142 0:b3410a1e9843 610 {
Slord2142 0:b3410a1e9843 611 sprintf(strbuf, " Parameters may not be updated while running!");
Slord2142 0:b3410a1e9843 612 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 613 }
Slord2142 0:b3410a1e9843 614 else
Slord2142 0:b3410a1e9843 615 {
Slord2142 0:b3410a1e9843 616 boardMults = commandData;
Slord2142 0:b3410a1e9843 617 if(checkRange(boardMults, 0, 63) == 1){
Slord2142 0:b3410a1e9843 618 en_out_code = setBoardWeights(boardMults);
Slord2142 0:b3410a1e9843 619 /*unsigned int bmult=boardMults;
Slord2142 0:b3410a1e9843 620 for(int count=0;count<33;count++){
Slord2142 0:b3410a1e9843 621 en_out_code = setBoardWeights(bmult++);
Slord2142 0:b3410a1e9843 622 wait(0.25);
Slord2142 0:b3410a1e9843 623 }
Slord2142 0:b3410a1e9843 624 en_out_code = setBoardWeights(boardMults);
Slord2142 0:b3410a1e9843 625 sprintf(strbuf, " en_out_code=%d\r\n", en_out_code);
Slord2142 0:b3410a1e9843 626 sendSerial(strbuf);*/
Slord2142 0:b3410a1e9843 627 testing = TRUE;
Slord2142 0:b3410a1e9843 628 }else{
Slord2142 0:b3410a1e9843 629 showRangeError(1, boardMults, 0.0);
Slord2142 0:b3410a1e9843 630 }
Slord2142 0:b3410a1e9843 631 }
Slord2142 0:b3410a1e9843 632 }
Slord2142 0:b3410a1e9843 633 else if (!strcmp(commandString, "MY12"))
Slord2142 0:b3410a1e9843 634 // MULT is used to get/set the en_out value.
Slord2142 0:b3410a1e9843 635 // The integer value of boardMults is used to change en_out via setBoardWeights(boardMults).
Slord2142 0:b3410a1e9843 636 // en_out are binary weighted signals that activate groups of DC-DC converters on the slot cards.
Slord2142 0:b3410a1e9843 637 // en_out[6] = {en32, en16, en8, en4, en2, en1}
Slord2142 0:b3410a1e9843 638 {
Slord2142 0:b3410a1e9843 639 //if(DEBUG){
Slord2142 0:b3410a1e9843 640 // sprintf(strbuf, "my12=%d commandData=%d\r\n", my12, commandData);
Slord2142 0:b3410a1e9843 641 // sendSerial(strbuf);
Slord2142 0:b3410a1e9843 642 //}
Slord2142 0:b3410a1e9843 643
Slord2142 0:b3410a1e9843 644 if (readback)
Slord2142 0:b3410a1e9843 645 {
Slord2142 0:b3410a1e9843 646 sprintf(strbuf, " %d", my12);
Slord2142 0:b3410a1e9843 647 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 648 }else{
Slord2142 0:b3410a1e9843 649 my12 = commandData;
Slord2142 0:b3410a1e9843 650 testing = FALSE;
Slord2142 0:b3410a1e9843 651 }
Slord2142 0:b3410a1e9843 652 }
Slord2142 0:b3410a1e9843 653 else if (!strcmp(commandString, "ALLOFF"))
Slord2142 0:b3410a1e9843 654 {
Slord2142 0:b3410a1e9843 655 my12 = 0;
Slord2142 0:b3410a1e9843 656 running = FALSE;
Slord2142 0:b3410a1e9843 657 testing = FALSE;
Slord2142 0:b3410a1e9843 658 if(DEBUG){
Slord2142 0:b3410a1e9843 659 sprintf(strbuf, "wr_out_code=%d\r\n", wr_out_code);
Slord2142 0:b3410a1e9843 660 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 661 }
Slord2142 0:b3410a1e9843 662 }
Slord2142 0:b3410a1e9843 663 else if (!strcmp(commandString, "ALLON"))
Slord2142 0:b3410a1e9843 664 {
Slord2142 0:b3410a1e9843 665 wr_out_code = setBoardEnables((unsigned int)ALLON);
Slord2142 0:b3410a1e9843 666 testing = TRUE;
Slord2142 0:b3410a1e9843 667 }
Slord2142 0:b3410a1e9843 668 else if (!strcmp(commandString, "RUN"))
Slord2142 0:b3410a1e9843 669 {
Slord2142 0:b3410a1e9843 670 // Skip over any white space and the optional '[' character
Slord2142 0:b3410a1e9843 671 while ((isspace(rxbuf[bufloc])) || (rxbuf[bufloc] == '[')) bufloc++;
Slord2142 0:b3410a1e9843 672
Slord2142 0:b3410a1e9843 673 if(rxbuf[bufloc] == NULL){
Slord2142 0:b3410a1e9843 674 boardsActive = ALLON;
Slord2142 0:b3410a1e9843 675 startConverter(boardsActive);
Slord2142 0:b3410a1e9843 676 testing = FALSE;
Slord2142 0:b3410a1e9843 677 }
Slord2142 0:b3410a1e9843 678 else if (rxbuf[bufloc] == '0')
Slord2142 0:b3410a1e9843 679 //if (rxbuf[bufloc] == '0')
Slord2142 0:b3410a1e9843 680 {
Slord2142 0:b3410a1e9843 681 stopConverter();
Slord2142 0:b3410a1e9843 682 //setDacsToZeroVolts();
Slord2142 0:b3410a1e9843 683 testing = FALSE;
Slord2142 0:b3410a1e9843 684 }
Slord2142 0:b3410a1e9843 685 else if ((rxbuf[bufloc] > '0') && (rxbuf[bufloc] < '0' + max_boards))
Slord2142 0:b3410a1e9843 686 {
Slord2142 0:b3410a1e9843 687 ival = atoi(&rxbuf[bufloc]);
Slord2142 0:b3410a1e9843 688 //ival--;
Slord2142 0:b3410a1e9843 689
Slord2142 0:b3410a1e9843 690 if (running == 0)
Slord2142 0:b3410a1e9843 691 {
Slord2142 0:b3410a1e9843 692 boardsActive = ival;
Slord2142 0:b3410a1e9843 693 startConverter(boardsActive);
Slord2142 0:b3410a1e9843 694 testing = FALSE;
Slord2142 0:b3410a1e9843 695 }
Slord2142 0:b3410a1e9843 696 else
Slord2142 0:b3410a1e9843 697 {
Slord2142 0:b3410a1e9843 698 // Compare the board enable flags between registers
Slord2142 0:b3410a1e9843 699 //boardEnables = checkRegisterCompatibility(ival);
Slord2142 0:b3410a1e9843 700
Slord2142 0:b3410a1e9843 701 // If board enable flags match, change the register set
Slord2142 0:b3410a1e9843 702 if (boardEnables == 0)
Slord2142 0:b3410a1e9843 703 {
Slord2142 0:b3410a1e9843 704 boardsActive = ival;
Slord2142 0:b3410a1e9843 705 }
Slord2142 0:b3410a1e9843 706 else
Slord2142 0:b3410a1e9843 707 {
Slord2142 0:b3410a1e9843 708 sprintf(strbuf, " Board enable flags do not match (0x%08x)", boardEnables);
Slord2142 0:b3410a1e9843 709 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 710 }
Slord2142 0:b3410a1e9843 711 }
Slord2142 0:b3410a1e9843 712 }
Slord2142 0:b3410a1e9843 713 else
Slord2142 0:b3410a1e9843 714 {
Slord2142 0:b3410a1e9843 715 sprintf(strbuf, " Invalid number of boards (1 - %d)", MAX_BOARDS);
Slord2142 0:b3410a1e9843 716 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 717 commandError = 1;
Slord2142 0:b3410a1e9843 718 }
Slord2142 0:b3410a1e9843 719 }
Slord2142 0:b3410a1e9843 720 else if (!strcmp(commandString, "STOP"))
Slord2142 0:b3410a1e9843 721 {
Slord2142 0:b3410a1e9843 722 stopConverter();
Slord2142 0:b3410a1e9843 723 testing = FALSE;
Slord2142 0:b3410a1e9843 724 my12 = 0;
Slord2142 0:b3410a1e9843 725 //hv_en = OFF;
Slord2142 0:b3410a1e9843 726 }
Slord2142 0:b3410a1e9843 727 else if(!strcmp(commandString, "CAL"))
Slord2142 0:b3410a1e9843 728 {
Slord2142 0:b3410a1e9843 729 if (running == 1)
Slord2142 0:b3410a1e9843 730 {
Slord2142 0:b3410a1e9843 731 sprintf(strbuf, " Parameters may not be updated while running!");
Slord2142 0:b3410a1e9843 732 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 733 commandError = 1;
Slord2142 0:b3410a1e9843 734 }
Slord2142 0:b3410a1e9843 735
Slord2142 0:b3410a1e9843 736 if (!commandError){
Slord2142 0:b3410a1e9843 737 raw = TRUE;
Slord2142 0:b3410a1e9843 738 menuRedraw(NO_PROMPT);
Slord2142 0:b3410a1e9843 739 }
Slord2142 0:b3410a1e9843 740 }
Slord2142 0:b3410a1e9843 741 else if(!strcmp(commandString, "UNCAL"))
Slord2142 0:b3410a1e9843 742 {
Slord2142 0:b3410a1e9843 743 if (running == 1)
Slord2142 0:b3410a1e9843 744 {
Slord2142 0:b3410a1e9843 745 sprintf(strbuf, " Parameters may not be updated while running!");
Slord2142 0:b3410a1e9843 746 sendSerial(strbuf);
Slord2142 0:b3410a1e9843 747 commandError = 1;
Slord2142 0:b3410a1e9843 748 }
Slord2142 0:b3410a1e9843 749
Slord2142 0:b3410a1e9843 750 if (!commandError){
Slord2142 0:b3410a1e9843 751 raw = FALSE;
Slord2142 0:b3410a1e9843 752 menuRedraw(NO_PROMPT);
Slord2142 0:b3410a1e9843 753 }
Slord2142 0:b3410a1e9843 754 }
Slord2142 0:b3410a1e9843 755 else
Slord2142 0:b3410a1e9843 756 {
Slord2142 0:b3410a1e9843 757 if (strcmp(commandString, ""))
Slord2142 0:b3410a1e9843 758 {
Slord2142 0:b3410a1e9843 759 commandError = 1;
Slord2142 0:b3410a1e9843 760 }
Slord2142 0:b3410a1e9843 761 }
Slord2142 0:b3410a1e9843 762
Slord2142 0:b3410a1e9843 763 if (commandError)
Slord2142 0:b3410a1e9843 764 {
Slord2142 0:b3410a1e9843 765 sendSerial(" !");
Slord2142 0:b3410a1e9843 766 }
Slord2142 0:b3410a1e9843 767
Slord2142 0:b3410a1e9843 768 //sendCRLF();
Slord2142 0:b3410a1e9843 769 menuPrompt(MENU_DCM1);
Slord2142 0:b3410a1e9843 770 }
Slord2142 0:b3410a1e9843 771
Slord2142 0:b3410a1e9843 772 /************************************************************
Slord2142 0:b3410a1e9843 773 * Routine: processCommand
Slord2142 0:b3410a1e9843 774 * Input: none
Slord2142 0:b3410a1e9843 775 * Returns: none
Slord2142 0:b3410a1e9843 776 * Description:
Slord2142 0:b3410a1e9843 777 * This is the main serial communications routine. Everything
Slord2142 0:b3410a1e9843 778 * starts here as soon as a command is avaiable for processing.
Slord2142 0:b3410a1e9843 779 **************************************************************/
Slord2142 0:b3410a1e9843 780 void processCommand(void)
Slord2142 0:b3410a1e9843 781 {
Slord2142 0:b3410a1e9843 782 if (!serialStatus.command && !serialStatus.repeat)
Slord2142 0:b3410a1e9843 783 {
Slord2142 0:b3410a1e9843 784 return;
Slord2142 0:b3410a1e9843 785 }
Slord2142 0:b3410a1e9843 786
Slord2142 0:b3410a1e9843 787 doCommand(); // if not computer (i.e. terminal) you can do the command as well
Slord2142 0:b3410a1e9843 788
Slord2142 0:b3410a1e9843 789 bufloc = 0;
Slord2142 0:b3410a1e9843 790 rxbuf[bufloc] = 0;
Slord2142 0:b3410a1e9843 791
Slord2142 0:b3410a1e9843 792 serialStatus.computer = FALSE;
Slord2142 0:b3410a1e9843 793 serialStatus.command = FALSE;
Slord2142 0:b3410a1e9843 794
Slord2142 0:b3410a1e9843 795
Slord2142 0:b3410a1e9843 796 //sendSerial("didCommand\r\n");
Slord2142 0:b3410a1e9843 797 }
Slord2142 0:b3410a1e9843 798
Slord2142 0:b3410a1e9843 799 /************************************************************
Slord2142 0:b3410a1e9843 800 * Routine: waitCommand
Slord2142 0:b3410a1e9843 801 * Input: none
Slord2142 0:b3410a1e9843 802 * Returns: none
Slord2142 0:b3410a1e9843 803 * Description:
Slord2142 0:b3410a1e9843 804 **************************************************************/
Slord2142 0:b3410a1e9843 805 bool waitCommand(void)
Slord2142 0:b3410a1e9843 806 {
Slord2142 0:b3410a1e9843 807 if (!serialStatus.command && !serialStatus.repeat)
Slord2142 0:b3410a1e9843 808 {
Slord2142 0:b3410a1e9843 809 return TRUE;
Slord2142 0:b3410a1e9843 810 }
Slord2142 0:b3410a1e9843 811
Slord2142 0:b3410a1e9843 812 serialStatus.computer = FALSE;
Slord2142 0:b3410a1e9843 813 serialStatus.command = FALSE;
Slord2142 0:b3410a1e9843 814
Slord2142 0:b3410a1e9843 815 return FALSE;
Slord2142 0:b3410a1e9843 816 }
Slord2142 0:b3410a1e9843 817
Slord2142 0:b3410a1e9843 818 // Verify that the same boards are enabled in both the current register and
Slord2142 0:b3410a1e9843 819 // the specified register
Slord2142 0:b3410a1e9843 820
Slord2142 0:b3410a1e9843 821