remove mdelay and millis from platform

This commit is contained in:
Thomas Kunze
2019-08-22 21:31:02 +02:00
parent da5466ab02
commit db740d6687
18 changed files with 204 additions and 398 deletions

View File

@@ -31,16 +31,6 @@ void EspPlatform::macAddress(uint8_t * addr)
wifi_get_macaddr(STATION_IF, addr);
}
uint32_t EspPlatform::millis()
{
return ::millis();
}
void EspPlatform::mdelay(uint32_t millis)
{
delay(millis);
}
void EspPlatform::restart()
{
Serial.println("restart");

View File

@@ -1,27 +1,25 @@
#ifdef ARDUINO_ARCH_ESP8266
#include "knx/platform.h"
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define SerialDBG Serial
class EspPlatform : public Platform
{
public:
EspPlatform();
// ip stuff
uint32_t currentIpAddress();
uint32_t currentSubnetMask();
uint32_t currentDefaultGateway();
void macAddress(uint8_t* addr);
// basic stuff
uint32_t millis();
void mdelay(uint32_t millis);
void restart();
void fatalError();
#ifdef ARDUINO_ARCH_ESP8266
#include "knx/platform.h"
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#define SerialDBG Serial
class EspPlatform : public Platform
{
public:
EspPlatform();
// ip stuff
uint32_t currentIpAddress();
uint32_t currentSubnetMask();
uint32_t currentDefaultGateway();
void macAddress(uint8_t* addr);
// basic stuff
void restart();
void fatalError();
//multicast
void setupMultiCast(uint32_t addr, uint16_t port);
void closeMultiCast();
@@ -29,21 +27,21 @@ public:
int readBytes(uint8_t* buffer, uint16_t maxLen);
//uart
void setupUart();
void closeUart();
int uartAvailable();
size_t writeUart(const uint8_t data);
size_t writeUart(const uint8_t *buffer, size_t size);
int readUart();
void setupUart();
void closeUart();
int uartAvailable();
size_t writeUart(const uint8_t data);
size_t writeUart(const uint8_t *buffer, size_t size);
int readUart();
size_t readBytesUart(uint8_t *buffer, size_t length);
//memory
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
private:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
WiFiUDP _udp;
};
private:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
WiFiUDP _udp;
};
#endif

View File

@@ -5,7 +5,7 @@
BauSystemB::BauSystemB(Platform& platform): _memory(platform), _addrTable(platform),
_assocTable(platform), _groupObjTable(platform), _appProgram(platform),
_platform(platform), _appLayer(_assocTable, *this),
_transLayer(_appLayer, _addrTable, _platform), _netLayer(_transLayer)
_transLayer(_appLayer, _addrTable), _netLayer(_transLayer)
{
_appLayer.transportLayer(_transLayer);
_transLayer.networkLayer(_netLayer);

View File

@@ -14,6 +14,9 @@
#define DEC 10
#define HEX 16
void delay(uint32_t millis);
uint32_t millis();
#elif ARDUINO_ARCH_SAMD
#include <Arduino.h>
#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )

View File

@@ -35,7 +35,7 @@ bool IpDataLinkLayer::sendFrame(CemiFrame& frame)
bool success = sendBytes(buffer, length);
// only send 50 packet per second: see KNX 3.2.6 p.6
_platform.mdelay(20);
delay(20);
dataConReceived(frame, success);
delete[] buffer;
return success;

View File

@@ -13,10 +13,10 @@ class Platform
virtual uint32_t currentDefaultGateway() = 0;
virtual void macAddress(uint8_t* data) = 0;
virtual uint32_t millis() = 0;
//virtual uint32_t millis() = 0;
virtual void restart() = 0;
virtual void fatalError() = 0;
virtual void mdelay(uint32_t millis) = 0;
//virtual void mdelay(uint32_t millis) = 0;
virtual void setupMultiCast(uint32_t addr, uint16_t port) = 0;
virtual void closeMultiCast() = 0;

View File

@@ -115,13 +115,13 @@ void TpUartDataLinkLayer::loop()
if (sendSingleFrameByte() == false)
{
_waitConfirm = true;
_waitConfirmStartTime = _platform.millis();
_waitConfirmStartTime = millis();
_loopState = IDLE;
}
break;
case RX_FIRST_BYTE:
rxByte = _platform.readUart();
_lastByteRxTime = _platform.millis();
_lastByteRxTime = millis();
_RxByteCnt = 0;
_xorSum = 0;
if ((rxByte & L_DATA_MASK) == L_DATA_STANDARD_IND)
@@ -208,7 +208,7 @@ void TpUartDataLinkLayer::loop()
_loopState = IDLE;
break;
case RX_L_DATA:
if (_platform.millis() - _lastByteRxTime > BYTE_TIMEOUT)
if (millis() - _lastByteRxTime > BYTE_TIMEOUT)
{
_RxByteCnt = 0;
_loopState = IDLE;
@@ -217,7 +217,7 @@ void TpUartDataLinkLayer::loop()
}
if (!_platform.uartAvailable())
break;
_lastByteRxTime = _platform.millis();
_lastByteRxTime = millis();
rxByte = _platform.readUart();
if (_RxByteCnt == MAX_KNX_TELEGRAM_SIZE)
@@ -314,7 +314,7 @@ void TpUartDataLinkLayer::loop()
if (!_platform.uartAvailable())
break;
rxByte = _platform.readUart();
_lastByteRxTime = _platform.millis();
_lastByteRxTime = millis();
if ((rxByte & L_DATA_CON_MASK) == L_DATA_CON)
{
//println("L_DATA_CON received");
@@ -343,7 +343,7 @@ void TpUartDataLinkLayer::loop()
if (_waitConfirm)
{
if (_platform.millis() - _waitConfirmStartTime > CONFIRM_TIMEOUT)
if (millis() - _waitConfirmStartTime > CONFIRM_TIMEOUT)
{
println("L_DATA_CON not received within expected time");
uint8_t cemiBuffer[MAX_KNX_TELEGRAM_SIZE];
@@ -374,13 +374,13 @@ bool TpUartDataLinkLayer::resetChip()
{
uint8_t cmd = U_RESET_REQ;
_platform.writeUart(cmd);
_waitConfirmStartTime = _platform.millis();
_waitConfirmStartTime = millis();
while (true)
{
int resp = _platform.readUart();
if (resp == U_RESET_IND)
return true;
else if (_platform.millis() - _waitConfirmStartTime > RESET_TIMEOUT)
else if (millis() - _waitConfirmStartTime > RESET_TIMEOUT)
return false;
}
}

View File

@@ -4,10 +4,11 @@
#include "network_layer.h"
#include "application_layer.h"
#include "platform.h"
#include "bits.h"
#include <stdio.h>
TransportLayer::TransportLayer(ApplicationLayer& layer, AddressTableObject& gat, Platform& platform): _savedFrame(0),
_savedFrameConnecting(0), _applicationLayer(layer), _groupAddressTable(gat), _platform(platform)
TransportLayer::TransportLayer(ApplicationLayer& layer, AddressTableObject& gat): _savedFrame(0),
_savedFrameConnecting(0), _applicationLayer(layer), _groupAddressTable(gat)
{
_currentState = Closed;
}
@@ -528,13 +529,13 @@ void TransportLayer::ackTimeoutIndication()
void TransportLayer::loop()
{
uint32_t millis = _platform.millis();
if (_connectionTimeoutEnabled
&& (millis - _connectionTimeoutStartMillis) > _connectionTimeoutMillis)
uint32_t milliseconds = millis();
if (_connectionTimeoutEnabled
&& (milliseconds - _connectionTimeoutStartMillis) > _connectionTimeoutMillis)
connectionTimeoutIndication();
if (_ackTimeoutEnabled
&& (millis - _ackTimeoutStartMillis) > _ackTimeoutMillis)
&& (milliseconds - _ackTimeoutStartMillis) > _ackTimeoutMillis)
ackTimeoutIndication();
if (_savedConnectingValid)
@@ -696,7 +697,7 @@ void TransportLayer::A15(Priority priority, uint16_t tsap)
void TransportLayer::enableConnectionTimeout()
{
_connectionTimeoutStartMillis = _platform.millis();
_connectionTimeoutStartMillis = millis();
_connectionTimeoutEnabled = true;
}
@@ -707,7 +708,7 @@ void TransportLayer::disableConnectionTimeout()
void TransportLayer::enableAckTimeout()
{
_ackTimeoutStartMillis = _platform.millis();
_ackTimeoutStartMillis = millis();
_ackTimeoutEnabled = true;
}

View File

@@ -16,7 +16,7 @@ enum StateType { Closed, OpenIdle, OpenWait, Connecting };
class TransportLayer
{
public:
TransportLayer(ApplicationLayer& layer, AddressTableObject& gat, Platform& platform);
TransportLayer(ApplicationLayer& layer, AddressTableObject& gat);
void networkLayer(NetworkLayer& layer);
#pragma region from network layer
@@ -114,5 +114,4 @@ private:
ApplicationLayer& _applicationLayer;
AddressTableObject& _groupAddressTable;
NetworkLayer* _networkLayer;
Platform& _platform;
};

View File

@@ -58,7 +58,7 @@ uint32_t LinuxPlatform::currentDefaultGateway()
return 0;
}
uint32_t LinuxPlatform::millis()
uint32_t millis()
{
struct timespec spec;
@@ -66,7 +66,7 @@ uint32_t LinuxPlatform::millis()
return spec.tv_sec * 1000 + round(spec.tv_nsec / 1.0e6);
}
void LinuxPlatform::mdelay(uint32_t millis)
void delay(uint32_t millis)
{
struct timespec ts;
ts.tv_sec = millis / 1000;

View File

@@ -23,8 +23,6 @@ public:
void macAddress(uint8_t* addr) override;
// basic stuff
uint32_t millis() override;
void mdelay(uint32_t millis) override;
void restart() override;
void fatalError() override;

View File

@@ -33,16 +33,6 @@ void SamdPlatform::macAddress(uint8_t * addr)
// not needed
}
uint32_t SamdPlatform::millis()
{
return::millis();
}
void SamdPlatform::mdelay(uint32_t millis)
{
delay(millis);
}
void SamdPlatform::restart()
{
SerialDBG.println("restart");

View File

@@ -1,29 +1,27 @@
#include "knx/platform.h"
#include "Arduino.h"
#ifdef ARDUINO_ARCH_SAMD
#define SerialDBG SerialUSB
#define SerialKNX Serial1
class SamdPlatform : public Platform
{
public:
SamdPlatform();
// ip stuff
uint32_t currentIpAddress();
uint32_t currentSubnetMask();
uint32_t currentDefaultGateway();
void macAddress(uint8_t* addr);
// basic stuff
uint32_t millis();
void mdelay(uint32_t millis);
void restart();
void fatalError();
#include "knx/platform.h"
#include "Arduino.h"
#ifdef ARDUINO_ARCH_SAMD
#define SerialDBG SerialUSB
#define SerialKNX Serial1
class SamdPlatform : public Platform
{
public:
SamdPlatform();
// ip stuff
uint32_t currentIpAddress();
uint32_t currentSubnetMask();
uint32_t currentDefaultGateway();
void macAddress(uint8_t* addr);
// basic stuff
void restart();
void fatalError();
//multicast
void setupMultiCast(uint32_t addr, uint16_t port);
void closeMultiCast();
@@ -31,20 +29,20 @@ public:
int readBytes(uint8_t* buffer, uint16_t maxLen);
//uart
virtual void setupUart();
virtual void closeUart();
virtual int uartAvailable();
virtual size_t writeUart(const uint8_t data);
virtual size_t writeUart(const uint8_t *buffer, size_t size);
virtual int readUart();
virtual void setupUart();
virtual void closeUart();
virtual int uartAvailable();
virtual size_t writeUart(const uint8_t data);
virtual size_t writeUart(const uint8_t *buffer, size_t size);
virtual int readUart();
virtual size_t readBytesUart(uint8_t *buffer, size_t length);
//memory
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
private:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
};
private:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
};
#endif