Skip to content

Instantly share code, notes, and snippets.

@govorox
Created May 16, 2017 10:51
Show Gist options
  • Save govorox/38201bf8ee44e65452b57823e6bc8dc1 to your computer and use it in GitHub Desktop.
Save govorox/38201bf8ee44e65452b57823e6bc8dc1 to your computer and use it in GitHub Desktop.
Fix Microchip harmony command backspace handling
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;
@govorox
Copy link
Author

govorox commented May 16, 2017

if(readBuff[0] == '\b' || readBuff[0] == 127)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment