Created
May 16, 2017 10:51
-
-
Save govorox/38201bf8ee44e65452b57823e6bc8dc1 to your computer and use it in GitHub Desktop.
Fix Microchip harmony command backspace handling
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
case SYS_CMD_STATE_WAIT_FOR_READ_DONE: | |
{ | |
if((readBuff[0] == '\r') || (readBuff[0] == '\n')) | |
{ | |
pCmdIO->cmdState = SYS_CMD_STATE_SETUP_READ; | |
// new command assembled | |
if(pCmdIO->cmdPnt == pCmdIO->cmdBuff) | |
{ // just an extra \n or \r | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, LINE_TERM _promptStr); | |
return true; | |
} | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, LINE_TERM); | |
*pCmdIO->cmdPnt = 0; | |
pCmdIO->cmdPnt = pCmdIO->cmdEnd = pCmdIO->cmdBuff; | |
if(!ParseCmdBuffer(pCmdIO)) | |
{ | |
//Command not processed, show prompt | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, _promptStr); | |
} | |
else | |
{ | |
//Command being processed, temporarily disable prompt until command completes | |
pCmdIO->cmdState = SYS_CMD_STATE_DISABLE; | |
} | |
return true; | |
} | |
else if(readBuff[0] == '\b' || readBuff[0] == 127) // VG: check DEL character as well | |
{ | |
pCmdIO->cmdState = SYS_CMD_STATE_SETUP_READ; | |
if(pCmdIO->cmdPnt > pCmdIO->cmdBuff) | |
{ | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, "\b \b"); | |
pCmdIO->cmdPnt--; pCmdIO->cmdEnd--; | |
} | |
} | |
else if(readBuff[0] == 0x1b) | |
{ | |
_cmdAppData.seqBuff[0] = readBuff[1]; | |
_cmdAppData.seqBuff[1] = readBuff[2]; | |
// This is an escape sequence, start reading which cursor character | |
ProcessEscSequence(pCmdIO); | |
readBuff[0] = '\0'; | |
readBuff[1] = '\0'; | |
readBuff[2] = '\0'; | |
pCmdIO->cmdState = SYS_CMD_STATE_SETUP_READ; | |
} | |
else if(pCmdIO->cmdEnd-pCmdIO->cmdBuff<SYS_CMD_MAX_LENGTH) | |
{ | |
pCmdIO->cmdState = SYS_CMD_STATE_SETUP_READ; | |
if (readBuff[0]!='\0') | |
{ | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, readBuff); | |
*pCmdIO->cmdPnt++ = readBuff[0]; | |
} | |
if(pCmdIO->cmdPnt > pCmdIO->cmdEnd) | |
{ | |
pCmdIO->cmdEnd = pCmdIO->cmdPnt; | |
} | |
} | |
else | |
{ | |
pCmdIO->cmdState = SYS_CMD_STATE_SETUP_READ; | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, " *** Command Processor buffer exceeded. Retry. ***" LINE_TERM); | |
pCmdIO->cmdPnt = pCmdIO->cmdEnd = pCmdIO->cmdBuff; | |
(*pCmdIO->pCmdApi->msg)(pCmdIO->cmdIoParam, _promptStr); | |
} | |
} | |
break; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
if(readBuff[0] == '\b' || readBuff[0] == 127)