// // Created by cfif on 05.04.2024. // #include #include "CommandLines.h" #include "CmsisRtosThreadUtils.h" #include "stdio.h" #include "CliCmd.h" #include #include "math.h" #include "stdlib.h" int32_t CliCmd_baseCommandHelp(void *env, tCliCmd *cli) { CliCmd_PrintLnStatic(cli, "================================================"); CliCmd_PrintLnStatic(cli, "Commands:"); CliCmd_PrintLnStatic(cli, ""); CliCmd_PrintLnStatic(cli, "reboot - Restarting the device"); CliCmd_PrintLnStatic(cli, "mem - Memory Information"); CliCmd_PrintLnStatic(cli, "set_Amb_Fb - Enter set_Amb_Fb"); CliCmd_PrintLnStatic(cli, "================================================"); return 0; } int32_t CliCmd_baseCommandReboot(void *env, tCliCmd *cli) { //NVIC_SystemReset(); return 0; } int32_t CliCmd_set_Amb_Fb(tCommandLine *env, tCliCmd *cli) { char str[64]; CliCmd_PrintLnStatic(cli, "Enter temp: "); CliCmd_WaitLine(cli); char *end; env->data.Amb_Fb = strtol(cli->rxLine.data, &end, 10); sprintf(str, "Amb_Fb = %lu\n\r", env->data.Amb_Fb); CliCmd_Print(cli, str, strlen(str)); return 0; } void CommandLine_Init(tCommandLine *env, tSerialPortIO *cliVirtualPortIn_Io, tSerialPortIO *cliVirtualPortOut_Io) { CliCmd_InitStatic(&env->cmd, cliVirtualPortIn_Io, cliVirtualPortOut_Io, env->mem.cmdRxLine); CliRedirectionTable_InitStatic(&env->redirectTable, env->mem.commandPrefixes); CliRedirectionTable_RecAddStatic(&env->redirectTable, "help", CliCmd_baseCommandHelp, NULL); CliRedirectionTable_RecAddStatic(&env->redirectTable, "mem", vTaskGetRunTime, NULL); CliRedirectionTable_RecAddStatic(&env->redirectTable, "reboot", CliCmd_baseCommandReboot, NULL); CliRedirectionTable_RecAddStatic(&env->redirectTable, "set_Amb_Fb", CliCmd_set_Amb_Fb, env); InitThreadAtrStatic(&env->thread.attr, "CommandLine", env->thread.controlBlock, env->thread.stack, osPriorityNormal); } void ListenCLICommand(tCommandLine *env) { CliCmd_WaitLine(&env->cmd); if (CliRedirectionTable_ProcessCmd(&env->redirectTable, &env->cmd) != 0) { CliCmd_PrintStatic(&env->cmd, "Command "); CliCmd_Print(&env->cmd, env->cmd.rxLine.begin, env->cmd.rxLine.length - 1); CliCmd_PrintLnStatic(&env->cmd, " not found"); CliCmd_PrintLnStatic(&env->cmd, "Enter the command [ help ] for more information\n"); } } static _Noreturn void CommandLine_Thread(tCommandLine *env) { for (;;) { ListenCLICommand(env); SystemDelayMs(1000); } } void CommandLine_StartThread(tCommandLine *env) { if (!env->thread.id) { env->thread.id = osThreadNew((osThreadFunc_t) (CommandLine_Thread), (void *) (env), &env->thread.attr); } }