commit a88fc5c3f802ba5b529a2c279e7390835599b938 Author: cfif Date: Wed Dec 4 13:10:49 2024 +0300 Init diff --git a/Inc/CliCmd/MsdTable.h b/Inc/CliCmd/MsdTable.h new file mode 100644 index 0000000..2e6b65b --- /dev/null +++ b/Inc/CliCmd/MsdTable.h @@ -0,0 +1,24 @@ +// +// Created by zemon on 17.11.22. +// + +#ifndef UVEOS_ON_NATION_CLIMSDTABLE_H +#define UVEOS_ON_NATION_CLIMSDTABLE_H + +#include "CliCmd.h" +#include "EraGlonassMsdTable.h" +#include "EraGlonassUveos_Dumper.h" + +typedef struct { + tEraGlonassMsdTable *msdTable; + tEraGlonassUveosDumperInterface *dumperInterface; +} tCliCmdMsdTable; + + +void CliCmdMsdTable_Init(tCliCmdMsdTable *env, tEraGlonassMsdTable *msdTable, tEraGlonassUveosDumperInterface *dumperInterface); + +int32_t CliCmdMsdTable_Process(tCliCmdMsdTable *env, tCliCmd *cliCmd); + +void CliCmdMsdTable_Help(tCliCmd *cli); + +#endif //UVEOS_ON_NATION_CLIMSDTABLE_H diff --git a/Src/CliCmd/MsdTable.c b/Src/CliCmd/MsdTable.c new file mode 100644 index 0000000..90a9fb7 --- /dev/null +++ b/Src/CliCmd/MsdTable.c @@ -0,0 +1,149 @@ +// +// Created by zemon on 18.11.22. +// + + +#include +#include +#include "CliCmd/MsdTable.h" +#include "SystemDelayInterface.h" +#include "AsciiStringAssmeblingUtils.h" +#include "stream.h" + +void CliCmdMsdTable_Init(tCliCmdMsdTable *env, tEraGlonassMsdTable *msdTable, tEraGlonassUveosDumperInterface *dumperInterface) { + env->msdTable = msdTable; + env->dumperInterface = dumperInterface; +} + +void CliCmdMsdTable_Help(tCliCmd *cli) { + CliCmd_PrintLnStatic(cli, " access sub commands:"); + CliCmd_PrintLnStatic(cli, " command [ exit ] exit as this sub mode"); + CliCmd_PrintLnStatic(cli, " command [ ls ] exit as this sub mode"); + CliCmd_PrintLnStatic(cli, " command [ clear ]- listing all access variable and values"); + CliCmd_PrintLnStatic(cli, " syntaxis: [ command ]"); + CliCmd_PrintLnStatic(cli, ""); +} + +void PrintTime(time_t rawtime, tSerialPortIO *serialPort) { + struct tm ts; + char buf[80]; + ts = *localtime(&rawtime); + strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", &ts); + debug_printf(serialPort, "%s\n", buf ); +} + +void CliCmdMsdTable_List(tCliCmdMsdTable *env, tCliCmd *cliCmd) { + bool emerg = false; + for (uint32_t id = 0; id < EraGlonassMsdTable_GetSize(); ++id) { + if (env->msdTable->items[id].msd.MSD_Data.msgId != 0) { + emerg = true; + CliCmd_PrintLnStatic(cliCmd, "======================= EMERGENCY INFORMATION ======================="); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "VIN = "); + for (uint16_t vinCharInd = 0; vinCharInd < 18; ++vinCharInd) { + debug_printf(cliCmd->serialCommandPort, "%u", (uint16_t) env->msdTable->items[id].msd.MSD_Data.vin[vinCharInd]); + } + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "LAST MSG ID = "); + debug_printf(cliCmd->serialCommandPort, "%u", (uint16_t) env->msdTable->items[id].msd.MSD_Data.msgId ); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "DIRECTION = "); + debug_printf(cliCmd->serialCommandPort, "%u", (uint8_t) env->msdTable->items[id].msd.MSD_Data.direction ); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "ASI 15 = "); + debug_printf(cliCmd->serialCommandPort, "%u", (uint16_t) env->msdTable->items[id].msd.MSD_Data.additionalData.asi15 ); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "LATITUDE = "); + debug_printf(cliCmd->serialCommandPort, "%u", (uint32_t) env->msdTable->items[id].msd.MSD_Data.pos.lat ); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "LONGITUDE = "); + debug_printf(cliCmd->serialCommandPort, "%u", (uint32_t) env->msdTable->items[id].msd.MSD_Data.pos.lon ); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "ATTEMPS LEFT = "); + debug_printf(cliCmd->serialCommandPort, "%u", (uint32_t) env->msdTable->items[id].attemptsLeft ); + CliCmd_PrintLnStatic(cliCmd, ""); + + CliCmd_PrintStatic(cliCmd, "TIME STAMP = "); + PrintTime((uint32_t) env->msdTable->items[id].msd.MSD_Data.timestamp, cliCmd->serialCommandPort); + CliCmd_PrintLnStatic(cliCmd, ""); + + //--------------------------------------------- MND BILD ---------------------------------------------- + tEraGlonassMsd *msd = &env->msdTable->items[id].msd; + struct { + uint8_t data[ERA_GLONASS_MSD_ENCODED_BUFFER_LENGTH]; + uint32_t len; + }msdEncoded; + + msdEncoded.len = EraGlonassMsdEncode(msd, MSD_V_2, msdEncoded.data); + + char asciiMsd[msdEncoded.len * 2]; + size_t asciiMsdLen = 0; + vAsciiStringAddBytesAsHex(asciiMsd, &asciiMsdLen, msdEncoded.data, msdEncoded.len); + + CliCmd_PrintStatic(cliCmd, "MND INFO = "); + CliCmd_Print(cliCmd,asciiMsd,asciiMsdLen); + CliCmd_PrintLnStatic(cliCmd, ""); + //----------------------------------------------------------------------------------------------------- + + CliCmd_PrintLnStatic(cliCmd, "====================================================================="); + } + } + + if(emerg == false) { + CliCmd_PrintLnStatic(cliCmd, "======================== INFORMATION IS NONE ========================"); + } +} + +void CliCmdMsdTable_Clear(tCliCmdMsdTable *env, tCliCmd *cliCmd) { + EraGlonassMsdTable_Init(env->msdTable); + EraGlonassUveosDumper_ForceDump(env->dumperInterface); + CliCmd_PrintLnStatic(cliCmd, "================== EMERGENCY INFORMATION IS CLEAR ==================="); +} + +uint32_t CliCmdMsdTable_ProcessSub(tCliCmdMsdTable *env, tCliCmd *cliCmd) { + + if (CliCmd_RxStartsWithStatic(cliCmd, "ls")) { + CliCmdMsdTable_List(env, cliCmd); + return 0; + } else if (CliCmd_RxStartsWithStatic(cliCmd, "clear")) { + CliCmdMsdTable_Clear(env, cliCmd); + return 0; + } + return -1; +} + +int32_t CliCmdMsdTable_Process(tCliCmdMsdTable *env, tCliCmd *cliCmd) { + CliCmd_PrintStatic(cliCmd, "SWITCH TO MST TABLE MODE"); + CliCmdMsdTable_Help(cliCmd); + CliCmd_RxSkipSpace(cliCmd); + + if (CliCmd_RxLineLength(cliCmd) != 0) { + for (;;) { + CliCmd_WaitLine(cliCmd); + + if (CliCmd_RxStartsWithStatic(cliCmd, "exit")) { + CliCmd_PrintStatic(cliCmd, "SWITCH TO BASE MODE"); + return 0; + } + + if (CliCmd_RxStartsWithStatic(cliCmd, "help")) { + CliCmdMsdTable_Help(cliCmd); + } + + uint32_t result = CliCmdMsdTable_ProcessSub(env, cliCmd); + if (!result) { + //CliCmdMsdTable_Help(cliCmd); + } + } + } else { + return CliCmdMsdTable_ProcessSub(env, cliCmd); + } +} + diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..1d6850f --- /dev/null +++ b/modular.json @@ -0,0 +1,22 @@ +{ + "dep": [ + { + "type": "git", + "provider": "NAVIGATOR_UVEOS_NATION_TELIT", + "repo": "EraGlonassMsdTable" + }, + { + "type": "git", + "provider": "NAVIGATOR_UVEOS_NATION_TELIT", + "repo": "CliCmd" + } + ], + "cmake": { + "inc_dirs": [ + "Inc" + ], + "srcs": [ + "Src/**.c" + ] + } +} \ No newline at end of file