mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	
						commit
						36c2cc2e29
					
				| @ -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 | ||||
|     }; | ||||
|  | ||||
| @ -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);
 | ||||
|  | ||||
| @ -22,6 +22,7 @@ uint32_t cyclSend = 0; | ||||
| void setup(void) | ||||
| { | ||||
|     SerialDBG.begin(115200); | ||||
|     ArduinoPlatform::SerialDebug = SerialDBG; | ||||
|     delay(5000); | ||||
|     SerialDBG.println("start"); | ||||
| 
 | ||||
|  | ||||
| @ -25,6 +25,7 @@ void switchCallback(GroupObject& go) | ||||
| void setup() | ||||
| { | ||||
|     SerialDBG.begin(115200); | ||||
|     ArduinoPlatform::SerialDebug = SerialDBG; | ||||
| 
 | ||||
| #ifdef ARDUINO_ARCH_ESP8266 | ||||
|     WiFiManager wifiManager;     | ||||
|  | ||||
| @ -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
									
								
							
							
						
						
									
										270
									
								
								src/arduino_platform.cpp
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										44
									
								
								src/arduino_platform.h
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										98
									
								
								src/esp32_platform.cpp
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										38
									
								
								src/esp32_platform.h
									
									
									
									
									
										Normal 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 | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
| @ -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) | ||||
|  | ||||
| @ -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, | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
| { | ||||
|  | ||||
							
								
								
									
										358
									
								
								src/knx/dpt.h
									
									
									
									
									
								
							
							
						
						
									
										358
									
								
								src/knx/dpt.h
									
									
									
									
									
								
							| @ -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: | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
| @ -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); | ||||
| @ -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; | ||||
|  | ||||
| @ -532,6 +532,8 @@ struct tm KNXValue::timeValue() const | ||||
| 
 | ||||
| KNXValue::KNXValue(float value) | ||||
| { | ||||
|     _value.doubleValue = value; | ||||
|     _type = DoubleType; | ||||
| } | ||||
| 
 | ||||
| KNXValue& KNXValue::operator=(const float value) | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
| }; | ||||
|  | ||||
| @ -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 | ||||
| } | ||||
							
								
								
									
										289
									
								
								src/knx_facade.h
									
									
									
									
									
								
							
							
						
						
									
										289
									
								
								src/knx_facade.h
									
									
									
									
									
								
							| @ -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 | ||||
| @ -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 | ||||
| @ -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; | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
| @ -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 | ||||
| @ -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> | ||||
| @ -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> | ||||
| @ -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"> | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user