HVAC_M7_Command/CommandLines.c

68 lines
2.3 KiB
C

//
// Created by cfif on 05.04.2024.
//
#include <SystemDelayInterface.h>
#include "CommandLines.h"
#include "CmsisRtosThreadUtils.h"
#include "stdio.h"
#include "CliCmd.h"
#include <string.h>
#include "math.h"
#include "stdlib.h"
int32_t CliCmd_baseCommandHelp(void *env, tCliCmd *cli) {
CliCmd_PrintLnStatic(cli, "================================================");
CliCmd_PrintLnStatic(cli, "Команды:");
CliCmd_PrintLnStatic(cli, "");
CliCmd_PrintLnStatic(cli, "reboot - Перезагрузка");
CliCmd_PrintLnStatic(cli, "================================================");
return 0;
}
int32_t CliCmd_baseCommandReboot(void *env, tCliCmd *cli) {
NVIC_SystemReset();
return 0;
}
void CommandLine_Init(tCommandLine *env, tSerialPortIO *serial) {
CliCmd_InitStatic(&env->cmd, serial, env->mem.cmdRxLine);
CliRedirectionTable_InitStatic(&env->redirectTable, env->mem.commandPrefixes);
CliRedirectionTable_RecAddStatic(&env->redirectTable, "help", (cliCall) CliCmd_baseCommandHelp, NULL);
CliRedirectionTable_RecAddStatic(&env->redirectTable, "reboot", (cliCall) CliCmd_baseCommandReboot, NULL);
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, "Команда ");
CliCmd_Print(&env->cmd, env->cmd.rxLine.begin, env->cmd.rxLine.length - 1);
CliCmd_PrintLnStatic(&env->cmd, " не найдена");
CliCmd_PrintStatic(&env->cmd, "используйте ");
CliRedirectionTable_ListCmd(&env->redirectTable, &env->cmd, ' ');
CliCmd_PrintLnStatic(&env->cmd, "");
CliCmd_PrintLnStatic(&env->cmd, "введите команду [ help ] для большей получений большей информации");
}
}
static _Noreturn void CommandLine_Thread(tCommandLine *env) {
for (;;) {
ListenCLICommand(env);
SystemDelayMs(10);
}
}
void CommandLine_StartThread(tCommandLine *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (CommandLine_Thread), (void *) (env), &env->thread.attr);
}
}