update CLI

This commit is contained in:
Laila van Reenen 2024-04-08 14:37:21 +02:00
parent b08f1afe7f
commit e6d9bb1da6

View File

@ -5,7 +5,7 @@
#include "../FIFOBuff/FIFOBuffChar.h"
void (*CLI_lineOut)(char* line);
CLI_lineOutFn CLI_lineOut;
CMDList_t* CMDList;
FIFOBuffChar_t* FIFO;
@ -16,6 +16,14 @@ bool CLI_init(CLI_lineOutFn lineOut, CMDList_t* cmdList)
CMDList = cmdList;
FIFO = FIFOBuffChar_create();
if (CLI_lineOut != NULL)
{
(*CLI_lineOut)(">");
(*CLI_lineOut)(" ");
}
return true;
}
bool CLI_deinit()
@ -24,6 +32,7 @@ bool CLI_deinit()
CMDList = NULL;
FIFOBuffChar_delete(FIFO);
return true;
}
char* fifoToString(FIFOBuffChar_t* fifo)
@ -50,11 +59,27 @@ int tryExecute(FIFOBuffChar_t* fifo)
if (cmd != NULL)
{
(*(cmd->fn))(line);
if (CLI_lineOut != NULL)
{
(*CLI_lineOut)("\n");
(*CLI_lineOut)(">");
(*CLI_lineOut)(" ");
}
return true;
}
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;
}
}
@ -84,6 +109,7 @@ bool CLI_charIn(char c)
}
else
{
char str[100];
switch (c)
{
case '\n':
@ -97,9 +123,29 @@ bool CLI_charIn(char c)
ok = tryExecute(fifo);
FIFOBuffChar_delete(fifo);
break;
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;
//TODO: add hire backspace and arrow detection
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;
}
}