CliCmd_Vars/Src/CliCmd/VarsGet.c

82 lines
2.8 KiB
C

//
// Created by zemon on 15.11.22.
//
#include "CliCmd/Vars.h"
static const uint8_t nameAlign = 16;
static char space[] = " ";
static void CliCmd_Vars_printDeskName(tVariableDescriptor *descriptor, tCliCmd *cli) {
if (descriptor->name.length > nameAlign) {
CliCmd_Print(cli, descriptor->name.str, descriptor->name.length);
} else {
CliCmd_PrintFormat(cli, "%.*s%.*s",
descriptor->name.length,
descriptor->name.str,
nameAlign - descriptor->name.length,
space
);
}
CliCmd_PrintStatic(cli, "\t");
}
static void CliCmd_Vars_printDeskValue(tVariableDescriptor *descriptor, tCliCmd *cli) {
if (!VariablesTable_IsVariableChangeAllowed(descriptor)) {
CliCmd_PrintStatic(cli, "# ");
} else {
CliCmd_PrintStatic(cli, " ");
}
if (descriptor->typeId == VARIABLE_TYPE_STRING) {
CliCmd_Print(cli, descriptor->addr, *(uint8_t *) descriptor->len);
} else {
if (descriptor->typeId == VARIABLE_TYPE_UINT8) {
CliCmd_PrintFormat(cli, "%u", *(uint8_t *) descriptor->addr);
}
if (descriptor->typeId == VARIABLE_TYPE_UINT16) {
CliCmd_PrintFormat(cli, "%u", *(uint16_t *) descriptor->addr);
}
if (descriptor->typeId == VARIABLE_TYPE_UINT32) {
CliCmd_PrintFormat(cli, "%i", *(uint32_t *) descriptor->addr);
}
if (descriptor->typeId == VARIABLE_TYPE_BOOL) {
CliCmd_PrintFormat(cli, "%u", *(uint8_t *) descriptor->addr);
}
if (descriptor->typeId == VARIABLE_TYPE_FLOAT32) {
CliCmd_PrintFormat(cli, "%f", *(float *) descriptor->addr);
}
if (descriptor->typeId == VARIABLE_TYPE_ARR_U8_STATIC) {
uint8_t *beg = descriptor->addr;
uint8_t *end = beg + ((uint32_t) descriptor->len);
for (uint8_t *elem = beg; elem < end; elem++) {
if (elem != beg) {
CliCmd_PrintStatic(cli, " ");
}
CliCmd_PrintFormat(cli, "%u", *elem);
}
}
}
}
void CliCmd_Vars_printDesk(tVariableDescriptor *desk, tCliCmd *cli) {
CliCmd_Vars_printDeskName(desk, cli);
CliCmd_Vars_printDeskValue(desk, cli);
}
int32_t CliCmd_Vars_listVariables(tVariablesTable *extTable, tCliCmd *cli) {
CliCmd_PrintLnStatic(cli, "==============================VARS==============================");
for (uint16_t id = 0; id < extTable->count; ++id) {
CliCmd_Vars_printDesk(extTable->items + id, cli);
CliCmd_PrintLnStatic(cli, "");
}
CliCmd_PrintLnStatic(cli, "================================================================");
CliCmd_PrintLnStatic(cli, "");
return 0;
}