make GOT completely dynamic from ETS. GOs are now only available if device was programmed via ETS

This commit is contained in:
Thomas Kunze 2019-05-09 20:52:04 +02:00
parent c79b921d1c
commit 174e29372c
20 changed files with 643 additions and 342 deletions

View File

@ -2,33 +2,18 @@
#include <knx.h>
#include <WiFiManager.h>
// declare array of all groupobjects with their sizes in byte
GroupObject groupObjects[]
{
GroupObject(2),
GroupObject(2),
GroupObject(2),
GroupObject(2),
GroupObject(2),
GroupObject(1),
GroupObject(2),
GroupObject(2),
GroupObject(1),
GroupObject(2)
}
;
// create named references for easy access to group objects
GroupObject& goRawTemperature = groupObjects[0];
GroupObject& goPressure = groupObjects[1];
GroupObject& goRawHumidity = groupObjects[2];
GroupObject& goGasResistance = groupObjects[3];
GroupObject& goIaqEstimate = groupObjects[4];
GroupObject& goIaqAccurace = groupObjects[5];
GroupObject& goTemperature = groupObjects[6];
GroupObject& goHumidity = groupObjects[7];
GroupObject& goTriggerSample = groupObjects[8];
GroupObject& goCo2Ppm = groupObjects[9];
#define goRawTemperature knx.getGroupObject(0)
#define goPressure knx.getGroupObject(1)
#define goRawHumidity knx.getGroupObject(2)
#define goGasResistance knx.getGroupObject(3)
#define goIaqEstimate knx.getGroupObject(4)
#define goIaqAccurace knx.getGroupObject(5)
#define goTemperature knx.getGroupObject(6)
#define goHumidity knx.getGroupObject(7)
#define goTriggerSample knx.getGroupObject(8)
#define goCo2Ppm knx.getGroupObject(9)
#define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // 360 minutes - 4 times a day
@ -62,14 +47,12 @@ void setup(void)
WiFiManager wifiManager;
wifiManager.autoConnect("knx-bme680");
// register group objects
knx.registerGroupObjects(groupObjects, 10);
// read adress table, association table, groupobject table and parameters from eeprom
knx.readMemory();
// register callback for reset GO
goTriggerSample.callback(triggerCallback);
if(knx.configured())
goTriggerSample.callback(triggerCallback);
iaqSensor.begin(BME680_I2C_ADDR_SECONDARY, Wire);

View File

