99 lines
3.4 KiB
C
99 lines
3.4 KiB
C
//
|
|
// Created by zemon on 24.10.22.
|
|
//
|
|
|
|
#include "CliPrivate.h"
|
|
#include "SystemDelayInterface.h"
|
|
#include "AsciiStringParsingUtils.h"
|
|
#include "stream.h"
|
|
#include "EraGlonassUveos.h"
|
|
#include "CliCmd/NetGsmUpDown.h"
|
|
#include "PowerManagement.h"
|
|
|
|
void Cli_Init(
|
|
tCli *env,
|
|
tSerialPortIO *serial,
|
|
tSerialPortIO *serialSniffer,
|
|
tVariablesTable *extTable,
|
|
tCarFlipDetection *tFlip,
|
|
tEraGlonassMsdTable *msdTable,
|
|
tUveosEmergencySimulationInterface *uvEmrgSimInter,
|
|
tUserInputButtonWatcher *userIntButtWatch,
|
|
tEraGlonassUveosDumperInterface *dumperInterface,
|
|
tPowerManagement *power,
|
|
tGsmWithGnss *gsmWithGnss,
|
|
tEraGlonassUveos *uveos
|
|
) {
|
|
env->serialCommandPort = serial;
|
|
env->serialSnifferPort = serialSniffer;
|
|
env->externTable = extTable;
|
|
|
|
CliCmd_InitStatic(&env->cmd, serial, env->mem.cmdRxLine);
|
|
CliRedirectionTable_InitStatic(&env->redirectTable, env->mem.commandPrefixes);
|
|
|
|
CliCmdMsdTable_Init(&env->sub.msdTab, msdTable, dumperInterface);
|
|
CliCmd_FlipSettingInit(&env->sub.flipSet, tFlip, extTable);
|
|
|
|
CliCmd_AddInfoInit(&env->sub.addFunc, gsmWithGnss, uveos, power);
|
|
|
|
CliCmd_EcoolSimulationInit(
|
|
&env->sub.uvEmrgSimInter,
|
|
uvEmrgSimInter,
|
|
userIntButtWatch,
|
|
msdTable->items->msd.MSD_Data.additionalData.asi15,
|
|
tFlip->current.angleCos,
|
|
gsmWithGnss
|
|
);
|
|
|
|
if (serialSniffer != NULL) {
|
|
CliCmdSerialBridge_Init(&env->sub.serialBridge, serialSniffer);
|
|
CliRedirectionTable_RecAddStatic(
|
|
&env->redirectTable,
|
|
"gnss_mode",
|
|
(cliCall) CliCmdSerialBridge_Process,
|
|
&env->sub.serialBridge
|
|
);
|
|
}
|
|
|
|
CliRedirectionTable_RecAddStatic(
|
|
&env->redirectTable,
|
|
"msd_info", (cliCall)
|
|
CliCmdMsdTable_Process,
|
|
&env->sub.msdTab
|
|
);
|
|
|
|
CliRedirectionTable_RecAddStatic(&env->redirectTable, "help", (cliCall) CliCmd_baseCommandHelp, NULL);
|
|
CliRedirectionTable_RecAddStatic(&env->redirectTable, "set_flip", (cliCall) CliCmd_FlipSetting, &env->sub.flipSet);
|
|
CliRedirectionTable_RecAddStatic(&env->redirectTable, "addFun", (cliCall) CliCmd_AddInfo, &env->sub.addFunc);
|
|
// CliRedirectionTable_RecAddStatic(&env->redirectTable, "setting", (cliCall) CliCmd_ChangeListVar, extTable);
|
|
CliRedirectionTable_RecAddStatic(&env->redirectTable, "reboot", (cliCall) CliCmd_CmsisReboot, NULL);
|
|
CliRedirectionTable_RecAddStatic(&env->redirectTable, "emerTest", (cliCall) CliCmd_EcoolSimulation,
|
|
&env->sub.uvEmrgSimInter);
|
|
|
|
//Инициализируем поток
|
|
InitThreadBlock(env->thread, "Cli", osPriorityNormal);
|
|
}
|
|
|
|
void ListenCLICommand(tCli *env) {
|
|
CliCmd_WaitLine(&env->cmd);
|
|
if (CliRedirectionTable_ProcessCmd(&env->redirectTable, &env->cmd) != 0) {
|
|
|
|
CliCmd_PrintStatic(&env->cmd, "COMMAND NOT FOUND!");
|
|
CliCmd_PrintStatic(&env->cmd, " EXECUTE COMMAND [ help ] OF MORE INFORMATION ");
|
|
}
|
|
}
|
|
|
|
static _Noreturn void Cli_Thread(tCli *env) {
|
|
for (;;) {
|
|
ListenCLICommand(env);
|
|
SystemDelayMs(10);
|
|
}
|
|
}
|
|
|
|
void Cli_StartThread(tCli *env) {
|
|
if (!env->thread.id) {
|
|
env->thread.id = osThreadNew((osThreadFunc_t) (Cli_Thread), (void *) (env), &env->thread.attr);
|
|
} else {
|
|
osThreadResume(env->thread.id);
|
|
}
|
|
} |