allow turning off visual ping

This commit is contained in:
John
2022-11-05 13:38:10 +01:00
parent a6b0637434
commit 6e3c5bfb70
+24 -3
View File
@@ -46,9 +46,9 @@ const char *argp_program_version = "eBUS adapter PIC firmware loader";
/** the documentation of the program. */ /** the documentation of the program. */
static const char argpdoc[] = static const char argpdoc[] =
"A tool for loading firmware to the eBUS adapter PIC." "A tool for loading firmware to the eBUS adapter PIC and configure some adjustable settings."
"\vPORT is either the serial port to use (e.g./dev/ttyUSB0) that also supports a trailing wildcard '*' for testing" "\vPORT is either the serial port to use (e.g./dev/ttyUSB0) that also supports a trailing wildcard '*' for testing"
" multiple ports, or a network port as \"ip:port\" for use with e.g. socat."; " multiple ports, or a network port as \"ip:port\" for use with e.g. socat or ebusd-esp.";
static const char argpargsdoc[] = "PORT"; static const char argpargsdoc[] = "PORT";
@@ -61,6 +61,8 @@ static const struct argp_option argpoptions[] = {
{"macip", 'M', nullptr, 0, "set the MAC address suffix from the IP address", 0 }, {"macip", 'M', nullptr, 0, "set the MAC address suffix from the IP address", 0 },
{"arbdel", 'a', "US", 0, "set arbitration delay to US microseconds (0-620 in steps of 10, default 200" {"arbdel", 'a', "US", 0, "set arbitration delay to US microseconds (0-620 in steps of 10, default 200"
", since firmware 20211128)", 0 }, ", since firmware 20211128)", 0 },
{"pingon", 'p', nullptr, 0, "enable visual ping", 0 },
{"pingoff", 'o', nullptr, 0, "disable visual ping", 0 },
{"flash", 'f', "FILE", 0, "flash the FILE to the device", 0 }, {"flash", 'f', "FILE", 0, "flash the FILE to the device", 0 },
{"reset", 'r', nullptr, 0, "reset the device at the end on success", 0 }, {"reset", 'r', nullptr, 0, "reset the device at the end on success", 0 },
{"slow", 's', nullptr, 0, "use low speed for transfer", 0 }, {"slow", 's', nullptr, 0, "use low speed for transfer", 0 },
@@ -76,6 +78,8 @@ static bool setMask = false;
static uint8_t setMaskLen = 0x1f; static uint8_t setMaskLen = 0x1f;
static bool setArbitrationDelay = false; static bool setArbitrationDelay = false;
static uint16_t setArbitrationDelayMicros = 0; static uint16_t setArbitrationDelayMicros = 0;
static bool setVisualPing = false;
static bool setVisualPingOn = false;
static char* flashFile = nullptr; static char* flashFile = nullptr;
static bool reset = false; static bool reset = false;
static bool lowSpeed = false; static bool lowSpeed = false;
@@ -180,6 +184,14 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) {
} }
setArbitrationDelay = true; setArbitrationDelay = true;
break; break;
case 'p': // --pingon
setVisualPing = true;
setVisualPingOn = true;
break;
case 'o': // --pingoff
setVisualPing = true;
setVisualPingOn = false;
break;
case 'f': // --flash=firmware.hex case 'f': // --flash=firmware.hex
if (arg == nullptr || arg[0] == 0 || stat(arg, &st) != 0 || !S_ISREG(st.st_mode)) { if (arg == nullptr || arg[0] == 0 || stat(arg, &st) != 0 || !S_ISREG(st.st_mode)) {
argp_error(state, "invalid flash file"); argp_error(state, "invalid flash file");
@@ -924,6 +936,12 @@ int readSettings(int fd, uint8_t* currentData = nullptr) {
arbitrationDelay *= 10; // steps of 10us arbitrationDelay *= 10; // steps of 10us
std::cout << std::dec << static_cast<unsigned>(arbitrationDelay) << " us" << std::endl; std::cout << std::dec << static_cast<unsigned>(arbitrationDelay) << " us" << std::endl;
} }
std::cout << "Visual ping: ";
if (configData[5]&0x20) {
std::cout << "on (default)" << std::endl;
} else {
std::cout << "off" << std::endl;
}
return 0; return 0;
} }
@@ -945,6 +963,9 @@ bool writeSettings(int fd, uint8_t* currentData = nullptr) {
if (setArbitrationDelay) { if (setArbitrationDelay) {
configData[3] = setArbitrationDelayMicros/10; configData[3] = setArbitrationDelayMicros/10;
} }
if (setVisualPing) {
configData[5] = (configData[5]&0x1f) | (setVisualPingOn?0x20:0);
}
if (writeConfig(fd, 0x0000, 8, configData) != 0) { if (writeConfig(fd, 0x0000, 8, configData) != 0) {
std::cerr << "failed" << std::endl; std::cerr << "failed" << std::endl;
return false; return false;
@@ -1094,7 +1115,7 @@ int run(int fd) {
success = false; success = false;
} }
} }
if (setIp || setDhcp || setArbitrationDelay) { if (setIp || setDhcp || setArbitrationDelay || setVisualPing) {
if (writeSettings(fd, useCurrentConfigData ? currentConfigData : nullptr)) { if (writeSettings(fd, useCurrentConfigData ? currentConfigData : nullptr)) {
std::cout << "Settings changed to:" << std::endl; std::cout << "Settings changed to:" << std::endl;
readSettings(fd); readSettings(fd);