set int32 value

This commit is contained in:
Wolfgang Hottgenroth 2020-12-15 10:14:16 +01:00
parent 9bd23218d5
commit 296c6270c0
Signed by: wn
GPG Key ID: E49AF3B9EF6DD469
2 changed files with 61 additions and 11 deletions

View File

@ -8,7 +8,7 @@
typedef bool (*cmdFunc_t)(uint8_t argc, char **args); typedef bool (*cmdFunc_t)(uint8_t argc, char **args);
typedef struct { typedef struct {
char name[16]; char name[24];
char help[512]; char help[512];
cmdFunc_t cmdFunc; cmdFunc_t cmdFunc;
} cmd_t; } cmd_t;

View File

@ -5,6 +5,7 @@
#include <config.h> #include <config.h>
#include <string.h> #include <string.h>
#include <stdlib.h>
@ -13,6 +14,8 @@ static bool showConfigCmd(uint8_t argc, char **args) {
t_configBlock configBlock; t_configBlock configBlock;
eepromReadConfigBlock(&configBlock); eepromReadConfigBlock(&configBlock);
sendString("This is the saved configuration.\n\r");
sendString("It is not necessarily the active configuration.\n\r");
sendFormatString("configMagic: %lx\n\r", configBlock.configMagic); sendFormatString("configMagic: %lx\n\r", configBlock.configMagic);
sendFormatString("deviceName: %s\n\r", configBlock.deviceName); sendFormatString("deviceName: %s\n\r", configBlock.deviceName);
sendFormatString("MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n\r", configBlock.macAddress[0], sendFormatString("MAC address: %02x:%02x:%02x:%02x:%02x:%02x\n\r", configBlock.macAddress[0],
@ -54,14 +57,14 @@ static bool showConfigCmd(uint8_t argc, char **args) {
static bool setStringParameterCmd(uint8_t argc, char **args, size_t offset) { static bool setStringParameterCmd(uint8_t argc, char **args, size_t offset, size_t length) {
bool retCode = true; bool retCode = true;
t_configBlock configBlock; t_configBlock configBlock;
char *parameterName = args[1]; char *parameterName = args[1];
char *newParameterValue = args[2]; char *newParameterValue = args[2];
if (strlen(newParameterValue) >= sizeof(configBlock.deviceName)) { // FIXME if (strlen(newParameterValue) >= length) {
sendFormatString("given new value for %s is too long\n\r", parameterName); sendString("given new value for is too long\n\r");
retCode = false; retCode = false;
} else { } else {
sendFormatString("set %s to %s\n\r", parameterName, newParameterValue); sendFormatString("set %s to %s\n\r", parameterName, newParameterValue);
@ -74,35 +77,78 @@ static bool setStringParameterCmd(uint8_t argc, char **args, size_t offset) {
return retCode; return retCode;
} }
static bool setInt32ParameterCmd(uint8_t argc, char **args, size_t offset, int32_t minV, int32_t maxV) {
bool retCode = true;
t_configBlock configBlock;
char *parameterName = args[1];
char *newParameterValue = args[2];
long int value = strtol(newParameterValue, NULL, 10);
if (value < minV) {
sendString("value is too small\n\r");
retCode = false;
} else if (value > maxV) {
sendString("value is too large\n\r");
} else {
int32_t v = (int32_t) value;
sendFormatString("set %s to %ld\n\r", parameterName, v);
eepromReadConfigBlock(&configBlock);
*((int32_t*)(((uint8_t*)&configBlock) + offset)) = v;
eepromWriteConfigBlock(&configBlock);
}
return retCode;
}
static bool setDeviceNameCmd(uint8_t argc, char **args) { static bool setDeviceNameCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, deviceName)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, deviceName),
sizeof(((t_configBlock*)0)->deviceName));
} }
static bool setBrokerNameCmd(uint8_t argc, char **args) { static bool setBrokerNameCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, brokerName)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, brokerName),
sizeof(((t_configBlock*)0)->brokerName));
} }
static bool setSyslogServerCmd(uint8_t argc, char **args) { static bool setSyslogServerCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, syslogServerName)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, syslogServerName),
sizeof(((t_configBlock*)0)->syslogServerName));
} }
static bool setWatchdogTopicCmd(uint8_t argc, char **args) { static bool setWatchdogTopicCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, watchdogTopic)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, watchdogTopic),
sizeof(((t_configBlock*)0)->watchdogTopic));
} }
static bool setStartupTopicCmd(uint8_t argc, char **args) { static bool setStartupTopicCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, startupTopic)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, startupTopic),
sizeof(((t_configBlock*)0)->startupTopic));
} }
static bool setStatusTopicCmd(uint8_t argc, char **args) { static bool setStatusTopicCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, statusTopic)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, statusTopic),
sizeof(((t_configBlock*)0)->statusTopic));
} }
static bool setMbusDataTopicCmd(uint8_t argc, char **args) { static bool setMbusDataTopicCmd(uint8_t argc, char **args) {
return setStringParameterCmd(argc, args, offsetof(t_configBlock, mbusDataTopic)); return setStringParameterCmd(argc, args,
offsetof(t_configBlock, mbusDataTopic),
sizeof(((t_configBlock*)0)->mbusDataTopic));
} }
static bool setFrontendThresholdCmd(uint8_t argc, char **args) {
return setInt32ParameterCmd(argc, args,
offsetof(t_configBlock, frontendThreshold),
0, 1023);
}
const static cmd_t SET_COMMANDS[] = { const static cmd_t SET_COMMANDS[] = {
{ .name = "devicename", .cmdFunc = setDeviceNameCmd, { .name = "devicename", .cmdFunc = setDeviceNameCmd,
@ -133,6 +179,10 @@ const static cmd_t SET_COMMANDS[] = {
.help = \ .help = \
"mbusdatatopic ........................ MBus Data Topic\n\r" "mbusdatatopic ........................ MBus Data Topic\n\r"
}, },
{ .name = "frontendthreshold", .cmdFunc = setFrontendThresholdCmd,
.help = \
"frontendthreshold ........................ Frontend Threshold (default: 240)\n\r"
},
{ .name = "END_OF_CMDS", .help = "",.cmdFunc = NULL } { .name = "END_OF_CMDS", .help = "",.cmdFunc = NULL }
}; };