@ -1,19 +1,11 @@
#include <knx.h>
// declare array of all groupobjects with their sizes in byte
GroupObject groupObjects[]
{
GroupObject(2),
GroupObject(2),
GroupObject(2),
GroupObject(1)
};
// create named references for easy access to group objects
GroupObject& goCurrent = groupObjects[0];
GroupObject& goMax = groupObjects[1];
GroupObject& goMin = groupObjects[2];
GroupObject& goReset = groupObjects[3];
#define goCurrent knx.getGroupObject(0)
#define goMax knx.getGroupObject(1)
#define goMin knx.getGroupObject(2)
#define goReset knx.getGroupObject(3)
float currentValue = 0;
float maxValue = 0;
@ -64,17 +56,15 @@ void setup()
randomSeed(millis());
// register group objects
knx.registerGroupObjects(groupObjects, 4);
// read adress table, association table, groupobject table and parameters from eeprom
knx.readMemory();
// register callback for reset GO
goReset.callback(resetCallback);
// print values of parameters if device is already configured
if (knx.configured())
{
// register callback for reset GO
goReset.callback(resetCallback);
SerialDBG.print("Timeout: "); SerialDBG.println(knx.paramByte(0));
SerialDBG.print("Zykl. senden: "); SerialDBG.println(knx.paramByte(1));
SerialDBG.print("Min/Max senden: "); SerialDBG.println(knx.paramByte(2));

View File

@ -3,19 +3,10 @@
#define RELAYPIN 12
// declare array of all groupobjects with their sizes in byte
GroupObject groupObjects[]
{
GroupObject(1),
GroupObject(1),
GroupObject(1)
};
// create named references for easy access to group objects
GroupObject& goSwitch = groupObjects[0];
GroupObject& goBlock = groupObjects[1];
GroupObject& goStatus = groupObjects[2];
#define goSwitch knx.getGroupObject(0)
#define goBlock knx.getGroupObject(1)
#define goStatus knx.getGroupObject(2)
// callback from switch-GO
@ -33,17 +24,18 @@ void setup()
{
SerialDBG.begin(115200);
WiFiManager wifiManager;
WiFiManager wifiManager;
wifiManager.autoConnect("knx-sonoffS20");
// register group objects
knx.registerGroupObjects(groupObjects, 3);
// read adress table, association table, groupobject table and parameters from eeprom
knx.readMemory();
// register callback for reset GO
goSwitch.callback(switchCallback);
if (knx.configured())
{
// register callback for reset GO
goSwitch.callback(switchCallback);
}
// start the framework. Will get wifi first.
knx.start();
}
@ -54,7 +46,7 @@ void loop()
knx.loop();
// only run the application code if the device was configured with ETS
if (!knx.configured())
if(!knx.configured())
return;
// nothing else to do.

View File

@ -75,12 +75,6 @@ static bool Configured()
return bau.configured();
}
static void RegisterGroupObjects(std::vector<GroupObject>& gos)
{
GroupObjectTableObject& got(bau.groupObjectTable());
got.groupObjects(gos.data(), gos.size());
}
PYBIND11_MAKE_OPAQUE(std::vector<GroupObject>);
PYBIND11_MODULE(knx, m)
@ -94,12 +88,12 @@ PYBIND11_MODULE(knx, m)
m.def("ProgramMode", (bool(*)())&ProgramMode, "get programing mode active.");
m.def("ProgramMode", (bool(*)(bool))&ProgramMode, "Activate / deactivate programing mode.");
m.def("Configured", (bool(*)())&Configured, "get configured status.");
m.def("RegisterGroupObjects", &RegisterGroupObjects);
m.def("FlashFilePath", []() { return platform.flashFilePath(); });
m.def("FlashFilePath", [](std::string path) { platform.flashFilePath(path); });
m.def("GetGroupObject", [](uint16_t goNr) { return bau.groupObjectTable().get(goNr); });
py::class_<GroupObject>(m, "GroupObject", py::dynamic_attr())
.def(py::init<uint8_t>())
.def(py::init())
.def("objectWrite", (void(GroupObject::*)(float))&GroupObject::objectWrite)
.def("asap", &GroupObject::asap)
.def("size", &GroupObject::valueSize)

View File

