Robert Ceschini / Mbed 2 deprecated PSU-POWERLOGGER

Dependencies:   mbed

Fork of PSU-POWERLOGGER by Eli Hughes

Revision:
1:871a329fd172
Parent:
0:d0c18e423b13
Child:
2:f6e5fdf2f872
diff -r d0c18e423b13 -r 871a329fd172 CODE/Terminal.cpp
--- a/CODE/Terminal.cpp	Tue Sep 18 18:35:23 2012 +0000
+++ b/CODE/Terminal.cpp	Fri Sep 21 18:06:47 2012 +0000
@@ -16,9 +16,9 @@
 
 
  
-#define NUM_TERMINAL_CMDS    8
+#define NUM_TERMINAL_CMDS    9
 
-char *TerminalCommands[NUM_TERMINAL_CMDS] = {"help","reboot","v","i","Time","Date","RTC_Init","Batt"};
+char *TerminalCommands[NUM_TERMINAL_CMDS] = {"help","reboot","v","i","Time","Date","RTC_Init","Batt",">>>"};
 
 typedef void (*TerminalCallback)(char *);
 
@@ -31,6 +31,8 @@
 void TerminalCmd_Date(char *arg);
 void TerminalCmd_RTC_Init(char *arg);
 void TerminalCmd_Batt(char *arg);
+void TerminalCmd_NormalMode(char *arg);
+
 
 TerminalCallback TerminalCallbacks[NUM_TERMINAL_CMDS] ={TerminalCmd_Help};
 
@@ -46,6 +48,7 @@
     TerminalCallbacks[5] = TerminalCmd_Date;
     TerminalCallbacks[6] = TerminalCmd_RTC_Init;
     TerminalCallbacks[7] = TerminalCmd_Batt;
+    TerminalCallbacks[8] = TerminalCmd_NormalMode;
 
 }
 
@@ -193,7 +196,10 @@
     }
 
 }
