Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of PSU-POWERLOGGER by
Diff: CODE/Terminal.cpp
- Revision:
- 1:871a329fd172
- Parent:
- 0:d0c18e423b13
- Child:
- 2:f6e5fdf2f872
--- 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
}
-
}