@ -171,4 +171,167 @@ size_t EspPlatform::readBytesUart(uint8_t *buffer, size_t length)
printHex("p>", buffer, length);
return length;
}
void print(const char* s)
{
printf("%s", s);
}
void print(char c)
{
printf("%c", c);
}
void print(unsigned char num)
{
print(num, DEC);
}
void print(unsigned char num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(int num)
{
print(num, DEC);
}
void print(int num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(unsigned int num)
{
print(num, DEC);
}
void print(unsigned int num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(long num)
{
print(num, DEC);
}
void print(long num, int base)
{
if (base == HEX)
printf("%lX", num);
else
printf("%ld", num);
}
void print(unsigned long num)
{
print(num, DEC);
}
void print(unsigned long num, int base)
{
if (base == HEX)
printf("%lX", num);
else
printf("%ld", num);
}
void print(double num)
{
printf("%f", num);
}
void println(const char* s)
{
printf("%s\n", s);
}
void println(char c)
{
printf("%c\n", c);
}
void println(unsigned char num)
{
println(num, DEC);
}
void println(unsigned char num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(int num)
{
println(num, DEC);
}
void println(int num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(unsigned int num)
{
println(num, DEC);
}
void println(unsigned int num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(long num)
{
println(num, DEC);
}
void println(long num, int base)
{
if (base == HEX)
printf("%lX\n", num);
else
printf("%ld\n", num);
}
void println(unsigned long num)
{
println(num, DEC);
}
void println(unsigned long num, int base)
{
if (base == HEX)
printf("%lX\n", num);
else
printf("%ld\n", num);
}
void println(double num)
{
printf("%f\n", num);
}
void println(void)
{
printf("\n");
}
#endif

View File

@ -40,14 +40,14 @@ uint8_t APDU::length() const
void APDU::printPDU()
{
_print("APDU: ");
_print(type(), HEX);
_print(" ");
_print(_data[0] & 0x3, HEX);
print("APDU: ");
print(type(), HEX);
print(" ");
print(_data[0] & 0x3, HEX);
for (uint8_t i = 1; i < length() + 1; ++i)
{
if (i) _print(" ");
_print(_data[i], HEX);
if (i) print(" ");
print(_data[i], HEX);
}
_println();
println();
}

View File

@ -9,13 +9,13 @@ uint8_t* popByte(uint8_t& b, uint8_t* data)
void printHex(const char* suffix, const uint8_t *data, size_t length)
{
_print(suffix);
print(suffix);
for (int i = 0; i < length; i++) {
if (data[i] < 0x10) { _print("0"); }
_print(data[i], HEX);
_print(" ");
if (data[i] < 0x10) { print("0"); }
print(data[i], HEX);
print(" ");
}
_println();
println();
}
uint8_t* popWord(uint16_t& w, uint8_t* data)
@ -84,171 +84,3 @@ uint32_t getInt(uint8_t * data)
{
return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];
}
#ifdef __linux__
void print(const char* s)
{
printf("%s", s);
}
void print(char c)
{
printf("%c", c);
}
void print(unsigned char num)
{
print(num, DEC);
}
void print(unsigned char num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(int num)
{
print(num, DEC);
}
void print(int num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(unsigned int num)
{
print(num, DEC);
}
void print(unsigned int num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(long num)
{
print(num, DEC);
}
void print(long num, int base)
{
if (base == HEX)
printf("%lX", num);
else
printf("%ld", num);
}
void print(unsigned long num)
{
print(num, DEC);
}
void print(unsigned long num, int base)
{
if (base == HEX)
printf("%lX", num);
else
printf("%ld", num);
}
void print(double num)
{
printf("%f", num);
}
void println(const char* s)
{
printf("%s\n", s);
}
void println(char c)
{
printf("%c\n", c);
}
void println(unsigned char num)
{
println(num, DEC);
}
void println(unsigned char num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(int num)
{
println(num, DEC);
}
void println(int num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(unsigned int num)
{
println(num, DEC);
}
void println(unsigned int num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(long num)
{
println(num, DEC);
}
void println(long num, int base)
{
if (base == HEX)
printf("%lX\n", num);
else
printf("%ld\n", num);
}
void println(unsigned long num)
{
println(num, DEC);
}
void println(unsigned long num, int base)
{
if (base == HEX)
printf("%lX\n", num);
else
printf("%ld\n", num);
}
void println(double num)
{
printf("%f\n", num);
}
void println(void)
{
printf("\n");
}
#endif

View File

@ -1,21 +1,30 @@
#pragma once
#include <stdint.h>
#include <cstddef>
#include <cstdint>
#ifdef __linux__
#include <arpa/inet.h>
#include <cstdio>
#elif ARDUINO_ARCH_SAMD
#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )
#define ntohs(x) htons(x)
#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \
((x)<< 8 & 0x00FF0000UL) | \
((x)>> 8 & 0x0000FF00UL) | \
((x)>>24 & 0x000000FFUL) )
#define ntohl(x) htonl(x)
#elif ARDUINO_ARCH_ESP8266
#include <user_interface.h>
#endif
#define lowByte(val) ((val) & 255)
#define highByte(val) (((val) >> ((sizeof(val) - 1) << 3)) & 255)
#define bitRead(val, bitno) (((val) >> (bitno)) & 1)
// print functions are implemented in the platform files
#define DEC 10
#define HEX 16
#define _print print
#define _println println
void print(const char[]);
void print(char);
void print(unsigned char, int = DEC);
@ -35,23 +44,7 @@ void println(unsigned long, int = DEC);
void println(double, int = 2);
void println(void);
#elif ARDUINO_ARCH_SAMD
#include <Arduino.h>
#define htons(x) ( (((x)<<8)&0xFF00) | (((x)>>8)&0xFF) )
#define ntohs(x) htons(x)
#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \
((x)<< 8 & 0x00FF0000UL) | \
((x)>> 8 & 0x0000FF00UL) | \
((x)>>24 & 0x000000FFUL) )
#define ntohl(x) htonl(x)
#define _print SerialUSB.print
#define _println SerialUSB.println
#else
#include <Arduino.h>
#include <user_interface.h>
#define _print Serial.print
#define _println Serial.println
#endif
void printHex(const char* suffix, const uint8_t *data, size_t length);

View File

@ -76,7 +76,7 @@ bool DataLinkLayer::sendTelegram(NPDU & npdu, AckType ack, uint16_t destinationA
if (!frame.valid())
{
_println("invalid frame");
println("invalid frame");
return false;
}

View File

@ -4,13 +4,12 @@
#include "datapoint_types.h"
#include "group_object_table_object.h"
GroupObject::GroupObject(uint8_t size)
GroupObject::GroupObject()
{
_data = new uint8_t[size];
memset(_data, 0, size);
_data = 0;
_commFlag = Ok;
_table = 0;
_dataLength = size;
_dataLength = 0;
_updateHandler = 0;
}
@ -27,7 +26,8 @@ GroupObject::GroupObject(const GroupObject& other)
GroupObject::~GroupObject()
{
delete[] _data;
if (_data)
delete[] _data;
}
bool GroupObject::responseUpdateEnable()

View File

@ -31,7 +31,7 @@ class GroupObject
{
friend class GroupObjectTableObject;
public:
GroupObject(uint8_t size);
GroupObject();
GroupObject(const GroupObject& other);
virtual ~GroupObject();
// config flags from ETS

View File

@ -7,19 +7,22 @@
GroupObjectTableObject::GroupObjectTableObject(Platform& platform)
: TableObject(platform)
{
_groupObjects = 0;
_groupObjectCount = 0;
}
GroupObjectTableObject::~GroupObjectTableObject()
{
freeGroupObjects();
}
void GroupObjectTableObject::readProperty(PropertyID id, uint32_t start, uint32_t& count, uint8_t* data)
{
switch (id)
{
case PID_OBJECT_TYPE:
pushWord(OT_GRP_OBJ_TABLE, data);
break;
default:
TableObject::readProperty(id, start, count, data);
case PID_OBJECT_TYPE:
pushWord(OT_GRP_OBJ_TABLE, data);
break;
default:
TableObject::readProperty(id, start, count, data);
}
}
@ -81,6 +84,7 @@ GroupObject& GroupObjectTableObject::nextUpdatedObject(bool& valid)
void GroupObjectTableObject::groupObjects(GroupObject * objs, uint16_t size)
{
freeGroupObjects();
_groupObjects = objs;
_groupObjectCount = size;
initGroupObjects();
@ -104,18 +108,22 @@ bool GroupObjectTableObject::initGroupObjects()
{
if (!_tableData)
return false;
freeGroupObjects();
uint16_t goCount = ntohs(_tableData[0]);
if (goCount != _groupObjectCount)
return false;
_groupObjects = new GroupObject[goCount];
_groupObjectCount = goCount;
for (uint16_t asap = 1; asap <= goCount; asap++)
{
GroupObject& go = _groupObjects[asap - 1];
go._asap = asap;
go._table = this;
if (go._dataLength != go.goSize())
return false;
go._dataLength = go.goSize();
go._data = new uint8_t[go._dataLength];
if (go.valueReadOnInit())
go.requestObjectRead();
@ -142,4 +150,13 @@ uint8_t GroupObjectTableObject::propertyCount()
PropertyDescription* GroupObjectTableObject::propertyDescriptions()
{
return _propertyDescriptions;
}
}
void GroupObjectTableObject::freeGroupObjects()
{
if (_groupObjects)
delete[] _groupObjects;
_groupObjectCount = 0;
_groupObjects = 0;
}

View File

@ -9,6 +9,7 @@ class GroupObjectTableObject: public TableObject
public:
GroupObjectTableObject(Platform& platform);
virtual ~GroupObjectTableObject();
void readProperty(PropertyID id, uint32_t start, uint32_t& count, uint8_t* data);
uint16_t entryCount();
GroupObject& get(uint16_t asap);
@ -22,8 +23,9 @@ protected:
uint8_t propertyCount();
PropertyDescription* propertyDescriptions();
private:
void freeGroupObjects();
bool initGroupObjects();
uint16_t* _tableData = 0;
GroupObject* _groupObjects;
uint16_t _groupObjectCount;
GroupObject* _groupObjects = 0;
uint16_t _groupObjectCount = 0;
};

View File

@ -276,7 +276,7 @@ bool TpUartDataLinkLayer::checkDataCon(uint8_t firstByte)
if (_sendBuffer == 0)
{
_println("got unexpected L_DATA_CON");
println("got unexpected L_DATA_CON");
return true;
}
@ -293,7 +293,7 @@ bool TpUartDataLinkLayer::checkPollDataInd(uint8_t firstByte)
return false;
// not sure if this can happen
_println("got L_POLL_DATA_IND");
println("got L_POLL_DATA_IND");
return true;
}
@ -304,7 +304,7 @@ bool TpUartDataLinkLayer::checkAckNackInd(uint8_t firstByte)
return false;
// this can only happen in bus monitor mode
_println("got L_ACKN_IND");
println("got L_ACKN_IND");
return true;
}
@ -313,7 +313,7 @@ bool TpUartDataLinkLayer::checkResetInd(uint8_t firstByte)
if (firstByte != U_RESET_IND)
return false;
_println("got U_RESET_IND");
println("got U_RESET_IND");
return true;
}
@ -323,9 +323,9 @@ bool TpUartDataLinkLayer::checkStateInd(uint8_t firstByte)
if (tmp != U_STATE_IND)
return false;
_print("got U_STATE_IND: 0x");
_print(firstByte, HEX);
_println();
print("got U_STATE_IND: 0x");
print(firstByte, HEX);
println();
return true;
}
@ -335,9 +335,9 @@ bool TpUartDataLinkLayer::checkFrameStateInd(uint8_t firstByte)
if (tmp != U_FRAME_STATE_IND)
return false;
_print("got U_FRAME_STATE_IND: 0x");
_print(firstByte, HEX);
_println();
print("got U_FRAME_STATE_IND: 0x");
print(firstByte, HEX);
println();
return true;
}
@ -347,9 +347,9 @@ bool TpUartDataLinkLayer::checkConfigureInd(uint8_t firstByte)
if (tmp != U_CONFIGURE_IND)
return false;
_print("got U_CONFIGURE_IND: 0x");
_print(firstByte, HEX);
_println();
print("got U_CONFIGURE_IND: 0x");
print(firstByte, HEX);
println();
return true;
}
@ -358,7 +358,7 @@ bool TpUartDataLinkLayer::checkFrameEndInd(uint8_t firstByte)
if (firstByte != U_FRAME_END_IND)
return false;
_println("got U_FRAME_END_IND");
println("got U_FRAME_END_IND");
return true;
}
@ -367,7 +367,7 @@ bool TpUartDataLinkLayer::checkStopModeInd(uint8_t firstByte)
if (firstByte != U_STOP_MODE_IND)
return false;
_println("got U_STOP_MODE_IND");
println("got U_STOP_MODE_IND");
return true;
}
@ -376,25 +376,25 @@ bool TpUartDataLinkLayer::checkSystemStatInd(uint8_t firstByte)
if (firstByte != U_SYSTEM_STAT_IND)
return false;
_print("got U_SYSTEM_STAT_IND: 0x");
print("got U_SYSTEM_STAT_IND: 0x");
while (true)
{
int tmp = _platform.readUart();
if (tmp < 0)
continue;
_print(tmp, HEX);
print(tmp, HEX);
break;
}
_println();
println();
return true;
}
void TpUartDataLinkLayer::handleUnexpected(uint8_t firstByte)
{
_print("got UNEXPECTED: 0x");
_print(firstByte, HEX);
_println();
print("got UNEXPECTED: 0x");
print(firstByte, HEX);
println();
}
void TpUartDataLinkLayer::enabled(bool value)
@ -402,8 +402,8 @@ void TpUartDataLinkLayer::enabled(bool value)
if (value && !_enabled)
{
_platform.setupUart();
_print("ownaddr ");
_println(_deviceObject.induvidualAddress(), HEX);
print("ownaddr ");
println(_deviceObject.induvidualAddress(), HEX);
resetChip();
_enabled = true;
return;

View File

@ -89,11 +89,6 @@ void KnxFacade::loop()
_bau.loop();
}
void KnxFacade::registerGroupObjects(GroupObject* groupObjects, uint16_t count)
{
_bau.groupObjectTable().groupObjects(groupObjects, count);
}
void KnxFacade::manufacturerId(uint16_t value)
{
_bau.deviceObject().manufacturerId(value);
@ -190,3 +185,9 @@ uint8_t* KnxFacade::restore(uint8_t* buffer)
return buffer;
}
GroupObject& KnxFacade::getGroupObject(uint16_t goNr)
{
return _bau.groupObjectTable().get(goNr);
}

View File

@ -29,7 +29,6 @@ public:
void readMemory();
void writeMemory();
void loop();
void registerGroupObjects(GroupObject* groupObjects, uint16_t count);
void manufacturerId(uint16_t value);
void bauNumber(uint32_t value);
void orderNumber(const char* value);
@ -42,6 +41,7 @@ public:
uint8_t paramByte(uint32_t addr);
uint16_t paramWord(uint32_t addr);
uint32_t paramInt(uint32_t addr);
GroupObject& getGroupObject(uint16_t goNr);
private:
BauSystemB& _bau;
uint32_t _ledPin = LED_BUILTIN;

View File

@ -329,4 +329,168 @@ std::string LinuxPlatform::flashFilePath()
{
return _flashFilePath;
}
void print(const char* s)
{
printf("%s", s);
}
void print(char c)
{
printf("%c", c);
}
void print(unsigned char num)
{
print(num, DEC);
}
void print(unsigned char num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(int num)
{
print(num, DEC);
}
void print(int num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(unsigned int num)
{
print(num, DEC);
}
void print(unsigned int num, int base)
{
if (base == HEX)
printf("%X", num);
else
printf("%d", num);
}
void print(long num)
{
print(num, DEC);
}
void print(long num, int base)
{
if (base == HEX)
printf("%lX", num);
else
printf("%ld", num);
}
void print(unsigned long num)
{
print(num, DEC);
}
void print(unsigned long num, int base)
{
if (base == HEX)
printf("%lX", num);
else
printf("%ld", num);
}
void print(double num)
{
printf("%f", num);
}
void println(const char* s)
{
printf("%s\n", s);
}
void println(char c)
{
printf("%c\n", c);
}
void println(unsigned char num)
{
println(num, DEC);
}
void println(unsigned char num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(int num)
{
println(num, DEC);
}
void println(int num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(unsigned int num)
{
println(num, DEC);
}
void println(unsigned int num, int base)
{
if (base == HEX)
printf("%X\n", num);
else
printf("%d\n", num);
}
void println(long num)
{
println(num, DEC);
}
void println(long num, int base)
{
if (base == HEX)
printf("%lX\n", num);
else
printf("%ld\n", num);
}
void println(unsigned long num)
{
println(num, DEC);
}
void println(unsigned long num, int base)
{
if (base == HEX)
printf("%lX\n", num);
else
printf("%ld\n", num);
}
void println(double num)
{
printf("%f\n", num);
}
void println(void)
{
printf("\n");
}
#endif

View File

@ -15,17 +15,10 @@ float maxValue = 0;
float minValue = RAND_MAX;
long lastsend = 0;
GroupObject groupObjects[]
{
GroupObject(2),
GroupObject(2),
GroupObject(2),
GroupObject(1)
};
#define CURR groupObjects[0]
#define MAX groupObjects[1]
#define MIN groupObjects[2]
#define RESET groupObjects[3]
#define CURR bau.groupObjectTable().get(0)
#define MAX bau.groupObjectTable().get(1)
#define MIN bau.groupObjectTable().get(2)
#define RESET bau.groupObjectTable().get(3)
void measureTemp()
{
@ -75,10 +68,8 @@ void setup()
srand((unsigned int)time(NULL));
bau.readMemory();
GroupObjectTableObject& got(bau.groupObjectTable());
got.groupObjects(groupObjects, 4);
RESET.callback(resetCallback);
if (bau.configured())
RESET.callback(resetCallback);
if (bau.deviceObject().induvidualAddress() == 0)
bau.deviceObject().progMode(true);

View File

@ -45,7 +45,7 @@ void SamdPlatform::mdelay(uint32_t millis)
void SamdPlatform::restart()
{
SerialUSB.println("restart");
SerialDBG.println("restart");
NVIC_SystemReset();
}
@ -153,4 +153,138 @@ size_t SamdPlatform::readBytesUart(uint8_t *buffer, size_t length)
//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

@ -17,21 +17,25 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Arduino Genuino Zero (Native USB Port) = Debug|Arduino Genuino Zero (Native USB Port)
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|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|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|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
@ -39,6 +43,7 @@ Global
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|Mixed.ActiveCfg = Debug|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|VisualGDB.ActiveCfg = Debug|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|VisualGDB.Build.0 = Debug|VisualGDB
@ -46,6 +51,8 @@ Global
{819E55F9-05A8-454D-B771-4A99F775DD87}.Debug|x86.ActiveCfg = Debug|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Mixed.ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|Mixed.Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|VisualGDB.ActiveCfg = Release|VisualGDB
@ -55,6 +62,7 @@ Global
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|x86.ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.MinSizeRel|x86.Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Release|Mixed.ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Release|VisualGDB.ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.Release|VisualGDB.Build.0 = Release|VisualGDB
@ -62,6 +70,8 @@ Global
{819E55F9-05A8-454D-B771-4A99F775DD87}.Release|x86.ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Mixed.ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|Mixed.Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|VisualGDB
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|VisualGDB
@ -72,6 +82,8 @@ Global
{819E55F9-05A8-454D-B771-4A99F775DD87}.RelWithDebInfo|x86.Build.0 = Release|VisualGDB
{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|Mixed.ActiveCfg = Debug|NodeMCU_1 0_(ESP-12E_Module)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|Mixed.Build.0 = 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|Arduino Genuino Zero (Native USB Port)
@ -79,6 +91,8 @@ Global
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Debug|x86.ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{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|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|Mixed.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
@ -89,12 +103,15 @@ Global
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{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|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{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|Mixed.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|Mixed.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
@ -105,6 +122,8 @@ Global
{58AFEECD-06E2-4BB7-A13F-E1D5DBAED13F}.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|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)
@ -112,6 +131,8 @@ Global
{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|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|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|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)
@ -122,6 +143,8 @@ Global
{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|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Mixed.ActiveCfg = Release|NodeMCU_1 0_(ESP-12E_Module)
{6165CD6A-91A4-49FA-977A-48F22086CA8E}.Release|Mixed.Build.0 = Release|NodeMCU_1 0_(ESP-12E_Module)
{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)
@ -129,6 +152,8 @@ Global
{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|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|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|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)
@ -138,12 +163,15 @@ Global
{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)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|Mixed.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|VisualGDB.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|x64.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Debug|x86.ActiveCfg = Debug|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Arduino Genuino Zero (Native USB Port).ActiveCfg = Debug|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Arduino Genuino Zero (Native USB Port).Build.0 = Debug|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
@ -154,12 +182,15 @@ Global
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.MinSizeRel|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|VisualGDB.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|x64.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.Release|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Arduino Genuino Zero (Native USB Port).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Mixed.ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|Mixed.Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).ActiveCfg = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
@ -169,6 +200,8 @@ Global
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|x86.ActiveCfg = Release|Arduino Genuino Zero (Native USB Port)
{527A0D25-BC8E-47B8-AA56-BD991BE6CC67}.RelWithDebInfo|x86.Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{68FCB2F7-7A74-43A0-8CBE-36CB25020584}.Debug|Arduino Genuino Zero (Native USB Port).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
@ -176,6 +209,8 @@ Global
{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|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
@ -185,6 +220,7 @@ 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|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
@ -192,6 +228,8 @@ Global
{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|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
@ -201,6 +239,8 @@ Global
{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|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|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Debug|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.Debug|VisualGDB.ActiveCfg = Debug|Generic ESP8266 Module
@ -208,6 +248,8 @@ Global
{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|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|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.MinSizeRel|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module
@ -218,12 +260,15 @@ Global
{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).Build.0 = Release|Arduino Genuino Zero (Native USB Port)
{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|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|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|NodeMCU_1 0_(ESP-12E_Module).Build.0 = Release|NodeMCU 1 0 (ESP-12E Module)
{3DB3061B-09A3-4C8B-A197-CBEEB3336437}.RelWithDebInfo|VisualGDB.ActiveCfg = Release|Generic ESP8266 Module