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" #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;
} }
} }