add reboot to linux platform

This commit is contained in:
Thomas Kunze
2019-05-31 23:44:03 +02:00
parent a35c0616ac
commit c898f824b8
7 changed files with 87 additions and 65 deletions

View File

@@ -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)

View File

@@ -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()

View File

@@ -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