knx/src/linux_platform.h

82 lines
2.2 KiB
C++

#pragma once
#ifdef __linux__
#include <string>
#include "knx/platform.h"
#define MAX_MEMORY_BLOCKS 6
typedef struct{
uint32_t ID;
size_t size;
uint8_t* data;
}MemoryBlock_t;
class LinuxPlatform: public Platform
{
using Platform::_memoryReference;
using Platform::memoryReference;
public:
LinuxPlatform();
virtual ~LinuxPlatform();
void cmdLineArgs(int argc, char** argv);
std::string flashFilePath();
void flashFilePath(const std::string path);
// ip stuff
uint32_t currentIpAddress() override;
uint32_t currentSubnetMask() override;
uint32_t currentDefaultGateway() override;
void macAddress(uint8_t* addr) override;
// basic stuff
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
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
bool writeNVMemory(uint8_t* addr,uint8_t data);
uint8_t readNVMemory(uint8_t* addr);
uint8_t* allocNVMemory(size_t size,uint32_t ID);
uint8_t* reloadNVMemory(uint32_t ID, bool pointerAccess);
void finishNVMemory();
void freeNVMemory(uint32_t ID);
uint8_t* allocMemory(size_t size) override;
void freeMemory(uint8_t* ptr) override;
void cmdlineArgs(int argc, char** argv);
private:
uint32_t _multicastAddr = -1;
uint16_t _port = -1;
int _socketFd = -1;
void doMemoryMapping();
uint8_t* _mappedFile = 0;
int _fd = -1;
uint8_t* _currentMaxMem = 0;
std::string _flashFilePath = "flash.bin";
char** _args = 0;
void initNVMemory();
MemoryBlock_t _memoryBlocks[MAX_MEMORY_BLOCKS];
bool _MemoryInitialized = false;
};
#endif