mirror of
https://github.com/thelsing/knx.git
synced 2026-02-23 13:50:35 +01:00
add reboot to linux platform
This commit is contained in:
@@ -155,15 +155,9 @@ void BauSystemB::memoryReadIndication(Priority priority, HopCountType hopType, u
|
||||
|
||||
void BauSystemB::restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap)
|
||||
{
|
||||
|
||||
// Flush the EEPROM before resetting
|
||||
_memory.writeMemory();
|
||||
_platform.restart();
|
||||
|
||||
// for platforms that don't really restart
|
||||
_memory.readMemory();
|
||||
_deviceObj.progMode(false);
|
||||
_configured = true;
|
||||
}
|
||||
|
||||
void BauSystemB::authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, uint32_t key)
|
||||
|
||||
@@ -29,10 +29,18 @@
|
||||
|
||||
#define MAX_MEM 4096
|
||||
|
||||
LinuxPlatform::LinuxPlatform()
|
||||
LinuxPlatform::LinuxPlatform(int argc, char** argv)
|
||||
{
|
||||
Platform::_memoryReference = (uint8_t*)malloc(MAX_MEM);
|
||||
_currentMaxMem = Platform::_memoryReference;
|
||||
_args = new char*[argc + 1];
|
||||
memcpy(_args, argv, argc * sizeof(char*));
|
||||
_args[argc] = 0;
|
||||
}
|
||||
|
||||
LinuxPlatform::~LinuxPlatform()
|
||||
{
|
||||
delete[] _args;
|
||||
}
|
||||
|
||||
uint32_t LinuxPlatform::currentIpAddress()
|
||||
@@ -79,13 +87,7 @@ void LinuxPlatform::macAddress(uint8_t* data)
|
||||
|
||||
void LinuxPlatform::restart()
|
||||
{
|
||||
// clear alocated memory
|
||||
if(_memoryReference != 0)
|
||||
{
|
||||
free(_memoryReference);
|
||||
Platform::_memoryReference = (uint8_t*)malloc(MAX_MEM);
|
||||
_currentMaxMem = Platform::_memoryReference;
|
||||
}
|
||||
execv(_args[0], _args);
|
||||
}
|
||||
|
||||
void LinuxPlatform::fatalError()
|
||||
|
||||
@@ -10,8 +10,9 @@ class LinuxPlatform: public Platform
|
||||
using Platform::_memoryReference;
|
||||
using Platform::memoryReference;
|
||||
public:
|
||||
LinuxPlatform();
|
||||
|
||||
LinuxPlatform(int argc, char** argv);
|
||||
virtual ~LinuxPlatform();
|
||||
|
||||
std::string flashFilePath();
|
||||
void flashFilePath(const std::string path);
|
||||
|
||||
@@ -27,27 +28,29 @@ public:
|
||||
void restart() override;
|
||||
void fatalError() override;
|
||||
|
||||
//multicast
|
||||
void setupMultiCast(uint32_t addr, uint16_t port) override;
|
||||
void closeMultiCast() override;
|
||||
bool sendBytes(uint8_t* buffer, uint16_t len) override;
|
||||
int readBytes(uint8_t* buffer, uint16_t maxLen) override;
|
||||
|
||||
//uart
|
||||
//multicast
|
||||
void setupMultiCast(uint32_t addr, uint16_t port) override;
|
||||
void closeMultiCast() override;
|
||||
bool sendBytes(uint8_t* buffer, uint16_t len) override;
|
||||
int readBytes(uint8_t* buffer, uint16_t maxLen) override;
|
||||
|
||||
//uart
|
||||
void setupUart() override;
|
||||
void closeUart() override;
|
||||
int uartAvailable() override;
|
||||
size_t writeUart(const uint8_t data) override;
|
||||
size_t writeUart(const uint8_t *buffer, size_t size) override;
|
||||
int readUart() override;
|
||||
size_t readBytesUart(uint8_t *buffer, size_t length) override;
|
||||
|
||||
//memory
|
||||
uint8_t* getEepromBuffer(uint16_t size) override;
|
||||
void commitToEeprom() override;
|
||||
uint8_t* allocMemory(size_t size) override;
|
||||
void freeMemory(uint8_t* ptr) override;
|
||||
private:
|
||||
size_t readBytesUart(uint8_t *buffer, size_t length) override;
|
||||
|
||||
//memory
|
||||
uint8_t* getEepromBuffer(uint16_t size) override;
|
||||
void commitToEeprom() override;
|
||||
uint8_t* allocMemory(size_t size) override;
|
||||
void freeMemory(uint8_t* ptr) override;
|
||||
void cmdlineArgs(int argc, char** argv);
|
||||
|
||||
private:
|
||||
uint32_t _multicastAddr;
|
||||
uint16_t _port;
|
||||
int _socketFd = -1;
|
||||
@@ -56,6 +59,7 @@ private:
|
||||
int _fd = -1;
|
||||
uint8_t* _currentMaxMem = 0;
|
||||
std::string _flashFilePath = "flash.bin";
|
||||
char** _args;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user