update CLI
This commit is contained in:
parent
b08f1afe7f
commit
e6d9bb1da6
52
CLI/CLI.c
52
CLI/CLI.c
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "../FIFOBuff/FIFOBuffChar.h"
|
#include "../FIFOBuff/FIFOBuffChar.h"
|
||||||
|
|
||||||
void (*CLI_lineOut)(char* line);
|
CLI_lineOutFn CLI_lineOut;
|
||||||
CMDList_t* CMDList;
|
CMDList_t* CMDList;
|
||||||
FIFOBuffChar_t* FIFO;
|
FIFOBuffChar_t* FIFO;
|
||||||
|
|
||||||
@ -16,6 +16,14 @@ bool CLI_init(CLI_lineOutFn lineOut, CMDList_t* cmdList)
|
|||||||
CMDList = cmdList;
|
CMDList = cmdList;
|
||||||
|
|
||||||
FIFO = FIFOBuffChar_create();
|
FIFO = FIFOBuffChar_create();
|
||||||
|
|
||||||
|
if (CLI_lineOut != NULL)
|
||||||
|
{
|
||||||
|
(*CLI_lineOut)(">");
|
||||||
|
(*CLI_lineOut)(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CLI_deinit()
|
bool CLI_deinit()
|
||||||
@ -24,6 +32,7 @@ bool CLI_deinit()
|
|||||||
CMDList = NULL;
|
CMDList = NULL;
|
||||||
|
|
||||||
FIFOBuffChar_delete(FIFO);
|
FIFOBuffChar_delete(FIFO);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* fifoToString(FIFOBuffChar_t* fifo)
|
char* fifoToString(FIFOBuffChar_t* fifo)
|
||||||
@ -50,11 +59,27 @@ int tryExecute(FIFOBuffChar_t* fifo)
|
|||||||
if (cmd != NULL)
|
if (cmd != NULL)
|
||||||
{
|
{
|
||||||
(*(cmd->fn))(line);
|
(*(cmd->fn))(line);
|
||||||
|
|
||||||
|
if (CLI_lineOut != NULL)
|
||||||
|
{
|
||||||
|
(*CLI_lineOut)("\n");
|
||||||
|
(*CLI_lineOut)(">");
|
||||||
|
(*CLI_lineOut)(" ");
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("command not found: %s\n", line);
|
if (CLI_lineOut != NULL)
|
||||||
|
{
|
||||||
|
char err[100];
|
||||||
|
sprintf(&err, "command not found: %s\n> ", line);
|
||||||
|
for (int i=0; err[i] != 0; i++)
|
||||||
|
{
|
||||||
|
char c[2] = {err[i], 0};
|
||||||
|
(*CLI_lineOut)(&c[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,6 +109,7 @@ bool CLI_charIn(char c)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char str[100];
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case '\n':
|
case '\n':
|
||||||
@ -98,8 +124,28 @@ bool CLI_charIn(char c)
|
|||||||
FIFOBuffChar_delete(fifo);
|
FIFOBuffChar_delete(fifo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//TODO: add hire backspace and arrow detection
|
case 127: // backspace
|
||||||
|
(*CLI_lineOut)("\x1b");
|
||||||
|
(*CLI_lineOut)("[");
|
||||||
|
(*CLI_lineOut)("D");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 27: // escape (start for arrow keys)
|
||||||
|
sprintf(&str, "\ninvlid char: ESC - (%i)\n", c);
|
||||||
|
for (int i=0; str[i] != 0; i++)
|
||||||
|
{
|
||||||
|
char ch[2] = {str[i], 0};
|
||||||
|
(*CLI_lineOut)(&ch[0]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
sprintf(&str, "\ninvlid char: '%c' - (%i)\n", c, c);
|
||||||
|
for (int i=0; str[i] != 0; i++)
|
||||||
|
{
|
||||||
|
char ch[2] = {str[i], 0};
|
||||||
|
(*CLI_lineOut)(&ch[0]);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user