Linux: Use config file for gateway settings (#1061)
- The following settings can be use on the config file:
- verbose=[debug,info,notice,warn,err] - Logging verbosity.
- log_file[0|1] - Enable logging to a file.
- log_filepath=(FILE) - Log file path.
- log_pipe=[0|1] - Enable logging to a named pipe(aka fifo).
Use this option to view your gateway's log messages from the
log_pipe_file (defined below).
To do so, run the following command on another terminal:
- $ cat "log_pipe_file"
- log_pipe_file=(FILE)
- syslog=[0|1] - Enable logging to syslog.
- eeprom_file=[/etc/mysensors.eeprom]
- eeprom_size=[1024]
- Change some mysgw parameters:
- Added:
- -q, --quiet: for quiet mode, disable log messages written to the
terminal.
- Removed:
- -d, --debug: removed, log messages are now enabled by default.
- Replaced:
- -b, --background: replaced by --daemon
- isatty() is no longer used, log messages by default are printed to
stderr unless the gateway is started with --quiet (#1022)
- MY_LINUX_CONFIG_FILE: no longer holds the path to the eeprom file,
but to the configuration file
This commit is contained in:
committed by
Mikael Falkvidd
parent
06f8d2b7e5
commit
2175c993ef
@@ -6,7 +6,7 @@
|
||||
* network topology allowing messages to be routed to nodes.
|
||||
*
|
||||
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
|
||||
* Copyright (C) 2013-2017 Sensnology AB
|
||||
* Copyright (C) 2013-2018 Sensnology AB
|
||||
* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
|
||||
*
|
||||
* Documentation: http://www.mysensors.org
|
||||
@@ -26,46 +26,8 @@
|
||||
#include "log.h"
|
||||
#include "SoftEeprom.h"
|
||||
|
||||
SoftEeprom::SoftEeprom(const char *fileName, size_t length)
|
||||
SoftEeprom::SoftEeprom() : _length(0), _fileName(NULL), _values(NULL)
|
||||
{
|
||||
struct stat fileInfo;
|
||||
|
||||
_fileName = strdup(fileName);
|
||||
if (_fileName == NULL) {
|
||||
logError("Error: %s\n", strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
_length = length;
|
||||
_values = new uint8_t[_length];
|
||||
for (size_t i = 0; i < _length; ++i) {
|
||||
_values[i] = 0xFF;
|
||||
}
|
||||
|
||||
if (stat(_fileName, &fileInfo) != 0) {
|
||||
//File does not exist. Create it.
|
||||
logInfo("Config file %s does not exist, creating new config file.\n", _fileName);
|
||||
std::ofstream myFile(_fileName, std::ios::out | std::ios::binary);
|
||||
if (!myFile) {
|
||||
logError("Unable to create config file %s.\n", _fileName);
|
||||
exit(1);
|
||||
}
|
||||
myFile.write((const char*)_values, _length);
|
||||
myFile.close();
|
||||
} else if (fileInfo.st_size < 0 || (size_t)fileInfo.st_size != _length) {
|
||||
logError("Config file %s is not the correct size of %zu. Please remove the file and a new one will be created.\n",
|
||||
_fileName, _length);
|
||||
exit(1);
|
||||
} else {
|
||||
//Read config into local memory.
|
||||
std::ifstream myFile(_fileName, std::ios::in | std::ios::binary);
|
||||
if (!myFile) {
|
||||
logError("Unable to open config to file %s for reading.\n", _fileName);
|
||||
exit(1);
|
||||
}
|
||||
myFile.read((char*)_values, _length);
|
||||
myFile.close();
|
||||
}
|
||||
}
|
||||
|
||||
SoftEeprom::SoftEeprom(const SoftEeprom& other)
|
||||
@@ -81,8 +43,63 @@ SoftEeprom::SoftEeprom(const SoftEeprom& other)
|
||||
|
||||
SoftEeprom::~SoftEeprom()
|
||||
{
|
||||
delete[] _values;
|
||||
free(_fileName);
|
||||
destroy();
|
||||
}
|
||||
|
||||
int SoftEeprom::init(const char *fileName, size_t length)
|
||||
{
|
||||
struct stat fileInfo;
|
||||
|
||||
destroy();
|
||||
|
||||
_fileName = strdup(fileName);
|
||||
if (_fileName == NULL) {
|
||||
logError("Error: %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
_length = length;
|
||||
_values = new uint8_t[_length];
|
||||
for (size_t i = 0; i < _length; ++i) {
|
||||
_values[i] = 0xFF;
|
||||
}
|
||||
|
||||
if (stat(_fileName, &fileInfo) != 0) {
|
||||
//File does not exist. Create it.
|
||||
logInfo("EEPROM file %s does not exist, creating new file.\n", _fileName);
|
||||
std::ofstream myFile(_fileName, std::ios::out | std::ios::binary);
|
||||
if (!myFile) {
|
||||
logError("Unable to create config file %s.\n", _fileName);
|
||||
return -1;
|
||||
}
|
||||
myFile.write((const char*)_values, _length);
|
||||
myFile.close();
|
||||
} else if (fileInfo.st_size < 0 || (size_t)fileInfo.st_size != _length) {
|
||||
logError("EEPROM file %s is not the correct size of %zu. Please remove the file and a new one will be created.\n",
|
||||
_fileName, _length);
|
||||
return -1;
|
||||
} else {
|
||||
//Read config into local memory.
|
||||
std::ifstream myFile(_fileName, std::ios::in | std::ios::binary);
|
||||
if (!myFile) {
|
||||
logError("Unable to open EEPROM file %s for reading.\n", _fileName);
|
||||
return -1;
|
||||
}
|
||||
myFile.read((char*)_values, _length);
|
||||
myFile.close();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SoftEeprom::destroy()
|
||||
{
|
||||
if (_values) {
|
||||
delete[] _values;
|
||||
}
|
||||
if (_fileName) {
|
||||
free(_fileName);
|
||||
}
|
||||
}
|
||||
|
||||
void SoftEeprom::readBlock(void* buf, void* addr, size_t length)
|
||||
@@ -90,7 +107,7 @@ void SoftEeprom::readBlock(void* buf, void* addr, size_t length)
|
||||
static bool config_to_mem = false;
|
||||
unsigned long int offs = reinterpret_cast<unsigned long int>(addr);
|
||||
|
||||
if (!config_to_mem) {
|
||||
if (!config_to_mem && length) {
|
||||
//Read config into local memory.
|
||||
std::ifstream myFile(_fileName, std::ios::in | std::ios::binary);
|
||||
if (!myFile) {
|
||||
@@ -144,6 +161,9 @@ void SoftEeprom::writeByte(int addr, uint8_t value)
|
||||
SoftEeprom& SoftEeprom::operator=(const SoftEeprom& other)
|
||||
{
|
||||
if (this != &other) {
|
||||
delete[] _values;
|
||||
free(_fileName);
|
||||
|
||||
_fileName = strdup(other._fileName);
|
||||
|
||||
_length = other._length;
|
||||
|
||||
Reference in New Issue
Block a user