Merge pull request #6 from thelsing/master

Update Fork
This commit is contained in:
Bernator 2019-09-08 16:33:21 +02:00 committed by GitHub
commit 36c2cc2e29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 1689 additions and 1386 deletions

View File

@ -42,9 +42,10 @@ bool trigger = false;
// Entry point for the example
void setup(void)
{
Serial.begin(115200);
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
delay(5000);
Serial.println("start");
SerialDBG.println("start");
#ifdef ARDUINO_ARCH_ESP8266
WiFiManager wifiManager;
@ -91,18 +92,18 @@ void setup(void)
if (knx.configured())
{
cyclSend = knx.paramInt(0);
Serial.print("Zykl. send:");
Serial.println(cyclSend);
goRawTemperature.dataPointType(Dpt(9, 0));
goPressure.dataPointType(Dpt(9, 0));
goRawHumidity.dataPointType(Dpt(9, 0));
goGasResistance.dataPointType(Dpt(9, 0));
goIaqEstimate.dataPointType(Dpt(9, 0));
goIaqAccurace.dataPointType(Dpt(9, 0));
goTemperature.dataPointType(Dpt(9, 0));
goHumidity.dataPointType(Dpt(9, 0));
goCo2Ppm.dataPointType(Dpt(9, 0));
goTriggerSample.dataPointType(Dpt(1, 0));
SerialDBG.print("Zykl. send:");
SerialDBG.println(cyclSend);
goRawTemperature.dataPointType(Dpt(9, 1));
goPressure.dataPointType(Dpt(9, 1));
goRawHumidity.dataPointType(Dpt(9, 1));
goGasResistance.dataPointType(Dpt(9, 1));
goIaqEstimate.dataPointType(Dpt(9, 1));
goIaqAccurace.dataPointType(Dpt(9, 1));
goTemperature.dataPointType(Dpt(9, 1));
goHumidity.dataPointType(Dpt(9, 1));
goCo2Ppm.dataPointType(Dpt(9, 1));
goTriggerSample.dataPointType(Dpt(1, 1));
}
// start the framework.
@ -111,7 +112,7 @@ void setup(void)
iaqSensor.updateSubscription(sensorList, sizeof(sensorList)/sizeof(bsec_virtual_sensor_t), BSEC_SAMPLE_RATE_LP);
checkIaqSensorStatus();
String output = "Timestamp [ms], raw temperature [°C], pressure [hPa], raw relative humidity [%], gas [Ohm], IAQ, IAQ accuracy, temperature [°C], relative humidity [%], CO2";
Serial.println(output);
SerialDBG.println(output);
}
// Function that is looped forever
@ -149,7 +150,7 @@ void loop(void)
output += ", " + String(iaqSensor.runInStatus);
output += ", " + String(iaqSensor.stabStatus);
Serial.println(output);
SerialDBG.println(output);
updateState();
if (sendCounter++ == cyclSend || trigger)
@ -179,26 +180,26 @@ void checkIaqSensorStatus(void)
if (iaqSensor.status != BSEC_OK) {
if (iaqSensor.status < BSEC_OK) {
String output = "BSEC error code : " + String(iaqSensor.status);
Serial.println(output);
SerialDBG.println(output);
for (;;)
errLeds(); /* Halt in case of failure */
}
else {
String output = "BSEC warning code : " + String(iaqSensor.status);
Serial.println(output);
SerialDBG.println(output);
}
}
if (iaqSensor.bme680Status != BME680_OK) {
if (iaqSensor.bme680Status < BME680_OK) {
String output = "BME680 error code : " + String(iaqSensor.bme680Status);
Serial.println(output);
SerialDBG.println(output);
for (;;)
errLeds(); /* Halt in case of failure */
}
else {
String output = "BME680 warning code : " + String(iaqSensor.bme680Status);
Serial.println(output);
SerialDBG.println(output);
}
}
}
@ -215,10 +216,10 @@ void errLeds(void)
uint8_t* loadBme680State(uint8_t* buffer)
{
// Existing state in EEPROM
Serial.println("Reading state from EEPROM");
SerialDBG.println("Reading state from EEPROM");
for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) {
Serial.println(buffer[i], HEX);
SerialDBG.println(buffer[i], HEX);
}
iaqSensor.setState(buffer);
@ -231,10 +232,10 @@ uint8_t* saveBme680State(uint8_t* buffer)
iaqSensor.getState(buffer);
checkIaqSensorStatus();
Serial.println("Writing state to EEPROM");
SerialDBG.println("Writing state to EEPROM");
for (uint8_t i = 0; i < BSEC_MAX_STATE_BLOB_SIZE; i++) {
Serial.println(buffer[i], HEX);
SerialDBG.println(buffer[i], HEX);
}
return buffer + BSEC_MAX_STATE_BLOB_SIZE;
}
@ -265,8 +266,8 @@ void updateState(void)
// callback from trigger-GO
void triggerCallback(GroupObject& go)
{
Serial.println("trigger");
Serial.println((bool)go.value());
SerialDBG.println("trigger");
SerialDBG.println((bool)go.value());
if (!go.value())
return;
@ -274,7 +275,7 @@ void triggerCallback(GroupObject& go)
/* We call bsec_update_subscription() in order to instruct BSEC to perform an extra measurement at the next
possible time slot
*/
Serial.println("Triggering ULP plus.");
SerialDBG.println("Triggering ULP plus.");
bsec_virtual_sensor_t sensorList[] = {
BSEC_OUTPUT_IAQ, BSEC_OUTPUT_CO2_EQUIVALENT
};

View File

@ -55,6 +55,7 @@ void resetCallback(GroupObject& go)
void setup()
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
randomSeed(millis());
@ -71,6 +72,10 @@ void setup()
{
// register callback for reset GO
goReset.callback(resetCallback);
goReset.dataPointType(DPT_Trigger);
goCurrent.dataPointType(DPT_Value_Temp);
goMin.dataPointType(DPT_Value_Temp);
goMax.dataPointType(DPT_Value_Temp);
SerialDBG.print("Timeout: ");
SerialDBG.println(knx.paramByte(0));
@ -84,7 +89,7 @@ void setup()
SerialDBG.println(knx.paramByte(4));
}
// pin or GPIO the programming led is connected to. Default is LED_BUILDIN
// pin or GPIO the programming led is connected to. Default is LED_BUILTIN
// knx.ledPin(LED_BUILTIN);
// is the led active on HIGH or low? Default is LOW
// knx.ledPinActiveOn(HIGH);

View File

@ -22,6 +22,7 @@ uint32_t cyclSend = 0;
void setup(void)
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
delay(5000);
SerialDBG.println("start");

View File

@ -25,6 +25,7 @@ void switchCallback(GroupObject& go)
void setup()
{
SerialDBG.begin(115200);
ArduinoPlatform::SerialDebug = SerialDBG;
#ifdef ARDUINO_ARCH_ESP8266
WiFiManager wifiManager;

View File

@ -6,19 +6,18 @@
#include <stdlib.h>
#include <stdio.h>
KnxFacade* knx = 0;
Platform* platform = 0;
KnxFacade<LinuxPlatform, Bau57B0> knx;
long lastsend = 0;
#define CURR knx->getGroupObject(1)
#define MAX knx->getGroupObject(2)
#define MIN knx->getGroupObject(3)
#define RESET knx->getGroupObject(4)
#define CURR knx.getGroupObject(1)
#define MAX knx.getGroupObject(2)
#define MIN knx.getGroupObject(3)
#define RESET knx.getGroupObject(4)
void measureTemp()
{
long now = platform->millis();
long now = millis();
if ((now - lastsend) < 10000)
return;
@ -52,7 +51,7 @@ void resetCallback(GroupObject& go)
void appLoop()
{
if (!knx->configured())
if (!knx.configured())
return;
measureTemp();
@ -61,12 +60,12 @@ void appLoop()
void setup()
{
srand((unsigned int)time(NULL));
knx->readMemory();
knx.readMemory();
if (knx->induvidualAddress() == 0)
knx->progMode(true);
if (knx.induvidualAddress() == 0)
knx.progMode(true);
if (knx->configured())
if (knx.configured())
{
CURR.dataPointType(Dpt(9, 1));
MIN.dataPointType(Dpt(9, 1));
@ -75,28 +74,26 @@ void setup()
MAX.valueNoSend(-273.0);
RESET.dataPointType(Dpt(1, 15));
RESET.callback(resetCallback);
printf("Timeout: %d\n", knx->paramWord(0));
printf("Zykl. senden: %d\n", knx->paramByte(2));
printf("Min/Max senden: %d\n", knx->paramByte(3));
printf("Aenderung senden: %d\n", knx->paramByte(4));
printf("Abgleich %d\n", knx->paramByte(5));
printf("Timeout: %d\n", knx.paramWord(0));
printf("Zykl. senden: %d\n", knx.paramByte(2));
printf("Min/Max senden: %d\n", knx.paramByte(3));
printf("Aenderung senden: %d\n", knx.paramByte(4));
printf("Abgleich %d\n", knx.paramByte(5));
}
knx->start();
knx.start();
}
int main(int argc, char **argv)
{
platform = new LinuxPlatform(argc, argv);
Bau57B0 bau(*platform);
knx = new KnxFacade(bau);
knx.platform().cmdLineArgs(argc, argv);
setup();
while (1)
{
knx->loop();
if(knx->configured())
knx.loop();
if(knx.configured())
appLoop();
platform->mdelay(100);
delay(100);
}
}

270
src/arduino_platform.cpp Normal file
View File

@ -0,0 +1,270 @@
#include "arduino_platform.h"
#include <knx/bits.h>
#include <Arduino.h>
Stream& ArduinoPlatform::SerialDebug = Serial;
ArduinoPlatform::ArduinoPlatform(HardwareSerial& knxSerial) : _knxSerial(knxSerial)
{
}
uint32_t ArduinoPlatform::currentIpAddress()
{
// not needed
return 0;
}
uint32_t ArduinoPlatform::currentSubnetMask()
{
// not needed
return 0;
}
uint32_t ArduinoPlatform::currentDefaultGateway()
{
// not needed
return 0;
}
void ArduinoPlatform::macAddress(uint8_t * addr)
{
// not needed
}
void ArduinoPlatform::fatalError()
{
const int period = 200;
while (true)
{
#ifdef LED_BUILTIN
if ((millis() % period) > (period / 2))
digitalWrite(LED_BUILTIN, HIGH);
else
digitalWrite(LED_BUILTIN, LOW);
#endif
}
}
void ArduinoPlatform::setupMultiCast(uint32_t addr, uint16_t port)
{
//not needed
}
void ArduinoPlatform::closeMultiCast()
{
//not needed
}
bool ArduinoPlatform::sendBytes(uint8_t * buffer, uint16_t len)
{
//not needed
}
int ArduinoPlatform::readBytes(uint8_t * buffer, uint16_t maxLen)
{
//not needed
return 0;
}
void ArduinoPlatform::knxUart( HardwareSerial& serial )
{
_knxSerial = serial;
}
HardwareSerial& ArduinoPlatform::knxUart()
{
return _knxSerial;
}
void ArduinoPlatform::setupUart()
{
_knxSerial.begin(19200, SERIAL_8E1);
while (!_knxSerial)
;
}
void ArduinoPlatform::closeUart()
{
_knxSerial.end();
}
int ArduinoPlatform::uartAvailable()
{
return _knxSerial.available();
}
size_t ArduinoPlatform::writeUart(const uint8_t data)
{
//printHex("<p", &data, 1);
return _knxSerial.write(data);
}
size_t ArduinoPlatform::writeUart(const uint8_t *buffer, size_t size)
{
//printHex("<p", buffer, size);
return _knxSerial.write(buffer, size);
}
int ArduinoPlatform::readUart()
{
int val = _knxSerial.read();
//if(val > 0)
// printHex("p>", (uint8_t*)&val, 1);
return val;
}
size_t ArduinoPlatform::readBytesUart(uint8_t *buffer, size_t length)
{
size_t toRead = length;
uint8_t* pos = buffer;
while (toRead > 0)
{
size_t val = _knxSerial.readBytes(pos, toRead);
pos += val;
toRead -= val;
}
//printHex("p>", buffer, length);
return length;
}
void print(const char* s)
{
ArduinoPlatform::SerialDebug.print(s);
}
void print(char c)
{
ArduinoPlatform::SerialDebug.print(c);
}
void print(unsigned char num)
{
ArduinoPlatform::SerialDebug.print(num);
}
void print(unsigned char num, int base)
{
ArduinoPlatform::SerialDebug.print(num, base);
}
void print(int num)
{
ArduinoPlatform::SerialDebug.print(num);
}
void print(int num, int base)
{
ArduinoPlatform::SerialDebug.print(num, base);
}
void print(unsigned int num)
{
ArduinoPlatform::SerialDebug.print(num);
}
void print(unsigned int num, int base)
{
ArduinoPlatform::SerialDebug.print(num, base);
}
void print(long num)
{
ArduinoPlatform::SerialDebug.print(num);
}
void print(long num, int base)
{
ArduinoPlatform::SerialDebug.print(num, base);
}
void print(unsigned long num)
{
ArduinoPlatform::SerialDebug.print(num);
}
void print(unsigned long num, int base)
{
ArduinoPlatform::SerialDebug.print(num, base);
}
void print(double num)
{
ArduinoPlatform::SerialDebug.print(num);
}
void println(const char* s)
{
ArduinoPlatform::SerialDebug.println(s);
}
void println(char c)
{
ArduinoPlatform::SerialDebug.println(c);
}
void println(unsigned char num)
{
ArduinoPlatform::SerialDebug.println(num);
}
void println(unsigned char num, int base)
{
ArduinoPlatform::SerialDebug.println(num, base);
}
void println(int num)
{
ArduinoPlatform::SerialDebug.println(num);
}
void println(int num, int base)
{
ArduinoPlatform::SerialDebug.println(num, base);
}
void println(unsigned int num)
{
ArduinoPlatform::SerialDebug.println(num);
}
void println(unsigned int num, int base)
{
ArduinoPlatform::SerialDebug.println(num, base);
}
void println(long num)
{
ArduinoPlatform::SerialDebug.println(num);
}
void println(long num, int base)
{
ArduinoPlatform::SerialDebug.println(num, base);
}
void println(unsigned long num)
{
ArduinoPlatform::SerialDebug.println(num);
}
void println(unsigned long num, int base)
{
ArduinoPlatform::SerialDebug.println(num, base);
}
void println(double num)
{
ArduinoPlatform::SerialDebug.println(num);
}
void println(void)
{
ArduinoPlatform::SerialDebug.println();
}

44
src/arduino_platform.h Normal file
View File

@ -0,0 +1,44 @@
#include "knx/platform.h"
#include "Arduino.h"
extern Stream& _serialDBG;
class ArduinoPlatform : public Platform
{
public:
ArduinoPlatform(HardwareSerial& knxSerial);
// ip stuff
uint32_t currentIpAddress();
uint32_t currentSubnetMask();
uint32_t currentDefaultGateway();
void macAddress(uint8_t* addr);
// basic stuff
void fatalError();
//multicast
void setupMultiCast(uint32_t addr, uint16_t port);
void closeMultiCast();
bool sendBytes(uint8_t* buffer, uint16_t len);
int readBytes(uint8_t* buffer, uint16_t maxLen);
//uart
virtual void knxUart( HardwareSerial& serial );
virtual HardwareSerial& knxUart();
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);
static Stream& SerialDebug;
protected:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
HardwareSerial& _knxSerial;
};

98
src/esp32_platform.cpp Normal file
View File

@ -0,0 +1,98 @@
#include "esp32_platform.h"
#ifdef ARDUINO_ARCH_ESP32
#include <Arduino.h>
#include <EEPROM.h>
#include "knx/bits.h"
Esp32Platform::Esp32Platform() : ArduinoPlatform(Serial1)
{
}
Esp32Platform::Esp32Platform( HardwareSerial& s) : ArduinoPlatform(s)
{
}
uint32_t Esp32Platform::currentIpAddress()
{
return WiFi.localIP();
}
uint32_t Esp32Platform::currentSubnetMask()
{
return WiFi.subnetMask();
}
uint32_t Esp32Platform::currentDefaultGateway()
{
return WiFi.gatewayIP();
}
void Esp32Platform::macAddress(uint8_t * addr)
{
esp_wifi_get_mac(WIFI_IF_STA, addr);
}
void Esp32Platform::restart()
{
Serial.println("restart");
ESP.restart();
}
void Esp32Platform::setupMultiCast(uint32_t addr, uint16_t port)
{
_mulitcastAddr = htonl(addr);
_mulitcastPort = port;
IPAddress mcastaddr(_mulitcastAddr);
Serial.printf("setup multicast addr: %s port: %d ip: %s\n", mcastaddr.toString().c_str(), port,
WiFi.localIP().toString().c_str());
uint8_t result = _udp.beginMulticast(mcastaddr, port);
Serial.printf("result %d\n", result);
}
void Esp32Platform::closeMultiCast()
{
_udp.stop();
}
bool Esp32Platform::sendBytes(uint8_t * buffer, uint16_t len)
{
//printHex("<- ",buffer, len);
int result = 0;
result = _udp.beginMulticastPacket();
result = _udp.write(buffer, len);
result = _udp.endPacket();
return true;
}
int Esp32Platform::readBytes(uint8_t * buffer, uint16_t maxLen)
{
int len = _udp.parsePacket();
if (len == 0)
return 0;
if (len > maxLen)
{
Serial.printf("udp buffer to small. was %d, needed %d\n", maxLen, len);
fatalError();
}
_udp.read(buffer, len);
//printHex("-> ", buffer, len);
return len;
}
uint8_t * Esp32Platform::getEepromBuffer(uint16_t size)
{
EEPROM.begin(size);
return EEPROM.getDataPtr();
}
void Esp32Platform::commitToEeprom()
{
EEPROM.commit();
}
#endif

38
src/esp32_platform.h Normal file
View File

@ -0,0 +1,38 @@
#ifdef ARDUINO_ARCH_ESP32
#include "arduino_platform.h"
#include <WiFi.h>
#include <WiFiUdp.h>
#define SerialDBG Serial
class Esp32Platform : public ArduinoPlatform
{
using ArduinoPlatform::_mulitcastAddr;
using ArduinoPlatform::_mulitcastPort;
public:
Esp32Platform();
Esp32Platform( HardwareSerial& s);
// ip stuff
uint32_t currentIpAddress() override;
uint32_t currentSubnetMask() override;
uint32_t currentDefaultGateway() override;
void macAddress(uint8_t* addr) override;
// basic stuff
void restart();
//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;
//memory
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
private:
WiFiUDP _udp;
};
#endif

View File

@ -7,7 +7,11 @@
#include "knx/bits.h"
EspPlatform::EspPlatform()
EspPlatform::EspPlatform() : ArduinoPlatform(Serial)
{
}
EspPlatform::EspPlatform( HardwareSerial& s) : ArduinoPlatform(s)
{
}
@ -31,34 +35,12 @@ 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");
ESP.reset();
}
void EspPlatform::fatalError()
{
const int period = 200;
while (true)
{
if ((millis() % period) > (period / 2))
digitalWrite(LED_BUILTIN, HIGH);
else
digitalWrite(LED_BUILTIN, LOW);
}
}
void EspPlatform::setupMultiCast(uint32_t addr, uint16_t port)
{
_mulitcastAddr = htonl(addr);
@ -113,225 +95,4 @@ void EspPlatform::commitToEeprom()
{
EEPROM.commit();
}
void EspPlatform::setupUart()
{
Serial.begin(19200, SERIAL_8E1);
while (!Serial) ;
}
void EspPlatform::closeUart()
{
Serial.end();
}
int EspPlatform::uartAvailable()
{
return Serial.available();
}
size_t EspPlatform::writeUart(const uint8_t data)
{
printHex("<p", &data, 1);
return Serial.write(data);
}
size_t EspPlatform::writeUart(const uint8_t *buffer, size_t size)
{
printHex("<p", buffer, size);
return Serial.write(buffer, size);
}
int EspPlatform::readUart()
{
int val = Serial.read();
if (val > 0)
printHex("p>", (uint8_t*)&val, 1);
return val;
}
size_t EspPlatform::readBytesUart(uint8_t *buffer, size_t length)
{
size_t toRead = length;
uint8_t* pos = buffer;
while (toRead > 0)
{
size_t val = Serial.readBytes(pos, toRead);
pos += val;
toRead -= val;
}
printHex("p>", buffer, length);
return length;
}
void print(const char* s)
{
Serial.printf("%s", s);
}
void print(char c)
{
Serial.printf("%c", c);
}
void print(unsigned char num)
{
print(num, DEC);
}
void print(unsigned char num, int base)
{
if (base == HEX)
Serial.printf("%X", num);
else
Serial.printf("%d", num);
}
void print(int num)
{
print(num, DEC);
}
void print(int num, int base)
{
if (base == HEX)
Serial.printf("%X", num);
else
Serial.printf("%d", num);
}
void print(unsigned int num)
{
print(num, DEC);
}
void print(unsigned int num, int base)
{
if (base == HEX)
Serial.printf("%X", num);
else
Serial.printf("%d", num);
}
void print(long num)
{
print(num, DEC);
}
void print(long num, int base)
{
if (base == HEX)
Serial.printf("%lX", num);
else
Serial.printf("%ld", num);
}
void print(unsigned long num)
{
print(num, DEC);
}
void print(unsigned long num, int base)
{
if (base == HEX)
Serial.printf("%lX", num);
else
Serial.printf("%ld", num);
}
void print(double num)
{
Serial.printf("%f", num);
}
void println(const char* s)
{
Serial.printf("%s\n", s);
}
void println(char c)
{
Serial.printf("%c\n", c);
}
void println(unsigned char num)
{
println(num, DEC);
}
void println(unsigned char num, int base)
{
if (base == HEX)
Serial.printf("%X\n", num);
else
Serial.printf("%d\n", num);
}
void println(int num)
{
println(num, DEC);
}
void println(int num, int base)
{
if (base == HEX)
Serial.printf("%X\n", num);
else
Serial.printf("%d\n", num);
}
void println(unsigned int num)
{
println(num, DEC);
}
void println(unsigned int num, int base)
{
if (base == HEX)
Serial.printf("%X\n", num);
else
Serial.printf("%d\n", num);
}
void println(long num)
{
println(num, DEC);
}
void println(long num, int base)
{
if (base == HEX)
Serial.printf("%lX\n", num);
else
Serial.printf("%ld\n", num);
}
void println(unsigned long num)
{
println(num, DEC);
}
void println(unsigned long num, int base)
{
if (base == HEX)
Serial.printf("%lX\n", num);
else
Serial.printf("%ld\n", num);
}
void println(double num)
{
Serial.printf("%f\n", num);
}
void println(void)
{
Serial.printf("\n");
}
#endif

View File

@ -1,49 +1,39 @@
#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();
//multicast
void setupMultiCast(uint32_t addr, uint16_t port);
void closeMultiCast();
bool sendBytes(uint8_t* buffer, uint16_t len);
int readBytes(uint8_t* buffer, uint16_t maxLen);
#ifdef ARDUINO_ARCH_ESP8266
#include "arduino_platform.h"
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
//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();
size_t readBytesUart(uint8_t *buffer, size_t length);
#define SerialDBG Serial
class EspPlatform : public ArduinoPlatform
{
using ArduinoPlatform::_mulitcastAddr;
using ArduinoPlatform::_mulitcastPort;
public:
EspPlatform();
EspPlatform( HardwareSerial& s);
// ip stuff
uint32_t currentIpAddress() override;
uint32_t currentSubnetMask() override;
uint32_t currentDefaultGateway() override;
void macAddress(uint8_t* addr) override;
// basic stuff
void restart();
//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;
//memory
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
private:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
WiFiUDP _udp;
};
private:
WiFiUDP _udp;
};
#endif

View File

@ -175,7 +175,10 @@ void ApplicationLayer::connectIndication(uint16_t tsap)
void ApplicationLayer::connectConfirm(uint16_t destination, uint16_t tsap, bool status)
{
if (status)
_connectedTsap = tsap;
else
_connectedTsap = -1;
}
void ApplicationLayer::disconnectIndication(uint16_t tsap)

View File

@ -5,6 +5,7 @@
class BusAccessUnit
{
public:
virtual ~BusAccessUnit() {}
virtual void groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, bool status);
virtual void groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType);
virtual void groupValueReadResponseConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopTtype,

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,24 @@
#define DEC 10
#define HEX 16
#define INPUT (0x0)
#define OUTPUT (0x1)
#define INPUT_PULLUP (0x2)
#define INPUT_PULLDOWN (0x3)
#define LOW (0x0)
#define HIGH (0x1)
#define CHANGE 2
#define FALLING 3
#define RISING 4
void delay(uint32_t millis);
uint32_t millis();
void pinMode(uint32_t dwPin, uint32_t dwMode);
void digitalWrite(uint32_t dwPin, uint32_t dwVal);
typedef void (*voidFuncPtr)(void);
void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode);
#elif ARDUINO_ARCH_SAMD
#include <Arduino.h>
#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )
@ -26,6 +44,9 @@
#elif ARDUINO_ARCH_ESP8266
#include <Arduino.h>
#include <user_interface.h>
#elif ARDUINO_ARCH_ESP32
#include <Arduino.h>
#include <esp_wifi.h>
#endif
void print(const char[]);
@ -35,7 +56,7 @@ void print(int, int = DEC);
void print(unsigned int, int = DEC);
void print(long, int = DEC);
void print(unsigned long, int = DEC);
void print(double, int = 2);
void print(double);
void println(const char[]);
void println(char);
@ -44,7 +65,7 @@ void println(int, int = DEC);
void println(unsigned int, int = DEC);
void println(long, int = DEC);
void println(unsigned long, int = DEC);
void println(double, int = 2);
void println(double);
void println(void);

