Robert Ceschini / Mbed 2 deprecated PSU-POWERLOGGER

Dependencies:   mbed

Fork of PSU-POWERLOGGER by Eli Hughes

Committer:
rjc19
Date:
Fri Sep 28 15:41:36 2012 +0000
Revision:
3:d55665050fcb
Parent:
2:f6e5fdf2f872
Working serial logger needs interface improvement

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emh203 0:d0c18e423b13 1 #include "System.h"
emh203 0:d0c18e423b13 2
emh203 0:d0c18e423b13 3
emh203 0:d0c18e423b13 4 //*****************************************************************
emh203 0:d0c18e423b13 5 //Terminal Related stuff
emh203 0:d0c18e423b13 6 //*****************************************************************
emh203 0:d0c18e423b13 7
emh203 0:d0c18e423b13 8 #define MAX_TERMINAL_LINE_CHARS 128
emh203 0:d0c18e423b13 9 #define MAX_TERMINAL_CMD_CHARS 32
emh203 0:d0c18e423b13 10 CHAR TerminalLineBuf[MAX_TERMINAL_LINE_CHARS];
emh203 0:d0c18e423b13 11 BYTE TerminalPos;
emh203 0:d0c18e423b13 12 CHAR TerminalCmdBuf[MAX_TERMINAL_CMD_CHARS+1];
emh203 0:d0c18e423b13 13 CHAR TerminalArgs[MAX_TERMINAL_LINE_CHARS-MAX_TERMINAL_CMD_CHARS];
emh203 0:d0c18e423b13 14 BYTE NextCharIn;
emh203 0:d0c18e423b13 15 BOOL CmdFound;
emh203 0:d0c18e423b13 16
emh203 0:d0c18e423b13 17
emh203 0:d0c18e423b13 18
rjc19 1:871a329fd172 19 #define NUM_TERMINAL_CMDS 9
emh203 0:d0c18e423b13 20
rjc19 1:871a329fd172 21 char *TerminalCommands[NUM_TERMINAL_CMDS] = {"help","reboot","v","i","Time","Date","RTC_Init","Batt",">>>"};
emh203 0:d0c18e423b13 22
emh203 0:d0c18e423b13 23 typedef void (*TerminalCallback)(char *);
emh203 0:d0c18e423b13 24
emh203 0:d0c18e423b13 25
emh203 0:d0c18e423b13 26 void TerminalCmd_Help(char *arg);
emh203 0:d0c18e423b13 27 void TerminalCmd_Reboot(char *arg);
emh203 0:d0c18e423b13 28 void TerminalCmd_v(char *arg);
emh203 0:d0c18e423b13 29 void TerminalCmd_i(char *arg);
emh203 0:d0c18e423b13 30 void TerminalCmd_Time(char *arg);
emh203 0:d0c18e423b13 31 void TerminalCmd_Date(char *arg);
emh203 0:d0c18e423b13 32 void TerminalCmd_RTC_Init(char *arg);
emh203 0:d0c18e423b13 33 void TerminalCmd_Batt(char *arg);
rjc19 1:871a329fd172 34 void TerminalCmd_NormalMode(char *arg);
rjc19 1:871a329fd172 35
emh203 0:d0c18e423b13 36
emh203 0:d0c18e423b13 37 TerminalCallback TerminalCallbacks[NUM_TERMINAL_CMDS] ={TerminalCmd_Help};
emh203 0:d0c18e423b13 38
emh203 0:d0c18e423b13 39
emh203 0:d0c18e423b13 40 void InitTerminal()
emh203 0:d0c18e423b13 41 {
emh203 0:d0c18e423b13 42 //Initialize the terminal command callbacks
emh203 0:d0c18e423b13 43 TerminalCallbacks[0] = TerminalCmd_Help;
emh203 0:d0c18e423b13 44 TerminalCallbacks[1] = TerminalCmd_Reboot;
emh203 0:d0c18e423b13 45 TerminalCallbacks[2] = TerminalCmd_v;
emh203 0:d0c18e423b13 46 TerminalCallbacks[3] = TerminalCmd_i;
emh203 0:d0c18e423b13 47 TerminalCallbacks[4] = TerminalCmd_Time;
emh203 0:d0c18e423b13 48 TerminalCallbacks[5] = TerminalCmd_Date;
emh203 0:d0c18e423b13 49 TerminalCallbacks[6] = TerminalCmd_RTC_Init;
emh203 0:d0c18e423b13 50 TerminalCallbacks[7] = TerminalCmd_Batt;
rjc19 1:871a329fd172 51 TerminalCallbacks[8] = TerminalCmd_NormalMode;
emh203 0:d0c18e423b13 52
emh203 0:d0c18e423b13 53 }
emh203 0:d0c18e423b13 54
emh203 0:d0c18e423b13 55
emh203 0:d0c18e423b13 56 extern "C" void mbed_reset();
emh203 0:d0c18e423b13 57
emh203 0:d0c18e423b13 58
emh203 0:d0c18e423b13 59 void TerminalCmd_Batt(char *)
emh203 0:d0c18e423b13 60 {
emh203 0:d0c18e423b13 61 PrintfEnqueue(&PCBackDoorTx,"\r\nBattery: %.3f\r\n",BatteryVoltage);
emh203 0:d0c18e423b13 62 }
emh203 0:d0c18e423b13 63 void TerminalCmd_RTC_Init(char *arg)
emh203 0:d0c18e423b13 64 {
emh203 0:d0c18e423b13 65 set_time(1256729737);
emh203 0:d0c18e423b13 66 PrintfEnqueue(&PCBackDoorTx,"\r\nTime Reset\r\n");
emh203 0:d0c18e423b13 67 }
emh203 0:d0c18e423b13 68
emh203 0:d0c18e423b13 69
emh203 0:d0c18e423b13 70 void TerminalCmd_Time(char *arg)
emh203 0:d0c18e423b13 71 {
emh203 0:d0c18e423b13 72 int Hour,Minute,Second=0;
emh203 0:d0c18e423b13 73 int Items;
emh203 0:d0c18e423b13 74 BOOL Error = FALSE;
emh203 0:d0c18e423b13 75 time_t TimeStampTemp;
emh203 0:d0c18e423b13 76
emh203 0:d0c18e423b13 77
emh203 0:d0c18e423b13 78 Items = sscanf(arg, "%d : %d : %d", &Hour, &Minute, &Second);
emh203 0:d0c18e423b13 79 if(Items == 3)
emh203 0:d0c18e423b13 80 {
emh203 0:d0c18e423b13 81 PrintfEnqueue(&PCBackDoorTx,"\r\n");
emh203 0:d0c18e423b13 82 if(Hour>23)
emh203 0:d0c18e423b13 83 {
emh203 0:d0c18e423b13 84 PrintfEnqueue(&PCBackDoorTx,"Hour entry must be between 0 and 24\r\n");
emh203 0:d0c18e423b13 85 Error = TRUE;
emh203 0:d0c18e423b13 86 }
emh203 0:d0c18e423b13 87 if(Minute>60)
emh203 0:d0c18e423b13 88 {
emh203 0:d0c18e423b13 89 PrintfEnqueue(&PCBackDoorTx,"Minute entry must be between 0 and 60\r\n");
emh203 0:d0c18e423b13 90 Error = TRUE;
emh203 0:d0c18e423b13 91 }
emh203 0:d0c18e423b13 92 if(Second>60)
emh203 0:d0c18e423b13 93 {
emh203 0:d0c18e423b13 94 PrintfEnqueue(&PCBackDoorTx,"Second entry must be between 0 and 60\r\n");
emh203 0:d0c18e423b13 95 Error = TRUE;
emh203 0:d0c18e423b13 96 }
emh203 0:d0c18e423b13 97
emh203 0:d0c18e423b13 98 if(Error == TRUE)
emh203 0:d0c18e423b13 99 {
emh203 0:d0c18e423b13 100 PrintfEnqueue(&PCBackDoorTx,"Error in time format. Time syntax should be H:M:S\r\n. Time not changed.\r\n");
emh203 0:d0c18e423b13 101 }
emh203 0:d0c18e423b13 102 else
emh203 0:d0c18e423b13 103 {
emh203 0:d0c18e423b13 104 TimeStampTemp = time(NULL);
emh203 0:d0c18e423b13 105 //convert to tm struct
emh203 0:d0c18e423b13 106 CurrentTime = localtime(&TimeStampTemp);
emh203 0:d0c18e423b13 107 //dump in our new valus
emh203 0:d0c18e423b13 108 CurrentTime->tm_sec = Second;
emh203 0:d0c18e423b13 109 CurrentTime->tm_min = Minute;
emh203 0:d0c18e423b13 110 CurrentTime->tm_hour = Hour;
emh203 0:d0c18e423b13 111 //set the new time
emh203 0:d0c18e423b13 112 set_time(mktime(CurrentTime));
emh203 0:d0c18e423b13 113 PrintfEnqueue(&PCBackDoorTx,"Time set to %d:%d:%d\r\n",Hour,Minute,Second);
emh203 0:d0c18e423b13 114 }
emh203 0:d0c18e423b13 115
emh203 0:d0c18e423b13 116 }
emh203 0:d0c18e423b13 117 else
emh203 0:d0c18e423b13 118 {
emh203 0:d0c18e423b13 119 PrintfEnqueue(&PCBackDoorTx,"Time syntax should be H:M:S\r\n");
emh203 0:d0c18e423b13 120 }
emh203 0:d0c18e423b13 121 }
emh203 0:d0c18e423b13 122
emh203 0:d0c18e423b13 123 void TerminalCmd_Date(char *arg)
emh203 0:d0c18e423b13 124 {
emh203 0:d0c18e423b13 125 int Day,Month,Year=0;
emh203 0:d0c18e423b13 126 int Items;
emh203 0:d0c18e423b13 127 BOOL Error = FALSE;
emh203 0:d0c18e423b13 128 time_t TimeStampTemp;
emh203 0:d0c18e423b13 129
emh203 0:d0c18e423b13 130 Items = sscanf(arg, "%d / %d / %d", &Month, &Day, &Year);
emh203 0:d0c18e423b13 131 if(Items == 3)
emh203 0:d0c18e423b13 132 {
emh203 0:d0c18e423b13 133 PrintfEnqueue(&PCBackDoorTx,"\r\n");
emh203 0:d0c18e423b13 134 if(Month>12 || Month < 1)
emh203 0:d0c18e423b13 135 {
emh203 0:d0c18e423b13 136 PrintfEnqueue(&PCBackDoorTx,"\r\nMonth entry must be between 1 and 12\r\n");
emh203 0:d0c18e423b13 137 Error = TRUE;
emh203 0:d0c18e423b13 138 }
emh203 0:d0c18e423b13 139 if(Day>31 || Day<1)
emh203 0:d0c18e423b13 140 {
emh203 0:d0c18e423b13 141 PrintfEnqueue(&PCBackDoorTx,"\r\nDay entry must be between 1 and 31\r\n");
emh203 0:d0c18e423b13 142 Error = TRUE;
emh203 0:d0c18e423b13 143 }
emh203 0:d0c18e423b13 144 if(Year<1900)
emh203 0:d0c18e423b13 145 {
emh203 0:d0c18e423b13 146 PrintfEnqueue(&PCBackDoorTx,"\r\nYear entry must be greater than 1900\r\n");
emh203 0:d0c18e423b13 147 Error = TRUE;
emh203 0:d0c18e423b13 148 }
emh203 0:d0c18e423b13 149
emh203 0:d0c18e423b13 150 if(Error == TRUE)
emh203 0:d0c18e423b13 151 {
emh203 0:d0c18e423b13 152 PrintfEnqueue(&PCBackDoorTx,"\r\nError in Date format. Date not changed.\r\n");
emh203 0:d0c18e423b13 153 }
emh203 0:d0c18e423b13 154 else
emh203 0:d0c18e423b13 155 {
emh203 0:d0c18e423b13 156 //Get the current time in seconds since unix epoch
emh203 0:d0c18e423b13 157 TimeStampTemp = time(NULL);
emh203 0:d0c18e423b13 158 //convert to tm struct fom
emh203 0:d0c18e423b13 159 CurrentTime = localtime(&TimeStampTemp);
emh203 0:d0c18e423b13 160 //dump in our new valus
emh203 0:d0c18e423b13 161 CurrentTime->tm_mon = Month-1;
emh203 0:d0c18e423b13 162 CurrentTime->tm_mday = Day;
emh203 0:d0c18e423b13 163 CurrentTime->tm_year = Year - 1900;
emh203 0:d0c18e423b13 164 //set the new time
emh203 0:d0c18e423b13 165 set_time(mktime(CurrentTime));
emh203 0:d0c18e423b13 166 PrintfEnqueue(&PCBackDoorTx,"\r\nDate set to %d/%d/%d\r\n",Month,Day,Year);
emh203 0:d0c18e423b13 167 }
emh203 0:d0c18e423b13 168
emh203 0:d0c18e423b13 169 }
emh203 0:d0c18e423b13 170 else
emh203 0:d0c18e423b13 171 {
emh203 0:d0c18e423b13 172 PrintfEnqueue(&PCBackDoorTx,"Date syntax should be MM/DD/YYYY\r\n");
emh203 0:d0c18e423b13 173 }
emh203 0:d0c18e423b13 174 }
emh203 0:d0c18e423b13 175
emh203 0:d0c18e423b13 176 void TerminalCmd_v(char *arg)
emh203 0:d0c18e423b13 177 {
emh203 0:d0c18e423b13 178 // PrintfEnqueue(&PCBackDoorTx,"\r\nVbus: %.1f\r\n",Vout);
emh203 0:d0c18e423b13 179 }
emh203 0:d0c18e423b13 180
emh203 0:d0c18e423b13 181 void TerminalCmd_i(char *arg)
emh203 0:d0c18e423b13 182 {
emh203 0:d0c18e423b13 183 // PrintfEnqueue(&PCBackDoorTx,"\r\nIbus: %.1f\r\n",Iout);
emh203 0:d0c18e423b13 184 }
emh203 0:d0c18e423b13 185
emh203 0:d0c18e423b13 186 void TerminalCmd_Help(char *arg)
emh203 0:d0c18e423b13 187 {
emh203 0:d0c18e423b13 188 BYTE i;
emh203 0:d0c18e423b13 189
emh203 0:d0c18e423b13 190 PrintfEnqueue(&PCBackDoorTx,"\r\n\r\bCommandList:\r\n");
emh203 0:d0c18e423b13 191 PrintfEnqueue(&PCBackDoorTx,"----------------------\r\n");
emh203 0:d0c18e423b13 192
emh203 0:d0c18e423b13 193 for(i=0;i<NUM_TERMINAL_CMDS;i++)
emh203 0:d0c18e423b13 194 {
emh203 0:d0c18e423b13 195 PrintfEnqueue(&PCBackDoorTx,"%s\r\n",TerminalCommands[i]);
emh203 0:d0c18e423b13 196 }
emh203 0:d0c18e423b13 197
emh203 0:d0c18e423b13 198 }
rjc19 1:871a329fd172 199 void TerminalCmd_NormalMode(char *arg){
rjc19 1:871a329fd172 200 PrintfLogEnqueue(&PCBackDoorTx,"Exiting Normal mode\r\n >");
rjc19 1:871a329fd172 201 WeAreInNormalMode=FALSE;
rjc19 1:871a329fd172 202 }
emh203 0:d0c18e423b13 203 void TerminalCmd_Reboot(char *arg)
emh203 0:d0c18e423b13 204 {
emh203 0:d0c18e423b13 205 mbed_reset();
emh203 0:d0c18e423b13 206 }
emh203 0:d0c18e423b13 207
emh203 0:d0c18e423b13 208 void TerminalCmd_Strip(char *arg)
emh203 0:d0c18e423b13 209 {
emh203 0:d0c18e423b13 210 PrintfEnqueue(&PCBackDoorTx,"\r\n%s\r\n", arg);
emh203 0:d0c18e423b13 211 }
rjc19 1:871a329fd172 212 BYTE AngleCount=0;
emh203 0:d0c18e423b13 213
emh203 0:d0c18e423b13 214 void ProcessTerminal()
emh203 0:d0c18e423b13 215 {
emh203 0:d0c18e423b13 216
emh203 0:d0c18e423b13 217 BYTE i,j;
emh203 0:d0c18e423b13 218 if(BytesInQueue(&PCBackDoorRx)>0)
emh203 0:d0c18e423b13 219 {
emh203 0:d0c18e423b13 220 ByteDequeue(&PCBackDoorRx,&NextCharIn);
rjc19 1:871a329fd172 221 if(WeAreInNormalMode){
rjc19 1:871a329fd172 222 switch(NextCharIn)
rjc19 1:871a329fd172 223 {
rjc19 1:871a329fd172 224 case '\r':
rjc19 1:871a329fd172 225 TerminalLineBuf[TerminalPos++] = 0x0;
rjc19 1:871a329fd172 226 ByteEnqueue(&PCBackDoorTx,NextCharIn);
rjc19 1:871a329fd172 227
rjc19 1:871a329fd172 228 if(TerminalPos > 1)
rjc19 1:871a329fd172 229 {
rjc19 1:871a329fd172 230 //find the command
rjc19 1:871a329fd172 231 i=0;
rjc19 1:871a329fd172 232 while(TerminalLineBuf[i]>0x20 && TerminalLineBuf[i]<0x7f)
rjc19 1:871a329fd172 233 {
rjc19 1:871a329fd172 234 TerminalCmdBuf[i] = TerminalLineBuf[i];
rjc19 1:871a329fd172 235 i++;
emh203 0:d0c18e423b13 236
rjc19 1:871a329fd172 237 if(i==MAX_TERMINAL_CMD_CHARS)
rjc19 1:871a329fd172 238 {
rjc19 1:871a329fd172 239 break;
rjc19 1:871a329fd172 240 }
rjc19 1:871a329fd172 241 }
rjc19 1:871a329fd172 242
rjc19 1:871a329fd172 243 TerminalCmdBuf[i] = 0;
rjc19 1:871a329fd172 244 TerminalCmdBuf[i+1] = 0;
rjc19 1:871a329fd172 245
rjc19 1:871a329fd172 246 strcpy(TerminalArgs,&TerminalLineBuf[i]);
emh203 0:d0c18e423b13 247
rjc19 1:871a329fd172 248 CmdFound = FALSE;
rjc19 1:871a329fd172 249 for(j=0;j<NUM_TERMINAL_CMDS;j++)
rjc19 1:871a329fd172 250 {
rjc19 1:871a329fd172 251 if(strcmp(TerminalCmdBuf,TerminalCommands[j]) == 0)
emh203 0:d0c18e423b13 252 {
rjc19 1:871a329fd172 253 if(TerminalCallbacks[j] != NULL)
rjc19 1:871a329fd172 254 TerminalCallbacks[j](TerminalArgs);
rjc19 1:871a329fd172 255
rjc19 1:871a329fd172 256 CmdFound = TRUE;
rjc19 1:871a329fd172 257 break;
rjc19 1:871a329fd172 258 }
rjc19 1:871a329fd172 259 }
rjc19 1:871a329fd172 260 if(CmdFound == FALSE)
emh203 0:d0c18e423b13 261 {
rjc19 1:871a329fd172 262 PrintfEnqueue(&PCBackDoorTx,"%s command not recognized.\r\n", TerminalCmdBuf);
rjc19 1:871a329fd172 263 }
rjc19 1:871a329fd172 264 }
rjc19 1:871a329fd172 265 ByteEnqueue(&PCBackDoorTx,'\n');
rjc19 1:871a329fd172 266 ByteEnqueue(&PCBackDoorTx,'>');
rjc19 1:871a329fd172 267 TerminalPos = 0;
rjc19 1:871a329fd172 268
rjc19 1:871a329fd172 269 break;
rjc19 1:871a329fd172 270 case '\b':
rjc19 1:871a329fd172 271 if(TerminalPos > 0)
rjc19 1:871a329fd172 272 {
rjc19 1:871a329fd172 273 TerminalPos--;
rjc19 1:871a329fd172 274 ByteEnqueue(&PCBackDoorTx,NextCharIn);
rjc19 1:871a329fd172 275 }
rjc19 1:871a329fd172 276 break;
rjc19 1:871a329fd172 277
rjc19 1:871a329fd172 278 default:
emh203 0:d0c18e423b13 279
rjc19 1:871a329fd172 280 if(TerminalPos == 0 && NextCharIn == 0x020)
rjc19 1:871a329fd172 281 {
rjc19 1:871a329fd172 282 //Do nothing if space bar is pressed at begining of line
rjc19 1:871a329fd172 283 }
rjc19 1:871a329fd172 284 else if(NextCharIn >= 0x20 && NextCharIn<0x7F)
rjc19 1:871a329fd172 285 {
rjc19 1:871a329fd172 286
rjc19 1:871a329fd172 287 if(TerminalPos < MAX_TERMINAL_LINE_CHARS-1)
rjc19 1:871a329fd172 288 {
rjc19 1:871a329fd172 289 TerminalLineBuf[TerminalPos++] = NextCharIn;
rjc19 1:871a329fd172 290 ByteEnqueue(&PCBackDoorTx,NextCharIn);
rjc19 1:871a329fd172 291 }
rjc19 1:871a329fd172 292 }
rjc19 1:871a329fd172 293
rjc19 1:871a329fd172 294 break;
emh203 0:d0c18e423b13 295
rjc19 1:871a329fd172 296 }//end of character switch
rjc19 1:871a329fd172 297 }else{ //not normal mode
rjc19 1:871a329fd172 298 switch(NextCharIn){
rjc19 1:871a329fd172 299 case '>':
rjc19 1:871a329fd172 300 AngleCount++;
rjc19 1:871a329fd172 301 if(AngleCount > 2){
rjc19 1:871a329fd172 302 WeAreInNormalMode=TRUE;
rjc19 1:871a329fd172 303 PrintfLogEnqueue(&PCBackDoorTx,"Entering Normal mode\r\n >");
rjc19 1:871a329fd172 304 AngleCount=0;
rjc19 1:871a329fd172 305 }
rjc19 1:871a329fd172 306 break;
rjc19 1:871a329fd172 307 }
rjc19 1:871a329fd172 308 }
rjc19 1:871a329fd172 309 }
rjc19 1:871a329fd172 310 }
rjc19 1:871a329fd172 311 void LogSerial(){
rjc19 1:871a329fd172 312 UINT t;
rjc19 1:871a329fd172 313 UINT BytesWritten;
rjc19 1:871a329fd172 314 if(BytesInQueue(&PCBackDoorRx)>0)
rjc19 1:871a329fd172 315 {
rjc19 1:871a329fd172 316 ByteDequeue(&PCBackDoorRx,&NextCharIn);
rjc19 1:871a329fd172 317 switch(NextCharIn){
rjc19 1:871a329fd172 318 case '>':
rjc19 1:871a329fd172 319 AngleCount++;
rjc19 1:871a329fd172 320 if(AngleCount > 2){
rjc19 1:871a329fd172 321 WeAreInNormalMode=TRUE;
rjc19 1:871a329fd172 322 PrintfLogEnqueue(&PCBackDoorTx,"Entering Normal mode\r\n >");
emh203 0:d0c18e423b13 323 }
rjc19 1:871a329fd172 324 break;
rjc19 1:871a329fd172 325 case '\n':
rjc19 1:871a329fd172 326 break; //just eat
rjc19 1:871a329fd172 327 case '\r':
rjc19 1:871a329fd172 328 SerialLineBuffer[SerialLineBufferPtr++]='\r';
rjc19 1:871a329fd172 329 SerialLineBuffer[SerialLineBufferPtr++]='\n';
rjc19 1:871a329fd172 330 if(SystemState == SYSTEM_STATE_SERIAL_LOGGING){
rjc19 1:871a329fd172 331 if(f_write(&CurrentLogFileHandle,SerialLineBuffer,SerialLineBufferPtr,&BytesWritten)){ //if we didn't work kick out
rjc19 1:871a329fd172 332 PrintfLogEnqueue(&PCBackDoorTx,"QQQ\r\n"); //Shutdown
rjc19 1:871a329fd172 333 PrintfEnqueue(&PCBackDoorTx,"Failed to write\r\n");
rjc19 1:871a329fd172 334 EnterSystemState(SYSTEM_STATE_IDLE);
rjc19 1:871a329fd172 335 }else{
rjc19 1:871a329fd172 336 if(BytesWritten != 0){
rjc19 1:871a329fd172 337 LinesWritten++;
rjc19 1:871a329fd172 338 if(LinesWritten > NUMBEROFLINESBEFORESYNC){
rjc19 1:871a329fd172 339 f_sync(&CurrentLogFileHandle);
rjc19 1:871a329fd172 340 PrintfEnqueue(&PCBackDoorTx,"Synced");
rjc19 1:871a329fd172 341 LinesWritten=0;
rjc19 1:871a329fd172 342 }
rjc19 1:871a329fd172 343 }
emh203 0:d0c18e423b13 344 }
emh203 0:d0c18e423b13 345 }
rjc19 1:871a329fd172 346 SerialLineBufferPtr=0; //Always do this so we don't overflow
rjc19 3:d55665050fcb 347 SerialCount++;
rjc19 3:d55665050fcb 348 if(SerialCount > 5000)SerialCount=0;
rjc19 1:871a329fd172 349 break;
rjc19 1:871a329fd172 350 default:
rjc19 1:871a329fd172 351 AngleCount=0;
rjc19 1:871a329fd172 352 SerialLineBuffer[SerialLineBufferPtr++]=NextCharIn;
rjc19 1:871a329fd172 353 if(SerialLineBufferPtr > 255){
rjc19 1:871a329fd172 354 if(SystemState == SYSTEM_STATE_SERIAL_LOGGING){
rjc19 1:871a329fd172 355 if(f_write(&CurrentLogFileHandle,SerialLineBuffer,SerialLineBufferPtr,&BytesWritten)){ //if we didn't work kick out
rjc19 1:871a329fd172 356 PrintfLogEnqueue(&PCBackDoorTx,"QQQ\r\n"); //Shutdown
rjc19 1:871a329fd172 357 PrintfEnqueue(&PCBackDoorTx,"Failed to write default\r\n");
rjc19 1:871a329fd172 358 EnterSystemState(SYSTEM_STATE_IDLE);
rjc19 1:871a329fd172 359 }
rjc19 1:871a329fd172 360 }
rjc19 1:871a329fd172 361 SerialLineBufferPtr=0;
rjc19 1:871a329fd172 362 }
rjc19 1:871a329fd172 363 break;
rjc19 1:871a329fd172 364 }// end of non-normal switch
rjc19 2:f6e5fdf2f872 365 }//for commit
emh203 0:d0c18e423b13 366 }
emh203 0:d0c18e423b13 367