-
+void TerminalCmd_NormalMode(char *arg){
+    PrintfLogEnqueue(&PCBackDoorTx,"Exiting Normal mode\r\n >");
+    WeAreInNormalMode=FALSE;
+}
 void TerminalCmd_Reboot(char *arg)
 {
        mbed_reset();
@@ -203,94 +209,157 @@
 {
         PrintfEnqueue(&PCBackDoorTx,"\r\n%s\r\n", arg);
 }
+BYTE AngleCount=0;
 
 void ProcessTerminal()
 {
 
       BYTE i,j;
-
     if(BytesInQueue(&PCBackDoorRx)>0)
     {
         ByteDequeue(&PCBackDoorRx,&NextCharIn);
+        if(WeAreInNormalMode){
+            switch(NextCharIn)
+            {
+                case '\r':
+                 TerminalLineBuf[TerminalPos++] = 0x0;
+                 ByteEnqueue(&PCBackDoorTx,NextCharIn);
+                
+                 if(TerminalPos > 1)
+                 {
+                     //find the command
+                     i=0;
+                     while(TerminalLineBuf[i]>0x20 &&  TerminalLineBuf[i]<0x7f)
+                     {
+                          TerminalCmdBuf[i] = TerminalLineBuf[i];
+                          i++;
         
-        switch(NextCharIn)
-        {
-            case '\r':
-             
-             TerminalLineBuf[TerminalPos++] = 0x0;
-             ByteEnqueue(&PCBackDoorTx,NextCharIn);
-            
-             if(TerminalPos > 1)
-             {
-                 //find the command
-                 i=0;
-                 while(TerminalLineBuf[i]>0x20 &&  TerminalLineBuf[i]<0x7f)
-                 {
-                      TerminalCmdBuf[i] = TerminalLineBuf[i];
-                      i++;
+                        if(i==MAX_TERMINAL_CMD_CHARS)
+                            {
+                             break;
+                            }
+                     }
+                        
+                    TerminalCmdBuf[i] = 0;
+                    TerminalCmdBuf[i+1] = 0;
+                
+                    strcpy(TerminalArgs,&TerminalLineBuf[i]);
     
-                    if(i==MAX_TERMINAL_CMD_CHARS)
+                    CmdFound = FALSE;
+                    for(j=0;j<NUM_TERMINAL_CMDS;j++)
+                    {           
+                        if(strcmp(TerminalCmdBuf,TerminalCommands[j]) == 0)
                         {
-                         break;
-                        }
-                 }
-                    
-                TerminalCmdBuf[i] = 0;
-                TerminalCmdBuf[i+1] = 0;
-            
-                strcpy(TerminalArgs,&TerminalLineBuf[i]);
-
-                CmdFound = FALSE;
-                for(j=0;j<NUM_TERMINAL_CMDS;j++)
-                {           
-                    if(strcmp(TerminalCmdBuf,TerminalCommands[j]) == 0)
+                            if(TerminalCallbacks[j] != NULL)
+                                TerminalCallbacks[j](TerminalArgs);
+                        
+                            CmdFound = TRUE;
+                            break;
+                        }             
+                    }        
+                    if(CmdFound == FALSE)
                     {
-                        if(TerminalCallbacks[j] != NULL)
-                            TerminalCallbacks[j](TerminalArgs);
+                       PrintfEnqueue(&PCBackDoorTx,"%s command not recognized.\r\n", TerminalCmdBuf);
+                    }
+                  }    
+                 ByteEnqueue(&PCBackDoorTx,'\n');
+                 ByteEnqueue(&PCBackDoorTx,'>');
+                 TerminalPos = 0;
+                
+                break;
+                case '\b':
+                    if(TerminalPos > 0)
+                    {
+                        TerminalPos--;    
+                        ByteEnqueue(&PCBackDoorTx,NextCharIn);
+                    }
+                break;
+                
+                default:
                     
-                        CmdFound = TRUE;
-                        break;
-                    }             
-                }        
-                if(CmdFound == FALSE)
-                {
-                   PrintfEnqueue(&PCBackDoorTx,"%s command not recognized.\r\n", TerminalCmdBuf);
-                }
-              }    
-             ByteEnqueue(&PCBackDoorTx,'\n');
-             ByteEnqueue(&PCBackDoorTx,'>');
-             TerminalPos = 0;
-            
-            break;
+                    if(TerminalPos == 0 && NextCharIn == 0x020)
+                    {
+                         //Do nothing if space bar is pressed at begining of line    
+                    }
+                       else if(NextCharIn >= 0x20 && NextCharIn<0x7F)
+                    {
+                        
+                        if(TerminalPos < MAX_TERMINAL_LINE_CHARS-1)
+                        {
+                             TerminalLineBuf[TerminalPos++] = NextCharIn;
+                               ByteEnqueue(&PCBackDoorTx,NextCharIn);
+                        }
+                    }
+                
+                break;
             
-            case '\b':
-                if(TerminalPos > 0)
-                {
-                    TerminalPos--;    
-                    ByteEnqueue(&PCBackDoorTx,NextCharIn);
+            }//end of character switch
+        }else{  //not normal mode
+            switch(NextCharIn){
+                case '>':
+                    AngleCount++;
+                    if(AngleCount > 2){
+                        WeAreInNormalMode=TRUE;
+                        PrintfLogEnqueue(&PCBackDoorTx,"Entering Normal mode\r\n >");
+                        AngleCount=0;
+                    }
+                    break; 
+            }                                
+        }
+    }
+ }
+void LogSerial(){
+    UINT t;
+    UINT BytesWritten;
+    if(BytesInQueue(&PCBackDoorRx)>0)
+    {
+        ByteDequeue(&PCBackDoorRx,&NextCharIn);
+          switch(NextCharIn){
+            case '>':
+                AngleCount++;
+                if(AngleCount > 2){
+                    WeAreInNormalMode=TRUE;
+                    PrintfLogEnqueue(&PCBackDoorTx,"Entering Normal mode\r\n >");
                 }
-            break;
-            
-            default:
-                
-                if(TerminalPos == 0 && NextCharIn == 0x020)
-                {
-                     //Do nothing if space bar is pressed at begining of line    
-                }
-                   else if(NextCharIn >= 0x20 && NextCharIn<0x7F)
-                {
-                    
-                    if(TerminalPos < MAX_TERMINAL_LINE_CHARS-1)
-                    {
-                         TerminalLineBuf[TerminalPos++] = NextCharIn;
-                           ByteEnqueue(&PCBackDoorTx,NextCharIn);
+                break;
+            case '\n':
+                break; //just eat
+            case '\r':
+                 SerialLineBuffer[SerialLineBufferPtr++]='\r';
+                 SerialLineBuffer[SerialLineBufferPtr++]='\n';
+                if(SystemState == SYSTEM_STATE_SERIAL_LOGGING){
+                    if(f_write(&CurrentLogFileHandle,SerialLineBuffer,SerialLineBufferPtr,&BytesWritten)){ //if we didn't work kick out
+                        PrintfLogEnqueue(&PCBackDoorTx,"QQQ\r\n");  //Shutdown
+                        PrintfEnqueue(&PCBackDoorTx,"Failed to write\r\n");
+                        EnterSystemState(SYSTEM_STATE_IDLE);
+                    }else{
+                        if(BytesWritten != 0){
+                           LinesWritten++;
+                            if(LinesWritten > NUMBEROFLINESBEFORESYNC){
+                                f_sync(&CurrentLogFileHandle);
+                                PrintfEnqueue(&PCBackDoorTx,"Synced");
+                                LinesWritten=0;
+                            }
+                        }
                     }
                 }
-            
-            break;
-        
-        }
+                SerialLineBufferPtr=0; //Always do this so we don't overflow
+                break;
+            default:
+                AngleCount=0;
+                SerialLineBuffer[SerialLineBufferPtr++]=NextCharIn;
+                if(SerialLineBufferPtr > 255){
+                    if(SystemState == SYSTEM_STATE_SERIAL_LOGGING){
+                        if(f_write(&CurrentLogFileHandle,SerialLineBuffer,SerialLineBufferPtr,&BytesWritten)){ //if we didn't work kick out
+                            PrintfLogEnqueue(&PCBackDoorTx,"QQQ\r\n");  //Shutdown
+                            PrintfEnqueue(&PCBackDoorTx,"Failed to write default\r\n");
+                            EnterSystemState(SYSTEM_STATE_IDLE);
+                        }
+                    }
+                    SerialLineBufferPtr=0;
+                }
+                break;
+        }// end of non-normal switch
     }
- 
 }