View File

@ -1,11 +1,16 @@
#include "dpt.h"
#include "bits.h"
Dpt::Dpt()
{}
Dpt::Dpt(short mainGroup, short subGroup, short index /* = 0 */)
: mainGroup(mainGroup), subGroup(subGroup), index(index)
{}
{
if (subGroup == 0)
println("WARNING: You used and invalid Dpt *.0");
}
bool Dpt::operator==(const Dpt& other) const
{

View File

@ -1,5 +1,363 @@
#pragma once
#define DPT_Switch Dpt(1, 1)
#define DPT_Bool Dpt(1, 2)
#define DPT_Enable Dpt(1, 3)
#define DPT_Ramp Dpt(1, 4)
#define DPT_Alarm Dpt(1, 5)
#define DPT_BinaryValue Dpt(1, 6)
#define DPT_Step Dpt(1, 7)
#define DPT_UpDown Dpt(1, 8)
#define DPT_OpenClose Dpt(1, 9)
#define DPT_Start Dpt(1, 10)
#define DPT_State Dpt(1, 11)
#define DPT_Invert Dpt(1, 12)
#define DPT_DimSendStyle Dpt(1, 13)
#define DPT_InputSource Dpt(1, 14)
#define DPT_Reset Dpt(1, 15)
#define DPT_Ack Dpt(1, 16)
#define DPT_Trigger Dpt(1, 17)
#define DPT_Occupancy Dpt(1, 18)
#define DPT_Window_Door Dpt(1, 19)
#define DPT_LogicalFunction Dpt(1, 21)
#define DPT_Scene_AB Dpt(1, 22)
#define DPT_ShutterBlinds_Mode Dpt(1, 23)
#define DPT_Heat_Cool Dpt(1, 100)
#define DPT_Switch_Control Dpt(2, 1)
#define DPT_Bool_Control Dpt(2, 2)
#define DPT_Enable_Control Dpt(2, 3)
#define DPT_Ramp_Control Dpt(2, 4)
#define DPT_Alarm_Control Dpt(2, 5)
#define DPT_BinaryValue_Control Dpt(2, 6)
#define DPT_Step_Control Dpt(2, 7)
#define DPT_Direction1_Control Dpt(2, 8)
#define DPT_Direction2_Control Dpt(2, 9)
#define DPT_Start_Control Dpt(2, 10)
#define DPT_State_Control Dpt(2, 11)
#define DPT_Invert_Control Dpt(2, 12)
#define DPT_Control_Dimming Dpt(3, 7)
#define DPT_Control_Blinds Dpt(3, 8)
#define DPT_Char_ASCII Dpt(4, 1)
#define DPT_Char_8859_1 Dpt(4, 2)
#define DPT_Scaling Dpt(5, 1)
#define DPT_Angle Dpt(5, 3)
#define DPT_Percent_U8 Dpt(5, 4)
#define DPT_DecimalFactor Dpt(5, 5)
#define DPT_Tariff Dpt(5, 6)
#define DPT_Value_1_Ucount Dpt(5, 10)
#define DPT_Percent_V8 Dpt(6, 1)
#define DPT_Value_1_Count Dpt(6, 10)
#define DPT_Status_Mode3 Dpt(6, 20)
#define DPT_Value_2_Ucount Dpt(7, 1)
#define DPT_TimePeriodMsec Dpt(7, 2)
#define DPT_TimePeriod10MSec Dpt(7, 3)
#define DPT_TimePeriod100MSec Dpt(7, 4)
#define DPT_TimePeriodSec Dpt(7, 5)
#define DPT_TimePeriodMin Dpt(7, 6)
#define DPT_TimePeriodHrs Dpt(7, 7)
#define DPT_PropDataType Dpt(7, 10)
#define DPT_Length_mm Dpt(7, 11)
#define DPT_UElCurrentmA Dpt(7, 12)
#define DPT_Brightness Dpt(7, 13)
#define DPT_Value_2_Count Dpt(8, 1)
#define DPT_DeltaTimeMsec Dpt(8, 2)
#define DPT_DeltaTime10MSec Dpt(8, 3)
#define DPT_DeltaTime100MSec Dpt(8, 4)
#define DPT_DeltaTimeSec Dpt(8, 5)
#define DPT_DeltaTimeMin Dpt(8, 6)
#define DPT_DeltaTimeHrs Dpt(8, 7)
#define DPT_Percent_V16 Dpt(8, 10)
#define DPT_Rotation_Angle Dpt(8, 11)
#define DPT_Value_Temp Dpt(9, 1)
#define DPT_Value_Tempd Dpt(9, 2)
#define DPT_Value_Tempa Dpt(9, 3)
#define DPT_Value_Lux Dpt(9, 4)
#define DPT_Value_Wsp Dpt(9, 5)
#define DPT_Value_Pres Dpt(9, 6)
#define DPT_Value_Humidity Dpt(9, 7)
#define DPT_Value_AirQuality Dpt(9, 8)
#define DPT_Value_Time1 Dpt(9, 10)
#define DPT_Value_Time2 Dpt(9, 11)
#define DPT_Value_Volt Dpt(9, 20)
#define DPT_Value_Curr Dpt(9, 21)
#define DPT_PowerDensity Dpt(9, 22)
#define DPT_KelvinPerPercent Dpt(9, 23)
#define DPT_Power Dpt(9, 24)
#define DPT_Value_Volume_Flow Dpt(9, 25)
#define DPT_Rain_Amount Dpt(9, 26)
#define DPT_Value_Temp_F Dpt(9, 27)
#define DPT_Value_Wsp_kmh Dpt(9, 28)
#define DPT_TimeOfDay Dpt(10, 1)
#define DPT_Date Dpt(11, 1)
#define DPT_Value_4_Ucount Dpt(12, 1)
#define DPT_Value_4_Count Dpt(13, 1)
#define DPT_FlowRate_m3 Dpt(13, 2) / h
#define DPT_ActiveEnergy Dpt(13, 10)
#define DPT_ApparantEnergy Dpt(13, 11)
#define DPT_ReactiveEnergy Dpt(13, 12)
#define DPT_ActiveEnergy_kWh Dpt(13, 13)
#define DPT_ApparantEnergy_kVAh Dpt(13, 14)
#define DPT_ReactiveEnergy_kVARh Dpt(13, 15)
#define DPT_LongDeltaTimeSec Dpt(13, 100)
#define DPT_Value_Acceleration Dpt(14, 0)
#define DPT_Value_Acceleration_Angular Dpt(14, 1)
#define DPT_Value_Activation_Energy Dpt(14, 2)
#define DPT_Value_Activity Dpt(14, 3)
#define DPT_Value_Mol Dpt(14, 4)
#define DPT_Value_Amplitude Dpt(14, 5)
#define DPT_Value_AngleRad Dpt(14, 6)
#define DPT_Value_AngleDeg Dpt(14, 7)
#define DPT_Value_Angular_Momentum Dpt(14, 8)
#define DPT_Value_Angular_Velocity Dpt(14, 9)
#define DPT_Value_Area Dpt(14, 10)
#define DPT_Value_Capacitance Dpt(14, 11)
#define DPT_Value_Charge_DensitySurface Dpt(14, 12)
#define DPT_Value_Charge_DensityVolume Dpt(14, 13)
#define DPT_Value_Compressibility Dpt(14, 14)
#define DPT_Value_Conductance Dpt(14, 15)
#define DPT_Value_Electrical_Conductivity Dpt(14, 16)
#define DPT_Value_Density Dpt(14, 17)
#define DPT_Value_Electric_Charge Dpt(14, 18)
#define DPT_Value_Electric_Current Dpt(14, 19)
#define DPT_Value_Electric_CurrentDensity Dpt(14, 20)
#define DPT_Value_Electric_DipoleMoment Dpt(14, 21)
#define DPT_Value_Electric_Displacement Dpt(14, 22)
#define DPT_Value_Electric_FieldStrength Dpt(14, 23)
#define DPT_Value_Electric_Flux Dpt(14, 24)
#define DPT_Value_Electric_FluxDensity Dpt(14, 25)
#define DPT_Value_Electric_Polarization Dpt(14, 26)
#define DPT_Value_Electric_Potential Dpt(14, 27)
#define DPT_Value_Electric_PotentialDifference Dpt(14, 28)
#define DPT_Value_ElectromagneticMoment Dpt(14, 29)
#define DPT_Value_Electromotive_Force Dpt(14, 30)
#define DPT_Value_Energy Dpt(14, 31)
#define DPT_Value_Force Dpt(14, 32)
#define DPT_Value_Frequency Dpt(14, 33)
#define DPT_Value_Angular_Frequency Dpt(14, 34)
#define DPT_Value_Heat_Capacity Dpt(14, 35)
#define DPT_Value_Heat_FlowRate Dpt(14, 36)
#define DPT_Value_Heat_Quantity Dpt(14, 37)
#define DPT_Value_Impedance Dpt(14, 38)
#define DPT_Value_Length Dpt(14, 39)
#define DPT_Value_Light_Quantity Dpt(14, 40)
#define DPT_Value_Luminance Dpt(14, 41)
#define DPT_Value_Luminous_Flux Dpt(14, 42)
#define DPT_Value_Luminous_Intensity Dpt(14, 43)
#define DPT_Value_Magnetic_FieldStrength Dpt(14, 44)
#define DPT_Value_Magnetic_Flux Dpt(14, 45)
#define DPT_Value_Magnetic_FluxDensity Dpt(14, 46)
#define DPT_Value_Magnetic_Moment Dpt(14, 47)
#define DPT_Value_Magnetic_Polarization Dpt(14, 48)
#define DPT_Value_Magnetization Dpt(14, 49)
#define DPT_Value_MagnetomotiveForce Dpt(14, 50)
#define DPT_Value_Mass Dpt(14, 51)
#define DPT_Value_MassFlux Dpt(14, 52)
#define DPT_Value_Momentum Dpt(14, 53)
#define DPT_Value_Phase_AngleRad Dpt(14, 54)
#define DPT_Value_Phase_AngleDeg Dpt(14, 55)
#define DPT_Value_Power Dpt(14, 56)
#define DPT_Value_Power_Factor Dpt(14, 57)
#define DPT_Value_Pressure Dpt(14, 58)
#define DPT_Value_Reactance Dpt(14, 59)
#define DPT_Value_Resistance Dpt(14, 60)
#define DPT_Value_Resistivity Dpt(14, 61)
#define DPT_Value_SelfInductance Dpt(14, 62)
#define DPT_Value_SolidAngle Dpt(14, 63)
#define DPT_Value_Sound_Intensity Dpt(14, 64)
#define DPT_Value_Speed Dpt(14, 65)
#define DPT_Value_Stress Dpt(14, 66)
#define DPT_Value_Surface_Tension Dpt(14, 67)
#define DPT_Value_Common_Temperature Dpt(14, 68)
#define DPT_Value_Absolute_Temperature Dpt(14, 69)
#define DPT_Value_TemperatureDifference Dpt(14, 70)
#define DPT_Value_Thermal_Capacity Dpt(14, 71)
#define DPT_Value_Thermal_Conductivity Dpt(14, 72)
#define DPT_Value_ThermoelectricPower Dpt(14, 73)
#define DPT_Value_Time Dpt(14, 74)
#define DPT_Value_Torque Dpt(14, 75)
#define DPT_Value_Volume Dpt(14, 76)
#define DPT_Value_Volume_Flux Dpt(14, 77)
#define DPT_Value_Weight Dpt(14, 78)
#define DPT_Value_Work Dpt(14, 79)
#define DPT_Access_Data Dpt(15, 0)
#define DPT_String_ASCII Dpt(16, 0)
#define DPT_String_8859_1 Dpt(16, 1)
#define DPT_SceneNumber Dpt(17, 1)
#define DPT_SceneControl Dpt(18, 1)
#define DPT_DateTime Dpt(19, 1)
#define DPT_SCLOMode Dpt(20, 1)
#define DPT_BuildingMode Dpt(20, 2)
#define DPT_OccMode Dpt(20, 3)
#define DPT_Priority Dpt(20, 4)
#define DPT_LightApplicationMode Dpt(20, 5)
#define DPT_ApplicationArea Dpt(20, 6)
#define DPT_AlarmClassType Dpt(20, 7)
#define DPT_PSUMode Dpt(20, 8)
#define DPT_ErrorClass_System Dpt(20, 11)
#define DPT_ErrorClass_HVAC Dpt(20, 12)
#define DPT_Time_Delay Dpt(20, 13)
#define DPT_Beaufort_Wind_Force_Scale Dpt(20, 14)
#define DPT_SensorSelect Dpt(20, 17)
#define DPT_ActuatorConnectType Dpt(20, 20)
#define DPT_FuelType Dpt(20, 100)
#define DPT_BurnerType Dpt(20, 101)
#define DPT_HVACMode Dpt(20, 102)
#define DPT_DHWMode Dpt(20, 103)
#define DPT_LoadPriority Dpt(20, 104)
#define DPT_HVACContrMode Dpt(20, 105)
#define DPT_HVACEmergMode Dpt(20, 106)
#define DPT_ChangeoverMode Dpt(20, 107)
#define DPT_ValveMode Dpt(20, 108)
#define DPT_DamperMode Dpt(20, 109)
#define DPT_HeaterMode Dpt(20, 110)
#define DPT_FanMode Dpt(20, 111)
#define DPT_MasterSlaveMode Dpt(20, 112)
#define DPT_StatusRoomSetp Dpt(20, 113)
#define DPT_ADAType Dpt(20, 120)
#define DPT_BackupMode Dpt(20, 121)
#define DPT_StartSynchronization Dpt(20, 122)
#define DPT_Behaviour_Lock_Unlock Dpt(20, 600)
#define DPT_Behaviour_Bus_Power_Up_Down Dpt(20, 601)
#define DPT_DALI_Fade_Time Dpt(20, 602)
#define DPT_BlinkingMode Dpt(20, 603)
#define DPT_LightControlMode Dpt(20, 604)
#define DPT_SwitchPBModel Dpt(20, 605)
#define DPT_PBAction Dpt(20, 606)
#define DPT_DimmPBModel Dpt(20, 607)
#define DPT_SwitchOnMode Dpt(20, 608)
#define DPT_LoadTypeSet Dpt(20, 609)
#define DPT_LoadTypeDetected Dpt(20, 610)
#define DPT_SABExceptBehaviour Dpt(20, 801)
#define DPT_SABBehaviour_Lock_Unlock Dpt(20, 802)
#define DPT_SSSBMode Dpt(20, 803)
#define DPT_BlindsControlMode Dpt(20, 804)
#define DPT_CommMode Dpt(20, 1000)
#define DPT_AddInfoTypes Dpt(20, 1001)
#define DPT_RF_ModeSelect Dpt(20, 1002)
#define DPT_RF_FilterSelect Dpt(20, 1003)
#define DPT_StatusGen Dpt(21, 1)
#define DPT_Device_Control Dpt(21, 2)
#define DPT_ForceSign Dpt(21, 100)
#define DPT_ForceSignCool Dpt(21, 101)
#define DPT_StatusRHC Dpt(21, 102)
#define DPT_StatusSDHWC Dpt(21, 103)
#define DPT_FuelTypeSet Dpt(21, 104)
#define DPT_StatusRCC Dpt(21, 105)
#define DPT_StatusAHU Dpt(21, 106)
#define DPT_LightActuatorErrorInfo Dpt(21, 601)
#define DPT_RF_ModeInfo Dpt(21, 1000)
#define DPT_RF_FilterInfo Dpt(21, 1001)
#define DPT_Channel_Activation_8 Dpt(21, 1010)
#define DPT_StatusDHWC Dpt(22, 100)
#define DPT_StatusRHCC Dpt(22, 101)
#define DPT_Media Dpt(22, 1000)
#define DPT_Channel_Activation_16 Dpt(22, 1010)
#define DPT_OnOff_Action Dpt(23, 1)
#define DPT_Alarm_Reaction Dpt(23, 2)
#define DPT_UpDown_Action Dpt(23, 3)
#define DPT_HVAC_PB_Action Dpt(23, 102)
#define DPT_VarString_8859_1 Dpt(24, 1)
#define DPT_DoubleNibble Dpt(25, 1000)
#define DPT_SceneInfo Dpt(26, 1)
#define DPT_CombinedInfoOnOff Dpt(27, 1)
#define DPT_UTF_8 Dpt(28, 1)
#define DPT_ActiveEnergy_V64 Dpt(29, 10)
#define DPT_ApparantEnergy_V64 Dpt(29, 11)
#define DPT_ReactiveEnergy_V64 Dpt(29, 12)
#define DPT_Channel_Activation_24 Dpt(30, 1010)
#define DPT_PB_Action_HVAC_Extended Dpt(31, 101)
#define DPT_Heat_Cool_Z Dpt(200, 100)
#define DPT_BinaryValue_Z Dpt(200, 101)
#define DPT_HVACMode_Z Dpt(201, 100)
#define DPT_DHWMode_Z Dpt(201, 102)
#define DPT_HVACContrMode_Z Dpt(201, 104)
#define DPT_EnablH_Cstage_Z Dpt(201, 105)
#define DPT_BuildingMode_Z Dpt(201, 107)
#define DPT_OccMode_Z Dpt(201, 108)
#define DPT_HVACEmergMode_Z Dpt(201, 109)
#define DPT_RelValue_Z Dpt(202, 1)
#define DPT_UCountValue8_Z Dpt(202, 2)
#define DPT_TimePeriodMsec_Z Dpt(203, 2)
#define DPT_TimePeriod10Msec_Z Dpt(203, 3)
#define DPT_TimePeriod100Msec_Z Dpt(203, 4)
#define DPT_TimePeriodSec_Z Dpt(203, 5)
#define DPT_TimePeriodMin_Z Dpt(203, 6)
#define DPT_TimePeriodHrs_Z Dpt(203, 7)
#define DPT_UFlowRateLiter_per_h_Z Dpt(203, 11)
#define DPT_UCountValue16_Z Dpt(203, 12)
#define DPT_UElCurrent?A_Z Dpt(203, 13)
#define DPT_PowerKW_Z Dpt(203, 14)
#define DPT_AtmPressureAbs_Z Dpt(203, 15)
#define DPT_PercentU16_Z Dpt(203, 17)
#define DPT_HVACAirQual_Z Dpt(203, 100)
#define DPT_WindSpeed_Z Dpt(203, 101)
#define DPT_SunIntensity_Z Dpt(203, 102)
#define DPT_HVACAirFlowAbs_Z Dpt(203, 104)
#define DPT_RelSignedValue_Z Dpt(204, 1)
#define DPT_DeltaTimeMsec_Z Dpt(205, 2)
#define DPT_DeltaTime10Msec_Z Dpt(205, 3)
#define DPT_DeltaTime100Msec_Z Dpt(205, 4)
#define DPT_DeltaTimeSec_Z Dpt(205, 5)
#define DPT_DeltaTimeMin_Z Dpt(205, 6)
#define DPT_DeltaTimeHrs_Z Dpt(205, 7)
#define DPT_Percent_V16_Z Dpt(205, 17)
#define DPT_TempHVACAbs_Z Dpt(205, 100)
#define DPT_TempHVACRel_Z Dpt(205, 101)
#define DPT_HVACAirFlowRel_Z Dpt(205, 102)
#define DPT_HVACModeNext Dpt(206, 100)
#define DPT_DHWModeNext Dpt(206, 102)
#define DPT_OccModeNext Dpt(206, 104)
#define DPT_BuildingModeNext Dpt(206, 105)
#define DPT_StatusBUC Dpt(207, 100)
#define DPT_LockSign Dpt(207, 101)
#define DPT_ValueDemBOC Dpt(207, 102)
#define DPT_ActPosDemAbs Dpt(207, 104)
#define DPT_StatusAct Dpt(207, 105)
#define DPT_StatusLightingActuator Dpt(207, 600)
#define DPT_StatusHPM Dpt(209, 100)
#define DPT_TempRoomDemAbs Dpt(209, 101)
#define DPT_StatusCPM Dpt(209, 102)
#define DPT_StatusWTC Dpt(209, 103)
#define DPT_TempFlowWaterDemAbs Dpt(210, 100)
#define DPT_EnergyDemWater Dpt(211, 100)
#define DPT_TempRoomSetpSetShift_3 Dpt(212, 100)
#define DPT_TempRoomSetpSet_3 Dpt(212, 101)
#define DPT_TempRoomSetpSet_4 Dpt(213, 100)
#define DPT_TempDHWSetpSet_4 Dpt(213, 101)
#define DPT_TempRoomSetpSetShift_4 Dpt(213, 102)
#define DPT_PowerFlowWaterDemHPM Dpt(214, 100)
#define DPT_PowerFlowWaterDemCPM Dpt(214, 101)
#define DPT_StatusBOC Dpt(215, 100)
#define DPT_StatusCC Dpt(215, 101)
#define DPT_SpecHeatProd Dpt(216, 100)
#define DPT_Version Dpt(217, 1)
#define DPT_VolumeLiter_Z Dpt(218, 1)
#define DPT_FlowRate_m3_per_h_Z Dpt(218, 2)
#define DPT_AlarmInfo Dpt(219, 1)
#define DPT_TempHVACAbsNext Dpt(220, 100)
#define DPT_SerNum Dpt(221, 1)
#define DPT_TempRoomSetpSetF16_3 Dpt(222, 100)
#define DPT_TempRoomSetpSetShiftF16_3 Dpt(222, 101)
#define DPT_EnergyDemAir Dpt(223, 100)
#define DPT_TempSupplyAirSetpSet Dpt(224, 100)
#define DPT_ScalingSpeed Dpt(225, 1)
#define DPT_Scaling_Step_Time Dpt(225, 2)
#define DPT_TariffNext Dpt(225, 3)
#define DPT_MeteringValue Dpt(229, 1)
#define DPT_MBus_Address Dpt(230, 1000)
#define DPT_Locale_ASCII Dpt(231, 1)
#define DPT_Colour_RGB Dpt(232, 600)
#define DPT_LanguageCodeAlpha2_ASCII Dpt(234, 1)
#define DPT_RegionCodeAlpha2_ASCII Dpt(234, 2)
#define DPT_Tariff_ActiveEnergy Dpt(235, 1)
#define DPT_Prioritised_Mode_Control Dpt(236, 1)
#define DPT_DALI_Control_Gear_Diagnostic Dpt(237, 600)
#define DPT_SceneConfig Dpt(238, 1)
#define DPT_DALI_Diagnostics Dpt(238, 600)
#define DPT_FlaggedScaling Dpt(239, 1)
#define DPT_CombinedPosition Dpt(240, 800)
#define DPT_StatusSAB Dpt(241, 800)
class Dpt
{
public:

View File

@ -1,4 +1,5 @@
#include "dptconvert.h"
#include "bits.h"
#include <cmath>
#include <cstdlib>
#include <cstring>
@ -11,7 +12,7 @@
// for (int pi = 0; pi < (x); ++pi) \
// payload[pi] = 0
int KNX_Decode_Value(uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int KNX_Decode_Value(uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
if (payload_length > 0)
{
@ -238,7 +239,7 @@ int KNX_Decode_Value(uint8_t* payload, int payload_length, const Dpt& datatype,
return false;
}
int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if (datatype.mainGroup == 1 && datatype.subGroup >= 1 && datatype.subGroup <= 23 && datatype.subGroup != 20 && !datatype.index)
@ -354,14 +355,14 @@ int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, int payload_length
return false;
}
int busValueToBinary(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToBinary(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
value = bitFromPayload(payload, 7);
return true;
}
int busValueToBinaryControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToBinaryControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
switch (datatype.index)
@ -377,7 +378,7 @@ int busValueToBinaryControl(const uint8_t* payload, int payload_length, const Dp
return false;
}
int busValueToStepControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToStepControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
switch (datatype.index)
@ -395,7 +396,7 @@ int busValueToStepControl(const uint8_t* payload, int payload_length, const Dpt&
return false;
}
int busValueToCharacter(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToCharacter(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
int8_t charValue = signed8FromPayload(payload, 0);
@ -411,7 +412,7 @@ int busValueToCharacter(const uint8_t* payload, int payload_length, const Dpt& d
return true;
}
int busValueToUnsigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToUnsigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
switch (datatype.subGroup)
@ -438,14 +439,14 @@ int busValueToUnsigned8(const uint8_t* payload, int payload_length, const Dpt& d
return true;
}
int busValueToSigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
value = (uint8_t)(unsigned8FromPayload(payload, 0));
return true;
}
int busValueToStatusAndMode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToStatusAndMode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
if (datatype.index < 5)
@ -461,14 +462,14 @@ int busValueToStatusAndMode(const uint8_t* payload, int payload_length, const Dp
return false;
}
int busValueToUnsigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToUnsigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
value = unsigned16FromPayload(payload, 0);
return true;
}
int busValueToTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
@ -477,7 +478,7 @@ int busValueToTimePeriod(const uint8_t* payload, int payload_length, const Dpt&
return true;
}
int busValueToSigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
if (datatype.subGroup == 10)
@ -489,7 +490,7 @@ int busValueToSigned16(const uint8_t* payload, int payload_length, const Dpt& da
return true;
}
int busValueToTimeDelta(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToTimeDelta(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
@ -498,7 +499,7 @@ int busValueToTimeDelta(const uint8_t* payload, int payload_length, const Dpt& d
return true;
}
int busValueToFloat16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToFloat16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
if (unsigned16FromPayload(payload, 0) == 0x7FFF)
@ -508,7 +509,7 @@ int busValueToFloat16(const uint8_t* payload, int payload_length, const Dpt& dat
return true;
}
int busValueToTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(3);
switch (datatype.index)
@ -536,7 +537,7 @@ int busValueToTime(const uint8_t* payload, int payload_length, const Dpt& dataty
return false;
}
int busValueToDate(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToDate(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(3);
unsigned short year = unsigned8FromPayload(payload, 2) & 0x7F;
@ -555,35 +556,35 @@ int busValueToDate(const uint8_t* payload, int payload_length, const Dpt& dataty
return true;
}
int busValueToUnsigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToUnsigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(4);
value = unsigned32FromPayload(payload, 0);
return true;
}
int busValueToSigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(4);
value = signed32FromPayload(payload, 0);
return true;
}
int busValueToLongTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToLongTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(4);
value = signed32FromPayload(payload, 0);
return true;
}
int busValueToFloat32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToFloat32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(4);
value = float32FromPayload(payload, 0);
return true;
}
int busValueToAccess(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToAccess(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(4);
switch (datatype.index)
@ -615,7 +616,7 @@ int busValueToAccess(const uint8_t* payload, int payload_length, const Dpt& data
return false;
}
int busValueToString(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToString(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(14);
char strValue[15];
@ -630,14 +631,14 @@ int busValueToString(const uint8_t* payload, int payload_length, const Dpt& data
return true;
}
int busValueToScene(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToScene(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
value = (uint8_t)(unsigned8FromPayload(payload, 0) & 0x3F);
return true;
}
int busValueToSceneControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSceneControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
switch (datatype.index)
@ -657,7 +658,7 @@ int busValueToSceneControl(const uint8_t* payload, int payload_length, const Dpt
return false;
}
int busValueToSceneInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSceneInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
switch (datatype.index)
@ -677,7 +678,7 @@ int busValueToSceneInfo(const uint8_t* payload, int payload_length, const Dpt& d
return false;
}
int busValueToSceneConfig(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSceneConfig(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(1);
switch (datatype.index)
@ -698,7 +699,7 @@ int busValueToSceneConfig(const uint8_t* payload, int payload_length, const Dpt&
return false;
}
int busValueToDateTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToDateTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(8);
if (datatype.index == 3)
@ -770,20 +771,20 @@ int busValueToDateTime(const uint8_t* payload, int payload_length, const Dpt& da
return false;
}
int busValueToUnicode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToUnicode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
//TODO
return false;
}
int busValueToSigned64(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSigned64(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(8);
value = signed64FromPayload(payload, 0);
return true;
}
int busValueToAlarmInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToAlarmInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(6);
switch (datatype.index)
@ -816,7 +817,7 @@ int busValueToAlarmInfo(const uint8_t* payload, int payload_length, const Dpt& d
return false;
}
int busValueToSerialNumber(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToSerialNumber(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(6);
switch (datatype.index)
@ -831,7 +832,7 @@ int busValueToSerialNumber(const uint8_t* payload, int payload_length, const Dpt
return false;
}
int busValueToVersion(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToVersion(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
switch (datatype.index)
@ -850,7 +851,7 @@ int busValueToVersion(const uint8_t* payload, int payload_length, const Dpt& dat
return false;
}
int busValueToScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(3);
switch (datatype.index)
@ -866,7 +867,7 @@ int busValueToScaling(const uint8_t* payload, int payload_length, const Dpt& dat
return false;
}
int busValueToTariff(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToTariff(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(3);
switch (datatype.index)
@ -887,7 +888,7 @@ int busValueToTariff(const uint8_t* payload, int payload_length, const Dpt& data
return false;
}
int busValueToLocale(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToLocale(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(datatype.mainGroup == 231 ? 4 : 2);
if (!datatype.index || (datatype.mainGroup == 231 && datatype.index == 1))
@ -901,7 +902,7 @@ int busValueToLocale(const uint8_t* payload, int payload_length, const Dpt& data
return false;
}
int busValueToRGB(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(3);
uint32_t rgb = unsigned16FromPayload(payload, 0) * 256 + unsigned8FromPayload(payload, 2);
@ -911,7 +912,7 @@ int busValueToRGB(const uint8_t* payload, int payload_length, const Dpt& datatyp
return true;
}
int busValueToFlaggedScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(2);
switch (datatype.index)
@ -926,7 +927,7 @@ int busValueToFlaggedScaling(const uint8_t* payload, int payload_length, const D
return false;
}
int busValueToActiveEnergy(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value)
int busValueToActiveEnergy(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value)
{
ASSERT_PAYLOAD(6);
switch (datatype.index)
@ -948,13 +949,13 @@ int busValueToActiveEnergy(const uint8_t* payload, int payload_length, const Dpt
//-------------------------------------------------------------------------------------------------------------------------------------
int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
bitToPayload(payload, payload_length, 7, value);
return true;
}
int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -971,7 +972,7 @@ int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, int pa
return true;
}
int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -992,7 +993,7 @@ int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, int payl
return true;
}
int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((uint64_t)value < INT64_C(0) || (uint64_t)value > INT64_C(255) || (datatype.subGroup == 1 && (uint64_t)value > INT64_C(127)))
return false;
@ -1000,7 +1001,7 @@ int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, int payloa
return true;
}
int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(0))
return false;
@ -1039,7 +1040,7 @@ int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, int payloa
return true;
}
int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(-128) || (int64_t)value > INT64_C(127))
return false;
@ -1048,7 +1049,7 @@ int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, int payload_
return true;
}
int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if (datatype.index < 5)
bitToPayload(payload, payload_length, datatype.index, value);
@ -1064,7 +1065,7 @@ int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, int pa
return true;
}
int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(65535))
return false;
@ -1073,7 +1074,7 @@ int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, int paylo
return true;
}
int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
struct tm tmp = value;
time_t timeSinceEpoch = mktime(&tmp);
@ -1085,7 +1086,7 @@ int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, int paylo
return true;
}
int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(-32768) || (int64_t)value > INT64_C(32767))
return false;
@ -1102,7 +1103,7 @@ int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, int payload
return true;
}
int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
struct tm tmp = value;
time_t timeSinceEpoch = mktime(&tmp);
@ -1114,7 +1115,7 @@ int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, int payloa
return true;
}
int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
double numValue = value;
@ -1164,7 +1165,7 @@ int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, int payload_
return true;
}
int valueToBusValueTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1191,7 +1192,7 @@ int valueToBusValueTime(const KNXValue& value, uint8_t* payload, int payload_len
return true;
}
int valueToBusValueDate(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueDate(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
struct tm tmp = value;
if (tmp.tm_year < 1990 || tmp.tm_year > 2089)
@ -1203,7 +1204,7 @@ int valueToBusValueDate(const KNXValue& value, uint8_t* payload, int payload_len
return true;
}
int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(4294967295))
return false;
@ -1212,7 +1213,7 @@ int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, int paylo
return true;
}
int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647))
return false;
@ -1221,7 +1222,7 @@ int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, int payload
return true;
}
int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(-2147483648) || (int64_t)value > INT64_C(2147483647))
return false;
@ -1230,7 +1231,7 @@ int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, int p
return true;
}
int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
double numValue = value;
if (numValue < (-8388608.0 * pow(2, 255)) || numValue > (8388607.0 * pow(2, 255)))
@ -1240,7 +1241,7 @@ int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, int payload_
return true;
}
int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1273,13 +1274,18 @@ int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_l
return true;
}
int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueString(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
//TODO
return false;
const char* strValue = value;
uint8_t val = strValue[0];
for (int n = 0; n < 14; n++) {
if (val) val = strValue[n]; //string terminator 0x00 will stop further assignments and init the remainig payload with zero
unsigned8ToPayload(payload, payload_length, n, val, 0xff);
}
return true;
}
int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueScene(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(63))
return false;
@ -1288,7 +1294,7 @@ int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_le
return true;
}
int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1309,7 +1315,7 @@ int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, int pay
return true;
}
int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1330,7 +1336,7 @@ int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, int payloa
return true;
}
int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1352,7 +1358,7 @@ int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, int payl
return true;
}
int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1421,19 +1427,19 @@ int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, int payload
return true;
}
int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
//TODO
return false;
}
int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
signed64ToPayload(payload, payload_length, 0, (int64_t)value, UINT64_C(0xFFFFFFFFFFFFFFFF));
return true;
}
int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1479,7 +1485,7 @@ int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, int payloa
return true;
}
int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1506,7 +1512,7 @@ int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, int pay
return true;
}
int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1539,7 +1545,7 @@ int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, int payload_
return true;
}
int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1566,7 +1572,7 @@ int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, int payload_
return true;
}
int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1593,7 +1599,7 @@ int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, int payload_l
return true;
}
int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
int strl = strlen(value);
if (strl != 2)
@ -1610,7 +1616,7 @@ int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, int payload_l
return false;
}
int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
if ((int64_t)value < INT64_C(0) || (int64_t)value > INT64_C(16777215))
return false;
@ -1622,7 +1628,7 @@ int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, int payload_leng
return true;
}
int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1644,7 +1650,7 @@ int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, int p
return true;
}
int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype)
{
switch (datatype.index)
{
@ -1740,34 +1746,34 @@ uint8_t bcdFromPayload(const uint8_t* payload, int index)
return (uint8_t)((payload[index / 2] >> 4) & 0x0F);
}
void bitToPayload(uint8_t* payload, int payload_length, int index, bool value)
void bitToPayload(uint8_t* payload, size_t payload_length, int index, bool value)
{
ENSURE_PAYLOAD(index / 8 + 1);
payload[index / 8] = (payload[index / 8] & ~(1 << (7 - (index % 8)))) | (value ? (1 << (7 - (index % 8))) : 0);
}
void unsigned8ToPayload(uint8_t* payload, int payload_length, int index, uint8_t value, uint8_t mask)
void unsigned8ToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value, uint8_t mask)
{
ENSURE_PAYLOAD(index + 1);
payload[index] = (payload[index] & ~mask) | (value & mask);
}
void signed8ToPayload(uint8_t* payload, int payload_length, int index, int8_t value, uint8_t mask)
void signed8ToPayload(uint8_t* payload, size_t payload_length, int index, int8_t value, uint8_t mask)
{
ENSURE_PAYLOAD(index + 1);
payload[index] = (payload[index] & ~mask) | (value & mask);
}
void unsigned16ToPayload(uint8_t* payload, int payload_length, int index, uint16_t value, uint16_t mask)
void unsigned16ToPayload(uint8_t* payload, size_t payload_length, int index, uint16_t value, uint16_t mask)
{
ENSURE_PAYLOAD(index + 2);
payload[index] = (payload[index] & (~mask >> 8)) | ((value >> 8) & (mask >> 8));
payload[index + 1] = (payload[index + 1] & ~mask) | (value & mask);
}
void signed16ToPayload(uint8_t* payload, int payload_length, int index, int16_t value, uint16_t mask)
void signed16ToPayload(uint8_t* payload, size_t payload_length, int index, int16_t value, uint16_t mask)
{
ENSURE_PAYLOAD(index + 2);
payload[index] = (payload[index] & (~mask >> 8)) | ((value >> 8) & (mask >> 8));
payload[index + 1] = (payload[index + 1] & ~mask) | (value & mask);
}
void unsigned32ToPayload(uint8_t* payload, int payload_length, int index, uint32_t value, uint32_t mask)
void unsigned32ToPayload(uint8_t* payload, size_t payload_length, int index, uint32_t value, uint32_t mask)
{
ENSURE_PAYLOAD(index + 4);
payload[index] = (payload[index] & (~mask >> 24)) | ((value >> 24) & (mask >> 24));
@ -1775,7 +1781,7 @@ void unsigned32ToPayload(uint8_t* payload, int payload_length, int index, uint32
payload[index + 2] = (payload[index + 2] & (~mask >> 8)) | ((value >> 8) & (mask >> 8));
payload[index + 3] = (payload[index + 3] & ~mask) | (value & mask);
}
void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t value, uint32_t mask)
void signed32ToPayload(uint8_t* payload, size_t payload_length, int index, int32_t value, uint32_t mask)
{
ENSURE_PAYLOAD(index + 4);
payload[index] = (payload[index] & (~mask >> 24)) | ((value >> 24) & (mask >> 24));
@ -1784,7 +1790,7 @@ void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t
payload[index + 3] = (payload[index + 3] & ~mask) | (value & mask);
}
void float16ToPayload(uint8_t* payload, int payload_length, int index, double value, uint16_t mask)
void float16ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint16_t mask)
{
bool wasNegative = false;
if (value < 0)
@ -1804,15 +1810,17 @@ void float16ToPayload(uint8_t* payload, int payload_length, int index, double va
if (wasNegative)
mantissa *= -1;
println(mantissa);
signed16ToPayload(payload, payload_length, index, mantissa, mask);
unsigned8ToPayload(payload, payload_length, index, exponent << 3, 0x78 & (mask >> 8));
}
void float32ToPayload(uint8_t* payload, int payload_length, int index, double value, uint32_t mask)
void float32ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint32_t mask)
{
float num = value;
unsigned32ToPayload(payload, payload_length, index, *((uint32_t*)&num), mask);
}
void signed64ToPayload(uint8_t* payload, int payload_length, int index, int64_t value, uint64_t mask)
void signed64ToPayload(uint8_t* payload, size_t payload_length, int index, int64_t value, uint64_t mask)
{
ENSURE_PAYLOAD(index + 8);
payload[index] = (payload[index] & (~mask >> 56)) | ((value >> 56) & (mask >> 56));
@ -1824,7 +1832,7 @@ void signed64ToPayload(uint8_t* payload, int payload_length, int index, int64_t
payload[index + 6] = (payload[index + 6] & (~mask >> 8)) | ((value >> 8) & (mask >> 8));
payload[index + 7] = (payload[index + 7] & ~mask) | (value & mask);
}
void bcdToPayload(uint8_t* payload, int payload_length, int index, uint8_t value)
void bcdToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value)
{
ENSURE_PAYLOAD(index / 2 + 1);
if (index % 2)

View File

@ -36,88 +36,88 @@
/**
* Converts the KNX Payload given by the specific DPT and puts the value in the KNXValue struc
*/
int KNX_Decode_Value(uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int KNX_Decode_Value(uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
/**
* Converts the KNXValue struct to the KNX Payload as the specific DPT
*/
int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int KNX_Encode_Value(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
//KNX to internal
int busValueToBinary(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToBinaryControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToStepControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToCharacter(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnsigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned8(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToStatusAndMode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnsigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTimeDelta(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToFloat16(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToDate(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnsigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToLongTimePeriod(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToFloat32(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToAccess(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToString(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToScene(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSceneControl(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSceneInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSceneConfig(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToDateTime(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnicode(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned64(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToAlarmInfo(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSerialNumber(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToVersion(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTariff(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToLocale(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToRGB(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToFlaggedScaling(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToActiveEnergy(const uint8_t* payload, int payload_length, const Dpt& datatype, KNXValue& value);
int busValueToBinary(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToBinaryControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToStepControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToCharacter(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnsigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned8(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToStatusAndMode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnsigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTimeDelta(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToFloat16(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToDate(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnsigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToLongTimePeriod(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToFloat32(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToAccess(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToString(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToScene(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSceneControl(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSceneInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSceneConfig(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToDateTime(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToUnicode(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSigned64(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToAlarmInfo(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToSerialNumber(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToVersion(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToTariff(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToLocale(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToRGB(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToFlaggedScaling(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
int busValueToActiveEnergy(const uint8_t* payload, size_t payload_length, const Dpt& datatype, KNXValue& value);
//Internal to KNX
int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueDate(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueScene(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype);
int valueToBusValueBinary(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueBinaryControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueStepControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueCharacter(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueUnsigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSigned8(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueStatusAndMode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueUnsigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSigned16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueTimeDelta(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueFloat16(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueDate(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueUnsigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSigned32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueLongTimePeriod(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueFloat32(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueAccess(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueString(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueScene(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSceneControl(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSceneInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSceneConfig(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueDateTime(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueUnicode(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSigned64(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueAlarmInfo(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueSerialNumber(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueVersion(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueTariff(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueLocale(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueRGB(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueFlaggedScaling(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
int valueToBusValueActiveEnergy(const KNXValue& value, uint8_t* payload, size_t payload_length, const Dpt& datatype);
//Payload manipulation
bool bitFromPayload(const uint8_t* payload, int index);
@ -132,14 +132,14 @@ float float32FromPayload(const uint8_t* payload, int index);
int64_t signed64FromPayload(const uint8_t* payload, int index);
uint8_t bcdFromPayload(const uint8_t* payload, int index);
void bitToPayload(uint8_t* payload, int payload_length, int index, bool value);
void unsigned8ToPayload(uint8_t* payload, int payload_length, int index, uint8_t value, uint8_t mask); //mask 0xFF
void signed8ToPayload(uint8_t* payload, int payload_length, int index, int8_t value, uint8_t mask); //mask 0xFF
void unsigned16ToPayload(uint8_t* payload, int payload_length, int index, uint16_t value, uint16_t mask); //mask 0xFFFF
void signed16ToPayload(uint8_t* payload, int payload_length, int index, int16_t value, uint16_t mask); //mask 0xFFFF
void unsigned32ToPayload(uint8_t* payload, int payload_length, int index, uint32_t value, uint32_t mask); //mask = 0xFFFFFFFF
void signed32ToPayload(uint8_t* payload, int payload_length, int index, int32_t value, uint32_t mask); //mask = 0xFFFFFFFF
void float16ToPayload(uint8_t* payload, int payload_length, int index, double value, uint16_t mask); //mask = 0xFFFF
void float32ToPayload(uint8_t* payload, int payload_length, int index, double value, uint32_t mask); //mask = 0xFFFFFFFF
void signed64ToPayload(uint8_t* payload, int payload_length, int index, int64_t value, uint64_t mask); //mask = UINT64_C(0xFFFFFFFFFFFFFFFF)
void bcdToPayload(uint8_t* payload, int payload_length, int index, uint8_t value);
void bitToPayload(uint8_t* payload, size_t payload_length, int index, bool value);
void unsigned8ToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value, uint8_t mask); //mask 0xFF
void signed8ToPayload(uint8_t* payload, size_t payload_length, int index, int8_t value, uint8_t mask); //mask 0xFF
void unsigned16ToPayload(uint8_t* payload, size_t payload_length, int index, uint16_t value, uint16_t mask); //mask 0xFFFF
void signed16ToPayload(uint8_t* payload, size_t payload_length, int index, int16_t value, uint16_t mask); //mask 0xFFFF
void unsigned32ToPayload(uint8_t* payload, size_t payload_length, int index, uint32_t value, uint32_t mask); //mask = 0xFFFFFFFF
void signed32ToPayload(uint8_t* payload, size_t payload_length, int index, int32_t value, uint32_t mask); //mask = 0xFFFFFFFF
void float16ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint16_t mask); //mask = 0xFFFF
void float32ToPayload(uint8_t* payload, size_t payload_length, int index, double value, uint32_t mask); //mask = 0xFFFFFFFF
void signed64ToPayload(uint8_t* payload, size_t payload_length, int index, int64_t value, uint64_t mask); //mask = UINT64_C(0xFFFFFFFFFFFFFFFF)
void bcdToPayload(uint8_t* payload, size_t payload_length, int index, uint8_t value);

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

@ -532,6 +532,8 @@ struct tm KNXValue::timeValue() const
KNXValue::KNXValue(float value)
{
_value.doubleValue = value;
_type = DoubleType;
}
KNXValue& KNXValue::operator=(const float value)

View File

@ -13,10 +13,8 @@ class Platform
virtual uint32_t currentDefaultGateway() = 0;
virtual void macAddress(uint8_t* data) = 0;
virtual uint32_t millis() = 0;
virtual void restart() = 0;
virtual void fatalError() = 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)
@ -665,6 +666,7 @@ void TransportLayer::A12(uint16_t destination, Priority priority)
CemiFrame frame(0);
TPDU& tpdu = frame.tpdu();
tpdu.type(Connect);
_networkLayer->dataIndividualRequest(AckRequested, destination, NetworkLayerParameter, priority, tpdu);
_seqNoRecv = 0;
_seqNoSend = 0;
enableConnectionTimeout();
@ -696,7 +698,7 @@ void TransportLayer::A15(Priority priority, uint16_t tsap)
void TransportLayer::enableConnectionTimeout()
{
_connectionTimeoutStartMillis = _platform.millis();
_connectionTimeoutStartMillis = millis();
_connectionTimeoutEnabled = true;
}
@ -707,7 +709,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

@ -3,227 +3,20 @@
#include "knx/bits.h"
#ifdef ARDUINO_ARCH_SAMD
SamdPlatform platform;
Bau07B0 bau(platform);
KnxFacade<SamdPlatform, Bau07B0> knx;
#define ICACHE_RAM_ATTR
#elif ARDUINO_ARCH_ESP8266
EspPlatform platform;
Bau57B0 bau(platform);
#elif __linux__ //linux
// noops on linux
#define digitalWrite(a, b)
#define pinMode(a, b)
#define attachInterrupt(a, b, c)
KnxFacade<EspPlatform, Bau57B0> knx;
#elif ARDUINO_ARCH_ESP32
//KnxFacade<Esp32Platform, Bau57B0> knx;
KnxFacade<Esp32Platform, Bau57B0> knx;
#elif __linux__
#define ICACHE_RAM_ATTR
#endif
bool _toogleProgMode = false;
#ifndef __linux__
KnxFacade knx(bau);
ICACHE_RAM_ATTR void buttonUp()
ICACHE_RAM_ATTR void buttonUp()
{
_toogleProgMode = true;
}
#endif
KnxFacade::KnxFacade(BauSystemB &bau) : _bau(bau)
{
manufacturerId(0xfa);
_bau.addSaveRestore(this);
}
bool KnxFacade::enabled()
{
return _bau.enabled();
}
void KnxFacade::enabled(bool value)
{
_bau.enabled(true);
}
bool KnxFacade::progMode()
{
return _bau.deviceObject().progMode();
}
void KnxFacade::progMode(bool value)
{
if (value)
{
println("progmode on");
digitalWrite(knx.ledPin(), _ledPinActiveOn);
}
else
{
println("progmode off");
digitalWrite(knx.ledPin(), HIGH - _ledPinActiveOn);
}
_bau.deviceObject().progMode(value);
}
bool KnxFacade::configured()
{
return _bau.configured();
}
uint32_t KnxFacade::ledPinActiveOn()
{
return _ledPinActiveOn;
}
void KnxFacade::ledPinActiveOn(uint32_t value)
{
_ledPinActiveOn = value;
}
uint32_t KnxFacade::ledPin()
{
return _ledPin;
}
void KnxFacade::ledPin(uint32_t value)
{
_ledPin = value;
}
uint32_t KnxFacade::buttonPin()
{
return _buttonPin;
}
void KnxFacade::buttonPin(uint32_t value)
{
_buttonPin = value;
}
void KnxFacade::readMemory()
{
_bau.readMemory();
}
void KnxFacade::writeMemory()
{
_bau.writeMemory();
}
void KnxFacade::loop()
{
if(_toogleProgMode)
{
progMode(!progMode());
_toogleProgMode = false;
}
_bau.loop();
}
void KnxFacade::manufacturerId(uint16_t value)
{
_bau.deviceObject().manufacturerId(value);
}
void KnxFacade::bauNumber(uint32_t value)
{
_bau.deviceObject().bauNumber(value);
}
uint16_t KnxFacade::induvidualAddress()
{
return _bau.deviceObject().induvidualAddress();
}
void KnxFacade::orderNumber(const char *value)
{
_bau.deviceObject().orderNumber(value);
}
void KnxFacade::hardwareType(uint8_t *value)
{
_bau.deviceObject().hardwareType(value);
}
void KnxFacade::version(uint16_t value)
{
_bau.deviceObject().version(value);
}
void KnxFacade::start()
{
pinMode(_ledPin, OUTPUT);
digitalWrite(_ledPin, HIGH - _ledPinActiveOn);
pinMode(_buttonPin, INPUT_PULLUP);
attachInterrupt(_buttonPin, buttonUp, RISING);
enabled(true);
}
uint8_t *KnxFacade::paramData(uint32_t addr)
{
if (!_bau.configured())
return nullptr;
return _bau.parameters().data(addr);
}
uint8_t KnxFacade::paramByte(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getByte(addr);
}
uint16_t KnxFacade::paramWord(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getWord(addr);
}
uint32_t KnxFacade::paramInt(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getInt(addr);
}
void KnxFacade::setSaveCallback(saveRestoreCallback func)
{
_saveCallback = func;
}
void KnxFacade::setRestoreCallback(saveRestoreCallback func)
{
_restoreCallback = func;
}
uint8_t *KnxFacade::save(uint8_t *buffer)
{
if (_saveCallback != 0)
return _saveCallback(buffer);
return buffer;
}
uint8_t *KnxFacade::restore(uint8_t *buffer)
{
if (_restoreCallback != 0)
return _restoreCallback(buffer);
return buffer;
}
GroupObject &KnxFacade::getGroupObject(uint16_t goNr)
{
return _bau.groupObjectTable().get(goNr);
}
void KnxFacade::restart(uint16_t individualAddress)
{
_bau.restartRequest(individualAddress);
}
#ifndef __linux__
knx._toogleProgMode = true;
#endif
}

View File

@ -1,76 +1,285 @@
#pragma once
#include "knx/bits.h"
#ifdef ARDUINO_ARCH_SAMD
#include "samd_platform.h"
#include "knx/bau07B0.h"
#elif ARDUINO_ARCH_ESP8266
#include "esp_platform.h"
#include "knx/bau57B0.h"
#elif ARDUINO_ARCH_ESP32
#define LED_BUILTIN 13
#include "esp32_platform.h"
#include "knx/bau57B0.h"
#else
#include "linux_platform.h"
#include "knx/bau57B0.h"
#define LED_BUILTIN 0
#define HIGH 1
#define LOW 0
#endif
void buttonUp();
typedef uint8_t* (*saveRestoreCallback)(uint8_t* buffer);
class KnxFacade : private SaveRestore
template <class P, class B> class KnxFacade : private SaveRestore
{
public:
KnxFacade(BauSystemB& bau);
bool enabled();
void enabled(bool value);
bool progMode();
void progMode(bool value);
bool configured();
friend void buttonUp();
public:
KnxFacade() : _platformPtr(new P()), _bauPtr(new B(*_platformPtr)), _bau(*_bauPtr)
{}
virtual ~KnxFacade()
{
if (_bauPtr)
delete _bauPtr;
if (_platformPtr)
delete _platformPtr;
}
KnxFacade(B& bau) : _bau(bau)
{
manufacturerId(0xfa);
_bau.addSaveRestore(this);
}
P& platform()
{
return *_platformPtr;
}
B& bau()
{
return _bau;
}
bool enabled()
{
return _bau.enabled();
}
void enabled(bool value)
{
_bau.enabled(true);
}
bool progMode()
{
return _bau.deviceObject().progMode();
}
void progMode(bool value)
{
_bau.deviceObject().progMode(value);
}
bool configured()
{
return _bau.configured();
}
/**
* returns HIGH if led is active on HIGH, LOW otherwise
*/
uint32_t ledPinActiveOn();
uint32_t ledPinActiveOn()
{
return _ledPinActiveOn;
}
/**
* Sets if the programming led is active on HIGH or LOW.
*
* Set to HIGH for GPIO--RESISTOR--LED--GND or to LOW for GPIO--LED--RESISTOR--VDD
*/
void ledPinActiveOn(uint32_t value);
uint32_t ledPin();
void ledPin(uint32_t value);
uint32_t buttonPin();
void buttonPin(uint32_t value);
void readMemory();
void writeMemory();
uint16_t induvidualAddress();
void loop();
void manufacturerId(uint16_t value);
void bauNumber(uint32_t value);
void orderNumber(const char* value);
void hardwareType(uint8_t* value);
void version(uint16_t value);
void start();
void setSaveCallback(saveRestoreCallback func);
void setRestoreCallback(saveRestoreCallback func);
uint8_t* paramData(uint32_t addr);
uint8_t paramByte(uint32_t addr);
uint16_t paramWord(uint32_t addr);
uint32_t paramInt(uint32_t addr);
GroupObject& getGroupObject(uint16_t goNr);
void restart(uint16_t individualAddress);
void ledPinActiveOn(uint32_t value)
{
_ledPinActiveOn = value;
}
uint32_t ledPin()
{
return _ledPin;
}
void ledPin(uint32_t value)
{
_ledPin = value;
}
uint32_t buttonPin()
{
return _buttonPin;
}
void buttonPin(uint32_t value)
{
_buttonPin = value;
}
void readMemory()
{
_bau.readMemory();
}
void writeMemory()
{
_bau.writeMemory();
}
uint16_t induvidualAddress()
{
return _bau.deviceObject().induvidualAddress();
}
void loop()
{
if (progMode() != _progLedState)
{
_progLedState = progMode();
if (_progLedState)
{
println("progmode on");
digitalWrite(ledPin(), _ledPinActiveOn);
}
else
{
println("progmode off");
digitalWrite(ledPin(), HIGH - _ledPinActiveOn);
}
}
if (_toogleProgMode)
{
progMode(!progMode());
_toogleProgMode = false;
}
_bau.loop();
}
void manufacturerId(uint16_t value)
{
_bau.deviceObject().manufacturerId(value);
}
void bauNumber(uint32_t value)
{
_bau.deviceObject().bauNumber(value);
}
void orderNumber(const char* value)
{
_bau.deviceObject().orderNumber(value);
}
void hardwareType(uint8_t* value)
{
_bau.deviceObject().hardwareType(value);
}
void version(uint16_t value)
{
_bau.deviceObject().version(value);
}
void start()
{
pinMode(_ledPin, OUTPUT);
digitalWrite(_ledPin, HIGH - _ledPinActiveOn);
pinMode(_buttonPin, INPUT_PULLUP);
attachInterrupt(_buttonPin, buttonUp, RISING);
enabled(true);
}
void setSaveCallback(saveRestoreCallback func)
{
_saveCallback = func;
}
void setRestoreCallback(saveRestoreCallback func)
{
_restoreCallback = func;
}
uint8_t* paramData(uint32_t addr)
{
if (!_bau.configured())
return nullptr;
return _bau.parameters().data(addr);
}
uint8_t paramByte(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getByte(addr);
}
uint16_t paramWord(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getWord(addr);
}
uint32_t paramInt(uint32_t addr)
{
if (!_bau.configured())
return 0;
return _bau.parameters().getInt(addr);
}
GroupObject& getGroupObject(uint16_t goNr)
{
return _bau.groupObjectTable().get(goNr);
}
void restart(uint16_t individualAddress)
{
_bau.restartRequest(individualAddress);
}
private:
BauSystemB& _bau;
P* _platformPtr = 0;
B* _bauPtr = 0;
B& _bau;
uint32_t _ledPinActiveOn = LOW;
uint32_t _ledPin = LED_BUILTIN;
uint32_t _buttonPin = 0;
saveRestoreCallback _saveCallback = 0;
saveRestoreCallback _restoreCallback = 0;
bool _toogleProgMode = false;
bool _progLedState = false;
uint8_t* save(uint8_t* buffer);
uint8_t* restore(uint8_t* buffer);
uint8_t* save(uint8_t* buffer)
{
if (_saveCallback != 0)
return _saveCallback(buffer);
return buffer;
}
uint8_t* restore(uint8_t* buffer)
{
if (_restoreCallback != 0)
return _restoreCallback(buffer);
return buffer;
}
};
#ifndef __linux__
extern KnxFacade knx;
#ifdef ARDUINO_ARCH_SAMD
extern KnxFacade<SamdPlatform, Bau07B0> knx;
#elif ARDUINO_ARCH_ESP8266
extern KnxFacade<EspPlatform, Bau57B0> knx;
#elif ARDUINO_ARCH_ESP32
extern KnxFacade<Esp32Platform, Bau57B0> knx;
#elif __linux__
// no predefined global instance
#endif

View File

@ -29,13 +29,10 @@
#define MAX_MEM 4096
LinuxPlatform::LinuxPlatform(int argc, char** argv)
LinuxPlatform::LinuxPlatform()
{
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()
@ -58,7 +55,7 @@ uint32_t LinuxPlatform::currentDefaultGateway()
return 0;
}
uint32_t LinuxPlatform::millis()
uint32_t millis()
{
struct timespec spec;
@ -66,7 +63,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;
@ -500,4 +497,26 @@ void println(void)
printf("\n");
}
void pinMode(uint32_t dwPin, uint32_t dwMode)
{
}
void digitalWrite(uint32_t dwPin, uint32_t dwVal)
{
}
typedef void (*voidFuncPtr)(void);
void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode)
{
}
void LinuxPlatform::cmdLineArgs(int argc, char** argv)
{
if (_args)
delete[] _args;
_args = new char*[argc + 1];
memcpy(_args, argv, argc * sizeof(char*));
_args[argc] = 0;
}
#endif

View File

@ -10,9 +10,11 @@ class LinuxPlatform: public Platform
using Platform::_memoryReference;
using Platform::memoryReference;
public:
LinuxPlatform(int argc, char** argv);
LinuxPlatform();
virtual ~LinuxPlatform();
void cmdLineArgs(int argc, char** argv);
std::string flashFilePath();
void flashFilePath(const std::string path);
@ -23,8 +25,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

@ -6,41 +6,12 @@
#include <Arduino.h>
#include <FlashAsEEPROM.h>
SamdPlatform::SamdPlatform()
SamdPlatform::SamdPlatform() : ArduinoPlatform(Serial1)
{
}
uint32_t SamdPlatform::currentIpAddress()
SamdPlatform::SamdPlatform( HardwareSerial& s) : ArduinoPlatform(s)
{
// not needed
return 0;
}
uint32_t SamdPlatform::currentSubnetMask()
{
// not needed
return 0;
}
uint32_t SamdPlatform::currentDefaultGateway()
{
// not needed
return 0;
}
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()
@ -49,39 +20,6 @@ void SamdPlatform::restart()
NVIC_SystemReset();
}
void SamdPlatform::fatalError()
{
const int period = 200;
while (true)
{
if ((millis() % period) > (period / 2))
digitalWrite(LED_BUILTIN, HIGH);
else
digitalWrite(LED_BUILTIN, LOW);
}
}
void SamdPlatform::setupMultiCast(uint32_t addr, uint16_t port)
{
//not needed
}
void SamdPlatform::closeMultiCast()
{
//not needed
}
bool SamdPlatform::sendBytes(uint8_t * buffer, uint16_t len)
{
//not needed
}
int SamdPlatform::readBytes(uint8_t * buffer, uint16_t maxLen)
{
//not needed
return 0;
}
uint8_t * SamdPlatform::getEepromBuffer(uint16_t size)
{
//EEPROM.begin(size);
@ -95,196 +33,6 @@ void SamdPlatform::commitToEeprom()
{
EEPROM.commit();
}
#endif
void SamdPlatform::setupUart()
{
SerialKNX.begin(19200, SERIAL_8E1);
while (!SerialKNX)
;
}
void SamdPlatform::closeUart()
{
SerialKNX.end();
}
int SamdPlatform::uartAvailable()
{
return SerialKNX.available();
}
size_t SamdPlatform::writeUart(const uint8_t data)
{
//printHex("<p", &data, 1);
return SerialKNX.write(data);
}
size_t SamdPlatform::writeUart(const uint8_t *buffer, size_t size)
{
//printHex("<p", buffer, size);
return SerialKNX.write(buffer, size);
}
int SamdPlatform::readUart()
{
int val = SerialKNX.read();
//if(val > 0)
// printHex("p>", (uint8_t*)&val, 1);
return val;
}
size_t SamdPlatform::readBytesUart(uint8_t *buffer, size_t length)
{
size_t toRead = length;
uint8_t* pos = buffer;
while (toRead > 0)
{
size_t val = SerialKNX.readBytes(pos, toRead);
pos += val;
toRead -= val;
}
//printHex("p>", buffer, length);
return length;
}
void print(const char* s)
{
SerialDBG.print(s);
}
void print(char c)
{
SerialDBG.print(c);
}
void print(unsigned char num)
{
SerialDBG.print(num);
}
void print(unsigned char num, int base)
{
SerialDBG.print(num, base);
}
void print(int num)
{
SerialDBG.print(num);
}
void print(int num, int base)
{
SerialDBG.print(num, base);
}
void print(unsigned int num)
{
SerialDBG.print(num);
}
void print(unsigned int num, int base)
{
SerialDBG.print(num, base);
}
void print(long num)
{
SerialDBG.print(num);
}
void print(long num, int base)
{
SerialDBG.print(num, base);
}
void print(unsigned long num)
{
SerialDBG.print(num);
}
void print(unsigned long num, int base)
{
SerialDBG.print(num, base);
}
void print(double num)
{
SerialDBG.print(num);
}
void println(const char* s)
{
SerialDBG.println(s);
}
void println(char c)
{
SerialDBG.println(c);
}
void println(unsigned char num)
{
SerialDBG.println(num);
}
void println(unsigned char num, int base)
{
SerialDBG.println(num, base);
}
void println(int num)
{
SerialDBG.println(num);
}
void println(int num, int base)
{
SerialDBG.println(num, base);
}
void println(unsigned int num)
{
SerialDBG.println(num);
}
void println(unsigned int num, int base)
{
SerialDBG.println(num, base);
}
void println(long num)
{
SerialDBG.println(num);
}
void println(long num, int base)
{
SerialDBG.println(num, base);
}
void println(unsigned long num)
{
SerialDBG.println(num);
}
void println(unsigned long num, int base)
{
SerialDBG.println(num, base);
}
void println(double num)
{
SerialDBG.println(num);
}
void println(void)
{
SerialDBG.println();
}
#endif

View File

@ -1,50 +1,20 @@
#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();
//multicast
void setupMultiCast(uint32_t addr, uint16_t port);
void closeMultiCast();
bool sendBytes(uint8_t* buffer, uint16_t len);
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 size_t readBytesUart(uint8_t *buffer, size_t length);
#include "arduino_platform.h"
//memory
#include "Arduino.h"
#ifdef ARDUINO_ARCH_SAMD
#define SerialDBG SerialUSB
class SamdPlatform : public ArduinoPlatform
{
public:
SamdPlatform();
SamdPlatform( HardwareSerial& s);
void restart();
uint8_t* getEepromBuffer(uint16_t size);
void commitToEeprom();
private:
uint32_t _mulitcastAddr;
uint16_t _mulitcastPort;
};
};
#endif

View File

@ -45,7 +45,7 @@
</CustomDebug>
<DeviceTerminalSettings>
<Connection xsi:type="com.sysprogs.terminal.connection.serial">
<ComPortName>COM5</ComPortName>
<ComPortName>COM4</ComPortName>
<AdvancedSettings>
<BaudRate>115200</BaudRate>
<DataBits>8</DataBits>
@ -272,63 +272,6 @@
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>Arduino_Genuino_Zero_(Native_USB_Port)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands />
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod />
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Auto</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>arduino:samd:arduino_zero_native</BoardID>
<Properties>
<Entries />
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
</Configurations>
<ProgramArgumentsSuggestions />
</VisualGDBProjectSettings2>

View File

@ -173,69 +173,6 @@
</CodeAnalyzerSettings>
</CodeSense>
<Configurations>
<VisualGDBConfiguration>
<PlatformName>Arduino Genuino Zero (Native USB Port)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands />
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod>
<ID>gdbsim</ID>
<Configuration>
<Entries />
</Configuration>
</DebugMethod>
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Disabled</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>arduino:samd:arduino_zero_native</BoardID>
<COMPort>COM11</COMPort>
<Properties>
<Entries />
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>NodeMCU_1 0_(ESP-12E_Module)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
@ -334,6 +271,153 @@
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>Arduino_Genuino_Zero_(Native_USB_Port)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands />
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod />
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Auto</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>arduino:samd:arduino_zero_native</BoardID>
<Properties>
<Entries />
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>ESP32_Dev_Module</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands />
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod />
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Auto</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>esp32:esp32:esp32</BoardID>
<Properties>
<Entries>
<KeyValue>
<Key>PSRAM</Key>
<Value>disabled</Value>
</KeyValue>
<KeyValue>
<Key>PartitionScheme</Key>
<Value>default</Value>
</KeyValue>
<KeyValue>
<Key>CPUFreq</Key>
<Value>240</Value>
</KeyValue>
<KeyValue>
<Key>FlashMode</Key>
<Value>qio</Value>
</KeyValue>
<KeyValue>
<Key>FlashFreq</Key>
<Value>80</Value>
</KeyValue>
<KeyValue>
<Key>FlashSize</Key>
<Value>4M</Value>
</KeyValue>
<KeyValue>
<Key>UploadSpeed</Key>
<Value>921600</Value>
</KeyValue>
<KeyValue>
<Key>DebugLevel</Key>
<Value>none</Value>
</KeyValue>
</Entries>
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
</Configurations>
<ProgramArgumentsSuggestions />
</VisualGDBProjectSettings2>

View File

@ -25,8 +25,10 @@
<AdditionalLibraryDirectories>
<string>..\..</string>
</AdditionalLibraryDirectories>
<IgnoreNormalLibraryDirectories>false</IgnoreNormalLibraryDirectories>
<OutputSubdirectory>Output\$(PlatformName.defuse)\$(ConfigurationName.defuse)</OutputSubdirectory>
<EnableVerboseBuild>true</EnableVerboseBuild>
<PreprocessorMacros />
</Build>
<CustomBuild>
<PreSyncActions />
@ -171,69 +173,6 @@
</CodeAnalyzerSettings>
</CodeSense>
<Configurations>
<VisualGDBConfiguration>
<PlatformName>Arduino Genuino Zero (Native USB Port)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">
<AdditionalStartupCommands />
<AdditionalGDBSettings>
<Features>
<DisableAutoDetection>false</DisableAutoDetection>
<UseFrameParameter>false</UseFrameParameter>
<SimpleValuesFlagSupported>false</SimpleValuesFlagSupported>
<ListLocalsSupported>false</ListLocalsSupported>
<ByteLevelMemoryCommandsAvailable>false</ByteLevelMemoryCommandsAvailable>
<ThreadInfoSupported>false</ThreadInfoSupported>
<PendingBreakpointsSupported>false</PendingBreakpointsSupported>
<SupportTargetCommand>false</SupportTargetCommand>
<ReliableBreakpointNotifications>false</ReliableBreakpointNotifications>
</Features>
<EnableSmartStepping>false</EnableSmartStepping>
<FilterSpuriousStoppedNotifications>false</FilterSpuriousStoppedNotifications>
<ForceSingleThreadedMode>false</ForceSingleThreadedMode>
<UseAppleExtensions>false</UseAppleExtensions>
<CanAcceptCommandsWhileRunning>false</CanAcceptCommandsWhileRunning>
<MakeLogFile>false</MakeLogFile>
<IgnoreModuleEventsWhileStepping>true</IgnoreModuleEventsWhileStepping>
<UseRelativePathsOnly>false</UseRelativePathsOnly>
<ExitAction>None</ExitAction>
<DisableDisassembly>false</DisableDisassembly>
<ExamineMemoryWithXCommand>false</ExamineMemoryWithXCommand>
<StepIntoNewInstanceEntry>main</StepIntoNewInstanceEntry>
<ExamineRegistersInRawFormat>true</ExamineRegistersInRawFormat>
<DisableSignals>false</DisableSignals>
<EnableAsyncExecutionMode>false</EnableAsyncExecutionMode>
<EnableNonStopMode>false</EnableNonStopMode>
<MaxBreakpointLimit>0</MaxBreakpointLimit>
</AdditionalGDBSettings>
<DebugMethod>
<ID>gdbsim</ID>
<Configuration>
<Entries />
</Configuration>
</DebugMethod>
<AutoDetectRTOS>true</AutoDetectRTOS>
<SemihostingSupport>Disabled</SemihostingSupport>
<SemihostingPollingDelay>0</SemihostingPollingDelay>
<StepIntoEntryPoint>false</StepIntoEntryPoint>
<ReloadFirmwareOnReset>false</ReloadFirmwareOnReset>
<ValidateEndOfStackAddress>true</ValidateEndOfStackAddress>
<StopAtEntryPoint>false</StopAtEntryPoint>
<EnableVirtualHalts>false</EnableVirtualHalts>
<DynamicAnalysisSettings />
<EndOfStackSymbol>_estack</EndOfStackSymbol>
<TimestampProviderTicksPerSecond>0</TimestampProviderTicksPerSecond>
<KeepConsoleAfterExit>false</KeepConsoleAfterExit>
<CheckInterfaceDrivers>true</CheckInterfaceDrivers>
</DebugSettingsOverride>
<BuildSettingsExtension xsi:type="com.visualgdb.build.external.arduino.extension">
<BoardID>arduino:samd:arduino_zero_native</BoardID>
<COMPort>COM11</COMPort>
<Properties>
<Entries />
</Properties>
<DebugUnoptimizedComponentTypes>Sketch</DebugUnoptimizedComponentTypes>
</BuildSettingsExtension>
</VisualGDBConfiguration>
<VisualGDBConfiguration>
<PlatformName>NodeMCU 1 0 (ESP-12E Module)</PlatformName>
<DebugSettingsOverride xsi:type="com.visualgdb.debug.embedded">

View File

@ -17,125 +17,123 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Arduino_Genuino_Zero_(Native_USB_Port) = Debug|Arduino_Genuino_Zero_(Native_USB_Port)
Debug|ESP32_Dev_Module = Debug|ESP32_Dev_Module
Debug|Mixed = Debug|Mixed
Debug|NodeMCU_1 0_(ESP-12E_Module) = Debug|NodeMCU_1 0_(ESP-12E_Module)
Debug|VisualGDB = Debug|VisualGDB
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port) = MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port)
MinSizeRel|ESP32_Dev_Module = MinSizeRel|ESP32_Dev_Module
MinSizeRel|Mixed = MinSizeRel|Mixed
MinSizeRel|NodeMCU_1 0_(ESP-12E_Module) = MinSizeRel|NodeMCU_1 0_(ESP-12E_Module)
MinSizeRel|VisualGDB = MinSizeRel|VisualGDB
MinSizeRel|x64 = MinSizeRel|x64
MinSizeRel|x86 = MinSizeRel|x86
Release|Arduino_Genuino_Zero_(Native_USB_Port) = Release|Arduino_Genuino_Zero_(Native_USB_Port)
Release|ESP32_Dev_Module = Release|ESP32_Dev_Module
Release|Mixed = Release|Mixed
Release|NodeMCU_1 0_(ESP-12E_Module) = Release|NodeMCU_1 0_(ESP-12E_Module)
Release|VisualGDB = Release|VisualGDB
Release|x64 = Release|x64
Release|x86 = Release|x86
RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port) = RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port)
RelWithDebInfo|ESP32_Dev_Module = RelWithDebInfo|ESP32_Dev_Module
RelWithDebInfo|Mixed = RelWithDebInfo|Mixed
RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module) = RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module)
RelWithDebInfo|VisualGDB = RelWithDebInfo|VisualGDB
RelWithDebInfo|x64 = RelWithDebInfo|x64
RelWithDebInfo|x86 = RelWithDebInfo|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Debug|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|VisualGDB.Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.Build.0 = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.Build.0 = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Debug|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|ESP32_Dev_Module.Build.0 = Debug|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|ESP32_Dev_Module.ActiveCfg = Release|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|ESP32_Dev_Module.Build.0 = Release|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino_Genuino_Zero_(Native_USB_Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|ESP32_Dev_Module
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x64.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.RelWithDebInfo|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Mixed.ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Mixed.Build.0 = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|VisualGDB.ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x64.ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x86.ActiveCfg = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|x86.Build.0 = Debug|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Mixed.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|Mixed.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|VisualGDB.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|VisualGDB.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x64.ActiveCfg = Release|Win32
@ -143,55 +141,55 @@ Global
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x86.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.MinSizeRel|x86.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|ESP32_Dev_Module.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|Mixed.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|VisualGDB.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x64.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x86.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Release|x86.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Mixed.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|Mixed.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|VisualGDB.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x64.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x64.Build.0 = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.RelWithDebInfo|x86.Build.0 = Release|Win32
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Mixed.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|Mixed.Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|VisualGDB.ActiveCfg = Debug|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|x64.ActiveCfg = Debug|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|x86.ActiveCfg = Debug|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x64.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x64.Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|x86.Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|x64.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Release|x86.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.Build.0 = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x64.ActiveCfg = Release|Generic ESP8266 Module
@ -199,18 +197,17 @@ Global
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.ActiveCfg = Release|Generic ESP8266 Module
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|x86.Build.0 = Release|Generic ESP8266 Module
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|Mixed.ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|VisualGDB.ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x64.ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x86.ActiveCfg = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Debug|x86.Build.0 = Debug|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Mixed.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|Mixed.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|VisualGDB.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|VisualGDB.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x64.ActiveCfg = Release|Win32
@ -218,18 +215,18 @@ Global
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x86.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.MinSizeRel|x86.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|ESP32_Dev_Module.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|Mixed.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|VisualGDB.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x64.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x86.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.Release|x86.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Mixed.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|Mixed.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|VisualGDB.Build.0 = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x64.ActiveCfg = Release|Win32
@ -237,18 +234,17 @@ Global
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x86.ActiveCfg = Release|Win32
{456D87B3-1DFE-4724-BDEF-17E0FDB55A61}.RelWithDebInfo|x86.Build.0 = Release|Win32
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|ESP32_Dev_Module.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|x64.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Debug|x86.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
@ -256,18 +252,17 @@ Global
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.MinSizeRel|x86.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.Release|x86.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Arduino_Genuino_Zero_(Native_USB_Port).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|ESP32_Dev_Module.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|ESP32_Dev_Module.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|VisualGDB.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{3F71AE50-5D11-46D0-918F-1C97717824B0}.RelWithDebInfo|x64.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)