150 lines
5.8 KiB
C
150 lines
5.8 KiB
C
//
|
|
// Created by zemon on 18.11.22.
|
|
//
|
|
|
|
|
|
#include <sys/select.h>
|
|
#include <time.h>
|
|
#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);
|
|
}
|
|
}
|
|
|