From b78a93090c9338fd7cc4566c114c90da0e49e5ae Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Wed, 10 Feb 2021 18:03:34 +0100 Subject: [PATCH 01/41] Use Arduino ESP32-S2 RC6 --- platformio_override_sample.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini index 25bb65701..32a57fbdf 100644 --- a/platformio_override_sample.ini +++ b/platformio_override_sample.ini @@ -172,7 +172,7 @@ build_flags = ${common32.build_flags} [env:tasmota32s2] extends = env:tasmota32 board = esp32s2 -platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/arduino-esp32/releases/download/1.0.5-rc1/esp32-s2-1.0.5-rc1.zip +platform_packages = framework-arduinoespressif32 @ https://github.com/Jason2866/arduino-esp32/releases/download/s2-1.0.5-rc6/esp32-s2-1.0.5-rc6.zip platformio/tool-mklittlefs @ ~1.203.200522 platformio/tool-esptoolpy @ ~1.30000.0 build_unflags = ${esp32_defaults.build_unflags} From b6d366870dd1b48eff8024f5daa241389cc126ba Mon Sep 17 00:00:00 2001 From: Barbudor Date: Wed, 10 Feb 2021 21:08:59 +0100 Subject: [PATCH 02/41] fix teleinfo standard mode --- lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp | 62 ++++++++++++++--- lib/lib_div/LibTeleinfo/src/LibTeleinfo.h | 19 ++---- tasmota/my_user_config.h | 1 - tasmota/xnrg_15_teleinfo.ino | 76 ++++++++++++++------- 4 files changed, 109 insertions(+), 49 deletions(-) diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp index 3d427676b..93ad25924 100644 --- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp +++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.cpp @@ -69,12 +69,12 @@ void TInfo::init(_Mode_e mode) // We're in INIT in term of receive data _state = TINFO_INIT; - if ( mode == TINFO_MODE_STANDARD ) { + _mode = mode; + if ( _mode == TINFO_MODE_STANDARD ) { _separator = TINFO_HT; } else { _separator = ' '; } - } /* ====================================================================== @@ -215,6 +215,8 @@ ValueList * TInfo::valueAdd(char * name, char * value, uint8_t checksum, uint8_t TI_Debug(F("' Not added bad checksum calculated '")); TI_Debug((char) thischeck); TI_Debugln(F("'")); + AddLog(1, PSTR("LibTeleinfo::valueAdd Err checksum 0x%02X != 0x%02X"), thischeck, checksum); + } else { // Got one and all seems good ? if (me && lgname && lgvalue && checksum) { @@ -640,10 +642,27 @@ Input : label name label timestamp Output : checksum Comments: return '\0' in case of error + +Group format in legacy mode (Mode Historique) - Last space not included in checksum +LF etiquette SP donnee SP Chk CR +0A 20 20 0D + \____check________/ + + +Group format in standard mode with timestamp (horodatage) - Last HT included in checksum +LF etiquette HT horodatage HT donnee HT Chk CR +0A 09 09 09 0D + \____________checkum_______________/ + +Group format in standard mode without timestamp (horodatage) - Last HT included in checksum +LF etiquette HT donnee HT Chk CR +0A 09 09 0D + \_____checkum________/ + ====================================================================== */ unsigned char TInfo::calcChecksum(char *etiquette, char *valeur, char * horodate) { - uint8_t sum = _separator ; // Somme des codes ASCII du message + un separateur + uint8_t sum = (_mode == TINFO_MODE_HISTORIQUE) ? _separator : (2 * _separator); // Somme des codes ASCII du message + 2 separateurs // avoid dead loop, always check all is fine if (etiquette && valeur) { @@ -767,15 +786,19 @@ ValueList * TInfo::checkLine(char * pline) int sep =0; bool hasts = false ; // Assume timestamp on line - if (pline==NULL) + if (pline==NULL) { + //AddLog(3, PSTR("LibTeleinfo: Error pline==NULL")); return NULL; + } len = strlen(pline); // a line should be at least 7 Char // 2 Label + Space + 1 etiquette + space + checksum + \r - if ( len < 7 || len >= TINFO_BUFSIZE) + if ( len < 7 || len >= TINFO_BUFSIZE) { + //AddLog(3, PSTR("LibTeleinfo: Error len < 7 || len >= TINFO_BUFSIZE")); return NULL; + } p = &buff[0]; sep = 0; @@ -852,12 +875,14 @@ ValueList * TInfo::checkLine(char * pline) // Always check to avoid bad behavior if(strlen(ptok) && strlen(pvalue)) { // Is checksum is OK - if ( calcChecksum(ptok,pvalue,pts) == checksum) { + char calc_checksum = calcChecksum(ptok,pvalue,pts); + if ( calc_checksum == checksum) { // In case we need to do things on specific labels customLabel(ptok, pvalue, &flags); // Add value to linked lists of values - ValueList * me = valueAdd(ptok, pvalue, checksum, &flags); + //AddLog(3, PSTR("LibTeleinfo: %s = %s"), ptok, pvalue); + ValueList * me = valueAdd(ptok, pvalue, checksum, &flags, pts); // value correctly added/changed if ( me ) { @@ -872,6 +897,10 @@ ValueList * TInfo::checkLine(char * pline) } } } + else + { + AddLog(1, PSTR("LibTeleinfo::checkLine Err checksum 0x%02X != 0x%02X"), calc_checksum, checksum); + } } } } @@ -899,6 +928,7 @@ _State_e TInfo::process(char c) switch (c) { // start of transmission ??? case TINFO_STX: + //AddLog(3, PSTR("LibTeleinfo: case TINFO_STX <<<<<<<<<<<<<<<<<<")); // Clear buffer, begin to store in it clearBuffer(); @@ -909,12 +939,14 @@ _State_e TInfo::process(char c) // We were waiting fo this one ? if (_state == TINFO_INIT || _state == TINFO_WAIT_STX ) { TI_Debugln(F("TINFO_WAIT_ETX")); + //AddLog(3, PSTR("LibTeleinfo: state => TINFO_WAIT_ETX")); _state = TINFO_WAIT_ETX; } break; // End of transmission ? case TINFO_ETX: + //AddLog(3, PSTR("LibTeleinfo: case TINFO_ETX >>>>>>>>>>>>>>>>>>")); // Normal working mode ? if (_state == TINFO_READY) { @@ -940,12 +972,14 @@ _State_e TInfo::process(char c) // We were waiting fo this one ? if (_state == TINFO_WAIT_ETX) { TI_Debugln(F("TINFO_READY")); + //AddLog(3, PSTR("LibTeleinfo: state => TINFO_READY")); _state = TINFO_READY; - } + } else if ( _state == TINFO_INIT) { TI_Debugln(F("TINFO_WAIT_STX")); + //AddLog(3, PSTR("LibTeleinfo: state => TINFO_WAIT_STX")); _state = TINFO_WAIT_STX ; - } + } break; @@ -953,10 +987,13 @@ _State_e TInfo::process(char c) case TINFO_SGR: // Do nothing we'll work at end of group // we can safely ignore this char + //AddLog(3, PSTR("LibTeleinfo: case TINFO_SGR _recv_idx=%d"), _recv_idx); break; // End of group \r ? case TINFO_EGR: + //AddLog(3, PSTR("LibTeleinfo: case TINFO_EGR _recv_idx=%d"), _recv_idx); + // Are we ready to process ? if (_state == TINFO_READY) { // Store data recceived (we'll need it) @@ -967,13 +1004,14 @@ _State_e TInfo::process(char c) memset(&_recv_buff[_recv_idx], 0, TINFO_BUFSIZE-_recv_idx); // check the group we've just received + //AddLog(3, PSTR("LibTeleinfo: Group received %d bytes %s"), _recv_idx, _recv_buff); checkLine(_recv_buff) ; // Whatever error or not, we done clearBuffer(); } break; - + // other char ? default: { @@ -982,8 +1020,10 @@ _State_e TInfo::process(char c) // If buffer is not full, Store data if ( _recv_idx < TINFO_BUFSIZE) _recv_buff[_recv_idx++]=c; - else + else { + AddLog(1, PSTR("LibTeleinfo: _recv_idx = %d/%d buffer overflow"), _recv_idx, TINFO_BUFSIZE); clearBuffer(); + } } } break; diff --git a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h index cae1815ac..e5cb81486 100644 --- a/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h +++ b/lib/lib_div/LibTeleinfo/src/LibTeleinfo.h @@ -46,12 +46,13 @@ // I prefix debug macro to be sure to use specific for THIS library // debugging, this should not interfere with main sketch or other // libraries +void AddLog(uint32_t loglevel, PGM_P formatP, ...); +#define TI_Errorf(...) AddLog(LOG_LEVEL_ERROR, __VA_ARGS__); #ifdef TI_DEBUG // Tasmota build #ifdef CODE_IMAGE_STR - #define TI_Debug(x) AddLog_P2(LOG_LEVEL_DEBUG, x); - #define TI_Debugln(x) AddLog_P2(LOG_LEVEL_DEBUG, x); - #define TI_Debugf(...) AddLog_P2(LOG_LEVEL_DEBUG, __VA_ARGS__); + // Only TI_Debugf() can work with Tasmota + #define TI_Debugf(...) AddLog(LOG_LEVEL_DEBUG, __VA_ARGS__); #define TI_Debugflush {} #else #ifdef ESP8266 @@ -86,9 +87,7 @@ typedef struct _ValueList ValueList; struct _ValueList { ValueList *next; // next element -//#ifdef USE_TELEINFO_STANDARD time_t ts; // TimeStamp of data if any -//#endif uint8_t checksum;// checksum uint8_t flags; // specific flags char * name; // LABEL of value name @@ -120,13 +119,8 @@ enum _State_e { #define TINFO_FLAGS_ALERT 0x80 /* This will generate an alert */ // Local buffer for one line of teleinfo -// maximum size, I think it should be enought -#ifdef USE_TELEINFO_STANDARD -// Linky and standard mode may have longer lines +// maximum size for Standard #define TINFO_BUFSIZE 128 -#else -#define TINFO_BUFSIZE 64 -#endif // Teleinfo start and end of frame characters #define TINFO_STX 0x02 @@ -144,7 +138,7 @@ class TInfo { public: TInfo(); - void init(_Mode_e mode = TINFO_MODE_HISTORIQUE); + void init(_Mode_e mode); // mode MUST be specified _State_e process (char c); void attachADPS(void (*_fn_ADPS)(uint8_t phase)); void attachData(void (*_fn_data)(ValueList * valueslist, uint8_t state)); @@ -168,6 +162,7 @@ class TInfo void customLabel( char * plabel, char * pvalue, uint8_t * pflags) ; ValueList * checkLine(char * pline) ; + _Mode_e _mode; // Teleinfo mode (legacy/historique vs standard) _State_e _state; // Teleinfo machine state ValueList _valueslist; // Linked list of teleinfo values char _recv_buff[TINFO_BUFSIZE]; // line receive buffer diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 9ccf11658..4fd5cc6b4 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -702,7 +702,6 @@ #define LE01MR_ADDR 1 // LE-01MR modbus address (default: 0x01) #define USE_BL0940 // Add support for BL0940 Energy monitor as used in Blitzwolf SHP-10 (+1k6 code) //#define USE_TELEINFO // Add support for Teleinfo via serial RX interface (+5k2 code, +168 RAM + SmartMeter LinkedList Values RAM) -// #define USE_TELEINFO_STANDARD // Use standard mode (9600 bps) else it's historical mode (1200 bps) //#define USE_IEM3000 // Add support for Schneider Electric iEM3000-Modbus series energy monitor (+0k8 code) #define IEM3000_SPEED 19200 // iEM3000-Modbus RS485 serial speed (default: 19200 baud) #define IEM3000_ADDR 1 // iEM3000-Modbus modbus address (default: 0x01) diff --git a/tasmota/xnrg_15_teleinfo.ino b/tasmota/xnrg_15_teleinfo.ino index 7b5c52a43..ed1aebb45 100755 --- a/tasmota/xnrg_15_teleinfo.ino +++ b/tasmota/xnrg_15_teleinfo.ino @@ -105,6 +105,10 @@ const char kLabel[] PROGMEM = "|DEMAIN" ; +#define TELEINFO_SERIAL_BUFFER_STANDARD 512 // Receive buffer size for Standard mode +#define TELEINFO_SERIAL_BUFFER_HISTORIQUE 512 // Receive buffer size for Legacy mode +#define TELEINFO_PROCESS_BUFFER 32 // Local processing buffer + TInfo tinfo; // Teleinfo object TasmotaSerial *TInfoSerial = nullptr; _Mode_e tinfo_mode = TINFO_MODE_HISTORIQUE; @@ -202,19 +206,19 @@ void DataCallback(struct _ValueList * me, uint8_t flags) break; } } - AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Tarif changed, now '%s' (%d)"), me->value, tarif); + AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Tariff changed, now '%s' (%d)"), me->value, tarif); } // Current tariff (standard is in clear text in value) else if (ilabel == LABEL_LTARF) { - AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Tarif name changed, now '%s'"), me->value); + AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Tariff name changed, now '%s'"), me->value); } // Current tariff (standard index is is in clear text in value) else if (ilabel == LABEL_NTARF) { tarif = atoi(me->value); - AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Tarif index changed, now '%d'"), tarif); + AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: Tariff index changed, now '%d'"), tarif); } @@ -409,7 +413,7 @@ void NewFrameCallback(struct _ValueList * me) ResponseJsonEnd(); // Publish adding ADCO serial number into the topic // Need setOption4 to be enabled - MqttPublishPrefixTopic_P(RESULT_OR_TELE, serialNumber, false); + MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_TELE, serialNumber, false); } } @@ -437,21 +441,23 @@ Comments: - void TInfoInit(void) { int baudrate; + int serial_buffer_size; + // SetOption102 - Set Baud rate for Teleinfo serial communication (0 = 1200 or 1 = 9600) if (Settings.flag4.teleinfo_baudrate) { baudrate = 9600; tinfo_mode = TINFO_MODE_STANDARD; - } else { + serial_buffer_size = TELEINFO_SERIAL_BUFFER_STANDARD; + } else { baudrate = 1200; tinfo_mode = TINFO_MODE_HISTORIQUE; + serial_buffer_size = TELEINFO_SERIAL_BUFFER_HISTORIQUE; } - AddLog(LOG_LEVEL_DEBUG, PSTR("TIC: inferface speed %d bps"),baudrate); - if (PinUsed(GPIO_TELEINFO_RX)) { uint8_t rx_pin = Pin(GPIO_TELEINFO_RX); - AddLog(LOG_LEVEL_INFO, PSTR("TIC: RX on GPIO%d"), rx_pin); + AddLog(LOG_LEVEL_INFO, PSTR("TIC: RX on GPIO%d, baudrate %d"), rx_pin, baudrate); // Enable Teleinfo pin used, control it if (PinUsed(GPIO_TELEINFO_ENABLE)) { @@ -465,18 +471,20 @@ void TInfoInit(void) #ifdef ESP8266 // Allow GPIO3 AND GPIO13 with hardware fallback to 2 - TInfoSerial = new TasmotaSerial(rx_pin, -1, 2); + // Set buffer to nnn char to support 250ms loop at 9600 baud + TInfoSerial = new TasmotaSerial(rx_pin, -1, 2, 0, serial_buffer_size); //pinMode(rx_pin, INPUT_PULLUP); #endif // ESP8266 #ifdef ESP32 - TInfoSerial = new TasmotaSerial(rx_pin, -1, 1); + // Set buffer to nnn char to support 250ms loop at 9600 baud + TInfoSerial = new TasmotaSerial(rx_pin, -1, 1, 0, serial_buffer_size); #endif // ESP32 // Trick here even using SERIAL_7E1 or TS_SERIAL_7E1 // this is not working, need to call SetSerialConfig after if (TInfoSerial->begin(baudrate)) { - + #ifdef ESP8266 if (TInfoSerial->hardwareSerial() ) { ClaimSerial(); @@ -494,6 +502,7 @@ void TInfoInit(void) } #endif // ESP8266 #ifdef ESP32 + SetSerialConfig(TS_SERIAL_7E1); AddLog(LOG_LEVEL_INFO, PSTR("TIC: using ESP32 hardware serial")); #endif // ESP32 // Init teleinfo @@ -510,30 +519,47 @@ void TInfoInit(void) } /* ====================================================================== -Function: TInfoEvery250ms -Purpose : Tasmota callback executed every 250ms +Function: TInfoProcess +Purpose : Tasmota callback executed often enough to read serial Input : - Output : - Comments: - ====================================================================== */ -void TInfoEvery250ms(void) +//#define MEASURE_PERF // Define to enable performance measurments + +void TInfoProcess(void) { + static char buff[TELEINFO_PROCESS_BUFFER]; + #ifdef MEASURE_PERF + static unsigned long max_time = 0; + unsigned long duration = millis(); + static int max_size = 0; + int tmp_size = 0; + #endif + if (!tinfo_found) { return; } - if (TInfoSerial->available()) { - unsigned long start = millis(); - char c; - - // We received some data, process but never more than 100ms ? - while (TInfoSerial->available()>8 && millis()-start < 100) { - // get char - c = TInfoSerial->read(); + int size = TInfoSerial->read(buff,TELEINFO_PROCESS_BUFFER); + while ( size ) { + #ifdef MEASURE_PERF + tmp_size += size; + #endif + // Process as many bytes as available in serial buffer + for(int i = 0; size; i++, size--) + { + buff[i] &= 0x7F; // data processing - tinfo.process(c & 0x7F); + tinfo.process(buff[i]); } + size = TInfoSerial->read(buff,TELEINFO_PROCESS_BUFFER); } + #ifdef MEASURE_PERF + duration = millis()-duration; + if (duration > max_time) { max_time = duration; AddLog(LOG_LEVEL_INFO,PSTR("TIC: max_time=%lu"), max_time); } + if (tmp_size > max_size) { max_size = tmp_size; AddLog(LOG_LEVEL_INFO,PSTR("TIC: max_size=%d"), max_size); } + #endif } /* ====================================================================== @@ -641,7 +667,7 @@ bool Xnrg15(uint8_t function) switch (function) { case FUNC_EVERY_250_MSECOND: - TInfoEvery250ms(); + TInfoProcess(); break; case FUNC_JSON_APPEND: TInfoShow(1); @@ -662,4 +688,4 @@ bool Xnrg15(uint8_t function) } #endif // USE_TELEINFO -#endif // USE_ENERGY_SENSOR \ No newline at end of file +#endif // USE_ENERGY_SENSOR From d193c740fa121d17c027f879e684224525c996ac Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Thu, 11 Feb 2021 08:46:46 +0100 Subject: [PATCH 03/41] add 7 seg number font --- .../src/font24_7seg.c | 754 ++++++++++++++++++ .../Display_Renderer-gemu-1.0/src/fonts.h | 3 +- .../src/renderer.cpp | 10 +- 3 files changed, 761 insertions(+), 6 deletions(-) create mode 100644 lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c b/lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c new file mode 100644 index 000000000..1844fc6cf --- /dev/null +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/font24_7seg.c @@ -0,0 +1,754 @@ +/** + ****************************************************************************** + * @file font24.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font24 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" +#include + +const uint8_t Font24_Table_7seg [] PROGMEM = +{ + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @72 '!' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x01,0x00,0x00, // # + 0x01,0x00,0x00, // # + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @144 '"' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x0e,0x70,0x00, // ### ### + 0x0e,0x70,0x00, // ### ### + 0x0e,0x70,0x00, // ### ### + 0x04,0x20,0x00, // # # + 0x04,0x20,0x00, // # # + 0x04,0x20,0x00, // # # + 0x04,0x20,0x00, // # # + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @216 '#' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x06,0x60,0x00, // ## ## + 0x06,0x60,0x00, // ## ## + 0x06,0x60,0x00, // ## ## + 0x06,0x60,0x00, // ## ## + 0x06,0x60,0x00, // ## ## + 0x3f,0xf8,0x00, // ########### + 0x3f,0xf8,0x00, // ########### + 0x06,0x60,0x00, // ## ## + 0x0c,0xc0,0x00, // ## ## + 0x3f,0xf8,0x00, // ########### + 0x3f,0xf8,0x00, // ########### + 0x0c,0xc0,0x00, // ## ## + 0x0c,0xc0,0x00, // ## ## + 0x0c,0xc0,0x00, // ## ## + 0x0c,0xc0,0x00, // ## ## + 0x0c,0xc0,0x00, // ## ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @288 '$' (17 pixels wide) + 0x00,0x00,0x00, // + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x07,0xb0,0x00, // #### ## + 0x0f,0xf0,0x00, // ######## + 0x18,0x70,0x00, // ## ### + 0x18,0x70,0x00, // ## ### + 0x1c,0x00,0x00, // ### + 0x0f,0x80,0x00, // ##### + 0x07,0xe0,0x00, // ###### + 0x00,0xf0,0x00, // #### + 0x18,0x30,0x00, // ## ## + 0x1c,0x30,0x00, // ### ## + 0x1c,0x70,0x00, // ### ### + 0x1f,0xe0,0x00, // ######## + 0x1b,0xc0,0x00, // ## #### + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @360 '%' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x07,0x80,0x00, // #### + 0x0f,0xc0,0x00, // ###### + 0x1c,0xe0,0x00, // ### ### + 0x18,0x60,0x00, // ## ## + 0x18,0x60,0x00, // ## ## + 0x1c,0xe0,0x00, // ### ### + 0x0f,0xf8,0x00, // ######### + 0x07,0xe0,0x00, // ###### + 0x1f,0xf0,0x00, // ######### + 0x07,0x38,0x00, // ### ### + 0x06,0x18,0x00, // ## ## + 0x06,0x18,0x00, // ## ## + 0x07,0x38,0x00, // ### ### + 0x03,0xf0,0x00, // ###### + 0x01,0xe0,0x00, // #### + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @432 '&' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x03,0xf0,0x00, // ###### + 0x07,0xf0,0x00, // ####### + 0x0c,0x60,0x00, // ## ## + 0x0c,0x00,0x00, // ## + 0x0c,0x00,0x00, // ## + 0x06,0x00,0x00, // ## + 0x07,0x00,0x00, // ### + 0x0f,0x9c,0x00, // ##### ### + 0x1d,0xfc,0x00, // ### ####### + 0x18,0xf0,0x00, // ## #### + 0x18,0x70,0x00, // ## ### + 0x0f,0xfc,0x00, // ########## + 0x07,0xdc,0x00, // ##### ### + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @504 ''' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x01,0x00,0x00, // # + 0x01,0x00,0x00, // # + 0x01,0x00,0x00, // # + 0x01,0x00,0x00, // # + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @576 '(' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x18,0x00, // ## + 0x00,0x38,0x00, // ### + 0x00,0x70,0x00, // ### + 0x00,0xf0,0x00, // #### + 0x00,0xe0,0x00, // ### + 0x00,0xe0,0x00, // ### + 0x01,0xc0,0x00, // ### + 0x01,0xc0,0x00, // ### + 0x01,0xc0,0x00, // ### + 0x01,0xc0,0x00, // ### + 0x01,0xc0,0x00, // ### + 0x01,0xc0,0x00, // ### + 0x00,0xe0,0x00, // ### + 0x00,0xe0,0x00, // ### + 0x00,0x70,0x00, // ### + 0x00,0x70,0x00, // ### + 0x00,0x38,0x00, // ### + 0x00,0x18,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @648 ')' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x18,0x00,0x00, // ## + 0x1c,0x00,0x00, // ### + 0x0e,0x00,0x00, // ### + 0x0e,0x00,0x00, // ### + 0x07,0x00,0x00, // ### + 0x07,0x00,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x03,0x80,0x00, // ### + 0x07,0x00,0x00, // ### + 0x07,0x00,0x00, // ### + 0x0f,0x00,0x00, // #### + 0x0e,0x00,0x00, // ### + 0x1c,0x00,0x00, // ### + 0x18,0x00,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @720 '*' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x1d,0xb8,0x00, // ### ## ### + 0x1f,0xf8,0x00, // ########## + 0x07,0xe0,0x00, // ###### + 0x03,0xc0,0x00, // #### + 0x03,0xc0,0x00, // #### + 0x06,0x60,0x00, // ## ## + 0x06,0x60,0x00, // ## ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @792 '+' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x3f,0xfc,0x00, // ############ + 0x3f,0xfc,0x00, // ############ + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @864 ',' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0xe0,0x00, // ### + 0x00,0xc0,0x00, // ## + 0x01,0xc0,0x00, // ### + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x03,0x00,0x00, // ## + 0x03,0x00,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @936 '-' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x1f,0xf8,0x00, // ########## + 0x1f,0xf8,0x00, // ########## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @1008 '.' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x03,0xc0,0x00, // #### + 0x03,0xc0,0x00, // #### + 0x03,0xc0,0x00, // #### + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @1080 '/' (17 pixels wide) + 0x00,0x18,0x00, // ## + 0x00,0x18,0x00, // ## + 0x00,0x38,0x00, // ### + 0x00,0x30,0x00, // ## + 0x00,0x70,0x00, // ### + 0x00,0x60,0x00, // ## + 0x00,0x60,0x00, // ## + 0x00,0xc0,0x00, // ## + 0x00,0xc0,0x00, // ## + 0x01,0x80,0x00, // ## + 0x01,0x80,0x00, // ## + 0x03,0x00,0x00, // ## + 0x03,0x00,0x00, // ## + 0x06,0x00,0x00, // ## + 0x06,0x00,0x00, // ## + 0x0e,0x00,0x00, // ### + 0x0c,0x00,0x00, // ## + 0x1c,0x00,0x00, // ### + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x18,0x00,0x00, // ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x0f,0xfc,0x00, // ########## + 0x0f,0xfc,0x00, // ########## + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x0f,0xfc,0x00, // ########## + 0x0f,0xfc,0x00, // ########## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x00,0x00, // + + // @0 ' ' (17 pixels wide) + 0x00,0x00,0x00, // + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x18,0x03,0x00, // ## ## + 0x07,0xfc,0x00, // ######### + 0x07,0xfc,0x00, // ######### + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x03,0x00, // ## + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + + // @1872 ':' (17 pixels wide) + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0xf0,0x00, // #### + 0x00,0xf0,0x00, // #### + 0x00,0xf0,0x00, // #### + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0xf0,0x00, // #### + 0x00,0xf0,0x00, // #### + 0x00,0xf0,0x00, // #### + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00, // + 0x00,0x00,0x00 // +}; + +sFONT Font24_7seg = { + Font24_Table_7seg, + 17, /* Width */ + 24, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h b/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h index a19c1bedc..e7a709b74 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/fonts.h @@ -51,8 +51,6 @@ /* Includes ------------------------------------------------------------------*/ #include -#define USE_TINY_FONT - typedef struct _tFont { const uint8_t *table; @@ -66,6 +64,7 @@ extern sFONT Font20; extern sFONT Font16; extern sFONT Font12; extern sFONT Font8; +extern sFONT Font24_7seg; #ifdef __cplusplus } diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp index 31b62f1e2..c05faee13 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp @@ -31,10 +31,7 @@ //#define USE_ALL_EPD_FONTS //#define USE_GFX_FONTS #define USE_TINY_FONT - -#ifdef ESP32 -#define USE_ICON_FONT -#endif +#define USE_7SEG_FONT uint8_t wr_redir=0; @@ -247,6 +244,11 @@ void Renderer::setTextFont(uint8_t f) { selected_font = &Font24; #endif break; + case 4: +#ifdef USE_7SEG_FONT + selected_font = &Font24_7seg; + break; +#endif default: selected_font = &Font12; break; From d29a9f4d5570673cb22eb8b45bcc5a551d69b1ac Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Thu, 11 Feb 2021 08:47:48 +0100 Subject: [PATCH 04/41] better impl of ebus negative values --- tasmota/xsns_53_sml.ino | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino index 84b7643fa..878001ed4 100755 --- a/tasmota/xsns_53_sml.ino +++ b/tasmota/xsns_53_sml.ino @@ -1419,9 +1419,8 @@ void SML_Decode(uint8_t index) { } } else { // compare value - uint8_t found=1, use_uval = 1; - uint32_t ebus_uval=99; - float ebus_dval; + uint8_t found=1; + double ebus_dval=99; float mbus_dval=99; while (*mp!='@') { if (meter_desc_p[mindex].type=='o' || meter_desc_p[mindex].type=='c') { @@ -1445,19 +1444,18 @@ void SML_Decode(uint8_t index) { cp++; } else if (!strncmp(mp,"UUuuUUuu",8)) { uint32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0); - ebus_uval=val; + ebus_dval=val; mbus_dval=val; mp+=8; cp+=4; } else if (*mp=='U' && *(mp+1)=='U' && *(mp+2)=='u' && *(mp+3)=='u'){ uint16_t val = cp[1]|(cp[0]<<8); mbus_dval=val; - ebus_uval=val; + ebus_dval=val; mp+=4; cp+=2; } else if (!strncmp(mp,"SSssSSss",8)) { int32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0); - use_uval = 0; ebus_dval=val; mbus_dval=val; mp+=8; @@ -1465,25 +1463,23 @@ void SML_Decode(uint8_t index) { } else if (*mp=='u' && *(mp+1)=='u' && *(mp+2)=='U' && *(mp+3)=='U'){ uint16_t val = cp[0]|(cp[1]<<8); mbus_dval=val; - ebus_uval=val; + ebus_dval=val; mp+=4; cp+=2; } else if (*mp=='u' && *(mp+1)=='u') { uint8_t val = *cp++; mbus_dval=val; - ebus_uval=val; + ebus_dval=val; mp+=2; } else if (*mp=='s' && *(mp+1)=='s' && *(mp+2)=='S' && *(mp+3)=='S') { int16_t val = *cp|(*(cp+1)<<8); mbus_dval=val; - use_uval = 0; ebus_dval=val; mp+=4; cp+=2; } else if (*mp=='S' && *(mp+1)=='S' && *(mp+2)=='s' && *(mp+3)=='s') { int16_t val = cp[1]|(cp[0]<<8); mbus_dval=val; - use_uval = 0; ebus_dval=val; mp+=4; cp+=2; @@ -1491,14 +1487,12 @@ void SML_Decode(uint8_t index) { else if (*mp=='s' && *(mp+1)=='s') { int8_t val = *cp++; mbus_dval=val; - use_uval = 0; ebus_dval=val; mp+=2; } else if (!strncmp(mp,"ffffffff",8)) { uint32_t val= (cp[0]<<24)|(cp[1]<<16)|(cp[2]<<8)|(cp[3]<<0); float *fp=(float*)&val; - use_uval = 0; ebus_dval=*fp; mbus_dval=*fp; mp+=8; @@ -1508,7 +1502,6 @@ void SML_Decode(uint8_t index) { // reverse word float uint32_t val= (cp[1]<<0)|(cp[0]<<8)|(cp[3]<<16)|(cp[2]<<24); float *fp=(float*)&val; - use_uval = 0; ebus_dval=*fp; mbus_dval=*fp; mp+=8; @@ -1588,9 +1581,9 @@ void SML_Decode(uint8_t index) { // ebus pzem or mbus or raw if (*mp=='b') { mp++; - uint8_t shift=*mp&7; - ebus_uval>>=shift; - ebus_uval&=1; + uint8_t shift = *mp&7; + ebus_dval = (uint32_t)ebus_dval>>shift; + ebus_dval = (uint32_t)ebus_dval&1; mp+=2; } if (*mp=='i') { @@ -1613,8 +1606,6 @@ void SML_Decode(uint8_t index) { uint8_t crc = SML_PzemCrc(&smltbuf[mindex][0],6); if (crc!=smltbuf[mindex][6]) goto nextsect; dval=mbus_dval; - } else if (use_uval) { - dval=ebus_uval; } else { dval=ebus_dval; } From e266b664065aecd6f68977914eaf8f88b769b45f Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Thu, 11 Feb 2021 08:48:17 +0100 Subject: [PATCH 05/41] json subroutines, sendmail shortcut --- tasmota/xdrv_10_scripter.ino | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index dc5f74b50..3022bfb20 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -4317,6 +4317,23 @@ int16_t Run_script_sub(const char *type, int8_t tlen, struct GVARS *gv) { WSContentFlush(); goto next_line; } + else if (!strncmp(lp, "rapp", 3)) { + lp+=4; + // skip one space after cmd + char tmp[256]; + Replace_Cmd_Vars(lp ,1 , tmp, sizeof(tmp)); + ResponseAppend_P(PSTR("%s"), tmp); + goto next_line; + } +#ifdef USE_SENDMAIL + else if (!strncmp(lp, "sm", 2)) { + lp+=3; + char tmp[256]; + Replace_Cmd_Vars(lp ,1 , tmp, sizeof(tmp)); + SendMail(tmp); + goto next_line; + } +#endif else if (!strncmp(lp,"=>",2) || !strncmp(lp,"->",2) || !strncmp(lp,"+>",2) || !strncmp(lp,"print",5)) { // execute cmd uint8_t sflag = 0,pflg = 0,svmqtt,swll; @@ -7192,8 +7209,13 @@ void ScriptJsonAppend(void) { } if (*lp!=';') { // send this line to mqtt - Replace_Cmd_Vars(lp, 1, tmp, sizeof(tmp)); - ResponseAppend_P(PSTR("%s"), tmp); + if (!strncmp(lp, "%=#", 3)) { + // subroutine + lp = scripter_sub(lp + 1, 0); + } else { + Replace_Cmd_Vars(lp, 1, tmp, sizeof(tmp)); + ResponseAppend_P(PSTR("%s"), tmp); + } } if (*lp==SCRIPT_EOL) { lp++; From 6cdbd3fa68d0235f359b65888b79dc888cc225ca Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 11 Feb 2021 13:43:49 +0100 Subject: [PATCH 06/41] tasmota32-ble --- platformio_tasmota_env32.ini | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini index 786b8c6cb..b99accdef 100644 --- a/platformio_tasmota_env32.ini +++ b/platformio_tasmota_env32.ini @@ -58,6 +58,11 @@ board_build.partitions = esp32_partition_app1984k_spiffs12M.csv build_flags = ${common32.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DFIRMWARE_M5STACK_CORE2 lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio +[env:tasmota32-ble] +extends = env:tasmota32 +build_flags = ${common32.build_flags} -DFIRMWARE_BLE +lib_extra_dirs = lib/libesp32 + [env:tasmota32-minimal] extends = env:tasmota32 build_flags = ${common32.build_flags} -DFIRMWARE_MINIMAL From 995fbc838a9ecd0265a5ec3d193940bb907e5321 Mon Sep 17 00:00:00 2001 From: Jason2866 Date: Thu, 11 Feb 2021 13:53:21 +0000 Subject: [PATCH 07/41] Tasmota variant ESP32 bluetooth --- .github/workflows/CI_github_ESP32.yml | 20 ++++++++ .github/workflows/Tasmota_build.yml | 20 ++++++++ .github/workflows/Tasmota_build_master.yml | 20 ++++++++ platformio_override_sample.ini | 1 + platformio_tasmota_env32.ini | 6 +-- tasmota/tasmota_configurations_ESP32.h | 24 ++++++++++ tasmota/tasmota_template.h | 53 ++++++++++++++++++++++ tasmota/xdrv_85_esp32_bluetooth.ino | 28 ++++++++++++ 8 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 tasmota/xdrv_85_esp32_bluetooth.ino diff --git a/.github/workflows/CI_github_ESP32.yml b/.github/workflows/CI_github_ESP32.yml index 0c2b75709..e3d26ef19 100644 --- a/.github/workflows/CI_github_ESP32.yml +++ b/.github/workflows/CI_github_ESP32.yml @@ -84,6 +84,26 @@ jobs: name: firmware path: ./build_output + tasmota32-bluetooth: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -U platformio + platformio upgrade --dev + platformio update + - name: Run PlatformIO + run: | + platformio run -e tasmota32-bluetooth + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + tasmota32-minimal: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/Tasmota_build.yml b/.github/workflows/Tasmota_build.yml index 368c9e767..b707b68a3 100644 --- a/.github/workflows/Tasmota_build.yml +++ b/.github/workflows/Tasmota_build.yml @@ -824,6 +824,26 @@ jobs: path: ./build_output + tasmota32-bluetooth: + needs: tasmota_pull + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: | + platformio run -e tasmota32-bluetooth + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + + tasmota32-knx: needs: tasmota_pull runs-on: ubuntu-latest diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml index a9b958f53..a6a1b668c 100644 --- a/.github/workflows/Tasmota_build_master.yml +++ b/.github/workflows/Tasmota_build_master.yml @@ -824,6 +824,26 @@ jobs: path: ./build_output + tasmota32-bluetooth: + needs: tasmota_pull + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: | + platformio run -e tasmota32-bluetooth + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + + tasmota32-knx: needs: tasmota_pull runs-on: ubuntu-latest diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini index 32a57fbdf..9b7ddfa53 100644 --- a/platformio_override_sample.ini +++ b/platformio_override_sample.ini @@ -27,6 +27,7 @@ default_envs = ; tasmota-zbbridge ; tasmota-ir ; tasmota32 +; tasmota32-bluetooth ; tasmota32-webcam ; tasmota32-minimal ; tasmota32-lite diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini index b99accdef..d0b4e97c3 100644 --- a/platformio_tasmota_env32.ini +++ b/platformio_tasmota_env32.ini @@ -58,10 +58,10 @@ board_build.partitions = esp32_partition_app1984k_spiffs12M.csv build_flags = ${common32.build_flags} -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue -DFIRMWARE_M5STACK_CORE2 lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_rf, lib/lib_div, lib/lib_ssl, lib/lib_display, lib/lib_audio -[env:tasmota32-ble] +[env:tasmota32-bluetooth] extends = env:tasmota32 -build_flags = ${common32.build_flags} -DFIRMWARE_BLE -lib_extra_dirs = lib/libesp32 +build_flags = ${common32.build_flags} -DFIRMWARE_BLUETOOTH +lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_ssl [env:tasmota32-minimal] extends = env:tasmota32 diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index 431b3381f..d3641e862 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -117,6 +117,30 @@ #endif // USE_SCRIPT #endif // FIRMWARE_M5STACK_CORE2 +/*********************************************************************************************\ + * [tasmota32-bluetooth.bin] + * Provide an image with BLE support +\*********************************************************************************************/ + +#ifdef FIRMWARE_BLUETOOTH + +#undef CODE_IMAGE_STR +#define CODE_IMAGE_STR "bluetooth" + +#undef MODULE +#define MODULE BLUETOOTH // [Module] Select default module from tasmota_template.h +#undef FALLBACK_MODULE +#define FALLBACK_MODULE BLUETOOTH // [Module2] Select default module on fast reboot where USER_MODULE is user template + +#define USE_BLUETOOTH // Add support for BLUETOOTH +#define USE_UFILESYS +#define USE_SDCARD + #define GUI_TRASH_FILE +#define USE_ADC +#define USE_BLE_ESP32 // Enable new BLE driver +#define USE_MI_ESP32 // (ESP32 only) Add support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash) +#endif // FFIRMWARE_BLE + #endif // ESP32 #endif // _TASMOTA_CONFIGURATIONS_ESP32_H_ diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 98567ca42..c7325188a 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -2354,6 +2354,7 @@ enum SupportedModules { WT32_ETH01, TTGO_WATCH, M5STACK_CORE2, + BLUETOOTH, MAXMODULE }; // Default module settings @@ -2377,6 +2378,9 @@ const uint8_t kModuleNiceList[] PROGMEM = { #ifdef USE_M5STACK_CORE2 M5STACK_CORE2, #endif // USE_M5STACK_CORE2 +#ifdef USE_BLUETOOTH + BLUETOOTH, +#endif // USE_BLUETOOTH }; const char kModuleNames[] PROGMEM = @@ -2399,6 +2403,9 @@ const char kModuleNames[] PROGMEM = #ifdef USE_M5STACK_CORE2 "M5Stack Core2|" #endif // USE_M5STACK_CORE2 +#ifdef USE_BLUETOOTH + "ESP32-BLE|" +#endif // USE_BLUETOOTH ; const mytmplt kModules[] PROGMEM = { @@ -2543,6 +2550,52 @@ const mytmplt kModules[] PROGMEM = { // }, #endif // USE_ESP32_SOLO +#ifdef USE_BLUETOOTH + { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) + AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK + AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 + AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 + AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 + AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER + AGPIO(GPIO_USER), // 5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK + // 6 IO GPIO6, Flash CLK + // 7 IO GPIO7, Flash D0 + // 8 IO GPIO8, Flash D1 + AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD + AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD + // 11 IO GPIO11, Flash CMD + AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) + AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER + AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 + AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) + AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT + AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 + AGPIO(GPIO_USER), // 18 IO GPIO18, VSPICLK, HS1_DATA7 + AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 + 0, // 20 + AGPIO(GPIO_USER), // 21 IO GPIO21, VSPIHD, EMAC_TX_EN + AGPIO(GPIO_USER), // 22 IO LED GPIO22, VSPIWP, U0RTS, EMAC_TXD1 + AGPIO(GPIO_USER), // 23 IO GPIO23, VSPID, HS1_STROBE + 0, // 24 + AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 + AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 + AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 + AGPIO(GPIO_USER), // 32 IO GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 + AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 + AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 + AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 + AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 + 0, // 37 NO PULLUP + 0, // 38 NO PULLUP + AGPIO(GPIO_USER), // 39 I NO PULLUP GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3 + 0 // Flag + }, +#endif // USE_BLUETOOTH + #ifdef USE_WT32_ETH01 { // WT32_ETH01 - (ESP32) 0, // 0 (I)O GPIO0, Ethernet EMAC_REF_CLK diff --git a/tasmota/xdrv_85_esp32_bluetooth.ino b/tasmota/xdrv_85_esp32_bluetooth.ino new file mode 100644 index 000000000..b68ae6bd9 --- /dev/null +++ b/tasmota/xdrv_85_esp32_bluetooth.ino @@ -0,0 +1,28 @@ +/* + xdrv_81_esp32_bluetooth.ino - ESP32 Blueetooth support for Tasmota + + Copyright (C) 2021 Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifdef ESP32 +#ifdef USE_BLUETOOTH +/*********************************************************************************************\ + * every ESP32 board + * +/*********************************************************************************************/ + +#endif // USE_BLUETOOTH +#endif // ESP32 From 19dc2393fafeb47235564bd6c27d5035694b0aab Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:03:04 +0100 Subject: [PATCH 08/41] Add dummy fade2 (#10916) --- tasmota/xdrv_04_light.ino | 76 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index 2d8c2ec5b..395fae4b5 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -2828,58 +2828,62 @@ void CmndRgbwwTable(void) void CmndFade(void) { - // Fade - Show current Fade state - // Fade 0 - Turn Fade Off - // Fade On - Turn Fade On - // Fade Toggle - Toggle Fade state - switch (XdrvMailbox.payload) { - case 0: // Off - case 1: // On - Settings.light_fade = XdrvMailbox.payload; - break; - case 2: // Toggle - Settings.light_fade ^= 1; - break; + if (2 == XdrvMailbox.index) { + // Home Assistant backwards compatibility, can be removed mid 2021 + } else { + // Fade - Show current Fade state + // Fade 0 - Turn Fade Off + // Fade On - Turn Fade On + // Fade Toggle - Toggle Fade state + switch (XdrvMailbox.payload) { + case 0: // Off + case 1: // On + Settings.light_fade = XdrvMailbox.payload; + break; + case 2: // Toggle + Settings.light_fade ^= 1; + break; + } + #ifdef USE_DEVICE_GROUPS + if (XdrvMailbox.payload >= 0 && XdrvMailbox.payload <= 2) SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_FADE, Settings.light_fade); + #endif // USE_DEVICE_GROUPS + if (!Settings.light_fade) { Light.fade_running = false; } } -#ifdef USE_DEVICE_GROUPS - if (XdrvMailbox.payload >= 0 && XdrvMailbox.payload <= 2) SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_FADE, Settings.light_fade); -#endif // USE_DEVICE_GROUPS - if (!Settings.light_fade) { Light.fade_running = false; } ResponseCmndStateText(Settings.light_fade); } void CmndSpeed(void) { - if (XdrvMailbox.index == 2) { + if (2 == XdrvMailbox.index) { if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 40)) { Light.fade_once_enabled = true; - Light.fade_once_value = XdrvMailbox.payload > 0; + Light.fade_once_value = (XdrvMailbox.payload > 0); Light.speed_once_enabled = true; Light.speed_once_value = XdrvMailbox.payload; if (!Light.fade_once_value) { Light.fade_running = false; } } - return; - } - - // Speed 1 - Fast - // Speed 40 - Very slow - // Speed + - Increment Speed - // Speed - - Decrement Speed - if (1 == XdrvMailbox.data_len) { - if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) { - XdrvMailbox.payload = Settings.light_speed - 1; + ResponseCmndNumber(Light.speed_once_value); + } else { + // Speed 1 - Fast + // Speed 40 - Very slow + // Speed + - Increment Speed + // Speed - - Decrement Speed + if (1 == XdrvMailbox.data_len) { + if (('+' == XdrvMailbox.data[0]) && (Settings.light_speed > 1)) { + XdrvMailbox.payload = Settings.light_speed - 1; + } + else if (('-' == XdrvMailbox.data[0]) && (Settings.light_speed < 40)) { + XdrvMailbox.payload = Settings.light_speed + 1; + } } - else if (('-' == XdrvMailbox.data[0]) && (Settings.light_speed < 40)) { - XdrvMailbox.payload = Settings.light_speed + 1; - } - } - if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) { - Settings.light_speed = XdrvMailbox.payload; + if ((XdrvMailbox.payload > 0) && (XdrvMailbox.payload <= 40)) { + Settings.light_speed = XdrvMailbox.payload; #ifdef USE_DEVICE_GROUPS - SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_SPEED, Settings.light_speed); + SendDeviceGroupMessage(Light.device, DGR_MSGTYP_UPDATE, DGR_ITEM_LIGHT_SPEED, Settings.light_speed); #endif // USE_DEVICE_GROUPS + } + ResponseCmndNumber(Settings.light_speed); } - ResponseCmndNumber(Settings.light_speed); } void CmndWakeupDuration(void) From 0a2a885295f6cec1665ecdd020d69d7446be58fd Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:08:38 +0100 Subject: [PATCH 09/41] Delete xdrv_85_esp32_bluetooth.ino No need for this file and it takes up precious driver numbers. --- tasmota/xdrv_85_esp32_bluetooth.ino | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 tasmota/xdrv_85_esp32_bluetooth.ino diff --git a/tasmota/xdrv_85_esp32_bluetooth.ino b/tasmota/xdrv_85_esp32_bluetooth.ino deleted file mode 100644 index b68ae6bd9..000000000 --- a/tasmota/xdrv_85_esp32_bluetooth.ino +++ /dev/null @@ -1,28 +0,0 @@ -/* - xdrv_81_esp32_bluetooth.ino - ESP32 Blueetooth support for Tasmota - - Copyright (C) 2021 Theo Arends - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifdef ESP32 -#ifdef USE_BLUETOOTH -/*********************************************************************************************\ - * every ESP32 board - * -/*********************************************************************************************/ - -#endif // USE_BLUETOOTH -#endif // ESP32 From 49c6f1ee07bba558997a230e2ce2f952817e1718 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:37:48 +0100 Subject: [PATCH 10/41] correct order --- tasmota_template.h | 2598 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2598 insertions(+) create mode 100644 tasmota_template.h diff --git a/tasmota_template.h b/tasmota_template.h new file mode 100644 index 000000000..c181c63aa --- /dev/null +++ b/tasmota_template.h @@ -0,0 +1,2598 @@ +/* + tasmota_template.h - template settings for Tasmota + + Copyright (C) 2020 Theo Arends + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef _TASMOTA_TEMPLATE_H_ +#define _TASMOTA_TEMPLATE_H_ + +// User selectable GPIO functionality +// ATTENTION: Only add at the end of this list just before GPIO_SENSOR_END +// Then add the same name(s) in a nice location in array kGpioNiceList +enum UserSelectablePins { + GPIO_NONE, // Not used + GPIO_KEY1, GPIO_KEY1_NP, GPIO_KEY1_INV, GPIO_KEY1_INV_NP, // 4 x Button + GPIO_SWT1, GPIO_SWT1_NP, // 8 x User connected external switches + GPIO_REL1, GPIO_REL1_INV, // 8 x Relays + GPIO_LED1, GPIO_LED1_INV, // 4 x Leds + GPIO_CNTR1, GPIO_CNTR1_NP, // 4 x Counter + GPIO_PWM1, GPIO_PWM1_INV, // 5 x PWM + GPIO_BUZZER, GPIO_BUZZER_INV, // Buzzer + GPIO_LEDLNK, GPIO_LEDLNK_INV, // Link led + GPIO_I2C_SCL, GPIO_I2C_SDA, // Software I2C + GPIO_SPI_MISO, GPIO_SPI_MOSI, GPIO_SPI_CLK, GPIO_SPI_CS, GPIO_SPI_DC, // Hardware SPI + GPIO_SSPI_MISO, GPIO_SSPI_MOSI, GPIO_SSPI_SCLK, GPIO_SSPI_CS, GPIO_SSPI_DC, // Software SPI + GPIO_BACKLIGHT, // Display backlight control + GPIO_OLED_RESET, // OLED Display Reset + GPIO_IRSEND, GPIO_IRRECV, // IR interface + GPIO_RFSEND, GPIO_RFRECV, // RF interface + GPIO_DHT11, GPIO_DHT22, GPIO_SI7021, GPIO_DHT11_OUT, // DHT11, DHT21, DHT22, AM2301, AM2302, AM2321 + GPIO_DSB, GPIO_DSB_OUT, // DS18B20 or DS18S20 + GPIO_WS2812, // WS2812 Led string + GPIO_MHZ_TXD, GPIO_MHZ_RXD, // MH-Z19 Serial interface + GPIO_PZEM0XX_TX, GPIO_PZEM004_RX, GPIO_PZEM016_RX, GPIO_PZEM017_RX, // PZEM Serial Modbus interface + GPIO_SAIR_TX, GPIO_SAIR_RX, // SenseAir Serial interface + GPIO_PMS5003_TX, GPIO_PMS5003_RX, // Plantower PMS5003 Serial interface + GPIO_SDS0X1_TX, GPIO_SDS0X1_RX, // Nova Fitness SDS011 Serial interface + GPIO_SBR_TX, GPIO_SBR_RX, // Serial Bridge Serial interface + GPIO_SR04_TRIG, GPIO_SR04_ECHO, // SR04 interface + GPIO_SDM120_TX, GPIO_SDM120_RX, // SDM120 Serial interface + GPIO_SDM630_TX, GPIO_SDM630_RX, // SDM630 Serial interface + GPIO_TM16CLK, GPIO_TM16DIO, GPIO_TM16STB, // TM1638 interface + GPIO_MP3_DFR562, // RB-DFR-562, DFPlayer Mini MP3 Player + GPIO_HX711_SCK, GPIO_HX711_DAT, // HX711 Load Cell interface + GPIO_TX2X_TXD_BLACK, // TX20/TX23 Transmission Pin + GPIO_TUYA_TX, GPIO_TUYA_RX, // Tuya Serial interface + GPIO_MGC3130_XFER, GPIO_MGC3130_RESET, // MGC3130 interface + GPIO_RF_SENSOR, // Rf receiver with sensor decoding + GPIO_AZ_TXD, GPIO_AZ_RXD, // AZ-Instrument 7798 Serial interface + GPIO_MAX31855CS, GPIO_MAX31855CLK, GPIO_MAX31855DO, // MAX31855 Serial interface + GPIO_NRG_SEL, GPIO_NRG_SEL_INV, GPIO_NRG_CF1, GPIO_HLW_CF, GPIO_HJL_CF, // HLW8012/HJL-01/BL0937 energy monitoring + GPIO_MCP39F5_TX, GPIO_MCP39F5_RX, GPIO_MCP39F5_RST, // MCP39F501 Energy monitoring (Shelly2) + GPIO_PN532_TXD, GPIO_PN532_RXD, // PN532 NFC Serial interface + GPIO_SM16716_CLK, GPIO_SM16716_DAT, GPIO_SM16716_SEL, // SM16716 SELECT + GPIO_DI, GPIO_DCKI, // my92x1 PWM controller + GPIO_CSE7766_TX, GPIO_CSE7766_RX, // CSE7766 Serial interface (S31 and Pow R2) + GPIO_ARIRFRCV, GPIO_ARIRFSEL, // Arilux RF Receive input + GPIO_TXD, GPIO_RXD, // Serial interface + GPIO_ROT1A, GPIO_ROT1B, // Rotary switch + GPIO_ADC_JOY, // Analog joystick + GPIO_SSPI_MAX31865_CS1, // MAX31865 Chip Select + GPIO_HRE_CLOCK, GPIO_HRE_DATA, // HR-E Water Meter + GPIO_ADE7953_IRQ, // ADE7953 IRQ + GPIO_SOLAXX1_TX, GPIO_SOLAXX1_RX, // Solax Inverter Serial interface + GPIO_ZIGBEE_TX, GPIO_ZIGBEE_RX, // Zigbee Serial interface + GPIO_RDM6300_RX, // RDM6300 RX + GPIO_IBEACON_TX, GPIO_IBEACON_RX, // HM17 IBEACON Serial interface + GPIO_A4988_DIR, GPIO_A4988_STP, GPIO_A4988_ENA, GPIO_A4988_MS1, // A4988 interface + GPIO_OUTPUT_HI, GPIO_OUTPUT_LO, // Fixed output state + GPIO_DDS2382_TX, GPIO_DDS2382_RX, // DDS2382 Serial interface + GPIO_DDSU666_TX, GPIO_DDSU666_RX, // DDSU666 Serial interface + GPIO_SM2135_CLK, GPIO_SM2135_DAT, // SM2135 PWM controller + GPIO_DEEPSLEEP, // Kill switch for deepsleep + GPIO_EXS_ENABLE, // EXS MCU Enable + GPIO_TASMOTACLIENT_TXD, GPIO_TASMOTACLIENT_RXD, // Client Serial interface + GPIO_TASMOTACLIENT_RST, GPIO_TASMOTACLIENT_RST_INV, // Client Reset + GPIO_HPMA_RX, GPIO_HPMA_TX, // Honeywell HPMA115S0 Serial interface + GPIO_GPS_RX, GPIO_GPS_TX, // GPS Serial interface + GPIO_HM10_RX, GPIO_HM10_TX, // HM10-BLE-Mijia-bridge Serial interface + GPIO_LE01MR_RX, GPIO_LE01MR_TX, // F&F LE-01MR energy meter + GPIO_CC1101_GDO0, GPIO_CC1101_GDO2, // CC1101 Serial interface + GPIO_HRXL_RX, // Data from MaxBotix HRXL sonar range sensor + GPIO_ELECTRIQ_MOODL_TX, // ElectriQ iQ-wifiMOODL Serial TX + GPIO_AS3935, // Franklin Lightning Sensor + GPIO_ADC_INPUT, // Analog input + GPIO_ADC_TEMP, // Analog Thermistor + GPIO_ADC_LIGHT, // Analog Light sensor + GPIO_ADC_BUTTON, GPIO_ADC_BUTTON_INV, // Analog Button + GPIO_ADC_RANGE, // Analog Range + GPIO_ADC_CT_POWER, // ANalog Current +#ifdef ESP32 + GPIO_WEBCAM_PWDN, GPIO_WEBCAM_RESET, GPIO_WEBCAM_XCLK, // Webcam + GPIO_WEBCAM_SIOD, GPIO_WEBCAM_SIOC, // Webcam I2C + GPIO_WEBCAM_DATA, + GPIO_WEBCAM_VSYNC, GPIO_WEBCAM_HREF, GPIO_WEBCAM_PCLK, + GPIO_WEBCAM_PSCLK, + GPIO_WEBCAM_HSD, + GPIO_WEBCAM_PSRCS, +#endif + GPIO_BOILER_OT_RX, GPIO_BOILER_OT_TX, // OpenTherm Boiler TX pin + GPIO_WINDMETER_SPEED, // WindMeter speed counter pin + GPIO_KEY1_TC, // Touch pin as button + GPIO_BL0940_RX, // BL0940 serial interface + GPIO_TCP_TX, GPIO_TCP_RX, // TCP to serial bridge +#ifdef ESP32 + GPIO_ETH_PHY_POWER, GPIO_ETH_PHY_MDC, GPIO_ETH_PHY_MDIO, // Ethernet +#endif + GPIO_TELEINFO_RX, // Teleinfo telemetry data receive pin + GPIO_TELEINFO_ENABLE, // Teleinfo Enable Receive Pin + GPIO_LMT01, // LMT01 input counting pin + GPIO_IEM3000_TX, GPIO_IEM3000_RX, // IEM3000 Serial interface + GPIO_ZIGBEE_RST, // Zigbee reset + GPIO_DYP_RX, + GPIO_MIEL_HVAC_TX, GPIO_MIEL_HVAC_RX, // Mitsubishi Electric HVAC + GPIO_WE517_TX, GPIO_WE517_RX, // ORNO WE517 Serial interface + GPIO_AS608_TX, GPIO_AS608_RX, // Serial interface AS608 / R503 + GPIO_SHELLY_DIMMER_BOOT0, GPIO_SHELLY_DIMMER_RST_INV, + GPIO_RC522_RST, // RC522 reset + GPIO_P9813_CLK, GPIO_P9813_DAT, // P9813 Clock and Data + GPIO_OPTION_A, // Specific device options to be served in code + GPIO_FTC532, // FTC532 touch ctrlr serial input + GPIO_RC522_CS, + GPIO_NRF24_CS, GPIO_NRF24_DC, + GPIO_ILI9341_CS, GPIO_ILI9341_DC, + GPIO_ILI9488_CS, + GPIO_EPAPER29_CS, + GPIO_EPAPER42_CS, + GPIO_SSD1351_CS, + GPIO_RA8876_CS, + GPIO_ST7789_CS, GPIO_ST7789_DC, + GPIO_SENSOR_END }; + +enum ProgramSelectablePins { + GPIO_FIX_START = 2046, + GPIO_USER, // User configurable needs to be 2047 + GPIO_MAX }; + +#define MAX_OPTIONS_A 2 // Increase if more bits are used from GpioOptionABits + +typedef union { // Restricted by MISRA-C Rule 18.4 but so useful... + uint32_t data; // Allow bit manipulation using SetOption + struct { // GPIO Option_A1 .. Option_A32 + uint32_t pwm1_input : 1; // bit 0 (v9.2.0.1) - Option_A1 - (Light) Change PWM1 to input on power off and no fade running (1) + uint32_t spare01 : 1; // bit 1 + uint32_t spare02 : 1; // bit 2 + uint32_t spare03 : 1; // bit 3 + uint32_t spare04 : 1; // bit 4 + uint32_t spare05 : 1; // bit 5 + uint32_t spare06 : 1; // bit 6 + uint32_t spare07 : 1; // bit 7 + uint32_t spare08 : 1; // bit 8 + uint32_t spare09 : 1; // bit 9 + uint32_t spare10 : 1; // bit 10 + uint32_t spare11 : 1; // bit 11 + uint32_t spare12 : 1; // bit 12 + uint32_t spare13 : 1; // bit 13 + uint32_t spare14 : 1; // bit 14 + uint32_t spare15 : 1; // bit 15 + uint32_t spare16 : 1; // bit 16 + uint32_t spare17 : 1; // bit 17 + uint32_t spare18 : 1; // bit 18 + uint32_t spare19 : 1; // bit 19 + uint32_t spare20 : 1; // bit 20 + uint32_t spare21 : 1; // bit 21 + uint32_t spare22 : 1; // bit 22 + uint32_t spare23 : 1; // bit 23 + uint32_t spare24 : 1; // bit 24 + uint32_t spare25 : 1; // bit 25 + uint32_t spare26 : 1; // bit 26 + uint32_t spare27 : 1; // bit 27 + uint32_t spare28 : 1; // bit 28 + uint32_t spare29 : 1; // bit 29 + uint32_t spare30 : 1; // bit 30 + uint32_t spare31 : 1; // bit 31 + }; +} GpioOptionABits; + +// Text in webpage Module Parameters and commands GPIOS and GPIO +const char kSensorNames[] PROGMEM = + D_SENSOR_NONE "|" + D_SENSOR_BUTTON "|" D_SENSOR_BUTTON "_n|" D_SENSOR_BUTTON "_i|" D_SENSOR_BUTTON "_in|" + D_SENSOR_SWITCH "|" D_SENSOR_SWITCH "_n|" + D_SENSOR_RELAY "|" D_SENSOR_RELAY "_i|" + D_SENSOR_LED "|" D_SENSOR_LED "_i|" + D_SENSOR_COUNTER "|" D_SENSOR_COUNTER "_n|" + D_SENSOR_PWM "|" D_SENSOR_PWM "_i|" + D_SENSOR_BUZZER "|" D_SENSOR_BUZZER "_i|" + D_SENSOR_LED_LINK "|" D_SENSOR_LED_LINK "_i|" + D_SENSOR_I2C_SCL "|" D_SENSOR_I2C_SDA "|" + D_SENSOR_SPI_MISO "|" D_SENSOR_SPI_MOSI "|" D_SENSOR_SPI_CLK "|" D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" + D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|" + D_SENSOR_BACKLIGHT "|" D_SENSOR_OLED_RESET "|" + D_SENSOR_IRSEND "|" D_SENSOR_IRRECV "|" + D_SENSOR_RFSEND "|" D_SENSOR_RFRECV "|" + D_SENSOR_DHT11 "|" D_SENSOR_AM2301 "|" D_SENSOR_SI7021 "|" D_SENSOR_DHT11 "_o|" + D_SENSOR_DS18X20 "|" D_SENSOR_DS18X20 "_o|" + D_SENSOR_WS2812 "|" + D_SENSOR_MHZ_TX "|" D_SENSOR_MHZ_RX "|" + D_SENSOR_PZEM0XX_TX "|" D_SENSOR_PZEM004_RX "|" D_SENSOR_PZEM016_RX "|" D_SENSOR_PZEM017_RX "|" + D_SENSOR_SAIR_TX "|" D_SENSOR_SAIR_RX "|" + D_SENSOR_PMS5003_TX "|" D_SENSOR_PMS5003_RX "|" + D_SENSOR_SDS0X1_TX "|" D_SENSOR_SDS0X1_RX "|" + D_SENSOR_SBR_TX "|" D_SENSOR_SBR_RX "|" + D_SENSOR_SR04_TRIG "|" D_SENSOR_SR04_ECHO "|" + D_SENSOR_SDM120_TX "|" D_SENSOR_SDM120_RX "|" + D_SENSOR_SDM630_TX "|" D_SENSOR_SDM630_RX "|" + D_SENSOR_TM1638_CLK "|" D_SENSOR_TM1638_DIO "|" D_SENSOR_TM1638_STB "|" + D_SENSOR_DFR562 "|" + D_SENSOR_HX711_SCK "|" D_SENSOR_HX711_DAT "|" + D_SENSOR_TX2X_TX "|" + D_SENSOR_TUYA_TX "|" D_SENSOR_TUYA_RX "|" + D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|" + D_SENSOR_RF_SENSOR "|" + D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX "|" + D_SENSOR_MAX31855_CS "|" D_SENSOR_MAX31855_CLK "|" D_SENSOR_MAX31855_DO "|" + D_SENSOR_NRG_SEL "|" D_SENSOR_NRG_SEL "_i|" D_SENSOR_NRG_CF1 "|" D_SENSOR_HLW_CF "|" D_SENSOR_HJL_CF "|" + D_SENSOR_MCP39F5_TX "|" D_SENSOR_MCP39F5_RX "|" D_SENSOR_MCP39F5_RST "|" + D_SENSOR_PN532_TX "|" D_SENSOR_PN532_RX "|" + D_SENSOR_SM16716_CLK "|" D_SENSOR_SM16716_DAT "|" D_SENSOR_SM16716_POWER "|" + D_SENSOR_MY92X1_DI "|" D_SENSOR_MY92X1_DCKI "|" + D_SENSOR_CSE7766_TX "|" D_SENSOR_CSE7766_RX "|" + D_SENSOR_ARIRFRCV "|" D_SENSOR_ARIRFSEL "|" + D_SENSOR_TXD "|" D_SENSOR_RXD "|" + D_SENSOR_ROTARY "_a|" D_SENSOR_ROTARY "_b|" + D_SENSOR_ADC_JOYSTICK "|" + D_SENSOR_MAX31865_CS "|" + D_SENSOR_HRE_CLOCK "|" D_SENSOR_HRE_DATA "|" + D_SENSOR_ADE7953_IRQ "|" + D_SENSOR_SOLAXX1_TX "|" D_SENSOR_SOLAXX1_RX "|" + D_SENSOR_ZIGBEE_TXD "|" D_SENSOR_ZIGBEE_RXD "|" + D_SENSOR_RDM6300_RX "|" + D_SENSOR_IBEACON_TX "|" D_SENSOR_IBEACON_RX "|" + D_SENSOR_A4988_DIR "|" D_SENSOR_A4988_STP "|" D_SENSOR_A4988_ENA "|" D_SENSOR_A4988_MS1 "|" + D_SENSOR_OUTPUT_HI "|" D_SENSOR_OUTPUT_LO "|" + D_SENSOR_DDS2382_TX "|" D_SENSOR_DDS2382_RX "|" + D_SENSOR_DDSU666_TX "|" D_SENSOR_DDSU666_RX "|" + D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|" + D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_ENABLE "|" + D_SENSOR_CLIENT_TX "|" D_SENSOR_CLIENT_RX "|" D_SENSOR_CLIENT_RESET "|" D_SENSOR_CLIENT_RESET "_i|" + D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|" + D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX "|" + D_SENSOR_HM10_RX "|" D_SENSOR_HM10_TX "|" + D_SENSOR_LE01MR_RX "|" D_SENSOR_LE01MR_TX "|" + D_SENSOR_CC1101_GDO0 "|" D_SENSOR_CC1101_GDO2 "|" + D_SENSOR_HRXL_RX "|" + D_SENSOR_ELECTRIQ_MOODL "|" + D_SENSOR_AS3935 "|" + D_SENSOR_ADC_INPUT "|" + D_SENSOR_ADC_TEMP "|" + D_SENSOR_ADC_LIGHT "|" + D_SENSOR_ADC_BUTTON "|" D_SENSOR_ADC_BUTTON "_i|" + D_SENSOR_ADC_RANGE "|" + D_SENSOR_ADC_CT_POWER "|" +#ifdef ESP32 + D_GPIO_WEBCAM_PWDN "|" D_GPIO_WEBCAM_RESET "|" D_GPIO_WEBCAM_XCLK "|" + D_GPIO_WEBCAM_SIOD "|" D_GPIO_WEBCAM_SIOC "|" + D_GPIO_WEBCAM_DATA "|" + D_GPIO_WEBCAM_VSYNC "|" D_GPIO_WEBCAM_HREF "|" D_GPIO_WEBCAM_PCLK "|" + D_GPIO_WEBCAM_PSCLK "|" + D_GPIO_WEBCAM_HSD "|" + D_GPIO_WEBCAM_PSRCS "|" +#endif + D_SENSOR_BOILER_OT_RX "|" D_SENSOR_BOILER_OT_TX "|" + D_SENSOR_WINDMETER_SPEED "|" D_SENSOR_BUTTON "_tc|" + D_SENSOR_BL0940_RX "|" + D_SENSOR_TCP_TXD "|" D_SENSOR_TCP_RXD "|" +#ifdef ESP32 + D_SENSOR_ETH_PHY_POWER "|" D_SENSOR_ETH_PHY_MDC "|" D_SENSOR_ETH_PHY_MDIO "|" +#endif + D_SENSOR_TELEINFO_RX "|" D_SENSOR_TELEINFO_ENABLE "|" + D_SENSOR_LMT01_PULSE "|" + D_SENSOR_IEM3000_TX "|" D_SENSOR_IEM3000_RX "|" + D_SENSOR_ZIGBEE_RST "|" + D_SENSOR_DYP_RX "|" + D_SENSOR_MIEL_HVAC_TX "|" D_SENSOR_MIEL_HVAC_RX "|" + D_SENSOR_WE517_TX "|" D_SENSOR_WE517_RX "|" + D_SENSOR_AS608_TX "|" D_SENSOR_AS608_RX "|" + D_SENSOR_SHELLY_DIMMER_BOOT0 "|" D_SENSOR_SHELLY_DIMMER_RST_INV "|" + D_SENSOR_RC522_RST "|" + D_SENSOR_P9813_CLK "|" D_SENSOR_P9813_DAT "|" + D_SENSOR_OPTION "_a|" + D_SENSOR_FTC532 "|" + D_SENSOR_RC522_CS "|" + D_SENSOR_NRF24_CS "|" D_SENSOR_NRF24_DC "|" + D_SENSOR_ILI9341_CS "|" D_SENSOR_ILI9341_DC "|" + D_SENSOR_ILI9488_CS "|" + D_SENSOR_EPAPER29_CS "|" + D_SENSOR_EPAPER42_CS "|" + D_SENSOR_SSD1351_CS "|" + D_SENSOR_RA8876_CS "|" + D_SENSOR_ST7789_CS "|" D_SENSOR_ST7789_DC "|" + ; + +const char kSensorNamesFixed[] PROGMEM = + D_SENSOR_USER; + +#define MAX_MAX31865S 6 +#define MAX_A4988_MSS 3 +#define MAX_WEBCAM_DATA 8 +#define MAX_WEBCAM_HSD 3 +#define MAX_SM2135_DAT 4 + +const uint16_t kGpioNiceList[] PROGMEM = { + GPIO_NONE, // Not used + AGPIO(GPIO_OPTION_A) + MAX_OPTIONS_A, // Device specific options + AGPIO(GPIO_KEY1) + MAX_KEYS, // Buttons + AGPIO(GPIO_KEY1_NP) + MAX_KEYS, + AGPIO(GPIO_KEY1_INV) + MAX_KEYS, + AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS, + AGPIO(GPIO_KEY1_TC) + MAX_KEYS, // Touch button + AGPIO(GPIO_SWT1) + MAX_SWITCHES, // User connected external switches + AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES, +#ifdef ROTARY_V1 + AGPIO(GPIO_ROT1A) + MAX_ROTARIES, // Rotary A Pin + AGPIO(GPIO_ROT1B) + MAX_ROTARIES, // Rotary B Pin +#endif + AGPIO(GPIO_REL1) + MAX_RELAYS, // Relays + AGPIO(GPIO_REL1_INV) + MAX_RELAYS, + AGPIO(GPIO_LED1) + MAX_LEDS, // Leds + AGPIO(GPIO_LED1_INV) + MAX_LEDS, +#ifdef USE_COUNTER + AGPIO(GPIO_CNTR1) + MAX_COUNTERS, // Counters + AGPIO(GPIO_CNTR1_NP) + MAX_COUNTERS, +#endif + AGPIO(GPIO_PWM1) + MAX_PWMS, // RGB Red or C Cold White + AGPIO(GPIO_PWM1_INV) + MAX_PWMS, +#ifdef USE_BUZZER + AGPIO(GPIO_BUZZER), // Buzzer + AGPIO(GPIO_BUZZER_INV), // Inverted buzzer +#endif + AGPIO(GPIO_LEDLNK), // Link led + AGPIO(GPIO_LEDLNK_INV), // Inverted link led + AGPIO(GPIO_OUTPUT_HI), // Fixed output high + AGPIO(GPIO_OUTPUT_LO), // Fixed output low +#ifdef USE_FTC532 + AGPIO(GPIO_FTC532), // FTC532 touch input +#endif + +/*-------------------------------------------------------------------------------------------*\ + * Protocol specifics +\*-------------------------------------------------------------------------------------------*/ + +#ifdef USE_I2C + AGPIO(GPIO_I2C_SCL), // I2C SCL + AGPIO(GPIO_I2C_SDA), // I2C SDA +#endif + +#ifdef USE_SPI + AGPIO(GPIO_SPI_MISO), // SPI MISO + AGPIO(GPIO_SPI_MOSI), // SPI MOSI + AGPIO(GPIO_SPI_CLK), // SPI Clk + AGPIO(GPIO_SPI_CS), // SPI Chip Select + AGPIO(GPIO_SPI_DC), // SPI Data Direction +#ifdef USE_NRF24 +// AGPIO(GPIO_NRF24_CS), +// AGPIO(GPIO_NRF24_DC), +#endif +#ifdef USE_RC522 + AGPIO(GPIO_RC522_CS), // RC522 Rfid Chip Select + AGPIO(GPIO_RC522_RST), // RC522 Rfid Reset +#endif +#ifdef USE_DISPLAY +#ifdef USE_DISPLAY_ILI9341 + AGPIO(GPIO_ILI9341_CS), + AGPIO(GPIO_ILI9341_DC), +#endif // USE_DISPLAY_ILI9341 +#endif // USE_DISPLAY +#endif // USE_SPI + AGPIO(GPIO_SSPI_MISO), // Software SPI Master Input Client Output + AGPIO(GPIO_SSPI_MOSI), // Software SPI Master Output Client Input + AGPIO(GPIO_SSPI_SCLK), // Software SPI Serial Clock + AGPIO(GPIO_SSPI_CS), // Software SPI Chip Select + AGPIO(GPIO_SSPI_DC), // Software SPI Data or Command +#ifdef USE_DISPLAY +#ifdef USE_DISPLAY_ILI9488 +// AGPIO(GPIO_ILI9488_CS), +#endif // USE_DISPLAY_ILI9488 +#ifdef USE_DISPLAY_EPAPER_29 +// AGPIO(GPIO_EPAPER29_CS), +#endif // USE_DISPLAY_EPAPER_29 +#ifdef USE_DISPLAY_EPAPER_42 +// AGPIO(GPIO_EPAPER42_CS), +#endif // USE_DISPLAY_EPAPER_42 +#ifdef USE_DISPLAY_SSD1351 +// AGPIO(GPIO_SSD1351_CS), +#endif // USE_DISPLAY_SSD1351 +#ifdef USE_DISPLAY_RA8876 +// AGPIO(GPIO_RA8876_CS), +#endif // USE_DISPLAY_RA8876 +#ifdef USE_DISPLAY_ST7789 +// AGPIO(GPIO_ST7789_CS), +// AGPIO(GPIO_ST7789_DC), +#endif //f USE_DISPLAY_ST7789 + AGPIO(GPIO_BACKLIGHT), // Display backlight control + AGPIO(GPIO_OLED_RESET), // OLED Display Reset +#endif +#ifdef USE_MAX31865 + AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S, +#endif + + AGPIO(GPIO_TXD), // Serial interface + AGPIO(GPIO_RXD), // Serial interface + +/*-------------------------------------------------------------------------------------------*\ + * Single wire sensors +\*-------------------------------------------------------------------------------------------*/ + +#ifdef USE_DHT + AGPIO(GPIO_DHT11), // DHT11 + AGPIO(GPIO_DHT22), // DHT21, DHT22, AM2301, AM2302, AM2321 + AGPIO(GPIO_SI7021), // iTead SI7021 + AGPIO(GPIO_DHT11_OUT), // Pseudo Single wire DHT11, DHT21, DHT22, AM2301, AM2302, AM2321 +#endif +#ifdef USE_DS18x20 + AGPIO(GPIO_DSB), // Single wire DS18B20 or DS18S20 + AGPIO(GPIO_DSB_OUT), // Pseudo Single wire DS18B20 or DS18S20 +#endif +#ifdef USE_LMT01 + AGPIO(GPIO_LMT01), // LMT01, count pulses on GPIO +#endif + +/*-------------------------------------------------------------------------------------------*\ + * Light +\*-------------------------------------------------------------------------------------------*/ + +#ifdef USE_LIGHT +#ifdef USE_WS2812 +#if (USE_WS2812_HARDWARE == NEO_HW_P9813) + AGPIO(GPIO_P9813_CLK), // P9813 CLOCK + AGPIO(GPIO_P9813_DAT), // P9813 DATA +#else + AGPIO(GPIO_WS2812), // WS2812 Led string +#endif // NEO_HW_P9813 +#endif +#ifdef USE_ARILUX_RF + AGPIO(GPIO_ARIRFRCV), // AriLux RF Receive input + AGPIO(GPIO_ARIRFSEL), // Arilux RF Receive input selected +#endif +#ifdef USE_MY92X1 + AGPIO(GPIO_DI), // my92x1 PWM input + AGPIO(GPIO_DCKI), // my92x1 CLK input +#endif // USE_MY92X1 +#ifdef USE_SM16716 + AGPIO(GPIO_SM16716_CLK), // SM16716 CLOCK + AGPIO(GPIO_SM16716_DAT), // SM16716 DATA + AGPIO(GPIO_SM16716_SEL), // SM16716 SELECT +#endif // USE_SM16716 +#ifdef USE_SM2135 + AGPIO(GPIO_SM2135_CLK), // SM2135 CLOCK + AGPIO(GPIO_SM2135_DAT) + MAX_SM2135_DAT, // SM2135 DATA +#endif // USE_SM2135 +#ifdef USE_TUYA_MCU + AGPIO(GPIO_TUYA_TX), // Tuya Serial interface + AGPIO(GPIO_TUYA_RX), // Tuya Serial interface +#endif +#ifdef USE_EXS_DIMMER + AGPIO(GPIO_EXS_ENABLE), // EXS MCU Enable +#endif +#ifdef USE_ELECTRIQ_MOODL + AGPIO(GPIO_ELECTRIQ_MOODL_TX), +#endif +#ifdef USE_SHELLY_DIMMER + AGPIO(GPIO_SHELLY_DIMMER_BOOT0), + AGPIO(GPIO_SHELLY_DIMMER_RST_INV), +#endif +#endif // USE_LIGHT + +/*-------------------------------------------------------------------------------------------*\ + * Transmission sensors +\*-------------------------------------------------------------------------------------------*/ + +#if defined(USE_IR_REMOTE) || defined(USE_IR_REMOTE_FULL) + AGPIO(GPIO_IRSEND), // IR remote +#if defined(USE_IR_RECEIVE) || defined(USE_IR_REMOTE_FULL) + AGPIO(GPIO_IRRECV), // IR receiver +#endif +#endif +#ifdef USE_RC_SWITCH + AGPIO(GPIO_RFSEND), // RF transmitter + AGPIO(GPIO_RFRECV), // RF receiver +#endif +#ifdef USE_RF_SENSOR + AGPIO(GPIO_RF_SENSOR), // Rf receiver with sensor decoding +#endif +#ifdef USE_SR04 + AGPIO(GPIO_SR04_TRIG), // SR04 Tri/TXgger pin + AGPIO(GPIO_SR04_ECHO), // SR04 Ech/RXo pin +#endif +#ifdef USE_TM1638 + AGPIO(GPIO_TM16CLK), // TM1638 Clock + AGPIO(GPIO_TM16DIO), // TM1638 Data I/O + AGPIO(GPIO_TM16STB), // TM1638 Strobe +#endif +#ifdef USE_HX711 + AGPIO(GPIO_HX711_SCK), // HX711 Load Cell clock + AGPIO(GPIO_HX711_DAT), // HX711 Load Cell data +#endif + +/*-------------------------------------------------------------------------------------------*\ + * Energy sensors +\*-------------------------------------------------------------------------------------------*/ + +#ifdef USE_ENERGY_SENSOR +#ifdef USE_HLW8012 + AGPIO(GPIO_NRG_SEL), // HLW8012/HLJ-01 Sel output (1 = Voltage) + AGPIO(GPIO_NRG_SEL_INV), // HLW8012/HLJ-01 Sel output (0 = Voltage) + AGPIO(GPIO_NRG_CF1), // HLW8012/HLJ-01 CF1 voltage / current + AGPIO(GPIO_HLW_CF), // HLW8012 CF power + AGPIO(GPIO_HJL_CF), // HJL-01/BL0937 CF power +#endif +#if defined(USE_I2C) && defined(USE_ADE7953) + AGPIO(GPIO_ADE7953_IRQ), // ADE7953 IRQ +#endif +#ifdef USE_CSE7766 + AGPIO(GPIO_CSE7766_TX), // CSE7766 Serial interface (S31 and Pow R2) + AGPIO(GPIO_CSE7766_RX), // CSE7766 Serial interface (S31 and Pow R2) +#endif +#ifdef USE_MCP39F501 + AGPIO(GPIO_MCP39F5_TX), // MCP39F501 Serial interface (Shelly2) + AGPIO(GPIO_MCP39F5_RX), // MCP39F501 Serial interface (Shelly2) + AGPIO(GPIO_MCP39F5_RST), // MCP39F501 Reset (Shelly2) +#endif +#if defined(USE_PZEM004T) || defined(USE_PZEM_AC) || defined(USE_PZEM_DC) + AGPIO(GPIO_PZEM0XX_TX), // PZEM0XX Serial interface +#endif +#ifdef USE_PZEM004T + AGPIO(GPIO_PZEM004_RX), // PZEM004T Serial interface +#endif +#ifdef USE_PZEM_AC + AGPIO(GPIO_PZEM016_RX), // PZEM-014,016 Serial Modbus interface +#endif +#ifdef USE_PZEM_DC + AGPIO(GPIO_PZEM017_RX), // PZEM-003,017 Serial Modbus interface +#endif +#ifdef USE_SDM120 + AGPIO(GPIO_SDM120_TX), // SDM120 Serial interface + AGPIO(GPIO_SDM120_RX), // SDM120 Serial interface +#endif +#ifdef USE_SDM630 + AGPIO(GPIO_SDM630_TX), // SDM630 Serial interface + AGPIO(GPIO_SDM630_RX), // SDM630 Serial interface +#endif +#ifdef USE_DDS2382 + AGPIO(GPIO_DDS2382_TX), // DDS2382 Serial interface + AGPIO(GPIO_DDS2382_RX), // DDS2382 Serial interface +#endif +#ifdef USE_DDSU666 + AGPIO(GPIO_DDSU666_TX), // DDSU666 Serial interface + AGPIO(GPIO_DDSU666_RX), // DDSU666 Serial interface +#endif // USE_DDSU666 +#ifdef USE_SOLAX_X1 + AGPIO(GPIO_SOLAXX1_TX), // Solax Inverter tx pin + AGPIO(GPIO_SOLAXX1_RX), // Solax Inverter rx pin +#endif // USE_SOLAX_X1 +#ifdef USE_LE01MR + AGPIO(GPIO_LE01MR_TX), // F7F LE-01MR energy meter tx pin + AGPIO(GPIO_LE01MR_RX), // F7F LE-01MR energy meter rx pin +#endif // IFDEF:USE_LE01MR +#ifdef USE_BL0940 + AGPIO(GPIO_BL0940_RX), // BL0940 Serial interface +#endif +#ifdef USE_IEM3000 + AGPIO(GPIO_IEM3000_TX), // IEM3000 Serial interface + AGPIO(GPIO_IEM3000_RX), // IEM3000 Serial interface +#endif +#ifdef USE_WE517 + AGPIO(GPIO_WE517_TX), // WE517 Serial interface + AGPIO(GPIO_WE517_RX), // WE517 Serial interface +#endif +#endif // USE_ENERGY_SENSOR + +/*-------------------------------------------------------------------------------------------*\ + * Serial sensors +\*-------------------------------------------------------------------------------------------*/ + +#ifdef USE_SERIAL_BRIDGE + AGPIO(GPIO_SBR_TX), // Serial Bridge Serial interface + AGPIO(GPIO_SBR_RX), // Serial Bridge Serial interface +#endif +#ifdef USE_TCP_BRIDGE + AGPIO(GPIO_TCP_TX), // TCP Serial bridge + AGPIO(GPIO_TCP_RX), // TCP Serial bridge +#endif +#ifdef USE_ZIGBEE + AGPIO(GPIO_ZIGBEE_TX), // Zigbee Serial interface + AGPIO(GPIO_ZIGBEE_RX), // Zigbee Serial interface + AGPIO(GPIO_ZIGBEE_RST), // Zigbee reset +#endif +#ifdef USE_MHZ19 + AGPIO(GPIO_MHZ_TXD), // MH-Z19 Serial interface + AGPIO(GPIO_MHZ_RXD), // MH-Z19 Serial interface +#endif +#ifdef USE_SENSEAIR + AGPIO(GPIO_SAIR_TX), // SenseAir Serial interface + AGPIO(GPIO_SAIR_RX), // SenseAir Serial interface +#endif +#ifdef USE_NOVA_SDS + AGPIO(GPIO_SDS0X1_TX), // Nova Fitness SDS011 Serial interface + AGPIO(GPIO_SDS0X1_RX), // Nova Fitness SDS011 Serial interface +#endif +#ifdef USE_HPMA + AGPIO(GPIO_HPMA_TX), // Honeywell HPMA115S0 Serial interface + AGPIO(GPIO_HPMA_RX), // Honeywell HPMA115S0 Serial interface +#endif +#ifdef USE_PMS5003 + AGPIO(GPIO_PMS5003_TX), // Plantower PMS5003 Serial interface + AGPIO(GPIO_PMS5003_RX), // Plantower PMS5003 Serial interface +#endif +#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) + AGPIO(GPIO_TX2X_TXD_BLACK), // TX20/TX23 Transmission Pin +#endif +#ifdef USE_WINDMETER + AGPIO(GPIO_WINDMETER_SPEED), +#endif +#ifdef USE_MP3_PLAYER + AGPIO(GPIO_MP3_DFR562), // RB-DFR-562, DFPlayer Mini MP3 Player Serial interface +#endif +#ifdef USE_AZ7798 + AGPIO(GPIO_AZ_TXD), // AZ-Instrument 7798 CO2 datalogger Serial interface + AGPIO(GPIO_AZ_RXD), // AZ-Instrument 7798 CO2 datalogger Serial interface +#endif +#ifdef USE_PN532_HSU + AGPIO(GPIO_PN532_TXD), // PN532 HSU Tx + AGPIO(GPIO_PN532_RXD), // PN532 HSU Rx +#endif +#ifdef USE_TASMOTA_CLIENT + AGPIO(GPIO_TASMOTACLIENT_TXD), // Tasmota Client TX + AGPIO(GPIO_TASMOTACLIENT_RXD), // Tasmota Client RX + AGPIO(GPIO_TASMOTACLIENT_RST), // Tasmota Client Reset + AGPIO(GPIO_TASMOTACLIENT_RST_INV), // Tasmota Client Reset Inverted +#endif +#ifdef USE_RDM6300 + AGPIO(GPIO_RDM6300_RX), +#endif +#ifdef USE_IBEACON + AGPIO(GPIO_IBEACON_TX), + AGPIO(GPIO_IBEACON_RX), +#endif +#ifdef USE_GPS + AGPIO(GPIO_GPS_TX), // GPS serial interface + AGPIO(GPIO_GPS_RX), // GPS serial interface +#endif +#ifdef USE_HM10 + AGPIO(GPIO_HM10_TX), // GPS serial interface + AGPIO(GPIO_HM10_RX), // GPS serial interface +#endif +#ifdef USE_OPENTHERM + AGPIO(GPIO_BOILER_OT_TX), + AGPIO(GPIO_BOILER_OT_RX), +#endif +#ifdef USE_AS608 + AGPIO(GPIO_AS608_TX), + AGPIO(GPIO_AS608_RX), +#endif + +/*-------------------------------------------------------------------------------------------*\ + * Other sensors +\*-------------------------------------------------------------------------------------------*/ + +#ifdef USE_MGC3130 + AGPIO(GPIO_MGC3130_XFER), + AGPIO(GPIO_MGC3130_RESET), +#endif +#ifdef USE_MAX31855 + AGPIO(GPIO_MAX31855CS), // MAX31855 Serial interface + AGPIO(GPIO_MAX31855CLK), // MAX31855 Serial interface + AGPIO(GPIO_MAX31855DO), // MAX31855 Serial interface +#endif +#ifdef USE_HRE + AGPIO(GPIO_HRE_CLOCK), + AGPIO(GPIO_HRE_DATA), +#endif +#ifdef USE_A4988_STEPPER + AGPIO(GPIO_A4988_DIR), // A4988 direction pin + AGPIO(GPIO_A4988_STP), // A4988 step pin + // folowing are not mandatory + AGPIO(GPIO_A4988_ENA), // A4988 enabled pin + AGPIO(GPIO_A4988_MS1) + MAX_A4988_MSS, // A4988 microstep pin1 to pin3 +#endif +#ifdef USE_DEEPSLEEP + AGPIO(GPIO_DEEPSLEEP), +#endif +#ifdef USE_KEELOQ + AGPIO(GPIO_CC1101_GDO0), // CC1101 pin for RX + AGPIO(GPIO_CC1101_GDO2), // CC1101 pin for RX +#endif +#ifdef USE_HRXL + AGPIO(GPIO_HRXL_RX), +#endif +#ifdef USE_DYP + AGPIO(GPIO_DYP_RX), +#endif +#ifdef USE_AS3935 + AGPIO(GPIO_AS3935), // AS3935 IRQ Pin +#endif +#ifdef USE_TELEINFO + AGPIO(GPIO_TELEINFO_RX), + AGPIO(GPIO_TELEINFO_ENABLE), +#endif +#ifdef USE_MIEL_HVAC + AGPIO(GPIO_MIEL_HVAC_TX), // Mitsubishi Electric HVAC TX pin + AGPIO(GPIO_MIEL_HVAC_RX), // Mitsubishi Electric HVAC RX pin +#endif + +/*-------------------------------------------------------------------------------------------*\ + * ESP32 specifics +\*-------------------------------------------------------------------------------------------*/ + +#ifdef ESP32 +#ifdef USE_WEBCAM + AGPIO(GPIO_WEBCAM_PWDN), + AGPIO(GPIO_WEBCAM_RESET), + AGPIO(GPIO_WEBCAM_XCLK), + AGPIO(GPIO_WEBCAM_SIOD), + AGPIO(GPIO_WEBCAM_SIOC), + AGPIO(GPIO_WEBCAM_DATA) + MAX_WEBCAM_DATA, + AGPIO(GPIO_WEBCAM_VSYNC), + AGPIO(GPIO_WEBCAM_HREF), + AGPIO(GPIO_WEBCAM_PCLK), + AGPIO(GPIO_WEBCAM_PSCLK), + AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD, + AGPIO(GPIO_WEBCAM_PSRCS), +#endif // USE_WEBCAM +#ifdef USE_ETHERNET + AGPIO(GPIO_ETH_PHY_POWER), + AGPIO(GPIO_ETH_PHY_MDC), + AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet +#endif // USE_ETHERNET + +/*-------------------------------------------------------------------------------------------*\ + * ESP32 multiple Analog / Digital converter inputs +\*-------------------------------------------------------------------------------------------*/ + + AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs + AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor + AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor + AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button + AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS, + AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range + AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current + AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick +#endif // ESP32 +}; + +/*-------------------------------------------------------------------------------------------*\ + * ESP8266 single Analog / Digital converter input +\*-------------------------------------------------------------------------------------------*/ + +#ifdef ESP8266 +const uint16_t kAdcNiceList[] PROGMEM = { + GPIO_NONE, // Not used + AGPIO(GPIO_ADC_INPUT), // Analog inputs + AGPIO(GPIO_ADC_TEMP), // Thermistor + AGPIO(GPIO_ADC_LIGHT), // Light sensor + AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button + AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS, + AGPIO(GPIO_ADC_RANGE), // Range + AGPIO(GPIO_ADC_CT_POWER), // Current + AGPIO(GPIO_ADC_JOY), // Joystick +}; +#endif // ESP8266 + +// User selectable ADC functionality +enum UserSelectableAdc { + ADC_NONE, // Not used + ADC_INPUT, // Analog input + ADC_TEMP, // Thermistor + ADC_LIGHT, // Light sensor + ADC_BUTTON, // Button + ADC_BUTTON_INV, + ADC_RANGE, // Range + ADC_CT_POWER, // Current + ADC_JOY, // Joystick +// ADC_SWITCH, // Switch +// ADC_SWITCH_INV, + ADC_END }; + +/*********************************************************************************************\ + * ATTENTION: No user changeable features beyond this point - do not add templates !!! +\*********************************************************************************************/ + +#define GPIO_ANY 32 // Any GPIO + +#ifdef ESP8266 + +#define MAX_GPI8_PIN 17 // Number of supported GPIO (0..16) +#define FLASH_PINS 6 // Number of flash chip pins + +#define MAX_GPIO_PIN 18 // Number of supported GPIO (0..16 + ADC0) +#define ADC0_PIN 17 // Pin number of ADC0 +#define MIN_FLASH_PINS 4 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8 and 11) +#define MAX_USER_PINS 14 // MAX_GPIO_PIN - MIN_FLASH_PINS +#define WEMOS_MODULE 17 // Wemos module + +const char PINS_WEMOS[] PROGMEM = "D3TXD4RXD2D1flashcFLFLolD6D7D5D8D0A0"; + +typedef struct MYIO8 { + uint8_t io[MAX_GPI8_PIN]; +} myio8; // 17 bytes + +typedef struct MYCFGIO8285 { + uint8_t io[MAX_GPI8_PIN - MIN_FLASH_PINS]; +} mycfgio8285; // 13 bytes + +typedef struct MYTMPLT8285 { + mycfgio8285 gp; + uint8_t flag; +} mytmplt8285; // 14 bytes + +typedef struct MYCFGIO8266 { + uint8_t io[MAX_GPI8_PIN - FLASH_PINS]; +} mycfgio8266; // 11 bytes + +typedef struct MYTMPLT8266 { + mycfgio8266 gp; + uint8_t flag; +} mytmplt8266; // 12 bytes + +#endif // ESP8266 +#ifdef ESP32 + +#define MAX_GPIO_PIN 40 // Number of supported GPIO +#define MIN_FLASH_PINS 4 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8 and 11) +#define MAX_USER_PINS 36 // MAX_GPIO_PIN - MIN_FLASH_PINS +#define WEMOS_MODULE 0 // Wemos module + +// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839 +const char PINS_WEMOS[] PROGMEM = "IOTXIORXIOIOflashcFLFLolIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOAOAOIAIAIAIAIAIA"; + +#endif // ESP32 + +//******************************************************************************************** + +typedef struct MYIO { + uint16_t io[MAX_GPIO_PIN]; +} myio; // 18 * 2 = 36 bytes / 40 * 2 = 80 bytes + +typedef struct MYCFGIO { + uint16_t io[MAX_USER_PINS]; +} mycfgio; // 14 * 2 = 28 bytes / 36 * 2 = 72 bytes + +#define GPIO_FLAG_USED 0 // Currently no flags used + +typedef union { + uint16_t data; + struct { + uint16_t spare00 : 1; + uint16_t spare01 : 1; + uint16_t spare02 : 1; + uint16_t spare03 : 1; + uint16_t spare04 : 1; + uint16_t spare05 : 1; + uint16_t spare06 : 1; + uint16_t spare07 : 1; + uint16_t spare08 : 1; + uint16_t spare09 : 1; + uint16_t spare10 : 1; + uint16_t spare11 : 1; + uint16_t spare12 : 1; + uint16_t spare13 : 1; + uint16_t spare14 : 1; + uint16_t spare15 : 1; + }; +} gpio_flag; // 2 bytes + +typedef struct MYTMPLT { + mycfgio gp; // 28 / 72 bytes + gpio_flag flag; // 2 bytes +} mytmplt; // 30 / 74 bytes + +//******************************************************************************************** + +#ifdef ESP8266 +#include "tasmota_template_legacy.h" + +/********************************************************************************************\ + * ESP8266 Module Templates +\********************************************************************************************/ + +#define USER_MODULE 255 + +// Supported hardware modules +enum SupportedModules { + SONOFF_BASIC, SONOFF_RF, SONOFF_SV, SONOFF_TH, SONOFF_DUAL, SONOFF_POW, SONOFF_4CH, SONOFF_S2X, SLAMPHER, SONOFF_TOUCH, + SONOFF_LED, CH1, CH4, MOTOR, ELECTRODRAGON, EXS_RELAY, WION, WEMOS, SONOFF_DEV, H801, + SONOFF_SC, SONOFF_BN, SONOFF_4CHPRO, HUAFAN_SS, SONOFF_BRIDGE, SONOFF_B1, AILIGHT, SONOFF_T11, SONOFF_T12, SONOFF_T13, + SUPLA1, WITTY, YUNSHAN, MAGICHOME, LUANIHVIO, KMC_70011, ARILUX_LC01, ARILUX_LC11, SONOFF_DUAL_R2, ARILUX_LC06, + SONOFF_S31, ZENGGE_ZF_WF017, SONOFF_POW_R2, SONOFF_IFAN02, BLITZWOLF_BWSHP, SHELLY1, SHELLY2, PHILIPS, NEO_COOLCAM, ESP_SWITCH, + OBI, TECKIN, APLIC_WDP303075, TUYA_DIMMER, GOSUND, ARMTRONIX_DIMMERS, SK03_TUYA, PS_16_DZ, TECKIN_US, MANZOKU_EU_4, + OBI2, YTF_IR_BRIDGE, DIGOO, KA10, ZX2820, MI_DESK_LAMP, SP10, WAGA, SYF05, SONOFF_L1, + SONOFF_IFAN03, EXS_DIMMER, PWM_DIMMER, SONOFF_D1, SONOFF_ZB_BRIDGE, + MAXMODULE }; + +const char kModuleNames[] PROGMEM = + "Sonoff Basic|Sonoff RF|Sonoff SV|Sonoff TH|Sonoff Dual|Sonoff Pow|Sonoff 4CH|Sonoff S2X|Slampher|Sonoff Touch|" + "Sonoff LED|1 Channel|4 Channel|Motor C/AC|ElectroDragon|EXS Relay(s)|WiOn|Generic|Sonoff Dev|H801|" + "Sonoff SC|Sonoff BN-SZ|Sonoff 4CH Pro|Huafan SS|Sonoff Bridge|Sonoff B1|AiLight|Sonoff T1 1CH|Sonoff T1 2CH|Sonoff T1 3CH|" + "Supla Espablo|Witty Cloud|Yunshan Relay|MagicHome|Luani HVIO|KMC 70011|Arilux LC01|Arilux LC11|Sonoff Dual R2|Arilux LC06|" + "Sonoff S31|Zengge WF017|Sonoff Pow R2|Sonoff iFan02|BlitzWolf SHP|Shelly 1|Shelly 2|Xiaomi Philips|Neo Coolcam|ESP Switch|" + "OBI Socket|Teckin|AplicWDP303075|Tuya MCU|Gosund SP1 v23|ARMTR Dimmer|SK03 Outdoor|PS-16-DZ|Teckin US|Manzoku strip|" + "OBI Socket 2|YTF IR Bridge|Digoo DG-SP202|KA10|Luminea ZX2820|Mi Desk Lamp|SP10|WAGA CHCZ02MB|SYF05|Sonoff L1|" + "Sonoff iFan03|EXS Dimmer|PWM Dimmer|Sonoff D1|Sonoff ZbBridge" + ; + +const uint8_t kModuleNiceList[] PROGMEM = { + SONOFF_BASIC, // Sonoff Relay Devices + SONOFF_RF, + SONOFF_TH, + SONOFF_DUAL, + SONOFF_DUAL_R2, + SONOFF_POW, + SONOFF_POW_R2, + SONOFF_4CH, + SONOFF_4CHPRO, + SONOFF_S31, // Sonoff Socket Relay Devices with Energy Monitoring + SONOFF_S2X, // Sonoff Socket Relay Devices + SONOFF_TOUCH, // Sonoff Switch Devices + SONOFF_T11, + SONOFF_T12, + SONOFF_T13, +#ifdef USE_SONOFF_D1 + SONOFF_D1, // Sonoff D1 +#endif + SONOFF_LED, // Sonoff Light Devices + SONOFF_BN, +#ifdef USE_SONOFF_L1 + SONOFF_L1, +#endif + SONOFF_B1, // Sonoff Light Bulbs + SLAMPHER, +#ifdef USE_SONOFF_SC + SONOFF_SC, // Sonoff Environmemtal Sensor +#endif +#ifdef USE_SONOFF_IFAN + SONOFF_IFAN02, // Sonoff Fan + SONOFF_IFAN03, +#endif +#ifdef USE_SONOFF_RF + SONOFF_BRIDGE, // Sonoff Bridge +#endif +#ifdef USE_ZIGBEE_EZSP + SONOFF_ZB_BRIDGE, +#endif + SONOFF_SV, // Sonoff Development Devices + SONOFF_DEV, + CH1, // Relay Devices + CH4, + MOTOR, + ELECTRODRAGON, + EXS_RELAY, + SUPLA1, + LUANIHVIO, + YUNSHAN, + WION, + SHELLY1, + SHELLY2, + BLITZWOLF_BWSHP, // Socket Relay Devices with Energy Monitoring + TECKIN, + TECKIN_US, + APLIC_WDP303075, + GOSUND, + ZX2820, + SK03_TUYA, + DIGOO, + KA10, + SP10, + WAGA, + NEO_COOLCAM, // Socket Relay Devices + OBI, + OBI2, + MANZOKU_EU_4, + ESP_SWITCH, // Switch Devices +#ifdef USE_TUYA_MCU + TUYA_DIMMER, // Dimmer Devices +#endif +#ifdef USE_ARMTRONIX_DIMMERS + ARMTRONIX_DIMMERS, +#endif +#ifdef USE_PS_16_DZ + PS_16_DZ, +#endif +#ifdef USE_EXS_DIMMER + EXS_DIMMER, +#endif +#ifdef USE_PWM_DIMMER + PWM_DIMMER, +#endif + H801, // Light Devices + MAGICHOME, + ARILUX_LC01, + ARILUX_LC06, + ARILUX_LC11, + ZENGGE_ZF_WF017, + HUAFAN_SS, +#ifdef ROTARY_V1 + MI_DESK_LAMP, +#endif + KMC_70011, + AILIGHT, // Light Bulbs + PHILIPS, + SYF05, + YTF_IR_BRIDGE, + WITTY, // Development Devices + WEMOS +}; + +enum SupportedTemplates8285 { + TMP_SONOFF_BASIC, TMP_SONOFF_SV, TMP_SONOFF_DUAL, TMP_SONOFF_POW, TMP_SONOFF_LED, TMP_ELECTRODRAGON, + TMP_EXS_RELAY, TMP_WION, TMP_SONOFF_DEV, TMP_H801, TMP_SONOFF_SC, TMP_SONOFF_BN, TMP_HUAFAN_SS, TMP_SONOFF_BRIDGE, + TMP_SONOFF_B1, TMP_AILIGHT, TMP_SONOFF_T11, TMP_SUPLA1, TMP_WITTY, TMP_YUNSHAN, TMP_MAGICHOME, + TMP_LUANIHVIO, TMP_KMC_70011, TMP_ARILUX_LC01, TMP_ARILUX_LC11, TMP_ARILUX_LC06, TMP_ZENGGE_ZF_WF017, + TMP_SONOFF_POW_R2, TMP_BLITZWOLF_BWSHP, TMP_SHELLY1, TMP_SHELLY2, TMP_PHILIPS, TMP_NEO_COOLCAM, TMP_ESP_SWITCH, TMP_OBI, + TMP_TECKIN, TMP_APLIC_WDP303075, TMP_TUYA_DIMMER, TMP_GOSUND, TMP_ARMTRONIX_DIMMERS, TMP_SK03_TUYA, TMP_PS_16_DZ, + TMP_TECKIN_US, TMP_MANZOKU_EU_4, TMP_OBI2, TMP_YTF_IR_BRIDGE, TMP_DIGOO, TMP_KA10, TMP_ZX2820, TMP_MI_DESK_LAMP, TMP_SP10, + TMP_WAGA, TMP_SYF05, TMP_EXS_DIMMER, TMP_PWM_DIMMER, TMP_SONOFF_ZB_BRIDGE, + TMP_MAXMODULE_8285 }; + +enum SupportedTemplates8266 { + TMP_WEMOS = TMP_MAXMODULE_8285, TMP_SONOFF_4CH, TMP_SONOFF_T12, TMP_SONOFF_T13, TMP_SONOFF_DUAL_R2, TMP_SONOFF_IFAN03, + TMP_MAXMODULE_8266 }; + +const uint8_t kModuleTemplateList[MAXMODULE] PROGMEM = { + TMP_SONOFF_BASIC, + TMP_SONOFF_BASIC, // SONOFF_RF + TMP_SONOFF_SV, + TMP_SONOFF_BASIC, // SONOFF_TH + TMP_SONOFF_DUAL, + TMP_SONOFF_POW, + TMP_SONOFF_4CH, + TMP_SONOFF_BASIC, // SONOFF_S2X + TMP_SONOFF_BASIC, // SLAMPHER + TMP_SONOFF_T11, // SONOFF_TOUCH + TMP_SONOFF_LED, + TMP_SONOFF_BASIC, // CH1 + TMP_SONOFF_DUAL, // CH4 + TMP_SONOFF_BASIC, // MOTOR + TMP_ELECTRODRAGON, + TMP_EXS_RELAY, + TMP_WION, + TMP_WEMOS, + TMP_SONOFF_DEV, + TMP_H801, + TMP_SONOFF_SC, + TMP_SONOFF_BN, + TMP_SONOFF_4CH, // SONOFF_4CHPRO + TMP_HUAFAN_SS, + TMP_SONOFF_BRIDGE, + TMP_SONOFF_B1, + TMP_AILIGHT, + TMP_SONOFF_T11, + TMP_SONOFF_T12, + TMP_SONOFF_T13, + TMP_SUPLA1, + TMP_WITTY, + TMP_YUNSHAN, + TMP_MAGICHOME, + TMP_LUANIHVIO, + TMP_KMC_70011, + TMP_ARILUX_LC01, + TMP_ARILUX_LC11, + TMP_SONOFF_DUAL_R2, + TMP_ARILUX_LC06, + TMP_SONOFF_POW_R2, // SONOFF_S31 + TMP_ZENGGE_ZF_WF017, + TMP_SONOFF_POW_R2, + TMP_SONOFF_4CH, // SONOFF_IFAN02 + TMP_BLITZWOLF_BWSHP, + TMP_SHELLY1, + TMP_SHELLY2, + TMP_PHILIPS, + TMP_NEO_COOLCAM, + TMP_ESP_SWITCH, + TMP_OBI, + TMP_TECKIN, + TMP_APLIC_WDP303075, + TMP_TUYA_DIMMER, + TMP_GOSUND, + TMP_ARMTRONIX_DIMMERS, + TMP_SK03_TUYA, + TMP_PS_16_DZ, + TMP_TECKIN_US, + TMP_MANZOKU_EU_4, + TMP_OBI2, + TMP_YTF_IR_BRIDGE, + TMP_DIGOO, + TMP_KA10, + TMP_ZX2820, + TMP_MI_DESK_LAMP, + TMP_SP10, + TMP_WAGA, + TMP_SYF05, + TMP_SONOFF_DUAL, // SONOFF_L1 + TMP_SONOFF_IFAN03, + TMP_EXS_DIMMER, + TMP_PWM_DIMMER, + TMP_SONOFF_DUAL, // SONOFF_D1 + TMP_SONOFF_ZB_BRIDGE, + }; + +/*********************************************************************************************\ + * Templates with 12 usable pins (ESP8266) +\*********************************************************************************************/ + +const mytmplt8266 kModules8266[TMP_MAXMODULE_8285] PROGMEM = { + { // SONOFF_BASIC - Sonoff Basic (ESP8266) + GPI8_KEY1, // GPIO00 Button + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Only available on newer Sonoff Basic R2 V1 + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_USER, // GPIO04 Optional sensor + 0, // GPIO05 + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Green Led (0 = On, 1 = Off) - Link and Power status + GPI8_USER, // GPIO14 Optional sensor + 0, // GPIO15 + 0, // GPIO16 + 0 // ADC0 Analog input + }, + { // SONOFF_SV - Sonoff SV (ESP8266) + GPI8_KEY1, // GPIO00 Button + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + 0, + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_USER, // GPIO04 Optional sensor + GPI8_USER, // GPIO05 Optional sensor + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Green Led (0 = On, 1 = Off) - Link and Power status + GPI8_USER, // GPIO14 Optional sensor + 0, 0, + GPI8_USER // ADC0 Analog input + }, + { // SONOFF_DUAL - Sonoff Dual (ESP8266) + GPI8_USER, // GPIO00 Pad + GPI8_TXD, // GPIO01 Relay control + 0, + GPI8_RXD, // GPIO03 Relay control + GPI8_USER, // GPIO04 Optional sensor + 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + 0, + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + GPI8_USER, // GPIO14 Optional sensor + 0, 0, 0 + }, + { // SONOFF_POW - Sonoff Pow (ESP8266 - HLW8012) + GPI8_KEY1, // GPIO00 Button + 0, 0, 0, 0, + GPI8_NRG_SEL, // GPIO05 HLW8012 Sel output (1 = Voltage) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) + GPI8_NRG_CF1, // GPIO13 HLW8012 CF1 voltage / current + GPI8_HLW_CF, // GPIO14 HLW8012 CF power + GPI8_LED1, // GPIO15 Blue Led (0 = On, 1 = Off) - Link and Power status + 0, 0 + }, + { // SONOFF_LED - Sonoff LED (ESP8266) + GPI8_KEY1, // GPIO00 Button + 0, 0, 0, + GPI8_USER, // GPIO04 Optional sensor (PWM3 Green) + GPI8_USER, // GPIO05 Optional sensor (PWM2 Red) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM1, // GPIO12 Cold light (PWM0 Cold) + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + GPI8_PWM2, // GPIO14 Warm light (PWM1 Warm) + GPI8_USER, // GPIO15 Optional sensor (PWM4 Blue) + 0, 0 + }, + { // ELECTRODRAGON - ElectroDragon IoT Relay Board (ESP8266) + GPI8_KEY2, // GPIO00 Button 2 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_KEY1, // GPIO02 Button 1 + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_USER, // GPIO04 Optional sensor + GPI8_USER, // GPIO05 Optional sensor + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL2, // GPIO12 Red Led and Relay 2 (0 = Off, 1 = On) + GPI8_REL1, // GPIO13 Red Led and Relay 1 (0 = Off, 1 = On) + GPI8_USER, // GPIO14 Optional sensor + GPI8_USER, // GPIO15 Optional sensor + GPI8_LED1, // GPIO16 Green/Blue Led (1 = On, 0 = Off) - Link and Power status + GPI8_USER // ADC0 A0 Analog input + }, + { // EXS_RELAY - ES-Store Latching relay(s) (ESP8266) + // https://ex-store.de/ESP8266-WiFi-Relay-V31 + // V3.1 Module Pin 1 VCC 3V3, Module Pin 6 GND + // https://ex-store.de/2-Kanal-WiFi-WLan-Relay-V5-Blackline-fuer-Unterputzmontage + GPI8_USER, // GPIO00 V3.1 Module Pin 8 - V5.0 Module Pin 4 + GPI8_USER, // GPIO01 UART0_TXD V3.1 Module Pin 2 - V5.0 Module Pin 3 + GPI8_USER, // GPIO02 V3.1 Module Pin 7 + GPI8_USER, // GPIO03 UART0_RXD V3.1 Module Pin 3 + GPI8_USER, // GPIO04 V3.1 Module Pin 10 - V5.0 Module Pin 2 + GPI8_USER, // GPIO05 V3.1 Module Pin 9 - V5.0 Module Pin 1 + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Relay1 ( 1 = Off) + GPI8_REL2, // GPIO13 Relay1 ( 1 = On) + GPI8_USER, // GPIO14 V3.1 Module Pin 5 - V5.0 GPI8_REL3_INV Relay2 ( 1 = Off) + GPI8_LED1, // GPIO15 V5.0 LED1 - Link and Power status + GPI8_USER, // GPIO16 V3.1 Module Pin 4 - V5.0 GPI8_REL4_INV Relay2 ( 1 = On) + 0 + }, + { // WION - Indoor Tap (ESP8266) + // https://www.amazon.com/gp/product/B00ZYLUBJU/ref=s9_acsd_al_bw_c_x_3_w + GPI8_USER, // GPIO00 Optional sensor (pm clock) + 0, + GPI8_LED1, // GPIO02 Green Led (1 = On, 0 = Off) - Link and Power status + 0, 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 Optional sensor (pm data) + GPI8_KEY1, // GPIO13 Button + 0, + GPI8_REL1, // GPIO15 Relay (0 = Off, 1 = On) + 0, 0 + }, + { // SONOFF_DEV - Sonoff Dev (ESP8266) + GPI8_KEY1, // GPIO00 E-FW Button + GPI8_USER, // GPIO01 TX Serial RXD and Optional sensor + 0, // GPIO02 + GPI8_USER, // GPIO03 RX Serial TXD and Optional sensor + GPI8_USER, // GPIO04 Optional sensor + GPI8_USER, // GPIO05 Optional sensor + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 + GPI8_USER, // GPIO13 BLUE LED + GPI8_USER, // GPIO14 Optional sensor + 0, // GPIO15 + 0, // GPIO16 + GPI8_USER // ADC0 A0 Analog input + }, + { // H801 - Lixada H801 Wifi (ESP8266) + GPI8_USER, // GPIO00 E-FW Button + GPI8_LED1, // GPIO01 Green LED - Link and Power status + GPI8_USER, // GPIO02 TX and Optional sensor - Pin next to TX on the PCB + GPI8_USER, // GPIO03 RX and Optional sensor - Pin next to GND on the PCB + GPI8_PWM5, // GPIO04 W2 - PWM5 + GPI8_LED2_INV, // GPIO05 Red LED + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM3, // GPIO12 Blue + GPI8_PWM2, // GPIO13 Green + GPI8_PWM4, // GPIO14 W1 - PWM4 + GPI8_PWM1, // GPIO15 Red + 0, 0 + }, + { // SONOFF_SC - onoff SC (ESP8266) + GPI8_KEY1, // GPIO00 Button + GPI8_TXD, // GPIO01 RXD to ATMEGA328P + GPI8_USER, // GPIO02 Optional sensor + GPI8_RXD, // GPIO03 TXD to ATMEGA328P + 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + 0, + GPI8_LED1_INV, // GPIO13 Green Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // SONOFF_BN - Sonoff BN-SZ01 Ceiling led (ESP8285) + 0, 0, 0, 0, 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM1, // GPIO12 Light + GPI8_LED1_INV, // GPIO13 Red Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // HUAFAN_SS - Hua Fan Smart Socket (ESP8266) - like Sonoff Pow + GPI8_LEDLNK_INV, // GPIO00 Blue Led (0 = On, 1 = Off) - Link status + 0, 0, + GPI8_LED1_INV, // GPIO03 Red Led (0 = On, 1 = Off) - Power status + GPI8_KEY1, // GPIO04 Button + GPI8_REL1_INV, // GPIO05 Relay (0 = On, 1 = Off) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_CF1, // GPIO12 HLW8012 CF1 voltage / current + GPI8_NRG_SEL, // GPIO13 HLW8012 Sel output (1 = Voltage) + GPI8_HLW_CF, // GPIO14 HLW8012 CF power + 0, 0, 0 + }, + { // SONOFF_BRIDGE - Sonoff RF Bridge 433 (ESP8285) + GPI8_KEY1, // GPIO00 Button + GPI8_TXD, // GPIO01 RF bridge control + GPI8_USER, // GPIO02 Optional sensor + GPI8_RXD, // GPIO03 RF bridge control + GPI8_USER, // GPIO04 Optional sensor + GPI8_USER, // GPIO05 Optional sensor + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 Optional sensor + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + GPI8_USER, // GPIO14 Optional sensor + 0, 0, 0 + }, + { // SONOFF_B1 - Sonoff B1 (ESP8285 - my9231) + GPI8_KEY1, // GPIO00 Pad + GPI8_USER, // GPIO01 Serial RXD and Optional sensor pad + GPI8_USER, // GPIO02 Optional sensor SDA pad + GPI8_USER, // GPIO03 Serial TXD and Optional sensor pad + 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_DI, // GPIO12 my9231 DI + 0, + GPI8_DCKI, // GPIO14 my9231 DCKI + 0, 0, 0 + }, + { // AILIGHT - Ai-Thinker RGBW led (ESP8266 - my9291) + GPI8_KEY1, // GPIO00 Pad + GPI8_USER, // GPIO01 Serial RXD and Optional sensor pad + GPI8_USER, // GPIO02 Optional sensor SDA pad + GPI8_USER, // GPIO03 Serial TXD and Optional sensor pad + 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + 0, + GPI8_DI, // GPIO13 my9291 DI + 0, + GPI8_DCKI, // GPIO15 my9291 DCKI + 0, 0 + }, + { // SONOFF_T11 - Sonoff T1 1CH (ESP8285) + GPI8_KEY1, // GPIO00 Button 1 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Optional Sensor (J3 Pin 5) + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Blue Led and Relay 1 (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // SUPLA1 - Supla Espablo (ESP8266) + // http://www.wykop.pl/ramka/3325399/diy-supla-do-puszki-instalacyjnej-podtynkowej-supla-org/ + 0, // GPIO00 Flash jumper + GPI8_USER, // GPIO01 Serial RXD and Optional sensor +#ifdef USE_DS18x20 + GPI8_DSB, // GPIO02 DS18B20 sensor +#else + GPI8_USER, // GPIO02 Optional sensor +#endif + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_KEY1, // GPIO04 Button 1 + GPI8_REL1, // GPIO05 Relay 1 (0 = Off, 1 = On) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 Optional sensor + GPI8_REL2, // GPIO13 Relay 2 (0 = Off, 1 = On) + GPI8_USER, // GPIO14 Optional sensor + 0, + GPI8_LED1, // GPIO16 Led (1 = On, 0 = Off) - Link and Power status + GPI8_USER // ADC0 A0 Analog input + }, + { // WITTY - Witty Cloud Dev Board (ESP8266) + // https://www.aliexpress.com/item/ESP8266-serial-WIFI-Witty-cloud-Development-Board-ESP-12F-module-MINI-nodemcu/32643464555.html + GPI8_USER, // GPIO00 D3 flash push button on interface board + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_LED1_INV, // GPIO02 D4 Blue Led (0 = On, 1 = Off) on ESP-12F - Link and Power status + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_KEY1, // GPIO04 D2 push button on ESP-12F board + GPI8_USER, // GPIO05 D1 optional sensor + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM2, // GPIO12 D6 RGB LED Green + GPI8_PWM3, // GPIO13 D7 RGB LED Blue + GPI8_USER, // GPIO14 D5 optional sensor + GPI8_PWM1, // GPIO15 D8 RGB LED Red + GPI8_USER, // GPIO16 D0 optional sensor + GPI8_USER // ADC0 A0 Light sensor / Requires USE_ADC_VCC in user_config.h to be disabled + }, + { // YUNSHAN - Yunshan Wifi Relay (ESP8266) + // https://www.ebay.com/p/Esp8266-220v-10a-Network-Relay-WiFi-Module/1369583381 + // Schematics and Info https://ucexperiment.wordpress.com/2016/12/18/yunshan-esp8266-250v-15a-acdc-network-wifi-relay-module/ + 0, // GPIO00 Flash jumper - Module Pin 8 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor - Module Pin 2 + GPI8_LED1_INV, // GPIO02 Blue Led (0 = On, 1 = Off) on ESP-12F - Module Pin 7 - Link and Power status + GPI8_USER, // GPIO03 Serial TXD and Optional sensor - Module Pin 3 + GPI8_REL1, // GPIO04 Red Led and Relay (0 = Off, 1 = On) - Module Pin 10 + GPI8_KEY1, // GPIO05 Blue Led and OptoCoupler input - Module Pin 9 + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + 0, 0, 0, 0, 0, 0 + }, + { // MAGICHOME - Magic Home (aka Flux-light) (ESP8266) and Arilux LC10 (ESP8285) + // https://www.aliexpress.com/item/Magic-Home-Mini-RGB-RGBW-Wifi-Controller-For-Led-Strip-Panel-light-Timing-Function-16million-colors/32686853650.html + 0, + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_LED1_INV, // GPIO02 Blue onboard LED - Link and Power status + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_ARIRFRCV, // GPIO04 IR or RF receiver (optional) (Arilux LC10) + GPI8_PWM2, // GPIO05 RGB LED Green + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM3, // GPIO12 RGB LED Blue + GPI8_USER, // GPIO13 RGBW LED White (optional - set to PWM4 for Cold White or Warm White as used on Arilux LC10) + GPI8_PWM1, // GPIO14 RGB LED Red + GPI8_ARIRFSEL, // GPIO15 RF receiver control (Arilux LC10) + 0, 0 + }, + { // LUANIHVIO - ESP8266_HVIO + // https://luani.de/projekte/esp8266-hvio/ + 0, // GPIO00 Flash jumper + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Optional sensor / I2C SDA pad + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_REL1, // GPIO04 Relay 1 (0 = Off, 1 = On) + GPI8_REL2, // GPIO05 Relay 2 (0 = Off, 1 = On) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_SWT1, // GPIO12 External input 1 (0 = On, 1 = Off) + GPI8_SWT2, // GPIO13 External input 2 (0 = On, 1 = Off) + GPI8_USER, // GPIO14 Optional sensor / I2C SCL pad + GPI8_LED1, // GPIO15 Led (1 = On, 0 = Off) - Link and Power status + 0, + GPI8_USER // ADC0 A0 Analog input + }, + { // KMC_70011 - KMC 70011 + // https://www.amazon.com/KMC-Timing-Monitoring-Network-125V-240V/dp/B06XRX2GTQ + GPI8_KEY1, // GPIO00 Button + 0, 0, 0, + GPI8_HLW_CF, // GPIO04 HLW8012 CF power + GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 voltage / current + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL, // GPIO12 HLW8012 SEL (1 = Voltage) + GPI8_LED1_INV, // GPIO13 Green Led - Link and Power status + GPI8_REL1, // GPIO14 Relay + 0, 0, 0 + }, + { // ARILUX_LC01 - Arilux AL-LC01 (ESP8285) + // https://www.banggood.com/nl/ARILUX-AL-LC01-Super-Mini-LED-WIFI-Smart-RGB-Controller-For-RGB-LED-Strip-Light-DC-9-12V-p-1058603.html + // (PwmFrequency 1111Hz) + GPI8_KEY1, // GPIO00 Optional Button + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_ARIRFSEL, // GPIO02 RF receiver control + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_ARIRFRCV, // GPIO04 IR or RF receiver (optional) + GPI8_PWM1, // GPIO05 RGB LED Red + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM2, // GPIO12 RGB LED Green + GPI8_PWM3, // GPIO13 RGB LED Blue + GPI8_USER, // GPIO14 RGBW LED White (optional - set to PWM4 for Cold White or Warm White) + 0, 0, 0 + }, + { // ARILUX_LC11 - Arilux AL-LC11 (ESP8266) + // https://www.banggood.com/nl/ARILUX-AL-LC11-Super-Mini-LED-WIFI-APP-Controller-RF-Remote-Control-For-RGBWW-LED-Strip-DC9-28V-p-1085112.html + // (PwmFrequency 540Hz) + GPI8_KEY1, // GPIO00 Optional Button + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_ARIRFSEL, // GPIO02 RF receiver control + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_PWM2, // GPIO04 RGB LED Green + GPI8_PWM1, // GPIO05 RGB LED Red + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM5, // GPIO12 RGBCW LED Warm + GPI8_PWM4, // GPIO13 RGBW LED Cold + GPI8_PWM3, // GPIO14 RGB LED Blue + GPI8_ARIRFRCV, // GPIO15 RF receiver input + 0, 0 + }, + { // ARILUX_LC06 - Arilux AL-LC06 (ESP8285) + // https://www.banggood.com/ARILUX-AL-LC06-LED-WIFI-Smartphone-Controller-Romote-5-Channels-DC12-24V-For-RGBWW-Strip-light-p-1061476.html + GPI8_KEY1, // GPIO00 Optional Button + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Empty pad + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_USER, // GPIO04 W2 - PWM5 + 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM2, // GPIO12 RGB LED Green + GPI8_PWM3, // GPIO13 RGB LED Blue + GPI8_PWM1, // GPIO14 RGB LED Red + GPI8_USER, // GPIO15 RGBW LED White + 0, 0 + }, + { // ZENGGE_ZF_WF017 - Zenggee ZJ-WF017-A (ESP12S)) + // https://www.ebay.com/p/Smartphone-Android-IOS-WiFi-Music-Controller-for-RGB-5050-3528-LED-Strip-Light/534446632?_trksid=p2047675.l2644 + GPI8_KEY1, // GPIO00 Optional Button + 0, + GPI8_USER, // GPIO02 Empty pad + 0, + GPI8_USER, // GPIO04 W2 - PWM5 + 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM2, // GPIO12 RGB LED Green + GPI8_PWM1, // GPIO13 RGB LED Red + GPI8_PWM3, // GPIO14 RGB LED Blue + 0, 0, 0 + }, + { // SONOFF_POW_R2 - Sonoff Pow R2 (ESP8285 - CSE7766) + GPI8_KEY1, // GPIO00 Button + GPI8_CSE7766_TX, // GPIO01 Serial RXD 4800 baud 8E1 CSE7766 energy sensor + 0, + GPI8_CSE7766_RX, // GPIO03 Serial TXD + 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // BLITZWOLF_BWSHP - BlitzWolf BW-SHP2 and BW-SHP6 (ESP8285 - BL0937 or HJL-01 Energy Monitoring) + // https://www.banggood.com/BlitzWolf-BW-SHP2-Smart-WIFI-Socket-EU-Plug-220V-16A-Work-with-Amazon-Alexa-Google-Assistant-p-1292899.html + // https://www.amazon.de/Steckdose-Homecube-intelligente-Verbrauchsanzeige-funktioniert/dp/B076Q2LKHG/ref=sr_1_fkmr0_1 + // https://www.amazon.de/Intelligente-Stromverbrauch-Fernsteurung-Schaltbare-Energieklasse/dp/B076WZQS4S/ref=sr_1_1 + // https://www.aliexpress.com/store/product/BlitzWolf-BW-SHP6-EU-Plug-Metering-Version-WIFI-Smart-Socket-220V-240V-10A-Work-with-Amazon/1965360_32945504669.html + GPI8_LED1_INV, // GPIO00 Red Led (1 = On, 0 = Off) - Power status + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_LEDLNK_INV, // GPIO02 Blue Led (1 = On, 0 = Off) - Link status + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + 0, + GPI8_HJL_CF, // GPIO05 BL0937 or HJL-01 CF power + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) + GPI8_KEY1, // GPIO13 Button + GPI8_NRG_CF1, // GPIO14 BL0937 or HJL-01 CF1 current / voltage + GPI8_REL1, // GPIO15 Relay (0 = Off, 1 = On) + 0, 0 + }, + { // SHELLY1 - Shelly1 Open Source (ESP8266 - 2MB) - https://shelly.cloud/shelly1-open-source/ + GPI8_USER, // GPIO00 - Can be changed to GPI8_USER, only if Shelly is powered with 12V DC + GPI8_USER, // GPIO01 Serial RXD - Can be changed to GPI8_USER, only if Shelly is powered with 12V DC + 0, + GPI8_USER, // GPIO03 Serial TXD - Can be changed to GPI8_USER, only if Shelly is powered with 12V DC + GPI8_REL1, // GPIO04 Relay (0 = Off, 1 = On) + GPI8_SWT1_NP, // GPIO05 SW pin + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + 0, 0, 0, 0, 0, 0 + }, + { // SHELLY2 - Shelly2 (ESP8266 - 2MB) - https://shelly.cloud/shelly2/ + 0, + GPI8_MCP39F5_TX, // GPIO01 MCP39F501 Serial input + 0, + GPI8_MCP39F5_RX, // GPIO03 MCP39F501 Serial output + GPI8_REL1, // GPIO04 + GPI8_REL2, // GPIO05 + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_SWT1, // GPIO12 + 0, + GPI8_SWT2, // GPIO14 + GPI8_MCP39F5_RST, // GPIO15 MCP39F501 Reset + 0, + 0 + }, + { // PHILIPS - Xiaomi Philips bulb (ESP8266) + 0, 0, 0, 0, 0, 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_PWM2, // GPIO12 cold/warm light + 0, 0, + GPI8_PWM1, // GPIO15 light intensity + 0, 0 + }, + { // NEO_COOLCAM - Neo Coolcam (ESP8266) + // https://www.banggood.com/NEO-COOLCAM-WiFi-Mini-Smart-Plug-APP-Remote-Control-Timing-Smart-Socket-EU-Plug-p-1288562.html?cur_warehouse=CN + 0, 0, 0, 0, + GPI8_LED1_INV, // GPIO04 Red Led (0 = On, 1 = Off) - Link and Power status + 0, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) + GPI8_KEY1, // GPIO13 Button + 0, 0, 0, 0 + }, + { // ESP_SWITCH - Michael Haustein 4 channel wall switch (ESP07 = ESP8266) + // Use rules for further actions like - rule on power1#state do publish cmnd/other_device/power %value% endon + GPI8_KEY2, // GPIO00 Button 2 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_REL3_INV, // GPIO02 Yellow Led 3 (0 = On, 1 = Off) + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_KEY1, // GPIO04 Button 1 + GPI8_REL2_INV, // GPIO05 Red Led 2 (0 = On, 1 = Off) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL4_INV, // GPIO12 Blue Led 4 (0 = On, 1 = Off) + GPI8_KEY4, // GPIO13 Button 4 + GPI8_KEY3, // GPIO14 Button 3 + GPI8_LED1, // GPIO15 Optional sensor + GPI8_REL1_INV, // GPIO16 Green Led 1 (0 = On, 1 = Off) + 0 + }, + { // OBI - OBI socket (ESP8266) - https://www.obi.de/hausfunksteuerung/wifi-stecker-schuko/p/2291706 + GPI8_USER, // GPIO00 + GPI8_USER, // GPIO01 Serial RXD + 0, + GPI8_USER, // GPIO03 Serial TXD + GPI8_LED1, // GPIO04 Blue LED - Link and Power status + GPI8_REL1, // GPIO05 (Relay OFF, but used as Relay Switch) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_LED3, // GPIO12 (Relay ON, but set to LOW, so we can switch with GPIO05) + GPI8_USER, // GPIO13 + GPI8_KEY1, // GPIO14 Button + 0, + GPI8_USER, // GPIO16 + GPI8_USER // ADC0 A0 Analog input + }, + { // TECKIN - https://www.amazon.de/gp/product/B07D5V139R + 0, + GPI8_KEY1, // GPIO01 Serial TXD and Button + 0, + GPI8_LED1_INV, // GPIO03 Serial RXD and Red Led (0 = On, 1 = Off) - Power status + GPI8_HJL_CF, // GPIO04 BL0937 or HJL-01 CF power + GPI8_NRG_CF1, // GPIO05 BL0937 or HJL-01 CF1 current / voltage + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) + GPI8_LEDLNK_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link status + GPI8_REL1, // GPIO14 Relay (0 = Off, 1 = On) + 0, 0, 0 + }, + { // APLIC_WDP303075 - Aplic WDP 303075 (ESP8285 - HLW8012 Energy Monitoring) + // https://www.amazon.de/dp/B07CNWVNJ2 + 0, 0, 0, + GPI8_KEY1, // GPIO03 Button + GPI8_HLW_CF, // GPIO04 HLW8012 CF power + GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 current / voltage + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 HLW8012 CF Sel output (0 = Voltage) + GPI8_LED1_INV, // GPIO13 LED (0 = On, 1 = Off) - Link and Power status + GPI8_REL1, // GPIO14 Relay SRU 5VDC SDA (0 = Off, 1 = On ) + 0, 0, 0 + }, + { // TUYA_DIMMER - Tuya MCU device (ESP8266 w/ separate MCU) + // https://www.amazon.com/gp/product/B07CTNSZZ8/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1 + GPI8_USER, // Virtual Button (controlled by MCU) + GPI8_USER, // GPIO01 MCU serial control + GPI8_USER, + GPI8_USER, // GPIO03 MCU serial control + GPI8_USER, + GPI8_USER, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, + GPI8_USER, + GPI8_USER, // GPIO14 Green Led + GPI8_USER, + GPI8_USER, + 0 + }, + { // GOSUND - https://www.amazon.de/gp/product/B0777BWS1P + 0, + GPI8_LEDLNK_INV, // GPIO01 Serial RXD and LED1 (blue) inv - Link status + 0, + GPI8_KEY1, // GPIO03 Serial TXD and Button + GPI8_HJL_CF, // GPIO04 BL0937 or HJL-01 CF power + GPI8_NRG_CF1, // GPIO05 BL0937 or HJL-01 CF1 current / voltage + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) + GPI8_LED1_INV, // GPIO13 LED2 (red) inv - Power status + GPI8_REL1, // GPIO14 Relay (0 = Off, 1 = On) + 0, 0, 0 + }, + { // ARMTRONIX_DIMMERS - ARMTRONIX Dimmer, one or two channel (ESP8266 w/ separate MCU dimmer) + // https://www.tindie.com/products/Armtronix/wifi-ac-dimmer-two-triac-board/ + // https://www.tindie.com/products/Armtronix/wifi-ac-dimmer-esp8266-one-triac-board-alexaecho/ + GPI8_USER, + GPI8_TXD, // GPIO01 MCU serial control + GPI8_USER, + GPI8_RXD, // GPIO03 MCU serial control + GPI8_USER, + GPI8_USER, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, + GPI8_USER, + GPI8_USER, + GPI8_USER, + GPI8_USER, + 0 + }, + { // SK03_TUYA - Outdoor smart plug with power monitoring HLW8012 chip - https://www.amazon.com/gp/product/B07CG7MBPV + GPI8_KEY1, // GPIO00 Button + 0, 0, 0, + GPI8_HLW_CF, // GPIO04 HLW8012 CF power + GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 current / voltage + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 HLW8012 CF Sel output (0 = Voltage) + GPI8_LED1_INV, // GPIO13 Red Led (0 = On, 1 = Off) - Power status + GPI8_LEDLNK_INV, // GPIO14 Blue Led (0 = On, 1 = Off) - Link status + GPI8_REL1, // GPIO15 Relay (0 = Off, 1 = On) + 0, 0 + }, + { // PS_16_DZ - PS-16-DZ Dimmer (ESP8266 w/ separate Nuvoton MCU dimmer) + // https://www.aliexpress.com/item/SM-Smart-WIFI-Wall-Dimmer-Light-Switch-US-Ewelink-APP-Remote-Control-Wi-Fi-Wirele-Work/32871151902.html + GPI8_USER, + GPI8_TXD, // GPIO01 MCU serial control + GPI8_USER, + GPI8_RXD, // GPIO03 MCU serial control + GPI8_USER, + GPI8_USER, + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, + GPI8_LED1, // GPIO13 WiFi LED - Link and Power status + GPI8_USER, + GPI8_USER, + GPI8_USER, + 0 + }, + { // TECKIN_US - Teckin SP20 US with Energy Monitoring + // https://www.amazon.com/Outlet-Compatible-Monitoring-Function-Required/dp/B079Q5W22B + // https://www.amazon.com/Outlet-ZOOZEE-Monitoring-Function-Compatible/dp/B07J2LR5KN + GPI8_LED1_INV, // GPIO00 Red Led (1 = On, 0 = Off) - Power status + 0, + GPI8_LEDLNK_INV, // GPIO02 Blue Led (1 = On, 0 = Off) - Link status + 0, + GPI8_REL1, // GPIO04 Relay (0 = Off, 1 = On) + GPI8_HJL_CF, // GPIO05 BL0937 or HJL-01 CF power + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) + GPI8_KEY1, // GPIO13 Button + GPI8_NRG_CF1, // GPIO14 BL0937 or HJL-01 CF1 current / voltage + 0, 0, 0 + }, + { // MANZOKU_EU_4 - "MANZOKU" labeled power strip, EU version + // https://www.amazon.de/Steckdosenleiste-AOFO-Mehrfachsteckdose-Überspannungsschutz-Sprachsteuerung/dp/B07GBSD11P/ + // https://www.amazon.de/Steckdosenleiste-Geekbes-USB-Anschluss-Kompatibel-gesteuert/dp/B078W23BW9/ + 0, // GPIO00 + 0, // GPIO01 Serial RXD + 0, + GPI8_KEY1, // GPIO03 Serial TXD + Button + GPI8_REL2, // GPIO04 Relay 2 + GPI8_REL1, // GPIO05 Relay 1 + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL3, // GPIO12 Relay 3 + GPI8_REL4, // GPIO13 Relay 4 + GPI8_USER, // GPIO14 + 0, + GPI8_USER, // GPIO16 + 0 + }, + { // OBI2 - OBI socket (ESP8266) - https://www.obi.de/hausfunksteuerung/wifi-stecker-schuko-2-stueck-weiss/p/4077673 + 0, // GPIO00 + 0, // GPIO01 Serial RXD + 0, + 0, // GPIO03 Serial TXD + GPI8_REL1, // GPIO04 Relay 1 + GPI8_KEY1, // GPIO05 Button + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_LEDLNK_INV, // GPIO12 Green LED - Link status + GPI8_LED1, // GPIO13 Red LED - Power status + 0, 0, 0, 0 + }, + { // YTF_IR_BRIDGE - https://www.aliexpress.com/item/Tuya-universal-Smart-IR-Hub-remote-control-Voice-Control-AC-TV-Work-With-Alexa-Google-Home/32951202513.html + GPI8_USER, // GPIO00 + GPI8_USER, // GPIO01 Serial RXD + GPI8_USER, // GPIO02 + GPI8_USER, // GPIO03 Serial TXD + GPI8_LED1_INV, // GPIO04 Blue Led - Link status + GPI8_IRRECV, // GPIO05 IR Receiver + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + 0, // GPIO12 + GPI8_KEY1, // GPIO13 Button + GPI8_IRSEND, // GPIO14 IR Transmitter + 0, 0, 0 + }, + { // DIGOO - Digoo DG-SP202 + // https://www.banggood.com/DIGOO-DG-SP202-Dual-EU-Plug-Smart-WIFI-Socket-Individual-Controllable-Energy-Monitor-Remote-Control-Timing-Smart-Home-Outlet-let-p-1375323.html + GPI8_KEY1, // GPIO00 Button1 + 0, // GPIO01 Serial RXD + 0, // GPIO02 + 0, // GPIO03 Serial TXD + GPI8_HJL_CF, // GPIO04 BL0937 or HJL-01 CF power + GPI8_NRG_CF1, // GPIO05 BL0937 or HJL-01 CF1 current / voltage + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) + GPI8_LED1, // GPIO13 Blue Leds - Link Status + GPI8_REL2, // GPIO14 Relay2 (0 = Off, 1 = On) and Red Led + GPI8_REL1, // GPIO15 Relay1 (0 = Off, 1 = On) and Red Led + GPI8_KEY2_NP, // GPIO16 Button2, externally pulled up + 0 + }, + { // KA10 - SMANERGY KA10 (ESP8285 - BL0937 Energy Monitoring) - https://www.amazon.es/dp/B07MBTCH2Y + 0, // GPIO00 + GPI8_LEDLNK_INV, // GPIO01 Blue LED - Link status + 0, // GPIO02 + GPI8_KEY1, // GPIO03 Button + GPI8_HJL_CF, // GPIO04 BL0937 CF power + GPI8_NRG_CF1, // GPIO05 BL0937 CF1 voltage / current + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 Sel output (1 = Voltage) + GPI8_LED1, // GPIO13 Red LED - Power status + GPI8_REL1, // GPIO14 Relay 1 + 0, 0, 0 + }, + { // ZX2820 + GPI8_KEY1, // GPIO00 Button + 0, 0, 0, + GPI8_HLW_CF, // GPIO04 HLW8012 CF power + GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 voltage / current + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 HLW8012 SEL (0 = Voltage) + GPI8_LED1_INV, // GPIO13 Green Led - Link and Power status + GPI8_REL1, // GPIO14 Relay + 0, 0, 0 + }, + { // MI_DESK_LAMP - Mi LED Desk Lamp - https://www.mi.com/global/smartlamp/ + 0, 0, + GPI8_KEY1, // GPIO02 Button + 0, + GPI8_PWM1, // GPIO04 Cold White + GPI8_PWM2, // GPIO05 Warm White + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_ROT1A, // GPIO12 Rotary switch A pin + GPI8_ROT1B, // GPIO13 Rotary switch B pin + 0, 0, 0, 0 + }, + { // SP10 - Tuya SP10 (BL0937 Energy Monitoring) + // https://www.aliexpress.com/item/Smart-Mini-WiFi-Plug-Outlet-Switch-Work-With-ForEcho-Alexa-Google-Home-Remote-EU-Smart-Socket/32963670423.html + 0, // GPIO00 + GPI8_PWM1, // GPIO01 Nightlight + 0, // GPIO02 + GPI8_KEY1, // GPIO03 Button + GPI8_HJL_CF, // GPIO04 BL0937 CF power + GPI8_NRG_CF1, // GPIO05 BL0937 CF1 voltage / current + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_NRG_SEL_INV, // GPIO12 BL0937 Sel output (1 = Voltage) + GPI8_LED1, // GPIO13 Blue LED - Link status + GPI8_REL1, // GPIO14 Relay and red LED + 0, 0, 0 + }, + { // WAGA - WAGA life CHCZ02MB (HJL-01 Energy Monitoring) + // https://www.ebay.com/itm/332595697006 + GPI8_LED1_INV, // GPIO00 Red LED + 0, // GPIO01 Serial RXD + 0, // GPIO02 + GPI8_NRG_SEL_INV, // GPIO03 HJL-01 Sel output (1 = Voltage) + 0, // GPIO04 + GPI8_HJL_CF, // GPIO05 HJL-01 CF power + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Relay + GPI8_KEY1, // GPIO13 Button + GPI8_NRG_CF1, // GPIO14 HJL-01 CF1 voltage / current + GPI8_LEDLNK_INV, // GPIO15 Blue LED - Link status + 0, 0 + }, + { // SYF05 - Sunyesmart SYF05 (a.k.a. Fcmila) = TYWE3S + SM16726 + // Also works with Merkury 904 RGBW Bulbs with 13 set to GPI8_SM16716_SEL + // https://www.flipkart.com/fc-mila-bxav-xs-ad-smart-bulb/p/itmf85zgs45fzr7n + // https://docs.tuya.com/en/hardware/WiFi-module/wifi-e3s-module.html + // http://www.datasheet-pdf.com/PDF/SM16716-Datasheet-Sunmoon-932771 + GPI8_USER, // GPIO00 N.C. + 0, // GPIO01 Serial RXD + GPI8_USER, // GPIO02 N.C. + 0, // GPIO03 Serial TXD + GPI8_SM16716_CLK, // GPIO04 SM16716 Clock + GPI8_PWM1, // GPIO05 White + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 Alt. White on some devices + GPI8_USER, // GPIO13 SM16716 Enable on some devices + GPI8_SM16716_DAT, // GPIO14 SM16716 Data + 0, // GPIO15 wired to GND + GPI8_USER, // GPIO16 N.C. + GPI8_USER // ADC0 A0 Analog input + }, + { // EXS_DIMMER - EX-Store WiFi Dimmer v4, two channel (ESP8266 w/ separate MCU dimmer) + // https://ex-store.de/2-Kanal-RS232-WiFi-WLan-Dimmer-Modul-V4-fuer-Unterputzmontage-230V-3A + // https://ex-store.de/2-Kanal-RS232-WiFi-WLan-Dimmer-Modul-V4-fuer-Unterputzmontage-230V-3A-ESP8266-V12-Stift-und-Buchsenleisten + 0, + GPI8_TXD, // GPIO01 MCU serial control + GPI8_LEDLNK, // GPIO02 LED Link + GPI8_RXD, // GPIO03 MCU serial control + GPI8_USER, // GPIO04 + GPI8_USER, // GPIO05 + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 + GPI8_EXS_ENABLE, // GPIO13 EXS MCU Enable + GPI8_USER, // GPIO14 + 0, // GPIO15 + 0, 0 + }, + { // PWM_DIMMER - Support for Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM + // dimmer switches. The brightness of the load for these dimmers is + // controlled by a PWM GPIO pin. There are typically power, up & down + // buttons and 4 LED's. Examples are: + // https://www.amazon.com/dp/B07FXYSVR1 + // https://www.amazon.com/dp/B07V26Q3VD + // https://www.amazon.com/dp/B07K67D43J + // https://www.amazon.com/dp/B07TTGFWFM + GPI8_KEY3, // GPIO00 Up button + GPI8_KEY2, // GPIO01 Down button + 0, // GPIO02 + GPI8_LED4_INV, // GPIO03 Level 5 LED + GPI8_LEDLNK_INV, // GPIO04 LED Link + GPI8_LED3_INV, // GPIO05 Level 4 LED + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_LED2_INV, // GPIO12 Level 3 LED + GPI8_PWM1, // GPIO13 Dimmer PWM + GPI8_LED1_INV, // GPIO12 Level 2 LED + GPI8_KEY1_INV, // GPIO15 Power button + GPI8_REL1_INV, // GPIO16 Power relay/Level 1 LED + 0 + }, + { // SONOFF_ZB_BRIDGE - Sonoff Zigbee Bridge (ESP8266) + GPI8_LED1_INV, // GPIO00 Green Led (0 = On, 1 = Off) - Traffic between ESP and EFR + GPI8_ZIGBEE_TX, // GPIO01 Zigbee Serial control + 0, // GPIO02 + GPI8_ZIGBEE_RX, // GPIO03 Zigbee Serial control + GPI8_ZIGBEE_RST, // GPIO04 Zigbee Reset + 0, // GPIO05 EFR32 Bootloader mode (drive Low for Gecko Bootloader, inactive or high for Zigbee EmberZNet) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_I2C_SDA, // GPIO12 I2C SDA - connected to 512KB EEPROM + GPI8_LEDLNK_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link status + GPI8_I2C_SCL, // GPIO14 I2C SCL - connected to 512KB EEPROM + 0, // GPIO15 connected to IO15 pad, also used for logging + GPI8_KEY1, // GPIO16 Button + 0 + } +}; + +/*********************************************************************************************\ + * Templates with 14 usable pins (ESP8285) +\*********************************************************************************************/ + +const mytmplt8285 kModules8285[TMP_MAXMODULE_8266 - TMP_WEMOS] PROGMEM = { + { // WEMOS - Any ESP8266/ESP8285 device like WeMos and NodeMCU hardware (ESP8266) + GPI8_USER, // GPIO00 D3 Wemos Button Shield + GPI8_USER, // GPIO01 TX Serial RXD + GPI8_USER, // GPIO02 D4 Wemos DHT Shield + GPI8_USER, // GPIO03 RX Serial TXD and Optional sensor + GPI8_USER, // GPIO04 D2 Wemos I2C SDA + GPI8_USER, // GPIO05 D1 Wemos I2C SCL / Wemos Relay Shield (0 = Off, 1 = On) / Wemos WS2812B RGB led Shield + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + GPI8_USER, // GPIO09 (SD_DATA2 Flash QIO or ESP8285) + GPI8_USER, // GPIO10 (SD_DATA3 Flash QIO or ESP8285) + // GPIO11 (SD_CMD Flash) + GPI8_USER, // GPIO12 D6 + GPI8_USER, // GPIO13 D7 + GPI8_USER, // GPIO14 D5 + GPI8_USER, // GPIO15 D8 + GPI8_USER, // GPIO16 D0 Wemos Wake + GPI8_USER // ADC0 A0 Analog input + }, + { // SONOFF_4CH - Sonoff 4CH (ESP8285) + GPI8_KEY1, // GPIO00 Button 1 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Optional sensor + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_REL3, // GPIO04 Sonoff 4CH Red Led and Relay 3 (0 = Off, 1 = On) + GPI8_REL2, // GPIO05 Sonoff 4CH Red Led and Relay 2 (0 = Off, 1 = On) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + GPI8_KEY2, // GPIO09 Button 2 + GPI8_KEY3, // GPIO10 Button 3 + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Red Led and Relay 1 (0 = Off, 1 = On) - Link and Power status + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) + GPI8_KEY4, // GPIO14 Button 4 + GPI8_REL4, // GPIO15 Red Led and Relay 4 (0 = Off, 1 = On) + 0, 0 + }, + { // SONOFF_T12 - Sonoff T1 2CH (ESP8285) + GPI8_KEY1, // GPIO00 Button 1 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Optional Sensor (J3 Pin 5) + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + 0, + GPI8_REL2, // GPIO05 Blue Led and Relay 2 (0 = Off, 1 = On) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + GPI8_KEY2, // GPIO09 Button 2 + 0, // GPIO10 + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Blue Led and Relay 1 (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // SONOFF_T13 - Sonoff T1 3CH (ESP8285) + GPI8_KEY1, // GPIO00 Button 1 + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + GPI8_USER, // GPIO02 Optional Sensor (J3 Pin 5) + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + GPI8_REL3, // GPIO04 Blue Led and Relay 3 (0 = Off, 1 = On) + GPI8_REL2, // GPIO05 Blue Led and Relay 2 (0 = Off, 1 = On) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + GPI8_KEY2, // GPIO09 Button 2 + GPI8_KEY3, // GPIO10 Button 3 + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Blue Led and Relay 1 (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // SONOFF_DUAL_R2 - Sonoff Dual R2 (ESP8285) + GPI8_USER, // GPIO00 Button 0 on header (0 = On, 1 = Off) + GPI8_USER, // GPIO01 Serial RXD and Optional sensor + 0, + GPI8_USER, // GPIO03 Serial TXD and Optional sensor + 0, + GPI8_REL2, // GPIO05 Relay 2 (0 = Off, 1 = On) + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + GPI8_USER, // GPIO09 Button 1 on header (0 = On, 1 = Off) + GPI8_KEY1, // GPIO10 Button on casing + // GPIO11 (SD_CMD Flash) + GPI8_REL1, // GPIO12 Relay 1 (0 = Off, 1 = On) + GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status + 0, 0, 0, 0 + }, + { // SONOFF_IFAN03 - Sonoff iFan03 (ESP8285) + GPI8_KEY1, // GPIO00 WIFI_KEY0 Button 1 + GPI8_TXD, // GPIO01 ESP_TXD Serial RXD connection to P0.5 of RF microcontroller + 0, // GPIO02 ESP_LOG + GPI8_RXD, // GPIO03 ESP_RXD Serial TXD connection to P0.4 of RF microcontroller + 0, // GPIO04 DEBUG_RX + 0, // GPIO05 DEBUG_TX + // GPIO06 (SD_CLK Flash) + // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) + // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) + GPI8_REL1_INV, // GPIO09 WIFI_O0 Relay 1 (0 = Off, 1 = On) controlling the light + GPI8_BUZZER_INV, // GPIO10 WIFI_O4 Buzzer (0 = Off, 1 = On) + // GPIO11 (SD_CMD Flash) + GPI8_REL3, // GPIO12 WIFI_O2 Relay 3 (0 = Off, 1 = On) controlling the fan + GPI8_LED1_INV, // GPIO13 WIFI_CHK Blue Led on PCA (0 = On, 1 = Off) - Link and Power status + GPI8_REL2, // GPIO14 WIFI_O1 Relay 2 (0 = Off, 1 = On) controlling the fan + GPI8_REL4, // GPIO15 WIFI_O3 Relay 4 (0 = Off, 1 = On) controlling the fan + 0, 0 + } +}; + +#endif // ESP8266 + +#ifdef ESP32 +/********************************************************************************************\ + * ESP32 Module templates +\********************************************************************************************/ + +#define USER_MODULE 255 + +// Supported hardware modules +enum SupportedModules { + WEMOS, + BLUETOOTH, + ESP32_CAM_AITHINKER, + ODROID_GO, + ESP32_SOLO, + WT32_ETH01, + TTGO_WATCH, + M5STACK_CORE2, + MAXMODULE }; + +const char kModuleNames[] PROGMEM = + "ESP32-DevKit|" +#ifdef USE_BLUETOOTH + "ESP32-BLE|" +#endif // USE_BLUETOOTH +#ifdef USE_WEBCAM + "ESP32-Cam|" +#endif // USE_WEBCAM +#ifdef USE_ODROID_GO + "Odroid Go|" +#endif // USE_ODROID_GO +// "ESP32-Solo|" +// "WT32-Eth01|" +// "TTGO Watch|" +#ifdef USE_M5STACK_CORE2 + "M5Stack Core2|" +#endif // USE_M5STACK_CORE2 + ; + +// Default module settings +const uint8_t kModuleNiceList[] PROGMEM = { + WEMOS, +#ifdef USE_BLUETOOTH + ESP32_BLUETOOTH, +#endif // USE_BLUETOOTH +#ifdef USE_WEBCAM + ESP32_CAM_AITHINKER, +#endif // USE_WEBCAM +#ifdef USE_ODROID_GO + ODROID_GO, +#endif // USE_ODROID_GO +// ESP32_SOLO, +// WT32_ETH01, +// TTGO_WATCH, +#ifdef USE_M5STACK_CORE2 + M5STACK_CORE2, +#endif // USE_M5STACK_CORE2 +}; + +const mytmplt kModules[] PROGMEM = +{ + { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) + AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK + AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 + AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 + AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 + AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER + AGPIO(GPIO_USER), // 5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK + // 6 IO GPIO6, Flash CLK + // 7 IO GPIO7, Flash D0 + // 8 IO GPIO8, Flash D1 + AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD + AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD + // 11 IO GPIO11, Flash CMD + AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) + AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER + AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 + AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) + AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT + AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 + AGPIO(GPIO_USER), // 18 IO GPIO18, VSPICLK, HS1_DATA7 + AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 + 0, // 20 + AGPIO(GPIO_USER), // 21 IO GPIO21, VSPIHD, EMAC_TX_EN + AGPIO(GPIO_USER), // 22 IO LED GPIO22, VSPIWP, U0RTS, EMAC_TXD1 + AGPIO(GPIO_USER), // 23 IO GPIO23, VSPID, HS1_STROBE + 0, // 24 + AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 + AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 + AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 + AGPIO(GPIO_USER), // 32 IO GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 + AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 + AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 + AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 + AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 + 0, // 37 NO PULLUP + 0, // 38 NO PULLUP + AGPIO(GPIO_USER), // 39 I NO PULLUP GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3 + 0 // Flag + }, + +#ifdef USE_BLUETOOTH + { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) + AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK + AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 + AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 + AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 + AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER + AGPIO(GPIO_USER), // 5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK + // 6 IO GPIO6, Flash CLK + // 7 IO GPIO7, Flash D0 + // 8 IO GPIO8, Flash D1 + AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD + AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD + // 11 IO GPIO11, Flash CMD + AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) + AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER + AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 + AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) + AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT + AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 + AGPIO(GPIO_USER), // 18 IO GPIO18, VSPICLK, HS1_DATA7 + AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 + 0, // 20 + AGPIO(GPIO_USER), // 21 IO GPIO21, VSPIHD, EMAC_TX_EN + AGPIO(GPIO_USER), // 22 IO LED GPIO22, VSPIWP, U0RTS, EMAC_TXD1 + AGPIO(GPIO_USER), // 23 IO GPIO23, VSPID, HS1_STROBE + 0, // 24 + AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 + AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 + AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 + AGPIO(GPIO_USER), // 32 IO GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 + AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 + AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 + AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 + AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 + 0, // 37 NO PULLUP + 0, // 38 NO PULLUP + AGPIO(GPIO_USER), // 39 I NO PULLUP GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3 + 0 // Flag + }, +#endif // USE_BLUETOOTH + +#ifdef USE_WEBCAM + { // ESP32_CAM_AITHINKER - Any ESP32 device with webcam (ESP32) + AGPIO(GPIO_WEBCAM_XCLK), // 0 (I)O GPIO0, CAM_XCLK + AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 + AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 + AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 + AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER + AGPIO(GPIO_WEBCAM_DATA), // 5 IO GPIO5, CAM_DATA1 + // 6 IO GPIO6, Flash CLK + // 7 IO GPIO7, Flash D0 + // 8 IO GPIO8, Flash D1 + AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD + AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD + // 11 IO GPIO11, Flash CMD + AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) + AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER + AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 + AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) + AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT + AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 + AGPIO(GPIO_WEBCAM_DATA) +1, // 18 IO GPIO18, CAM_DATA2 + AGPIO(GPIO_WEBCAM_DATA) +2, // 19 IO GPIO19, CAM_DATA3 + 0, // 20 + AGPIO(GPIO_WEBCAM_DATA) +3, // 21 IO GPIO21, CAM_DATA4 + AGPIO(GPIO_WEBCAM_PCLK), // 22 IO LED GPIO22, CAM_PCLK + AGPIO(GPIO_WEBCAM_HREF), // 23 IO GPIO23, CAM_HREF + 0, // 24 + AGPIO(GPIO_WEBCAM_VSYNC), // 25 IO GPIO25, CAM_VSYNC + AGPIO(GPIO_WEBCAM_SIOD), // 26 IO GPIO26, CAM_SIOD + AGPIO(GPIO_WEBCAM_SIOC), // 27 IO GPIO27, CAM_SIOC + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 + AGPIO(GPIO_WEBCAM_PWDN), // 32 IO GPIO32, CAM_PWDN + AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 + AGPIO(GPIO_WEBCAM_DATA) +6, // 34 I NO PULLUP GPIO34, CAM_DATA7 + AGPIO(GPIO_WEBCAM_DATA) +7, // 35 I NO PULLUP GPIO35, CAM_DATA8 + AGPIO(GPIO_WEBCAM_DATA) +4, // 36 I NO PULLUP GPIO36, CAM_DATA5 + 0, // 37 NO PULLUP + 0, // 38 NO PULLUP + AGPIO(GPIO_WEBCAM_DATA) +5, // 39 I NO PULLUP GPIO39, CAM_DATA6 + 0 // Flag + }, +#endif // USE_WEBCAM +#ifdef USE_ODROID_GO + { // ODROID_GO - (ESP32) + AGPIO(GPIO_KEY1), // 0 (I)O GPIO0, BTN-VOLUME + AGPIO(GPIO_TXD), // 1 IO TXD0 GPIO1, TXD0 + AGPIO(GPIO_LEDLNK), // 2 IO GPIO2, STATUS LED + AGPIO(GPIO_RXD), // 3 IO RXD0 GPIO3, RXD0 + AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER + AGPIO(GPIO_ILI9341_CS), // 5 IO GPIO5, VSPI_CS0_LCD + // 6 IO GPIO6, Flash CLK + // 7 IO GPIO7, Flash D0 + // 8 IO GPIO8, Flash D1 + 0, // 9 IO GPIO9, Flash D2, U1RXD + 0, // 10 IO GPIO10, Flash D3, U1TXD + // 11 IO GPIO11, Flash CMD + AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) + AGPIO(GPIO_KEY1) +1, // 13 IO GPIO13, BTN-MENU + AGPIO(GPIO_PWM1), // 14 IO GPIO14, LCD Backlight + AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) + AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT + AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 + AGPIO(GPIO_SPI_CLK), // 18 IO GPIO18, VSPI_CLK + AGPIO(GPIO_SPI_MISO), // 19 IO GPIO19, VSPI_MISO + 0, // 20 + AGPIO(GPIO_ILI9341_DC), // 21 IO GPIO21, SPI_DC_LCD + 0, // 22 IO LED GPIO22, VSPI_CS1_TFLASH + AGPIO(GPIO_SPI_MOSI), // 23 IO GPIO23, VSPI_MOSI + 0, // 24 + 0, // 25 IO GPIO25, DAC_1 (PAM8304A) + 0, // 26 IO GPIO26, DAC_2 (PAM8304A) + AGPIO(GPIO_KEY1) +2, // 27 IO GPIO27, BTN-SELECT + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 + AGPIO(GPIO_SWT1) +4, // 32 IO GPIO32, BTN-A + AGPIO(GPIO_SWT1) +5, // 33 IO GPIO33, BTN-B + AGPIO(GPIO_ADC_JOY), // 34 I NO PULLUP GPIO34, JOY-X (LEFT-RIGHT) + AGPIO(GPIO_ADC_JOY) +1, // 35 I NO PULLUP GPIO35, JOY-Y (UP-DOWN) + AGPIO(GPIO_ADC_RANGE) +2, // 36 I NO PULLUP GPIO36, SENSOR_VP (BATTERY CARGER) + 0, // 37 NO PULLUP + 0, // 38 NO PULLUP + AGPIO(GPIO_KEY1) +3, // 39 I NO PULLUP GPIO39, BTN-START + 0 // Flag + }, +#endif // USE_ODROID_GO +#ifdef USE_M5STACK_CORE2 + { // M5STACK CORE2 - (ESP32) + AGPIO(GPIO_USER), // 0 (I)O GPIO0, SPKR_LRCK + AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD + AGPIO(GPIO_USER), // 2 IO GPIO2, SPKR_DATA + AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD + 0, // 4 IO GPIO4, SPI_CS_CARD + 0, // 5 IO GPIO5, SPI_CS_LCD + // 6 IO GPIO6, Flash CLK + // 7 IO GPIO7, Flash D0 + // 8 IO GPIO8, Flash D1 + 0, // 9 IO GPIO9, Flash D2, PSRAM_D3 + 0, // 10 IO GPIO10, Flash D3, PSRAM_D2 + // 11 IO GPIO11, Flash CMD + 0, // 12 (I)O GPIO12, SPKR_CLK + AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER + AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 + 0, // 15 (I)O GPIO15, SPI_DC_LCD + 0, // 16 IO GPIO16, PSRAM_CS + 0, // 17 IO GPIO17, PSRAM_CLK + AGPIO(GPIO_SPI_CLK), // 18 IO GPIO18, SPI_CLK + AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 + 0, // 20 + 0, // 21 IO GPIO21, I2C_SDA_INTERNAL + 0, // 22 IO LED GPIO22, I2C_SCL_INTERNAL + AGPIO(GPIO_SPI_MOSI), // 23 IO GPIO23, SPI_MOSI + 0, // 24 + AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 + AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 + AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV + 0, // 28 + 0, // 29 + 0, // 30 + 0, // 31 + AGPIO(GPIO_I2C_SDA), // 32 IO GPIO32, I2C_SDA + AGPIO(GPIO_I2C_SCL), // 33 IO GPIO33, I2C_SCL + AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 + AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 + AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 + 0, // 37 NO PULLUP + AGPIO(GPIO_SPI_MISO), // 38 NO PULLUP GPIO38, SPI_MISO + 0, // 39 I NO PULLUP GPIO39, INT_TOUCHPAD + 0 // Flag + } +#endif // USE_M5STACK_CORE2 +}; + +/*********************************************************************************************\ + Known templates + +{"NAME":"AITHINKER CAM","GPIO":[4992,1,1,1,1,5088,1,1,1,1,1,1,1,1,5089,5090,0,5091,5184,5152,0,5120,5024,5056,0,0,0,0,4928,1,5094,5095,5092,0,0,5093],"FLAG":0,"BASE":1} +{"NAME":"Olimex ESP32-PoE","GPIO":[1,1,1,1,1,1,0,0,5536,1,1,1,1,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} +{"NAME":"wESP32","GPIO":[1,1,1,1,1,1,0,0,0,1,1,1,5568,5600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} +{"NAME":"Denky (Teleinfo)","GPIO":[1,1,1,1,5664,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1376,1,1,0,0,0,0,1,5632,1,1,1,0,0,1],"FLAG":0,"BASE":1} + +\*********************************************************************************************/ + +#endif // ESP32 + +#endif // _TASMOTA_TEMPLATE_H_ From 1634754cc01713648661feaff5cfded865b950bd Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:49:00 +0100 Subject: [PATCH 11/41] Delete tasmota_template.h --- tasmota_template.h | 2598 -------------------------------------------- 1 file changed, 2598 deletions(-) delete mode 100644 tasmota_template.h diff --git a/tasmota_template.h b/tasmota_template.h deleted file mode 100644 index c181c63aa..000000000 --- a/tasmota_template.h +++ /dev/null @@ -1,2598 +0,0 @@ -/* - tasmota_template.h - template settings for Tasmota - - Copyright (C) 2020 Theo Arends - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#ifndef _TASMOTA_TEMPLATE_H_ -#define _TASMOTA_TEMPLATE_H_ - -// User selectable GPIO functionality -// ATTENTION: Only add at the end of this list just before GPIO_SENSOR_END -// Then add the same name(s) in a nice location in array kGpioNiceList -enum UserSelectablePins { - GPIO_NONE, // Not used - GPIO_KEY1, GPIO_KEY1_NP, GPIO_KEY1_INV, GPIO_KEY1_INV_NP, // 4 x Button - GPIO_SWT1, GPIO_SWT1_NP, // 8 x User connected external switches - GPIO_REL1, GPIO_REL1_INV, // 8 x Relays - GPIO_LED1, GPIO_LED1_INV, // 4 x Leds - GPIO_CNTR1, GPIO_CNTR1_NP, // 4 x Counter - GPIO_PWM1, GPIO_PWM1_INV, // 5 x PWM - GPIO_BUZZER, GPIO_BUZZER_INV, // Buzzer - GPIO_LEDLNK, GPIO_LEDLNK_INV, // Link led - GPIO_I2C_SCL, GPIO_I2C_SDA, // Software I2C - GPIO_SPI_MISO, GPIO_SPI_MOSI, GPIO_SPI_CLK, GPIO_SPI_CS, GPIO_SPI_DC, // Hardware SPI - GPIO_SSPI_MISO, GPIO_SSPI_MOSI, GPIO_SSPI_SCLK, GPIO_SSPI_CS, GPIO_SSPI_DC, // Software SPI - GPIO_BACKLIGHT, // Display backlight control - GPIO_OLED_RESET, // OLED Display Reset - GPIO_IRSEND, GPIO_IRRECV, // IR interface - GPIO_RFSEND, GPIO_RFRECV, // RF interface - GPIO_DHT11, GPIO_DHT22, GPIO_SI7021, GPIO_DHT11_OUT, // DHT11, DHT21, DHT22, AM2301, AM2302, AM2321 - GPIO_DSB, GPIO_DSB_OUT, // DS18B20 or DS18S20 - GPIO_WS2812, // WS2812 Led string - GPIO_MHZ_TXD, GPIO_MHZ_RXD, // MH-Z19 Serial interface - GPIO_PZEM0XX_TX, GPIO_PZEM004_RX, GPIO_PZEM016_RX, GPIO_PZEM017_RX, // PZEM Serial Modbus interface - GPIO_SAIR_TX, GPIO_SAIR_RX, // SenseAir Serial interface - GPIO_PMS5003_TX, GPIO_PMS5003_RX, // Plantower PMS5003 Serial interface - GPIO_SDS0X1_TX, GPIO_SDS0X1_RX, // Nova Fitness SDS011 Serial interface - GPIO_SBR_TX, GPIO_SBR_RX, // Serial Bridge Serial interface - GPIO_SR04_TRIG, GPIO_SR04_ECHO, // SR04 interface - GPIO_SDM120_TX, GPIO_SDM120_RX, // SDM120 Serial interface - GPIO_SDM630_TX, GPIO_SDM630_RX, // SDM630 Serial interface - GPIO_TM16CLK, GPIO_TM16DIO, GPIO_TM16STB, // TM1638 interface - GPIO_MP3_DFR562, // RB-DFR-562, DFPlayer Mini MP3 Player - GPIO_HX711_SCK, GPIO_HX711_DAT, // HX711 Load Cell interface - GPIO_TX2X_TXD_BLACK, // TX20/TX23 Transmission Pin - GPIO_TUYA_TX, GPIO_TUYA_RX, // Tuya Serial interface - GPIO_MGC3130_XFER, GPIO_MGC3130_RESET, // MGC3130 interface - GPIO_RF_SENSOR, // Rf receiver with sensor decoding - GPIO_AZ_TXD, GPIO_AZ_RXD, // AZ-Instrument 7798 Serial interface - GPIO_MAX31855CS, GPIO_MAX31855CLK, GPIO_MAX31855DO, // MAX31855 Serial interface - GPIO_NRG_SEL, GPIO_NRG_SEL_INV, GPIO_NRG_CF1, GPIO_HLW_CF, GPIO_HJL_CF, // HLW8012/HJL-01/BL0937 energy monitoring - GPIO_MCP39F5_TX, GPIO_MCP39F5_RX, GPIO_MCP39F5_RST, // MCP39F501 Energy monitoring (Shelly2) - GPIO_PN532_TXD, GPIO_PN532_RXD, // PN532 NFC Serial interface - GPIO_SM16716_CLK, GPIO_SM16716_DAT, GPIO_SM16716_SEL, // SM16716 SELECT - GPIO_DI, GPIO_DCKI, // my92x1 PWM controller - GPIO_CSE7766_TX, GPIO_CSE7766_RX, // CSE7766 Serial interface (S31 and Pow R2) - GPIO_ARIRFRCV, GPIO_ARIRFSEL, // Arilux RF Receive input - GPIO_TXD, GPIO_RXD, // Serial interface - GPIO_ROT1A, GPIO_ROT1B, // Rotary switch - GPIO_ADC_JOY, // Analog joystick - GPIO_SSPI_MAX31865_CS1, // MAX31865 Chip Select - GPIO_HRE_CLOCK, GPIO_HRE_DATA, // HR-E Water Meter - GPIO_ADE7953_IRQ, // ADE7953 IRQ - GPIO_SOLAXX1_TX, GPIO_SOLAXX1_RX, // Solax Inverter Serial interface - GPIO_ZIGBEE_TX, GPIO_ZIGBEE_RX, // Zigbee Serial interface - GPIO_RDM6300_RX, // RDM6300 RX - GPIO_IBEACON_TX, GPIO_IBEACON_RX, // HM17 IBEACON Serial interface - GPIO_A4988_DIR, GPIO_A4988_STP, GPIO_A4988_ENA, GPIO_A4988_MS1, // A4988 interface - GPIO_OUTPUT_HI, GPIO_OUTPUT_LO, // Fixed output state - GPIO_DDS2382_TX, GPIO_DDS2382_RX, // DDS2382 Serial interface - GPIO_DDSU666_TX, GPIO_DDSU666_RX, // DDSU666 Serial interface - GPIO_SM2135_CLK, GPIO_SM2135_DAT, // SM2135 PWM controller - GPIO_DEEPSLEEP, // Kill switch for deepsleep - GPIO_EXS_ENABLE, // EXS MCU Enable - GPIO_TASMOTACLIENT_TXD, GPIO_TASMOTACLIENT_RXD, // Client Serial interface - GPIO_TASMOTACLIENT_RST, GPIO_TASMOTACLIENT_RST_INV, // Client Reset - GPIO_HPMA_RX, GPIO_HPMA_TX, // Honeywell HPMA115S0 Serial interface - GPIO_GPS_RX, GPIO_GPS_TX, // GPS Serial interface - GPIO_HM10_RX, GPIO_HM10_TX, // HM10-BLE-Mijia-bridge Serial interface - GPIO_LE01MR_RX, GPIO_LE01MR_TX, // F&F LE-01MR energy meter - GPIO_CC1101_GDO0, GPIO_CC1101_GDO2, // CC1101 Serial interface - GPIO_HRXL_RX, // Data from MaxBotix HRXL sonar range sensor - GPIO_ELECTRIQ_MOODL_TX, // ElectriQ iQ-wifiMOODL Serial TX - GPIO_AS3935, // Franklin Lightning Sensor - GPIO_ADC_INPUT, // Analog input - GPIO_ADC_TEMP, // Analog Thermistor - GPIO_ADC_LIGHT, // Analog Light sensor - GPIO_ADC_BUTTON, GPIO_ADC_BUTTON_INV, // Analog Button - GPIO_ADC_RANGE, // Analog Range - GPIO_ADC_CT_POWER, // ANalog Current -#ifdef ESP32 - GPIO_WEBCAM_PWDN, GPIO_WEBCAM_RESET, GPIO_WEBCAM_XCLK, // Webcam - GPIO_WEBCAM_SIOD, GPIO_WEBCAM_SIOC, // Webcam I2C - GPIO_WEBCAM_DATA, - GPIO_WEBCAM_VSYNC, GPIO_WEBCAM_HREF, GPIO_WEBCAM_PCLK, - GPIO_WEBCAM_PSCLK, - GPIO_WEBCAM_HSD, - GPIO_WEBCAM_PSRCS, -#endif - GPIO_BOILER_OT_RX, GPIO_BOILER_OT_TX, // OpenTherm Boiler TX pin - GPIO_WINDMETER_SPEED, // WindMeter speed counter pin - GPIO_KEY1_TC, // Touch pin as button - GPIO_BL0940_RX, // BL0940 serial interface - GPIO_TCP_TX, GPIO_TCP_RX, // TCP to serial bridge -#ifdef ESP32 - GPIO_ETH_PHY_POWER, GPIO_ETH_PHY_MDC, GPIO_ETH_PHY_MDIO, // Ethernet -#endif - GPIO_TELEINFO_RX, // Teleinfo telemetry data receive pin - GPIO_TELEINFO_ENABLE, // Teleinfo Enable Receive Pin - GPIO_LMT01, // LMT01 input counting pin - GPIO_IEM3000_TX, GPIO_IEM3000_RX, // IEM3000 Serial interface - GPIO_ZIGBEE_RST, // Zigbee reset - GPIO_DYP_RX, - GPIO_MIEL_HVAC_TX, GPIO_MIEL_HVAC_RX, // Mitsubishi Electric HVAC - GPIO_WE517_TX, GPIO_WE517_RX, // ORNO WE517 Serial interface - GPIO_AS608_TX, GPIO_AS608_RX, // Serial interface AS608 / R503 - GPIO_SHELLY_DIMMER_BOOT0, GPIO_SHELLY_DIMMER_RST_INV, - GPIO_RC522_RST, // RC522 reset - GPIO_P9813_CLK, GPIO_P9813_DAT, // P9813 Clock and Data - GPIO_OPTION_A, // Specific device options to be served in code - GPIO_FTC532, // FTC532 touch ctrlr serial input - GPIO_RC522_CS, - GPIO_NRF24_CS, GPIO_NRF24_DC, - GPIO_ILI9341_CS, GPIO_ILI9341_DC, - GPIO_ILI9488_CS, - GPIO_EPAPER29_CS, - GPIO_EPAPER42_CS, - GPIO_SSD1351_CS, - GPIO_RA8876_CS, - GPIO_ST7789_CS, GPIO_ST7789_DC, - GPIO_SENSOR_END }; - -enum ProgramSelectablePins { - GPIO_FIX_START = 2046, - GPIO_USER, // User configurable needs to be 2047 - GPIO_MAX }; - -#define MAX_OPTIONS_A 2 // Increase if more bits are used from GpioOptionABits - -typedef union { // Restricted by MISRA-C Rule 18.4 but so useful... - uint32_t data; // Allow bit manipulation using SetOption - struct { // GPIO Option_A1 .. Option_A32 - uint32_t pwm1_input : 1; // bit 0 (v9.2.0.1) - Option_A1 - (Light) Change PWM1 to input on power off and no fade running (1) - uint32_t spare01 : 1; // bit 1 - uint32_t spare02 : 1; // bit 2 - uint32_t spare03 : 1; // bit 3 - uint32_t spare04 : 1; // bit 4 - uint32_t spare05 : 1; // bit 5 - uint32_t spare06 : 1; // bit 6 - uint32_t spare07 : 1; // bit 7 - uint32_t spare08 : 1; // bit 8 - uint32_t spare09 : 1; // bit 9 - uint32_t spare10 : 1; // bit 10 - uint32_t spare11 : 1; // bit 11 - uint32_t spare12 : 1; // bit 12 - uint32_t spare13 : 1; // bit 13 - uint32_t spare14 : 1; // bit 14 - uint32_t spare15 : 1; // bit 15 - uint32_t spare16 : 1; // bit 16 - uint32_t spare17 : 1; // bit 17 - uint32_t spare18 : 1; // bit 18 - uint32_t spare19 : 1; // bit 19 - uint32_t spare20 : 1; // bit 20 - uint32_t spare21 : 1; // bit 21 - uint32_t spare22 : 1; // bit 22 - uint32_t spare23 : 1; // bit 23 - uint32_t spare24 : 1; // bit 24 - uint32_t spare25 : 1; // bit 25 - uint32_t spare26 : 1; // bit 26 - uint32_t spare27 : 1; // bit 27 - uint32_t spare28 : 1; // bit 28 - uint32_t spare29 : 1; // bit 29 - uint32_t spare30 : 1; // bit 30 - uint32_t spare31 : 1; // bit 31 - }; -} GpioOptionABits; - -// Text in webpage Module Parameters and commands GPIOS and GPIO -const char kSensorNames[] PROGMEM = - D_SENSOR_NONE "|" - D_SENSOR_BUTTON "|" D_SENSOR_BUTTON "_n|" D_SENSOR_BUTTON "_i|" D_SENSOR_BUTTON "_in|" - D_SENSOR_SWITCH "|" D_SENSOR_SWITCH "_n|" - D_SENSOR_RELAY "|" D_SENSOR_RELAY "_i|" - D_SENSOR_LED "|" D_SENSOR_LED "_i|" - D_SENSOR_COUNTER "|" D_SENSOR_COUNTER "_n|" - D_SENSOR_PWM "|" D_SENSOR_PWM "_i|" - D_SENSOR_BUZZER "|" D_SENSOR_BUZZER "_i|" - D_SENSOR_LED_LINK "|" D_SENSOR_LED_LINK "_i|" - D_SENSOR_I2C_SCL "|" D_SENSOR_I2C_SDA "|" - D_SENSOR_SPI_MISO "|" D_SENSOR_SPI_MOSI "|" D_SENSOR_SPI_CLK "|" D_SENSOR_SPI_CS "|" D_SENSOR_SPI_DC "|" - D_SENSOR_SSPI_MISO "|" D_SENSOR_SSPI_MOSI "|" D_SENSOR_SSPI_SCLK "|" D_SENSOR_SSPI_CS "|" D_SENSOR_SSPI_DC "|" - D_SENSOR_BACKLIGHT "|" D_SENSOR_OLED_RESET "|" - D_SENSOR_IRSEND "|" D_SENSOR_IRRECV "|" - D_SENSOR_RFSEND "|" D_SENSOR_RFRECV "|" - D_SENSOR_DHT11 "|" D_SENSOR_AM2301 "|" D_SENSOR_SI7021 "|" D_SENSOR_DHT11 "_o|" - D_SENSOR_DS18X20 "|" D_SENSOR_DS18X20 "_o|" - D_SENSOR_WS2812 "|" - D_SENSOR_MHZ_TX "|" D_SENSOR_MHZ_RX "|" - D_SENSOR_PZEM0XX_TX "|" D_SENSOR_PZEM004_RX "|" D_SENSOR_PZEM016_RX "|" D_SENSOR_PZEM017_RX "|" - D_SENSOR_SAIR_TX "|" D_SENSOR_SAIR_RX "|" - D_SENSOR_PMS5003_TX "|" D_SENSOR_PMS5003_RX "|" - D_SENSOR_SDS0X1_TX "|" D_SENSOR_SDS0X1_RX "|" - D_SENSOR_SBR_TX "|" D_SENSOR_SBR_RX "|" - D_SENSOR_SR04_TRIG "|" D_SENSOR_SR04_ECHO "|" - D_SENSOR_SDM120_TX "|" D_SENSOR_SDM120_RX "|" - D_SENSOR_SDM630_TX "|" D_SENSOR_SDM630_RX "|" - D_SENSOR_TM1638_CLK "|" D_SENSOR_TM1638_DIO "|" D_SENSOR_TM1638_STB "|" - D_SENSOR_DFR562 "|" - D_SENSOR_HX711_SCK "|" D_SENSOR_HX711_DAT "|" - D_SENSOR_TX2X_TX "|" - D_SENSOR_TUYA_TX "|" D_SENSOR_TUYA_RX "|" - D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|" - D_SENSOR_RF_SENSOR "|" - D_SENSOR_AZ_TX "|" D_SENSOR_AZ_RX "|" - D_SENSOR_MAX31855_CS "|" D_SENSOR_MAX31855_CLK "|" D_SENSOR_MAX31855_DO "|" - D_SENSOR_NRG_SEL "|" D_SENSOR_NRG_SEL "_i|" D_SENSOR_NRG_CF1 "|" D_SENSOR_HLW_CF "|" D_SENSOR_HJL_CF "|" - D_SENSOR_MCP39F5_TX "|" D_SENSOR_MCP39F5_RX "|" D_SENSOR_MCP39F5_RST "|" - D_SENSOR_PN532_TX "|" D_SENSOR_PN532_RX "|" - D_SENSOR_SM16716_CLK "|" D_SENSOR_SM16716_DAT "|" D_SENSOR_SM16716_POWER "|" - D_SENSOR_MY92X1_DI "|" D_SENSOR_MY92X1_DCKI "|" - D_SENSOR_CSE7766_TX "|" D_SENSOR_CSE7766_RX "|" - D_SENSOR_ARIRFRCV "|" D_SENSOR_ARIRFSEL "|" - D_SENSOR_TXD "|" D_SENSOR_RXD "|" - D_SENSOR_ROTARY "_a|" D_SENSOR_ROTARY "_b|" - D_SENSOR_ADC_JOYSTICK "|" - D_SENSOR_MAX31865_CS "|" - D_SENSOR_HRE_CLOCK "|" D_SENSOR_HRE_DATA "|" - D_SENSOR_ADE7953_IRQ "|" - D_SENSOR_SOLAXX1_TX "|" D_SENSOR_SOLAXX1_RX "|" - D_SENSOR_ZIGBEE_TXD "|" D_SENSOR_ZIGBEE_RXD "|" - D_SENSOR_RDM6300_RX "|" - D_SENSOR_IBEACON_TX "|" D_SENSOR_IBEACON_RX "|" - D_SENSOR_A4988_DIR "|" D_SENSOR_A4988_STP "|" D_SENSOR_A4988_ENA "|" D_SENSOR_A4988_MS1 "|" - D_SENSOR_OUTPUT_HI "|" D_SENSOR_OUTPUT_LO "|" - D_SENSOR_DDS2382_TX "|" D_SENSOR_DDS2382_RX "|" - D_SENSOR_DDSU666_TX "|" D_SENSOR_DDSU666_RX "|" - D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|" - D_SENSOR_DEEPSLEEP "|" D_SENSOR_EXS_ENABLE "|" - D_SENSOR_CLIENT_TX "|" D_SENSOR_CLIENT_RX "|" D_SENSOR_CLIENT_RESET "|" D_SENSOR_CLIENT_RESET "_i|" - D_SENSOR_HPMA_RX "|" D_SENSOR_HPMA_TX "|" - D_SENSOR_GPS_RX "|" D_SENSOR_GPS_TX "|" - D_SENSOR_HM10_RX "|" D_SENSOR_HM10_TX "|" - D_SENSOR_LE01MR_RX "|" D_SENSOR_LE01MR_TX "|" - D_SENSOR_CC1101_GDO0 "|" D_SENSOR_CC1101_GDO2 "|" - D_SENSOR_HRXL_RX "|" - D_SENSOR_ELECTRIQ_MOODL "|" - D_SENSOR_AS3935 "|" - D_SENSOR_ADC_INPUT "|" - D_SENSOR_ADC_TEMP "|" - D_SENSOR_ADC_LIGHT "|" - D_SENSOR_ADC_BUTTON "|" D_SENSOR_ADC_BUTTON "_i|" - D_SENSOR_ADC_RANGE "|" - D_SENSOR_ADC_CT_POWER "|" -#ifdef ESP32 - D_GPIO_WEBCAM_PWDN "|" D_GPIO_WEBCAM_RESET "|" D_GPIO_WEBCAM_XCLK "|" - D_GPIO_WEBCAM_SIOD "|" D_GPIO_WEBCAM_SIOC "|" - D_GPIO_WEBCAM_DATA "|" - D_GPIO_WEBCAM_VSYNC "|" D_GPIO_WEBCAM_HREF "|" D_GPIO_WEBCAM_PCLK "|" - D_GPIO_WEBCAM_PSCLK "|" - D_GPIO_WEBCAM_HSD "|" - D_GPIO_WEBCAM_PSRCS "|" -#endif - D_SENSOR_BOILER_OT_RX "|" D_SENSOR_BOILER_OT_TX "|" - D_SENSOR_WINDMETER_SPEED "|" D_SENSOR_BUTTON "_tc|" - D_SENSOR_BL0940_RX "|" - D_SENSOR_TCP_TXD "|" D_SENSOR_TCP_RXD "|" -#ifdef ESP32 - D_SENSOR_ETH_PHY_POWER "|" D_SENSOR_ETH_PHY_MDC "|" D_SENSOR_ETH_PHY_MDIO "|" -#endif - D_SENSOR_TELEINFO_RX "|" D_SENSOR_TELEINFO_ENABLE "|" - D_SENSOR_LMT01_PULSE "|" - D_SENSOR_IEM3000_TX "|" D_SENSOR_IEM3000_RX "|" - D_SENSOR_ZIGBEE_RST "|" - D_SENSOR_DYP_RX "|" - D_SENSOR_MIEL_HVAC_TX "|" D_SENSOR_MIEL_HVAC_RX "|" - D_SENSOR_WE517_TX "|" D_SENSOR_WE517_RX "|" - D_SENSOR_AS608_TX "|" D_SENSOR_AS608_RX "|" - D_SENSOR_SHELLY_DIMMER_BOOT0 "|" D_SENSOR_SHELLY_DIMMER_RST_INV "|" - D_SENSOR_RC522_RST "|" - D_SENSOR_P9813_CLK "|" D_SENSOR_P9813_DAT "|" - D_SENSOR_OPTION "_a|" - D_SENSOR_FTC532 "|" - D_SENSOR_RC522_CS "|" - D_SENSOR_NRF24_CS "|" D_SENSOR_NRF24_DC "|" - D_SENSOR_ILI9341_CS "|" D_SENSOR_ILI9341_DC "|" - D_SENSOR_ILI9488_CS "|" - D_SENSOR_EPAPER29_CS "|" - D_SENSOR_EPAPER42_CS "|" - D_SENSOR_SSD1351_CS "|" - D_SENSOR_RA8876_CS "|" - D_SENSOR_ST7789_CS "|" D_SENSOR_ST7789_DC "|" - ; - -const char kSensorNamesFixed[] PROGMEM = - D_SENSOR_USER; - -#define MAX_MAX31865S 6 -#define MAX_A4988_MSS 3 -#define MAX_WEBCAM_DATA 8 -#define MAX_WEBCAM_HSD 3 -#define MAX_SM2135_DAT 4 - -const uint16_t kGpioNiceList[] PROGMEM = { - GPIO_NONE, // Not used - AGPIO(GPIO_OPTION_A) + MAX_OPTIONS_A, // Device specific options - AGPIO(GPIO_KEY1) + MAX_KEYS, // Buttons - AGPIO(GPIO_KEY1_NP) + MAX_KEYS, - AGPIO(GPIO_KEY1_INV) + MAX_KEYS, - AGPIO(GPIO_KEY1_INV_NP) + MAX_KEYS, - AGPIO(GPIO_KEY1_TC) + MAX_KEYS, // Touch button - AGPIO(GPIO_SWT1) + MAX_SWITCHES, // User connected external switches - AGPIO(GPIO_SWT1_NP) + MAX_SWITCHES, -#ifdef ROTARY_V1 - AGPIO(GPIO_ROT1A) + MAX_ROTARIES, // Rotary A Pin - AGPIO(GPIO_ROT1B) + MAX_ROTARIES, // Rotary B Pin -#endif - AGPIO(GPIO_REL1) + MAX_RELAYS, // Relays - AGPIO(GPIO_REL1_INV) + MAX_RELAYS, - AGPIO(GPIO_LED1) + MAX_LEDS, // Leds - AGPIO(GPIO_LED1_INV) + MAX_LEDS, -#ifdef USE_COUNTER - AGPIO(GPIO_CNTR1) + MAX_COUNTERS, // Counters - AGPIO(GPIO_CNTR1_NP) + MAX_COUNTERS, -#endif - AGPIO(GPIO_PWM1) + MAX_PWMS, // RGB Red or C Cold White - AGPIO(GPIO_PWM1_INV) + MAX_PWMS, -#ifdef USE_BUZZER - AGPIO(GPIO_BUZZER), // Buzzer - AGPIO(GPIO_BUZZER_INV), // Inverted buzzer -#endif - AGPIO(GPIO_LEDLNK), // Link led - AGPIO(GPIO_LEDLNK_INV), // Inverted link led - AGPIO(GPIO_OUTPUT_HI), // Fixed output high - AGPIO(GPIO_OUTPUT_LO), // Fixed output low -#ifdef USE_FTC532 - AGPIO(GPIO_FTC532), // FTC532 touch input -#endif - -/*-------------------------------------------------------------------------------------------*\ - * Protocol specifics -\*-------------------------------------------------------------------------------------------*/ - -#ifdef USE_I2C - AGPIO(GPIO_I2C_SCL), // I2C SCL - AGPIO(GPIO_I2C_SDA), // I2C SDA -#endif - -#ifdef USE_SPI - AGPIO(GPIO_SPI_MISO), // SPI MISO - AGPIO(GPIO_SPI_MOSI), // SPI MOSI - AGPIO(GPIO_SPI_CLK), // SPI Clk - AGPIO(GPIO_SPI_CS), // SPI Chip Select - AGPIO(GPIO_SPI_DC), // SPI Data Direction -#ifdef USE_NRF24 -// AGPIO(GPIO_NRF24_CS), -// AGPIO(GPIO_NRF24_DC), -#endif -#ifdef USE_RC522 - AGPIO(GPIO_RC522_CS), // RC522 Rfid Chip Select - AGPIO(GPIO_RC522_RST), // RC522 Rfid Reset -#endif -#ifdef USE_DISPLAY -#ifdef USE_DISPLAY_ILI9341 - AGPIO(GPIO_ILI9341_CS), - AGPIO(GPIO_ILI9341_DC), -#endif // USE_DISPLAY_ILI9341 -#endif // USE_DISPLAY -#endif // USE_SPI - AGPIO(GPIO_SSPI_MISO), // Software SPI Master Input Client Output - AGPIO(GPIO_SSPI_MOSI), // Software SPI Master Output Client Input - AGPIO(GPIO_SSPI_SCLK), // Software SPI Serial Clock - AGPIO(GPIO_SSPI_CS), // Software SPI Chip Select - AGPIO(GPIO_SSPI_DC), // Software SPI Data or Command -#ifdef USE_DISPLAY -#ifdef USE_DISPLAY_ILI9488 -// AGPIO(GPIO_ILI9488_CS), -#endif // USE_DISPLAY_ILI9488 -#ifdef USE_DISPLAY_EPAPER_29 -// AGPIO(GPIO_EPAPER29_CS), -#endif // USE_DISPLAY_EPAPER_29 -#ifdef USE_DISPLAY_EPAPER_42 -// AGPIO(GPIO_EPAPER42_CS), -#endif // USE_DISPLAY_EPAPER_42 -#ifdef USE_DISPLAY_SSD1351 -// AGPIO(GPIO_SSD1351_CS), -#endif // USE_DISPLAY_SSD1351 -#ifdef USE_DISPLAY_RA8876 -// AGPIO(GPIO_RA8876_CS), -#endif // USE_DISPLAY_RA8876 -#ifdef USE_DISPLAY_ST7789 -// AGPIO(GPIO_ST7789_CS), -// AGPIO(GPIO_ST7789_DC), -#endif //f USE_DISPLAY_ST7789 - AGPIO(GPIO_BACKLIGHT), // Display backlight control - AGPIO(GPIO_OLED_RESET), // OLED Display Reset -#endif -#ifdef USE_MAX31865 - AGPIO(GPIO_SSPI_MAX31865_CS1) + MAX_MAX31865S, -#endif - - AGPIO(GPIO_TXD), // Serial interface - AGPIO(GPIO_RXD), // Serial interface - -/*-------------------------------------------------------------------------------------------*\ - * Single wire sensors -\*-------------------------------------------------------------------------------------------*/ - -#ifdef USE_DHT - AGPIO(GPIO_DHT11), // DHT11 - AGPIO(GPIO_DHT22), // DHT21, DHT22, AM2301, AM2302, AM2321 - AGPIO(GPIO_SI7021), // iTead SI7021 - AGPIO(GPIO_DHT11_OUT), // Pseudo Single wire DHT11, DHT21, DHT22, AM2301, AM2302, AM2321 -#endif -#ifdef USE_DS18x20 - AGPIO(GPIO_DSB), // Single wire DS18B20 or DS18S20 - AGPIO(GPIO_DSB_OUT), // Pseudo Single wire DS18B20 or DS18S20 -#endif -#ifdef USE_LMT01 - AGPIO(GPIO_LMT01), // LMT01, count pulses on GPIO -#endif - -/*-------------------------------------------------------------------------------------------*\ - * Light -\*-------------------------------------------------------------------------------------------*/ - -#ifdef USE_LIGHT -#ifdef USE_WS2812 -#if (USE_WS2812_HARDWARE == NEO_HW_P9813) - AGPIO(GPIO_P9813_CLK), // P9813 CLOCK - AGPIO(GPIO_P9813_DAT), // P9813 DATA -#else - AGPIO(GPIO_WS2812), // WS2812 Led string -#endif // NEO_HW_P9813 -#endif -#ifdef USE_ARILUX_RF - AGPIO(GPIO_ARIRFRCV), // AriLux RF Receive input - AGPIO(GPIO_ARIRFSEL), // Arilux RF Receive input selected -#endif -#ifdef USE_MY92X1 - AGPIO(GPIO_DI), // my92x1 PWM input - AGPIO(GPIO_DCKI), // my92x1 CLK input -#endif // USE_MY92X1 -#ifdef USE_SM16716 - AGPIO(GPIO_SM16716_CLK), // SM16716 CLOCK - AGPIO(GPIO_SM16716_DAT), // SM16716 DATA - AGPIO(GPIO_SM16716_SEL), // SM16716 SELECT -#endif // USE_SM16716 -#ifdef USE_SM2135 - AGPIO(GPIO_SM2135_CLK), // SM2135 CLOCK - AGPIO(GPIO_SM2135_DAT) + MAX_SM2135_DAT, // SM2135 DATA -#endif // USE_SM2135 -#ifdef USE_TUYA_MCU - AGPIO(GPIO_TUYA_TX), // Tuya Serial interface - AGPIO(GPIO_TUYA_RX), // Tuya Serial interface -#endif -#ifdef USE_EXS_DIMMER - AGPIO(GPIO_EXS_ENABLE), // EXS MCU Enable -#endif -#ifdef USE_ELECTRIQ_MOODL - AGPIO(GPIO_ELECTRIQ_MOODL_TX), -#endif -#ifdef USE_SHELLY_DIMMER - AGPIO(GPIO_SHELLY_DIMMER_BOOT0), - AGPIO(GPIO_SHELLY_DIMMER_RST_INV), -#endif -#endif // USE_LIGHT - -/*-------------------------------------------------------------------------------------------*\ - * Transmission sensors -\*-------------------------------------------------------------------------------------------*/ - -#if defined(USE_IR_REMOTE) || defined(USE_IR_REMOTE_FULL) - AGPIO(GPIO_IRSEND), // IR remote -#if defined(USE_IR_RECEIVE) || defined(USE_IR_REMOTE_FULL) - AGPIO(GPIO_IRRECV), // IR receiver -#endif -#endif -#ifdef USE_RC_SWITCH - AGPIO(GPIO_RFSEND), // RF transmitter - AGPIO(GPIO_RFRECV), // RF receiver -#endif -#ifdef USE_RF_SENSOR - AGPIO(GPIO_RF_SENSOR), // Rf receiver with sensor decoding -#endif -#ifdef USE_SR04 - AGPIO(GPIO_SR04_TRIG), // SR04 Tri/TXgger pin - AGPIO(GPIO_SR04_ECHO), // SR04 Ech/RXo pin -#endif -#ifdef USE_TM1638 - AGPIO(GPIO_TM16CLK), // TM1638 Clock - AGPIO(GPIO_TM16DIO), // TM1638 Data I/O - AGPIO(GPIO_TM16STB), // TM1638 Strobe -#endif -#ifdef USE_HX711 - AGPIO(GPIO_HX711_SCK), // HX711 Load Cell clock - AGPIO(GPIO_HX711_DAT), // HX711 Load Cell data -#endif - -/*-------------------------------------------------------------------------------------------*\ - * Energy sensors -\*-------------------------------------------------------------------------------------------*/ - -#ifdef USE_ENERGY_SENSOR -#ifdef USE_HLW8012 - AGPIO(GPIO_NRG_SEL), // HLW8012/HLJ-01 Sel output (1 = Voltage) - AGPIO(GPIO_NRG_SEL_INV), // HLW8012/HLJ-01 Sel output (0 = Voltage) - AGPIO(GPIO_NRG_CF1), // HLW8012/HLJ-01 CF1 voltage / current - AGPIO(GPIO_HLW_CF), // HLW8012 CF power - AGPIO(GPIO_HJL_CF), // HJL-01/BL0937 CF power -#endif -#if defined(USE_I2C) && defined(USE_ADE7953) - AGPIO(GPIO_ADE7953_IRQ), // ADE7953 IRQ -#endif -#ifdef USE_CSE7766 - AGPIO(GPIO_CSE7766_TX), // CSE7766 Serial interface (S31 and Pow R2) - AGPIO(GPIO_CSE7766_RX), // CSE7766 Serial interface (S31 and Pow R2) -#endif -#ifdef USE_MCP39F501 - AGPIO(GPIO_MCP39F5_TX), // MCP39F501 Serial interface (Shelly2) - AGPIO(GPIO_MCP39F5_RX), // MCP39F501 Serial interface (Shelly2) - AGPIO(GPIO_MCP39F5_RST), // MCP39F501 Reset (Shelly2) -#endif -#if defined(USE_PZEM004T) || defined(USE_PZEM_AC) || defined(USE_PZEM_DC) - AGPIO(GPIO_PZEM0XX_TX), // PZEM0XX Serial interface -#endif -#ifdef USE_PZEM004T - AGPIO(GPIO_PZEM004_RX), // PZEM004T Serial interface -#endif -#ifdef USE_PZEM_AC - AGPIO(GPIO_PZEM016_RX), // PZEM-014,016 Serial Modbus interface -#endif -#ifdef USE_PZEM_DC - AGPIO(GPIO_PZEM017_RX), // PZEM-003,017 Serial Modbus interface -#endif -#ifdef USE_SDM120 - AGPIO(GPIO_SDM120_TX), // SDM120 Serial interface - AGPIO(GPIO_SDM120_RX), // SDM120 Serial interface -#endif -#ifdef USE_SDM630 - AGPIO(GPIO_SDM630_TX), // SDM630 Serial interface - AGPIO(GPIO_SDM630_RX), // SDM630 Serial interface -#endif -#ifdef USE_DDS2382 - AGPIO(GPIO_DDS2382_TX), // DDS2382 Serial interface - AGPIO(GPIO_DDS2382_RX), // DDS2382 Serial interface -#endif -#ifdef USE_DDSU666 - AGPIO(GPIO_DDSU666_TX), // DDSU666 Serial interface - AGPIO(GPIO_DDSU666_RX), // DDSU666 Serial interface -#endif // USE_DDSU666 -#ifdef USE_SOLAX_X1 - AGPIO(GPIO_SOLAXX1_TX), // Solax Inverter tx pin - AGPIO(GPIO_SOLAXX1_RX), // Solax Inverter rx pin -#endif // USE_SOLAX_X1 -#ifdef USE_LE01MR - AGPIO(GPIO_LE01MR_TX), // F7F LE-01MR energy meter tx pin - AGPIO(GPIO_LE01MR_RX), // F7F LE-01MR energy meter rx pin -#endif // IFDEF:USE_LE01MR -#ifdef USE_BL0940 - AGPIO(GPIO_BL0940_RX), // BL0940 Serial interface -#endif -#ifdef USE_IEM3000 - AGPIO(GPIO_IEM3000_TX), // IEM3000 Serial interface - AGPIO(GPIO_IEM3000_RX), // IEM3000 Serial interface -#endif -#ifdef USE_WE517 - AGPIO(GPIO_WE517_TX), // WE517 Serial interface - AGPIO(GPIO_WE517_RX), // WE517 Serial interface -#endif -#endif // USE_ENERGY_SENSOR - -/*-------------------------------------------------------------------------------------------*\ - * Serial sensors -\*-------------------------------------------------------------------------------------------*/ - -#ifdef USE_SERIAL_BRIDGE - AGPIO(GPIO_SBR_TX), // Serial Bridge Serial interface - AGPIO(GPIO_SBR_RX), // Serial Bridge Serial interface -#endif -#ifdef USE_TCP_BRIDGE - AGPIO(GPIO_TCP_TX), // TCP Serial bridge - AGPIO(GPIO_TCP_RX), // TCP Serial bridge -#endif -#ifdef USE_ZIGBEE - AGPIO(GPIO_ZIGBEE_TX), // Zigbee Serial interface - AGPIO(GPIO_ZIGBEE_RX), // Zigbee Serial interface - AGPIO(GPIO_ZIGBEE_RST), // Zigbee reset -#endif -#ifdef USE_MHZ19 - AGPIO(GPIO_MHZ_TXD), // MH-Z19 Serial interface - AGPIO(GPIO_MHZ_RXD), // MH-Z19 Serial interface -#endif -#ifdef USE_SENSEAIR - AGPIO(GPIO_SAIR_TX), // SenseAir Serial interface - AGPIO(GPIO_SAIR_RX), // SenseAir Serial interface -#endif -#ifdef USE_NOVA_SDS - AGPIO(GPIO_SDS0X1_TX), // Nova Fitness SDS011 Serial interface - AGPIO(GPIO_SDS0X1_RX), // Nova Fitness SDS011 Serial interface -#endif -#ifdef USE_HPMA - AGPIO(GPIO_HPMA_TX), // Honeywell HPMA115S0 Serial interface - AGPIO(GPIO_HPMA_RX), // Honeywell HPMA115S0 Serial interface -#endif -#ifdef USE_PMS5003 - AGPIO(GPIO_PMS5003_TX), // Plantower PMS5003 Serial interface - AGPIO(GPIO_PMS5003_RX), // Plantower PMS5003 Serial interface -#endif -#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR) - AGPIO(GPIO_TX2X_TXD_BLACK), // TX20/TX23 Transmission Pin -#endif -#ifdef USE_WINDMETER - AGPIO(GPIO_WINDMETER_SPEED), -#endif -#ifdef USE_MP3_PLAYER - AGPIO(GPIO_MP3_DFR562), // RB-DFR-562, DFPlayer Mini MP3 Player Serial interface -#endif -#ifdef USE_AZ7798 - AGPIO(GPIO_AZ_TXD), // AZ-Instrument 7798 CO2 datalogger Serial interface - AGPIO(GPIO_AZ_RXD), // AZ-Instrument 7798 CO2 datalogger Serial interface -#endif -#ifdef USE_PN532_HSU - AGPIO(GPIO_PN532_TXD), // PN532 HSU Tx - AGPIO(GPIO_PN532_RXD), // PN532 HSU Rx -#endif -#ifdef USE_TASMOTA_CLIENT - AGPIO(GPIO_TASMOTACLIENT_TXD), // Tasmota Client TX - AGPIO(GPIO_TASMOTACLIENT_RXD), // Tasmota Client RX - AGPIO(GPIO_TASMOTACLIENT_RST), // Tasmota Client Reset - AGPIO(GPIO_TASMOTACLIENT_RST_INV), // Tasmota Client Reset Inverted -#endif -#ifdef USE_RDM6300 - AGPIO(GPIO_RDM6300_RX), -#endif -#ifdef USE_IBEACON - AGPIO(GPIO_IBEACON_TX), - AGPIO(GPIO_IBEACON_RX), -#endif -#ifdef USE_GPS - AGPIO(GPIO_GPS_TX), // GPS serial interface - AGPIO(GPIO_GPS_RX), // GPS serial interface -#endif -#ifdef USE_HM10 - AGPIO(GPIO_HM10_TX), // GPS serial interface - AGPIO(GPIO_HM10_RX), // GPS serial interface -#endif -#ifdef USE_OPENTHERM - AGPIO(GPIO_BOILER_OT_TX), - AGPIO(GPIO_BOILER_OT_RX), -#endif -#ifdef USE_AS608 - AGPIO(GPIO_AS608_TX), - AGPIO(GPIO_AS608_RX), -#endif - -/*-------------------------------------------------------------------------------------------*\ - * Other sensors -\*-------------------------------------------------------------------------------------------*/ - -#ifdef USE_MGC3130 - AGPIO(GPIO_MGC3130_XFER), - AGPIO(GPIO_MGC3130_RESET), -#endif -#ifdef USE_MAX31855 - AGPIO(GPIO_MAX31855CS), // MAX31855 Serial interface - AGPIO(GPIO_MAX31855CLK), // MAX31855 Serial interface - AGPIO(GPIO_MAX31855DO), // MAX31855 Serial interface -#endif -#ifdef USE_HRE - AGPIO(GPIO_HRE_CLOCK), - AGPIO(GPIO_HRE_DATA), -#endif -#ifdef USE_A4988_STEPPER - AGPIO(GPIO_A4988_DIR), // A4988 direction pin - AGPIO(GPIO_A4988_STP), // A4988 step pin - // folowing are not mandatory - AGPIO(GPIO_A4988_ENA), // A4988 enabled pin - AGPIO(GPIO_A4988_MS1) + MAX_A4988_MSS, // A4988 microstep pin1 to pin3 -#endif -#ifdef USE_DEEPSLEEP - AGPIO(GPIO_DEEPSLEEP), -#endif -#ifdef USE_KEELOQ - AGPIO(GPIO_CC1101_GDO0), // CC1101 pin for RX - AGPIO(GPIO_CC1101_GDO2), // CC1101 pin for RX -#endif -#ifdef USE_HRXL - AGPIO(GPIO_HRXL_RX), -#endif -#ifdef USE_DYP - AGPIO(GPIO_DYP_RX), -#endif -#ifdef USE_AS3935 - AGPIO(GPIO_AS3935), // AS3935 IRQ Pin -#endif -#ifdef USE_TELEINFO - AGPIO(GPIO_TELEINFO_RX), - AGPIO(GPIO_TELEINFO_ENABLE), -#endif -#ifdef USE_MIEL_HVAC - AGPIO(GPIO_MIEL_HVAC_TX), // Mitsubishi Electric HVAC TX pin - AGPIO(GPIO_MIEL_HVAC_RX), // Mitsubishi Electric HVAC RX pin -#endif - -/*-------------------------------------------------------------------------------------------*\ - * ESP32 specifics -\*-------------------------------------------------------------------------------------------*/ - -#ifdef ESP32 -#ifdef USE_WEBCAM - AGPIO(GPIO_WEBCAM_PWDN), - AGPIO(GPIO_WEBCAM_RESET), - AGPIO(GPIO_WEBCAM_XCLK), - AGPIO(GPIO_WEBCAM_SIOD), - AGPIO(GPIO_WEBCAM_SIOC), - AGPIO(GPIO_WEBCAM_DATA) + MAX_WEBCAM_DATA, - AGPIO(GPIO_WEBCAM_VSYNC), - AGPIO(GPIO_WEBCAM_HREF), - AGPIO(GPIO_WEBCAM_PCLK), - AGPIO(GPIO_WEBCAM_PSCLK), - AGPIO(GPIO_WEBCAM_HSD) + MAX_WEBCAM_HSD, - AGPIO(GPIO_WEBCAM_PSRCS), -#endif // USE_WEBCAM -#ifdef USE_ETHERNET - AGPIO(GPIO_ETH_PHY_POWER), - AGPIO(GPIO_ETH_PHY_MDC), - AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet -#endif // USE_ETHERNET - -/*-------------------------------------------------------------------------------------------*\ - * ESP32 multiple Analog / Digital converter inputs -\*-------------------------------------------------------------------------------------------*/ - - AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs - AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor - AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor - AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button - AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS, - AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range - AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current - AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick -#endif // ESP32 -}; - -/*-------------------------------------------------------------------------------------------*\ - * ESP8266 single Analog / Digital converter input -\*-------------------------------------------------------------------------------------------*/ - -#ifdef ESP8266 -const uint16_t kAdcNiceList[] PROGMEM = { - GPIO_NONE, // Not used - AGPIO(GPIO_ADC_INPUT), // Analog inputs - AGPIO(GPIO_ADC_TEMP), // Thermistor - AGPIO(GPIO_ADC_LIGHT), // Light sensor - AGPIO(GPIO_ADC_BUTTON) + MAX_KEYS, // Button - AGPIO(GPIO_ADC_BUTTON_INV) + MAX_KEYS, - AGPIO(GPIO_ADC_RANGE), // Range - AGPIO(GPIO_ADC_CT_POWER), // Current - AGPIO(GPIO_ADC_JOY), // Joystick -}; -#endif // ESP8266 - -// User selectable ADC functionality -enum UserSelectableAdc { - ADC_NONE, // Not used - ADC_INPUT, // Analog input - ADC_TEMP, // Thermistor - ADC_LIGHT, // Light sensor - ADC_BUTTON, // Button - ADC_BUTTON_INV, - ADC_RANGE, // Range - ADC_CT_POWER, // Current - ADC_JOY, // Joystick -// ADC_SWITCH, // Switch -// ADC_SWITCH_INV, - ADC_END }; - -/*********************************************************************************************\ - * ATTENTION: No user changeable features beyond this point - do not add templates !!! -\*********************************************************************************************/ - -#define GPIO_ANY 32 // Any GPIO - -#ifdef ESP8266 - -#define MAX_GPI8_PIN 17 // Number of supported GPIO (0..16) -#define FLASH_PINS 6 // Number of flash chip pins - -#define MAX_GPIO_PIN 18 // Number of supported GPIO (0..16 + ADC0) -#define ADC0_PIN 17 // Pin number of ADC0 -#define MIN_FLASH_PINS 4 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8 and 11) -#define MAX_USER_PINS 14 // MAX_GPIO_PIN - MIN_FLASH_PINS -#define WEMOS_MODULE 17 // Wemos module - -const char PINS_WEMOS[] PROGMEM = "D3TXD4RXD2D1flashcFLFLolD6D7D5D8D0A0"; - -typedef struct MYIO8 { - uint8_t io[MAX_GPI8_PIN]; -} myio8; // 17 bytes - -typedef struct MYCFGIO8285 { - uint8_t io[MAX_GPI8_PIN - MIN_FLASH_PINS]; -} mycfgio8285; // 13 bytes - -typedef struct MYTMPLT8285 { - mycfgio8285 gp; - uint8_t flag; -} mytmplt8285; // 14 bytes - -typedef struct MYCFGIO8266 { - uint8_t io[MAX_GPI8_PIN - FLASH_PINS]; -} mycfgio8266; // 11 bytes - -typedef struct MYTMPLT8266 { - mycfgio8266 gp; - uint8_t flag; -} mytmplt8266; // 12 bytes - -#endif // ESP8266 -#ifdef ESP32 - -#define MAX_GPIO_PIN 40 // Number of supported GPIO -#define MIN_FLASH_PINS 4 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8 and 11) -#define MAX_USER_PINS 36 // MAX_GPIO_PIN - MIN_FLASH_PINS -#define WEMOS_MODULE 0 // Wemos module - -// 0 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839 -const char PINS_WEMOS[] PROGMEM = "IOTXIORXIOIOflashcFLFLolIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOIOAOAOIAIAIAIAIAIA"; - -#endif // ESP32 - -//******************************************************************************************** - -typedef struct MYIO { - uint16_t io[MAX_GPIO_PIN]; -} myio; // 18 * 2 = 36 bytes / 40 * 2 = 80 bytes - -typedef struct MYCFGIO { - uint16_t io[MAX_USER_PINS]; -} mycfgio; // 14 * 2 = 28 bytes / 36 * 2 = 72 bytes - -#define GPIO_FLAG_USED 0 // Currently no flags used - -typedef union { - uint16_t data; - struct { - uint16_t spare00 : 1; - uint16_t spare01 : 1; - uint16_t spare02 : 1; - uint16_t spare03 : 1; - uint16_t spare04 : 1; - uint16_t spare05 : 1; - uint16_t spare06 : 1; - uint16_t spare07 : 1; - uint16_t spare08 : 1; - uint16_t spare09 : 1; - uint16_t spare10 : 1; - uint16_t spare11 : 1; - uint16_t spare12 : 1; - uint16_t spare13 : 1; - uint16_t spare14 : 1; - uint16_t spare15 : 1; - }; -} gpio_flag; // 2 bytes - -typedef struct MYTMPLT { - mycfgio gp; // 28 / 72 bytes - gpio_flag flag; // 2 bytes -} mytmplt; // 30 / 74 bytes - -//******************************************************************************************** - -#ifdef ESP8266 -#include "tasmota_template_legacy.h" - -/********************************************************************************************\ - * ESP8266 Module Templates -\********************************************************************************************/ - -#define USER_MODULE 255 - -// Supported hardware modules -enum SupportedModules { - SONOFF_BASIC, SONOFF_RF, SONOFF_SV, SONOFF_TH, SONOFF_DUAL, SONOFF_POW, SONOFF_4CH, SONOFF_S2X, SLAMPHER, SONOFF_TOUCH, - SONOFF_LED, CH1, CH4, MOTOR, ELECTRODRAGON, EXS_RELAY, WION, WEMOS, SONOFF_DEV, H801, - SONOFF_SC, SONOFF_BN, SONOFF_4CHPRO, HUAFAN_SS, SONOFF_BRIDGE, SONOFF_B1, AILIGHT, SONOFF_T11, SONOFF_T12, SONOFF_T13, - SUPLA1, WITTY, YUNSHAN, MAGICHOME, LUANIHVIO, KMC_70011, ARILUX_LC01, ARILUX_LC11, SONOFF_DUAL_R2, ARILUX_LC06, - SONOFF_S31, ZENGGE_ZF_WF017, SONOFF_POW_R2, SONOFF_IFAN02, BLITZWOLF_BWSHP, SHELLY1, SHELLY2, PHILIPS, NEO_COOLCAM, ESP_SWITCH, - OBI, TECKIN, APLIC_WDP303075, TUYA_DIMMER, GOSUND, ARMTRONIX_DIMMERS, SK03_TUYA, PS_16_DZ, TECKIN_US, MANZOKU_EU_4, - OBI2, YTF_IR_BRIDGE, DIGOO, KA10, ZX2820, MI_DESK_LAMP, SP10, WAGA, SYF05, SONOFF_L1, - SONOFF_IFAN03, EXS_DIMMER, PWM_DIMMER, SONOFF_D1, SONOFF_ZB_BRIDGE, - MAXMODULE }; - -const char kModuleNames[] PROGMEM = - "Sonoff Basic|Sonoff RF|Sonoff SV|Sonoff TH|Sonoff Dual|Sonoff Pow|Sonoff 4CH|Sonoff S2X|Slampher|Sonoff Touch|" - "Sonoff LED|1 Channel|4 Channel|Motor C/AC|ElectroDragon|EXS Relay(s)|WiOn|Generic|Sonoff Dev|H801|" - "Sonoff SC|Sonoff BN-SZ|Sonoff 4CH Pro|Huafan SS|Sonoff Bridge|Sonoff B1|AiLight|Sonoff T1 1CH|Sonoff T1 2CH|Sonoff T1 3CH|" - "Supla Espablo|Witty Cloud|Yunshan Relay|MagicHome|Luani HVIO|KMC 70011|Arilux LC01|Arilux LC11|Sonoff Dual R2|Arilux LC06|" - "Sonoff S31|Zengge WF017|Sonoff Pow R2|Sonoff iFan02|BlitzWolf SHP|Shelly 1|Shelly 2|Xiaomi Philips|Neo Coolcam|ESP Switch|" - "OBI Socket|Teckin|AplicWDP303075|Tuya MCU|Gosund SP1 v23|ARMTR Dimmer|SK03 Outdoor|PS-16-DZ|Teckin US|Manzoku strip|" - "OBI Socket 2|YTF IR Bridge|Digoo DG-SP202|KA10|Luminea ZX2820|Mi Desk Lamp|SP10|WAGA CHCZ02MB|SYF05|Sonoff L1|" - "Sonoff iFan03|EXS Dimmer|PWM Dimmer|Sonoff D1|Sonoff ZbBridge" - ; - -const uint8_t kModuleNiceList[] PROGMEM = { - SONOFF_BASIC, // Sonoff Relay Devices - SONOFF_RF, - SONOFF_TH, - SONOFF_DUAL, - SONOFF_DUAL_R2, - SONOFF_POW, - SONOFF_POW_R2, - SONOFF_4CH, - SONOFF_4CHPRO, - SONOFF_S31, // Sonoff Socket Relay Devices with Energy Monitoring - SONOFF_S2X, // Sonoff Socket Relay Devices - SONOFF_TOUCH, // Sonoff Switch Devices - SONOFF_T11, - SONOFF_T12, - SONOFF_T13, -#ifdef USE_SONOFF_D1 - SONOFF_D1, // Sonoff D1 -#endif - SONOFF_LED, // Sonoff Light Devices - SONOFF_BN, -#ifdef USE_SONOFF_L1 - SONOFF_L1, -#endif - SONOFF_B1, // Sonoff Light Bulbs - SLAMPHER, -#ifdef USE_SONOFF_SC - SONOFF_SC, // Sonoff Environmemtal Sensor -#endif -#ifdef USE_SONOFF_IFAN - SONOFF_IFAN02, // Sonoff Fan - SONOFF_IFAN03, -#endif -#ifdef USE_SONOFF_RF - SONOFF_BRIDGE, // Sonoff Bridge -#endif -#ifdef USE_ZIGBEE_EZSP - SONOFF_ZB_BRIDGE, -#endif - SONOFF_SV, // Sonoff Development Devices - SONOFF_DEV, - CH1, // Relay Devices - CH4, - MOTOR, - ELECTRODRAGON, - EXS_RELAY, - SUPLA1, - LUANIHVIO, - YUNSHAN, - WION, - SHELLY1, - SHELLY2, - BLITZWOLF_BWSHP, // Socket Relay Devices with Energy Monitoring - TECKIN, - TECKIN_US, - APLIC_WDP303075, - GOSUND, - ZX2820, - SK03_TUYA, - DIGOO, - KA10, - SP10, - WAGA, - NEO_COOLCAM, // Socket Relay Devices - OBI, - OBI2, - MANZOKU_EU_4, - ESP_SWITCH, // Switch Devices -#ifdef USE_TUYA_MCU - TUYA_DIMMER, // Dimmer Devices -#endif -#ifdef USE_ARMTRONIX_DIMMERS - ARMTRONIX_DIMMERS, -#endif -#ifdef USE_PS_16_DZ - PS_16_DZ, -#endif -#ifdef USE_EXS_DIMMER - EXS_DIMMER, -#endif -#ifdef USE_PWM_DIMMER - PWM_DIMMER, -#endif - H801, // Light Devices - MAGICHOME, - ARILUX_LC01, - ARILUX_LC06, - ARILUX_LC11, - ZENGGE_ZF_WF017, - HUAFAN_SS, -#ifdef ROTARY_V1 - MI_DESK_LAMP, -#endif - KMC_70011, - AILIGHT, // Light Bulbs - PHILIPS, - SYF05, - YTF_IR_BRIDGE, - WITTY, // Development Devices - WEMOS -}; - -enum SupportedTemplates8285 { - TMP_SONOFF_BASIC, TMP_SONOFF_SV, TMP_SONOFF_DUAL, TMP_SONOFF_POW, TMP_SONOFF_LED, TMP_ELECTRODRAGON, - TMP_EXS_RELAY, TMP_WION, TMP_SONOFF_DEV, TMP_H801, TMP_SONOFF_SC, TMP_SONOFF_BN, TMP_HUAFAN_SS, TMP_SONOFF_BRIDGE, - TMP_SONOFF_B1, TMP_AILIGHT, TMP_SONOFF_T11, TMP_SUPLA1, TMP_WITTY, TMP_YUNSHAN, TMP_MAGICHOME, - TMP_LUANIHVIO, TMP_KMC_70011, TMP_ARILUX_LC01, TMP_ARILUX_LC11, TMP_ARILUX_LC06, TMP_ZENGGE_ZF_WF017, - TMP_SONOFF_POW_R2, TMP_BLITZWOLF_BWSHP, TMP_SHELLY1, TMP_SHELLY2, TMP_PHILIPS, TMP_NEO_COOLCAM, TMP_ESP_SWITCH, TMP_OBI, - TMP_TECKIN, TMP_APLIC_WDP303075, TMP_TUYA_DIMMER, TMP_GOSUND, TMP_ARMTRONIX_DIMMERS, TMP_SK03_TUYA, TMP_PS_16_DZ, - TMP_TECKIN_US, TMP_MANZOKU_EU_4, TMP_OBI2, TMP_YTF_IR_BRIDGE, TMP_DIGOO, TMP_KA10, TMP_ZX2820, TMP_MI_DESK_LAMP, TMP_SP10, - TMP_WAGA, TMP_SYF05, TMP_EXS_DIMMER, TMP_PWM_DIMMER, TMP_SONOFF_ZB_BRIDGE, - TMP_MAXMODULE_8285 }; - -enum SupportedTemplates8266 { - TMP_WEMOS = TMP_MAXMODULE_8285, TMP_SONOFF_4CH, TMP_SONOFF_T12, TMP_SONOFF_T13, TMP_SONOFF_DUAL_R2, TMP_SONOFF_IFAN03, - TMP_MAXMODULE_8266 }; - -const uint8_t kModuleTemplateList[MAXMODULE] PROGMEM = { - TMP_SONOFF_BASIC, - TMP_SONOFF_BASIC, // SONOFF_RF - TMP_SONOFF_SV, - TMP_SONOFF_BASIC, // SONOFF_TH - TMP_SONOFF_DUAL, - TMP_SONOFF_POW, - TMP_SONOFF_4CH, - TMP_SONOFF_BASIC, // SONOFF_S2X - TMP_SONOFF_BASIC, // SLAMPHER - TMP_SONOFF_T11, // SONOFF_TOUCH - TMP_SONOFF_LED, - TMP_SONOFF_BASIC, // CH1 - TMP_SONOFF_DUAL, // CH4 - TMP_SONOFF_BASIC, // MOTOR - TMP_ELECTRODRAGON, - TMP_EXS_RELAY, - TMP_WION, - TMP_WEMOS, - TMP_SONOFF_DEV, - TMP_H801, - TMP_SONOFF_SC, - TMP_SONOFF_BN, - TMP_SONOFF_4CH, // SONOFF_4CHPRO - TMP_HUAFAN_SS, - TMP_SONOFF_BRIDGE, - TMP_SONOFF_B1, - TMP_AILIGHT, - TMP_SONOFF_T11, - TMP_SONOFF_T12, - TMP_SONOFF_T13, - TMP_SUPLA1, - TMP_WITTY, - TMP_YUNSHAN, - TMP_MAGICHOME, - TMP_LUANIHVIO, - TMP_KMC_70011, - TMP_ARILUX_LC01, - TMP_ARILUX_LC11, - TMP_SONOFF_DUAL_R2, - TMP_ARILUX_LC06, - TMP_SONOFF_POW_R2, // SONOFF_S31 - TMP_ZENGGE_ZF_WF017, - TMP_SONOFF_POW_R2, - TMP_SONOFF_4CH, // SONOFF_IFAN02 - TMP_BLITZWOLF_BWSHP, - TMP_SHELLY1, - TMP_SHELLY2, - TMP_PHILIPS, - TMP_NEO_COOLCAM, - TMP_ESP_SWITCH, - TMP_OBI, - TMP_TECKIN, - TMP_APLIC_WDP303075, - TMP_TUYA_DIMMER, - TMP_GOSUND, - TMP_ARMTRONIX_DIMMERS, - TMP_SK03_TUYA, - TMP_PS_16_DZ, - TMP_TECKIN_US, - TMP_MANZOKU_EU_4, - TMP_OBI2, - TMP_YTF_IR_BRIDGE, - TMP_DIGOO, - TMP_KA10, - TMP_ZX2820, - TMP_MI_DESK_LAMP, - TMP_SP10, - TMP_WAGA, - TMP_SYF05, - TMP_SONOFF_DUAL, // SONOFF_L1 - TMP_SONOFF_IFAN03, - TMP_EXS_DIMMER, - TMP_PWM_DIMMER, - TMP_SONOFF_DUAL, // SONOFF_D1 - TMP_SONOFF_ZB_BRIDGE, - }; - -/*********************************************************************************************\ - * Templates with 12 usable pins (ESP8266) -\*********************************************************************************************/ - -const mytmplt8266 kModules8266[TMP_MAXMODULE_8285] PROGMEM = { - { // SONOFF_BASIC - Sonoff Basic (ESP8266) - GPI8_KEY1, // GPIO00 Button - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Only available on newer Sonoff Basic R2 V1 - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_USER, // GPIO04 Optional sensor - 0, // GPIO05 - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Green Led (0 = On, 1 = Off) - Link and Power status - GPI8_USER, // GPIO14 Optional sensor - 0, // GPIO15 - 0, // GPIO16 - 0 // ADC0 Analog input - }, - { // SONOFF_SV - Sonoff SV (ESP8266) - GPI8_KEY1, // GPIO00 Button - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - 0, - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_USER, // GPIO04 Optional sensor - GPI8_USER, // GPIO05 Optional sensor - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Green Led (0 = On, 1 = Off) - Link and Power status - GPI8_USER, // GPIO14 Optional sensor - 0, 0, - GPI8_USER // ADC0 Analog input - }, - { // SONOFF_DUAL - Sonoff Dual (ESP8266) - GPI8_USER, // GPIO00 Pad - GPI8_TXD, // GPIO01 Relay control - 0, - GPI8_RXD, // GPIO03 Relay control - GPI8_USER, // GPIO04 Optional sensor - 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - 0, - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - GPI8_USER, // GPIO14 Optional sensor - 0, 0, 0 - }, - { // SONOFF_POW - Sonoff Pow (ESP8266 - HLW8012) - GPI8_KEY1, // GPIO00 Button - 0, 0, 0, 0, - GPI8_NRG_SEL, // GPIO05 HLW8012 Sel output (1 = Voltage) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) - GPI8_NRG_CF1, // GPIO13 HLW8012 CF1 voltage / current - GPI8_HLW_CF, // GPIO14 HLW8012 CF power - GPI8_LED1, // GPIO15 Blue Led (0 = On, 1 = Off) - Link and Power status - 0, 0 - }, - { // SONOFF_LED - Sonoff LED (ESP8266) - GPI8_KEY1, // GPIO00 Button - 0, 0, 0, - GPI8_USER, // GPIO04 Optional sensor (PWM3 Green) - GPI8_USER, // GPIO05 Optional sensor (PWM2 Red) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM1, // GPIO12 Cold light (PWM0 Cold) - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - GPI8_PWM2, // GPIO14 Warm light (PWM1 Warm) - GPI8_USER, // GPIO15 Optional sensor (PWM4 Blue) - 0, 0 - }, - { // ELECTRODRAGON - ElectroDragon IoT Relay Board (ESP8266) - GPI8_KEY2, // GPIO00 Button 2 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_KEY1, // GPIO02 Button 1 - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_USER, // GPIO04 Optional sensor - GPI8_USER, // GPIO05 Optional sensor - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL2, // GPIO12 Red Led and Relay 2 (0 = Off, 1 = On) - GPI8_REL1, // GPIO13 Red Led and Relay 1 (0 = Off, 1 = On) - GPI8_USER, // GPIO14 Optional sensor - GPI8_USER, // GPIO15 Optional sensor - GPI8_LED1, // GPIO16 Green/Blue Led (1 = On, 0 = Off) - Link and Power status - GPI8_USER // ADC0 A0 Analog input - }, - { // EXS_RELAY - ES-Store Latching relay(s) (ESP8266) - // https://ex-store.de/ESP8266-WiFi-Relay-V31 - // V3.1 Module Pin 1 VCC 3V3, Module Pin 6 GND - // https://ex-store.de/2-Kanal-WiFi-WLan-Relay-V5-Blackline-fuer-Unterputzmontage - GPI8_USER, // GPIO00 V3.1 Module Pin 8 - V5.0 Module Pin 4 - GPI8_USER, // GPIO01 UART0_TXD V3.1 Module Pin 2 - V5.0 Module Pin 3 - GPI8_USER, // GPIO02 V3.1 Module Pin 7 - GPI8_USER, // GPIO03 UART0_RXD V3.1 Module Pin 3 - GPI8_USER, // GPIO04 V3.1 Module Pin 10 - V5.0 Module Pin 2 - GPI8_USER, // GPIO05 V3.1 Module Pin 9 - V5.0 Module Pin 1 - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Relay1 ( 1 = Off) - GPI8_REL2, // GPIO13 Relay1 ( 1 = On) - GPI8_USER, // GPIO14 V3.1 Module Pin 5 - V5.0 GPI8_REL3_INV Relay2 ( 1 = Off) - GPI8_LED1, // GPIO15 V5.0 LED1 - Link and Power status - GPI8_USER, // GPIO16 V3.1 Module Pin 4 - V5.0 GPI8_REL4_INV Relay2 ( 1 = On) - 0 - }, - { // WION - Indoor Tap (ESP8266) - // https://www.amazon.com/gp/product/B00ZYLUBJU/ref=s9_acsd_al_bw_c_x_3_w - GPI8_USER, // GPIO00 Optional sensor (pm clock) - 0, - GPI8_LED1, // GPIO02 Green Led (1 = On, 0 = Off) - Link and Power status - 0, 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 Optional sensor (pm data) - GPI8_KEY1, // GPIO13 Button - 0, - GPI8_REL1, // GPIO15 Relay (0 = Off, 1 = On) - 0, 0 - }, - { // SONOFF_DEV - Sonoff Dev (ESP8266) - GPI8_KEY1, // GPIO00 E-FW Button - GPI8_USER, // GPIO01 TX Serial RXD and Optional sensor - 0, // GPIO02 - GPI8_USER, // GPIO03 RX Serial TXD and Optional sensor - GPI8_USER, // GPIO04 Optional sensor - GPI8_USER, // GPIO05 Optional sensor - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 - GPI8_USER, // GPIO13 BLUE LED - GPI8_USER, // GPIO14 Optional sensor - 0, // GPIO15 - 0, // GPIO16 - GPI8_USER // ADC0 A0 Analog input - }, - { // H801 - Lixada H801 Wifi (ESP8266) - GPI8_USER, // GPIO00 E-FW Button - GPI8_LED1, // GPIO01 Green LED - Link and Power status - GPI8_USER, // GPIO02 TX and Optional sensor - Pin next to TX on the PCB - GPI8_USER, // GPIO03 RX and Optional sensor - Pin next to GND on the PCB - GPI8_PWM5, // GPIO04 W2 - PWM5 - GPI8_LED2_INV, // GPIO05 Red LED - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM3, // GPIO12 Blue - GPI8_PWM2, // GPIO13 Green - GPI8_PWM4, // GPIO14 W1 - PWM4 - GPI8_PWM1, // GPIO15 Red - 0, 0 - }, - { // SONOFF_SC - onoff SC (ESP8266) - GPI8_KEY1, // GPIO00 Button - GPI8_TXD, // GPIO01 RXD to ATMEGA328P - GPI8_USER, // GPIO02 Optional sensor - GPI8_RXD, // GPIO03 TXD to ATMEGA328P - 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - 0, - GPI8_LED1_INV, // GPIO13 Green Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // SONOFF_BN - Sonoff BN-SZ01 Ceiling led (ESP8285) - 0, 0, 0, 0, 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM1, // GPIO12 Light - GPI8_LED1_INV, // GPIO13 Red Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // HUAFAN_SS - Hua Fan Smart Socket (ESP8266) - like Sonoff Pow - GPI8_LEDLNK_INV, // GPIO00 Blue Led (0 = On, 1 = Off) - Link status - 0, 0, - GPI8_LED1_INV, // GPIO03 Red Led (0 = On, 1 = Off) - Power status - GPI8_KEY1, // GPIO04 Button - GPI8_REL1_INV, // GPIO05 Relay (0 = On, 1 = Off) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_CF1, // GPIO12 HLW8012 CF1 voltage / current - GPI8_NRG_SEL, // GPIO13 HLW8012 Sel output (1 = Voltage) - GPI8_HLW_CF, // GPIO14 HLW8012 CF power - 0, 0, 0 - }, - { // SONOFF_BRIDGE - Sonoff RF Bridge 433 (ESP8285) - GPI8_KEY1, // GPIO00 Button - GPI8_TXD, // GPIO01 RF bridge control - GPI8_USER, // GPIO02 Optional sensor - GPI8_RXD, // GPIO03 RF bridge control - GPI8_USER, // GPIO04 Optional sensor - GPI8_USER, // GPIO05 Optional sensor - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 Optional sensor - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - GPI8_USER, // GPIO14 Optional sensor - 0, 0, 0 - }, - { // SONOFF_B1 - Sonoff B1 (ESP8285 - my9231) - GPI8_KEY1, // GPIO00 Pad - GPI8_USER, // GPIO01 Serial RXD and Optional sensor pad - GPI8_USER, // GPIO02 Optional sensor SDA pad - GPI8_USER, // GPIO03 Serial TXD and Optional sensor pad - 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_DI, // GPIO12 my9231 DI - 0, - GPI8_DCKI, // GPIO14 my9231 DCKI - 0, 0, 0 - }, - { // AILIGHT - Ai-Thinker RGBW led (ESP8266 - my9291) - GPI8_KEY1, // GPIO00 Pad - GPI8_USER, // GPIO01 Serial RXD and Optional sensor pad - GPI8_USER, // GPIO02 Optional sensor SDA pad - GPI8_USER, // GPIO03 Serial TXD and Optional sensor pad - 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - 0, - GPI8_DI, // GPIO13 my9291 DI - 0, - GPI8_DCKI, // GPIO15 my9291 DCKI - 0, 0 - }, - { // SONOFF_T11 - Sonoff T1 1CH (ESP8285) - GPI8_KEY1, // GPIO00 Button 1 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Optional Sensor (J3 Pin 5) - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Blue Led and Relay 1 (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // SUPLA1 - Supla Espablo (ESP8266) - // http://www.wykop.pl/ramka/3325399/diy-supla-do-puszki-instalacyjnej-podtynkowej-supla-org/ - 0, // GPIO00 Flash jumper - GPI8_USER, // GPIO01 Serial RXD and Optional sensor -#ifdef USE_DS18x20 - GPI8_DSB, // GPIO02 DS18B20 sensor -#else - GPI8_USER, // GPIO02 Optional sensor -#endif - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_KEY1, // GPIO04 Button 1 - GPI8_REL1, // GPIO05 Relay 1 (0 = Off, 1 = On) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 Optional sensor - GPI8_REL2, // GPIO13 Relay 2 (0 = Off, 1 = On) - GPI8_USER, // GPIO14 Optional sensor - 0, - GPI8_LED1, // GPIO16 Led (1 = On, 0 = Off) - Link and Power status - GPI8_USER // ADC0 A0 Analog input - }, - { // WITTY - Witty Cloud Dev Board (ESP8266) - // https://www.aliexpress.com/item/ESP8266-serial-WIFI-Witty-cloud-Development-Board-ESP-12F-module-MINI-nodemcu/32643464555.html - GPI8_USER, // GPIO00 D3 flash push button on interface board - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_LED1_INV, // GPIO02 D4 Blue Led (0 = On, 1 = Off) on ESP-12F - Link and Power status - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_KEY1, // GPIO04 D2 push button on ESP-12F board - GPI8_USER, // GPIO05 D1 optional sensor - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM2, // GPIO12 D6 RGB LED Green - GPI8_PWM3, // GPIO13 D7 RGB LED Blue - GPI8_USER, // GPIO14 D5 optional sensor - GPI8_PWM1, // GPIO15 D8 RGB LED Red - GPI8_USER, // GPIO16 D0 optional sensor - GPI8_USER // ADC0 A0 Light sensor / Requires USE_ADC_VCC in user_config.h to be disabled - }, - { // YUNSHAN - Yunshan Wifi Relay (ESP8266) - // https://www.ebay.com/p/Esp8266-220v-10a-Network-Relay-WiFi-Module/1369583381 - // Schematics and Info https://ucexperiment.wordpress.com/2016/12/18/yunshan-esp8266-250v-15a-acdc-network-wifi-relay-module/ - 0, // GPIO00 Flash jumper - Module Pin 8 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - Module Pin 2 - GPI8_LED1_INV, // GPIO02 Blue Led (0 = On, 1 = Off) on ESP-12F - Module Pin 7 - Link and Power status - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - Module Pin 3 - GPI8_REL1, // GPIO04 Red Led and Relay (0 = Off, 1 = On) - Module Pin 10 - GPI8_KEY1, // GPIO05 Blue Led and OptoCoupler input - Module Pin 9 - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - 0, 0, 0, 0, 0, 0 - }, - { // MAGICHOME - Magic Home (aka Flux-light) (ESP8266) and Arilux LC10 (ESP8285) - // https://www.aliexpress.com/item/Magic-Home-Mini-RGB-RGBW-Wifi-Controller-For-Led-Strip-Panel-light-Timing-Function-16million-colors/32686853650.html - 0, - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_LED1_INV, // GPIO02 Blue onboard LED - Link and Power status - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_ARIRFRCV, // GPIO04 IR or RF receiver (optional) (Arilux LC10) - GPI8_PWM2, // GPIO05 RGB LED Green - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM3, // GPIO12 RGB LED Blue - GPI8_USER, // GPIO13 RGBW LED White (optional - set to PWM4 for Cold White or Warm White as used on Arilux LC10) - GPI8_PWM1, // GPIO14 RGB LED Red - GPI8_ARIRFSEL, // GPIO15 RF receiver control (Arilux LC10) - 0, 0 - }, - { // LUANIHVIO - ESP8266_HVIO - // https://luani.de/projekte/esp8266-hvio/ - 0, // GPIO00 Flash jumper - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Optional sensor / I2C SDA pad - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_REL1, // GPIO04 Relay 1 (0 = Off, 1 = On) - GPI8_REL2, // GPIO05 Relay 2 (0 = Off, 1 = On) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_SWT1, // GPIO12 External input 1 (0 = On, 1 = Off) - GPI8_SWT2, // GPIO13 External input 2 (0 = On, 1 = Off) - GPI8_USER, // GPIO14 Optional sensor / I2C SCL pad - GPI8_LED1, // GPIO15 Led (1 = On, 0 = Off) - Link and Power status - 0, - GPI8_USER // ADC0 A0 Analog input - }, - { // KMC_70011 - KMC 70011 - // https://www.amazon.com/KMC-Timing-Monitoring-Network-125V-240V/dp/B06XRX2GTQ - GPI8_KEY1, // GPIO00 Button - 0, 0, 0, - GPI8_HLW_CF, // GPIO04 HLW8012 CF power - GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 voltage / current - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL, // GPIO12 HLW8012 SEL (1 = Voltage) - GPI8_LED1_INV, // GPIO13 Green Led - Link and Power status - GPI8_REL1, // GPIO14 Relay - 0, 0, 0 - }, - { // ARILUX_LC01 - Arilux AL-LC01 (ESP8285) - // https://www.banggood.com/nl/ARILUX-AL-LC01-Super-Mini-LED-WIFI-Smart-RGB-Controller-For-RGB-LED-Strip-Light-DC-9-12V-p-1058603.html - // (PwmFrequency 1111Hz) - GPI8_KEY1, // GPIO00 Optional Button - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_ARIRFSEL, // GPIO02 RF receiver control - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_ARIRFRCV, // GPIO04 IR or RF receiver (optional) - GPI8_PWM1, // GPIO05 RGB LED Red - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM2, // GPIO12 RGB LED Green - GPI8_PWM3, // GPIO13 RGB LED Blue - GPI8_USER, // GPIO14 RGBW LED White (optional - set to PWM4 for Cold White or Warm White) - 0, 0, 0 - }, - { // ARILUX_LC11 - Arilux AL-LC11 (ESP8266) - // https://www.banggood.com/nl/ARILUX-AL-LC11-Super-Mini-LED-WIFI-APP-Controller-RF-Remote-Control-For-RGBWW-LED-Strip-DC9-28V-p-1085112.html - // (PwmFrequency 540Hz) - GPI8_KEY1, // GPIO00 Optional Button - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_ARIRFSEL, // GPIO02 RF receiver control - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_PWM2, // GPIO04 RGB LED Green - GPI8_PWM1, // GPIO05 RGB LED Red - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM5, // GPIO12 RGBCW LED Warm - GPI8_PWM4, // GPIO13 RGBW LED Cold - GPI8_PWM3, // GPIO14 RGB LED Blue - GPI8_ARIRFRCV, // GPIO15 RF receiver input - 0, 0 - }, - { // ARILUX_LC06 - Arilux AL-LC06 (ESP8285) - // https://www.banggood.com/ARILUX-AL-LC06-LED-WIFI-Smartphone-Controller-Romote-5-Channels-DC12-24V-For-RGBWW-Strip-light-p-1061476.html - GPI8_KEY1, // GPIO00 Optional Button - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Empty pad - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_USER, // GPIO04 W2 - PWM5 - 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM2, // GPIO12 RGB LED Green - GPI8_PWM3, // GPIO13 RGB LED Blue - GPI8_PWM1, // GPIO14 RGB LED Red - GPI8_USER, // GPIO15 RGBW LED White - 0, 0 - }, - { // ZENGGE_ZF_WF017 - Zenggee ZJ-WF017-A (ESP12S)) - // https://www.ebay.com/p/Smartphone-Android-IOS-WiFi-Music-Controller-for-RGB-5050-3528-LED-Strip-Light/534446632?_trksid=p2047675.l2644 - GPI8_KEY1, // GPIO00 Optional Button - 0, - GPI8_USER, // GPIO02 Empty pad - 0, - GPI8_USER, // GPIO04 W2 - PWM5 - 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM2, // GPIO12 RGB LED Green - GPI8_PWM1, // GPIO13 RGB LED Red - GPI8_PWM3, // GPIO14 RGB LED Blue - 0, 0, 0 - }, - { // SONOFF_POW_R2 - Sonoff Pow R2 (ESP8285 - CSE7766) - GPI8_KEY1, // GPIO00 Button - GPI8_CSE7766_TX, // GPIO01 Serial RXD 4800 baud 8E1 CSE7766 energy sensor - 0, - GPI8_CSE7766_RX, // GPIO03 Serial TXD - 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // BLITZWOLF_BWSHP - BlitzWolf BW-SHP2 and BW-SHP6 (ESP8285 - BL0937 or HJL-01 Energy Monitoring) - // https://www.banggood.com/BlitzWolf-BW-SHP2-Smart-WIFI-Socket-EU-Plug-220V-16A-Work-with-Amazon-Alexa-Google-Assistant-p-1292899.html - // https://www.amazon.de/Steckdose-Homecube-intelligente-Verbrauchsanzeige-funktioniert/dp/B076Q2LKHG/ref=sr_1_fkmr0_1 - // https://www.amazon.de/Intelligente-Stromverbrauch-Fernsteurung-Schaltbare-Energieklasse/dp/B076WZQS4S/ref=sr_1_1 - // https://www.aliexpress.com/store/product/BlitzWolf-BW-SHP6-EU-Plug-Metering-Version-WIFI-Smart-Socket-220V-240V-10A-Work-with-Amazon/1965360_32945504669.html - GPI8_LED1_INV, // GPIO00 Red Led (1 = On, 0 = Off) - Power status - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_LEDLNK_INV, // GPIO02 Blue Led (1 = On, 0 = Off) - Link status - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - 0, - GPI8_HJL_CF, // GPIO05 BL0937 or HJL-01 CF power - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) - GPI8_KEY1, // GPIO13 Button - GPI8_NRG_CF1, // GPIO14 BL0937 or HJL-01 CF1 current / voltage - GPI8_REL1, // GPIO15 Relay (0 = Off, 1 = On) - 0, 0 - }, - { // SHELLY1 - Shelly1 Open Source (ESP8266 - 2MB) - https://shelly.cloud/shelly1-open-source/ - GPI8_USER, // GPIO00 - Can be changed to GPI8_USER, only if Shelly is powered with 12V DC - GPI8_USER, // GPIO01 Serial RXD - Can be changed to GPI8_USER, only if Shelly is powered with 12V DC - 0, - GPI8_USER, // GPIO03 Serial TXD - Can be changed to GPI8_USER, only if Shelly is powered with 12V DC - GPI8_REL1, // GPIO04 Relay (0 = Off, 1 = On) - GPI8_SWT1_NP, // GPIO05 SW pin - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - 0, 0, 0, 0, 0, 0 - }, - { // SHELLY2 - Shelly2 (ESP8266 - 2MB) - https://shelly.cloud/shelly2/ - 0, - GPI8_MCP39F5_TX, // GPIO01 MCP39F501 Serial input - 0, - GPI8_MCP39F5_RX, // GPIO03 MCP39F501 Serial output - GPI8_REL1, // GPIO04 - GPI8_REL2, // GPIO05 - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_SWT1, // GPIO12 - 0, - GPI8_SWT2, // GPIO14 - GPI8_MCP39F5_RST, // GPIO15 MCP39F501 Reset - 0, - 0 - }, - { // PHILIPS - Xiaomi Philips bulb (ESP8266) - 0, 0, 0, 0, 0, 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_PWM2, // GPIO12 cold/warm light - 0, 0, - GPI8_PWM1, // GPIO15 light intensity - 0, 0 - }, - { // NEO_COOLCAM - Neo Coolcam (ESP8266) - // https://www.banggood.com/NEO-COOLCAM-WiFi-Mini-Smart-Plug-APP-Remote-Control-Timing-Smart-Socket-EU-Plug-p-1288562.html?cur_warehouse=CN - 0, 0, 0, 0, - GPI8_LED1_INV, // GPIO04 Red Led (0 = On, 1 = Off) - Link and Power status - 0, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Red Led and Relay (0 = Off, 1 = On) - GPI8_KEY1, // GPIO13 Button - 0, 0, 0, 0 - }, - { // ESP_SWITCH - Michael Haustein 4 channel wall switch (ESP07 = ESP8266) - // Use rules for further actions like - rule on power1#state do publish cmnd/other_device/power %value% endon - GPI8_KEY2, // GPIO00 Button 2 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_REL3_INV, // GPIO02 Yellow Led 3 (0 = On, 1 = Off) - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_KEY1, // GPIO04 Button 1 - GPI8_REL2_INV, // GPIO05 Red Led 2 (0 = On, 1 = Off) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL4_INV, // GPIO12 Blue Led 4 (0 = On, 1 = Off) - GPI8_KEY4, // GPIO13 Button 4 - GPI8_KEY3, // GPIO14 Button 3 - GPI8_LED1, // GPIO15 Optional sensor - GPI8_REL1_INV, // GPIO16 Green Led 1 (0 = On, 1 = Off) - 0 - }, - { // OBI - OBI socket (ESP8266) - https://www.obi.de/hausfunksteuerung/wifi-stecker-schuko/p/2291706 - GPI8_USER, // GPIO00 - GPI8_USER, // GPIO01 Serial RXD - 0, - GPI8_USER, // GPIO03 Serial TXD - GPI8_LED1, // GPIO04 Blue LED - Link and Power status - GPI8_REL1, // GPIO05 (Relay OFF, but used as Relay Switch) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_LED3, // GPIO12 (Relay ON, but set to LOW, so we can switch with GPIO05) - GPI8_USER, // GPIO13 - GPI8_KEY1, // GPIO14 Button - 0, - GPI8_USER, // GPIO16 - GPI8_USER // ADC0 A0 Analog input - }, - { // TECKIN - https://www.amazon.de/gp/product/B07D5V139R - 0, - GPI8_KEY1, // GPIO01 Serial TXD and Button - 0, - GPI8_LED1_INV, // GPIO03 Serial RXD and Red Led (0 = On, 1 = Off) - Power status - GPI8_HJL_CF, // GPIO04 BL0937 or HJL-01 CF power - GPI8_NRG_CF1, // GPIO05 BL0937 or HJL-01 CF1 current / voltage - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) - GPI8_LEDLNK_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link status - GPI8_REL1, // GPIO14 Relay (0 = Off, 1 = On) - 0, 0, 0 - }, - { // APLIC_WDP303075 - Aplic WDP 303075 (ESP8285 - HLW8012 Energy Monitoring) - // https://www.amazon.de/dp/B07CNWVNJ2 - 0, 0, 0, - GPI8_KEY1, // GPIO03 Button - GPI8_HLW_CF, // GPIO04 HLW8012 CF power - GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 current / voltage - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 HLW8012 CF Sel output (0 = Voltage) - GPI8_LED1_INV, // GPIO13 LED (0 = On, 1 = Off) - Link and Power status - GPI8_REL1, // GPIO14 Relay SRU 5VDC SDA (0 = Off, 1 = On ) - 0, 0, 0 - }, - { // TUYA_DIMMER - Tuya MCU device (ESP8266 w/ separate MCU) - // https://www.amazon.com/gp/product/B07CTNSZZ8/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1 - GPI8_USER, // Virtual Button (controlled by MCU) - GPI8_USER, // GPIO01 MCU serial control - GPI8_USER, - GPI8_USER, // GPIO03 MCU serial control - GPI8_USER, - GPI8_USER, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, - GPI8_USER, - GPI8_USER, // GPIO14 Green Led - GPI8_USER, - GPI8_USER, - 0 - }, - { // GOSUND - https://www.amazon.de/gp/product/B0777BWS1P - 0, - GPI8_LEDLNK_INV, // GPIO01 Serial RXD and LED1 (blue) inv - Link status - 0, - GPI8_KEY1, // GPIO03 Serial TXD and Button - GPI8_HJL_CF, // GPIO04 BL0937 or HJL-01 CF power - GPI8_NRG_CF1, // GPIO05 BL0937 or HJL-01 CF1 current / voltage - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) - GPI8_LED1_INV, // GPIO13 LED2 (red) inv - Power status - GPI8_REL1, // GPIO14 Relay (0 = Off, 1 = On) - 0, 0, 0 - }, - { // ARMTRONIX_DIMMERS - ARMTRONIX Dimmer, one or two channel (ESP8266 w/ separate MCU dimmer) - // https://www.tindie.com/products/Armtronix/wifi-ac-dimmer-two-triac-board/ - // https://www.tindie.com/products/Armtronix/wifi-ac-dimmer-esp8266-one-triac-board-alexaecho/ - GPI8_USER, - GPI8_TXD, // GPIO01 MCU serial control - GPI8_USER, - GPI8_RXD, // GPIO03 MCU serial control - GPI8_USER, - GPI8_USER, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, - GPI8_USER, - GPI8_USER, - GPI8_USER, - GPI8_USER, - 0 - }, - { // SK03_TUYA - Outdoor smart plug with power monitoring HLW8012 chip - https://www.amazon.com/gp/product/B07CG7MBPV - GPI8_KEY1, // GPIO00 Button - 0, 0, 0, - GPI8_HLW_CF, // GPIO04 HLW8012 CF power - GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 current / voltage - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 HLW8012 CF Sel output (0 = Voltage) - GPI8_LED1_INV, // GPIO13 Red Led (0 = On, 1 = Off) - Power status - GPI8_LEDLNK_INV, // GPIO14 Blue Led (0 = On, 1 = Off) - Link status - GPI8_REL1, // GPIO15 Relay (0 = Off, 1 = On) - 0, 0 - }, - { // PS_16_DZ - PS-16-DZ Dimmer (ESP8266 w/ separate Nuvoton MCU dimmer) - // https://www.aliexpress.com/item/SM-Smart-WIFI-Wall-Dimmer-Light-Switch-US-Ewelink-APP-Remote-Control-Wi-Fi-Wirele-Work/32871151902.html - GPI8_USER, - GPI8_TXD, // GPIO01 MCU serial control - GPI8_USER, - GPI8_RXD, // GPIO03 MCU serial control - GPI8_USER, - GPI8_USER, - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, - GPI8_LED1, // GPIO13 WiFi LED - Link and Power status - GPI8_USER, - GPI8_USER, - GPI8_USER, - 0 - }, - { // TECKIN_US - Teckin SP20 US with Energy Monitoring - // https://www.amazon.com/Outlet-Compatible-Monitoring-Function-Required/dp/B079Q5W22B - // https://www.amazon.com/Outlet-ZOOZEE-Monitoring-Function-Compatible/dp/B07J2LR5KN - GPI8_LED1_INV, // GPIO00 Red Led (1 = On, 0 = Off) - Power status - 0, - GPI8_LEDLNK_INV, // GPIO02 Blue Led (1 = On, 0 = Off) - Link status - 0, - GPI8_REL1, // GPIO04 Relay (0 = Off, 1 = On) - GPI8_HJL_CF, // GPIO05 BL0937 or HJL-01 CF power - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) - GPI8_KEY1, // GPIO13 Button - GPI8_NRG_CF1, // GPIO14 BL0937 or HJL-01 CF1 current / voltage - 0, 0, 0 - }, - { // MANZOKU_EU_4 - "MANZOKU" labeled power strip, EU version - // https://www.amazon.de/Steckdosenleiste-AOFO-Mehrfachsteckdose-Überspannungsschutz-Sprachsteuerung/dp/B07GBSD11P/ - // https://www.amazon.de/Steckdosenleiste-Geekbes-USB-Anschluss-Kompatibel-gesteuert/dp/B078W23BW9/ - 0, // GPIO00 - 0, // GPIO01 Serial RXD - 0, - GPI8_KEY1, // GPIO03 Serial TXD + Button - GPI8_REL2, // GPIO04 Relay 2 - GPI8_REL1, // GPIO05 Relay 1 - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL3, // GPIO12 Relay 3 - GPI8_REL4, // GPIO13 Relay 4 - GPI8_USER, // GPIO14 - 0, - GPI8_USER, // GPIO16 - 0 - }, - { // OBI2 - OBI socket (ESP8266) - https://www.obi.de/hausfunksteuerung/wifi-stecker-schuko-2-stueck-weiss/p/4077673 - 0, // GPIO00 - 0, // GPIO01 Serial RXD - 0, - 0, // GPIO03 Serial TXD - GPI8_REL1, // GPIO04 Relay 1 - GPI8_KEY1, // GPIO05 Button - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_LEDLNK_INV, // GPIO12 Green LED - Link status - GPI8_LED1, // GPIO13 Red LED - Power status - 0, 0, 0, 0 - }, - { // YTF_IR_BRIDGE - https://www.aliexpress.com/item/Tuya-universal-Smart-IR-Hub-remote-control-Voice-Control-AC-TV-Work-With-Alexa-Google-Home/32951202513.html - GPI8_USER, // GPIO00 - GPI8_USER, // GPIO01 Serial RXD - GPI8_USER, // GPIO02 - GPI8_USER, // GPIO03 Serial TXD - GPI8_LED1_INV, // GPIO04 Blue Led - Link status - GPI8_IRRECV, // GPIO05 IR Receiver - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - 0, // GPIO12 - GPI8_KEY1, // GPIO13 Button - GPI8_IRSEND, // GPIO14 IR Transmitter - 0, 0, 0 - }, - { // DIGOO - Digoo DG-SP202 - // https://www.banggood.com/DIGOO-DG-SP202-Dual-EU-Plug-Smart-WIFI-Socket-Individual-Controllable-Energy-Monitor-Remote-Control-Timing-Smart-Home-Outlet-let-p-1375323.html - GPI8_KEY1, // GPIO00 Button1 - 0, // GPIO01 Serial RXD - 0, // GPIO02 - 0, // GPIO03 Serial TXD - GPI8_HJL_CF, // GPIO04 BL0937 or HJL-01 CF power - GPI8_NRG_CF1, // GPIO05 BL0937 or HJL-01 CF1 current / voltage - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 or HJL-01 Sel output (0 = Voltage) - GPI8_LED1, // GPIO13 Blue Leds - Link Status - GPI8_REL2, // GPIO14 Relay2 (0 = Off, 1 = On) and Red Led - GPI8_REL1, // GPIO15 Relay1 (0 = Off, 1 = On) and Red Led - GPI8_KEY2_NP, // GPIO16 Button2, externally pulled up - 0 - }, - { // KA10 - SMANERGY KA10 (ESP8285 - BL0937 Energy Monitoring) - https://www.amazon.es/dp/B07MBTCH2Y - 0, // GPIO00 - GPI8_LEDLNK_INV, // GPIO01 Blue LED - Link status - 0, // GPIO02 - GPI8_KEY1, // GPIO03 Button - GPI8_HJL_CF, // GPIO04 BL0937 CF power - GPI8_NRG_CF1, // GPIO05 BL0937 CF1 voltage / current - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 Sel output (1 = Voltage) - GPI8_LED1, // GPIO13 Red LED - Power status - GPI8_REL1, // GPIO14 Relay 1 - 0, 0, 0 - }, - { // ZX2820 - GPI8_KEY1, // GPIO00 Button - 0, 0, 0, - GPI8_HLW_CF, // GPIO04 HLW8012 CF power - GPI8_NRG_CF1, // GPIO05 HLW8012 CF1 voltage / current - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 HLW8012 SEL (0 = Voltage) - GPI8_LED1_INV, // GPIO13 Green Led - Link and Power status - GPI8_REL1, // GPIO14 Relay - 0, 0, 0 - }, - { // MI_DESK_LAMP - Mi LED Desk Lamp - https://www.mi.com/global/smartlamp/ - 0, 0, - GPI8_KEY1, // GPIO02 Button - 0, - GPI8_PWM1, // GPIO04 Cold White - GPI8_PWM2, // GPIO05 Warm White - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_ROT1A, // GPIO12 Rotary switch A pin - GPI8_ROT1B, // GPIO13 Rotary switch B pin - 0, 0, 0, 0 - }, - { // SP10 - Tuya SP10 (BL0937 Energy Monitoring) - // https://www.aliexpress.com/item/Smart-Mini-WiFi-Plug-Outlet-Switch-Work-With-ForEcho-Alexa-Google-Home-Remote-EU-Smart-Socket/32963670423.html - 0, // GPIO00 - GPI8_PWM1, // GPIO01 Nightlight - 0, // GPIO02 - GPI8_KEY1, // GPIO03 Button - GPI8_HJL_CF, // GPIO04 BL0937 CF power - GPI8_NRG_CF1, // GPIO05 BL0937 CF1 voltage / current - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_NRG_SEL_INV, // GPIO12 BL0937 Sel output (1 = Voltage) - GPI8_LED1, // GPIO13 Blue LED - Link status - GPI8_REL1, // GPIO14 Relay and red LED - 0, 0, 0 - }, - { // WAGA - WAGA life CHCZ02MB (HJL-01 Energy Monitoring) - // https://www.ebay.com/itm/332595697006 - GPI8_LED1_INV, // GPIO00 Red LED - 0, // GPIO01 Serial RXD - 0, // GPIO02 - GPI8_NRG_SEL_INV, // GPIO03 HJL-01 Sel output (1 = Voltage) - 0, // GPIO04 - GPI8_HJL_CF, // GPIO05 HJL-01 CF power - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Relay - GPI8_KEY1, // GPIO13 Button - GPI8_NRG_CF1, // GPIO14 HJL-01 CF1 voltage / current - GPI8_LEDLNK_INV, // GPIO15 Blue LED - Link status - 0, 0 - }, - { // SYF05 - Sunyesmart SYF05 (a.k.a. Fcmila) = TYWE3S + SM16726 - // Also works with Merkury 904 RGBW Bulbs with 13 set to GPI8_SM16716_SEL - // https://www.flipkart.com/fc-mila-bxav-xs-ad-smart-bulb/p/itmf85zgs45fzr7n - // https://docs.tuya.com/en/hardware/WiFi-module/wifi-e3s-module.html - // http://www.datasheet-pdf.com/PDF/SM16716-Datasheet-Sunmoon-932771 - GPI8_USER, // GPIO00 N.C. - 0, // GPIO01 Serial RXD - GPI8_USER, // GPIO02 N.C. - 0, // GPIO03 Serial TXD - GPI8_SM16716_CLK, // GPIO04 SM16716 Clock - GPI8_PWM1, // GPIO05 White - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 Alt. White on some devices - GPI8_USER, // GPIO13 SM16716 Enable on some devices - GPI8_SM16716_DAT, // GPIO14 SM16716 Data - 0, // GPIO15 wired to GND - GPI8_USER, // GPIO16 N.C. - GPI8_USER // ADC0 A0 Analog input - }, - { // EXS_DIMMER - EX-Store WiFi Dimmer v4, two channel (ESP8266 w/ separate MCU dimmer) - // https://ex-store.de/2-Kanal-RS232-WiFi-WLan-Dimmer-Modul-V4-fuer-Unterputzmontage-230V-3A - // https://ex-store.de/2-Kanal-RS232-WiFi-WLan-Dimmer-Modul-V4-fuer-Unterputzmontage-230V-3A-ESP8266-V12-Stift-und-Buchsenleisten - 0, - GPI8_TXD, // GPIO01 MCU serial control - GPI8_LEDLNK, // GPIO02 LED Link - GPI8_RXD, // GPIO03 MCU serial control - GPI8_USER, // GPIO04 - GPI8_USER, // GPIO05 - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 - GPI8_EXS_ENABLE, // GPIO13 EXS MCU Enable - GPI8_USER, // GPIO14 - 0, // GPIO15 - 0, 0 - }, - { // PWM_DIMMER - Support for Martin Jerry/acenx/Tessan/NTONPOWER SD0x PWM - // dimmer switches. The brightness of the load for these dimmers is - // controlled by a PWM GPIO pin. There are typically power, up & down - // buttons and 4 LED's. Examples are: - // https://www.amazon.com/dp/B07FXYSVR1 - // https://www.amazon.com/dp/B07V26Q3VD - // https://www.amazon.com/dp/B07K67D43J - // https://www.amazon.com/dp/B07TTGFWFM - GPI8_KEY3, // GPIO00 Up button - GPI8_KEY2, // GPIO01 Down button - 0, // GPIO02 - GPI8_LED4_INV, // GPIO03 Level 5 LED - GPI8_LEDLNK_INV, // GPIO04 LED Link - GPI8_LED3_INV, // GPIO05 Level 4 LED - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_LED2_INV, // GPIO12 Level 3 LED - GPI8_PWM1, // GPIO13 Dimmer PWM - GPI8_LED1_INV, // GPIO12 Level 2 LED - GPI8_KEY1_INV, // GPIO15 Power button - GPI8_REL1_INV, // GPIO16 Power relay/Level 1 LED - 0 - }, - { // SONOFF_ZB_BRIDGE - Sonoff Zigbee Bridge (ESP8266) - GPI8_LED1_INV, // GPIO00 Green Led (0 = On, 1 = Off) - Traffic between ESP and EFR - GPI8_ZIGBEE_TX, // GPIO01 Zigbee Serial control - 0, // GPIO02 - GPI8_ZIGBEE_RX, // GPIO03 Zigbee Serial control - GPI8_ZIGBEE_RST, // GPIO04 Zigbee Reset - 0, // GPIO05 EFR32 Bootloader mode (drive Low for Gecko Bootloader, inactive or high for Zigbee EmberZNet) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_I2C_SDA, // GPIO12 I2C SDA - connected to 512KB EEPROM - GPI8_LEDLNK_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link status - GPI8_I2C_SCL, // GPIO14 I2C SCL - connected to 512KB EEPROM - 0, // GPIO15 connected to IO15 pad, also used for logging - GPI8_KEY1, // GPIO16 Button - 0 - } -}; - -/*********************************************************************************************\ - * Templates with 14 usable pins (ESP8285) -\*********************************************************************************************/ - -const mytmplt8285 kModules8285[TMP_MAXMODULE_8266 - TMP_WEMOS] PROGMEM = { - { // WEMOS - Any ESP8266/ESP8285 device like WeMos and NodeMCU hardware (ESP8266) - GPI8_USER, // GPIO00 D3 Wemos Button Shield - GPI8_USER, // GPIO01 TX Serial RXD - GPI8_USER, // GPIO02 D4 Wemos DHT Shield - GPI8_USER, // GPIO03 RX Serial TXD and Optional sensor - GPI8_USER, // GPIO04 D2 Wemos I2C SDA - GPI8_USER, // GPIO05 D1 Wemos I2C SCL / Wemos Relay Shield (0 = Off, 1 = On) / Wemos WS2812B RGB led Shield - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - GPI8_USER, // GPIO09 (SD_DATA2 Flash QIO or ESP8285) - GPI8_USER, // GPIO10 (SD_DATA3 Flash QIO or ESP8285) - // GPIO11 (SD_CMD Flash) - GPI8_USER, // GPIO12 D6 - GPI8_USER, // GPIO13 D7 - GPI8_USER, // GPIO14 D5 - GPI8_USER, // GPIO15 D8 - GPI8_USER, // GPIO16 D0 Wemos Wake - GPI8_USER // ADC0 A0 Analog input - }, - { // SONOFF_4CH - Sonoff 4CH (ESP8285) - GPI8_KEY1, // GPIO00 Button 1 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Optional sensor - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_REL3, // GPIO04 Sonoff 4CH Red Led and Relay 3 (0 = Off, 1 = On) - GPI8_REL2, // GPIO05 Sonoff 4CH Red Led and Relay 2 (0 = Off, 1 = On) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - GPI8_KEY2, // GPIO09 Button 2 - GPI8_KEY3, // GPIO10 Button 3 - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Red Led and Relay 1 (0 = Off, 1 = On) - Link and Power status - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - GPI8_KEY4, // GPIO14 Button 4 - GPI8_REL4, // GPIO15 Red Led and Relay 4 (0 = Off, 1 = On) - 0, 0 - }, - { // SONOFF_T12 - Sonoff T1 2CH (ESP8285) - GPI8_KEY1, // GPIO00 Button 1 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Optional Sensor (J3 Pin 5) - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - 0, - GPI8_REL2, // GPIO05 Blue Led and Relay 2 (0 = Off, 1 = On) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - GPI8_KEY2, // GPIO09 Button 2 - 0, // GPIO10 - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Blue Led and Relay 1 (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // SONOFF_T13 - Sonoff T1 3CH (ESP8285) - GPI8_KEY1, // GPIO00 Button 1 - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - GPI8_USER, // GPIO02 Optional Sensor (J3 Pin 5) - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - GPI8_REL3, // GPIO04 Blue Led and Relay 3 (0 = Off, 1 = On) - GPI8_REL2, // GPIO05 Blue Led and Relay 2 (0 = Off, 1 = On) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - GPI8_KEY2, // GPIO09 Button 2 - GPI8_KEY3, // GPIO10 Button 3 - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Blue Led and Relay 1 (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // SONOFF_DUAL_R2 - Sonoff Dual R2 (ESP8285) - GPI8_USER, // GPIO00 Button 0 on header (0 = On, 1 = Off) - GPI8_USER, // GPIO01 Serial RXD and Optional sensor - 0, - GPI8_USER, // GPIO03 Serial TXD and Optional sensor - 0, - GPI8_REL2, // GPIO05 Relay 2 (0 = Off, 1 = On) - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - GPI8_USER, // GPIO09 Button 1 on header (0 = On, 1 = Off) - GPI8_KEY1, // GPIO10 Button on casing - // GPIO11 (SD_CMD Flash) - GPI8_REL1, // GPIO12 Relay 1 (0 = Off, 1 = On) - GPI8_LED1_INV, // GPIO13 Blue Led (0 = On, 1 = Off) - Link and Power status - 0, 0, 0, 0 - }, - { // SONOFF_IFAN03 - Sonoff iFan03 (ESP8285) - GPI8_KEY1, // GPIO00 WIFI_KEY0 Button 1 - GPI8_TXD, // GPIO01 ESP_TXD Serial RXD connection to P0.5 of RF microcontroller - 0, // GPIO02 ESP_LOG - GPI8_RXD, // GPIO03 ESP_RXD Serial TXD connection to P0.4 of RF microcontroller - 0, // GPIO04 DEBUG_RX - 0, // GPIO05 DEBUG_TX - // GPIO06 (SD_CLK Flash) - // GPIO07 (SD_DATA0 Flash QIO/DIO/DOUT) - // GPIO08 (SD_DATA1 Flash QIO/DIO/DOUT) - GPI8_REL1_INV, // GPIO09 WIFI_O0 Relay 1 (0 = Off, 1 = On) controlling the light - GPI8_BUZZER_INV, // GPIO10 WIFI_O4 Buzzer (0 = Off, 1 = On) - // GPIO11 (SD_CMD Flash) - GPI8_REL3, // GPIO12 WIFI_O2 Relay 3 (0 = Off, 1 = On) controlling the fan - GPI8_LED1_INV, // GPIO13 WIFI_CHK Blue Led on PCA (0 = On, 1 = Off) - Link and Power status - GPI8_REL2, // GPIO14 WIFI_O1 Relay 2 (0 = Off, 1 = On) controlling the fan - GPI8_REL4, // GPIO15 WIFI_O3 Relay 4 (0 = Off, 1 = On) controlling the fan - 0, 0 - } -}; - -#endif // ESP8266 - -#ifdef ESP32 -/********************************************************************************************\ - * ESP32 Module templates -\********************************************************************************************/ - -#define USER_MODULE 255 - -// Supported hardware modules -enum SupportedModules { - WEMOS, - BLUETOOTH, - ESP32_CAM_AITHINKER, - ODROID_GO, - ESP32_SOLO, - WT32_ETH01, - TTGO_WATCH, - M5STACK_CORE2, - MAXMODULE }; - -const char kModuleNames[] PROGMEM = - "ESP32-DevKit|" -#ifdef USE_BLUETOOTH - "ESP32-BLE|" -#endif // USE_BLUETOOTH -#ifdef USE_WEBCAM - "ESP32-Cam|" -#endif // USE_WEBCAM -#ifdef USE_ODROID_GO - "Odroid Go|" -#endif // USE_ODROID_GO -// "ESP32-Solo|" -// "WT32-Eth01|" -// "TTGO Watch|" -#ifdef USE_M5STACK_CORE2 - "M5Stack Core2|" -#endif // USE_M5STACK_CORE2 - ; - -// Default module settings -const uint8_t kModuleNiceList[] PROGMEM = { - WEMOS, -#ifdef USE_BLUETOOTH - ESP32_BLUETOOTH, -#endif // USE_BLUETOOTH -#ifdef USE_WEBCAM - ESP32_CAM_AITHINKER, -#endif // USE_WEBCAM -#ifdef USE_ODROID_GO - ODROID_GO, -#endif // USE_ODROID_GO -// ESP32_SOLO, -// WT32_ETH01, -// TTGO_WATCH, -#ifdef USE_M5STACK_CORE2 - M5STACK_CORE2, -#endif // USE_M5STACK_CORE2 -}; - -const mytmplt kModules[] PROGMEM = -{ - { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) - AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK - AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 - AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 - AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 - AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - AGPIO(GPIO_USER), // 5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK - // 6 IO GPIO6, Flash CLK - // 7 IO GPIO7, Flash D0 - // 8 IO GPIO8, Flash D1 - AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD - AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD - // 11 IO GPIO11, Flash CMD - AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) - AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) - AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT - AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 - AGPIO(GPIO_USER), // 18 IO GPIO18, VSPICLK, HS1_DATA7 - AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 - 0, // 20 - AGPIO(GPIO_USER), // 21 IO GPIO21, VSPIHD, EMAC_TX_EN - AGPIO(GPIO_USER), // 22 IO LED GPIO22, VSPIWP, U0RTS, EMAC_TXD1 - AGPIO(GPIO_USER), // 23 IO GPIO23, VSPID, HS1_STROBE - 0, // 24 - AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 - AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 - AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 - AGPIO(GPIO_USER), // 32 IO GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 - AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 - AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 - AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 - AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 - 0, // 37 NO PULLUP - 0, // 38 NO PULLUP - AGPIO(GPIO_USER), // 39 I NO PULLUP GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3 - 0 // Flag - }, - -#ifdef USE_BLUETOOTH - { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) - AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK - AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 - AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 - AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 - AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - AGPIO(GPIO_USER), // 5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK - // 6 IO GPIO6, Flash CLK - // 7 IO GPIO7, Flash D0 - // 8 IO GPIO8, Flash D1 - AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD - AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD - // 11 IO GPIO11, Flash CMD - AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) - AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) - AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT - AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 - AGPIO(GPIO_USER), // 18 IO GPIO18, VSPICLK, HS1_DATA7 - AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 - 0, // 20 - AGPIO(GPIO_USER), // 21 IO GPIO21, VSPIHD, EMAC_TX_EN - AGPIO(GPIO_USER), // 22 IO LED GPIO22, VSPIWP, U0RTS, EMAC_TXD1 - AGPIO(GPIO_USER), // 23 IO GPIO23, VSPID, HS1_STROBE - 0, // 24 - AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 - AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 - AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 - AGPIO(GPIO_USER), // 32 IO GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 - AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 - AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 - AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 - AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 - 0, // 37 NO PULLUP - 0, // 38 NO PULLUP - AGPIO(GPIO_USER), // 39 I NO PULLUP GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3 - 0 // Flag - }, -#endif // USE_BLUETOOTH - -#ifdef USE_WEBCAM - { // ESP32_CAM_AITHINKER - Any ESP32 device with webcam (ESP32) - AGPIO(GPIO_WEBCAM_XCLK), // 0 (I)O GPIO0, CAM_XCLK - AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 - AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 - AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 - AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - AGPIO(GPIO_WEBCAM_DATA), // 5 IO GPIO5, CAM_DATA1 - // 6 IO GPIO6, Flash CLK - // 7 IO GPIO7, Flash D0 - // 8 IO GPIO8, Flash D1 - AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD - AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD - // 11 IO GPIO11, Flash CMD - AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) - AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) - AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT - AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 - AGPIO(GPIO_WEBCAM_DATA) +1, // 18 IO GPIO18, CAM_DATA2 - AGPIO(GPIO_WEBCAM_DATA) +2, // 19 IO GPIO19, CAM_DATA3 - 0, // 20 - AGPIO(GPIO_WEBCAM_DATA) +3, // 21 IO GPIO21, CAM_DATA4 - AGPIO(GPIO_WEBCAM_PCLK), // 22 IO LED GPIO22, CAM_PCLK - AGPIO(GPIO_WEBCAM_HREF), // 23 IO GPIO23, CAM_HREF - 0, // 24 - AGPIO(GPIO_WEBCAM_VSYNC), // 25 IO GPIO25, CAM_VSYNC - AGPIO(GPIO_WEBCAM_SIOD), // 26 IO GPIO26, CAM_SIOD - AGPIO(GPIO_WEBCAM_SIOC), // 27 IO GPIO27, CAM_SIOC - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 - AGPIO(GPIO_WEBCAM_PWDN), // 32 IO GPIO32, CAM_PWDN - AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 - AGPIO(GPIO_WEBCAM_DATA) +6, // 34 I NO PULLUP GPIO34, CAM_DATA7 - AGPIO(GPIO_WEBCAM_DATA) +7, // 35 I NO PULLUP GPIO35, CAM_DATA8 - AGPIO(GPIO_WEBCAM_DATA) +4, // 36 I NO PULLUP GPIO36, CAM_DATA5 - 0, // 37 NO PULLUP - 0, // 38 NO PULLUP - AGPIO(GPIO_WEBCAM_DATA) +5, // 39 I NO PULLUP GPIO39, CAM_DATA6 - 0 // Flag - }, -#endif // USE_WEBCAM -#ifdef USE_ODROID_GO - { // ODROID_GO - (ESP32) - AGPIO(GPIO_KEY1), // 0 (I)O GPIO0, BTN-VOLUME - AGPIO(GPIO_TXD), // 1 IO TXD0 GPIO1, TXD0 - AGPIO(GPIO_LEDLNK), // 2 IO GPIO2, STATUS LED - AGPIO(GPIO_RXD), // 3 IO RXD0 GPIO3, RXD0 - AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - AGPIO(GPIO_ILI9341_CS), // 5 IO GPIO5, VSPI_CS0_LCD - // 6 IO GPIO6, Flash CLK - // 7 IO GPIO7, Flash D0 - // 8 IO GPIO8, Flash D1 - 0, // 9 IO GPIO9, Flash D2, U1RXD - 0, // 10 IO GPIO10, Flash D3, U1TXD - // 11 IO GPIO11, Flash CMD - AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) - AGPIO(GPIO_KEY1) +1, // 13 IO GPIO13, BTN-MENU - AGPIO(GPIO_PWM1), // 14 IO GPIO14, LCD Backlight - AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) - AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT - AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 - AGPIO(GPIO_SPI_CLK), // 18 IO GPIO18, VSPI_CLK - AGPIO(GPIO_SPI_MISO), // 19 IO GPIO19, VSPI_MISO - 0, // 20 - AGPIO(GPIO_ILI9341_DC), // 21 IO GPIO21, SPI_DC_LCD - 0, // 22 IO LED GPIO22, VSPI_CS1_TFLASH - AGPIO(GPIO_SPI_MOSI), // 23 IO GPIO23, VSPI_MOSI - 0, // 24 - 0, // 25 IO GPIO25, DAC_1 (PAM8304A) - 0, // 26 IO GPIO26, DAC_2 (PAM8304A) - AGPIO(GPIO_KEY1) +2, // 27 IO GPIO27, BTN-SELECT - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 - AGPIO(GPIO_SWT1) +4, // 32 IO GPIO32, BTN-A - AGPIO(GPIO_SWT1) +5, // 33 IO GPIO33, BTN-B - AGPIO(GPIO_ADC_JOY), // 34 I NO PULLUP GPIO34, JOY-X (LEFT-RIGHT) - AGPIO(GPIO_ADC_JOY) +1, // 35 I NO PULLUP GPIO35, JOY-Y (UP-DOWN) - AGPIO(GPIO_ADC_RANGE) +2, // 36 I NO PULLUP GPIO36, SENSOR_VP (BATTERY CARGER) - 0, // 37 NO PULLUP - 0, // 38 NO PULLUP - AGPIO(GPIO_KEY1) +3, // 39 I NO PULLUP GPIO39, BTN-START - 0 // Flag - }, -#endif // USE_ODROID_GO -#ifdef USE_M5STACK_CORE2 - { // M5STACK CORE2 - (ESP32) - AGPIO(GPIO_USER), // 0 (I)O GPIO0, SPKR_LRCK - AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD - AGPIO(GPIO_USER), // 2 IO GPIO2, SPKR_DATA - AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD - 0, // 4 IO GPIO4, SPI_CS_CARD - 0, // 5 IO GPIO5, SPI_CS_LCD - // 6 IO GPIO6, Flash CLK - // 7 IO GPIO7, Flash D0 - // 8 IO GPIO8, Flash D1 - 0, // 9 IO GPIO9, Flash D2, PSRAM_D3 - 0, // 10 IO GPIO10, Flash D3, PSRAM_D2 - // 11 IO GPIO11, Flash CMD - 0, // 12 (I)O GPIO12, SPKR_CLK - AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - 0, // 15 (I)O GPIO15, SPI_DC_LCD - 0, // 16 IO GPIO16, PSRAM_CS - 0, // 17 IO GPIO17, PSRAM_CLK - AGPIO(GPIO_SPI_CLK), // 18 IO GPIO18, SPI_CLK - AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 - 0, // 20 - 0, // 21 IO GPIO21, I2C_SDA_INTERNAL - 0, // 22 IO LED GPIO22, I2C_SCL_INTERNAL - AGPIO(GPIO_SPI_MOSI), // 23 IO GPIO23, SPI_MOSI - 0, // 24 - AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 - AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 - AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 - AGPIO(GPIO_I2C_SDA), // 32 IO GPIO32, I2C_SDA - AGPIO(GPIO_I2C_SCL), // 33 IO GPIO33, I2C_SCL - AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 - AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 - AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 - 0, // 37 NO PULLUP - AGPIO(GPIO_SPI_MISO), // 38 NO PULLUP GPIO38, SPI_MISO - 0, // 39 I NO PULLUP GPIO39, INT_TOUCHPAD - 0 // Flag - } -#endif // USE_M5STACK_CORE2 -}; - -/*********************************************************************************************\ - Known templates - -{"NAME":"AITHINKER CAM","GPIO":[4992,1,1,1,1,5088,1,1,1,1,1,1,1,1,5089,5090,0,5091,5184,5152,0,5120,5024,5056,0,0,0,0,4928,1,5094,5095,5092,0,0,5093],"FLAG":0,"BASE":1} -{"NAME":"Olimex ESP32-PoE","GPIO":[1,1,1,1,1,1,0,0,5536,1,1,1,1,0,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} -{"NAME":"wESP32","GPIO":[1,1,1,1,1,1,0,0,0,1,1,1,5568,5600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1} -{"NAME":"Denky (Teleinfo)","GPIO":[1,1,1,1,5664,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1376,1,1,0,0,0,0,1,5632,1,1,1,0,0,1],"FLAG":0,"BASE":1} - -\*********************************************************************************************/ - -#endif // ESP32 - -#endif // _TASMOTA_TEMPLATE_H_ From 9b026fb96c2fafff0793a110eea22c9a377953be Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:53:37 +0100 Subject: [PATCH 12/41] Update tasmota_template.h --- tasmota/tasmota_template.h | 53 -------------------------------------- 1 file changed, 53 deletions(-) diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index c7325188a..98567ca42 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -2354,7 +2354,6 @@ enum SupportedModules { WT32_ETH01, TTGO_WATCH, M5STACK_CORE2, - BLUETOOTH, MAXMODULE }; // Default module settings @@ -2378,9 +2377,6 @@ const uint8_t kModuleNiceList[] PROGMEM = { #ifdef USE_M5STACK_CORE2 M5STACK_CORE2, #endif // USE_M5STACK_CORE2 -#ifdef USE_BLUETOOTH - BLUETOOTH, -#endif // USE_BLUETOOTH }; const char kModuleNames[] PROGMEM = @@ -2403,9 +2399,6 @@ const char kModuleNames[] PROGMEM = #ifdef USE_M5STACK_CORE2 "M5Stack Core2|" #endif // USE_M5STACK_CORE2 -#ifdef USE_BLUETOOTH - "ESP32-BLE|" -#endif // USE_BLUETOOTH ; const mytmplt kModules[] PROGMEM = { @@ -2550,52 +2543,6 @@ const mytmplt kModules[] PROGMEM = { // }, #endif // USE_ESP32_SOLO -#ifdef USE_BLUETOOTH - { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) - AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK - AGPIO(GPIO_USER), // 1 IO TXD0 GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 - AGPIO(GPIO_USER), // 2 IO GPIO2, ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 - AGPIO(GPIO_USER), // 3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 - AGPIO(GPIO_USER), // 4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER - AGPIO(GPIO_USER), // 5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK - // 6 IO GPIO6, Flash CLK - // 7 IO GPIO7, Flash D0 - // 8 IO GPIO8, Flash D1 - AGPIO(GPIO_USER), // 9 IO GPIO9, Flash D2, U1RXD - AGPIO(GPIO_USER), // 10 IO GPIO10, Flash D3, U1TXD - // 11 IO GPIO11, Flash CMD - AGPIO(GPIO_USER), // 12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) - AGPIO(GPIO_USER), // 13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER - AGPIO(GPIO_USER), // 14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 - AGPIO(GPIO_USER), // 15 (I)O GPIO15, ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 (If driven Low, silences boot messages from normal boot. Has internal pull-up, so unconnected = High = normal output.) - AGPIO(GPIO_USER), // 16 IO GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT - AGPIO(GPIO_USER), // 17 IO GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 - AGPIO(GPIO_USER), // 18 IO GPIO18, VSPICLK, HS1_DATA7 - AGPIO(GPIO_USER), // 19 IO GPIO19, VSPIQ, U0CTS, EMAC_TXD0 - 0, // 20 - AGPIO(GPIO_USER), // 21 IO GPIO21, VSPIHD, EMAC_TX_EN - AGPIO(GPIO_USER), // 22 IO LED GPIO22, VSPIWP, U0RTS, EMAC_TXD1 - AGPIO(GPIO_USER), // 23 IO GPIO23, VSPID, HS1_STROBE - 0, // 24 - AGPIO(GPIO_USER), // 25 IO GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 - AGPIO(GPIO_USER), // 26 IO GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 - AGPIO(GPIO_USER), // 27 IO GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV - 0, // 28 - 0, // 29 - 0, // 30 - 0, // 31 - AGPIO(GPIO_USER), // 32 IO GPIO32, XTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9 - AGPIO(GPIO_USER), // 33 IO GPIO33, XTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8 - AGPIO(GPIO_USER), // 34 I NO PULLUP GPIO34, ADC1_CH6, RTC_GPIO4 - AGPIO(GPIO_USER), // 35 I NO PULLUP GPIO35, ADC1_CH7, RTC_GPIO5 - AGPIO(GPIO_USER), // 36 I NO PULLUP GPIO36, SENSOR_VP, ADC_H, ADC1_CH0, RTC_GPIO0 - 0, // 37 NO PULLUP - 0, // 38 NO PULLUP - AGPIO(GPIO_USER), // 39 I NO PULLUP GPIO39, SENSOR_VN, ADC1_CH3, ADC_H, RTC_GPIO3 - 0 // Flag - }, -#endif // USE_BLUETOOTH - #ifdef USE_WT32_ETH01 { // WT32_ETH01 - (ESP32) 0, // 0 (I)O GPIO0, Ethernet EMAC_REF_CLK From 2a9a42a7536fa7b8170054d42cce137e8c81f807 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 11 Feb 2021 17:06:47 +0100 Subject: [PATCH 13/41] Update tasmota_configurations_ESP32.h --- tasmota/tasmota_configurations_ESP32.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tasmota/tasmota_configurations_ESP32.h b/tasmota/tasmota_configurations_ESP32.h index d3641e862..951d63e41 100644 --- a/tasmota/tasmota_configurations_ESP32.h +++ b/tasmota/tasmota_configurations_ESP32.h @@ -128,18 +128,17 @@ #define CODE_IMAGE_STR "bluetooth" #undef MODULE -#define MODULE BLUETOOTH // [Module] Select default module from tasmota_template.h +#define MODULE WEMOS // [Module] Select default module from tasmota_template.h #undef FALLBACK_MODULE -#define FALLBACK_MODULE BLUETOOTH // [Module2] Select default module on fast reboot where USER_MODULE is user template +#define FALLBACK_MODULE WEMOS // [Module2] Select default module on fast reboot where USER_MODULE is user template -#define USE_BLUETOOTH // Add support for BLUETOOTH #define USE_UFILESYS #define USE_SDCARD #define GUI_TRASH_FILE #define USE_ADC #define USE_BLE_ESP32 // Enable new BLE driver #define USE_MI_ESP32 // (ESP32 only) Add support for ESP32 as a BLE-bridge (+9k2 mem, +292k flash) -#endif // FFIRMWARE_BLE +#endif // FIRMWARE_BLUETOOTH #endif // ESP32 From 3f00a6df00d93816f2d1ffb52380f06012641abc Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Thu, 11 Feb 2021 17:13:17 +0100 Subject: [PATCH 14/41] Update tasmota_template.h --- tasmota/tasmota_template.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 98567ca42..7b4fc3ae3 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -2379,6 +2379,7 @@ const uint8_t kModuleNiceList[] PROGMEM = { #endif // USE_M5STACK_CORE2 }; +// !!! Update this list in the same order as kModuleNiceList !!! const char kModuleNames[] PROGMEM = "ESP32-DevKit|" #ifdef USE_WEBCAM @@ -2401,6 +2402,7 @@ const char kModuleNames[] PROGMEM = #endif // USE_M5STACK_CORE2 ; +// !!! Update this list in the same order as SupportedModules !!! const mytmplt kModules[] PROGMEM = { { // WEMOS - Espressif ESP32-DevKitC - Any ESP32 device like WeMos and NodeMCU hardware (ESP32) AGPIO(GPIO_USER), // 0 (I)O GPIO0, ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK From 5da636a870034c4cf8379e55ad835dd7fe7cb8ab Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 11 Feb 2021 18:51:29 +0100 Subject: [PATCH 15/41] bluetooth in repo firmware --- .github/workflows/Tasmota_build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Tasmota_build.yml b/.github/workflows/Tasmota_build.yml index b707b68a3..716c5c274 100644 --- a/.github/workflows/Tasmota_build.yml +++ b/.github/workflows/Tasmota_build.yml @@ -1462,6 +1462,7 @@ jobs: [ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/ + [ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-knx.* ] || mv ./mv_firmware/firmware/tasmota32-knx.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/languages/ [ ! -f ./mv_firmware/firmware/* ] || mv ./mv_firmware/firmware/* ./firmware/tasmota/languages/ From 9487ff605d6e214704fa12418c3a3b9fb6adaefd Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Thu, 11 Feb 2021 18:52:48 +0100 Subject: [PATCH 16/41] bluettoth in branch release-firmware --- .github/workflows/Tasmota_build_master.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml index a6a1b668c..5cf20b573 100644 --- a/.github/workflows/Tasmota_build_master.yml +++ b/.github/workflows/Tasmota_build_master.yml @@ -1462,6 +1462,7 @@ jobs: [ ! -f ./mv_firmware/firmware/tasmota32-web*.* ] || mv ./mv_firmware/firmware/tasmota32-web*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-odroidgo.* ] || mv ./mv_firmware/firmware/tasmota32-odroidgo.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-core2.* ] || mv ./mv_firmware/firmware/tasmota32-core2.* ./firmware/tasmota32/ + [ ! -f ./mv_firmware/firmware/tasmota32-bluetooth.* ] || mv ./mv_firmware/firmware/tasmota32-bluetooth.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-knx.* ] || mv ./mv_firmware/firmware/tasmota32-knx.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32* ] || mv ./mv_firmware/firmware/tasmota32* ./firmware/tasmota32/languages/ [ ! -f ./mv_firmware/firmware/* ] || mv ./mv_firmware/firmware/* ./firmware/tasmota/languages/ From caecc5cb3347f2976225f780e14f1fd92e504b30 Mon Sep 17 00:00:00 2001 From: jaymemaurice <38895319+jaymemaurice@users.noreply.github.com> Date: Thu, 11 Feb 2021 12:57:57 -0500 Subject: [PATCH 17/41] TuyaMCU Precise Temperature Sensor packetValue now interpreted as float based on configuration of TempRes command. Beware TempRes default may be 1 thus a TuyaMCU device may need TempRes set to 0 after this change if it's currently working. See https://github.com/arendst/Tasmota/issues/10917 --- tasmota/xdrv_16_tuyamcu.ino | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 5f94e576d..a66f6e170 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -1295,7 +1295,7 @@ void TuyaSensorsShow(bool json) GetTextIndexed(sname, sizeof(sname), (sensor-71), kTuyaSensors); ResponseAppend_P(PSTR("\"%s\":%s"), sname, - (Tuya.SensorsValid[sensor-71] ? dtostrfd(Tuya.Sensors[sensor-71], res, tempval) : PSTR("null"))); + (Tuya.SensorsValid[sensor-71] ? dtostrfd((float)Tuya.Sensors[sensor-71] / pow(10, res), res, tempval) : PSTR("null"))); added = true; } #ifdef USE_WEBSERVER @@ -1303,11 +1303,11 @@ void TuyaSensorsShow(bool json) if (TuyaGetDpId(sensor) != 0) { switch (sensor) { case 71: - WSContentSend_Temp("", Tuya.Sensors[0]); + WSContentSend_Temp("", (float)Tuya.Sensors[0] / pow(10, Settings.flag2.temperature_resolution)); break; case 72: WSContentSend_PD(PSTR("{s}" D_TEMPERATURE " Set{m}%s " D_UNIT_DEGREE "%c{e}"), - dtostrfd(Tuya.Sensors[1], Settings.flag2.temperature_resolution, tempval), TempUnit()); + dtostrfd((float)Tuya.Sensors[1] / pow(10, Settings.flag2.temperature_resolution), Settings.flag2.temperature_resolution, tempval), TempUnit()); break; case 73: WSContentSend_PD(HTTP_SNS_HUM, "", dtostrfd(Tuya.Sensors[2], Settings.flag2.temperature_resolution, tempval)); From df1653ac992e1e10f059737cb1e6cb1e265e8d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ara=C3=BAjo?= Date: Thu, 11 Feb 2021 18:46:06 +0000 Subject: [PATCH 18/41] Fix EZO sensors on esp32 --- tasmota/xsns_78_ezo.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xsns_78_ezo.ino b/tasmota/xsns_78_ezo.ino index a33ad9cdc..d1e27fc01 100644 --- a/tasmota/xsns_78_ezo.ino +++ b/tasmota/xsns_78_ezo.ino @@ -53,7 +53,7 @@ struct EZOStruct { { // Transmit our command verbatim Wire.beginTransmission(addr); - Wire.write(cmd, len); + Wire.write((uint8_t*)cmd, len); if (Wire.endTransmission() != 0) { return; } From 5e1c7815fb7f9a2199a0062b745de15a38b22e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ara=C3=BAjo?= Date: Thu, 11 Feb 2021 18:46:06 +0000 Subject: [PATCH 19/41] Fix EZO sensors on esp32 --- tasmota/xsns_78_ezo.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xsns_78_ezo.ino b/tasmota/xsns_78_ezo.ino index a33ad9cdc..d1e27fc01 100644 --- a/tasmota/xsns_78_ezo.ino +++ b/tasmota/xsns_78_ezo.ino @@ -53,7 +53,7 @@ struct EZOStruct { { // Transmit our command verbatim Wire.beginTransmission(addr); - Wire.write(cmd, len); + Wire.write((uint8_t*)cmd, len); if (Wire.endTransmission() != 0) { return; } From 5e9fe677f387bcde7ad226cbb8ff5c03b9566aae Mon Sep 17 00:00:00 2001 From: jaymemaurice <38895319+jaymemaurice@users.noreply.github.com> Date: Thu, 11 Feb 2021 14:48:55 -0500 Subject: [PATCH 20/41] Precise temperature without pow Implement TuyaAdjustedTemperature which takes precision to offset the integer value. Using TempRes parameter as these should align --- tasmota/xdrv_16_tuyamcu.ino | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index a66f6e170..9c9221b07 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -318,6 +318,23 @@ int StrCmpNoCase(char const *Str1, char const *Str2) // Compare case sensistive } } +float TuyaAdjustedTemperature(uint8_t packetValue, uint8_t res) +{ + switch (res) + { + case 1: + return packetValue/10; + break; + case 2: + return packetValue/100; + break; + case 3: + return packetValue/1000; + break; + default: + return (float)packetValue; + } +} /*********************************************************************************************\ * Internal Functions \*********************************************************************************************/ @@ -1295,7 +1312,7 @@ void TuyaSensorsShow(bool json) GetTextIndexed(sname, sizeof(sname), (sensor-71), kTuyaSensors); ResponseAppend_P(PSTR("\"%s\":%s"), sname, - (Tuya.SensorsValid[sensor-71] ? dtostrfd((float)Tuya.Sensors[sensor-71] / pow(10, res), res, tempval) : PSTR("null"))); + (Tuya.SensorsValid[sensor-71] ? dtostrfd(TuyaAdjustedTemperature(Tuya.Sensors[sensor-71], res), res, tempval) : PSTR("null"))); added = true; } #ifdef USE_WEBSERVER @@ -1303,11 +1320,11 @@ void TuyaSensorsShow(bool json) if (TuyaGetDpId(sensor) != 0) { switch (sensor) { case 71: - WSContentSend_Temp("", (float)Tuya.Sensors[0] / pow(10, Settings.flag2.temperature_resolution)); + WSContentSend_Temp("", TuyaAdjustedTemperature(Tuya.Sensors[0], Settings.flag2.temperature_resolution)); break; case 72: WSContentSend_PD(PSTR("{s}" D_TEMPERATURE " Set{m}%s " D_UNIT_DEGREE "%c{e}"), - dtostrfd((float)Tuya.Sensors[1] / pow(10, Settings.flag2.temperature_resolution), Settings.flag2.temperature_resolution, tempval), TempUnit()); + dtostrfd(TuyaAdjustedTemperature(Tuya.Sensors[1], Settings.flag2.temperature_resolution), Settings.flag2.temperature_resolution, tempval), TempUnit()); break; case 73: WSContentSend_PD(HTTP_SNS_HUM, "", dtostrfd(Tuya.Sensors[2], Settings.flag2.temperature_resolution, tempval)); From 5af6c1baeca03bfdb512ab145407b3f48c43c722 Mon Sep 17 00:00:00 2001 From: jaymemaurice <38895319+jaymemaurice@users.noreply.github.com> Date: Thu, 11 Feb 2021 14:55:33 -0500 Subject: [PATCH 21/41] Fix missing divisor Fix missing divisior --- tasmota/xdrv_16_tuyamcu.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 9c9221b07..2f4c17c1c 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -749,7 +749,7 @@ void TuyaProcessStatePacket(void) { } else { res = Settings.flag2.temperature_resolution; } GetTextIndexed(sname, sizeof(sname), (fnId-71), kTuyaSensors); ResponseClear(); // Clear retained message - Response_P(PSTR("{\"TuyaSNS\":{\"%s\":%s}}"), sname, dtostrfd(packetValue, res, tempval)); // sensor update is just on change + Response_P(PSTR("{\"TuyaSNS\":{\"%s\":%s}}"), sname, dtostrfd(TuyaAdjustedTemperature(packetValue, res), res, tempval)); // sensor update is just on change MqttPublishPrefixTopicRulesProcess_P(TELE, PSTR(D_CMND_SENSOR)); } } From acb2f6e1d93ce3e9b35e5ce407ad40b3b103ce0c Mon Sep 17 00:00:00 2001 From: jaymemaurice <38895319+jaymemaurice@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:20:26 -0500 Subject: [PATCH 22/41] Fix loss of precision Fix loss of precision regression --- tasmota/xdrv_16_tuyamcu.ino | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 2f4c17c1c..579a85234 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -323,16 +323,17 @@ float TuyaAdjustedTemperature(uint8_t packetValue, uint8_t res) switch (res) { case 1: - return packetValue/10; + return (float)packetValue / 10; break; case 2: - return packetValue/100; + return (float)packetValue / 100; break; case 3: - return packetValue/1000; + return (float)packetValue / 1000; break; default: return (float)packetValue; + break; } } /*********************************************************************************************\ From e6757fed3d69e9d1f6803dc34b619452d230036d Mon Sep 17 00:00:00 2001 From: jaymemaurice <38895319+jaymemaurice@users.noreply.github.com> Date: Thu, 11 Feb 2021 16:49:59 -0500 Subject: [PATCH 23/41] Update xdrv_16_tuyamcu.ino Change type uint8_t to uint16_t on TuyaAdjustedTemperature to support temperatures over 25.5 or 255 degrees. --- tasmota/xdrv_16_tuyamcu.ino | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasmota/xdrv_16_tuyamcu.ino b/tasmota/xdrv_16_tuyamcu.ino index 579a85234..8f4d8e8d8 100644 --- a/tasmota/xdrv_16_tuyamcu.ino +++ b/tasmota/xdrv_16_tuyamcu.ino @@ -318,18 +318,18 @@ int StrCmpNoCase(char const *Str1, char const *Str2) // Compare case sensistive } } -float TuyaAdjustedTemperature(uint8_t packetValue, uint8_t res) +float TuyaAdjustedTemperature(uint16_t packetValue, uint8_t res) { switch (res) { case 1: - return (float)packetValue / 10; + return (float)packetValue / 10.0; break; case 2: - return (float)packetValue / 100; + return (float)packetValue / 100.0; break; case 3: - return (float)packetValue / 1000; + return (float)packetValue / 1000.0; break; default: return (float)packetValue; From ce064906fda27fc9d63b566d0479217a423e40ca Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Fri, 12 Feb 2021 09:43:23 +0100 Subject: [PATCH 24/41] add lib info files --- .../library.properties | 2 +- lib/default/UdpListener/library.properties | 2 +- .../Unishox-1.0-shadinger/library.properties | 2 +- .../jsmn-shadinger-1.0/library.properties | 2 +- lib/lib_audio/ESP8266Audio/library.json | 1 + lib/lib_audio/ESP8266SAM/library.json | 1 + lib/lib_basic/NeoPixelBus-2.6.0/library.json | 2 +- .../library.json | 1 + .../LiquidCrystal_I2C-1.1.3/library.json | 5 +--- lib/lib_div/LibTeleinfo/library.json | 2 +- lib/lib_div/NewPing-1.9.1/library.properties | 2 +- ...rary.properties.off => library.properties} | 2 +- lib/lib_i2c/I2Cdevlib-Core/.library.json | 26 +++++++++---------- lib/lib_rf/KeeloqLib/library.properties | 2 +- lib/lib_rf/cc1101/library.json | 8 ++++++ lib/lib_rf/cc1101/library.properties | 2 +- lib/libesp32/CORE2_Library/library.json | 8 ++++++ lib/libesp32/CORE2_Library/library.properties | 2 +- lib/libesp32/ESP32-Ethernet/library.json | 8 ++++++ .../ESP32-Ethernet/library.properties | 10 +------ lib/libesp32/ESP32-Mail-Client/library.json | 8 ++++++ .../ESP32-Mail-Client/library.properties | 8 ------ .../ESP32-to-ESP8266-compat/library.json | 8 ++++++ .../library.properties | 2 +- lib/libesp32/LITTLEFS/library.json | 5 +--- lib/libesp32/NimBLE-Arduino/library.json | 8 ++++++ lib/libesp32/rtsp/library.json | 8 ++++++ lib/libesp32/rtsp/library.properties | 2 +- 28 files changed, 88 insertions(+), 51 deletions(-) rename lib/lib_div/esp-knx-ip-0.5.2/{library.properties.off => library.properties} (93%) create mode 100644 lib/lib_rf/cc1101/library.json create mode 100644 lib/libesp32/CORE2_Library/library.json create mode 100644 lib/libesp32/ESP32-Ethernet/library.json create mode 100644 lib/libesp32/ESP32-Mail-Client/library.json create mode 100644 lib/libesp32/ESP32-to-ESP8266-compat/library.json create mode 100644 lib/libesp32/NimBLE-Arduino/library.json create mode 100644 lib/libesp32/rtsp/library.json diff --git a/lib/default/PubSubClient-EspEasy-2.7.12/library.properties b/lib/default/PubSubClient-EspEasy-2.7.12/library.properties index 1ae97882e..7df4daf80 100644 --- a/lib/default/PubSubClient-EspEasy-2.7.12/library.properties +++ b/lib/default/PubSubClient-EspEasy-2.7.12/library.properties @@ -6,4 +6,4 @@ sentence=A client library for MQTT messaging. paragraph=MQTT is a lightweight messaging protocol ideal for small devices. This library allows you to send and receive MQTT messages. It supports the latest MQTT 3.1.1 protocol and can be configured to use the older MQTT 3.1 if needed. It supports all Arduino Ethernet Client compatible hardware, including the Intel Galileo/Edison, ESP8266 and TI CC3000. category=Communication url=http://pubsubclient.knolleary.net -architectures=* +architectures=esp8266,esp32 diff --git a/lib/default/UdpListener/library.properties b/lib/default/UdpListener/library.properties index 1d453bc6c..5baf0fff9 100644 --- a/lib/default/UdpListener/library.properties +++ b/lib/default/UdpListener/library.properties @@ -4,4 +4,4 @@ author=Ivan Grokhotkov, Stephan Hadinger maintainer=Stephan sentence=UdpListener optimized for static and limite memory allocation, to reduce memory footprint of receiving SSDP request, as a replacement for WifiUdp. paragraph=This class only handles receiving UDP Multicast packets. For sending packets, use WifiUdp. -architectures=esp8266 +architectures=esp8266,esp32 diff --git a/lib/default/Unishox-1.0-shadinger/library.properties b/lib/default/Unishox-1.0-shadinger/library.properties index 138b2027c..e53e2f8f3 100644 --- a/lib/default/Unishox-1.0-shadinger/library.properties +++ b/lib/default/Unishox-1.0-shadinger/library.properties @@ -5,4 +5,4 @@ maintainer=Arun , Stephan sentence=Unishox compression for Tasmota Rules paragraph=It is based on Unishox hybrid encoding technique. This version has specific Unicode code removed for size. url=https://github.com/siara-cc/Unishox -architectures=esp8266 +architectures=esp8266,esp32 diff --git a/lib/default/jsmn-shadinger-1.0/library.properties b/lib/default/jsmn-shadinger-1.0/library.properties index 674aa76e7..f2cb8f3ab 100644 --- a/lib/default/jsmn-shadinger-1.0/library.properties +++ b/lib/default/jsmn-shadinger-1.0/library.properties @@ -5,4 +5,4 @@ maintainer=Stephan sentence=Lightweight in-place JSON parser paragraph= url=https://github.com/zserge/jsmn -architectures=esp8266 +architectures=esp8266,esp32 diff --git a/lib/lib_audio/ESP8266Audio/library.json b/lib/lib_audio/ESP8266Audio/library.json index 3cdf7a46a..5986c2a41 100644 --- a/lib/lib_audio/ESP8266Audio/library.json +++ b/lib/lib_audio/ESP8266Audio/library.json @@ -20,6 +20,7 @@ "SPI": "1.0" }, "frameworks": "Arduino", + "platforms": ["espressif8266", "espressif32"], "examples": [ "examples/*/*.ino" ] diff --git a/lib/lib_audio/ESP8266SAM/library.json b/lib/lib_audio/ESP8266SAM/library.json index af61daa8b..af66aee97 100644 --- a/lib/lib_audio/ESP8266SAM/library.json +++ b/lib/lib_audio/ESP8266SAM/library.json @@ -17,6 +17,7 @@ "version": "1.0", "homepage": "https://github.com/earlephilhower/ESP8266SAM", "frameworks": "Arduino", + "platforms": ["espressif8266", "espressif32"], "examples": [ "examples/*/*.ino" ] diff --git a/lib/lib_basic/NeoPixelBus-2.6.0/library.json b/lib/lib_basic/NeoPixelBus-2.6.0/library.json index e50ebd242..bd56c759c 100644 --- a/lib/lib_basic/NeoPixelBus-2.6.0/library.json +++ b/lib/lib_basic/NeoPixelBus-2.6.0/library.json @@ -9,6 +9,6 @@ }, "version": "2.6.0", "frameworks": "arduino", - "platforms": "*" + "platforms": ["espressif8266", "espressif32"] } diff --git a/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/library.json b/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/library.json index 1e95e2e9f..07570dd8e 100644 --- a/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/library.json +++ b/lib/lib_basic/OneWire-Stickbreaker-20190506-1.1/library.json @@ -55,6 +55,7 @@ "version": "2.3.2", "homepage": "https://www.pjrc.com/teensy/td_libs_OneWire.html", "frameworks": "Arduino", + "platforms": ["espressif8266", "espressif32"], "examples": [ "examples/*/*.pde" ] diff --git a/lib/lib_display/LiquidCrystal_I2C-1.1.3/library.json b/lib/lib_display/LiquidCrystal_I2C-1.1.3/library.json index 1553b6e44..8ef6d5fa0 100644 --- a/lib/lib_display/LiquidCrystal_I2C-1.1.3/library.json +++ b/lib/lib_display/LiquidCrystal_I2C-1.1.3/library.json @@ -8,8 +8,5 @@ "url": "https://github.com/marcoschwartz/LiquidCrystal_I2C.git" }, "frameworks": "arduino", - "platforms": - [ - "*" - ] + "platforms": ["espressif8266", "espressif32"] } diff --git a/lib/lib_div/LibTeleinfo/library.json b/lib/lib_div/LibTeleinfo/library.json index b2e0684b8..ea6932a9b 100644 --- a/lib/lib_div/LibTeleinfo/library.json +++ b/lib/lib_div/LibTeleinfo/library.json @@ -14,6 +14,6 @@ "url": "http://hallard.me" }, "frameworks": "arduino", - "platforms": "*" + "platforms": ["espressif8266", "espressif32"] } diff --git a/lib/lib_div/NewPing-1.9.1/library.properties b/lib/lib_div/NewPing-1.9.1/library.properties index c825146d9..e87661faf 100644 --- a/lib/lib_div/NewPing-1.9.1/library.properties +++ b/lib/lib_div/NewPing-1.9.1/library.properties @@ -6,5 +6,5 @@ sentence=A library that makes working with ultrasonic sensors easy. paragraph=When I first received an ultrasonic sensor I was not happy with how poorly it performed. I soon realized the problem was not the sensor, it was the available ping and ultrasonic libraries causing the problem. The NewPing library totally fixes these problems, adds many new features, and breathes new life into these very affordable distance sensors. category=Sensors url=https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home -architectures=avr,arm,esp8266 +architectures=* includes=NewPing.h diff --git a/lib/lib_div/esp-knx-ip-0.5.2/library.properties.off b/lib/lib_div/esp-knx-ip-0.5.2/library.properties similarity index 93% rename from lib/lib_div/esp-knx-ip-0.5.2/library.properties.off rename to lib/lib_div/esp-knx-ip-0.5.2/library.properties index f3b86de9c..ba539db0b 100644 --- a/lib/lib_div/esp-knx-ip-0.5.2/library.properties.off +++ b/lib/lib_div/esp-knx-ip-0.5.2/library.properties @@ -6,5 +6,5 @@ sentence=ESP8266 library for KNX/IP communication. paragraph=Build your own IoT devices with KNX/IP connectivity! category=Communication url=https://github.com/envy/esp-knx-ip -architectures=esp8266 +architectures=* includes=esp-knx-ip.h diff --git a/lib/lib_i2c/I2Cdevlib-Core/.library.json b/lib/lib_i2c/I2Cdevlib-Core/.library.json index 14886c889..8dd4def7c 100644 --- a/lib/lib_i2c/I2Cdevlib-Core/.library.json +++ b/lib/lib_i2c/I2Cdevlib-Core/.library.json @@ -1,31 +1,31 @@ { - "name": "I2Cdevlib-Core", + "name": "I2Cdevlib-Core", "repository": { - "url": "https://github.com/jrowberg/i2cdevlib.git", + "url": "https://github.com/jrowberg/i2cdevlib.git", "type": "git" - }, + }, "platforms": [ "*" ], "frameworks": [ "arduino" - ], - "version": "6744ce0ac4", + ], + "version": "6744ce0ac4", "export": { "include": "Arduino/I2Cdev" - }, + }, "authors": [ { - "maintainer": false, - "name": "Jeff Rowberg", - "url": "https://github.com/jrowberg", + "maintainer": false, + "name": "Jeff Rowberg", + "url": "https://github.com/jrowberg", "email": "jeff@rowberg.net" } - ], + ], "keywords": [ - "i2cdevlib", + "i2cdevlib", "i2c" - ], - "id": 11, + ], + "id": 11, "description": "The I2C Device Library (I2Cdevlib) is a collection of uniform and well-documented classes to provide simple and intuitive interfaces to I2C devices." } diff --git a/lib/lib_rf/KeeloqLib/library.properties b/lib/lib_rf/KeeloqLib/library.properties index fa974d9bf..0210f63ea 100644 --- a/lib/lib_rf/KeeloqLib/library.properties +++ b/lib/lib_rf/KeeloqLib/library.properties @@ -6,4 +6,4 @@ sentence=C++ Class Implementing Keeloq cipher by Microchip.com. paragraph=Developed/Tested on Arduino/ESP8266 with Arduino IDE Environment. category=Uncategorized url=http://none.net -architectures=* +architectures=esp8266,esp32 diff --git a/lib/lib_rf/cc1101/library.json b/lib/lib_rf/cc1101/library.json new file mode 100644 index 000000000..54a3b9de5 --- /dev/null +++ b/lib/lib_rf/cc1101/library.json @@ -0,0 +1,8 @@ +{ + "name": "cc1101", + "keywords": "rf, esp8266", + "description": "cc1101 library", + "version": "1.0", + "frameworks": "arduino", + "platforms": "espressif8266" +} diff --git a/lib/lib_rf/cc1101/library.properties b/lib/lib_rf/cc1101/library.properties index 73e393575..bfb8a65bc 100644 --- a/lib/lib_rf/cc1101/library.properties +++ b/lib/lib_rf/cc1101/library.properties @@ -6,4 +6,4 @@ sentence=. paragraph= category= url= -architectures=esp8266,esp32 +architectures=esp8266 diff --git a/lib/libesp32/CORE2_Library/library.json b/lib/libesp32/CORE2_Library/library.json new file mode 100644 index 000000000..e3ac982c5 --- /dev/null +++ b/lib/libesp32/CORE2_Library/library.json @@ -0,0 +1,8 @@ +{ + "name": "M5 Stack Core2 library", + "keywords": "esp32, sensor, mqtt, m2m, iot", + "description": "M5 Stack Core2 library", + "version": "1.0", + "frameworks": "arduino", + "platforms": "espressif32" +} diff --git a/lib/libesp32/CORE2_Library/library.properties b/lib/libesp32/CORE2_Library/library.properties index 09baffd9a..e3b36fc67 100644 --- a/lib/libesp32/CORE2_Library/library.properties +++ b/lib/libesp32/CORE2_Library/library.properties @@ -6,4 +6,4 @@ sentence=Allows Tasmota to use Core2 paragraph=Allows Tasmota to Core2 for esp32 category=ESP32 url= -architectures=* +architectures=esp32 diff --git a/lib/libesp32/ESP32-Ethernet/library.json b/lib/libesp32/ESP32-Ethernet/library.json new file mode 100644 index 000000000..96ba3e110 --- /dev/null +++ b/lib/libesp32/ESP32-Ethernet/library.json @@ -0,0 +1,8 @@ +{ + "name": "ESP32 Ethernet", + "keywords": "esp32, ethernet, communication", + "description": "Ethernet Library for ESP32", + "version": "1.1.0", + "frameworks": "arduino", + "platforms": "espressif32" +} diff --git a/lib/libesp32/ESP32-Ethernet/library.properties b/lib/libesp32/ESP32-Ethernet/library.properties index 50c7b8ea1..f7f4fd845 100644 --- a/lib/libesp32/ESP32-Ethernet/library.properties +++ b/lib/libesp32/ESP32-Ethernet/library.properties @@ -1,17 +1,9 @@ name=ESP32 Ethernet - version=1.1.0 - author=Espressif - maintainer=Espressif - sentence=Ethernet Library for ESP32 - -paragraph=This library allows ESP32 to use ethernet hardware - +paragraph=This library allows ESP32 to use ethernet hardware category=Communication - url= - architectures=esp32 diff --git a/lib/libesp32/ESP32-Mail-Client/library.json b/lib/libesp32/ESP32-Mail-Client/library.json new file mode 100644 index 000000000..7ad58f5ee --- /dev/null +++ b/lib/libesp32/ESP32-Mail-Client/library.json @@ -0,0 +1,8 @@ +{ + "name": "ESP32 Mail Client", + "keywords": "esp32, mail, communication", + "description": "Mail Client Arduino Library for ESP32", + "version": "2.1.4", + "frameworks": "arduino", + "platforms": "espressif32" +} diff --git a/lib/libesp32/ESP32-Mail-Client/library.properties b/lib/libesp32/ESP32-Mail-Client/library.properties index 6ff993e8b..03eab43ef 100755 --- a/lib/libesp32/ESP32-Mail-Client/library.properties +++ b/lib/libesp32/ESP32-Mail-Client/library.properties @@ -1,17 +1,9 @@ name=ESP32 Mail Client - version=2.1.4 - author=Mobizt - maintainer=Mobizt - sentence=Mail Client Arduino Library for ESP32 - paragraph=This library allows ESP32 to send Email with/without attachment and receive Email with/without attachment download through SMTP and IMAP servers. - category=Communication - url=https://github.com/mobizt/ESP32-Mail-Client - architectures=esp32 diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/library.json b/lib/libesp32/ESP32-to-ESP8266-compat/library.json new file mode 100644 index 000000000..7c5dc4ccd --- /dev/null +++ b/lib/libesp32/ESP32-to-ESP8266-compat/library.json @@ -0,0 +1,8 @@ +{ + "name": "ESP32-to-ESP8266-compat", + "keywords": "esp32, esp8266", + "description": "Allows Tasmota to compile for esp32", + "version": "0.0.2", + "frameworks": "arduino", + "platforms": "espressif32" +} diff --git a/lib/libesp32/ESP32-to-ESP8266-compat/library.properties b/lib/libesp32/ESP32-to-ESP8266-compat/library.properties index 5d5e39166..46e1bfba0 100644 --- a/lib/libesp32/ESP32-to-ESP8266-compat/library.properties +++ b/lib/libesp32/ESP32-to-ESP8266-compat/library.properties @@ -6,4 +6,4 @@ sentence=Allows Tasmota to compile for esp32 paragraph=Allows Tasmota to compile for esp32 category=ESP32 url= -architectures=* +architectures=esp32 diff --git a/lib/libesp32/LITTLEFS/library.json b/lib/libesp32/LITTLEFS/library.json index 8c5f76fc2..d87eba610 100755 --- a/lib/libesp32/LITTLEFS/library.json +++ b/lib/libesp32/LITTLEFS/library.json @@ -15,8 +15,5 @@ "version": "1.0.5", "license": "LGPL-2.0", "frameworks": "arduino", - "platforms": "espressif32", - "build": { - "libCompatMode": 2 - } + "platforms": "espressif32" } \ No newline at end of file diff --git a/lib/libesp32/NimBLE-Arduino/library.json b/lib/libesp32/NimBLE-Arduino/library.json new file mode 100644 index 000000000..5eb6ec5b4 --- /dev/null +++ b/lib/libesp32/NimBLE-Arduino/library.json @@ -0,0 +1,8 @@ +{ + "name": "NimBLE-Arduino", + "keywords": "esp32, bluetooth", + "description": "Bluetooth low energy (BLE) library for arduino-esp32 based on NimBLE", + "version": "1.0.2", + "frameworks": "arduino", + "platforms": "espressif32" +} diff --git a/lib/libesp32/rtsp/library.json b/lib/libesp32/rtsp/library.json new file mode 100644 index 000000000..7726b3e9e --- /dev/null +++ b/lib/libesp32/rtsp/library.json @@ -0,0 +1,8 @@ +{ + "name": "Micro-RTSP", + "keywords": "esp32, rtsp", + "description": "Mikro RTSP server", + "version": "0.1.6", + "frameworks": "arduino", + "platforms": "espressif32" +} diff --git a/lib/libesp32/rtsp/library.properties b/lib/libesp32/rtsp/library.properties index 03b5dc224..4ec1d1f88 100755 --- a/lib/libesp32/rtsp/library.properties +++ b/lib/libesp32/rtsp/library.properties @@ -6,4 +6,4 @@ sentence=Mikro RTSP server for mikros paragraph=A small/efficient RTSP server for ESP32 and other micros category=Data Storage url=https://github.com/geeksville/Micro-RTSP.git -architectures=* +architectures=esp32 From fcc5e7df576ed40fdedea1f662cb86e1658e9317 Mon Sep 17 00:00:00 2001 From: bovirus <1262554+bovirus@users.noreply.github.com> Date: Fri, 12 Feb 2021 12:25:42 +0100 Subject: [PATCH 25/41] Update Italian language --- tasmota/language/it_IT.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tasmota/language/it_IT.h b/tasmota/language/it_IT.h index 0543032f3..d15849bad 100644 --- a/tasmota/language/it_IT.h +++ b/tasmota/language/it_IT.h @@ -1,7 +1,7 @@ /* it-IT.h - localization for Italian - Italy for Tasmota - Copyright (C) 2021 Gennaro Tortone - some mods by Antonio Fragola - Updated by bovirus - rev. 04.02.2021 + Copyright (C) 2021 Gennaro Tortone - some mods by Antonio Fragola - Updated by bovirus - rev. 12.02.2021 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -630,8 +630,8 @@ #define D_SENSOR_SBR_TX "SerBr - TX" #define D_SENSOR_SR04_TRIG "SR04 Tri - TX" #define D_SENSOR_SR04_ECHO "SR04 Ech - RX" -#define D_SENSOR_SDM72_TX "SDM72 Tx" -#define D_SENSOR_SDM72_RX "SDM72 Rx" +#define D_SENSOR_SDM72_TX "SDM72 - TX" +#define D_SENSOR_SDM72_RX "SDM72 - RX" #define D_SENSOR_SDM120_TX "SDMx20 - TX" #define D_SENSOR_SDM120_RX "SDMx20 - RX" #define D_SENSOR_SDM630_TX "SDM630 - TX" @@ -838,7 +838,7 @@ //SDM220, SDM120, SDM72, LE01MR #define D_EXPORT_POWER "Potenza esportata" #define D_IMPORT_POWER "Potenza importata" -#define D_PHASE_ANGLE "Angolo Fase" +#define D_PHASE_ANGLE "Angolo fase" #define D_IMPORT_ACTIVE "Potenza attiva importata" #define D_EXPORT_ACTIVE "Potenza attiva esportata" #define D_IMPORT_REACTIVE "Potenza reattiva importata" From 4fd4d73602cbadaa62d8c36373d6f4bb5dde0137 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 12 Feb 2021 13:19:50 +0100 Subject: [PATCH 26/41] Add ESP8266 OTA upload fallback to .gz --- tasmota/support_tasmota.ino | 9 +++++++++ tasmota/tasmota.h | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index 07f776f5c..be533ede8 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -1077,6 +1077,15 @@ void Every250mSeconds(void) snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s-" D_JSON_MINIMAL "%s"), TasmotaGlobal.mqtt_data, ota_url_type); // Minimal filename must be filename-minimal } #endif // FIRMWARE_MINIMAL +#ifdef ESP8266 + if (ota_retry_counter < OTA_ATTEMPTS / 2) { + if (!strcasecmp_P(TasmotaGlobal.mqtt_data, PSTR(".gz"))) { + ota_retry_counter = 1; + } else { + strcat_P(TasmotaGlobal.mqtt_data, PSTR(".gz")); + } + } +#endif // ESP8266 AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "%s"), TasmotaGlobal.mqtt_data); WiFiClient OTAclient; ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(OTAclient, TasmotaGlobal.mqtt_data)); diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index bc27a7df7..c4daf839b 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -147,7 +147,11 @@ const uint32_t BOOT_LOOP_TIME = 10; // Number of seconds to stop detecti const uint32_t POWER_CYCLE_TIME = 8; // Number of seconds to reset power cycle boot loops const uint16_t SYSLOG_TIMER = 600; // Seconds to restore syslog_level const uint16_t SERIALLOG_TIMER = 600; // Seconds to disable SerialLog +#ifdef ESP8266 +const uint8_t OTA_ATTEMPTS = 10; // Number of times to try fetching the new firmware +#else const uint8_t OTA_ATTEMPTS = 5; // Number of times to try fetching the new firmware +#endif // ESP8266 const uint16_t INPUT_BUFFER_SIZE = 520; // Max number of characters in serial command buffer const uint16_t FLOATSZ = 16; // Max number of characters in float result from dtostrfd (max 32) From 99b832cb7b96a6fe4c4e5afd38f31cceeda57a65 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 12 Feb 2021 15:02:55 +0100 Subject: [PATCH 27/41] Update release notes --- CHANGELOG.md | 3 +- RELEASENOTES.md | 31 ++++- TEMPLATES.md | 304 +++++++++++++++++++++++++++++++++++++----------- 3 files changed, 262 insertions(+), 76 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 384d3f23f..671dbbc94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,11 @@ All notable changes to this project will be documented in this file. - Support for Device Groups Device Map (#10898) - Support for Eastron SDM72D-M three phase 100A Modbus energy meter (#10862) - Support for Frysk language translations by Christiaan Heerze +- ESP8266 Fallback to ``*.bin.gz`` binary when OTA upload of ``*.bin`` binary fails ## [9.2.0.6] 20210210 ### Changed -- Removed migration support for versions before v8.1.0 (Doris) +- Remove support for direct migration from versions before v8.1.0 (Doris) - ESP32 Increase number of switch GPIOs from 8 to 28 - ESP32 Increase number of interlock groups from 4 to 14 - Increase number of button GPIOs from 4 to 8 diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 0c81c26f4..4645593b6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -4,7 +4,7 @@ ## Migration Information -This version removes migration support for versions before v8.1.0 (Doris) +**This version removes support for direct migration from versions before v8.1.0 (Doris)** See [migration path](https://tasmota.github.io/docs/Upgrading#migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates: @@ -40,6 +40,7 @@ For initial configuration this release supports Webserver based **WifiManager** ## Provided Binary Downloads +### ESP8266 or ESP8285 based The following binary downloads have been compiled with ESP8266/Arduino library core version **2.7.4.9**. - **tasmota.bin** = The Tasmota version with most drivers. **RECOMMENDED RELEASE BINARY** @@ -47,12 +48,31 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - **tasmota-lite.bin** = The Lite version without most drivers and sensors. - **tasmota-knx.bin** = The Knx version without some features but adds KNX support. - **tasmota-sensors.bin** = The Sensors version adds more useful sensors. -- **tasmota-ir** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features. +- **tasmota-ir.bin** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features. - **tasmota-display.bin** = The Display version without Energy Monitoring but adds display support. - **tasmota-zbbridge.bin** = The dedicated Sonoff Zigbee Bridge version. - **tasmota-minimal.bin** = The Minimal version allows intermediate OTA uploads to support larger versions and does NOT change any persistent parameter. This version **should NOT be used for initial installation**. -The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota/release for ESP8266 or http://ota.tasmota.com/tasmota32/release for ESP32. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz`` +Above binaries are also available as gzipped version allowing faster uploads. + +The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota/release. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz`` + +### ESP32 based +The following binary downloads have been compiled with ESP32/Arduino library core version **1.0.5-rc6**. + +- **tasmota32.bin** = The Tasmota version with most drivers. **RECOMMENDED RELEASE BINARY** +- **tasmota32-BG.bin** to **tasmota32-TW.bin** = The Tasmota version in different languages. +- **tasmota32-lite.bin** = The Lite version without most drivers and sensors. +- **tasmota32-knx.bin** = The Knx version without some features but adds KNX support. +- **tasmota32-sensors.bin** = The Sensors version adds more useful sensors. +- **tasmota32-ir.bin** = The InfraRed Receiver and transmitter version allowing all available protocols provided by library IRremoteESP8266 but without most other features. +- **tasmota32-display.bin** = The Display version without Energy Monitoring but adds display support. +- **tasmota32-webcam.bin** = The Webcam version adds webcam support. +- **tasmota32-bluetooth.bin** = The Bluetooth version adds BLE support. +- **tasmota32-odroidgo.bin** = The Odroid-Go version is specifically tailored to Odroid_go hardware. +- **tasmota32-core2.bin** = The Core2 version is specifically tailored to M5Stack Core2 hardware. + +The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota32/release. The links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota32/release/tasmota32.bin`` [List](MODULES.md) of embedded modules. @@ -66,7 +86,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota - Command ``Speed2`` to control a once off fade [#10741](https://github.com/arendst/Tasmota/issues/10741) - Command ``VirtualCT`` to simulate or fine tune CT bulbs with 3,4,5 channels [#10311](https://github.com/arendst/Tasmota/issues/10311) - Command ``SetOption40 0..250`` to disable button functionality if activated for over 0.1 second re-introduced -- Command ``SetOption43 1..255`` to control Rotary step (#10407) +- Command ``SetOption43 1..255`` to control Rotary step [#10407](https://github.com/arendst/Tasmota/issues/10407) - Command ``SetOption118 1`` to move ZbReceived from JSON message and into the subtopic replacing "SENSOR" default [#10353](https://github.com/arendst/Tasmota/issues/10353) - Command ``SetOption119 1`` to remove the device addr from json payload, can be used with zb_topic_fname where the addr is already known from the topic [#10355](https://github.com/arendst/Tasmota/issues/10355) - Zigbee command ``SetOption120 1`` or ``ZbEndpointTopic 1`` to add the zigbee endpoint as suffix in topic when using ``SetOption89 1`` @@ -105,6 +125,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota - Rule trigger string comparisons for EndsWith ``$>``, StartsWith ``$<`` and Contains ``$|`` [#10538](https://github.com/arendst/Tasmota/issues/10538) - SPI display driver SSD1331 Color oled by Jeroen Vermeulen [#10376](https://github.com/arendst/Tasmota/issues/10376) - Compile time option ``USE_MQTT_TLS_DROP_OLD_FINGERPRINT`` to drop old (less secure) TLS fingerprint +- ESP8266 Fallback to ``*.bin.gz`` binary when OTA upload of ``*.bin`` binary fails ### Breaking Changed - ESP32 switch from default SPIFFS to default LittleFS file system loosing current (zigbee) files @@ -119,7 +140,7 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota - Replaced RA8876 GPIO selection from ``SPI CS`` by ``RA8876 CS`` ### Changed -- Removed migration support for versions before v8.1.0 (Doris) +- Remove support for direct migration from versions before v8.1.0 (Doris) - Command ``Sleep 0`` removes any sleep from wifi modem except when ESP32 BLE is active - Logging from heap to stack freeing 700 bytes RAM - Disabled ``USE_LIGHT`` light support for ZBBridge saving 17.6kB [#10374](https://github.com/arendst/Tasmota/issues/10374) diff --git a/TEMPLATES.md b/TEMPLATES.md index 265b3ffa8..ff274a103 100644 --- a/TEMPLATES.md +++ b/TEMPLATES.md @@ -2,7 +2,15 @@ # Templates -Find below the available templates as of December 2020. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) +Find below the available templates as of February 2021. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates) + +## Addressable LED Controller +``` +Athom 2812b {"NAME":"LS2812B-TAS","GPIO":[32,0,1376,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +cod.m WLAN Pixel Controller v0.6 {"NAME":"cod.m Pixel Controller","GPIO":[32,0,1376,0,0,0,0,0,544,0,0,0,0,0],"FLAG":0,"BASE":18} +ESP01 NeoPixel Ring {"NAME":"ESP-01S-RGB-LED-v1.0","GPIO":[1,1,1376,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +SP501E WS2812B Addressable {"NAME":"SP501E","GPIO":[0,32,0,1376,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +``` ## Aromatherapy Diffuser ``` @@ -70,16 +78,19 @@ Hykker SL-0392 650lm {"NAME":"Hykker 7W","GPIO":[0,0,0,0,0,416,0,0,417,0 Iotton 9W 700lm {"NAME":"Iotton Light","GPIO":[0,0,0,0,416,417,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} iView 10W 1050lm {"NAME":"iView ISB1000-D","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} Kogan 10W Cool & Warm White 1050lm {"NAME":"Kogan 10W CCT","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":48} -Kogan 4.5W 330lm 110° {"NAME":"Kogan White/Wa","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} +Kogan 4.5W 330lm 110 {"NAME":"Kogan White/Wa","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Kogan 5W {"NAME":"Kogan Co/Wa","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} +Kruidvat A60 9W 806lm {"NAME":"Kruidvat E27 806 Lumens","GPIO":[0,0,0,0,416,449,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":48} Laser 10W 1000lm {"NAME":"Laser 10W CCT","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":48} Laser 10W 1000lm {"NAME":"Laster 10W CCT","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} LE LampUX 380lm Candle {"NAME":"LE Bulb","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} LE LampUX 4.5W 410lm {"NAME":"LE LampUX","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":48} ledscom.de 4.5W 430lm {"NAME":"GX53","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":0} Lenovo 800lm {"NAME":"LenovoLB","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} +Lenovo SE-141DC {"NAME":"LenovoSE-141DC","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":48} Lohas ZN051 5W 420lm {"NAME":"Lohas ZN051","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Lohas ZN070 720lm {"NAME":"Lohas ZN070","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} +LSC 10W 806lm {"NAME":"LSC E27 806lumens","GPIO":[0,0,0,0,416,449,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":48} LSC A55 14W 1400lm {"NAME":"LSC CT E27","GPIO":[0,0,0,0,416,449,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":48} Lumiman A19 7.5W 800lm {"NAME":"Lumiman LM520","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Luminea ZX-2831 {"NAME":"Luminea CCT","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} @@ -97,23 +108,29 @@ Nedis A60 800lm {"NAME":"WIFILW10WTE27","GPIO":[0,0,0,0,0,416,0,0,4 Nedis C10 350lm {"NAME":"WIFILW10WTE14","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} Nedis G125 5.5W 350lm Twisted Filament {"NAME":"WIFILF10GDG125","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Nedis PAR16 330lm {"NAME":"Nedis WIFILW30","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} -Nedis PAR16 4.5W 330lm 110° {"NAME":"WIFILW30","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} +Nedis PAR16 4.5W 330lm 110 {"NAME":"WIFILW30","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Philips Zhirui Candle 250lm {"NAME":"Xiaomi Philips","GPIO":[0,0,0,0,0,0,0,0,417,0,0,416,0,0],"FLAG":0,"BASE":48} Phillips Zhirui 450lm {"NAME":"Xiaomi Philips","GPIO":[0,0,0,0,0,0,0,0,417,0,0,416,0,0],"FLAG":0,"BASE":48} Polux ST64 5.5W 470lm {"NAME":"basic","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Prokord 10W 1050lm {"NAME":"PSH-E2745-CCT","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,4704],"FLAG":0,"BASE":18} Prokord 5W 1050lm {"NAME":"Prokord-PSH-GU1045-CCT","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} -Shelly DUO 800lm {"NAME":"Shelly DUO","GPIO":[0,0,0,0,417,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Shelly DUO 800lm {"NAME":"Shelly Duo","GPIO":[0,0,0,0,0,419,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18} SmartDGM L-WT9W1 9W 800lm {"NAME":"L-WT9W1","GPIO":[0,0,0,0,0,416,0,0,160,417,0,0,0,0],"FLAG":0,"BASE":18} Solimo 12W 1080lm {"NAME":"Solimo WCCT 12","GPIO":[0,0,0,0,160,416,0,0,161,417,162,0,0,0],"FLAG":0,"BASE":18} Spectrum Smart 5W 410lm Candle {"NAME":"lightbulb","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Status 9W 806lm {"NAME":"Status Smart","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} -Swisstone SH 330 806lm {"NAME":"SwisstoneSH330","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} +Swisstone 806lm {"NAME":"SwisstoneSH330","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} Treatlife A19 9W 800lm {"NAME":"Treatlife SL20","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} -V-Tac PAR16 4.5W 300lm 110° {"NAME":"V-TAC VT-5174","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} +V-Tac PAR16 4.5W 300lm 110 {"NAME":"V-TAC VT-5174","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Vestaiot BR30 800lm {"NAME":"Vesta BR30 CCT","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} Wipro Garnet NS9100 810lm {"NAME":"WiproSmartBulb","GPIO":[0,0,0,0,417,0,0,0,416,0,0,0,0,0],"FLAG":0,"BASE":18} -Wyze WLPA19 A19 800lm {"NAME":"Wyze Bulb","GPIO":[0,0,0,0,0,0,0,0,0,416,417,0,0,0],"FLAG":0,"BASE":48} +Wyze A19 800lm {"NAME":"Wyze Bulb","GPIO":[5728,0,0,0,0,0,0,0,0,416,417,0,0,0],"FLAG":0,"BASE":48} +``` + +## Camera +``` +Ai-Thinker DIY Kit "Not available" +Wireles Tag DIY Kit "Not available" ``` ## Ceiling Light @@ -127,15 +144,18 @@ Calex 429250 {"NAME":"Calex_LED","GPIO":[0,0,0,0,0,0,0,0,0,449,4 Fcmila 48W RGBCCT {"NAME":"XDD-48W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} LE lampUX 15W RGBCCT {"NAME":"LE lampUX 15W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Lohas ZN026CL10 RGBCCT {"NAME":"Lohas LED Lamp","GPIO":[0,0,0,0,417,416,0,0,419,418,420,0,0,0],"FLAG":0,"BASE":18} +LOLAsmart Uranus White 70 cm {"NAME":"lola smart","GPIO":[0,0,0,1088,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} LSC 20W 1400lm White Ambiance {"NAME":"LSC RGBCW LED","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Luminea 24W CCT {"NAME":"Luminea NX6205-944","GPIO":[0,0,0,0,0,0,0,0,449,0,416,0,0,0],"FLAG":0,"BASE":48} LVL 300mm Round {"NAME":"LVL 300m Round 24W Ceiling LED","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":48} SMRTLite LED Panel {"NAME":"SMRTLite","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} +Taloya 12" 24W CCT Main and RGB Ambient {"NAME":"Taloya GA300-24W-AI-WEMG","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Utorch 24W 2000lm CCT {"NAME":"Utorch PZE-911","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":1} Utorch 24W 2000lm CCT {"NAME":"Utorch UT40","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":1} Verve Design Angie 18W RGB Ring {"NAME":"ACL12HA Light","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Verve Design Charlie 22W CCT {"NAME":"Verve ACL01HA","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,0],"FLAG":0,"BASE":48} Verve Design Hana 24W CCT {"NAME":"Verve ACL03HA","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":48} +Yeelight Meteorite "Not available" ``` ## Contact Sensor @@ -147,21 +167,27 @@ TY01 Door Window {"NAME":"TY01","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0, Zemismart Door Window {"NAME":"Zemismart","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} ``` +## Curtain Module +``` +LoraTap SC500W Roller Shutter {"NAME":"SC500W","GPIO":[0,0,0,576,160,161,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} +LoraTap SC511WSC Roller Shutter {"NAME":"SC511WSC","GPIO":[0,1,0,320,32,34,0,0,224,33,226,225,0,0],"FLAG":0,"BASE":18} +MS-108 {"NAME":"MS-108","GPIO":[0,0,0,0,161,160,0,0,224,0,225,0,0,0],"FLAG":0,"BASE":18} +``` + ## Curtain Switch ``` Anccy {"NAME":"Anccy Shutter","GPIO":[544,0,289,34,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} Anccy Relax {"NAME":"Tuya Shutter","GPIO":[544,0,290,161,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} Avatto SYS-CS01 {"NAME":"Avatto","GPIO":[320,576,0,33,225,0,0,0,0,224,321,0,32,0],"FLAG":0,"BASE":18} +Currydouble {"NAME":"Currydouble","GPIO":[260,258,576,0,0,224,0,0,0,1,5760,225,259,0],"FLAG":0,"BASE":18} Etersky WF-CS01 {"NAME":"Etersky","GPIO":[544,0,289,34,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} Homecube {"NAME":"Jinvoo Curtain","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18} Jinvoo SM-SW101-C {"NAME":"Jinvoo Curtain","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18} Konesky {"NAME":"KingArt","GPIO":[544,0,289,162,226,32,0,0,33,225,290,224,288,0],"FLAG":0,"BASE":18} LoraTap SC400W-EU {"NAME":"Loratap SC400W","GPIO":[0,0,0,34,0,32,0,0,33,225,0,224,0,0],"FLAG":0,"BASE":18} LoraTap SC411WSC-EU RF Remote {"NAME":"Loratap","GPIO":[0,0,0,34,226,32,0,0,33,225,0,224,0,0],"FLAG":0,"BASE":18} -LoraTap SC500W Roller Shutter {"NAME":"SC500W","GPIO":[0,0,0,576,160,161,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} -LoraTap SC511WSC Roller Shutter {"NAME":"SC511WSC","GPIO":[0,1,0,320,32,34,0,0,224,33,226,225,0,0],"FLAG":0,"BASE":18} Maxcio WF-CS01 {"NAME":"Maxcio","GPIO":[544,0,289,162,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} -SCS86-03AJAI {"NAME":"ESE86-03AJAI","GPIO":[544,0,322,33,225,34,0,0,32,224,321,226,320,0],"FLAG":0,"BASE":18} +QS-WIFI-C01-RF {"NAME":"Shutter-QS-WIFI-C01","GPIO":[0,0,1,0,288,0,0,0,32,33,224,225,0,0],"FLAG":0,"BASE":18} Teekar SYS-CS 01 {"NAME":"Teekar-Tag","GPIO":[320,0,544,33,225,162,0,0,0,224,321,258,32,0],"FLAG":0,"BASE":18} Teepao {"NAME":"Teepao","GPIO":[576,322,226,33,225,34,0,0,320,224,321,0,32,0],"FLAG":0,"BASE":18} WF-CS01 {"NAME":"Tuya Shutter","GPIO":[544,0,290,161,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} @@ -177,23 +203,35 @@ ESP-M3 Module {"NAME":"ESP-M3","GPIO":[1,1,1,1,1,0,0,0,0,1,1,0,1, Heltec WiFi Kit 8 {"NAME":"HTIT-W8266","GPIO":[1,1,1,1,640,608,0,0,1,1,1,1,1024,1],"FLAG":0,"BASE":18} LC Tech relay and PZEM-004T {"NAME":"HW-655 PZEM","GPIO":[0,1504,0,1472,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} LC Technology PSF-B04 Ewelink 4 Channel Switch Module {"NAME":"LC-EWL-B04-MB","GPIO":[1,1,1,1,1,1,0,0,1,288,1,1,0,0],"FLAG":0,"BASE":18} +LilyGO TTGO T-Internet-POE "Not available" LilyGO TTGO TO ESP8266 OLED SH1106 Weather Station {"NAME":"TTGO T12","GPIO":[1,1,1,1,608,640,0,0,32,34,33,1,1,1],"FLAG":0,"BASE":18} -OLED Display Module 0.66" for Wemos D1 Mini {"NAME":"OLED 64x48","GPIO":[1,1,1,1,640,608,0,0,1,1,1,1,1024,1],"FLAG":0,"BASE":18} +Olimex ESP32-POE "Not available" QuinLED 2 Channel {"NAME":"QuinLED 2 channel","GPIO":[416,0,417,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} -Shelly UNI {"NAME":"Shelly Uni","GPIO":[320,0,0,0,225,0,0,0,192,193,0,224,0,4864],"FLAG":0,"BASE":18} +Shelly UNI {"NAME":"Shelly Uni","GPIO":[320,0,0,0,225,1216,0,0,192,193,0,224,0,4864],"FLAG":0,"BASE":18} +Silicognition wESP32 "Not available" +TZT ESP8266 Weather Station Kit {"NAME":"TZT Weather Station","GPIO":[32,0,640,0,1,1184,0,0,1,1,608,1,1,1],"FLAG":0,"BASE":18} WifInfo - Teleinfo Server {"NAME":"WifInfo","GPIO":[1376,1,1,5152,640,608,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18} +Wireless Tag ESP32 Ethernet Board "Not available" Witty Cloud {"NAME":"Witty Cloud","GPIO":[1,1,320,1,32,1,0,0,417,418,1,416,1,4704],"FLAG":0,"BASE":32} Yison ESP-01/ESP-202 Development Board {"NAME":"Yison Dev Board","GPIO":[259,544,258,1,260,261,1,1,416,418,257,417,256,1],"FLAG":0,"BASE":18} ``` +## Dehumidifier +``` +electriQ 12L Portable {"NAME":"electriQ CD12PW","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +``` + ## Dimmable ``` Aisirer 9W 806lm {"NAME":"Aisirer 9W","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Aisirer 9W 806lm {"NAME":"AISIRER E26","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Aisirer 9W 806lm {"NAME":"Aisirer 9W","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Arlec 4W 380lm Warm White Fancy Round Globe {"NAME":"Arlec E14 Smart Bulb","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Arlec Smart 4W 380lm Candle {"NAME":"Arlec Bulb 4W","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Arlec Smart 9W 950lm 4000K {"NAME":"Arlec-GLD124HA","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} -Avatar ALS15L Candle {"NAME":"AVATAR","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} +Avatar 5W Candle {"NAME":"AVATAR","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} +AZzardo ES111 Black 3000K 15W {"NAME":"Azzardo WiFi ES111 DIMM","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} +BrilliantSmart 8.5W 900lm 3000k {"NAME":"Brilliant20889","GPIO":[0,0,0,0,0,0,0,0,416,0,0,0,0,0],"FLAG":0,"BASE":18} Cleverio 51396 800lm {"NAME":"Cleverio E27","GPIO":[0,0,0,0,0,0,0,0,0,0,448,0,0,0],"FLAG":0,"BASE":18} Digma DiLight E27 W1 {"NAME":"DiLight E27 W1","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} DORESshop B11 600lm Filament {"NAME":"Doresshop-cand","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} @@ -215,6 +253,7 @@ Krisbow Bohlam 14W {"NAME":"Krisbow SmartL","GPIO":[0,0,0,0,0,416,0,0, LeDesign 8W ST21 Filament {"NAME":"Edison Bulb","GPIO":[0,0,0,0,0,0,0,0,0,416,0,0,0,0],"FLAG":0,"BASE":18} Lohas LZN127 G25 800lm {"NAME":"Lohas Globe","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Lohas ZN014 550lm {"NAME":"Lohas MR16","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} +Lohas ZN121 8W 720lm 2700k {"NAME":"Lohas LED A60","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} Lohas ZN124 980lm {"NAME":"Lohas LH-ZN124","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} LSC Filament A60 {"NAME":"LSC Filam E27","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} LSC Filament C35 {"NAME":"LSC Filam E14","GPIO":[0,1,0,1,0,0,0,0,417,0,416,0,0,1],"FLAG":0,"BASE":18} @@ -225,6 +264,7 @@ Lumary 6W 700lm Edison {"NAME":"Lumary TS3Y","GPIO":[0,0,0,0,0,0,0,0,0,416 Luminea ZX-2880 A60 800lm {"NAME":"LAV-110.w","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Luminea ZX-2982 ST64 Filament {"NAME":"Luminea ZX2982","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} MagicHome 7.5W Warm White {"NAME":"ZJ-8C2B-CCT-AV1.1","GPIO":[0,0,0,0,0,0,0,0,416,0,0,0,0,0],"FLAG":0,"BASE":18} +Malmbergs A60 8,5W 810lm {"NAME":"Malmbergs8,5W-W","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Merkury 9W 800lm {"NAME":"MI-BW320-999W","GPIO":[0,0,0,0,0,0,0,0,0,0,224,0,0,0],"FLAG":0,"BASE":18} Merkury BR30 750lm {"NAME":"MI-BW905-999W","GPIO":[0,0,0,0,0,416,0,0,417,0,0,0,0,0],"FLAG":0,"BASE":18} Merkury MI-BW902-999W 800lm {"NAME":"MI-BW902-999W","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} @@ -245,8 +285,13 @@ Nedis PAR16 330lm {"NAME":"Nedis WIFILW31","GPIO":[0,0,0,0,0,416,0,0, Nedis ST64 5W 500lm Filament {"NAME":"WIFILF10GDST64","GPIO":[0,0,0,0,0,0,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} NiteBird 8W 800lm 2700k {"NAME":"Nitebird-smart28k","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} Sealight Vintage Edison A19 {"NAME":"SealightEdison","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Shelly Vintage 4W 260lm 2700k {"NAME":"Shelly Vintage","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Shelly Vintage 7W 750lm 2700k {"NAME":"Shelly Vintage","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Shelly Vintage 7W 750lm 2700k {"NAME":"Shelly Vintage","GPIO":[0,0,0,0,416,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} SmartDGM 9W 806lm {"NAME":"L-WB9W1","GPIO":[0,0,0,0,0,416,0,0,160,0,0,0,0,0],"FLAG":0,"BASE":18} Smitch 10W 6500K {"NAME":"Smitch Ambience SB-0110","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +Smitch 10W 6500K {"NAME":"Smitch Ambience SB-0110","GPIO":[0,0,0,0,0,416,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +TCP Smart 806lm Warm White {"NAME":"TCP Smart Clas","GPIO":[0,0,0,0,0,0,0,0,0,416,0,0,0,0],"FLAG":0,"BASE":1} TCP Smart 810lm Filament {"NAME":"TCP Filament","GPIO":[0,0,0,0,0,0,0,0,0,0,448,0,0,0],"FLAG":0,"BASE":18} TCP Smart 810lm Filament {"NAME":"TCP Filament","GPIO":[0,0,0,0,0,0,0,0,0,0,448,0,0,0],"FLAG":0,"BASE":18} Xiaomi Philips MUE4088RT {"NAME":"Xiaomi Philips","GPIO":[0,0,0,0,0,0,0,0,0,0,0,416,0,0],"FLAG":0,"BASE":18} @@ -256,8 +301,8 @@ Xiaomi Philips MUE4088RT {"NAME":"Xiaomi Philips","GPIO":[0,0,0,0,0,0,0,0,0, ``` 3A Smart Home HGZB-04D {"NAME":"HGZB-4D","GPIO":[1,1,1,1,1,1,0,0,1,1,290,1,1,0],"FLAG":0,"BASE":54} Acenx SD03 {"NAME":"SD03","GPIO":[34,33,0,323,576,322,0,0,321,416,320,96,256,0],"FLAG":0,"BASE":73} -Armtronix AC Dimmer One Triac Board {"NAME":"ARMTR Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":56} -Armtronix AC Dimmer Two Triac Board {"NAME":"ARMTR Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":56} +Armtronix AC Dimmer 1-Triac {"NAME":"ARMTR Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":56} +Armtronix AC Dimmer 2-Triac {"NAME":"ARMTR Dimmer","GPIO":[0,3200,0,3232,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":56} BrilliantSmart D350W {"NAME":"Generic","GPIO":[1,2272,1,2304,1,1,0,0,1,0,1,0,1,0],"FLAG":0,"BASE":54} BrilliantSmart Jupiter {"NAME":"BrSm Jupiter","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} CE Smart Home {"NAME":"CE-WF500D","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} @@ -269,7 +314,7 @@ EX-Store 2 Kanal RS232 V4 {"NAME":"EXS Dimmer","GPIO":[0,3200,0,3232,0,0,0,0, Feit Electric Smart {"NAME":"Generic","GPIO":[1,2272,1,2304,1,1,0,0,1,0,1,0,1,0],"FLAG":0,"BASE":54} Gosund SW2 {"NAME":"Gosund Dimmer","GPIO":[1,3200,1,3232,32,0,1,1,320,576,416,1,1,0],"FLAG":0,"BASE":18} iSwitch Touch Switch {"NAME":"iSwitchOZ Dimmer","GPIO":[0,0,0,0,0,0,0,0,0,0,290,0,0,0],"FLAG":0,"BASE":54} -Martin Jerry SD01 {"NAME":"MJ-SD02","GPIO":[34,33,0,323,576,322,0,0,321,416,320,96,256,0],"FLAG":0,"BASE":73} +Martin Jerry SD01 {"NAME":"MJ-SD01 Dimmer","GPIO":[34,33,0,323,576,322,0,0,321,416,320,96,256],"FLAG":0,"BASE":73} Martin Jerry Single Pole {"NAME":"MJ-KN01 Dimmer","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Maxcio Rotary {"NAME":"EDM-1WAA-EU","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} Minoston 3-Way {"NAME":"MS10W","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} @@ -292,6 +337,14 @@ WiFi Dimmer Switch {"NAME":"PS-16-DZ","GPIO":[0,3200,0,3232,0,0,0,0,0, Zemismart KS-7011 {"NAME":"KS-7011 Dimmer","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} ``` +## Display +``` +LilyGO TTGO T-Watcher "Not available" +M5Stack Core2 "Not available" +ODROID-GO Game Kit "Not available" +OLED Display Module 0.66" for Wemos D1 Mini {"NAME":"OLED 64x48","GPIO":[1,1,1,1,640,608,0,0,1,1,1,1,1024,1],"FLAG":0,"BASE":18} +``` + ## Downlight ``` 3A 12W RGBW {"NAME":"RGBWSpot","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} @@ -300,15 +353,18 @@ BrilliantSmart Prism 10W RGBCCT {"NAME":"Prism","GPIO":[0,0,0,0,416,419,0,0,417 BrilliantSmart Trilogy 9W CCT {"NAME":"SmartCCTDwnLgt","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":48} Connect SmartHome RGB {"NAME":"CSH-240RGB10W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Deta 10W RGBCCT {"NAME":"Deta DownLight","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} +Deta 7W 660lm LED {"NAME":"Deta DownLight","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Feit Electric 6in. RGBW Recessed {"NAME":"Feit LEDR6/RGB","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":48} Globe 5W 4" Recessed RGBCCT {"NAME":"GlobeRGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Hyperikon 14W 1000lm 6" {"NAME":"HyperikonDL6","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} iHomma 6W RGBCCT {"NAME":"iHomma RGBWW","GPIO":[0,0,0,0,420,419,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} iHomma RGB BT+IR 12W {"NAME":"iHommaLEDDownl","GPIO":[0,0,0,0,0,419,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} Kogan 9W RGBCCT {"NAME":"Kogan_SMARTLED","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} +LEDLite CCT 10W Fire Rated {"NAME":"LEDLite-LTTD10Wifi","GPIO":[0,0,0,0,0,0,0,0,417,0,416,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio 9W CCT {"NAME":"GenioDLightCCT","GPIO":[0,0,0,0,0,0,0,0,449,0,416,0,0,0],"FLAG":0,"BASE":48} Mirabella Genio 9W RGBCCT {"NAME":"GenioDLightRGB","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Moes 7W RGBCCT {"NAME":"Moes Downlight","GPIO":[0,0,0,0,419,420,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} +Philips 200lm 3000 - 5700k CCT {"NAME":"xiaomi.philips.downlight","GPIO":[0,0,0,0,0,0,0,0,416,0,0,417,0,0],"FLAG":0,"BASE":18} Philips 5/6 in. RGBCCT {"NAME":"Philips","GPIO":[0,0,0,0,419,0,0,0,416,420,418,417,0,0],"FLAG":0,"BASE":48} Zemismart 4" 10W RGBCCT {"NAME":"ZemiDownLight4","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Zemismart 4" 10W RGBW {"NAME":"ZemiDownLight","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} @@ -329,13 +385,19 @@ BrilliantSmart 99111 {"NAME":"Brilliant Fan","GPIO":[0,2272,0,2304,0,0,0 Geek Aire AF1s {"NAME":"Geek Aire Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Goldair SleepSmart GCPF315 {"NAME":"Goldair Fan","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} Lucci Connect Remote Control {"NAME":"Lucci Fan","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} -Sichler Haushaltsgeräte Column {"NAME":"Sichler Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Sichler Haushaltsgeraete Column {"NAME":"Sichler Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Sonoff IFan02 {"NAME":"Sonoff iFan02","GPIO":[32,1,0,1,226,225,33,34,224,320,35,227,0,0],"FLAG":0,"BASE":44} Sonoff IFan03 {"NAME":"SonoffiFan03","GPIO":[32,3200,0,3232,0,0,256,512,226,320,225,227,0,0],"FLAG":0,"BASE":71} Technical Pro FXA16 {"NAME":"FXA16 Fan","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Zemismart Bladeless {"NAME":"Bladeless Fan","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} ``` +## Garage Door Opener +``` +MS-102 {"NAME":"Garage Opener","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Wofea {"NAME":"Wofea Garage Door","GPIO":[1,1,1,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":54} +``` + ## Gas Sensor ``` Natural Gas (CH4) Alarm {"NAME":"PA-210WYS","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} @@ -343,6 +405,7 @@ Natural Gas (CH4) Alarm {"NAME":"PA-210WYS","GPIO":[1,2272,1,2304,1,1,0,0,1 ## Heater ``` +Devola Designer Glass Panel {"NAME":"Devola Heater","GPIO":[0,0,0,0,224,1,0,0,0,1824,0,1792,0,0],"FLAG":0,"BASE":18} Klarstein Bornholm Smart 2000W {"NAME":"Klarstein Bornholm","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Kogan 1500W Panel {"NAME":"Kogan Panel Heater","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} ``` @@ -351,7 +414,8 @@ Kogan 1500W Panel {"NAME":"Kogan Panel Heater","GPIO":[0,0,0,0,0,0,0, ``` A1 Universal Remote Control {"NAME":"A1 IR Bridge","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Alfawise KS1 {"NAME":"KS1","GPIO":[1,1792,32,1824,32,1088,0,0,320,0,1056,0,0,4704],"FLAG":0,"BASE":62} -auvisio S06 {"NAME":"NX-4519-675","GPIO":[1,1,1,1,288,1088,0,0,1,1,1056,1,1,4704],"FLAG":0,"BASE":18} +Antsig Universal Remote Controller {"NAME":"Antsig Smart Wi-Fi IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} +auvisio S06 {"NAME":"NX-4519-675","GPIO":[0,0,0,0,288,1088,0,0,0,0,1056,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-RC1 Smart IR Controller {"NAME":"BW-RC1","GPIO":[0,0,0,0,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Connect SmartHome Universal Smart IR Remote {"NAME":"CSH IR Bridge","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Cusam CS-IRC-1 {"NAME":"YTF IR Bridge","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} @@ -360,11 +424,11 @@ Frankever Smart Remote {"NAME":"FK-UFO-R4","GPIO":[1,1,1,1,288,1088,0,0,0, Geeklink GK01 {"NAME":"GL IR Blaster","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Jinvoo AC/TV Box Controller {"NAME":"Jinvoo IR Bridge","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} JS-IR1 Universal Remote {"NAME":"JS-IR1","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":18} -Lenovo Smart IR Controller {"NAME":"Lenovo IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} +Lenovo SE-741C IR Controller {"NAME":"Lenovo IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Mirabella Genio I002577 {"NAME":"Genio IR TxRx","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} Nedis Universal Remote Control {"NAME":"Nedis IR Bridge","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} NEO Coolcam Remote Controller {"NAME":"Neo Coolcam IR","GPIO":[1,3200,1,3232,576,1088,0,0,320,32,1056,0,0,0],"FLAG":0,"BASE":62} -Orvibo Magic Cube {"NAME":"Orvibo","GPIO":[0,0,0,0,32,1376,0,0,288,0,1088,289,0,0],"FLAG":0,"BASE":18} +Orvibo Magic Cube {"NAME":"Orvibo CT10W","GPIO":[0,0,0,0,32,1088,0,0,288,0,1056,289,0,0],"FLAG":0,"BASE":18} RM mini {"NAME":"RM mini","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} STITCH by Monoprice {"NAME":"Stitch 35753","GPIO":[0,0,0,0,288,1088,0,0,0,64,1056,0,0,0],"FLAG":0,"BASE":18} SZMDLX IR Remote Controller {"NAME":"SZMDLX WiFi IR","GPIO":[0,0,0,0,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} @@ -372,6 +436,11 @@ TY-IR-01 {"NAME":"TY-IR-01 IR Bridge","GPIO":[1,1,1,1,288,10 YTF Universal Remote {"NAME":"YTF IR Bridge","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62} ``` +## Illuminance Sensor +``` +Lightsensor {"NAME":"Lightsensor","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +``` + ## Kettle ``` Anko 1.7L Cordless Water {"NAME":"Anko Kettle","GPIO":[1,1,1,1,1,1,0,0,1,2304,1,2272,1,0],"FLAG":0,"BASE":54} @@ -388,13 +457,14 @@ Arilux AL-LC06 {"NAME":"Arilux LC06","GPIO":[32,0,0,0,0,0,0,0,417, Arilux AL-LC11 {"NAME":"Arilux LC11","GPIO":[32,0,323,0,417,416,0,0,420,419,418,3136,0,0],"FLAG":0,"BASE":38} Arilux SL-LC 03 {"NAME":"Arilux LC03","GPIO":[0,0,0,0,1088,417,0,0,416,418,0,419,0,0],"FLAG":0,"BASE":34} Arilux SL-LC 09 {"NAME":"Arilux LC09","GPIO":[0,0,0,0,1152,416,0,0,418,0,417,0,0,0],"FLAG":0,"BASE":18} +Athom RGB {"NAME":"LS5050C-TAS","GPIO":[32,0,0,0,417,0,0,0,416,0,418,0,0,0],"FLAG":0,"BASE":18} Bakeey RGB {"NAME":"Bakeey Strip Controller","GPIO":[32,0,0,0,416,420,0,0,418,0,417,419,0,0],"FLAG":0,"BASE":18} CIN-03 96W RGB {"NAME":"CIN03-03 Strip","GPIO":[0,0,0,0,417,0,0,0,416,0,418,0,0,0],"FLAG":0,"BASE":18} DD001-MINI(G)-IR-V03 {"NAME":"WIFI-RGB","GPIO":[32,0,0,0,0,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":40} DD001-MINI(G)-IR-V08 {"NAME":"WIFI-RGB","GPIO":[0,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Electrodragon ESP LED Strip Board, Mosfet Drive {"NAME":"LEDBoard RGBW","GPIO":[0,0,0,0,0,0,0,0,418,417,419,416,288,0],"FLAG":0,"BASE":18} -ESP01 NeoPixel Ring {"NAME":"ESP-01S-RGB-LED-v1.0","GPIO":[1,1,1376,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} H801 {"NAME":"H801","GPIO":[0,288,0,0,420,321,0,0,418,417,419,416,0,0],"FLAG":0,"BASE":20} +Holman Garden Light RGB {"NAME":"Holman RGB","GPIO":[0,0,0,0,0,0,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18} Jinvoo SM-WA104 RGB {"NAME":"Jinvoo LED Controller","GPIO":[0,0,0,0,256,418,0,0,416,32,417,0,257,0],"FLAG":0,"BASE":18} Konesky 12V RGB {"NAME":"RGBwifi","GPIO":[0,0,0,0,416,0,0,0,417,320,418,0,0,0],"FLAG":0,"BASE":18} LEDEnet {"NAME":"LEDEnet","GPIO":[0,1,320,1,3136,420,0,0,417,418,416,419,0,0],"FLAG":0,"BASE":34} @@ -402,6 +472,7 @@ Luminea ZX-2844 {"NAME":"Luminea ZX-284","GPIO":[419,0,0,0,0,418,0, Luminea ZX-2844-675 {"NAME":"ZX-2844-675","GPIO":[32,0,0,0,417,419,0,0,416,0,418,0,0,0],"FLAG":0,"BASE":18} Lustreon {"NAME":"Lustreon WiFi ","GPIO":[32,0,291,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":38} Magic UFO RGBW {"NAME":"Magic UFO","GPIO":[32,0,544,0,0,416,0,0,418,419,417,320,0,0],"FLAG":0,"BASE":18} +MagicHome RGB {"NAME":"MagicHome RGB IR","GPIO":[0,0,0,0,1088,416,0,0,417,418,0,0,0,0],"FLAG":0,"BASE":18} MagicHome RGB {"NAME":"Magic Home RGB","GPIO":[0,0,0,0,3136,416,0,0,418,0,417,0,3168,0],"FLAG":0,"BASE":18} MagicHome RGB ZJ-WFMN-A V1.1 {"NAME":"MagicHome RGB","GPIO":[0,0,0,0,0,416,0,0,417,418,0,0,0,0],"FLAG":0,"BASE":34} MagicHome RGBW {"NAME":"ESP-IR-B-v2.3","GPIO":[0,0,1088,0,0,417,0,0,416,418,0,419,0,0],"FLAG":0,"BASE":18} @@ -413,9 +484,9 @@ MagicHome Single Color 5-28V {"NAME":"MagicHome","GPIO":[0,0,0,0,0,0,0,0,416,0, MagicHome ZJ-ESP-IR-F V1 {"NAME":"ZJ-ESP-IR-F V1","GPIO":[0,0,0,0,1088,417,0,0,416,418,0,419,0,0],"FLAG":0,"BASE":18} Music 12A 288W RGBW Led Controller {"NAME":"*WS04","GPIO":[0,0,0,0,0,0,0,0,417,418,416,419,0,0],"FLAG":0,"BASE":18} Nexlux {"NAME":"MagicHome V1.1","GPIO":[0,0,0,0,1088,416,0,0,417,418,0,0,0,0],"FLAG":0,"BASE":34} +Powertech RGB {"NAME":"Powertech RGB ","GPIO":[0,0,0,0,416,419,0,0,418,420,417,0,0,0],"FLAG":0,"BASE":18} QS-WIFI-RGBCW {"NAME":"QS-WIFI-RGBCW","GPIO":[0,0,32,0,544,417,0,0,418,0,289,416,0,0],"FLAG":0,"BASE":18} Shelly RGBW2 {"NAME":"Shelly RGBW2","GPIO":[0,0,288,0,419,1,0,0,416,32,418,417,0,0],"FLAG":0,"BASE":18} -SP501E WS2812B Addressable {"NAME":"SP501E","GPIO":[1,32,1,1376,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18} ZJ-WF-ESP-A v1.1 {"NAME":"RGB2","GPIO":[0,0,0,0,0,0,0,0,417,416,418,0,0,0],"FLAG":0,"BASE":18} ``` @@ -423,6 +494,7 @@ ZJ-WF-ESP-A v1.1 {"NAME":"RGB2","GPIO":[0,0,0,0,0,0,0,0,417,416,418, ``` Arlec Smart 2m LED Colour Changing Strip Light {"NAME":"Arlec ALD233AH","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} B.K. Licht 2m RGB {"NAME":"RGBW-Strip","GPIO":[0,0,0,0,416,32,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +BAZZ 10 ft RGBW {"NAME":"BAZZ U183MRGBWWF RGBW LED Strip","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-LT11 {"NAME":"BW-LT11 Strip","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} BrilliantSmart 20743 RGB+W {"NAME":"BrilliantStrip","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Briloner 2256-150 RGB {"NAME":"Briloner2256-1","GPIO":[1088,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} @@ -432,8 +504,8 @@ electriQ 3m RGBCCT {"NAME":"ElectricQ wifiRGBWLEDSTR","GPIO":[0,0,0,0, Elfeland 10m RGB {"NAME":"Elfeland RGB","GPIO":[0,0,0,0,0,417,0,0,418,1088,0,416,0,0],"FLAG":0,"BASE":18} Energizer Multi-Color 6.5ft {"NAME":"Energizer","GPIO":[0,0,0,0,0,417,0,0,418,0,0,416,0,0],"FLAG":0,"BASE":18} Geeni Prisma Plus {"NAME":"Geeni Prisma Plus Strip","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Gosund RGB {"NAME":"Gosund LED Strip","GPIO":[32,0,0,0,0,0,0,0,416,418,417,0,0,4768],"FLAG":0,"BASE":18} -Gosund SL2 5m RGB {"NAME":"Gosund LED Str","GPIO":[0,0,0,0,32,417,0,0,416,418,0,0,0,4768],"FLAG":0,"BASE":18} +Gosund RGB {"NAME":"Gosund LED Strip","GPIO":[0,0,0,0,32,417,0,0,416,418,0,0,0,4768],"FLAG":0,"BASE":18} +Gosund SL2 5m RGB {"NAME":"gosund SL2","GPIO":[1,1,1,1,99,417,1,1,416,418,1,1,1,1],"FLAG":0,"BASE":18} HitLights L1012V-MC1 {"NAME":"HitLights RBG","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} HomeMate 10m RGB {"NAME":"Homemate Strip","GPIO":[0,0,0,0,0,416,0,0,418,32,417,0,0,0],"FLAG":0,"BASE":18} Hykker 3m RGB {"NAME":"HYKKER Strip","GPIO":[0,0,0,0,0,416,0,0,418,32,417,0,0,0],"FLAG":0,"BASE":18} @@ -455,12 +527,14 @@ Monster Smart IlluminEssence {"NAME":"MI-EW003-999W ","GPIO":[32,0,0,0,416,419, NiteBird 9.2ft RGB TV Backlight {"NAME":"NiteBird Smart LED Light Strip","GPIO":[32,0,0,0,0,0,0,0,416,418,417,0,0,0],"FLAG":0,"BASE":18} Polux RGB+NW 2m {"NAME":"Polux Wi-Fi SM","GPIO":[32,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":37} Polux RGBCCT 20W 1700lm 5m {"NAME":"Polux LED 5m","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} -Powertech 5m RGBW {"NAME":"Jaycar ST3992 LED Strip","GPIO":[96,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +Powertech 5m RGBW {"NAME":"Jaycar ST3992 LED Strip","GPIO":[0,0,0,0,416,419,0,0,418,420,417,0,0,0],"FLAG":0,"BASE":18} Reafoo RGBW 5m {"NAME":"REAFOO RGBW LS","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Sonoff L1 {"NAME":"SonoffL1","GPIO":[0,3200,0,3232,0,0,0,0,0,320,0,0,0,0],"FLAG":0,"BASE":70} +Sonoff L1 Lite RGB {"NAME":"Sonoff L1 Lite","GPIO":[0,3200,0,3232,0,0,0,0,0,320,0,0,0,0],"FLAG":0,"BASE":70} Techvilla TE001 {"NAME":"TE-TE001","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Teckin SL02 {"NAME":"Teckin SL02","GPIO":[1088,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":52} Teckin SL07 32.8ft RGB {"NAME":"WIFI RGB","GPIO":[1088,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +Teopek Spider Z RGB {"NAME":"Sonoff L1","GPIO":[0,3200,0,3232,0,0,0,0,0,320,0,0,0,0],"FLAG":0,"BASE":70} TORCHSTAR CCT 30W Lighting Kit {"NAME":"Torchstar CCT ","GPIO":[0,0,0,0,288,417,0,0,0,32,0,416,289,0],"FLAG":0,"BASE":18} Torchstar Safe Lighting Kit {"NAME":"Torchstar","GPIO":[0,0,0,0,288,0,0,0,0,0,0,416,289,4704],"FLAG":0,"BASE":18} WOOX 5m RGBW {"NAME":"GardenLedstrip1","GPIO":[0,0,0,0,0,417,0,0,418,160,416,0,0,0],"FLAG":0,"BASE":18} @@ -492,17 +566,19 @@ Mirabella Genio 4 Black LED Garden Path {"NAME":"GenioGardenStr","GPIO":[0,0,0, Mirabella Genio CCT 6 LED 30mm Stainless Steel Deck {"NAME":"Mirabella Deck CCT","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":18} MiraBella Genio Colour 6 LED 30mm Stainless Steel Deck {"NAME":"Genio RGB Deck Lights","GPIO":[0,0,0,0,416,0,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio Rechargable LED Portable Lamp {"NAME":"MirabellaPortableLamp","GPIO":[32,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} -Novostella UT88835 20W Floodlight {"NAME":"Novo 20W Flood","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Novostella UT88835 20W Flood {"NAME":"Novo 20W Flood","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Novostella UT88836 20W Flood {"NAME":"Novo 20W Flood","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Sonoff BN-SZ01 {"NAME":"Sonoff BN-SZ","GPIO":[0,0,0,0,0,0,0,0,416,320,0,0,0,0],"FLAG":0,"BASE":22} Spotlight 9cm RGB+W 7W {"NAME":"Spotlight RGBW","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Teckin FL41 {"NAME":"Teckin FL41","GPIO":[0,0,0,0,0,32,0,0,0,0,416,0,0,0],"FLAG":0,"BASE":18} -Wipro Next 20W Smart LED Batten (White) {"NAME":"WIPROBatten","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,4704],"FLAG":0,"BASE":18} +Wipro Next Smart Batten 20W CCT {"NAME":"WIPROBatten","GPIO":[0,0,0,0,0,416,0,0,0,449,0,0,0,4704],"FLAG":0,"BASE":18} ``` ## Miscellaneous ``` Alfawise Air Purifier {"NAME":"alfawise P2","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} BlitzWolf Air Fryer {"NAME":"Bw-AF1","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Connex Smart Indoor Siren {"NAME":"Connex Siren","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Dealdig Robvaccum 8 Vacuum {"NAME":"WhiteVacuum","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} iLONDA Fish Feeder {"NAME":"Feeder","GPIO":[0,0,0,0,32,320,0,0,352,0,224,0,0,0],"FLAG":0,"BASE":18} Kogan 4.1kW Portable Air Conditioner (Reverse Cycle) {"NAME":"Kogan Panel Heater","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} @@ -523,14 +599,15 @@ Mirabella Genio I002576 {"NAME":"GenioPir","GPIO":[32,2272,0,2304,0,0,0,0,0 ## Motor ``` Zemismart BCM300D-TY {"NAME":"Zemistart_Curt","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} -Zemismart Blinds Controller "Not available" +Zemismart Blinds Controller {"NAME":"Zemismart Blind","GPIO":[1,1,1,1,1,1,0,0,1,2304,1,2272,1],"FLAG":0,"BASE":54} +Zemismart Rechargeable Roller Shade {"NAME":"Zemismart Remote","GPIO":[544,0,288,33,225,32,0,0,34,226,289,224,290,0],"FLAG":0,"BASE":18} Zemismart Roller Shade {"NAME":"M2805EIGB","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} Zemismart Updated RF Remote Roller Shade {"NAME":"Zemismart M515EGB","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} ``` ## Multisensor ``` -AZ-Envy Environmental Development Board {"NAME":"AZ Envy","GPIO":[0,0,288,0,640,608,0,0,0,0,0,0,0,4704],"FLAG":0,"BASE":18} +AZ-Envy Environmental Development Board {"NAME":"AZ Envy","GPIO":[32,0,320,0,640,608,0,0,0,0,0,0,0,4704],"FLAG":0,"BASE":18} NEO Coolcam Siren with Temperature and Humidity {"NAME":"Neo Siren 3in1","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} Sonoff SC {"NAME":"Sonoff SC","GPIO":[32,3200,1,3232,0,0,0,0,0,320,0,0,0,0],"FLAG":0,"BASE":21} ``` @@ -541,9 +618,10 @@ Acenx SOP04-US Dual {"NAME":"SOP04-US Dual","GPIO":[1,1,1,1,320,321,0,0 Aicliv 3 Outlet {"NAME":"AICLIV SOP03US","GPIO":[0,0,0,226,321,0,0,0,224,33,225,0,0,0],"FLAG":0,"BASE":18} Albohes PC-1606 {"NAME":"Albohes PC1606","GPIO":[32,0,0,0,0,225,33,0,224,0,0,0,0,4704],"FLAG":0,"BASE":39} Albohes PS-1602 {"NAME":"Albohes PC1606","GPIO":[32,0,0,0,0,225,33,0,224,0,0,0,0,4704],"FLAG":0,"BASE":39} +Amzdest Dual {"NAME":"Amzdest c158","GPIO":[0,32,0,225,2720,2656,0,0,224,2624,0,0,0,0],"FLAG":0,"BASE":18} Amzdest IP55 {"NAME":"C168 Outdoor","GPIO":[0,0,0,2592,2720,2656,0,0,224,320,225,226,32,0],"FLAG":0,"BASE":18} Aoycocr X13 {"NAME":"Aoycocr X13","GPIO":[0,0,320,0,0,0,0,0,225,32,0,224,0,0],"FLAG":0,"BASE":18} -Atomi AT1320 {"NAME":"AT1320","GPIO":[0,0,0,0,321,288,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Atomi {"NAME":"AtomiSmartPlug","GPIO":[0,0,0,0,320,576,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} BN-Link {"NAME":"BNC-60/U130T","GPIO":[1,0,1,0,1,320,1,1,224,32,1,0,0,1],"FLAG":0,"BASE":18} Brennenstuhl WA 3000 XS02 {"NAME":"WA 3000 XS02","GPIO":[0,0,0,0,224,32,0,0,576,288,0,0,0,0],"FLAG":0,"BASE":61} C119 {"NAME":"Subosi C119","GPIO":[0,0,0,0,225,320,0,0,224,544,32,0,321,0],"FLAG":0,"BASE":18} @@ -552,12 +630,14 @@ C168 IP64 {"NAME":"C188","GPIO":[320,0,321,0,33,0,0,0,224,32, ECF-SOP03 {"NAME":"Outdoor3Outlet","GPIO":[0,0,0,226,320,0,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} Ecoolbuy 4 socket {"NAME":"ECCOLBUY 4","GPIO":[0,0,0,0,225,226,0,0,224,321,32,0,227,0],"FLAG":0,"BASE":18} Edimax 2AC {"NAME":"EDI SP-1122WTO","GPIO":[0,0,0,0,225,576,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} -Etekcity {"NAME":"ES015-TB","GPIO":[0,0,0,0,224,225,0,0,2656,2688,32,2592,320,0],"FLAG":0,"BASE":18} +Emax IP44 {"NAME":"Emax Smart Socket","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} +Etekcity {"NAME":"ES015-TB","GPIO":[0,0,0,0,224,225,288,0,2656,2688,32,2592,289,0],"FLAG":0,"BASE":18} Feit Electric PLUG/WIFI/WP {"NAME":"Prime Smart ou","GPIO":[0,1,0,1,544,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Forrinx SH-18EU-A {"NAME":"SH-18EU-A","GPIO":[0,0,0,0,225,288,224,321,32,0,0,0,0,0],"FLAG":0,"BASE":18} Geeni Outdoor DUO Dual Outlet {"NAME":"Geeni Dual Out","GPIO":[32,0,0,0,0,321,0,0,0,320,224,0,225,0],"FLAG":0,"BASE":18} Globe 2-Outlet {"NAME":"Globe 50029","GPIO":[0,0,0,321,225,544,0,0,32,224,320,0,0,0],"FLAG":0,"BASE":18} HA109US {"NAME":"HA109US","GPIO":[32,0,0,0,288,289,0,0,224,0,225,0,0,0],"FLAG":0,"BASE":18} +Hama 2,300W/10A {"NAME":"Hama Outdoor","GPIO":[0,0,0,0,576,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} HBN 6 Outlet Yard Stake {"NAME":"BNC-60/U13WT","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} HBN Heavy Duty {"NAME":"HBN U151T","GPIO":[0,0,0,0,288,289,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} iClever IC-BS06 {"NAME":"iClever Switch","GPIO":[0,0,0,0,544,320,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} @@ -578,8 +658,9 @@ Obi Stecker IP44 {"NAME":"OBI Socket 2","GPIO":[0,0,0,0,224,32,0,0,3 Oittm Outdoor {"NAME":"Oittm Outdoor","GPIO":[32,0,0,0,0,0,0,0,0,0,320,224,1,0],"FLAG":0,"BASE":18} Peteme PS-1602 {"NAME":"Peteme Outdoor","GPIO":[32,0,0,0,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} Poweradd {"NAME":"POWERADD","GPIO":[0,0,0,0,320,321,0,0,224,32,225,0,0,0],"FLAG":0,"BASE":18} +Prime {"NAME":"PRIME CCRCWFI02PK","GPIO":[0,0,0,0,320,544,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Prime RCWFIO 2-Outlet {"NAME":"Prime Outdoor","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} -Prime Smart Outlet {"NAME":"Prime CCWFIO232PK","GPIO":[0,0,0,321,225,0,0,0,32,224,288,0,0,0],"FLAG":0,"BASE":18} +Prime Smart Outlet {"NAME":"Prime CCWFIO232PK","GPIO":[0,0,0,321,225,576,0,0,32,224,320,0,0,0],"FLAG":0,"BASE":18} Signstek EOP03-EU {"NAME":"Signstek EOP03","GPIO":[0,0,0,0,320,321,0,0,224,32,225,0,0,1],"FLAG":0,"BASE":18} SK03 {"NAME":"SK03 Outdoor","GPIO":[32,0,0,0,2688,2656,0,0,2624,321,320,224,0,0],"FLAG":0,"BASE":57} STITCH by Monoprice {"NAME":"STITCH 35556","GPIO":[1,1,1,1,225,321,0,0,224,320,32,1,1,0],"FLAG":0,"BASE":18} @@ -592,6 +673,7 @@ Treatlife Dimmer {"NAME":"DP10 Dimmer","GPIO":[0,2272,0,2304,0,0,0,0 Ucomen PA-GEBA-01SWP {"NAME":"PA-GEBA-01SWP","GPIO":[0,0,0,0,288,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} WOOX R4051 {"NAME":"WOOX R4051","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} WOOX R4052 {"NAME":"WOOX R4052","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} +Wyze Plug "Not available" ``` ## Plug @@ -644,11 +726,15 @@ Athom 16A AU {"NAME":"Athom PG05-IT16A","GPIO":[0,0,0,32,2720,26 Athom 16A Brazil {"NAME":"Athom PG05-BR16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} Athom 16A Israel {"NAME":"Athom PG05-IL16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} Athom 16A Italy {"NAME":"Athom PG05-IT16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1} +Athom 16A UK {"NAME":"Athom PG04-UK16A","GPIO":[0,0,0,32,2720,2656,0,0,0,0,2624,320,224,0],"FLAG":0,"BASE":18} +Athom 16A US {"NAME":"Athom PG03-US16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} +Atlantis {"NAME":"Atlantis Smart Plug","GPIO":[32,0,0,0,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} Atomi AT1217 {"NAME":"AT1217","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Aukey {"NAME":"Aukey SH-PA2","GPIO":[0,0,0,0,576,320,0,0,32,0,224,0,0,0],"FLAG":0,"BASE":18} +Aukey {"NAME":"AUKEY SH-PA2","GPIO":[0,0,0,0,576,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Aukey SH-PA1 {"NAME":"AUKEY SH-PA1","GPIO":[320,0,321,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} -Aukey SH-PA2 {"NAME":"AUKEY SH-PA2","GPIO":[0,0,0,0,576,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Aukey SH-PA3 {"NAME":"Aukey SH-PA3","GPIO":[0,0,576,0,321,32,0,0,225,0,0,224,0,0],"FLAG":0,"BASE":18} -Aunics Smart EU {"NAME":"AUNICS","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} +Aunics Presa Smart {"NAME":"AUNICS","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Aunics Smart IT {"NAME":"AUNICS","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} Avatar {"NAME":"Avatar UK 10A","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Avatar AWP01L {"NAME":"AWP01L","GPIO":[0,0,0,0,0,320,0,0,0,32,224,0,0,0],"FLAG":0,"BASE":18} @@ -669,7 +755,7 @@ Bagotte SK-EU-A01 {"NAME":"Bagotte SK-EU-A01","GPIO":[96,0,0,0,0,0,0, Bakibo TP22Y {"NAME":"Bakibo TP22Y","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52} Bardi 16A {"NAME":"BARDI","GPIO":[320,0,0,0,0,2720,0,0,224,32,2656,321,2624,0],"FLAG":0,"BASE":18} Bauhn ASPU-1019 {"NAME":"Bauhn Smart Pl","GPIO":[0,0,0,0,224,225,0,0,0,320,32,0,0,0],"FLAG":0,"BASE":18} -Be HiTech 16A {"NAME":"BeHiTech","GPIO":[0,0,0,288,0,2720,0,0,2624,32,2656,224,0],"FLAG":0,"BASE":18} +Be HiTech 16A {"NAME":"Be HiTech","GPIO":[0,0,0,288,0,2720,0,0,2624,32,2656,224,0],"FLAG":0,"BASE":18} Bearware 303492 3AC+2USB {"NAME":"Bearware 30349","GPIO":[0,320,0,32,225,226,0,0,227,224,544,0,0,0],"FLAG":0,"BASE":18} Bestek MRJ1011 {"NAME":"BestekMRJ1011","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":1} BlitzWolf 1200W Dual {"NAME":"BlitzWolf SHP3","GPIO":[320,0,321,0,225,2720,0,0,2624,33,2656,224,32,0],"FLAG":0,"BASE":45} @@ -686,8 +772,9 @@ BlitzWolf SHP1 {"NAME":"BlitzWolf-SHP1","GPIO":[320,0,321,0,0,0,0, Blitzwolf SHP11 16A {"NAME":"BlitzWolf-SHP11","GPIO":[320,0,321,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Bluemyth 16A {"NAME":"SWA11","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} BN-Link {"NAME":"BNC-60/U133TJ","GPIO":[0,288,0,32,2720,2656,0,0,2624,289,224,0,0,0],"FLAG":0,"BASE":18} -BNETA IO-WIFI-PlugSA {"NAME":"BNETA WifiPlug","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} +BNETA IoT {"NAME":"BNETA WifiPlug","GPIO":[32,288,0,0,2688,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} Bontec SPEU {"NAME":"Bontec SPEU","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} +Brennenstuhl Ecolor 3AC {"NAME":"WS EC01 DE","GPIO":[0,0,0,0,32,576,0,0,0,288,224,0,0,0],"FLAG":0,"BASE":18} Brennenstuhl WA 3000 {"NAME":"WA 3000 XS01","GPIO":[0,0,0,0,224,32,0,0,576,288,0,0,0,0],"FLAG":0,"BASE":61} Bright {"NAME":"Bright Wi-Fi Smart Plug","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Brilliant {"NAME":"HK17654S05","GPIO":[32,1,1,1,2688,2656,1,1,2624,320,224,1,1,0],"FLAG":0,"BASE":18} @@ -716,6 +803,7 @@ Connex CC-P1000 {"NAME":"Connex Smart T","GPIO":[32,0,0,0,2688,2656 Connex Type F {"NAME":"Connex CC-P1001","GPIO":[0,0,320,0,0,2688,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18} Coosa {"NAME":"COOSA","GPIO":[0,0,0,0,321,288,0,0,224,32,1,0,0,0],"FLAG":0,"BASE":1} Coosa SP1 {"NAME":"COOSA SP1","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} +CooWoo {"NAME":"CooWoo AW01","GPIO":[0,0,0,0,288,160,0,0,256,0,0,0,0,0],"FLAG":0,"BASE":18} CrazyLynX WiFi {"NAME":"CrazyLynX","GPIO":[0,0,0,0,321,320,0,0,224,32,0,0,0,4704],"FLAG":0,"BASE":18} CYYLTF BIFANS J23 {"NAME":"CYYLTD BIFANS J23","GPIO":[320,0,0,0,0,0,0,0,224,32,0,0,0,4704],"FLAG":0,"BASE":18} D3D Smart Plug with USB & Power Monitor {"NAME":"D3D FLHS-ZN04","GPIO":[321,1,320,2624,1,2688,1,1,1,32,2656,224,1,1],"FLAG":0,"BASE":18} @@ -746,7 +834,9 @@ EFUN SH331W {"NAME":"Efun-Plug","GPIO":[320,0,576,0,0,2720,0,0, Elehot 16A {"NAME":"ELEHOT AWP16L","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} EletecPro 2 {"NAME":"EletecPro-2","GPIO":[1,1,1,1,32,1,0,0,289,288,224,1,1,4704],"FLAG":0,"BASE":18} Ener-J {"NAME":"ENER-J SHA5264","GPIO":[32,0,0,0,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} +Energeeks {"NAME":"EG-EW003MC","GPIO":[0,0,0,32,2720,2656,0,0,2624,576,224,0,0,0],"FLAG":0,"BASE":52} Energeeks 2 USB {"NAME":"EG-EW005MC","GPIO":[544,1,288,1,1,225,1,1,2592,1,224,1,32,0],"FLAG":0,"BASE":18} +Energizer Smart Plug {"NAME":"Energizer Smart Plug","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Epicka {"NAME":"Epicka","GPIO":[1,1,1,1,321,320,0,0,224,32,1,1,1,4704],"FLAG":0,"BASE":18} Esicoo JSM-WF02 {"NAME":"Esicoo Plug","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Estink C178 {"NAME":"Estink C178","GPIO":[0,0,0,0,288,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} @@ -754,15 +844,20 @@ Etekcity ESW01-USA {"NAME":"ESW01-USA","GPIO":[0,0,0,0,224,544,0,0,265 Etekcity ESW15-USA {"NAME":"ESW15-US","GPIO":[0,0,0,0,0,224,0,0,2656,2688,32,2592,288,0],"FLAG":0,"BASE":18} EU3S {"NAME":"AWOW BSD33","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18} Eva Logik {"NAME":"EVA LOGIK Plug","GPIO":[1,32,1,1,1,1,0,0,1,288,224,1,1,0],"FLAG":0,"BASE":18} +EZPlug V1 OpenSource {"NAME":"EZPlug V1","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":1} +EZPlug+ V1 {"NAME":"EZPlug+ V1","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":1} +Febite {"NAME":"Febite","GPIO":[320,0,0,0,0,2720,0,0,224,32,2656,0,0,0],"FLAG":0,"BASE":1} Feit Electric PLUG/WIFI {"NAME":"Feit Wifi Plug","GPIO":[0,0,0,320,0,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} FK-PW901U {"NAME":"FK-PW901U","GPIO":[320,1,1,1,1,226,0,0,224,32,227,225,1,0],"FLAG":0,"BASE":18} FLHS-ZN04 {"NAME":"FLHS-ZN04","GPIO":[321,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Fontastic SH01 {"NAME":"Fontastic","GPIO":[1,0,1,0,320,0,0,0,224,32,0,0,0,4704],"FLAG":0,"BASE":18} +Foreet {"NAME":"Foreet_120V","GPIO":[0,0,0,0,224,32,0,0,289,288,0,0,0,0],"FLAG":0,"BASE":18} Foval SM-PW701E {"NAME":"SM-PW701E","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} FrankEver 15A {"NAME":"Israel plug","GPIO":[321,0,320,2624,0,2720,0,0,0,32,2656,224,0,0],"FLAG":0,"BASE":45} FrankEver 16A {"NAME":"FrankEver FK-PW801ER","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} -FrankEver Mini {"NAME":"FK-PW801US","GPIO":[0,0,0,0,224,225,0,0,226,227,228,229,230,0],"FLAG":0,"BASE":18} +FrankEver Mini {"NAME":"FK-PW801US","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Frankever USB {"NAME":"FK-PW301U","GPIO":[0,0,1,0,576,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +GDTech {"NAME":"GDTech Model: MPV2RO-US","GPIO":[320,0,0,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} GDTech W-US001 {"NAME":"GDTech W-US001","GPIO":[1,32,1,1,1,1,0,0,1,320,224,1,1,4704],"FLAG":0,"BASE":18} GDTech W-US003 {"NAME":"W-US003","GPIO":[0,32,1,1,1,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Geekbes YM-WS-1 {"NAME":"Office Test Pl","GPIO":[1,1,1,1,1,1,1,1,576,32,163,224,1,1],"FLAG":0,"BASE":18} @@ -776,6 +871,7 @@ Globe 2 Outlet {"NAME":"Globe 50020","GPIO":[0,576,0,321,33,32,0,0 Globe Smart {"NAME":"GlobeSmartPlug","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} GoldenDot Mini {"NAME":"GoldenDot Mini","GPIO":[0,32,0,0,0,0,0,0,0,321,224,0,0,0],"FLAG":0,"BASE":52} GoldenDot with ADC {"NAME":"W-US003-Power","GPIO":[320,0,0,0,0,0,0,0,0,32,0,224,0,4896],"FLAG":0,"BASE":18} +Goliath 16A {"NAME":"GOLIATH AV-SSTE01","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Gosund {"NAME":"Gosund EP2","GPIO":[320,1,576,1,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45} Gosund 13A {"NAME":"Gosund UP111","GPIO":[0,320,0,32,2720,2656,0,0,2624,576,224,0,0,0],"FLAG":0,"BASE":18} Gosund 2 in 1 {"NAME":"Gosund WP212","GPIO":[321,288,544,0,224,2720,0,0,2624,32,2656,225,33,0],"FLAG":0,"BASE":18} @@ -784,7 +880,6 @@ Gosund SP111 {"NAME":"Gosund SP111","GPIO":[320,0,321,0,0,2720,0 Gosund SP111 v1.1 {"NAME":"SP111 v1.1","GPIO":[320,0,576,0,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45} Gosund SP111 v1.4 {"NAME":"Gosund SP111","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Gosund SP112 {"NAME":"SHP5","GPIO":[321,3072,320,3104,1,225,0,0,1,1,224,1,32,0],"FLAG":0,"BASE":18} -Gosund SP112 {"NAME":"Gosund 112v3.4","GPIO":[320,0,321,0,2656,2720,0,0,2624,257,224,0,0,4800],"FLAG":0,"BASE":18} Gosund SP211 {"NAME":"Gosund SP211","GPIO":[33,576,320,2624,2720,2656,0,0,32,321,224,0,225,0],"FLAG":0,"BASE":18} Gosund WP1 {"NAME":"Gosund WP1-1","GPIO":[0,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Gosund WP2 {"NAME":"Gosund WP2","GPIO":[32,576,321,0,33,0,0,0,225,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -809,7 +904,7 @@ HiHome WPP-16T {"NAME":"HiHome WPP-16T","GPIO":[32,320,1,1,2720,26 HIPER IoT P01 {"NAME":"HIPER IoT P01","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} hiwild W-US002 {"NAME":"W-US002","GPIO":[0,32,0,0,0,0,0,0,0,288,224,0,576,0],"FLAG":0,"BASE":18} Hoin 10A {"NAME":"NIOH XS-SSC01","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} -Hombli Socket Duo {"NAME":"HombliSocketDuo","GPIO":[33,0,0,0,0,0,0,0,0,544,224,225,32,0,0],"FLAG":0,"BASE":18} +Hombli Socket Duo {"NAME":"HombliSocketDuo","GPIO":[33,0,0,0,0,0,0,0,0,544,224,225,32,0],"FLAG":0,"BASE":18} HomeMate 16A Heavy Duty {"NAME":"HMLPG16","GPIO":[0,288,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} Houzetek AWP07L {"NAME":"AWP07L","GPIO":[320,0,0,2592,0,2720,0,0,0,32,2656,224,0,0],"FLAG":0,"BASE":18} HS108 {"NAME":"HS108","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,4704],"FLAG":0,"BASE":18} @@ -828,6 +923,8 @@ Ihommate 16A {"NAME":"ZCH-02","GPIO":[0,0,0,32,2688,2656,0,0,259 Infray 16A {"NAME":"AWP08L","GPIO":[32,0,288,0,0,0,0,0,0,0,0,224,0,4704],"FLAG":0,"BASE":18} Insmart WP5 {"NAME":"INSMART","GPIO":[0,0,448,0,0,0,0,0,0,160,0,224,0,0],"FLAG":0,"BASE":18} iSwitch {"NAME":"Smart Plug XSA","GPIO":[1,32,1,1,1,1,0,0,1,320,224,1,1,0],"FLAG":0,"BASE":18} +ITINFTEK {"NAME":"ZEU-003","GPIO":[0,1,0,2624,2720,2656,0,0,224,32,320,0,0,0],"FLAG":0,"BASE":18} +J15 {"NAME":"J15","GPIO":[0,0,0,0,544,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Jeeo TF-SH330 {"NAME":"Jeeo TF-SH330","GPIO":[320,0,0,0,0,0,0,0,0,32,0,224,0,4704],"FLAG":0,"BASE":18} Jeeo TF-SH331W {"NAME":"Jeeo SH331W","GPIO":[320,0,576,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18} Jetstream MSP150 {"NAME":"JetstreamMSP150","GPIO":[320,0,321,0,224,2720,0,0,2624,32,2656,0,0,0],"FLAG":0,"BASE":45} @@ -843,6 +940,7 @@ Jules V (Upgrade Version) {"NAME":"Jules-V_UV","GPIO":[320,0,0,0,0,2720,0,0,2 JULES.V NX-SM200 V1.3 {"NAME":"NX-SM200","GPIO":[288,0,0,2624,0,2720,0,0,0,32,2656,224,0,4704],"FLAG":0,"BASE":45} Jules.V NX-SM300 {"NAME":"NX-SM300","GPIO":[288,0,0,0,0,2592,0,0,224,2656,2688,288,0,0],"FLAG":0,"BASE":6} Jules.V NX-SP203 {"NAME":"NX-SP203","GPIO":[288,0,0,0,32,2720,1,1,224,33,0,225,0,0],"FLAG":0,"BASE":18} +JuoYou 16A {"NAME":"Juoyou ZY-OYD","GPIO":[0,0,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} JVMAC-EU01 {"NAME":"JVMAC","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Kaforto KW-US-801 {"NAME":"Kaforto US-801","GPIO":[32,576,0,227,2720,2656,0,0,2624,225,224,226,0,0],"FLAG":0,"BASE":18} Kimire S12 {"NAME":"Kimire S12","GPIO":[1,1,1,32,1,1,0,0,1,320,224,1,1,0],"FLAG":0,"BASE":18} @@ -862,10 +960,12 @@ Koogeek W-DEXI {"NAME":"W-DEXI","GPIO":[0,64,0,0,2720,2656,0,0,259 Koogeek W-UKX {"NAME":"Koogeek W-UKX","GPIO":[0,32,1,1,1,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":1} KULED K63 {"NAME":"KULED K63","GPIO":[0,0,0,0,224,32,0,0,320,0,0,0,0,0],"FLAG":0,"BASE":18} Laduo YX-DE01 {"NAME":"YX-DE01","GPIO":[1,32,1,1,1,1,0,0,1,320,224,1,1,0],"FLAG":0,"BASE":18} +LE LampUX Smart Socket {"NAME":"LE LampUX","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Lenovo SE-341A {"NAME":"Lenovo SE-341A","GPIO":[0,0,0,0,32,224,0,0,576,0,320,0,0,0],"FLAG":0,"BASE":18} LESHP KS-501 {"NAME":"LESHP KS-501","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Lighting Arena {"NAME":"Lighting Arena Smart Plug","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Lloyd's {"NAME":"Lloyds LC-1193","GPIO":[0,0,0,0,320,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} +LogiLink {"NAME":"LogilinkPA0199","GPIO":[0,0,0,64,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} LogiLink PA0200 {"NAME":"LogilinkPA0200","GPIO":[0,0,0,64,0,0,0,0,0,320,224,0,0,4896],"FLAG":0,"BASE":18} Lohas Nightlight + USB {"NAME":"Lohas LED Mini Plug","GPIO":[0,321,0,288,322,226,1,1,224,32,225,0,544,0],"FLAG":0,"BASE":18} Lonsonho 10A Type E {"NAME":"Lonsonho10ALed","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} @@ -893,6 +993,7 @@ Merkury MI-WW102-199L {"NAME":"MIC-WW102","GPIO":[32,0,0,0,0,0,0,0,0,320, Merkury MI-WW105-199W {"NAME":"Merkury Switch","GPIO":[1,1,1,1,576,320,0,0,224,32,1,1,1,4704],"FLAG":0,"BASE":18} Mini {"NAME":"MiniSmartSocket_S03","GPIO":[0,0,0,0,320,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} Minleaf W-DEXI {"NAME":"W-DEXI","GPIO":[0,32,0,0,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} +Mirabella Genio {"NAME":"GenioGpo","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio 1002341 {"NAME":"Genio 1","GPIO":[0,0,320,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":1} Mirabella Genio USB {"NAME":"Mirabella Genio 1002826","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":1} Mirabella Genio USB Port {"NAME":"Genio I002341","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":1} @@ -914,6 +1015,8 @@ NEO Coolcam NAS-WR01W 16A {"NAME":"Neo Coolcam 16","GPIO":[32,0,0,0,2720,2656 NETVIP XS-SSA01 {"NAME":"XS-SSA01","GPIO":[0,0,0,0,0,0,0,0,320,32,0,224,0,0],"FLAG":0,"BASE":18} Nightlight and AC Outlet {"NAME":"SWN03","GPIO":[32,0,0,0,0,0,1,1,416,0,0,224,0,0],"FLAG":0,"BASE":18} Nishica SM-PW701I {"NAME":"SM-PW701I","GPIO":[1,1,1,1,1,1,1,1,224,288,32,1,1,1],"FLAG":0,"BASE":18} +Nivian {"NAME":"Nivian Smart Socket","GPIO":[0,0,320,0,0,2688,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":18} +Nous A1 {"NAME":"Nous A1","GPIO":[320,1,321,1,2656,2720,0,0,2624,32,0,224,0,0],"FLAG":0,"BASE":45} NX-SM112 {"NAME":"NX-SM112v3","GPIO":[0,0,0,0,2720,2656,0,0,576,32,2592,224,0,0],"FLAG":0,"BASE":45} NX-SM200 {"NAME":"NX-SM200","GPIO":[320,0,0,0,0,2720,0,0,224,32,2656,321,2624,0],"FLAG":0,"BASE":18} NX-SM210 {"NAME":"NX-SM210","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -985,7 +1088,7 @@ SP201 Dual {"NAME":"SP-201","GPIO":[258,0,0,2624,32,2720,0,0,2 SPARKE JH-G01E 10A {"NAME":"SPARKE JH-G01E","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} SPC Clever 6201B {"NAME":"SPC Clever Plu","GPIO":[32,0,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} SS01 {"NAME":"Smart Plug SS0","GPIO":[1,1,1,1,1,1,0,0,224,32,1,1,1,4704],"FLAG":0,"BASE":18} -Steren SHOME-100 {"NAME":"SHOME-100 V1.0","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Steren {"NAME":"SHOME-100 V1.0","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} STITCH by Monoprice {"NAME":"Stitch 27937","GPIO":[32,0,320,0,2688,2656,0,0,2624,0,224,0,321,0],"FLAG":0,"BASE":18} STITCH by Monoprice {"NAME":"Stitch 35511","GPIO":[320,0,321,0,0,2688,0,0,0,32,2656,224,2624,0],"FLAG":0,"BASE":18} SuperNight Dual {"NAME":"SuperNight Dua","GPIO":[1,32,1,224,2656,2688,0,0,225,2592,322,1,1,4704],"FLAG":0,"BASE":18} @@ -995,8 +1098,10 @@ SWA1 UK {"NAME":"SWA1","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0 SWA11 {"NAME":"SWA11","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} SWA5 {"NAME":"Lingan SWA5","GPIO":[320,0,0,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} SWA9 {"NAME":"SWA9","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18} -SwissTone SH 100 {"NAME":"SwissTone","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +SwissTone {"NAME":"SwissTone","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Sygonix SY-4276902 {"NAME":"SYGONIX","GPIO":[0,0,0,32,2688,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18} +Szshining {"NAME":"Szshining ITSP10-2","GPIO":[0,225,0,32,2720,2656,0,0,2624,0,224,0,0,0],"FLAG":0,"BASE":18} +Talo 10A {"NAME":"Talo smart plug","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49} TanTan WP2 {"NAME":"TanTan WP2","GPIO":[321,320,576,1,224,2720,1,1,2624,32,2656,225,33,1],"FLAG":0,"BASE":18} TanTan WP3 {"NAME":"TanTan WP3","GPIO":[0,0,320,0,32,0,0,0,321,0,224,0,0,0],"FLAG":0,"BASE":18} TCP Smart 13A {"NAME":"TCP_Plug","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":45} @@ -1015,7 +1120,7 @@ Timethinker C338 {"NAME":"C338","GPIO":[32,0,1,0,0,0,0,0,224,288,1,0 Timethinker TK04 {"NAME":"TimethinkerEU","GPIO":[1,1,1,1,32,1,0,0,1,288,224,1,0,0],"FLAG":0,"BASE":18} TimeThinker WS2 {"NAME":"TimeThinkerWS2","GPIO":[0,0,0,0,32,0,0,0,0,288,224,0,0,0],"FLAG":0,"BASE":18} TomaxUSA {"NAME":"HKWL-SO07W","GPIO":[32,1,1,1,1,1,0,0,1,1,224,1,320,0],"FLAG":0,"BASE":18} -Topersun WL-SC01 {"NAME":"Topersun ","GPIO":[0,0,0,0,288,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} +Topersun {"NAME":"Topersun ","GPIO":[0,0,0,0,288,0,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} TopGreener 10A {"NAME":"TGWF115PQM","GPIO":[0,320,0,32,2720,2656,0,0,2624,321,224,0,0,0],"FLAG":0,"BASE":18} TopGreener TGWF115APM {"NAME":"TGWF115APM","GPIO":[0,320,0,32,2720,2656,0,0,2624,321,224,0,0,0],"FLAG":0,"BASE":18} Torchstar LITEdge Smart {"NAME":"LITEdge Plug","GPIO":[0,32,0,0,0,0,0,0,0,288,224,0,0,0],"FLAG":0,"BASE":18} @@ -1024,6 +1129,7 @@ TP20 {"NAME":"TP20","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0 TP24 {"NAME":"TP24","GPIO":[0,0,0,32,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} U10 Series {"NAME":"WIFI-Socket","GPIO":[1,32,1,1,1,1,1,1,1,320,224,1,1,4704],"FLAG":0,"BASE":18} Ultralink UL-P01W {"NAME":"UL-P01W","GPIO":[0,288,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18} +Upstone {"NAME":"UPSTONE","GPIO":[1,1,544,1,320,1,0,0,224,32,1,1,1,1],"FLAG":0,"BASE":18} US212 {"NAME":"US212","GPIO":[320,0,0,2624,0,2720,0,0,224,32,2656,225,0,0],"FLAG":0,"BASE":18} Varna Crafts 16A {"NAME":"VC Plug","GPIO":[544,0,0,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45} Vaupan X6P {"NAME":"Vaupan 10a X6P","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} @@ -1049,7 +1155,7 @@ WOOX R4785 {"NAME":"WOOXR4785","GPIO":[0,0,0,0,288,224,0,0,0,3 WOOX R5024 {"NAME":"WOOX5024","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} WP211 {"NAME":"YUNTAB WP211","GPIO":[320,0,576,0,225,0,0,0,0,33,0,224,32,0],"FLAG":0,"BASE":18} WP5 {"NAME":"WP5","GPIO":[321,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} -Wyze WLPP1 {"NAME":"WyzePlugWLPP1","GPIO":[0,0,0,0,0,320,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} +Wyze {"NAME":"WyzePlugWLPP1","GPIO":[0,0,0,0,0,320,0,0,224,0,32,0,0,0],"FLAG":0,"BASE":18} Xenon SM-PW702-U {"NAME":"SM-PW702","GPIO":[0,0,0,0,321,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Xiaomi IMILAB ZNCZ05CM {"NAME":"Mi Smart Plug","GPIO":[32,0,0,0,320,224,0,0,0,576,0,0,0,0],"FLAG":0,"BASE":18} XS-A11 {"NAME":"THRUMM XS-A11","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} @@ -1092,9 +1198,10 @@ AOFO 4AC + 4USB {"NAME":"AOFO C379 4AC+4USB UK ","GPIO":[0,576,0,32 AOFO 4AC+4USB {"NAME":"AOFO4AC4USB","GPIO":[0,320,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} AOFO 4AC+4USB Tuya {"NAME":"AOFO-4AC-4USB","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,4704],"FLAG":0,"BASE":54} AOFO 4AC+4USB UK {"NAME":"AOFO4AC4USB-UK","GPIO":[0,320,0,32,226,227,0,0,225,224,260,0,0,0],"FLAG":0,"BASE":18} +Arlec 4 Outlet {"NAME":"Arlec PB4KSHA Powerboard","GPIO":[0,32,1,1,1,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":12} Arlec Smart {"NAME":"Arlec PB88UHA","GPIO":[0,320,0,32,225,224,0,0,227,226,0,0,0,1],"FLAG":0,"BASE":18} +Arlec Smart {"NAME":"Arlec PB89HA","GPIO":[0,320,0,32,225,224,0,0,227,226,0,0,0,0],"FLAG":0,"BASE":18} Arlec Smart 3 Outlet Power Cube {"NAME":"Arlec Cube","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} -Arlec Smart PB89HA {"NAME":"Arlec PB89HA","GPIO":[0,320,0,32,225,224,0,0,227,226,0,0,0,0],"FLAG":0,"BASE":18} Bauhn ASPBU-1019 {"NAME":"Bauhn 3AC+3USB","GPIO":[0,544,0,0,225,224,0,0,0,226,32,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SHP9 {"NAME":"BlitzWolf SHP9","GPIO":[576,1,0,1,0,226,0,0,224,32,225,227,0,0],"FLAG":0,"BASE":45} Brennenstuhl Connect Eco-Line {"NAME":"WS EL01 DE","GPIO":[34,33,0,32,224,225,0,0,288,0,0,289,576,0],"FLAG":0,"BASE":18} @@ -1102,9 +1209,11 @@ BrilliantSmart 20691 Powerboard with USB Chargers {"NAME":"B_WiFi-4","GPIO":[32 CE Smart Home {"NAME":"CE Power Strip","GPIO":[288,0,0,0,225,224,0,0,227,226,228,229,32,0],"FLAG":0,"BASE":18} CE Smart Home Garden Stake {"NAME":"CE Power Stake","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} CRST LTS-4G-W {"NAME":"CRST LTS-4G-W","GPIO":[0,0,0,0,227,0,0,0,225,226,224,0,0,0],"FLAG":0,"BASE":18} +Curv 4 Plug {"NAME":"CURV","GPIO":[0,32,0,228,0,0,1,1,227,225,226,224,0,1],"FLAG":0,"BASE":18} Deltaco SH-P03USB {"NAME":"Deltaco SH-P03","GPIO":[320,0,0,0,0,226,0,0,224,32,225,227,0,0],"FLAG":0,"BASE":18} Digoo DG-PS01 {"NAME":"Digoo DG-PS01","GPIO":[0,320,0,32,226,225,0,0,0,227,224,0,0,4704],"FLAG":0,"BASE":18} Ener-J Extension Box with USB {"NAME":"ENER-J SHA5207","GPIO":[544,0,0,321,225,322,1,1,320,224,227,226,32,1],"FLAG":0,"BASE":18} +Forrinx 3AC 4USB {"NAME":"SH-20","GPIO":[0,320,0,321,225,224,0,0,32,226,227,0,0,0],"FLAG":0,"BASE":18} Geekbes 4AC+4USB {"NAME":"Geekbes 4xStri","GPIO":[0,320,0,32,225,224,0,0,226,227,228,0,0,4704],"FLAG":0,"BASE":18} Geeni Surge {"NAME":"Geeni GNCSW003","GPIO":[288,0,0,0,225,224,0,0,227,228,226,229,32,0],"FLAG":0,"BASE":18} Geeni Surge + Charge 2 USB {"NAME":"Geeni GN-SW023","GPIO":[288,0,0,0,225,224,0,0,226,227,228,0,32,0],"FLAG":0,"BASE":18} @@ -1114,8 +1223,9 @@ Globe 4 Outlet 2 USB {"NAME":"PowerBar","GPIO":[320,0,0,0,227,32,0,0,225 Gosund P1 {"NAME":"Gosund_P1","GPIO":[0,3072,544,3104,0,259,0,0,225,226,224,0,32,4704],"FLAG":0,"BASE":18} Gosund P2 {"NAME":"Gosund P2","GPIO":[0,0,544,0,0,259,0,0,224,225,226,0,32,0],"FLAG":0,"BASE":18} Gosund WP9 {"NAME":"Gosund WP9","GPIO":[320,291,290,289,0,224,0,0,226,227,225,0,32,0],"FLAG":0,"BASE":18} +Hama 4AC 4USB {"NAME":"HamaStrip","GPIO":[0,544,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} Heyvalue 3AC+3USB {"NAME":"HeyvalueHLT-330","GPIO":[288,0,289,0,227,256,0,0,257,35,258,0,0,0],"FLAG":0,"BASE":18} -Heyvalue 4AC+4USB {"NAME":"Heyvalue HLT-331","GPIO":[321,0,576,320,259,32,0,0,257,258,256,0,228,0],"FLAG":0,"BASE":18} +Heyvalue 4AC+4USB {"NAME":"Heyvalue HLT-331","GPIO":[288,1,1,321,256,32,0,0,258,257,259,1,228,0],"FLAG":0,"BASE":18} HIPER IoT PS44 {"NAME":"HIPER IoT PS44","GPIO":[0,320,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} HLT-333 {"NAME":"BEYAWL","GPIO":[0,0,320,227,0,0,0,0,0,257,256,258,0,0],"FLAG":0,"BASE":18} Home Awesome 4AC 4USB {"NAME":"Home Awesome","GPIO":[288,0,289,0,228,225,0,0,227,32,226,224,0,0],"FLAG":0,"BASE":18} @@ -1124,7 +1234,9 @@ Hyleton 330 {"NAME":"Hyleton-330","GPIO":[321,0,0,320,256,32,0, Hyleton 331 {"NAME":"HLT-331","GPIO":[288,1,1,321,256,32,0,0,258,257,259,1,322,0],"FLAG":0,"BASE":18} Hyleton 333 {"NAME":"HLT-333","GPIO":[288,0,0,321,256,32,0,0,258,257,0,0,227,0],"FLAG":0,"BASE":18} Hyleton 336 {"NAME":"HLT-336","GPIO":[288,0,0,321,256,32,0,0,258,257,0,0,259,0],"FLAG":0,"BASE":18} +Idinio 3AC 4USB {"NAME":"Idinio-140135","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,0],"FLAG":0,"BASE":18} Jinvoo 4AC+2USB {"NAME":"JINVOO Model SM-SO306-2A","GPIO":[320,0,0,0,259,32,0,0,257,258,256,0,228,0],"FLAG":0,"BASE":18} +KaBuM! Filtro de Linha {"NAME":"Kabum Power Strip","GPIO":[0,544,0,32,227,228,0,0,0,225,226,224,320,0],"FLAG":0,"BASE":18} KMC 5AC 3USB QC {"NAME":"KMC 5-Outlet","GPIO":[320,0,0,0,228,160,0,0,225,224,226,0,227,0],"FLAG":0,"BASE":18} Kogan Power Strip USB Ports & Energy Meter {"NAME":"Generic","GPIO":[64,320,0,227,2720,2656,0,0,2624,225,226,224,0,0],"FLAG":0,"BASE":18} Konesky Type 1 {"NAME":"Konesky","GPIO":[0,0,0,0,228,225,0,0,227,32,226,224,0,0],"FLAG":0,"BASE":18} @@ -1133,14 +1245,18 @@ Larkkey 4AC 4USB {"NAME":"LARKKEY Strip","GPIO":[0,544,0,32,225,224, LeFun SK2 {"NAME":"LeFun SK2","GPIO":[0,0,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} Luminea 3AC+4USB 16A {"NAME":"Luminea-NX4473","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,0],"FLAG":0,"BASE":18} Maxcio ZLD-34EU-W {"NAME":"MAXCIO","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,4704],"FLAG":0,"BASE":18} +Merkury Innovations SmartSurge {"NAME":"Merkury MI-SW001","GPIO":[288,0,289,0,228,32,0,0,225,224,226,0,227,0],"FLAG":0,"BASE":18} +Meross 4AC 4USB {"NAME":"HamaStrip","GPIO":[0,544,0,32,225,224,0,0,226,227,228,0,0,0],"FLAG":0,"BASE":18} Meross MSS425 {"NAME":"Meross MSS425","GPIO":[260,0,0,0,320,0,0,0,224,32,225,226,259,0],"FLAG":0,"BASE":18} Mirabella Genio 4 Outlet Power Board with 2 USB {"NAME":"Genio i002340","GPIO":[320,0,0,0,224,225,0,0,226,32,227,228,0,0],"FLAG":0,"BASE":18} Mirabella Genio Powerboard {"NAME":"Genio Powerboa","GPIO":[224,288,0,0,226,225,0,0,228,32,229,227,0,0],"FLAG":0,"BASE":18} Nedis P310 {"NAME":"Nedis WIFIP310","GPIO":[0,320,0,32,225,224,0,0,0,226,227,0,0,4704],"FLAG":0,"BASE":18} Nozdom 3AC+2USB {"NAME":"NOZDOM SWB3","GPIO":[544,0,289,0,0,226,0,0,224,32,225,227,0,0],"FLAG":0,"BASE":18} +Powertech 4AC 2USB {"NAME":"Ptech MS6107","GPIO":[0,288,0,32,224,225,0,0,227,228,226,0,0,0],"FLAG":0,"BASE":18} Powrui AHR-079 {"NAME":"Powrui Power S","GPIO":[320,0,0,32,34,224,0,0,226,35,225,227,33,0],"FLAG":0,"BASE":18} Powrui AHR-081 {"NAME":"POWRUI AHR-081","GPIO":[0,0,0,0,320,32,0,0,225,226,224,0,0,0],"FLAG":0,"BASE":18} Powrui AW-39 {"NAME":"Powrui AW-39","GPIO":[320,0,0,0,224,1,0,0,226,227,225,0,160,0],"FLAG":0,"BASE":18} +POWSAV 5+5AC 4USB {"NAME":"POWSAV 5+5AC+4USB","GPIO":[320,0,0,32,224,225,0,0,228,0,227,226,0,0],"FLAG":0,"BASE":18} S2199EU {"NAME":"S2199EU","GPIO":[0,32,0,288,226,228,0,0,224,227,225,0,0,4704],"FLAG":0,"BASE":18} SA-P402A {"NAME":"SA-P402A","GPIO":[0,32,0,320,226,228,224,227,225,0,0,0,0,4704],"FLAG":0,"BASE":18} STITCH by Monoprice 4 AC, 2 Always-On USB {"NAME":"MP Stitch 34082","GPIO":[320,0,0,0,227,32,0,0,225,226,224,0,0,0],"FLAG":0,"BASE":18} @@ -1156,6 +1272,7 @@ Vivitar HA-1007 {"NAME":"Vivitar HA-1007 Power Strip","GPIO":[544,0 Vivitar HA-1007-AU {"NAME":"HA-1007-AU","GPIO":[320,32,0,322,256,321,0,0,258,257,259,0,228,0],"FLAG":0,"BASE":18} wesmartify essentials 4AC+4USB {"NAME":"essential_4_po","GPIO":[320,0,0,0,227,228,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":18} Wipro Smart Extension {"NAME":"Generic","GPIO":[321,0,0,0,259,0,0,0,257,258,256,0,228,0],"FLAG":0,"BASE":18} +Wolf Armor 4AC 4USB {"NAME":"Wolf Armor SP26","GPIO":[0,320,0,32,227,226,0,0,224,228,225,0,0,0],"FLAG":0,"BASE":18} WOOX R4028 {"NAME":"WOOX R4028","GPIO":[0,320,0,32,226,225,0,0,0,227,224,0,0,4704],"FLAG":0,"BASE":18} WP40 {"NAME":"WP40","GPIO":[260,0,0,0,320,0,0,0,224,32,225,226,259,0],"FLAG":0,"BASE":18} Xenon SM-S0301 {"NAME":"SM-SO301","GPIO":[288,1,1,321,256,32,0,0,258,257,259,1,228,0],"FLAG":0,"BASE":18} @@ -1168,7 +1285,6 @@ XS-A34 {"NAME":"XS-A24","GPIO":[288,0,289,0,228,225,0,0,22 Yagala {"NAME":"Yagala","GPIO":[288,1,1,321,256,32,0,0,258,257,259,1,228,0],"FLAG":0,"BASE":18} Yagala SWB3 {"NAME":"YAGALA SWB3","GPIO":[544,0,289,0,0,226,0,0,224,32,225,227,0,0],"FLAG":0,"BASE":18} Yagala Z1 {"NAME":"YAGALA Z1","GPIO":[0,544,0,32,225,227,0,0,226,228,224,0,0,0],"FLAG":0,"BASE":18} -Yuanguo 4AC + 2 USB {"NAME":"YUANGUO","GPIO":[0,35,0,227,34,33,0,0,32,225,224,226,0,0],"FLAG":0,"BASE":1} Yuanguo 4AC+2USB {"NAME":"YUANGUO","GPIO":[164,35,0,227,34,33,0,0,32,225,224,226,544,0],"FLAG":0,"BASE":1} Zeoota 4AC 2USB {"NAME":"Zeoota WP30","GPIO":[0,32,0,227,0,0,0,0,0,225,224,226,0,4896],"FLAG":0,"BASE":18} Zeoota PS022 {"NAME":"ZEOOTA 3x plus","GPIO":[0,321,0,320,225,224,0,0,32,226,227,0,0,4704],"FLAG":0,"BASE":18} @@ -1205,8 +1321,10 @@ Aoycocr JL81 5W 400lm {"NAME":"AoycocrJLB1","GPIO":[0,0,0,0,418,0,0,0,417 Aoycocr Q10CWM BR30 9W 720lm {"NAME":"AoycocrBR30","GPIO":[0,0,0,0,0,418,0,0,417,0,416,419,0,0],"FLAG":0,"BASE":18} Arlec Smart 9.5W 806lm {"NAME":"Arlec RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Arlec Smart 9.5W 806lm {"NAME":"Arlec RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Athom 15W 1400lm {"NAME":"Athom LB017W","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":1} Athom 7W 600lm {"NAME":"Athom LB017W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":1} Aunics 7W 600lm {"NAME":"Aunics RGBW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Avatar 8W 800lm {"NAME":"Avatar 8W RGBCW","GPIO":[1,1,1,1,416,419,1,1,417,420,418,1,1,1],"FLAG":0,"BASE":18} Avatar ALB201W 720lm {"NAME":"AVATAR ALB201W","GPIO":[0,0,0,0,0,418,0,0,417,0,416,419,0,0],"FLAG":0,"BASE":18} Avatar ALS18L A60 800lm {"NAME":"Avatar E14 7W","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":20} B.K. Licht 5.5W 350lm {"NAME":"BKL1262","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} @@ -1217,6 +1335,7 @@ BlitzWolf w/ remote 850lm {"NAME":"BW-LT27","GPIO":[0,0,0,0,420,417,0,0,418,1 BNETA 8.5W 800lm {"NAME":"BNETA IO-WIFI60-E27P","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} BNETA 8.5W 800lm {"NAME":"OM60/RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} Bomcosy 600lm {"NAME":"Generic","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,4704],"FLAG":0,"BASE":18} +Boxlood 9W 900lm {"NAME":"Boxlood 9w 900lm RGBCCT","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Calex 429004 A60 806lm {"NAME":"Calex E27 RGB ","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Calex 429008 B35 5W 470lm {"NAME":"Calex E14 RGBW","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Calex 5W 350lm Reflector {"NAME":"Calex RGBW","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} @@ -1225,11 +1344,13 @@ CMARS 4W Reflector {"NAME":"RGBWW GU10","GPIO":[0,0,0,0,419,420,0,0,41 Connect SmartHome 5W GU5.3 {"NAME":"CSH-GU53RGB5W","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Diolamp E27 9W 800lm {"NAME":"Diolamp A609WIFI","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18} Dogain 320lm {"NAME":"DOGAIN","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} +EKasa 10W+3W 1050lm {"NAME":"EKASA T710C-E27","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Emuni TB95 9W 850Lm {"NAME":"TB95","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Ener-J 800lm {"NAME":"ENER-J RGBWWW ","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Energizer 10W 800lm {"NAME":"OM100/RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Enklen 7W 600lm {"NAME":"Enklen E27 7W RGBCW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Euri Lighting 10W 800lm {"NAME":"Euri Lighting ","GPIO":[0,0,0,0,416,419,0,0,417,420,418,416,0,0],"FLAG":0,"BASE":18} +Extrastar 10w 1000lm {"NAME":"Extrastar","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} EXUP C37 5W {"NAME":"EXUP","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,1],"FLAG":0,"BASE":18} Feit Electric A19 1600lm {"NAME":"OM100/RGBWW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Feit Electric A19 800lm {"NAME":" BPA800/RGBW/AG/2","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} @@ -1267,6 +1388,7 @@ Ledmundo 6W 600lm {"NAME":"LEDMUNDO 6W","GPIO":[0,0,0,0,416,419,0,0,4 Legelite 5W Candle {"NAME":"Legelite E12","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Legelite A60 7W {"NAME":"Legelite A60 7","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Legelite A60 7W 600lm {"NAME":"Legelite E26","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Lenovo 800lm {"NAME":"Lenovo SE-241EB","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Lohas ZN004 8W 680lm {"NAME":"Lohas B22 R63","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Lohas ZN011 5W 420lm {"NAME":"LohasZN011","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Lohas ZN014-2 5W 380lm {"NAME":"Lohas ZN014-2","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} @@ -1278,9 +1400,10 @@ Lohas ZN037 450lm {"NAME":"Lohas LH-ZN037","GPIO":[0,0,0,0,417,416,0, Lohas ZN038 BR20 8W 750lm {"NAME":"Lohas LH-ZN038","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Lohas ZN039 BR40 1450lm {"NAME":"Lohas ZN039","GPIO":[0,0,0,0,418,416,0,0,420,417,419,0,0,0],"FLAG":0,"BASE":18} Lohas ZN041 BR30 12W 1080lm {"NAME":"Lohas ZN041","GPIO":[0,0,0,0,418,416,0,0,420,417,419,0,0,0],"FLAG":0,"BASE":18} -Longlifelamps A60 9W {"NAME":"longlifelamps A60 RGBWW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} +Longlifelamps A60 9W {"NAME":"LongLifeLamp Nimble 10W","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Lumary 9W 800lm {"NAME":"Lumary / iLint","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Luminea 5.5W 470lm {"NAME":"Luminea ZX-2983","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} +Luminea 9W 800lm {"NAME":"Luminea RGBW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} LVWIT A60 8.5W 806lm {"NAME":"LVWIT A60 8.5W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} LVWIT A70 12W 1521lm {"NAME":"LVWIT A70 12W","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} LVWIT BR30 8.5W 650lm {"NAME":"LVWIT BR30 8.5W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -1290,20 +1413,19 @@ MagicHome 7W {"NAME":"MagicHome E27","GPIO":[0,0,0,0,416,419,0,0 Moes 9W 800lm {"NAME":"Moes 9w","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Nishica JBT 9W 806lm {"NAME":"Nishica","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Novostella 7W 600lm {"NAME":"Novostella E27","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Novostella 7W 600lm {"NAME":"Novostella B22","GPIO":[0,0,0,0,416,420,0,0,417,419,418,0,0,0],"FLAG":0,"BASE":18} Novostella HM-LB09 13W 1300lm {"NAME":"Novostella 13W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Novostella NTB10 9W 900lm {"NAME":"NTB10","GPIO":[0,0,0,0,420,417,0,0,418,1088,419,416,0,0],"FLAG":0,"BASE":18} Novostella UT55507 9W 900lm {"NAME":"Novostella UT55507","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Novostella UT55507 9W 900lm {"NAME":"Novostella UT55507","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Novostella UT55508 12W 1150lm {"NAME":"Novostella","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Novostella UT55509 13W 1300lm {"NAME":"Novostella 13W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Ohlux 5W 450lm Candle {"NAME":"OHLUX","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Ohlux A19 7W 600lm {"NAME":"OHLUX","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Ohlux A19 7W 600lm {"NAME":"OHLUX2021","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Ohlux BR30 10W 900lm {"NAME":"OHLUX","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} oobest 7W {"NAME":"E27_RGBCW_Bulb","GPIO":[0,0,0,0,417,416,0,0,419,420,418,0,0,0],"FLAG":0,"BASE":18} PETEME 7.5W 750lm {"NAME":"PETEME","GPIO":[1,1,0,1,416,419,0,0,417,420,418,1,1,4896],"FLAG":0,"BASE":18} Polux 5.5W 400lm {"NAME":"Polux GU10","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Polux A65 11W 1055lm {"NAME":"A65 SMDWWCW+RG","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} +Polux G45 5,5W 475lm {"NAME":"Polux G45 E14","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Positivo 10W 806lm {"NAME":"Positivo Bulb","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Powertech SL225X 800lm {"NAME":"Jaycar SL225X","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Qualitel ALS08L 1100lm {"NAME":"Qualitel ALS08","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} @@ -1317,7 +1439,10 @@ Slitinto TB95 9W 1000lm {"NAME":"Slitinto 9W","GPIO":[0,0,0,0,416,419,0,0,4 Smart 9W 800lm {"NAME":"SmartLED ","GPIO":[0,0,0,0,420,417,0,0,418,0,419,416,0,0],"FLAG":0,"BASE":18} SmartLED 9W 400lm {"NAME":"SmartLED","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Sonoff B1 (R2) {"NAME":"Sonoff B1","GPIO":[32,0,0,0,0,0,0,0,3008,0,3040,0,0,0],"FLAG":0,"BASE":26} +Spectrum Smart 13W 1500lm {"NAME":"LED 13W E-27 Spectrum SMART","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Spectrum Smart GLS 9W 850lm {"NAME":"SPECTR. RGBCCT","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} +Spectrum Smart GU10 5W 480lm {"NAME":"SPECTR. RGBCCT","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} +Steren 10W 800lm {"NAME":"Steren_SHOME-120_RGBCCT","GPIO":[0,0,0,0,416,419,0,0,417,452,418,0,0,0],"FLAG":0,"BASE":18} Sunco G25 5W 450lm {"NAME":"Sunco G25","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Sunco PAR20 5W 400lm {"NAME":"Sunco PAR20","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} Sunco PAR38 13W 1050lm {"NAME":"Sunco PAR38 RGBCCT","GPIO":[0,0,0,0,417,416,0,0,419,418,420,0,0,0],"FLAG":0,"BASE":18} @@ -1326,13 +1451,13 @@ Teckin SB50 v3 A19 800lm {"NAME":"Teckin SB50v3","GPIO":[0,0,0,0,416,419,0,0 Teckin SB53 1300lm {"NAME":"Teckin SB53","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Treatlife A19 8W 650lm {"NAME":"Treatlife RGBW","GPIO":[0,0,0,0,417,416,0,0,420,418,419,0,0,0],"FLAG":0,"BASE":18} V-TAC 10W 806lm {"NAME":"V-TAC VT-5119","GPIO":[0,0,0,0,4032,0,0,0,0,0,4064,0,0,0],"FLAG":0,"BASE":18} -V-Tac PAR16 4.5W 400lm 100° {"NAME":"V-TAC VT5164","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} +V-Tac PAR16 4.5W 400lm 100 {"NAME":"V-TAC VT5164","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Vizia 5W GU10 {"NAME":"Vizia RGBWW","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,1],"FLAG":0,"BASE":18} Wipro Garnet 9W 810lm {"NAME":"Wipro","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} WiZ BR30 13.8W 750lm {"NAME":"WiZ RGBCCT PAR30","GPIO":[0,0,0,0,419,0,0,0,417,420,418,416,0,0],"FLAG":0,"BASE":48} +Xtricity A19 10W 800lm {"NAME":"XTRICITY A19 10W 800LM RGBCCT BULB","GPIO":[0,0,0,0,416,419,0,0,417,452,418,2304,2272,0],"FLAG":0,"BASE":48} Zemismart 5W 480lm {"NAME":"Zemismart 5W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Zemismart 5W 480lm {"NAME":"Zemismart-E27-RGBCW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Zemismart 5W 480lm {"NAME":"Zemismart-E27-RGBCW","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} ZZHXON 600lm {"NAME":"E27_RGB_Bulb","GPIO":[0,0,0,0,419,420,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} ``` @@ -1382,6 +1507,7 @@ EleLight 350lm {"NAME":"EleLight 7wA19","GPIO":[0,0,0,0,2912,416,0 Esicoo 810lm {"NAME":"Esicoo Bulb","GPIO":[0,0,0,0,3008,3040,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":27} Eurolux A70 10W {"NAME":"Eurolux A70 RG","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,4704],"FLAG":0,"BASE":18} Fcmila 10W {"NAME":"FCMILA LED E27","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} +Fcmila 15W 1050lm {"NAME":"FCMILA B22 15W","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Fcmila 7W {"NAME":"FCMILA E27 0.1","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Fcmila Spotlight 460lm {"NAME":"Fcmila LED 6W","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Feit Electric BR30 650lm {"NAME":"BR30/RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} @@ -1391,6 +1517,7 @@ Fulighture RGBW 15W {"NAME":"Fulighture RGBW 15W","GPIO":[0,0,0,0,0,0,0 Garsent 10W {"NAME":"Garsent 10W RGBW-Bulb","GPIO":[0,0,0,0,0,418,0,0,417,0,416,419,0,4704],"FLAG":0,"BASE":18} Geeni Prisma Drop BR30 700lm {"NAME":"GN-BW906-999","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,0],"FLAG":0,"BASE":18} Generic GU10 5W 450lm {"NAME":"RGBCW GU10","GPIO":[0,1,0,1,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":3} +Gosund 800lm {"NAME":"Gosund WB4","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,420,0],"FLAG":0,"BASE":18} Gosund 8W 800lm {"NAME":"Gosund RGBW 8W","GPIO":[0,0,0,0,420,419,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} Gosund WB3 8W 800lm {"NAME":"Gosund WB3","GPIO":[0,0,0,0,419,0,0,0,416,417,418,0,0,0],"FLAG":0,"BASE":18} Hama 10W 1050lm {"NAME":"Hama Bulb RGBW","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,0],"FLAG":0,"BASE":18} @@ -1405,7 +1532,7 @@ Kainsy 600lm {"NAME":"KAINSY","GPIO":[32,0,0,0,3008,3040,0,0,0,0 Kkmoon 9W 800lm {"NAME":"KKMOON V21","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Koaanw 650lm {"NAME":"KOAANW Bulb","GPIO":[0,0,0,0,3008,3040,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":27} Kogan 10W Ambient 1050lm {"NAME":"Kogan RGB","GPIO":[0,0,0,0,2912,416,0,0,0,0,2944,0,0,0],"FLAG":0,"BASE":18} -Kogan 4.5W 330lm 110° {"NAME":"Kogan_GU10","GPIO":[0,0,0,0,418,419,0,0,416,0,417,0,0,0],"FLAG":0,"BASE":18} +Kogan 4.5W 330lm 110 {"NAME":"Kogan_GU10","GPIO":[0,0,0,0,418,419,0,0,416,0,417,0,0,0],"FLAG":0,"BASE":18} Kogan Ambient Candle {"NAME":"Kogan_E14","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Kuled 800lm {"NAME":"KULED 60W RGB","GPIO":[0,0,0,0,418,419,0,0,416,0,417,0,0,4704],"FLAG":0,"BASE":18} Laideyi 7W {"NAME":"7W-E14-RGBW-La","GPIO":[0,0,0,0,417,416,0,0,418,0,419,0,0,0],"FLAG":0,"BASE":18} @@ -1433,6 +1560,7 @@ Luminea ZX-2832 {"NAME":"Luminea RGBW","GPIO":[0,0,0,0,2912,416,0,0 Luminea ZX-2986 1400lm {"NAME":"Luminea RGBW","GPIO":[0,0,0,0,416,420,0,0,0,417,418,419,0,0],"FLAG":0,"BASE":18} LWE3 600lm {"NAME":"Linganzh LWE3 ","GPIO":[0,0,0,0,0,417,0,0,418,0,419,416,0,0],"FLAG":0,"BASE":18} MagicLight 4.5W 350lm {"NAME":"4.5W RGBW Bulb","GPIO":[0,0,0,0,0,416,0,0,418,419,417,0,0,0],"FLAG":0,"BASE":18} +Malmbergs G95 8,5W 810lm {"NAME":"Malmbergs8,5W-RGBW","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Manzoku XS-001 1050lm {"NAME":"Manzoku RGBW","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,0],"FLAG":0,"BASE":18} Maxcio YX-L01P-E27-2P 9W {"NAME":"Maxcio YXL01P","GPIO":[32,0,0,0,3008,3040,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":27} Melery 5W {"NAME":"MeleryMR16","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} @@ -1447,7 +1575,7 @@ Mimoodz A19 6.5W {"NAME":"Miimoodz RGBCW LED","GPIO":[0,0,0,0,4032,0 Mirabella Genio 9W 800lm {"NAME":"GenioBulbRGB","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio 9W 800lm {"NAME":"MiraBellaGenio","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} Mirabella Genio 9W 800lm {"NAME":"MiraBellaGenio","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18} -Mixigoo 950lm {"NAME":"Mixigoo Bulb","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +Mixigoo 950lm {"NAME":"Mixigoo Bulb RGBCCT","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} MoKo GU10 {"NAME":"MoKo GU10","GPIO":[1,1,1,1,418,1,1,1,417,420,416,419,1,1],"FLAG":0,"BASE":18} MoKo JL81 5W 400lm {"NAME":"MoKo E14","GPIO":[0,0,0,0,0,0,0,0,3008,0,3040,0,0,0],"FLAG":0,"BASE":27} MOKO YX-L01C-E14 A60 810lm {"NAME":"MOKO","GPIO":[32,0,0,0,3008,3040,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":27} @@ -1472,8 +1600,9 @@ Smartyfi 600lm {"NAME":"SMARTYFI 9W","GPIO":[0,0,0,0,416,419,0,0,4 Smitch 7W {"NAME":"Smitch RGB 7W SB-1602","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Solimo 12W {"NAME":"Solimo RGBCCT 12","GPIO":[0,0,0,0,416,420,0,0,417,419,418,0,0,0],"FLAG":0,"BASE":18} Solimo 810lm {"NAME":"Solimo RGBWW 9","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} -Swisstone SH 320 350lm {"NAME":"SH 320","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} -Swisstone SH 340 806lm {"NAME":"SH 340","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,1],"FLAG":0,"BASE":18} +Swisstone 350lm {"NAME":"SH 320","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} +SwissTone 4.5W 380lm {"NAME":"SH 360","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,1],"FLAG":0,"BASE":18} +Swisstone 806lm {"NAME":"SH 340","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,1],"FLAG":0,"BASE":18} Syska 7W 480lm {"NAME":"Syska","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18} Syska 9W 720lm {"NAME":"SyskaSmartBulb","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} TCP Smart 9W 806lm {"NAME":"TCP Smart RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} @@ -1494,6 +1623,7 @@ WOOX R4553 650lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,41 WOOX R5076 4W 350lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18} WOOX R5077 {"NAME":"WOOX R5077","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} Zemismart 5W {"NAME":"Zemismart_GU10","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} +Zemismart 5W 480lm {"NAME":"Zemismart-E14-RGBW","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Zemismart A19 10W {"NAME":"Zemism_E27_A19","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27} Zilotek A19 800lm {"NAME":"Zilotek RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18} ``` @@ -1503,15 +1633,18 @@ Zilotek A19 800lm {"NAME":"Zilotek RGBW","GPIO":[0,0,0,0,2912,416,0,0 Anmbest 2 Channel Inching Self-locking Switch Module {"NAME":"Generic","GPIO":[32,1,1,1,1,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Athom 10A {"NAME":"Athom CB0110A","GPIO":[0,0,0,0,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":1} BH OnOfre Dual Rev5 Silent Edition {"NAME":"bhonofre","GPIO":[0,0,0,0,225,224,0,0,160,161,0,0,0,0],"FLAG":0,"BASE":18} +Claudy 5V {"NAME":"CLAUDY","GPIO":[0,0,225,0,0,0,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} DoHome HomeKit DIY Switch {"NAME":"DoHome DIY","GPIO":[1,1,0,1,1,544,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":1} Eachen ST-DC2 {"NAME":"Garage Control","GPIO":[162,0,0,0,226,225,33,0,224,288,163,227,0,4704],"FLAG":0,"BASE":18} Eachen ST-DC4 {"NAME":"Eachen_ST-DC4","GPIO":[160,1,1,1,226,225,1,1,224,544,1,227,1,0],"FLAG":0,"BASE":54} Eachen ST-UDC1 {"NAME":"ST-UDC1","GPIO":[160,0,0,0,0,0,0,0,224,320,0,0,0,4704],"FLAG":0,"BASE":18} Electrodragon Board SPDT {"NAME":"ED Relay Board","GPIO":[1,1,1,1,1,1,0,0,224,225,1,1,288,4704],"FLAG":0,"BASE":18} Electrodragon ESP8266 {"NAME":"ElectroDragon","GPIO":[33,1,32,1,1,1,0,0,225,224,1,1,288,4704],"FLAG":0,"BASE":15} +eMylo Single Channel Switch {"NAME":"eMylo XL9251WI","GPIO":[0,1,0,0,320,0,0,0,224,0,35,0,0,0],"FLAG":0,"BASE":18} Ener-J Outdoor Switch {"NAME":"Ener-J Smart WiFi Outdoor Relay","GPIO":[32,0,0,0,0,0,0,0,224,544,0,0,0,0],"FLAG":0,"BASE":18} ESP-01 Relay V4.0 {"NAME":"ESP01v4","GPIO":[256,288,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} ESP-01S 5V Relay Module V1.0 {"NAME":"ESP-01S Relay","GPIO":[256,288,1,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} +ESP-12F 4 Channel {"NAME":"ESP12F_Relay_X4","GPIO":[1,1,1,1,1,1,1,1,226,227,225,1,224,1],"FLAG":0,"BASE":18} ESP12F 220V 10A 7V-30V DC {"NAME":"Yunshan 10A","GPIO":[32,1,288,1,224,161,0,0,225,0,0,0,0,0],"FLAG":0,"BASE":18} Geekcreit 5V DIY 4 Channel Jog Inching Self-Locking {"NAME":"Geekcreit-4ch","GPIO":[160,0,0,0,226,225,161,162,224,288,163,227,0,0],"FLAG":0,"BASE":18} Geekcreit Module 220V 10A {"NAME":"DIY ESP8266 Re","GPIO":[0,0,544,0,224,32,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18} @@ -1526,8 +1659,11 @@ LinkNode R4 {"NAME":"LinkNode R4","GPIO":[0,0,0,0,0,0,0,0,224,2 LinkNode R8 {"NAME":"LinkNode R8","GPIO":[0,0,0,0,228,229,0,231,226,227,225,230,224,0],"FLAG":0,"BASE":18} LoveAnna AC85-250V 10A {"NAME":"2xSwitch No RF LoveAnna","GPIO":[32,0,0,0,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} Mhcozy 5V {"NAME":"Portail","GPIO":[160,0,0,0,0,0,0,0,224,320,0,0,0,4704],"FLAG":0,"BASE":18} +Milfra Smart Module {"NAME":"Milfra Smart Module TB41","GPIO":[0,0,0,225,0,0,0,0,0,193,480,224,192,0],"FLAG":0,"BASE":18} Sinilink DC6V-36V Module {"NAME":"Sinilink XY-WF5V","GPIO":[0,0,0,0,224,1,0,0,32,288,0,0,1,0],"FLAG":0,"BASE":18} Sinilink MOS {"NAME":"Sinilink MOS","GPIO":[0,0,0,0,224,1,0,0,32,288,0,0,1,0],"FLAG":0,"BASE":18} +Sinotimer DIN {"NAME":"Sinotimer TM60","GPIO":[0,0,0,0,0,288,0,0,224,160,0,0,0,0],"FLAG":0,"BASE":18} +Sinotimer Single Phase Digital Timer {"NAME":"TM608","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} Sonoff 1 Channel Inching/Self-Locking {"NAME":"1 Channel","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":12} Sonoff RE5V1C 5V Inching/Selflock {"NAME":"Sonoff RE5V1C","GPIO":[32,1,1,1,1,1,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} Sonoff SV {"NAME":"Sonoff SV","GPIO":[32,1,0,1,1,1,0,0,224,320,1,0,0,4704],"FLAG":0,"BASE":3} @@ -1537,6 +1673,7 @@ Sonoff SV {"NAME":"Sonoff SV","GPIO":[32,1,0,1,1,1,0,0,224,32 ``` Nedis Smoke Detector {"NAME":"Nedis Smoke","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Smoke Alarm {"NAME":"YG400A","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54} +VisorTech {"NAME":"VisorTech RWM-200","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} ``` ## Switch @@ -1545,7 +1682,7 @@ Smoke Alarm {"NAME":"YG400A","GPIO":[1,2272,1,2304,1,1,0,0,1,1, 3A Smart Home {"NAME":"3A Smart Home ","GPIO":[288,0,291,33,225,34,0,0,32,224,290,226,289,0],"FLAG":0,"BASE":18} AGL 2 Gang {"NAME":"AGL WiFi 02","GPIO":[0,0,544,0,0,33,0,0,225,224,0,0,32,0],"FLAG":0,"BASE":18} AGL 3 Gang {"NAME":"AGL WiFi 03","GPIO":[0,0,544,0,34,33,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":18} -AGL Módulo Relé 01 Canal {"NAME":"AGL-Basic","GPIO":[0,1,0,0,224,32,0,0,0,0,320,0,0,0],"FLAG":0,"BASE":18} +AGL Modulo Relay 01 Canal {"NAME":"AGL-Basic","GPIO":[0,1,0,0,224,32,0,0,0,0,320,0,0,0],"FLAG":0,"BASE":18} Albohes 2 Channel {"NAME":"Albohes SH-08","GPIO":[0,3200,33,3232,321,320,0,0,224,544,32,0,225,1],"FLAG":0,"BASE":18} Aoycocr SW1 {"NAME":"Aoycocr SW1","GPIO":[576,1,321,1,1,1,1,1,320,32,1,224,1,1],"FLAG":0,"BASE":18} Athom 1 Gang {"NAME":"Athom SW011EU","GPIO":[576,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} @@ -1554,6 +1691,11 @@ Athom 1 Gang No Neutral {"NAME":"Athom SW111EU","GPIO":[576,0,0,32,0,0,0,0, Athom 2 Gang {"NAME":"Athom SW012EU","GPIO":[576,289,0,32,225,33,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} Athom 2 Gang {"NAME":"Athom SW032US","GPIO":[576,289,0,32,225,33,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} Athom 2 Gang No Neutral {"NAME":"Athom SW112EU","GPIO":[576,289,0,32,225,33,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} +Athom 3 Gang Key {"NAME":"Athom SW01-TAS-3EU","GPIO":[576,290,1,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} +Athom 3 Gang Touch {"NAME":"Athom SW03-TAS-3US","GPIO":[576,290,0,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} +Athom 3 Gang Touch {"NAME":"Athom SW11-TAS-3EU","GPIO":[576,290,1,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} +Athom 4 Gang Touch {"NAME":"Athom SW03-TAS-4US","GPIO":[576,0,0,33,225,34,0,0,32,224,227,226,35,0],"FLAG":0,"BASE":18} +Athom 4 Gang Touch {"NAME":"Athom SW11-TAS-4EU","GPIO":[576,0,0,33,225,34,0,0,32,224,227,226,35,0],"FLAG":0,"BASE":18} Athom US Key Switch 1 Gang {"NAME":"Athom SW13","GPIO":[576,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} ATMS1601 230VAC DIN Timer/Switch {"NAME":"ATMS1601","GPIO":[1,1,1,1,544,320,1,1,224,32,1,1,1,1],"FLAG":0,"BASE":18} Avatto 1 Gang {"NAME":"AVATTO 1 Gang","GPIO":[0,320,576,0,0,32,0,0,320,0,0,224,0,0],"FLAG":0,"BASE":18} @@ -1570,13 +1712,14 @@ BlitzWolf BW-SS1 {"NAME":"BW-SS1","GPIO":[1,1,1,1,544,224,0,0,1,32,1 BlitzWolf BW-SS3 1 Gang {"NAME":"BW-SS3-1G-EU","GPIO":[288,0,0,32,0,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SS3 2 Gang {"NAME":"BW-SS3-2G-EU","GPIO":[544,1,1,1,225,33,1,1,32,224,1,1,1,1],"FLAG":0,"BASE":18} BlitzWolf BW-SS3 3 Gang {"NAME":"BlitzWolf SS3","GPIO":[576,0,0,161,225,162,0,0,160,224,0,226,0,0],"FLAG":0,"BASE":18} -BlitzWolf BW-SS5 1 Gang {"NAME":"BlitzWolf SS5 1 Gang","GPIO":[0,0,0,0,0,0,0,0,160,224,0,0,0,0],"FLAG":0,"BASE":18} +BlitzWolf BW-SS5 1 Gang {"NAME":"BlitzWolf SS5 1 Gang","GPIO":[0,0,0,0,288,0,0,0,160,224,0,0,0,0],"FLAG":0,"BASE":18} BlitzWolf BW-SS5 2 Gang {"NAME":"BlitzWolf SS5 2 Gang","GPIO":[0,0,32,0,480,0,0,0,161,160,224,225,0,0],"FLAG":0,"BASE":18} BlitzWolf SS4 {"NAME":"BlitzWolf SS4 Two Gang","GPIO":[0,0,0,0,320,224,0,0,225,32,0,0,0,0],"FLAG":0,"BASE":18} BSEED 2 Gang 1 Way {"NAME":"BSEED Switch 2Ch","GPIO":[0,0,0,33,225,0,0,0,32,224,0,288,289,0],"FLAG":0,"BASE":18} Canwing CW-001 {"NAME":"Canwing CW-001","GPIO":[32,1,0,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} CD303 3 Gang Touch {"NAME":"Touch Switch 3","GPIO":[290,321,1,34,226,33,1,1,32,224,1,225,288,1],"FLAG":0,"BASE":18} Century Aoke Smart Switch {"NAME":"CenturyAoke","GPIO":[0,1,0,1,224,0,0,0,32,320,1,0,0,0],"FLAG":0,"BASE":18} +Cinlinele 4 Gang {"NAME":"Cinlinele","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Connect SmartHome 2 Gang Wall {"NAME":"CSH-SWTCH2","GPIO":[0,0,288,0,0,33,0,0,225,224,0,0,32,0],"FLAG":0,"BASE":18} Deta 1 Gang {"NAME":"Deta 1G Switch","GPIO":[0,0,0,0,544,0,0,0,0,224,0,0,64,0],"FLAG":0,"BASE":18} Deta 2 Gang {"NAME":"DETA 2G Switch","GPIO":[0,0,0,0,544,0,0,0,65,224,225,0,64,0],"FLAG":0,"BASE":18} @@ -1585,8 +1728,11 @@ Deta 4 Gang {"NAME":"Deta 4G Switch","GPIO":[576,0,0,34,33,224, Deta 6000HA Smart Inline Switch {"NAME":"DETA-6000HA","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18} Deta Fan Speed Controller with Light {"NAME":"Deta Fan Speed and Light Controller","GPIO":[33,0,0,544,226,34,0,0,0,225,224,227,32,0],"FLAG":0,"BASE":18} dewenwils Outdoor Timer Box {"NAME":"Dewenwils50054","GPIO":[0,0,290,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18} +Dierya Touch Panel 2 Gang {"NAME":"CD301","GPIO":[0,0,0,0,544,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Dierya Touch Panel 2 Gang {"NAME":"CD302","GPIO":[544,0,0,33,225,0,0,0,32,224,321,0,320,0],"FLAG":0,"BASE":18} +Dierya Touch Panel 3 Gang {"NAME":"CD303","GPIO":[576,289,0,34,226,33,0,0,32,224,290,225,288,0],"FLAG":0,"BASE":18} Digoo DG-S811 3 Gang {"NAME":"DIGOO Switch","GPIO":[0,0,0,0,34,33,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":18} -DS-101 1 Gang {"NAME":"Smart Life Switch","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18} +DS-101 1 Gang {"NAME":"Smart Life Switch","GPIO":[0,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":18} DS-101 2 Gang {"NAME":"Smart Life Switch","GPIO":[576,289,0,32,225,33,0,0,0,224,288,0,0],"FLAG":0,"BASE":18} DS-101 3 Gang {"NAME":"DS-101 3 gang","GPIO":[576,322,0,33,226,34,0,0,32,225,321,224,320,0],"FLAG":0,"BASE":18} DS-101 4 Gang Switch {"NAME":"DS-101 4 Gang","GPIO":[544,0,0,33,225,34,0,0,32,224,227,226,35,0],"FLAG":0,"BASE":18} @@ -1607,11 +1753,11 @@ Etekcity ESWL03 3-way {"NAME":"Etekcity 3Way","GPIO":[0,0,0,0,226,256,0,0 Eva Logik 3-Way {"NAME":"WF30 Switch","GPIO":[0,0,0,0,33,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} EX Store 2 Kanal V5 {"NAME":"EXS Relay V5","GPIO":[1,1,1,1,1,1,0,0,224,225,258,288,259,0],"FLAG":0,"BASE":16} FrankEver 4 Gang {"NAME":"FrankEver Wifi Smart Switch","GPIO":[0,0,0,32,224,33,1,1,34,226,227,225,35,0],"FLAG":0,"BASE":18} -Freecube AWS01F {"NAME":"Freecube","GPIO":[0,0,0,32,224,0,0,0,0,0,225,0,0,0],"FLAG":0,"BASE":18} -Garage Door Controller {"NAME":"Garage Opener","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Freecube {"NAME":"Freecube","GPIO":[288,0,289,0,0,0,0,0,290,32,0,224,0,0],"FLAG":0,"BASE":18} Geekcreit 2 Channel AC 85V-250V {"NAME":"Geekcreit 2ch","GPIO":[32,0,0,0,0,225,33,0,224,288,0,0,0,4704],"FLAG":0,"BASE":18} Geeni TAP 3-Way {"NAME":"Geeni 3-Way","GPIO":[544,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} Generic 2 Gang {"NAME":"KING-Tuya-key","GPIO":[0,0,0,0,0,225,0,0,224,32,0,0,33,0],"FLAG":0,"BASE":18} +Girier 3 Gang Touch {"NAME":"Girier JR-DES01","GPIO":[576,290,0,32,225,34,0,0,33,224,288,226,288,0],"FLAG":0,"BASE":18} Girier EK01 RF433Mhz 1 Gang {"NAME":"Girier EK01","GPIO":[544,0,0,0,224,0,0,0,0,0,0,0,32,0],"FLAG":0,"BASE":18} Girier EK02 RF433Mhz 2 Gang {"NAME":"Girier EK02","GPIO":[544,0,0,0,0,32,0,0,33,224,225,0,0,0],"FLAG":0,"BASE":18} Girier EK03 RF433Mhz 3 Gang {"NAME":"EK03","GPIO":[544,0,0,0,225,32,0,0,34,224,226,0,33,0],"FLAG":0,"BASE":18} @@ -1622,7 +1768,10 @@ Girier RF433 2 Gang No Neutral {"NAME":"W602","GPIO":[0,0,0,0,225,0,0,0,32,224, Girier RF433 3 Gang No Neutral {"NAME":"W603","GPIO":[0,0,0,0,226,33,0,0,32,224,34,225,544,1],"FLAG":0,"BASE":18} Gocomma Wi-Fi Smart Switch {"NAME":"GoCommaSmartSw","GPIO":[32,1,1,1,224,0,0,0,1,320,0,0,0,0],"FLAG":0,"BASE":18} GoKlug Glass Touch 1 Gang {"NAME":"GoKlug 1x","GPIO":[320,321,0,0,0,160,0,0,0,0,0,224,0,0],"FLAG":0,"BASE":18} +GoKlug Glass Touch 2 Gang {"NAME":"GoKlug 2x","GPIO":[576,0,0,193,224,0,0,0,320,225,321,0,192,1],"FLAG":0,"BASE":18} +Gosund 2 Gang {"NAME":"GosundSW9","GPIO":[160,0,0,0,0,161,0,0,225,288,224,0,0,0],"FLAG":0,"BASE":18} Gosund KS-602S {"NAME":"Gosund KS-602S-v2","GPIO":[32,0,321,0,0,0,0,0,0,0,224,0,288,0],"FLAG":0,"BASE":18} +Gosund Single Pole {"NAME":"Gosund SW5","GPIO":[32,0,320,0,0,0,0,0,0,0,224,0,576,0],"FLAG":0,"BASE":18} Gosund SW1 {"NAME":"Gosund SW1","GPIO":[32,0,321,0,0,0,0,0,0,0,224,0,320,0],"FLAG":0,"BASE":18} Gosund SW6 3-Way {"NAME":"Gosund SW6","GPIO":[32,0,320,0,160,0,0,0,0,0,225,224,576,0],"FLAG":0,"BASE":18} Hama Flush-mounted 2 Gang {"NAME":"Hama WiFiTouch","GPIO":[544,0,0,0,0,33,0,0,32,225,0,224,0,0],"FLAG":0,"BASE":45} @@ -1635,6 +1784,7 @@ iSwitch Light & Fan {"NAME":"iSwitchOZ Light Fan","GPIO":[0,2272,0,2304 Jinvoo SM-SW101-1 {"NAME":"SM-SW101-1","GPIO":[288,0,0,33,0,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Jinvoo SM-SW101-2 {"NAME":"SM-SW101-2","GPIO":[288,0,0,33,225,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Jinvoo SM-SW101-3 {"NAME":"Jinvoo Wall Sw","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18} +KingArt 1 Gang {"NAME":"KING-Tuya-key","GPIO":[0,0,0,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} KMC 70008 {"NAME":"KMC 70008","GPIO":[32,1,1,0,0,1,0,0,0,320,224,1,1,0],"FLAG":0,"BASE":18} Koaanw CD302-EU-1 {"NAME":"CD302-EU-1","GPIO":[0,0,0,0,544,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Koaanw CD302-EU-2 {"NAME":"CD302-EU-2","GPIO":[544,0,0,0,0,33,0,0,32,224,321,225,320,0],"FLAG":0,"BASE":18} @@ -1649,11 +1799,12 @@ Kuled KS602S {"NAME":"KULED","GPIO":[32,1,1,1,1,1,0,0,224,320,1, Kygne CD-301 {"NAME":"KYGNE Touch","GPIO":[0,0,0,0,288,289,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":10} L-5A01 {"NAME":"L-5A01","GPIO":[32,1,0,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Laghten SS02S {"NAME":"Laghten SS02S","GPIO":[0,0,0,0,288,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Lanbon L8 5 in 1 LCD Touch "Not available" LCARE Modular 2 Gang {"NAME":"2SW1-In","GPIO":[32,1,1,1,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":29} LerLink 1 Gang No Neutral {"NAME":"LerLink X801-L","GPIO":[0,0,0,0,32,0,0,0,224,320,0,0,0,1],"FLAG":0,"BASE":18} Lerlink 2 Gang {"NAME":"Lerlink X802A","GPIO":[0,0,0,33,32,0,0,0,224,288,225,0,0,0],"FLAG":0,"BASE":18} LerLink 2 Gang No Neutral {"NAME":"Lonsonho 2gang","GPIO":[0,0,0,33,32,0,0,0,224,288,225,0,0,0],"FLAG":0,"BASE":18} -Lerlink 3 Gang {"NAME":"X803A","GPIO":[0,0,0,33,32,34,0,0,224,256,225,226,0,0],"FLAG":0,"BASE":18} +Lerlink 3 Gang {"NAME":"X803A","GPIO":[0,0,320,33,32,34,0,0,224,0,225,226,0,0],"FLAG":0,"BASE":18} Lerlink 3 Gang No Neutral {"NAME":"X803K-L 3 Gang","GPIO":[0,0,320,0,32,34,33,0,224,0,225,226,0,0],"FLAG":0,"BASE":18} Lightstory WT02S {"NAME":"WT02S","GPIO":[0,0,0,0,321,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":50} Lonsonho SK3-01 {"NAME":"Tuya 1 Channel","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18} @@ -1669,16 +1820,17 @@ LX-WIFI-00M 4 Gang {"NAME":"LX-WIFI-00M","GPIO":[32,228,1,1,226,225,33 MakeGood 2 Gang {"NAME":"MakeGood 2 Gang","GPIO":[0,0,0,0,0,0,0,0,0,0,290,0,0,0],"FLAG":0,"BASE":54} MakeGood 4 Gang {"NAME":"MakeGood 4 Gang","GPIO":[0,0,0,0,0,0,0,0,0,0,290,0,0,0],"FLAG":0,"BASE":54} Markevina KS-602S {"NAME":"Markevina KS-6","GPIO":[32,1,0,1,0,0,0,0,224,288,0,0,0,0],"FLAG":0,"BASE":18} -Martin Jerry S01 15A {"NAME":"MJ-S01 Switch","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Martin Jerry S01 15A {"NAME":"MJ-S01 Switch","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0],"FLAG":0,"BASE":18} Martin Jerry ST01 3 Way {"NAME":"MJ 3Way Switch","GPIO":[1,1,1,1,288,289,0,0,224,160,544,1,0,0],"FLAG":0,"BASE":18} Merkury MI-WW107-199W {"NAME":"MI-WW107-199W","GPIO":[288,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} Micmi K38 {"NAME":"KS-605","GPIO":[32,0,0,0,0,0,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18} +Milfra 3 Gang {"NAME":"Milfra TB23","GPIO":[320,320,289,290,34,33,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":8} Minitiger 1 Gang {"NAME":"minitiger 1 Gang","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} Minitiger 1 Gang v2 {"NAME":"MiniTiger1BandNoNeutral","GPIO":[0,320,0,0,0,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} Minitiger 2 Gang {"NAME":"minitiger 2 Gang","GPIO":[32,1,1,1,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} Minitiger 2 Gang No Neutral {"NAME":"Tuya 2 Gang (Ali.Minitiger))","GPIO":[544,289,0,32,225,33,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1} Minitiger 2 Gang v2 {"NAME":"Minitiger2Band","GPIO":[0,320,0,32,33,0,0,0,0,224,225,0,0,0],"FLAG":0,"BASE":18} -Minitiger 3 Gang {"NAME":"Minitiger3gang","GPIO":[0,0,0,160,162,161,1,1,225,224,226,0,0,0],"FLAG":0,"BASE":18} +Minitiger 3 Gang {"NAME":"Minitiger3Band","GPIO":[0,288,0,32,34,33,0,0,225,224,226,289,0,0],"FLAG":0,"BASE":18} Minitiger 4 Gang {"NAME":"Minitiger 4 Gang","GPIO":[32,0,0,0,226,225,33,34,224,576,35,227,0,0],"FLAG":0,"BASE":18} Moes 2 Gang {"NAME":"Moes WS-EU2-W","GPIO":[544,0,289,0,0,33,0,0,32,224,0,225,288,1],"FLAG":0,"BASE":18} Moes 2-Way Multi-Control 1 Gang {"NAME":"Moes WS-EU-SK1-W","GPIO":[544,0,0,32,224,0,0,0,0,0,288,0,0,1],"FLAG":0,"BASE":18} @@ -1687,6 +1839,7 @@ Moes 3-Way {"NAME":"Moes 3-Way","GPIO":[1,1,1,1,224,321,0,0,25 Moes BS-US-W Boiler {"NAME":"BS-US-W","GPIO":[290,0,0,32,224,0,0,0,0,0,288,0,291,0],"FLAG":0,"BASE":18} Moes MS-104B-1 {"NAME":"Moes MS-104B","GPIO":[0,0,32,0,480,0,0,0,161,160,224,225,0,0],"FLAG":0,"BASE":18} Moes RF433 2 Gang Switch {"NAME":"WS-EUB2-WR","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} +Moes RF433 3 Gang {"NAME":"WS-EUB3-WR","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Moes SS01S-1 {"NAME":"Moes Switch","GPIO":[1,1,1,1,320,0,0,0,224,32,1,1,1,0],"FLAG":0,"BASE":18} Moes WF-FL01 Light and Fan {"NAME":"Moes WF-FL01","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} Moes WS-EU1-LB 1 Gang No Neutral {"NAME":"Moes WS-EU1-LB","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,544,0],"FLAG":0,"BASE":18} @@ -1699,9 +1852,10 @@ Moes WS-US1-W 1 Gang {"NAME":"WS-US1-W","GPIO":[290,0,0,32,224,0,0,0,0,0 Moes WS-US2-W 2 Gang {"NAME":"WS-US2-W ","GPIO":[288,0,289,0,0,33,0,0,32,224,0,225,290,0],"FLAG":0,"BASE":18} Moes WS-US3-W 3 Gang {"NAME":"Tuya Moes 3 Ch","GPIO":[544,0,290,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18} Moes WT02S {"NAME":"Moes WT02S","GPIO":[0,0,0,0,320,576,0,0,224,160,0,0,0,1],"FLAG":0,"BASE":18} -MoesHouse RF433 3 Gang {"NAME":"WS-EUB3-WR","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54} MoKo Scene Life {"NAME":"Moko Smart Swi","GPIO":[576,0,0,0,418,417,0,0,320,0,416,224,0,0],"FLAG":0,"BASE":18} MoKo Smart Life {"NAME":"Moko Switch (Single)","GPIO":[544,0,0,32,224,0,0,0,0,0,320,0,0,0],"FLAG":0,"BASE":59} +MoKo Smart Life Double {"NAME":"Moko Switch (Double)","GPIO":[544,0,321,0,0,33,0,0,32,224,0,225,320,0],"FLAG":0,"BASE":59} +MoKo Smart Life Triple {"NAME":"Moko Switch (Triple)","GPIO":[544,0,322,33,225,34,0,0,32,224,321,226,320,0],"FLAG":0,"BASE":59} NaamaSmart KS602 {"NAME":"KS-602","GPIO":[32,0,0,0,0,0,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18} Nedis Dual {"NAME":"SM-SW102U-2","GPIO":[576,0,0,33,225,0,0,0,32,224,0,0,0,4704],"FLAG":0,"BASE":18} Nexete DS-123 {"NAME":"DS-123","GPIO":[544,321,1,32,224,33,0,0,1,225,320,1,1,0],"FLAG":0,"BASE":18} @@ -1726,6 +1880,8 @@ Semicom LM-HP/GEVD-W {"NAME":"WaterHeater","GPIO":[576,320,0,0,0,32,0,0, Sesoo WIFI-EU-SK3-01 {"NAME":"Sensoo SK3-01","GPIO":[1,1,321,1,1,32,0,0,1,1,1,224,288,0],"FLAG":0,"BASE":18} Sesoo WIFI-EU-SK3-02 {"NAME":"Sesoo SK3-02","GPIO":[0,0,321,0,225,0,0,0,32,224,33,0,288,0],"FLAG":0,"BASE":18} Sesoo WIFI-US-SK3-04 {"NAME":"Tuya 4 Channel","GPIO":[288,1,1,34,226,32,0,0,35,227,225,224,33,0],"FLAG":0,"BASE":18} +Shawader 1Ch Touch Light {"NAME":"ShawaderTuya1C","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18} +Shawader 2Ch Touch Light {"NAME":"ShawaderTuya2C","GPIO":[0,0,0,0,224,0,0,0,33,225,32,0,288,0],"FLAG":0,"BASE":18} Shelly 1 {"NAME":"Shelly 1","GPIO":[0,0,0,0,224,192,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":46} Shelly 1L No Neutral {"NAME":"Shelly 1L","GPIO":[320,0,0,0,192,224,0,0,0,0,193,0,0,4736],"FLAG":0,"BASE":18} Shelly 1PM {"NAME":"Shelly 1PM","GPIO":[320,0,0,0,192,2720,0,0,0,0,0,224,0,4736],"FLAG":0,"BASE":18} @@ -1749,7 +1905,7 @@ Sonoff Dual {"NAME":"Sonoff Dual","GPIO":[0,3200,0,3232,1,0,0,0 Sonoff Dual R2 {"NAME":"Sonoff Dual R2","GPIO":[1,1,0,1,0,225,1,32,224,320,0,0,0,0],"FLAG":0,"BASE":39} Sonoff IW101 {"NAME":"Sonoff IW101","GPIO":[32,3072,0,3104,0,0,0,0,224,544,0,0,0,0],"FLAG":0,"BASE":41} Sonoff Mini {"NAME":"Sonoff Mini","GPIO":[32,0,0,0,160,0,0,0,224,320,0,0,1,0],"FLAG":0,"BASE":1} -Sonoff MINIR2 {"NAME":"Sonoff MINIR2","GPIO":[32,0,0,0,160,0,0,0,224,320,0,0,1,0],"FLAG":0,"BASE":1} +Sonoff MINIR2 {"NAME":"Sonoff MINIR2","GPIO":[32,0,0,0,160,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} Sonoff Pow {"NAME":"Sonoff Pow","GPIO":[32,0,0,0,0,2592,0,0,224,2656,2688,288,0,0],"FLAG":0,"BASE":6} Sonoff Pow R2 {"NAME":"Sonoff Pow R2","GPIO":[32,3072,0,3104,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":43} Sonoff RF {"NAME":"Sonoff RF","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":2} @@ -1766,6 +1922,7 @@ Sonoff Touch EU {"NAME":"Sonoff Touch","GPIO":[32,1,0,1,0,0,0,0,224 Sonoff Touch US {"NAME":"Sonoff Touch","GPIO":[32,1,0,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":10} Sonoff TX T0 EU 1 Gang {"NAME":"Sonoff T0 TX 1CH","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} Sonoff TX T0 EU 2 Gang {"NAME":"Sonoff T0 2CH","GPIO":[32,1,1,1,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":29} +Sonoff TX T0 US 3 Gang {"NAME":"TX T0US3C","GPIO":[32,1,0,1,226,225,33,34,224,576,0,0,0,0],"FLAG":0,"BASE":30} Sonoff TX T1 EU 1 Gang {"NAME":"Sonoff T1 TX 1CH","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} Sonoff TX T1 EU 2 Gang {"NAME":"Sonoff T1 TX 2CH","GPIO":[32,1,1,1,0,225,33,0,224,320,0,0,0,0],"FLAG":0,"BASE":29} Sonoff TX T2 EU 1 Gang {"NAME":"Sonoff T2 TX 1CH","GPIO":[32,1,1,1,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":28} @@ -1784,23 +1941,28 @@ SS118-01K1 {"NAME":"SS118-01K1","GPIO":[1,1,1,32,224,1,0,0,1,1 SS311KWS RF Kinetic Switch and WiFi {"NAME":"SS311KWS","GPIO":[0,0,0,0,288,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} SS86-AI 3-Gang {"NAME":"SS86-AI 3 Gang","GPIO":[544,0,322,33,225,34,0,0,32,224,321,226,320,0],"FLAG":0,"BASE":18} SSMS118-01A1 Scene Light Smart {"NAME":"RGB Switch","GPIO":[257,0,259,161,418,417,0,0,258,160,416,224,0,0],"FLAG":0,"BASE":18} +Steren Apagador {"NAME":"SHOME-115","GPIO":[32,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18} +Steren Apagador Doble {"NAME":"STEREN SHOME-116","GPIO":[0,0,288,0,0,32,0,0,224,225,0,0,33,0],"FLAG":0,"BASE":18} +Steren Apagador Triple {"NAME":"STEREN SHOME-117","GPIO":[0,0,288,0,34,32,0,0,224,225,226,0,33,0],"FLAG":0,"BASE":18} STITCH by Monoprice {"NAME":"Tuya WF15S ","GPIO":[1,1,0,0,1,1,0,0,1,2304,1,2272,0,0],"FLAG":0,"BASE":54} SUPLA inCan by Espablo {"NAME":"Supla Espablo","GPIO":[0,1,1312,1,32,224,0,0,1,225,1,0,288,4704],"FLAG":0,"BASE":31} SW-R03 {"NAME":"SW-R03","GPIO":[0,0,0,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +Switch Module 2x5A {"NAME":"QS-WIFI-S04-2C","GPIO":[1,1,32,1,480,0,0,0,161,160,224,225,0,0],"FLAG":0,"BASE":18} TCP Smart 1 Gang {"NAME":"TCP 1 Gang 1 Way","GPIO":[544,0,0,32,224,0,0,0,0,0,320,0,0,0],"FLAG":0,"BASE":18} Teckin 2 Gang {"NAME":"Teckin SR43","GPIO":[0,0,288,0,0,32,0,0,224,225,0,0,33,0],"FLAG":0,"BASE":18} Teckin SR-41 Single Pole {"NAME":"Teckin SR-41","GPIO":[32,0,0,0,0,0,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18} Teekar 10 Way 1 Gang {"NAME":"Teekar 10way","GPIO":[160,161,162,35,164,165,0,0,166,167,0,0,0,0],"FLAG":0,"BASE":18} Teekar Wi-Fi Light 1 Gang {"NAME":"TeeKar Touch","GPIO":[0,0,1,0,1,224,0,0,0,1,32,0,1,0],"FLAG":0,"BASE":18} Teepao Smart-Rollladen-Schalter {"NAME":"Teepao","GPIO":[576,322,226,33,225,34,0,0,320,224,321,0,32,0],"FLAG":0,"BASE":18} +Tellur 1 Port 1800W 10A {"NAME":"Tellur 1CH","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,544,0],"FLAG":0,"BASE":18} +Tellur 2 Ports 1800W 10A {"NAME":"Tellur 2CH","GPIO":[0,0,0,0,225,0,0,0,32,224,33,0,544,0],"FLAG":0,"BASE":18} Tonbux AMZ180648-2 {"NAME":"Tonbux","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1} TopGreener TGWF15S {"NAME":"TopGreener-Switch","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54} -Touch 2 Gang {"NAME":"tuya_2_gang","GPIO":[288,0,0,0,33,0,0,0,32,224,1,225,256,0],"FLAG":0,"BASE":18} Touch 3 Gang {"NAME":"Switch 3-Gang","GPIO":[0,0,0,0,226,33,0,0,32,224,34,225,544,0],"FLAG":0,"BASE":18} +TreatLife 3-Way {"NAME":"Treatlife 3-Way","GPIO":[0,0,0,0,224,576,0,0,225,33,160,0,0,0],"FLAG":0,"BASE":18} Treatlife SS01 3-Way {"NAME":"Treatlife SS01 3-Way","GPIO":[0,0,0,0,224,576,0,0,225,33,160,0,0,0],"FLAG":0,"BASE":18} TreatLife SS01S {"NAME":"TL SS01S Swtch","GPIO":[0,0,0,0,288,576,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} -TreatLife SS02 3-Way {"NAME":"TreatLife 3Way","GPIO":[0,0,0,0,289,256,0,0,257,33,160,0,0,0],"FLAG":0,"BASE":18} -TreatLife SS02S {"NAME":"Treatlife SS02","GPIO":[0,0,0,0,289,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} +TreatLife SS02S {"NAME":"Treatlife SS02","GPIO":[0,0,0,0,288,576,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Tuya 3 Gang {"NAME":"KING-Tuya-key","GPIO":[0,0,0,0,226,225,0,0,224,32,34,0,33,0],"FLAG":0,"BASE":18} TY-US-L1-W {"NAME":"TY-US-L1-W","GPIO":[0,0,0,0,0,32,0,0,0,224,0,0,576,0],"FLAG":0,"BASE":18} TY-US-L3-W {"NAME":"TY-US-L3-W","GPIO":[0,0,0,0,224,33,0,0,34,226,32,225,576,1],"FLAG":0,"BASE":18} @@ -1849,7 +2011,7 @@ Shelly Add-on {"NAME":"Shelly 1 Temp ","GPIO":[1344,0,0,1312,224, ## Valve ``` Garden Water Timer BQ05 {"NAME":"BQ05","GPIO":[32,0,0,0,0,0,0,0,224,544,0,0,0,4704],"FLAG":0,"BASE":18} -Hoenyzy DN20 3/4 {"NAME":"DN20 Valve","GPIO":[0,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} +Hoenyzy DN20 3/4 {"NAME":"DN20 Valve","GPIO":[288,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} Jinvoo SM-AW713 {"NAME":"Jinvoo Valve","GPIO":[0,0,0,0,0,288,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} Jinvoo SM-PW713 {"NAME":"Jinvoo Valve","GPIO":[0,0,0,0,224,288,0,0,32,289,0,0,0,4704],"FLAG":0,"BASE":18} Moes Gas-Water {"NAME":"MoesHouse WV-B","GPIO":[0,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18} @@ -1865,6 +2027,7 @@ BlitzWolf SHP8 {"NAME":"SHP8","GPIO":[0,320,0,32,2720,2656,0,0,262 BSEED Smart Socket {"NAME":"BSEED Socket","GPIO":[0,0,0,0,544,288,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18} CE Smart Home {"NAME":"CE Smart Wall","GPIO":[1,1,1,1,544,32,0,0,224,1,1,1,1,1],"FLAG":0,"BASE":18} CE Smart Home LQ-2-W3 {"NAME":"LITESUN","GPIO":[0,0,0,0,544,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18} +ChilITec Pilota Casa IP44 {"NAME":"Outdoor IP44","GPIO":[0,0,0,0,0,224,0,0,0,288,32,0,0,0],"FLAG":0,"BASE":18} Deta 6922HA {"NAME":"DETA 2G GPO","GPIO":[0,0,0,0,544,0,0,0,65,224,225,0,64,0],"FLAG":0,"BASE":18} Ener-J 13A Twin Wall Sockets with USB {"NAME":"Ener-J 2-Gang ","GPIO":[32,0,0,0,0,224,33,0,225,320,0,0,0,0],"FLAG":0,"BASE":18} Kapok T16 {"NAME":"tiltech-t16","GPIO":[0,320,0,32,192,0,0,0,224,225,0,0,0,0],"FLAG":0,"BASE":18} @@ -1882,6 +2045,7 @@ Smanergy KA10 {"NAME":"KA10","GPIO":[0,320,0,32,2720,2656,0,0,262 Sonoff IW100 {"NAME":"Sonoff IW100","GPIO":[32,3072,0,3104,0,0,0,0,224,544,0,0,0,0],"FLAG":0,"BASE":41} Sonoff S55 {"NAME":"Sonoff S55","GPIO":[32,1,0,1,1,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":1} T16E Dual USB 10A {"NAME":"T16E 10A","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18} +TCP Smart Dual {"NAME":"TCP TAUWIS2GUK","GPIO":[33,0,0,0,0,224,32,0,225,544,0,0,0,0],"FLAG":0,"BASE":18} Teckin SR40 {"NAME":"RF-SR40-US","GPIO":[576,0,0,32,320,33,0,0,225,224,321,226,0,0],"FLAG":0,"BASE":18} TopGreener Dual USB {"NAME":"TGWF215U2A","GPIO":[0,320,0,32,2720,2656,0,0,2624,225,224,321,0,0],"FLAG":0,"BASE":18} TopGreener TGWF15RM {"NAME":"TGWF15RM","GPIO":[0,320,0,32,2720,2656,0,0,2624,321,224,0,0,0],"FLAG":0,"BASE":55} From 85272b7dc736e2095b913301d64a4d72f55d59b3 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 12 Feb 2021 15:14:56 +0100 Subject: [PATCH 28/41] Update workflows --- .github/workflows/CI_github_ESP32.yml | 20 ----------- .github/workflows/Tasmota_build.yml | 41 +++++++++++----------- .github/workflows/Tasmota_build_master.yml | 41 +++++++++++----------- 3 files changed, 40 insertions(+), 62 deletions(-) diff --git a/.github/workflows/CI_github_ESP32.yml b/.github/workflows/CI_github_ESP32.yml index e3d26ef19..1a51e2306 100644 --- a/.github/workflows/CI_github_ESP32.yml +++ b/.github/workflows/CI_github_ESP32.yml @@ -104,26 +104,6 @@ jobs: name: firmware path: ./build_output - tasmota32-minimal: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -U platformio - platformio upgrade --dev - platformio update - - name: Run PlatformIO - run: | - platformio run -e tasmota32-minimal - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - tasmota32-lite: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/Tasmota_build.yml b/.github/workflows/Tasmota_build.yml index 716c5c274..018b355de 100644 --- a/.github/workflows/Tasmota_build.yml +++ b/.github/workflows/Tasmota_build.yml @@ -724,26 +724,6 @@ jobs: path: ./build_output - tasmota32-minimal: - needs: tasmota_pull - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-minimal - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - tasmota32-lite: needs: tasmota_pull runs-on: ubuntu-latest @@ -1104,6 +1084,26 @@ jobs: path: ./build_output + tasmota32-FY: + needs: tasmota_pull + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: | + platformio run -e tasmota32-FY + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + + tasmota32-GR: needs: tasmota_pull runs-on: ubuntu-latest @@ -1455,7 +1455,6 @@ jobs: [ ! -f ./mv_firmware/firmware/tasmota-zbbridge.* ] || mv ./mv_firmware/firmware/tasmota-zbbridge.* ./firmware/tasmota/ [ ! -f ./mv_firmware/firmware/tasmota32.* ] || mv ./mv_firmware/firmware/tasmota32.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-sensors.* ] || mv ./mv_firmware/firmware/tasmota32-sensors.* ./firmware/tasmota32/ - [ ! -f ./mv_firmware/firmware/tasmota32-minimal.* ] || mv ./mv_firmware/firmware/tasmota32-minimal.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-lite.* ] || mv ./mv_firmware/firmware/tasmota32-lite.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-ir*.* ] || mv ./mv_firmware/firmware/tasmota32-ir*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-display.* ] || mv ./mv_firmware/firmware/tasmota32-display.* ./firmware/tasmota32/ diff --git a/.github/workflows/Tasmota_build_master.yml b/.github/workflows/Tasmota_build_master.yml index 5cf20b573..f6b74ce41 100644 --- a/.github/workflows/Tasmota_build_master.yml +++ b/.github/workflows/Tasmota_build_master.yml @@ -724,26 +724,6 @@ jobs: path: ./build_output - tasmota32-minimal: - needs: tasmota_pull - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - pip install -U platformio - - name: Run PlatformIO - run: | - platformio run -e tasmota32-minimal - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build_output - - tasmota32-lite: needs: tasmota_pull runs-on: ubuntu-latest @@ -1104,6 +1084,26 @@ jobs: path: ./build_output + tasmota32-FY: + needs: tasmota_pull + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v1 + - name: Set up Python + uses: actions/setup-python@v1 + - name: Install dependencies + run: | + pip install -U platformio + - name: Run PlatformIO + run: | + platformio run -e tasmota32-FY + - uses: actions/upload-artifact@v2 + with: + name: firmware + path: ./build_output + + tasmota32-GR: needs: tasmota_pull runs-on: ubuntu-latest @@ -1455,7 +1455,6 @@ jobs: [ ! -f ./mv_firmware/firmware/tasmota-zbbridge.* ] || mv ./mv_firmware/firmware/tasmota-zbbridge.* ./firmware/tasmota/ [ ! -f ./mv_firmware/firmware/tasmota32.* ] || mv ./mv_firmware/firmware/tasmota32.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-sensors.* ] || mv ./mv_firmware/firmware/tasmota32-sensors.* ./firmware/tasmota32/ - [ ! -f ./mv_firmware/firmware/tasmota32-minimal.* ] || mv ./mv_firmware/firmware/tasmota32-minimal.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-lite.* ] || mv ./mv_firmware/firmware/tasmota32-lite.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-ir*.* ] || mv ./mv_firmware/firmware/tasmota32-ir*.* ./firmware/tasmota32/ [ ! -f ./mv_firmware/firmware/tasmota32-display.* ] || mv ./mv_firmware/firmware/tasmota32-display.* ./firmware/tasmota32/ From d4537ea208dd183ddf79f8a7ae2cda8594cefcb9 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 12 Feb 2021 15:18:29 +0100 Subject: [PATCH 29/41] Update MODULES.md --- MODULES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULES.md b/MODULES.md index 8b81a8652..46499e2f1 100644 --- a/MODULES.md +++ b/MODULES.md @@ -80,4 +80,4 @@ Module | LCode | Description 74 Sonoff D1 | x | Sonoff D1 Wifi and RF Dimmer 75 Sonoff ZbBridge | x | Sonoff Zigbee bridge -Over 1650 additional devices are supported using [templates](TEMPLATES.md). +Over 1850 additional devices are supported using [templates](TEMPLATES.md). From 42c5af1b702aa25b8e59cee5c4ad57724ee9e82c Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Fri, 12 Feb 2021 16:26:51 +0100 Subject: [PATCH 30/41] Remove ESP32 minimal support --- platformio_override_sample.ini | 1 - platformio_tasmota32.ini | 2 +- platformio_tasmota_env32.ini | 5 ----- tasmota/support_tasmota.ino | 26 ++++++++++++++------------ tasmota/tasmota_globals.h | 2 ++ 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/platformio_override_sample.ini b/platformio_override_sample.ini index 9b7ddfa53..37a9b345d 100644 --- a/platformio_override_sample.ini +++ b/platformio_override_sample.ini @@ -29,7 +29,6 @@ default_envs = ; tasmota32 ; tasmota32-bluetooth ; tasmota32-webcam -; tasmota32-minimal ; tasmota32-lite ; tasmota32-knx ; tasmota32-sensors diff --git a/platformio_tasmota32.ini b/platformio_tasmota32.ini index 4cf662f8e..c857f5ec9 100644 --- a/platformio_tasmota32.ini +++ b/platformio_tasmota32.ini @@ -7,10 +7,10 @@ default_envs = ${build_envs.default_envs} ; *** Uncomment by deleting ";" in the line(s) below to select version(s) ; tasmota32 +; tasmota32-bluetooth ; tasmota32-webcam ; tasmota32-odroidgo ; tasmota32-core2 -; tasmota32-minimal ; tasmota32-lite ; tasmota32-knx ; tasmota32-sensors diff --git a/platformio_tasmota_env32.ini b/platformio_tasmota_env32.ini index d0b4e97c3..5a1b1ec93 100644 --- a/platformio_tasmota_env32.ini +++ b/platformio_tasmota_env32.ini @@ -63,11 +63,6 @@ extends = env:tasmota32 build_flags = ${common32.build_flags} -DFIRMWARE_BLUETOOTH lib_extra_dirs = lib/libesp32, lib/lib_basic, lib/lib_i2c, lib/lib_ssl -[env:tasmota32-minimal] -extends = env:tasmota32 -build_flags = ${common32.build_flags} -DFIRMWARE_MINIMAL -lib_extra_dirs = lib/libesp32 - [env:tasmota32-lite] extends = env:tasmota32 build_flags = ${common32.build_flags} -DFIRMWARE_LITE diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index be533ede8..033af4bf6 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -1019,23 +1019,23 @@ void Every250mSeconds(void) if (TasmotaGlobal.ota_state_flag && BACKLOG_EMPTY) { TasmotaGlobal.ota_state_flag--; if (2 == TasmotaGlobal.ota_state_flag) { - RtcSettings.ota_loader = 0; // Try requested image first + RtcSettings.ota_loader = 0; // Try requested image first ota_retry_counter = OTA_ATTEMPTS; ESPhttpUpdate.rebootOnUpdate(false); - SettingsSave(1); // Free flash for OTA update + SettingsSave(1); // Free flash for OTA update } if (TasmotaGlobal.ota_state_flag <= 0) { #ifdef USE_BLE_ESP32 ExtStopBLE(); #endif // USE_BLE_ESP32 #ifdef USE_COUNTER - CounterInterruptDisable(true); // Prevent OTA failures on 100Hz counter interrupts + CounterInterruptDisable(true); // Prevent OTA failures on 100Hz counter interrupts #endif // USE_COUNTER #ifdef USE_WEBSERVER if (Settings.webserver) StopWebserver(); #endif // USE_WEBSERVER #ifdef USE_ARILUX_RF - AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine + AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine #endif // USE_ARILUX_RF TasmotaGlobal.ota_state_flag = 92; ota_result = 0; @@ -1043,6 +1043,7 @@ void Every250mSeconds(void) if (ota_retry_counter) { char ota_url[TOPSZ]; strlcpy(TasmotaGlobal.mqtt_data, GetOtaUrl(ota_url, sizeof(ota_url)), sizeof(TasmotaGlobal.mqtt_data)); +#ifdef ESP8266 #ifndef FIRMWARE_MINIMAL if (RtcSettings.ota_loader) { // OTA File too large so try OTA minimal version @@ -1061,8 +1062,8 @@ void Every250mSeconds(void) // Replace http://192.168.2.17:80/api/arduino/tasmota.bin with http://192.168.2.17:80/api/arduino/tasmota-minimal.bin // Replace http://192.168.2.17/api/arduino/tasmota.bin.gz with http://192.168.2.17/api/arduino/tasmota-minimal.bin.gz - char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it - if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only + char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it + if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only char *ech = strchr(bch, '.'); // Find file type in filename (none, .ino.bin, .ino.bin.gz, .bin, .bin.gz or .gz) if (ech == nullptr) { ech = TasmotaGlobal.mqtt_data + strlen(TasmotaGlobal.mqtt_data); } // Point to '/0' at end of mqtt_data becoming an empty string @@ -1077,7 +1078,6 @@ void Every250mSeconds(void) snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s-" D_JSON_MINIMAL "%s"), TasmotaGlobal.mqtt_data, ota_url_type); // Minimal filename must be filename-minimal } #endif // FIRMWARE_MINIMAL -#ifdef ESP8266 if (ota_retry_counter < OTA_ATTEMPTS / 2) { if (!strcasecmp_P(TasmotaGlobal.mqtt_data, PSTR(".gz"))) { ota_retry_counter = 1; @@ -1093,26 +1093,28 @@ void Every250mSeconds(void) #ifndef FIRMWARE_MINIMAL int ota_error = ESPhttpUpdate.getLastError(); DEBUG_CORE_LOG(PSTR("OTA: Error %d"), ota_error); +#ifdef ESP8266 if ((HTTP_UE_TOO_LESS_SPACE == ota_error) || (HTTP_UE_BIN_FOR_WRONG_FLASH == ota_error)) { - RtcSettings.ota_loader = 1; // Try minimal image next + RtcSettings.ota_loader = 1; // Try minimal image next } +#endif // ESP8266 #endif // FIRMWARE_MINIMAL - TasmotaGlobal.ota_state_flag = 2; // Upgrade failed - retry + TasmotaGlobal.ota_state_flag = 2; // Upgrade failed - retry } } } - if (90 == TasmotaGlobal.ota_state_flag) { // Allow MQTT to reconnect + if (90 == TasmotaGlobal.ota_state_flag) { // Allow MQTT to reconnect TasmotaGlobal.ota_state_flag = 0; Response_P(PSTR("{\"" D_CMND_UPGRADE "\":\"")); if (ota_result) { -// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285 +// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285 ResponseAppend_P(PSTR(D_JSON_SUCCESSFUL ". " D_JSON_RESTARTING)); TasmotaGlobal.restart_flag = 2; } else { ResponseAppend_P(PSTR(D_JSON_FAILED " %s"), ESPhttpUpdate.getLastErrorString().c_str()); } ResponseAppend_P(PSTR("\"}")); -// TasmotaGlobal.restart_flag = 2; // Restart anyway to keep memory clean webserver +// TasmotaGlobal.restart_flag = 2; // Restart anyway to keep memory clean webserver MqttPublishPrefixTopic_P(STAT, PSTR(D_CMND_UPGRADE)); #ifdef USE_COUNTER CounterInterruptDisable(false); diff --git a/tasmota/tasmota_globals.h b/tasmota/tasmota_globals.h index 71e345b2b..2ac6a2343 100644 --- a/tasmota/tasmota_globals.h +++ b/tasmota/tasmota_globals.h @@ -132,6 +132,8 @@ String EthernetMacAddress(void); #define USE_UFILESYS +#undef FIRMWARE_MINIMAL // Minimal is not supported as not needed + // Hardware has no ESP32 #undef USE_TUYA_DIMMER #undef USE_PWM_DIMMER From 3f4fda44a41bafec1bfffaf600440d4cb1f09b41 Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Sat, 13 Feb 2021 07:43:59 +0100 Subject: [PATCH 31/41] ili9341 update --- tasmota/support_tasmota.ino | 36 +++++++++++++----------------------- tasmota/xdrv_13_display.ino | 13 ++++++++++--- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index 033af4bf6..fe4cf34d8 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -1019,23 +1019,23 @@ void Every250mSeconds(void) if (TasmotaGlobal.ota_state_flag && BACKLOG_EMPTY) { TasmotaGlobal.ota_state_flag--; if (2 == TasmotaGlobal.ota_state_flag) { - RtcSettings.ota_loader = 0; // Try requested image first + RtcSettings.ota_loader = 0; // Try requested image first ota_retry_counter = OTA_ATTEMPTS; ESPhttpUpdate.rebootOnUpdate(false); - SettingsSave(1); // Free flash for OTA update + SettingsSave(1); // Free flash for OTA update } if (TasmotaGlobal.ota_state_flag <= 0) { #ifdef USE_BLE_ESP32 ExtStopBLE(); #endif // USE_BLE_ESP32 #ifdef USE_COUNTER - CounterInterruptDisable(true); // Prevent OTA failures on 100Hz counter interrupts + CounterInterruptDisable(true); // Prevent OTA failures on 100Hz counter interrupts #endif // USE_COUNTER #ifdef USE_WEBSERVER if (Settings.webserver) StopWebserver(); #endif // USE_WEBSERVER #ifdef USE_ARILUX_RF - AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine + AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine #endif // USE_ARILUX_RF TasmotaGlobal.ota_state_flag = 92; ota_result = 0; @@ -1043,7 +1043,6 @@ void Every250mSeconds(void) if (ota_retry_counter) { char ota_url[TOPSZ]; strlcpy(TasmotaGlobal.mqtt_data, GetOtaUrl(ota_url, sizeof(ota_url)), sizeof(TasmotaGlobal.mqtt_data)); -#ifdef ESP8266 #ifndef FIRMWARE_MINIMAL if (RtcSettings.ota_loader) { // OTA File too large so try OTA minimal version @@ -1062,8 +1061,8 @@ void Every250mSeconds(void) // Replace http://192.168.2.17:80/api/arduino/tasmota.bin with http://192.168.2.17:80/api/arduino/tasmota-minimal.bin // Replace http://192.168.2.17/api/arduino/tasmota.bin.gz with http://192.168.2.17/api/arduino/tasmota-minimal.bin.gz - char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it - if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only + char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it + if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only char *ech = strchr(bch, '.'); // Find file type in filename (none, .ino.bin, .ino.bin.gz, .bin, .bin.gz or .gz) if (ech == nullptr) { ech = TasmotaGlobal.mqtt_data + strlen(TasmotaGlobal.mqtt_data); } // Point to '/0' at end of mqtt_data becoming an empty string @@ -1078,14 +1077,6 @@ void Every250mSeconds(void) snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s-" D_JSON_MINIMAL "%s"), TasmotaGlobal.mqtt_data, ota_url_type); // Minimal filename must be filename-minimal } #endif // FIRMWARE_MINIMAL - if (ota_retry_counter < OTA_ATTEMPTS / 2) { - if (!strcasecmp_P(TasmotaGlobal.mqtt_data, PSTR(".gz"))) { - ota_retry_counter = 1; - } else { - strcat_P(TasmotaGlobal.mqtt_data, PSTR(".gz")); - } - } -#endif // ESP8266 AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "%s"), TasmotaGlobal.mqtt_data); WiFiClient OTAclient; ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(OTAclient, TasmotaGlobal.mqtt_data)); @@ -1093,28 +1084,26 @@ void Every250mSeconds(void) #ifndef FIRMWARE_MINIMAL int ota_error = ESPhttpUpdate.getLastError(); DEBUG_CORE_LOG(PSTR("OTA: Error %d"), ota_error); -#ifdef ESP8266 if ((HTTP_UE_TOO_LESS_SPACE == ota_error) || (HTTP_UE_BIN_FOR_WRONG_FLASH == ota_error)) { - RtcSettings.ota_loader = 1; // Try minimal image next + RtcSettings.ota_loader = 1; // Try minimal image next } -#endif // ESP8266 #endif // FIRMWARE_MINIMAL - TasmotaGlobal.ota_state_flag = 2; // Upgrade failed - retry + TasmotaGlobal.ota_state_flag = 2; // Upgrade failed - retry } } } - if (90 == TasmotaGlobal.ota_state_flag) { // Allow MQTT to reconnect + if (90 == TasmotaGlobal.ota_state_flag) { // Allow MQTT to reconnect TasmotaGlobal.ota_state_flag = 0; Response_P(PSTR("{\"" D_CMND_UPGRADE "\":\"")); if (ota_result) { -// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285 +// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285 ResponseAppend_P(PSTR(D_JSON_SUCCESSFUL ". " D_JSON_RESTARTING)); TasmotaGlobal.restart_flag = 2; } else { ResponseAppend_P(PSTR(D_JSON_FAILED " %s"), ESPhttpUpdate.getLastErrorString().c_str()); } ResponseAppend_P(PSTR("\"}")); -// TasmotaGlobal.restart_flag = 2; // Restart anyway to keep memory clean webserver +// TasmotaGlobal.restart_flag = 2; // Restart anyway to keep memory clean webserver MqttPublishPrefixTopic_P(STAT, PSTR(D_CMND_UPGRADE)); #ifdef USE_COUNTER CounterInterruptDisable(false); @@ -1655,7 +1644,8 @@ void GpioInit(void) bool valid_cs = (ValidSpiPinUsed(GPIO_SPI_CS) || ValidSpiPinUsed(GPIO_RC522_CS) || (ValidSpiPinUsed(GPIO_NRF24_CS) && ValidSpiPinUsed(GPIO_NRF24_DC)) || - (ValidSpiPinUsed(GPIO_ILI9341_CS) && ValidSpiPinUsed(GPIO_ILI9341_DC)) || + ValidSpiPinUsed(GPIO_ILI9341_CS) || + ValidSpiPinUsed(GPIO_ILI9341_DC) || // there are also boards without cs ValidSpiPinUsed(GPIO_EPAPER29_CS) || ValidSpiPinUsed(GPIO_EPAPER42_CS) || ValidSpiPinUsed(GPIO_ILI9488_CS) || diff --git a/tasmota/xdrv_13_display.ino b/tasmota/xdrv_13_display.ino index 817898d56..4838a91fc 100755 --- a/tasmota/xdrv_13_display.ino +++ b/tasmota/xdrv_13_display.ino @@ -658,9 +658,16 @@ void DisplayText(void) break; case 'f': // font sx - if (renderer) renderer->setTextFont(*cp&7); - else DisplaySetFont(*cp&7); - cp += 1; + { uint8_t font = *cp&7; + if (renderer) renderer->setTextFont(font); + else DisplaySetFont(font); + if (font) { + // for backward compatibility set size to 1 on non GFX fonts + if (renderer) renderer->setTextSize(1); + else DisplaySetSize(1); + } + cp += 1; + } break; case 'a': // rotation angle From 74912e7cc28b969ff2f8665796911cb1d68e5f5a Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Sat, 13 Feb 2021 07:48:20 +0100 Subject: [PATCH 32/41] update ili9341 --- .../.github/ISSUE_TEMPLATE.md | 46 - .../.github/PULL_REQUEST_TEMPLATE.md | 26 - .../.gitignore | 4 - .../.travis.yml | 38 - .../Adafruit_ILI9341.cpp | 282 ------ .../Adafruit_ILI9341.h | 144 --- .../README.md | 35 - .../breakouttouchpaint/.esp8266.test.skip | 0 .../breakouttouchpaint/breakouttouchpaint.ino | 145 --- .../fulltest_featherwing/.mega2560.test.skip | 0 .../fulltest_featherwing.ino | 265 ------ .../examples/graphicstest/graphicstest.ino | 365 -------- .../.mega2560.test.skip | 0 .../graphicstest_featherwing.ino | 404 -------- .../examples/onoffbutton/onoffbutton.ino | 125 --- .../onoffbutton_breakout/.esp8266.test.skip | 0 .../onoffbutton_breakout.ino | 133 --- .../examples/pictureEmbed/dragon.h | 861 ------------------ .../examples/pictureEmbed/pictureEmbed.ino | 69 -- .../examples/spitftbitmap/spitftbitmap.ino | 218 ----- .../examples/touchpaint/touchpaint.ino | 146 --- .../.mega2560.test.skip | 0 .../touchpaint_featherwing.ino | 165 ---- .../library.properties | 9 - .../Arduino_ST7789.cpp | 33 +- .../Arduino_ST7789-gemu-1.0/Arduino_ST7789.h | 6 +- .../src/renderer.cpp | 37 +- .../Display_Renderer-gemu-1.0/src/renderer.h | 4 + .../ILI9341-gemu-1.0/ILI9341_2.cpp | 121 ++- lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.h | 47 +- tasmota/xdsp_04_ili9341.ino | 393 ++++---- tasmota/xdsp_13_ILI9341-2.ino | 290 ------ 32 files changed, 368 insertions(+), 4043 deletions(-) delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/ISSUE_TEMPLATE.md delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.gitignore delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.travis.yml delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.cpp delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.h delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/README.md delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/.esp8266.test.skip delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/breakouttouchpaint.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/.mega2560.test.skip delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/fulltest_featherwing.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest/graphicstest.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/.mega2560.test.skip delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/graphicstest_featherwing.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton/onoffbutton.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/.esp8266.test.skip delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/onoffbutton_breakout.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/dragon.h delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/pictureEmbed.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/spitftbitmap/spitftbitmap.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint/touchpaint.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/.mega2560.test.skip delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/touchpaint_featherwing.ino delete mode 100644 lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/library.properties delete mode 100644 tasmota/xdsp_13_ILI9341-2.ino diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/ISSUE_TEMPLATE.md b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index f0e26146f..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,46 +0,0 @@ -Thank you for opening an issue on an Adafruit Arduino library repository. To -improve the speed of resolution please review the following guidelines and -common troubleshooting steps below before creating the issue: - -- **Do not use GitHub issues for troubleshooting projects and issues.** Instead use - the forums at http://forums.adafruit.com to ask questions and troubleshoot why - something isn't working as expected. In many cases the problem is a common issue - that you will more quickly receive help from the forum community. GitHub issues - are meant for known defects in the code. If you don't know if there is a defect - in the code then start with troubleshooting on the forum first. - -- **If following a tutorial or guide be sure you didn't miss a step.** Carefully - check all of the steps and commands to run have been followed. Consult the - forum if you're unsure or have questions about steps in a guide/tutorial. - -- **For Arduino projects check these very common issues to ensure they don't apply**: - - - For uploading sketches or communicating with the board make sure you're using - a **USB data cable** and **not** a **USB charge-only cable**. It is sometimes - very hard to tell the difference between a data and charge cable! Try using the - cable with other devices or swapping to another cable to confirm it is not - the problem. - - - **Be sure you are supplying adequate power to the board.** Check the specs of - your board and plug in an external power supply. In many cases just - plugging a board into your computer is not enough to power it and other - peripherals. - - - **Double check all soldering joints and connections.** Flakey connections - cause many mysterious problems. See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints. - - - **Ensure you are using an official Arduino or Adafruit board.** We can't - guarantee a clone board will have the same functionality and work as expected - with this code and don't support them. - -If you're sure this issue is a defect in the code and checked the steps above -please fill in the following fields to provide enough troubleshooting information. -You may delete the guideline and text above to just leave the following details: - -- Arduino board: **INSERT ARDUINO BOARD NAME/TYPE HERE** - -- Arduino IDE version (found in Arduino -> About Arduino menu): **INSERT ARDUINO - VERSION HERE** - -- List the steps to reproduce the problem below (if possible attach a sketch or - copy the sketch code in too): **LIST REPRO STEPS BELOW** diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/PULL_REQUEST_TEMPLATE.md b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 7b641eb86..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,26 +0,0 @@ -Thank you for creating a pull request to contribute to Adafruit's GitHub code! -Before you open the request please review the following guidelines and tips to -help it be more easily integrated: - -- **Describe the scope of your change--i.e. what the change does and what parts - of the code were modified.** This will help us understand any risks of integrating - the code. - -- **Describe any known limitations with your change.** For example if the change - doesn't apply to a supported platform of the library please mention it. - -- **Please run any tests or examples that can exercise your modified code.** We - strive to not break users of the code and running tests/examples helps with this - process. - -Thank you again for contributing! We will try to test and integrate the change -as soon as we can, but be aware we have many GitHub repositories to manage and -can't immediately respond to every request. There is no need to bump or check in -on a pull request (it will clutter the discussion of the request). - -Also don't be worried if the request is closed or not integrated--sometimes the -priorities of Adafruit's GitHub code (education, ease of use) might not match the -priorities of the pull request. Don't fret, the open source community thrives on -forks and GitHub makes it easy to keep your changes in a forked repo. - -After reviewing the guidelines above you can delete this text from the pull request. diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.gitignore b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.gitignore deleted file mode 100644 index c2a26c038..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Our handy .gitignore for automation ease -Doxyfile* -doxygen_sqlite3.db -html diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.travis.yml b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.travis.yml deleted file mode 100644 index 3e5672cd6..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -language: c -sudo: false - -cache: - directories: - - ~/arduino_ide - # Caches Arduino IDE + ESP32 platform - - ~/.arduino15/packages/ - # Caches Arduino platforms -git: - depth: false - quiet: true - -# Blacklist -branches: - except: - - gh-pages - -env: - global: - - PRETTYNAME="Adafruit ILI9341 Arduino Library" -# Optional, will default to "$TRAVIS_BUILD_DIR/Doxyfile" -# - DOXYFILE: $TRAVIS_BUILD_DIR/Doxyfile - -before_install: - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/install.sh) - -install: - - arduino --install-library "Adafruit GFX Library","Adafruit STMPE610","Adafruit TouchScreen" - -script: - - build_main_platforms - -# Generate and deploy documentation -after_success: - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/library_check.sh) - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/doxy_gen_and_deploy.sh) - diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.cpp b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.cpp deleted file mode 100644 index 442975ada..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.cpp +++ /dev/null @@ -1,282 +0,0 @@ -/*! -* @file Adafruit_ILI9341.cpp -* -* @mainpage Adafruit ILI9341 TFT Displays -* -* @section intro_sec Introduction -* -* This is the documentation for Adafruit's ILI9341 driver for the -* Arduino platform. -* -* This library works with the Adafruit 2.8" Touch Shield V2 (SPI) -* http://www.adafruit.com/products/1651 -* -* Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341 -* https://www.adafruit.com/product/2478 -* -* 2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket - ILI9341 -* https://www.adafruit.com/product/1770 -* -* 2.2" 18-bit color TFT LCD display with microSD card breakout - ILI9340 -* https://www.adafruit.com/product/1770 -* -* TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers -* https://www.adafruit.com/product/3315 -* -* These displays use SPI to communicate, 4 or 5 pins are required -* to interface (RST is optional). -* -* Adafruit invests time and resources providing this open source code, -* please support Adafruit and open-source hardware by purchasing -* products from Adafruit! -* -* @section dependencies Dependencies -* -* This library depends on -* Adafruit_GFX being present on your system. Please make sure you have -* installed the latest version before using this library. -* -* @section author Author -* -* Written by Limor "ladyada" Fried for Adafruit Industries. -* -* @section license License -* -* BSD license, all text here must be included in any redistribution. -* -*/ - -#include "Adafruit_ILI9341.h" -#ifndef ARDUINO_STM32_FEATHER - #include "pins_arduino.h" - #ifndef RASPI - #include "wiring_private.h" - #endif -#endif -#include - -#if defined (ARDUINO_ARCH_ARC32) || defined (ARDUINO_MAXIM) - #define SPI_DEFAULT_FREQ 16000000 -#elif defined (__AVR__) || defined(TEENSYDUINO) - #define SPI_DEFAULT_FREQ 8000000 -#elif defined(ESP8266) || defined(ESP32) - #define SPI_DEFAULT_FREQ 40000000 -#elif defined(RASPI) - #define SPI_DEFAULT_FREQ 80000000 -#elif defined(ARDUINO_ARCH_STM32F1) - #define SPI_DEFAULT_FREQ 36000000 -#else - #define SPI_DEFAULT_FREQ 24000000 ///< Default SPI data clock frequency -#endif - -#define MADCTL_MY 0x80 ///< Bottom to top -#define MADCTL_MX 0x40 ///< Right to left -#define MADCTL_MV 0x20 ///< Reverse Mode -#define MADCTL_ML 0x10 ///< LCD refresh Bottom to top -#define MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order -#define MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order -#define MADCTL_MH 0x04 ///< LCD refresh right to left - -/**************************************************************************/ -/*! - @brief Instantiate Adafruit ILI9341 driver with software SPI - @param cs Chip select pin # - @param dc Data/Command pin # - @param mosi SPI MOSI pin # - @param sclk SPI Clock pin # - @param rst Reset pin # (optional, pass -1 if unused) - @param miso SPI MISO pin # (optional, pass -1 if unused) -*/ -/**************************************************************************/ -Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t mosi, - int8_t sclk, int8_t rst, int8_t miso) : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, cs, dc, mosi, sclk, rst, miso) { -} - -/**************************************************************************/ -/*! - @brief Instantiate Adafruit ILI9341 driver with hardware SPI - @param cs Chip select pin # - @param dc Data/Command pin # - @param rst Reset pin # (optional, pass -1 if unused) -*/ -/**************************************************************************/ -Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t rst) : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, cs, dc, rst) { -} - -static const uint8_t PROGMEM initcmd[] = { - 0xEF, 3, 0x03, 0x80, 0x02, - 0xCF, 3, 0x00, 0xC1, 0x30, - 0xED, 4, 0x64, 0x03, 0x12, 0x81, - 0xE8, 3, 0x85, 0x00, 0x78, - 0xCB, 5, 0x39, 0x2C, 0x00, 0x34, 0x02, - 0xF7, 1, 0x20, - 0xEA, 2, 0x00, 0x00, - ILI9341_PWCTR1 , 1, 0x23, // Power control VRH[5:0] - ILI9341_PWCTR2 , 1, 0x10, // Power control SAP[2:0];BT[3:0] - ILI9341_VMCTR1 , 2, 0x3e, 0x28, // VCM control - ILI9341_VMCTR2 , 1, 0x86, // VCM control2 - ILI9341_MADCTL , 1, 0x48, // Memory Access Control - ILI9341_VSCRSADD, 1, 0x00, // Vertical scroll zero - ILI9341_PIXFMT , 1, 0x55, - ILI9341_FRMCTR1 , 2, 0x00, 0x18, - ILI9341_DFUNCTR , 3, 0x08, 0x82, 0x27, // Display Function Control - 0xF2, 1, 0x00, // 3Gamma Function Disable - ILI9341_GAMMASET , 1, 0x01, // Gamma curve selected - ILI9341_GMCTRP1 , 15, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, // Set Gamma - 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00, - ILI9341_GMCTRN1 , 15, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, // Set Gamma - 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, - ILI9341_SLPOUT , 0x80, // Exit Sleep - ILI9341_DISPON , 0x80, // Display on - 0x00 // End of list -}; - -/**************************************************************************/ -/*! - @brief Initialize ILI9341 chip - Connects to the ILI9341 over SPI and sends initialization procedure commands - @param freq Desired SPI clock frequency -*/ -/**************************************************************************/ -void Adafruit_ILI9341::begin(uint32_t freq) { - if(!freq) freq = SPI_DEFAULT_FREQ; - _freq = freq; - - initSPI(freq); - - startWrite(); - - uint8_t cmd, x, numArgs; - const uint8_t *addr = initcmd; - while((cmd = pgm_read_byte(addr++)) > 0) { - writeCommand(cmd); - x = pgm_read_byte(addr++); - numArgs = x & 0x7F; - while(numArgs--) spiWrite(pgm_read_byte(addr++)); - if(x & 0x80) delay(120); - } - - endWrite(); - - _width = ILI9341_TFTWIDTH; - _height = ILI9341_TFTHEIGHT; -} - - -/**************************************************************************/ -/*! - @brief Set origin of (0,0) and orientation of TFT display - @param m The index for rotation, from 0-3 inclusive -*/ -/**************************************************************************/ -void Adafruit_ILI9341::setRotation(uint8_t m) { - rotation = m % 4; // can't be higher than 3 - switch (rotation) { - case 0: - m = (MADCTL_MX | MADCTL_BGR); - _width = ILI9341_TFTWIDTH; - _height = ILI9341_TFTHEIGHT; - break; - case 1: - m = (MADCTL_MV | MADCTL_BGR); - _width = ILI9341_TFTHEIGHT; - _height = ILI9341_TFTWIDTH; - break; - case 2: - m = (MADCTL_MY | MADCTL_BGR); - _width = ILI9341_TFTWIDTH; - _height = ILI9341_TFTHEIGHT; - break; - case 3: - m = (MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR); - _width = ILI9341_TFTHEIGHT; - _height = ILI9341_TFTWIDTH; - break; - } - - startWrite(); - writeCommand(ILI9341_MADCTL); - spiWrite(m); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Enable/Disable display color inversion - @param invert True to invert, False to have normal color -*/ -/**************************************************************************/ -void Adafruit_ILI9341::invertDisplay(boolean invert) { - startWrite(); - writeCommand(invert ? ILI9341_INVON : ILI9341_INVOFF); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Scroll display memory - @param y How many pixels to scroll display by -*/ -/**************************************************************************/ -void Adafruit_ILI9341::scrollTo(uint16_t y) { - startWrite(); - writeCommand(ILI9341_VSCRSADD); - SPI_WRITE16(y); - endWrite(); -} - -/**************************************************************************/ - -void Adafruit_ILI9341::setScrollMargins(uint16_t top, uint16_t bottom) -{ - uint16_t height = _height - (top + bottom); - - startWrite(); - writeCommand(0x33); - SPI_WRITE16(top); - SPI_WRITE16(height); - SPI_WRITE16(bottom); - endWrite(); -} - -/**************************************************************************/ -/*! - @brief Set the "address window" - the rectangle we will write to RAM with the next chunk of SPI data writes. The ILI9341 will automatically wrap the data as each row is filled - @param x TFT memory 'x' origin - @param y TFT memory 'y' origin - @param w Width of rectangle - @param h Height of rectangle -*/ -/**************************************************************************/ -void Adafruit_ILI9341::setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h) { - uint32_t xa = ((uint32_t)x << 16) | (x+w-1); - uint32_t ya = ((uint32_t)y << 16) | (y+h-1); - writeCommand(ILI9341_CASET); // Column addr set - SPI_WRITE32(xa); - writeCommand(ILI9341_PASET); // Row addr set - SPI_WRITE32(ya); - writeCommand(ILI9341_RAMWR); // write to RAM -} - -/**************************************************************************/ -/*! - @brief Read 8 bits of data from ILI9341 configuration memory. NOT from RAM! - This is highly undocumented/supported, it's really a hack but kinda works? - @param command The command register to read data from - @param index The byte index into the command to read from - @return Unsigned 8-bit data read from ILI9341 register -*/ -/**************************************************************************/ -uint8_t Adafruit_ILI9341::readcommand8(uint8_t command, uint8_t index) { - uint32_t freq = _freq; - if(_freq > 24000000) _freq = 24000000; - startWrite(); - writeCommand(0xD9); // woo sekret command? - spiWrite(0x10 + index); - writeCommand(command); - uint8_t r = spiRead(); - endWrite(); - _freq = freq; - return r; -} - diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.h b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.h deleted file mode 100644 index 368e1cc0f..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/Adafruit_ILI9341.h +++ /dev/null @@ -1,144 +0,0 @@ -/*! -* @file Adafruit_ILI9341.h -* -* This is the documentation for Adafruit's ILI9341 driver for the -* Arduino platform. -* -* This library works with the Adafruit 2.8" Touch Shield V2 (SPI) -* http://www.adafruit.com/products/1651 -* Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341 -* https://www.adafruit.com/product/2478 -* 2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket - ILI9341 -* https://www.adafruit.com/product/1770 -* 2.2" 18-bit color TFT LCD display with microSD card breakout - ILI9340 -* https://www.adafruit.com/product/1770 -* TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers -* https://www.adafruit.com/product/3315 -* -* These displays use SPI to communicate, 4 or 5 pins are required -* to interface (RST is optional). -* -* Adafruit invests time and resources providing this open source code, -* please support Adafruit and open-source hardware by purchasing -* products from Adafruit! -* -* -* This library depends on -* Adafruit_GFX being present on your system. Please make sure you have -* installed the latest version before using this library. -* -* Written by Limor "ladyada" Fried for Adafruit Industries. -* -* BSD license, all text here must be included in any redistribution. -* -*/ - -#ifndef _ADAFRUIT_ILI9341H_ -#define _ADAFRUIT_ILI9341H_ - -#include "Arduino.h" -#include "Print.h" -#include -#include "Adafruit_GFX.h" -#include -#include - -#define ILI9341_TFTWIDTH 240 ///< ILI9341 max TFT width -#define ILI9341_TFTHEIGHT 320 ///< ILI9341 max TFT height - -#define ILI9341_NOP 0x00 ///< No-op register -#define ILI9341_SWRESET 0x01 ///< Software reset register -#define ILI9341_RDDID 0x04 ///< Read display identification information -#define ILI9341_RDDST 0x09 ///< Read Display Status - -#define ILI9341_SLPIN 0x10 ///< Enter Sleep Mode -#define ILI9341_SLPOUT 0x11 ///< Sleep Out -#define ILI9341_PTLON 0x12 ///< Partial Mode ON -#define ILI9341_NORON 0x13 ///< Normal Display Mode ON - -#define ILI9341_RDMODE 0x0A ///< Read Display Power Mode -#define ILI9341_RDMADCTL 0x0B ///< Read Display MADCTL -#define ILI9341_RDPIXFMT 0x0C ///< Read Display Pixel Format -#define ILI9341_RDIMGFMT 0x0D ///< Read Display Image Format -#define ILI9341_RDSELFDIAG 0x0F ///< Read Display Self-Diagnostic Result - -#define ILI9341_INVOFF 0x20 ///< Display Inversion OFF -#define ILI9341_INVON 0x21 ///< Display Inversion ON -#define ILI9341_GAMMASET 0x26 ///< Gamma Set -#define ILI9341_DISPOFF 0x28 ///< Display OFF -#define ILI9341_DISPON 0x29 ///< Display ON - -#define ILI9341_CASET 0x2A ///< Column Address Set -#define ILI9341_PASET 0x2B ///< Page Address Set -#define ILI9341_RAMWR 0x2C ///< Memory Write -#define ILI9341_RAMRD 0x2E ///< Memory Read - -#define ILI9341_PTLAR 0x30 ///< Partial Area -#define ILI9341_MADCTL 0x36 ///< Memory Access Control -#define ILI9341_VSCRSADD 0x37 ///< Vertical Scrolling Start Address -#define ILI9341_PIXFMT 0x3A ///< COLMOD: Pixel Format Set - -#define ILI9341_FRMCTR1 0xB1 ///< Frame Rate Control (In Normal Mode/Full Colors) -#define ILI9341_FRMCTR2 0xB2 ///< Frame Rate Control (In Idle Mode/8 colors) -#define ILI9341_FRMCTR3 0xB3 ///< Frame Rate control (In Partial Mode/Full Colors) -#define ILI9341_INVCTR 0xB4 ///< Display Inversion Control -#define ILI9341_DFUNCTR 0xB6 ///< Display Function Control - -#define ILI9341_PWCTR1 0xC0 ///< Power Control 1 -#define ILI9341_PWCTR2 0xC1 ///< Power Control 2 -#define ILI9341_PWCTR3 0xC2 ///< Power Control 3 -#define ILI9341_PWCTR4 0xC3 ///< Power Control 4 -#define ILI9341_PWCTR5 0xC4 ///< Power Control 5 -#define ILI9341_VMCTR1 0xC5 ///< VCOM Control 1 -#define ILI9341_VMCTR2 0xC7 ///< VCOM Control 2 - -#define ILI9341_RDID1 0xDA ///< Read ID 1 -#define ILI9341_RDID2 0xDB ///< Read ID 2 -#define ILI9341_RDID3 0xDC ///< Read ID 3 -#define ILI9341_RDID4 0xDD ///< Read ID 4 - -#define ILI9341_GMCTRP1 0xE0 ///< Positive Gamma Correction -#define ILI9341_GMCTRN1 0xE1 ///< Negative Gamma Correction -//#define ILI9341_PWCTR6 0xFC - -// Color definitions -#define ILI9341_BLACK 0x0000 ///< 0, 0, 0 -#define ILI9341_NAVY 0x000F ///< 0, 0, 123 -#define ILI9341_DARKGREEN 0x03E0 ///< 0, 125, 0 -#define ILI9341_DARKCYAN 0x03EF ///< 0, 125, 123 -#define ILI9341_MAROON 0x7800 ///< 123, 0, 0 -#define ILI9341_PURPLE 0x780F ///< 123, 0, 123 -#define ILI9341_OLIVE 0x7BE0 ///< 123, 125, 0 -#define ILI9341_LIGHTGREY 0xC618 ///< 198, 195, 198 -#define ILI9341_DARKGREY 0x7BEF ///< 123, 125, 123 -#define ILI9341_BLUE 0x001F ///< 0, 0, 255 -#define ILI9341_GREEN 0x07E0 ///< 0, 255, 0 -#define ILI9341_CYAN 0x07FF ///< 0, 255, 255 -#define ILI9341_RED 0xF800 ///< 255, 0, 0 -#define ILI9341_MAGENTA 0xF81F ///< 255, 0, 255 -#define ILI9341_YELLOW 0xFFE0 ///< 255, 255, 0 -#define ILI9341_WHITE 0xFFFF ///< 255, 255, 255 -#define ILI9341_ORANGE 0xFD20 ///< 255, 165, 0 -#define ILI9341_GREENYELLOW 0xAFE5 ///< 173, 255, 41 -#define ILI9341_PINK 0xFC18 ///< 255, 130, 198 - -///< Class to manage hardware interface with ILI9341 chipset (also seems to work with ILI9340) -class Adafruit_ILI9341 : public Adafruit_SPITFT { - public: - Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK, int8_t _RST = -1, int8_t _MISO = -1); - Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _RST = -1); - - void begin(uint32_t freq=0); - void setRotation(uint8_t r); - void invertDisplay(boolean i); - void scrollTo(uint16_t y); - - void setScrollMargins(uint16_t top, uint16_t bottom); - - // Transaction API not used by GFX - void setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h); - - uint8_t readcommand8(uint8_t reg, uint8_t index=0); -}; - -#endif // _ADAFRUIT_ILI9341H_ diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/README.md b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/README.md deleted file mode 100644 index b08f63086..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Adafruit ILI9341 Arduino Library [![Build Status](https://travis-ci.org/adafruit/Adafruit_ILI9341.svg?branch=master)](https://travis-ci.org/adafruit/Adafruit_ILI9341) - -This is a library for the Adafruit ILI9341 display products - -This library works with the Adafruit 2.8" Touch Shield V2 (SPI) - * http://www.adafruit.com/products/1651 - -Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341 - * https://www.adafruit.com/product/2478 - -2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket - ILI9341 - * https://www.adafruit.com/product/1770 - -2.2" 18-bit color TFT LCD display with microSD card breakout - ILI9340 - * https://www.adafruit.com/product/1480 - -TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers - * https://www.adafruit.com/product/3315 - -Check out the links above for our tutorials and wiring diagrams. -These displays use SPI to communicate, 4 or 5 pins are required -to interface (RST is optional). - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -MIT license, all text above must be included in any redistribution - -To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_ILI9341. Check that the Adafruit_ILI9341 folder contains Adafruit_ILI9341.cpp and Adafruit_ILI9341. - -Place the Adafruit_ILI9341 library folder your arduinosketchfolder/libraries/ folder. You may need to create the libraries subfolder if its your first library. Restart the IDE - -Also requires the Adafruit_GFX library for Arduino. diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/.esp8266.test.skip b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/.esp8266.test.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/breakouttouchpaint.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/breakouttouchpaint.ino deleted file mode 100644 index 298bcad6b..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/breakouttouchpaint/breakouttouchpaint.ino +++ /dev/null @@ -1,145 +0,0 @@ -/*************************************************** - This is our touchscreen painting example for the Adafruit ILI9341 Breakout - ----> http://www.adafruit.com/products/1770 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -/** NOT FOR USE WITH THE TOUCH SHIELD, ONLY FOR THE BREAKOUT! **/ - -#include // Core graphics library -#include -#include -#include "TouchScreen.h" - -// These are the four touchscreen analog pins -#define YP A2 // must be an analog pin, use "An" notation! -#define XM A3 // must be an analog pin, use "An" notation! -#define YM 5 // can be a digital pin -#define XP 4 // can be a digital pin - -// This is calibration data for the raw touch data to the screen coordinates -#define TS_MINX 150 -#define TS_MINY 120 -#define TS_MAXX 920 -#define TS_MAXY 940 - -#define MINPRESSURE 10 -#define MAXPRESSURE 1000 - -// The display uses hardware SPI, plus #9 & #10 -#define TFT_CS 10 -#define TFT_DC 9 -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); - -// For better pressure precision, we need to know the resistance -// between X+ and X- Use any multimeter to read it -// For the one we're using, its 300 ohms across the X plate -TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); - -// Size of the color selection boxes and the paintbrush size -#define BOXSIZE 40 -#define PENRADIUS 3 -int oldcolor, currentcolor; - -void setup(void) { - // while (!Serial); // used for leonardo debugging - - Serial.begin(9600); - Serial.println(F("Touch Paint!")); - - tft.begin(); - tft.fillScreen(ILI9341_BLACK); - - // make the color selection boxes - tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); - tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); - tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); - tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); - tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); - tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); - - // select the current color 'red' - tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - currentcolor = ILI9341_RED; -} - - -void loop() -{ - // Retrieve a point - TSPoint p = ts.getPoint(); - - /* - Serial.print("X = "); Serial.print(p.x); - Serial.print("\tY = "); Serial.print(p.y); - Serial.print("\tPressure = "); Serial.println(p.z); - */ - - // we have some minimum pressure we consider 'valid' - // pressure of 0 means no pressing! - if (p.z < MINPRESSURE || p.z > MAXPRESSURE) { - return; - } - - // Scale from ~0->1000 to tft.width using the calibration #'s - p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); - p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); - - /* - Serial.print("("); Serial.print(p.x); - Serial.print(", "); Serial.print(p.y); - Serial.println(")"); - */ - - - if (p.y < BOXSIZE) { - oldcolor = currentcolor; - - if (p.x < BOXSIZE) { - currentcolor = ILI9341_RED; - tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*2) { - currentcolor = ILI9341_YELLOW; - tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*3) { - currentcolor = ILI9341_GREEN; - tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*4) { - currentcolor = ILI9341_CYAN; - tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*5) { - currentcolor = ILI9341_BLUE; - tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*6) { - currentcolor = ILI9341_MAGENTA; - tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } - - if (oldcolor != currentcolor) { - if (oldcolor == ILI9341_RED) - tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); - if (oldcolor == ILI9341_YELLOW) - tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); - if (oldcolor == ILI9341_GREEN) - tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); - if (oldcolor == ILI9341_CYAN) - tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); - if (oldcolor == ILI9341_BLUE) - tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); - if (oldcolor == ILI9341_MAGENTA) - tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); - } - } - if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) { - tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); - } -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/.mega2560.test.skip b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/.mega2560.test.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/fulltest_featherwing.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/fulltest_featherwing.ino deleted file mode 100644 index 25f32f2e6..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/fulltest_featherwing/fulltest_featherwing.ino +++ /dev/null @@ -1,265 +0,0 @@ -/*************************************************** - This is our touchscreen painting example for the Adafruit TFT FeatherWing - ----> http://www.adafruit.com/products/3315 - - Check out the links above for our tutorials and wiring diagrams - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include -#include // this is needed even tho we aren't using it - -#include // Core graphics library -#include // Hardware-specific library -#include -#include - -#ifdef ESP8266 - #define STMPE_CS 16 - #define TFT_CS 0 - #define TFT_DC 15 - #define SD_CS 2 -#endif -#ifdef ESP32 - #define STMPE_CS 32 - #define TFT_CS 15 - #define TFT_DC 33 - #define SD_CS 14 -#endif -#ifdef TEENSYDUINO - #define TFT_DC 10 - #define TFT_CS 4 - #define STMPE_CS 3 - #define SD_CS 8 -#endif -#ifdef ARDUINO_STM32_FEATHER - #define TFT_DC PB4 - #define TFT_CS PA15 - #define STMPE_CS PC7 - #define SD_CS PC5 -#endif -#ifdef ARDUINO_NRF52_FEATHER /* BSP 0.6.5 and higher! */ - #define TFT_DC 11 - #define TFT_CS 31 - #define STMPE_CS 30 - #define SD_CS 27 -#endif -#if defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) - #define TFT_DC P5_4 - #define TFT_CS P5_3 - #define STMPE_CS P3_3 - #define SD_CS P3_2 -#endif - -// Anything else! -#if defined (__AVR_ATmega32U4__) || defined(ARDUINO_SAMD_FEATHER_M0) || defined (__AVR_ATmega328P__) || defined(ARDUINO_SAMD_ZERO) || defined(__SAMD51__) || defined(__SAM3X8E__) - #define STMPE_CS 6 - #define TFT_CS 9 - #define TFT_DC 10 - #define SD_CS 5 -#endif - -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); -Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); - - -// This is calibration data for the raw touch data to the screen coordinates -#define TS_MINX 3800 -#define TS_MAXX 100 -#define TS_MINY 100 -#define TS_MAXY 3750 - -#define PENRADIUS 3 - -void setup(void) { - Serial.begin(115200); - - delay(10); - Serial.println("FeatherWing TFT"); - if (!ts.begin()) { - Serial.println("Couldn't start touchscreen controller"); - while (1); - } - Serial.println("Touchscreen started"); - - tft.begin(); - tft.fillScreen(ILI9341_BLUE); - - yield(); - - Serial.print("Initializing SD card..."); - if (!SD.begin(SD_CS)) { - Serial.println("failed!"); - } - Serial.println("OK!"); - - bmpDraw("purple.bmp", 0, 0); -} - -void loop() { - // Retrieve a point - TS_Point p = ts.getPoint(); - - Serial.print("X = "); Serial.print(p.x); - Serial.print("\tY = "); Serial.print(p.y); - Serial.print("\tPressure = "); Serial.println(p.z); - - // Scale from ~0->4000 to tft.width using the calibration #'s - p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); - p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); - - if (((p.y-PENRADIUS) > 0) && ((p.y+PENRADIUS) < tft.height())) { - tft.fillCircle(p.x, p.y, PENRADIUS, ILI9341_RED); - } -} - -// This function opens a Windows Bitmap (BMP) file and -// displays it at the given coordinates. It's sped up -// by reading many pixels worth of data at a time -// (rather than pixel by pixel). Increasing the buffer -// size takes more of the Arduino's precious RAM but -// makes loading a little faster. 20 pixels seems a -// good balance. - -#define BUFFPIXEL 20 - -void bmpDraw(char *filename, int16_t x, int16_t y) { - - File bmpFile; - int bmpWidth, bmpHeight; // W+H in pixels - uint8_t bmpDepth; // Bit depth (currently must be 24) - uint32_t bmpImageoffset; // Start of image data in file - uint32_t rowSize; // Not always = bmpWidth; may have padding - uint8_t sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel) - uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer - boolean goodBmp = false; // Set to true on valid header parse - boolean flip = true; // BMP is stored bottom-to-top - int w, h, row, col; - uint8_t r, g, b; - uint32_t pos = 0, startTime = millis(); - - if((x >= tft.width()) || (y >= tft.height())) return; - - Serial.println(); - Serial.print(F("Loading image '")); - Serial.print(filename); - Serial.println('\''); - - // Open requested file on SD card - if ((bmpFile = SD.open(filename)) == NULL) { - Serial.print(F("File not found")); - return; - } - - // Parse BMP header - if(read16(bmpFile) == 0x4D42) { // BMP signature - Serial.print(F("File size: ")); Serial.println(read32(bmpFile)); - (void)read32(bmpFile); // Read & ignore creator bytes - bmpImageoffset = read32(bmpFile); // Start of image data - Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC); - // Read DIB header - Serial.print(F("Header size: ")); Serial.println(read32(bmpFile)); - bmpWidth = read32(bmpFile); - bmpHeight = read32(bmpFile); - if(read16(bmpFile) == 1) { // # planes -- must be '1' - bmpDepth = read16(bmpFile); // bits per pixel - Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth); - if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed - - goodBmp = true; // Supported BMP format -- proceed! - Serial.print(F("Image size: ")); - Serial.print(bmpWidth); - Serial.print('x'); - Serial.println(bmpHeight); - - // BMP rows are padded (if needed) to 4-byte boundary - rowSize = (bmpWidth * 3 + 3) & ~3; - - // If bmpHeight is negative, image is in top-down order. - // This is not canon but has been observed in the wild. - if(bmpHeight < 0) { - bmpHeight = -bmpHeight; - flip = false; - } - - // Crop area to be loaded - w = bmpWidth; - h = bmpHeight; - if((x+w-1) >= tft.width()) w = tft.width() - x; - if((y+h-1) >= tft.height()) h = tft.height() - y; - - // Set TFT address window to clipped image bounds - tft.startWrite(); - tft.setAddrWindow(x, y, w, h); - - for (row=0; row= sizeof(sdbuffer)) { // Indeed - tft.endWrite(); - bmpFile.read(sdbuffer, sizeof(sdbuffer)); - tft.startWrite(); - buffidx = 0; // Set index to beginning - } - - // Convert pixel from BMP to TFT format, push to display - b = sdbuffer[buffidx++]; - g = sdbuffer[buffidx++]; - r = sdbuffer[buffidx++]; - tft.pushColor(tft.color565(r,g,b)); - } // end pixel - tft.endWrite(); - } // end scanline - Serial.print(F("Loaded in ")); - Serial.print(millis() - startTime); - Serial.println(" ms"); - } // end goodBmp - } - } - - bmpFile.close(); - if(!goodBmp) Serial.println(F("BMP format not recognized.")); -} - -// These read 16- and 32-bit types from the SD card file. -// BMP data is stored little-endian, Arduino is little-endian too. -// May need to reverse subscript order if porting elsewhere. - -uint16_t read16(File &f) { - uint16_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); // MSB - return result; -} - -uint32_t read32(File &f) { - uint32_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); - ((uint8_t *)&result)[2] = f.read(); - ((uint8_t *)&result)[3] = f.read(); // MSB - return result; -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest/graphicstest.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest/graphicstest.ino deleted file mode 100644 index 3154d4095..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest/graphicstest.ino +++ /dev/null @@ -1,365 +0,0 @@ -/*************************************************** - This is our GFX example for the Adafruit ILI9341 Breakout and Shield - ----> http://www.adafruit.com/products/1651 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - - -#include "SPI.h" -#include "Adafruit_GFX.h" -#include "Adafruit_ILI9341.h" - -// For the Adafruit shield, these are the default. -#define TFT_DC 9 -#define TFT_CS 10 - -// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); -// If using the breakout, change pins as desired -//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); - -void setup() { - Serial.begin(9600); - Serial.println("ILI9341 Test!"); - - tft.begin(); - - // read diagnostics (optional but can help debug problems) - uint8_t x = tft.readcommand8(ILI9341_RDMODE); - Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDMADCTL); - Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDPIXFMT); - Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDIMGFMT); - Serial.print("Image Format: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDSELFDIAG); - Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); - - Serial.println(F("Benchmark Time (microseconds)")); - delay(10); - Serial.print(F("Screen fill ")); - Serial.println(testFillScreen()); - delay(500); - - Serial.print(F("Text ")); - Serial.println(testText()); - delay(3000); - - Serial.print(F("Lines ")); - Serial.println(testLines(ILI9341_CYAN)); - delay(500); - - Serial.print(F("Horiz/Vert Lines ")); - Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); - delay(500); - - Serial.print(F("Rectangles (outline) ")); - Serial.println(testRects(ILI9341_GREEN)); - delay(500); - - Serial.print(F("Rectangles (filled) ")); - Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); - delay(500); - - Serial.print(F("Circles (filled) ")); - Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); - - Serial.print(F("Circles (outline) ")); - Serial.println(testCircles(10, ILI9341_WHITE)); - delay(500); - - Serial.print(F("Triangles (outline) ")); - Serial.println(testTriangles()); - delay(500); - - Serial.print(F("Triangles (filled) ")); - Serial.println(testFilledTriangles()); - delay(500); - - Serial.print(F("Rounded rects (outline) ")); - Serial.println(testRoundRects()); - delay(500); - - Serial.print(F("Rounded rects (filled) ")); - Serial.println(testFilledRoundRects()); - delay(500); - - Serial.println(F("Done!")); - -} - - -void loop(void) { - for(uint8_t rotation=0; rotation<4; rotation++) { - tft.setRotation(rotation); - testText(); - delay(1000); - } -} - -unsigned long testFillScreen() { - unsigned long start = micros(); - tft.fillScreen(ILI9341_BLACK); - yield(); - tft.fillScreen(ILI9341_RED); - yield(); - tft.fillScreen(ILI9341_GREEN); - yield(); - tft.fillScreen(ILI9341_BLUE); - yield(); - tft.fillScreen(ILI9341_BLACK); - yield(); - return micros() - start; -} - -unsigned long testText() { - tft.fillScreen(ILI9341_BLACK); - unsigned long start = micros(); - tft.setCursor(0, 0); - tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); - tft.println(1234.56); - tft.setTextColor(ILI9341_RED); tft.setTextSize(3); - tft.println(0xDEADBEEF, HEX); - tft.println(); - tft.setTextColor(ILI9341_GREEN); - tft.setTextSize(5); - tft.println("Groop"); - tft.setTextSize(2); - tft.println("I implore thee,"); - tft.setTextSize(1); - tft.println("my foonting turlingdromes."); - tft.println("And hooptiously drangle me"); - tft.println("with crinkly bindlewurdles,"); - tft.println("Or I will rend thee"); - tft.println("in the gobberwarts"); - tft.println("with my blurglecruncheon,"); - tft.println("see if I don't!"); - return micros() - start; -} - -unsigned long testLines(uint16_t color) { - unsigned long start, t; - int x1, y1, x2, y2, - w = tft.width(), - h = tft.height(); - - tft.fillScreen(ILI9341_BLACK); - yield(); - - x1 = y1 = 0; - y2 = h - 1; - start = micros(); - for(x2=0; x20; i-=6) { - i2 = i / 2; - start = micros(); - tft.fillRect(cx-i2, cy-i2, i, i, color1); - t += micros() - start; - // Outlines are not included in timing results - tft.drawRect(cx-i2, cy-i2, i, i, color2); - yield(); - } - - return t; -} - -unsigned long testFilledCircles(uint8_t radius, uint16_t color) { - unsigned long start; - int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; - - tft.fillScreen(ILI9341_BLACK); - start = micros(); - for(x=radius; x10; i-=5) { - start = micros(); - tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, - tft.color565(0, i*10, i*10)); - t += micros() - start; - tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, - tft.color565(i*10, i*10, 0)); - yield(); - } - - return t; -} - -unsigned long testRoundRects() { - unsigned long start; - int w, i, i2, - cx = tft.width() / 2 - 1, - cy = tft.height() / 2 - 1; - - tft.fillScreen(ILI9341_BLACK); - w = min(tft.width(), tft.height()); - start = micros(); - for(i=0; i20; i-=6) { - i2 = i / 2; - tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); - yield(); - } - - return micros() - start; -} \ No newline at end of file diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/.mega2560.test.skip b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/.mega2560.test.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/graphicstest_featherwing.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/graphicstest_featherwing.ino deleted file mode 100644 index 2a108d29c..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/graphicstest_featherwing/graphicstest_featherwing.ino +++ /dev/null @@ -1,404 +0,0 @@ -/*************************************************** - This is our GFX example for the Adafruit ILI9341 TFT FeatherWing - ----> http://www.adafruit.com/products/3315 - - Check out the links above for our tutorials and wiring diagrams - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include -#include -#include - -#ifdef ESP8266 - #define STMPE_CS 16 - #define TFT_CS 0 - #define TFT_DC 15 - #define SD_CS 2 -#endif -#ifdef ESP32 - #define STMPE_CS 32 - #define TFT_CS 15 - #define TFT_DC 33 - #define SD_CS 14 -#endif -#ifdef TEENSYDUINO - #define TFT_DC 10 - #define TFT_CS 4 - #define STMPE_CS 3 - #define SD_CS 8 -#endif -#ifdef ARDUINO_STM32_FEATHER - #define TFT_DC PB4 - #define TFT_CS PA15 - #define STMPE_CS PC7 - #define SD_CS PC5 -#endif -#ifdef ARDUINO_NRF52_FEATHER /* BSP 0.6.5 and higher! */ - #define TFT_DC 11 - #define TFT_CS 31 - #define STMPE_CS 30 - #define SD_CS 27 -#endif -#if defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) - #define TFT_DC P5_4 - #define TFT_CS P5_3 - #define STMPE_CS P3_3 - #define SD_CS P3_2 -#endif - -// Anything else! -#if defined (__AVR_ATmega32U4__) || defined(ARDUINO_SAMD_FEATHER_M0) || defined (__AVR_ATmega328P__) || defined(ARDUINO_SAMD_ZERO) || defined(__SAMD51__) || defined(__SAM3X8E__) - #define STMPE_CS 6 - #define TFT_CS 9 - #define TFT_DC 10 - #define SD_CS 5 -#endif - - -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); - -void setup() { - Serial.begin(115200); - - delay(10); - Serial.println("FeatherWing TFT Test!"); - - tft.begin(); - - // read diagnostics (optional but can help debug problems) - uint8_t x = tft.readcommand8(ILI9341_RDMODE); - Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDMADCTL); - Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDPIXFMT); - Serial.print("Pixel Format: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDIMGFMT); - Serial.print("Image Format: 0x"); Serial.println(x, HEX); - x = tft.readcommand8(ILI9341_RDSELFDIAG); - Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); - - Serial.println(F("Benchmark Time (microseconds)")); - delay(10); - Serial.print(F("Screen fill ")); - Serial.println(testFillScreen()); - delay(500); - - Serial.print(F("Text ")); - Serial.println(testText()); - delay(3000); - - Serial.print(F("Lines ")); - Serial.println(testLines(ILI9341_CYAN)); - delay(500); - - Serial.print(F("Horiz/Vert Lines ")); - Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE)); - delay(500); - - Serial.print(F("Rectangles (outline) ")); - Serial.println(testRects(ILI9341_GREEN)); - delay(500); - - Serial.print(F("Rectangles (filled) ")); - Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); - delay(500); - - Serial.print(F("Circles (filled) ")); - Serial.println(testFilledCircles(10, ILI9341_MAGENTA)); - - Serial.print(F("Circles (outline) ")); - Serial.println(testCircles(10, ILI9341_WHITE)); - delay(500); - - Serial.print(F("Triangles (outline) ")); - Serial.println(testTriangles()); - delay(500); - - Serial.print(F("Triangles (filled) ")); - Serial.println(testFilledTriangles()); - delay(500); - - Serial.print(F("Rounded rects (outline) ")); - Serial.println(testRoundRects()); - delay(500); - - Serial.print(F("Rounded rects (filled) ")); - Serial.println(testFilledRoundRects()); - delay(500); - - Serial.println(F("Done!")); - -} - - -void loop(void) { - for(uint8_t rotation=0; rotation<4; rotation++) { - tft.setRotation(rotation); - testText(); - delay(1000); - } -} - -unsigned long testFillScreen() { - unsigned long start = micros(); - tft.fillScreen(ILI9341_BLACK); - yield(); - tft.fillScreen(ILI9341_RED); - yield(); - tft.fillScreen(ILI9341_GREEN); - yield(); - tft.fillScreen(ILI9341_BLUE); - yield(); - tft.fillScreen(ILI9341_BLACK); - yield(); - return micros() - start; -} - -unsigned long testText() { - tft.fillScreen(ILI9341_BLACK); - unsigned long start = micros(); - tft.setCursor(0, 0); - tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); - tft.println("Hello World!"); - tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2); - tft.println(1234.56); - tft.setTextColor(ILI9341_RED); tft.setTextSize(3); - tft.println(0xDEADBEEF, HEX); - tft.println(); - tft.setTextColor(ILI9341_GREEN); - tft.setTextSize(5); - tft.println("Groop"); - tft.setTextSize(2); - tft.println("I implore thee,"); - tft.setTextSize(1); - tft.println("my foonting turlingdromes."); - tft.println("And hooptiously drangle me"); - tft.println("with crinkly bindlewurdles,"); - tft.println("Or I will rend thee"); - tft.println("in the gobberwarts"); - tft.println("with my blurglecruncheon,"); - tft.println("see if I don't!"); - return micros() - start; -} - -unsigned long testLines(uint16_t color) { - unsigned long start, t; - int x1, y1, x2, y2, - w = tft.width(), - h = tft.height(); - - tft.fillScreen(ILI9341_BLACK); - yield(); - - x1 = y1 = 0; - y2 = h - 1; - start = micros(); - for(x2=0; x20; i-=6) { - i2 = i / 2; - start = micros(); - tft.fillRect(cx-i2, cy-i2, i, i, color1); - t += micros() - start; - // Outlines are not included in timing results - tft.drawRect(cx-i2, cy-i2, i, i, color2); - yield(); - } - - return t; -} - -unsigned long testFilledCircles(uint8_t radius, uint16_t color) { - unsigned long start; - int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2; - - tft.fillScreen(ILI9341_BLACK); - start = micros(); - for(x=radius; x10; i-=5) { - start = micros(); - tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, - tft.color565(0, i*10, i*10)); - t += micros() - start; - tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, - tft.color565(i*10, i*10, 0)); - yield(); - } - - return t; -} - -unsigned long testRoundRects() { - unsigned long start; - int w, i, i2, - cx = tft.width() / 2 - 1, - cy = tft.height() / 2 - 1; - - tft.fillScreen(ILI9341_BLACK); - w = min(tft.width(), tft.height()); - start = micros(); - for(i=0; i20; i-=6) { - i2 = i / 2; - tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0)); - yield(); - } - - return micros() - start; -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton/onoffbutton.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton/onoffbutton.ino deleted file mode 100644 index 3365d3385..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton/onoffbutton.ino +++ /dev/null @@ -1,125 +0,0 @@ -//This example implements a simple sliding On/Off button. The example -// demonstrates drawing and touch operations. -// -//Thanks to Adafruit forums member Asteroid for the original sketch! -// -#include -#include -#include -#include -#include - -// This is calibration data for the raw touch data to the screen coordinates -#define TS_MINX 150 -#define TS_MINY 130 -#define TS_MAXX 3800 -#define TS_MAXY 4000 - -#define STMPE_CS 8 -Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); -#define TFT_CS 10 -#define TFT_DC 9 -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); - -boolean RecordOn = false; - -#define FRAME_X 210 -#define FRAME_Y 180 -#define FRAME_W 100 -#define FRAME_H 50 - -#define REDBUTTON_X FRAME_X -#define REDBUTTON_Y FRAME_Y -#define REDBUTTON_W (FRAME_W/2) -#define REDBUTTON_H FRAME_H - -#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W) -#define GREENBUTTON_Y FRAME_Y -#define GREENBUTTON_W (FRAME_W/2) -#define GREENBUTTON_H FRAME_H - -void drawFrame() -{ - tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, ILI9341_BLACK); -} - -void redBtn() -{ - tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_RED); - tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_BLUE); - drawFrame(); - tft.setCursor(GREENBUTTON_X + 6 , GREENBUTTON_Y + (GREENBUTTON_H/2)); - tft.setTextColor(ILI9341_WHITE); - tft.setTextSize(2); - tft.println("ON"); - RecordOn = false; -} - -void greenBtn() -{ - tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_GREEN); - tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_BLUE); - drawFrame(); - tft.setCursor(REDBUTTON_X + 6 , REDBUTTON_Y + (REDBUTTON_H/2)); - tft.setTextColor(ILI9341_WHITE); - tft.setTextSize(2); - tft.println("OFF"); - RecordOn = true; -} - -void setup(void) -{ - Serial.begin(9600); - tft.begin(); - if (!ts.begin()) { - Serial.println("Unable to start touchscreen."); - } - else { - Serial.println("Touchscreen started."); - } - - tft.fillScreen(ILI9341_BLUE); - // origin = left,top landscape (USB left upper) - tft.setRotation(1); - redBtn(); -} - -void loop() -{ - // See if there's any touch data for us - if (!ts.bufferEmpty()) - { - // Retrieve a point - TS_Point p = ts.getPoint(); - // Scale using the calibration #'s - // and rotate coordinate system - p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height()); - p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width()); - int y = tft.height() - p.x; - int x = p.y; - - if (RecordOn) - { - if((x > REDBUTTON_X) && (x < (REDBUTTON_X + REDBUTTON_W))) { - if ((y > REDBUTTON_Y) && (y <= (REDBUTTON_Y + REDBUTTON_H))) { - Serial.println("Red btn hit"); - redBtn(); - } - } - } - else //Record is off (RecordOn == false) - { - if((x > GREENBUTTON_X) && (x < (GREENBUTTON_X + GREENBUTTON_W))) { - if ((y > GREENBUTTON_Y) && (y <= (GREENBUTTON_Y + GREENBUTTON_H))) { - Serial.println("Green btn hit"); - greenBtn(); - } - } - } - - Serial.println(RecordOn); - } -} - - - diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/.esp8266.test.skip b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/.esp8266.test.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/onoffbutton_breakout.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/onoffbutton_breakout.ino deleted file mode 100644 index aa8cb9992..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/onoffbutton_breakout/onoffbutton_breakout.ino +++ /dev/null @@ -1,133 +0,0 @@ -//This example implements a simple sliding On/Off button. The example -// demonstrates drawing and touch operations. -// -//Thanks to Adafruit forums member Asteroid for the original sketch! -// -#include -#include -#include -#include -#include - -//Touchscreen X+ X- Y+ Y- pins -#define YP A3 // must be an analog pin, use "An" notation! -#define XM A2 // must be an analog pin, use "An" notation! -#define YM 5 // can be a digital pin -#define XP 4 // can be a digital pin - -// This is calibration data for the raw touch data to the screen coordinates -#define TS_MINX 150 -#define TS_MINY 120 -#define TS_MAXX 920 -#define TS_MAXY 940 - -#define MINPRESSURE 10 -#define MAXPRESSURE 1000 - -// For better pressure precision, we need to know the resistance -// between X+ and X- Use any multimeter to read it -// For the one we're using, its 300 ohms across the X plate -TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); - - -#define TFT_CS 10 -#define TFT_DC 9 -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); - -boolean RecordOn = false; - -#define FRAME_X 210 -#define FRAME_Y 180 -#define FRAME_W 100 -#define FRAME_H 50 - -#define REDBUTTON_X FRAME_X -#define REDBUTTON_Y FRAME_Y -#define REDBUTTON_W (FRAME_W/2) -#define REDBUTTON_H FRAME_H - -#define GREENBUTTON_X (REDBUTTON_X + REDBUTTON_W) -#define GREENBUTTON_Y FRAME_Y -#define GREENBUTTON_W (FRAME_W/2) -#define GREENBUTTON_H FRAME_H - -void drawFrame() -{ - tft.drawRect(FRAME_X, FRAME_Y, FRAME_W, FRAME_H, ILI9341_BLACK); -} - -void redBtn() -{ - tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_RED); - tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_BLUE); - drawFrame(); - tft.setCursor(GREENBUTTON_X + 6 , GREENBUTTON_Y + (GREENBUTTON_H/2)); - tft.setTextColor(ILI9341_WHITE); - tft.setTextSize(2); - tft.println("ON"); - RecordOn = false; -} - -void greenBtn() -{ - tft.fillRect(GREENBUTTON_X, GREENBUTTON_Y, GREENBUTTON_W, GREENBUTTON_H, ILI9341_GREEN); - tft.fillRect(REDBUTTON_X, REDBUTTON_Y, REDBUTTON_W, REDBUTTON_H, ILI9341_BLUE); - drawFrame(); - tft.setCursor(REDBUTTON_X + 6 , REDBUTTON_Y + (REDBUTTON_H/2)); - tft.setTextColor(ILI9341_WHITE); - tft.setTextSize(2); - tft.println("OFF"); - RecordOn = true; -} - -void setup(void) -{ - Serial.begin(9600); - tft.begin(); - - tft.fillScreen(ILI9341_BLUE); - // origin = left,top landscape (USB left upper) - tft.setRotation(1); - redBtn(); -} - -void loop() -{ - // Retrieve a point - TSPoint p = ts.getPoint(); - - // See if there's any touch data for us - if (p.z > MINPRESSURE && p.z < MAXPRESSURE) - { - // Scale using the calibration #'s - // and rotate coordinate system - p.x = map(p.x, TS_MINY, TS_MAXY, 0, tft.height()); - p.y = map(p.y, TS_MINX, TS_MAXX, 0, tft.width()); - int y = tft.height() - p.x; - int x = p.y; - - if (RecordOn) - { - if((x > REDBUTTON_X) && (x < (REDBUTTON_X + REDBUTTON_W))) { - if ((y > REDBUTTON_Y) && (y <= (REDBUTTON_Y + REDBUTTON_H))) { - Serial.println("Red btn hit"); - redBtn(); - } - } - } - else //Record is off (RecordOn == false) - { - if((x > GREENBUTTON_X) && (x < (GREENBUTTON_X + GREENBUTTON_W))) { - if ((y > GREENBUTTON_Y) && (y <= (GREENBUTTON_Y + GREENBUTTON_H))) { - Serial.println("Green btn hit"); - greenBtn(); - } - } - } - - Serial.println(RecordOn); - } -} - - - diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/dragon.h b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/dragon.h deleted file mode 100644 index ab61bb77c..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/dragon.h +++ /dev/null @@ -1,861 +0,0 @@ -#define DRAGON_WIDTH 110 -#define DRAGON_HEIGHT 70 - -const PROGMEM uint16_t dragonBitmap[DRAGON_WIDTH * DRAGON_HEIGHT] = { - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X8C10, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 0XAC92, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XB431, 0XA1C9, 0XAA4B, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 0X9A2A, 0X9044, - 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XDEFB, 0XB3B0, 0XA148, 0XB865, 0XC066, 0XC066, 0XAA4B, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAB2E, 0X9864, - 0XA865, 0XAAAC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAC92, - 0X728B, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 0XAB2E, 0XAA4B, 0XAA4B, 0XAA4B, 0XA3AF, - 0XB431, 0XB431, 0XB431, 0XA411, 0XA8E6, 0XD086, 0XB865, 0X7043, 0XA865, - 0XD086, 0XAA4B, 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XA8E6, - 0X9864, 0XC066, 0XD086, 0XB493, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 0X830D, - 0X80C5, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB431, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XB865, 0X9864, - 0XC066, 0XD086, 0XB8E7, 0XB493, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XA1C9, - 0XB865, 0X9864, 0XD086, 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAD14, 0X71A8, - 0X9864, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XDEFB, 0XBDF7, 0XBD14, 0XA411, 0XB431, 0XB148, 0XD086, 0XC066, - 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XD086, 0XA865, - 0XB865, 0XD086, 0XD086, 0XB1CA, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB3B0, - 0XB865, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XBD14, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 0X932D, 0X78C5, - 0XA865, 0XD086, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XDEFB, 0XAB2E, 0XA0C6, 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, - 0XB865, 0X78C5, 0X4208, 0X2104, 0X8947, 0X9864, 0X9864, 0X9864, 0XD086, - 0XD086, 0XA865, 0X9864, 0XD086, 0XB865, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, - 0XB148, 0XC066, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB493, 0X89A8, 0X9044, - 0XB865, 0XD086, 0XD086, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0X7B8E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XAD14, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XB431, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, - 0X9864, 0XD086, 0XD086, 0XD086, 0XAA4B, 0X9A2A, 0XC066, 0XD086, 0XD086, - 0XD086, 0XD086, 0XC066, 0X9044, 0X9864, 0X9864, 0X9044, 0XCE18, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, - 0XB3B0, 0XC066, 0XB865, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XAAAC, 0XBD96, 0XAD14, 0XAAAC, 0X8044, 0X9864, - 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XB431, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XB3B0, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD96, 0XB8E7, 0XB431, 0XEF7D, 0XFFFF, - 0XFFFF, 0XFFFF, 0XA32E, 0X9864, 0X9864, 0XAA4B, 0XAA4B, 0X9147, 0XB865, - 0X9044, 0XD086, 0XA865, 0XD086, 0XC066, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, - 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XDE9A, 0XB148, 0XD086, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0XA865, 0X9864, - 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA148, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XC066, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, - 0XA865, 0XAB2E, 0XBD96, 0XEF7D, 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XDEFB, 0XB1CA, 0XD086, 0XD086, 0X9864, 0X822A, 0XBDF7, 0XB493, - 0XB148, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, - 0XD086, 0XD086, 0XD086, 0XAA4B, 0XBD14, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XB431, 0XB865, 0XD086, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0XC066, 0XA865, 0X9864, - 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB3B0, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCD96, 0XC066, 0XD086, 0XAA4B, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XDE9A, 0XB865, 0XD086, 0XD086, 0XD086, 0XA865, 0X9147, 0X9C92, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE18, 0X80C5, 0X5822, 0X5A08, 0XDEFB, - 0XFFFF, 0XFFFF, 0XCE79, 0XA0C6, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0X9044, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XAB2E, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XEF7D, 0XAA4B, 0XD086, 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0XA865, 0XD086, 0X9864, 0X9864, - 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 0XD086, - 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XC066, 0XD086, 0XB865, 0X8044, 0X82AB, - 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XAC92, 0XA3AF, 0X92AC, - 0XAB2E, 0XAA4B, 0XA1C9, 0X9864, 0XB865, 0XA865, 0XC066, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XB1CA, 0XBD14, - 0X9CF3, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XCE18, 0XA8E6, 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, - 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0XC066, 0XD086, 0X9864, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XC066, 0XC515, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, - 0XD086, 0XD086, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB3B0, 0XD086, 0XA865, - 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 0X8044, 0X4822, 0X9044, 0X9044, - 0XD086, 0XD086, 0XD086, 0XD086, 0X8044, 0X9864, 0XD086, 0XD086, 0XD086, - 0XAA4B, 0XCE18, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XC066, 0XD086, 0XC066, 0XA865, 0XD086, - 0XD086, 0XD086, 0XA865, 0X9864, 0XA865, 0XD086, 0XC066, 0X9864, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9044, 0X3986, 0XCE79, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, - 0XD086, 0XD086, 0XC066, 0XD086, 0XAA4B, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XB431, 0XC066, 0X90C6, 0XAA4B, 0XAA4B, 0XAA4B, 0XAA4B, 0X99C9, 0X9864, - 0X9864, 0X9864, 0X6843, 0X6843, 0X5822, 0X4822, 0X7043, 0X9044, 0XC066, - 0X9864, 0X7043, 0XC066, 0XB865, 0XD086, 0X7043, 0X8044, 0XC066, 0XD086, - 0XD086, 0XD086, 0XD086, 0XC066, 0XB431, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAB2E, 0XD086, 0XD086, 0XC066, 0XA865, - 0XD086, 0XD086, 0X9864, 0X9044, 0XC066, 0XD086, 0XC066, 0X9864, 0XA865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XB865, 0X9864, 0X9864, 0X9864, 0X9044, 0X6843, 0X6843, 0X8044, 0X7B0C, - 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, - 0XB8E7, 0XD086, 0X9864, 0XC066, 0X9864, 0XD086, 0XAA4B, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XA8E6, 0XCE18, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XA148, 0XD086, 0XD086, 0XD086, 0XD086, - 0XB148, 0XBD14, 0X9A2A, 0XD086, 0X9864, 0X9864, 0X6843, 0XD086, 0XC066, - 0XC066, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0XA865, 0XEF7D, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB1CA, 0XD086, 0XD086, 0XD086, - 0X9864, 0XC066, 0X9864, 0X9864, 0XD086, 0XD086, 0XC066, 0X9864, 0XA865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0X9864, - 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 0XA1C9, - 0XDE9A, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XDE9A, 0XB8E7, 0XD086, 0XD086, 0X9864, 0XD086, 0X9864, 0XD086, 0XAA4B, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XCE18, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 0XC066, - 0XD086, 0XAAAC, 0XEF7D, 0XFFFF, 0X932D, 0XB865, 0XB865, 0XC066, 0X7043, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB148, 0XEF7D, 0XBD14, 0XA148, - 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 0XD086, - 0XD086, 0X8044, 0X9864, 0XA865, 0XD086, 0XD086, 0XC066, 0X9864, 0XA865, - 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, - 0XB865, 0X9864, 0X9864, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 0XD086, 0XC066, 0XA865, 0XD086, 0X9864, - 0XD086, 0XA0C6, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X8C10, 0XB431, 0XEF7D, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, - 0XD086, 0XA1C9, 0X80C5, 0XEF7D, 0XFFFF, 0XB431, 0XD086, 0XB865, 0X9864, - 0X8044, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XAA4B, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 0XD086, - 0XD086, 0XD086, 0XA865, 0XB865, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, - 0X9864, 0X9044, 0X9864, 0X9864, 0XC066, 0XD086, 0XD086, 0XB865, 0X9864, - 0X9864, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, - 0XD086, 0X9864, 0XD086, 0X9864, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XB148, - 0XA1C9, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XBDF7, 0XD086, 0XBD14, 0XEF7D, 0XFFFF, 0XFFFF, 0XA148, 0XD086, - 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XC066, 0XB431, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XAA4B, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XC066, 0X7043, - 0X9864, 0XA865, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0X9864, - 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XAAAC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XA32E, 0XAA4B, 0XAA4B, 0XAA4B, 0XAB2E, - 0X9044, 0XD086, 0XA865, 0X9864, 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XBDF7, 0XDEFB, 0XFFFF, 0XFFFF, - 0XFFFF, 0XB431, 0XB865, 0XAC92, 0XFFFF, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0X8947, 0XEF7D, 0XFFFF, 0XFFFF, 0XEF7D, - 0X9044, 0XD086, 0XD086, 0XB865, 0XB865, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XA0C6, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XA8E6, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XCE18, 0XC066, 0XD086, 0XA1C9, 0XB431, 0XD086, 0XD086, 0XB493, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAB2E, 0XB865, - 0XB3B0, 0XFFFF, 0XFFFF, 0X9AAC, 0XB865, 0XA148, 0XFFFF, 0X9AAC, 0XCD96, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XAA4B, 0XB865, 0X9864, 0X9864, 0X8044, 0X9044, 0X8044, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XA1C9, 0X90C6, 0XD086, 0XB3B0, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, - 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XB3B0, 0XAA4B, 0X9864, 0X9864, 0XA1C9, - 0XAB2E, 0XBD96, 0XFFFF, 0XAA4B, 0XD086, 0XD086, 0XB493, 0XFFFF, 0XAB2E, - 0XC066, 0XAAAC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0X8947, 0X9864, 0X9A2A, 0XFFFF, 0X9864, 0XD086, 0XA148, 0XEF7D, - 0XA8E6, 0XB431, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XCE79, 0XC066, 0XD086, 0XD086, 0XD086, 0X9044, 0X7043, - 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XFFFF, 0XFFFF, 0XBD14, - 0X92AC, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XB865, - 0XB865, 0XD086, 0XD086, 0X8044, 0X6843, 0X9864, 0X9864, 0X9864, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XBD96, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB431, 0XB865, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9147, 0XA865, 0XD086, 0XC066, 0XCE79, - 0XFFFF, 0XFFFF, 0XCD96, 0X7926, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XC066, 0X9CF3, 0XC066, 0XD086, - 0X8A2A, 0X8947, 0XD086, 0XBD14, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAD14, 0XC066, 0XD086, 0XD086, 0XD086, - 0X9864, 0X9864, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 0XDEFB, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, - 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, - 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, - 0XA148, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAA4B, 0XD086, 0XD086, 0X71A8, - 0XD086, 0XD086, 0X9044, 0XD086, 0X9864, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB865, 0XA865, 0XA865, - 0XD086, 0XD086, 0X7043, 0X9864, 0X9044, 0XA865, 0XD086, 0XD086, 0XD086, - 0XD086, 0XA8E6, 0XB493, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0X9864, 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, - 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XA0C6, 0XD086, - 0XD086, 0XD086, 0XA865, 0X80C5, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XC066, 0X8B8E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB493, 0XD086, - 0XD086, 0X9864, 0XA865, 0XA865, 0XC066, 0XD086, 0XA8E6, 0XEF7D, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAAAC, 0XD086, - 0XD086, 0XC066, 0X9864, 0X8044, 0XA865, 0X9044, 0XC066, 0X8044, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9A2A, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XEF7D, 0XA865, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, - 0X9864, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, - 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0XD086, 0XD086, - 0X9864, 0X9864, 0X9864, 0XC066, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0X9864, 0XD086, 0XD086, 0X90C6, 0XCE79, 0XFFFF, 0XFFFF, 0X9C92, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XAB2E, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XEF7D, 0XA0C6, 0XD086, 0XD086, 0XB865, 0X9864, 0XD086, 0XB1CA, 0XDE9A, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XAA4B, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X7043, 0XA865, 0X9044, - 0X9044, 0XD086, 0XD086, 0XD086, 0XD086, 0XB1CA, 0XB431, 0X82AB, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBD14, 0XA865, 0XC066, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0XC066, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X7043, 0X8044, 0XDEFB, 0XFFFF, - 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0XA32E, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0X728B, 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0XAA4B, 0XD086, 0XD086, 0XB865, 0X90C6, - 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XC515, 0X9044, 0XC066, 0XD086, 0XD086, 0XD086, 0X9864, 0X8044, - 0XC066, 0X8044, 0X9044, 0XC066, 0XD086, 0XD086, 0XD086, 0XBDF7, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XEF7D, 0X6926, 0XC066, 0XD086, - 0XD086, 0XD086, 0X9044, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, - 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA8E6, 0XAAAC, 0XB431, 0X8410, - 0X8C71, 0XFFFF, 0XFFFF, 0XFFFF, 0XAAAC, 0XD086, 0XD086, 0XA865, 0XA32E, - 0XB431, 0XB431, 0X8947, 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, 0XC066, - 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XB431, 0XD086, 0XD086, - 0XD086, 0XB8E7, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XA0C6, 0XD086, 0XA865, 0X9864, 0X9864, 0X9864, - 0X9044, 0X9044, 0XA865, 0X9864, 0XA865, 0X9864, 0XD086, 0XD086, 0XD086, - 0XB3B0, 0XFFFF, 0XEF7D, 0XBDF7, 0XB431, 0XAAAC, 0XA148, 0XA865, 0XD086, - 0XD086, 0XD086, 0XC066, 0XD086, 0XB865, 0X9044, 0X9864, 0X9864, 0XC066, - 0XD086, 0XD086, 0XD086, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB8E7, 0XB493, 0XEF7D, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDE9A, 0XB8E7, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XAAAC, - 0XD086, 0XD086, 0XD086, 0XD086, 0XB3B0, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XDEFB, 0XB865, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X8044, 0X9864, 0XB865, 0X8044, 0XC066, 0X6843, 0XD086, - 0XD086, 0X9864, 0XA0C6, 0X99C9, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X8044, 0XB865, 0XD086, 0XC066, 0XA865, - 0XD086, 0XA865, 0X9864, 0X9864, 0XD086, 0XD086, 0XB865, 0X9864, 0XC066, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB1CA, 0XDEFB, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XDEFB, 0XAB2E, 0X9864, 0XC066, 0XD086, 0XC066, 0X9864, 0X89A8, 0XA865, - 0XD086, 0XD086, 0XD086, 0XA865, 0XEF7D, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XAA4B, 0XD086, 0XD086, 0XD086, 0XD086, 0XA148, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XBDF7, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X7043, 0XC066, 0X6843, 0XD086, 0X7043, - 0XC066, 0X9044, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XD086, 0X9864, 0XB865, 0XB865, - 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XC066, - 0XD086, 0XA865, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9C92, - 0XBDF7, 0XBDF7, 0XBDF7, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, 0XBDF7, 0XCE79, 0XEF7D, - 0XAAAC, 0XD086, 0XD086, 0XD086, 0XD086, 0XA1C9, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XA148, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, - 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCD96, - 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X6843, 0X9044, 0X9864, - 0XA865, 0XA865, 0X9044, 0XB865, 0XD086, 0XD086, 0XB865, 0X9864, 0X8044, - 0XC066, 0XD086, 0XD086, 0XB865, 0XD086, 0XA865, 0X9044, 0XD086, 0XB865, - 0XB865, 0XB865, 0XA865, 0XD086, 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, - 0XD086, 0XA865, 0X9864, 0XB865, 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, - 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XA1C9, - 0XAB2E, 0XBD14, 0XCE79, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XCE79, - 0XB493, 0XB148, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XBD14, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XBDF7, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XA148, 0XD086, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, 0X9864, - 0X9864, 0X9864, 0X7043, 0X9864, 0XD086, 0XD086, 0XA865, 0X9864, 0XB865, - 0XD086, 0X9864, 0XD086, 0XC066, 0X7043, 0XD086, 0XD086, 0X9864, 0XC066, - 0XA865, 0XD086, 0X9864, 0XD086, 0XC066, 0XA865, 0XD086, 0XA865, 0XC066, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9044, 0X9864, - 0XC066, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X9864, 0X9864, 0X9864, 0X9864, - 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA1C9, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XC515, 0XC066, 0XA865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XAD14, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0X9044, 0X8044, 0X9864, 0XA865, 0XD086, 0XA865, 0X9864, 0XC066, - 0XD086, 0XD086, 0XA865, 0XC066, 0XC066, 0XA865, 0X9864, 0XD086, 0XA865, - 0XC066, 0XD086, 0X9864, 0XD086, 0X9864, 0XD086, 0XD086, 0XB865, 0XB865, - 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0X9864, 0X8044, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, - 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XB8E7, 0XDEFB, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, - 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0XFFFF, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0XB865, - 0XD086, 0X31C3, 0XC066, 0XD086, 0XD086, 0X9864, 0XB865, 0X2305, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0X6843, 0X9864, 0XA865, 0XB865, 0X9864, 0XC066, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XA865, 0XD086, 0X9864, - 0XD086, 0X9864, 0XD086, 0XD086, 0XA865, 0XC066, 0X9864, 0XD086, 0XD086, - 0XD086, 0XC066, 0XA865, 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X8044, 0X8044, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0X8145, 0X0C66, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, - 0X8145, 0XD086, 0X9105, 0X0506, 0X80E5, 0XD086, 0XD086, 0X9864, 0XD086, - 0X9864, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X80E5, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X8044, 0XB865, 0X9864, 0XB865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0X9864, 0XD086, - 0XD086, 0X9864, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0X9864, 0X7043, 0X9864, 0XA865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XC066, 0X59E5, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X2305, 0XB865, 0XD086, 0X2305, 0X0547, 0X1B65, 0XD086, 0XD086, - 0XB865, 0XB865, 0X9864, 0X6985, 0X1B65, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0C05, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0X8044, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, - 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, - 0X9864, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 0XA865, - 0XA865, 0XD086, 0XD086, 0XA865, 0X9864, 0XC066, 0XD086, 0XD086, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X80E5, 0X0C05, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X1B65, 0XC066, 0X8044, 0X04A6, 0X0547, 0X0547, - 0X80E5, 0XD086, 0XD086, 0X9864, 0XA865, 0XD086, 0XD086, 0X1AC4, 0X0405, - 0X0547, 0X0547, 0X4285, 0XC066, 0X9864, 0X9864, 0X9864, 0X9864, 0X8044, - 0XA865, 0XD086, 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, - 0X7043, 0XC066, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XA865, 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XB865, 0X8044, 0XD086, 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XA865, 0X59E5, 0X0BA5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0506, 0X3264, 0X98A5, 0X7145, 0X04A6, 0X0547, - 0X0547, 0X0547, 0X1BC5, 0XC066, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, - 0X9864, 0XD086, 0X7145, 0X4984, 0X80A4, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0X9864, 0X7043, 0X9864, 0X9864, 0XB865, 0X9864, 0XD086, 0XD086, - 0XD086, 0X8044, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0XA865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X8044, 0XC066, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0XA865, 0X9864, - 0X6985, 0X4285, 0X1B65, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0X0445, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4A25, 0XD086, 0XD086, 0XD086, - 0X9864, 0X9864, 0XC066, 0XD086, 0XD086, 0X9864, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, - 0XD086, 0XB865, 0X9864, 0X4822, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0X6843, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0X9864, - 0XD086, 0XC066, 0X9864, 0X8044, 0X9864, 0X9864, 0X9864, 0X8044, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XA8C5, 0X32C5, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4A25, - 0XD086, 0XD086, 0XD086, 0XA865, 0X9864, 0XB865, 0XD086, 0X9864, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0X9864, 0XA865, 0XB865, 0XD086, 0X8044, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X6843, 0XD086, 0X9044, 0X9864, 0X9044, 0X9864, 0XB865, - 0X9864, 0X9864, 0XB865, 0XA865, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, - 0XA865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XC066, 0X9864, 0XA865, 0X9864, 0X9044, 0XA865, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X98A5, 0X32C5, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X32C5, 0XC066, 0XD086, 0XD086, 0XD086, 0XB865, 0X9864, - 0X8044, 0X9864, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, - 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XA865, 0X9864, 0X9864, 0XA865, - 0X9864, 0X9044, 0X9864, 0XD086, 0X6843, 0X9864, 0XC066, 0XA865, 0XD086, - 0XD086, 0XB865, 0X8044, 0X7043, 0XB865, 0XD086, 0X9864, 0X9864, 0X9864, - 0X9864, 0X9864, 0XA865, 0XB865, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, - 0XD086, 0XD086, 0X9044, 0XD086, 0XD086, 0XC066, 0XA865, 0XC066, 0X9864, - 0X9864, 0X9044, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X80E5, - 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4285, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, - 0XB865, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, 0X9044, 0X7043, 0XD086, - 0X8044, 0X9044, 0XD086, 0XD086, 0X9044, 0X9864, 0X6843, 0XD086, 0XD086, - 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XB865, 0XA865, - 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X6985, - 0X04A6, 0X4A25, 0X80A4, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, - 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X9864, 0X8044, 0X9864, 0XC066, - 0XD086, 0XD086, 0XC066, 0X6985, 0X0C66, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X4A25, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, - 0XD086, 0XD086, 0XA865, 0X9044, 0XB865, 0XA865, 0X9864, 0X9044, 0X9864, - 0XB865, 0X9044, 0XC066, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 0XA865, - 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0X9864, - 0XB865, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0X4A25, 0X0506, 0X0547, 0X0547, 0X1BC5, 0XA8C5, 0XD086, 0XD086, 0XB865, - 0XB865, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, - 0XD086, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XB865, 0X32C5, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0506, 0X8145, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, - 0XA865, 0XD086, 0XD086, 0XB865, 0XB865, 0XD086, 0XB865, 0X8044, 0XB865, - 0XA865, 0X8044, 0XA865, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X9864, - 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X8044, 0X7043, - 0X7043, 0XC066, 0XD086, 0XC066, 0XA865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0X2305, - 0X32C5, 0X6944, 0XD086, 0XD086, 0XD086, 0X9864, 0XC066, 0XD086, 0XD086, - 0X9864, 0XD086, 0XD086, 0X9864, 0XB865, 0XB865, 0XD086, 0XC066, 0XB865, - 0XD086, 0X7145, 0X0C66, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0XB865, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XA865, 0XC066, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, - 0X9044, 0XB865, 0X9044, 0XD086, 0XD086, 0XD086, 0XC066, 0XA865, 0XD086, - 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XB865, 0XA865, 0XD086, 0XB865, - 0XB865, 0XD086, 0XD086, 0XB865, 0X9864, 0X7043, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X2305, 0X0BA5, 0X0BA5, 0X7145, - 0X9864, 0X90A4, 0X58E3, 0XD086, 0XB865, 0XB865, 0XD086, 0X9864, 0XD086, - 0XD086, 0X1A63, 0XA8C5, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X32C5, 0XD086, - 0XD086, 0XD086, 0XD086, 0XA865, 0X90A4, 0X4183, 0X6985, 0X5924, 0X9044, - 0XD086, 0XB865, 0XB865, 0X9044, 0X9864, 0XD086, 0XD086, 0XD086, 0X9864, - 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0XD086, 0XA8C5, 0X1B65, 0X0405, - 0X0405, 0X9044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X9864, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X4A25, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X1AC4, 0XD086, 0XD086, - 0X9864, 0XD086, 0XD086, 0X4285, 0X04A6, 0X59E5, 0X9864, 0X4224, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0506, 0X98A5, 0XD086, 0XD086, 0X22C4, 0X0506, 0X0547, 0X0547, 0X0547, - 0X2305, 0XD086, 0XA865, 0X8044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0X9864, 0XD086, 0XD086, 0X9044, 0XD086, 0XB865, 0X6985, 0X04A6, - 0X0547, 0X0547, 0X0547, 0X90A4, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XA865, 0XC066, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XB865, 0X0BA5, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X22C4, 0XA865, 0X9044, 0X9864, 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X4A25, 0XD086, 0X98A5, 0X0506, 0X0547, 0X0547, - 0X0547, 0X0506, 0X4183, 0X9864, 0X9044, 0XB865, 0XD086, 0XD086, 0XD086, - 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, 0X7145, 0X0BA5, 0X0405, 0X04A6, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X32C5, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0X9044, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X90A4, 0X4285, 0X04A6, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0405, 0XD086, 0XD086, 0X9864, 0XD086, 0X6985, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X1B65, 0XD086, 0X4A25, 0X0547, - 0X0547, 0X0547, 0X0547, 0X4A25, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, - 0XD086, 0X8145, 0X0B64, 0XD086, 0XD086, 0XA865, 0X32C5, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X2305, - 0X98A5, 0XC066, 0X9864, 0X9864, 0X9864, 0XC066, 0X9864, 0XA865, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X80E5, 0X59E5, - 0X0C05, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0XC066, 0XD086, 0X9044, 0XD086, - 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X98A5, - 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X59E5, 0XD086, 0XB865, 0XB865, - 0XD086, 0XD086, 0XA8C5, 0X0C66, 0X0506, 0X98A5, 0XD086, 0X90A4, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0506, 0X70E4, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, - 0X9864, 0X9864, 0X9864, 0X9044, 0X9864, 0XC066, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XC066, 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X68E4, 0X9044, - 0X9864, 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0445, 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X90A4, 0XA865, - 0X9044, 0XD086, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 0X32C5, 0XD086, - 0X4A25, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X7145, 0X9864, 0X9864, - 0XA865, 0XA865, 0XD086, 0XD086, 0X9864, 0XD086, 0XD086, 0X9864, 0XD086, - 0XD086, 0X90A4, 0X80E5, 0XC066, 0XD086, 0X7145, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X9864, 0XD086, 0X9864, 0XD086, 0X6985, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X80E5, - 0XD086, 0XB865, 0XB865, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, 0X0547, - 0X0506, 0X9044, 0X04A6, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X4285, 0XB865, 0XA865, 0X9864, 0XC066, 0XD086, 0XA865, - 0XC066, 0XD086, 0XC066, 0X0C05, 0X0547, 0X0445, 0X4285, 0X58E3, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X9864, 0XD086, 0X9864, 0XD086, 0X4285, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X9864, 0XD086, 0X9864, 0XD086, 0XA8C5, 0X0C66, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0405, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0405, 0X04A6, 0X2305, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X80E5, 0X9864, 0X9864, 0X9864, - 0X8044, 0XB865, 0XD086, 0XD086, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X4285, 0XA865, 0X7043, 0XB865, 0XD086, 0X2305, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X2365, 0X9864, 0XB865, 0XB865, 0XA8C5, 0X0C66, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0506, 0X70A4, 0XA865, 0X8044, 0XD086, 0X7145, 0X0506, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0X3224, 0XD086, 0XD086, - 0XC066, 0X9864, 0XC066, 0XD086, 0XD086, 0X4A25, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X1B65, 0X32C5, 0X68E4, 0X2365, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X9864, 0XD086, 0X9864, 0XD086, - 0XC066, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X2305, 0X6985, 0X59E5, 0X22C4, 0X0445, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0C66, 0XA8C5, 0XA865, 0XA865, 0XD086, 0X2305, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0BA5, 0X0C05, 0X0C66, 0X9044, 0XD086, 0XD086, 0X8145, - 0X04A6, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C05, 0XB865, 0XC066, - 0X9864, 0X9044, 0XA865, 0XD086, 0XD086, 0XD086, 0X4A25, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X22C4, 0X70E4, 0XB865, 0X9864, 0XC066, - 0X2365, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X5924, 0X9864, - 0XA865, 0XD086, 0X9864, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X3224, 0X22C4, 0X9864, 0XA865, 0XC066, 0X6985, - 0X0BA5, 0X0506, 0X0547, 0X0506, 0X32C5, 0XB865, 0XD086, 0XD086, 0XD086, - 0X80E5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0C05, 0X4A25, - 0X80E5, 0XD086, 0XB865, 0X4A25, 0X0BA5, 0X22C4, 0X6985, 0X90A4, 0X9864, - 0X9864, 0X9864, 0X9044, 0XD086, 0XD086, 0XD086, 0XB865, 0X2305, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X04A6, 0X0547, 0X1B04, - 0XC066, 0XD086, 0XC066, 0X4285, 0X0506, 0X0547, 0X0547, 0X0547, 0X4A25, - 0XD086, 0XD086, 0XD086, 0XD086, 0X59E5, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X7043, 0XA865, - 0XD086, 0XD086, 0XB865, 0X7043, 0X6843, 0X9864, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X1B65, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X32C5, 0X3264, 0X6985, - 0X59E5, 0X04A6, 0X0547, 0X4A25, 0XC066, 0X9864, 0XA865, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X6985, 0X04A6, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0C66, 0X59E5, 0X6883, 0X9864, 0X9864, 0XD086, 0X98A5, 0X4285, 0X32C5, - 0X6944, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X2305, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X32C5, 0X6985, 0X6944, - 0XC066, 0XC066, 0X9864, 0X9864, 0XB865, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XA865, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X80E5, 0X9864, - 0X9864, 0XD086, 0XD086, 0XB865, 0X6985, 0X6985, 0X9044, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XA865, 0X59E5, 0X0C05, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0506, 0X6985, 0XA865, 0XA865, 0XD086, 0XD086, 0XD086, 0X9864, 0XB865, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X6985, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X3264, 0X7145, - 0X6985, 0X9864, 0X9044, 0X9864, 0X9864, 0X9864, 0XA865, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X90A4, 0X6985, 0X4285, - 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, - 0X2305, 0X04A6, 0X90A4, 0XC066, 0X9864, 0X9044, 0X9864, 0X9864, 0X9864, - 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0X58E3, 0X3264, - 0X1B65, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X4224, 0X4224, 0X3264, 0X7043, 0X4A25, 0X32C5, 0X49C4, - 0X9864, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0X7145, 0X1B65, 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X04A6, 0X0547, 0X0547, 0X04A6, 0X80E5, 0XD086, 0XD086, 0XD086, 0XD086, - 0XD086, 0XD086, 0XD086, 0XD086, 0XC066, 0X7145, 0X49C4, 0XB865, 0XD086, - 0XD086, 0XD086, 0X9044, 0X9864, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0X5883, 0XA865, 0XD086, 0XD086, - 0XC066, 0X9864, 0X7145, 0X6985, 0X3264, 0X80E5, 0X7145, 0X32C5, 0X70E4, - 0XD086, 0XD086, 0XD086, 0X68E4, 0X4285, 0X04A6, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0405, 0X0547, 0X0547, 0X0547, 0X0506, - 0X6985, 0X9864, 0XD086, 0XD086, 0XA865, 0X9864, 0XD086, 0XD086, 0XD086, - 0XB865, 0X80E5, 0X80A4, 0XC066, 0XD086, 0XD086, 0X58E3, 0X32C5, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0C66, 0X90A4, 0XA865, 0XA865, 0XD086, - 0XD086, 0XD086, 0X6985, 0X0BA5, 0X0405, 0X22C4, 0X0C05, 0X0547, 0X0547, - 0X0C66, 0X7145, 0XC066, 0XD086, 0X70A4, 0X4285, 0X58E3, 0X0506, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X59E5, 0XA865, 0X9044, - 0X9864, 0X4A25, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X1B65, 0X98A5, 0XD086, 0X9044, 0X7145, 0X8044, 0X04A6, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X1BC5, 0X7145, 0X9864, 0XD086, 0X98A5, 0X2305, 0X0506, 0X0506, 0X32C5, - 0X6985, 0X32C5, 0X04A6, 0X0547, 0X0547, 0X0C05, 0X5984, 0XA865, 0X9864, - 0X9864, 0X32C5, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X49C4, 0X59E5, 0X22C4, - 0X70E4, 0X9864, 0X7145, 0X1B65, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0445, 0X0405, 0X0506, 0X0547, 0X0506, - 0X0506, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X2264, - 0X0506, 0X0506, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0506, 0X0405, 0X0445, 0X0547, - 0X0C66, 0X0445, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0506, 0X90A4, 0X80E5, 0X4224, 0X3224, 0X0506, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0405, 0X0547, 0X0506, 0X1A03, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0B64, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X04A6, 0X1BC5, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, 0X0547, - 0X0547, 0X0547, 0X0547, 0X0547, 0X0547 }; - diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/pictureEmbed.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/pictureEmbed.ino deleted file mode 100644 index 5c5475756..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/pictureEmbed/pictureEmbed.ino +++ /dev/null @@ -1,69 +0,0 @@ -// ILI9341 example with embedded color bitmaps in sketch. -// WILL NOT FIT ON ARDUINO UNO OR OTHER AVR BOARDS; -// uses large bitmap image stored in array! - -// Options for converting images to the format used here include: -// http://www.rinkydinkelectronics.com/t_imageconverter565.php -// or -// GIMP (https://www.gimp.org/) as follows: -// 1. File -> Export As -// 2. In Export Image dialog, use 'C source code (*.c)' as filetype. -// 3. Press export to get the export options dialog. -// 4. Type the desired variable name into the 'prefixed name' box. -// 5. Uncheck 'GLIB types (guint8*)' -// 6. Check 'Save as RGB565 (16-bit)' -// 7. Press export to save your image. -// Assuming 'image_name' was typed in the 'prefixed name' box of step 4, -// you can have to include the c file, then using the image can be done with: -// tft.drawRGBBitmap(0, 0, image_name.pixel_data, image_name.width, image_name.height); -// See also https://forum.pjrc.com/threads/35575-Export-for-ILI9341_t3-with-GIMP - -#include "SPI.h" -#include -#include "dragon.h" - -// For the Adafruit shield, these are the default. -//#define TFT_DC 9 -//#define TFT_CS 10 - -// Feather 32u4 or M0 with TFT FeatherWing: -#define TFT_DC 10 -#define TFT_CS 9 -// ESP8266: -//#define TFT_DC 15 -//#define TFT_CS 0 -// Other boards (including Feather boards) may have other pinouts; -// see learn.adafruit.com/adafruit-2-4-tft-touch-screen-featherwing/pinouts - -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); -// If using the breakout, change pins as desired -//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO); - -void setup() { - tft.begin(); -} - -void loop(void) { - for(uint8_t r=0; r<4; r++) { - tft.setRotation(r); - tft.fillScreen(ILI9341_BLACK); - for(uint8_t j=0; j<20; j++) { - tft.drawRGBBitmap( - random(-DRAGON_WIDTH , tft.width()), - random(-DRAGON_HEIGHT, tft.height()), -#if defined(__AVR__) || defined(ESP8266) - dragonBitmap, -#else - // Some non-AVR MCU's have a "flat" memory model and don't - // distinguish between flash and RAM addresses. In this case, - // the RAM-resident-optimized drawRGBBitmap in the ILI9341 - // library can be invoked by forcibly type-converting the - // PROGMEM bitmap pointer to a non-const uint16_t *. - (uint16_t *)dragonBitmap, -#endif - DRAGON_WIDTH, DRAGON_HEIGHT); - delay(1); // Allow ESP8266 to handle watchdog & WiFi stuff - } - delay(3000); - } -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/spitftbitmap/spitftbitmap.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/spitftbitmap/spitftbitmap.ino deleted file mode 100644 index 7e2fedc5e..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/spitftbitmap/spitftbitmap.ino +++ /dev/null @@ -1,218 +0,0 @@ -/*************************************************** - This is our Bitmap drawing example for the Adafruit ILI9341 Breakout and Shield - ----> http://www.adafruit.com/products/1651 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - - -#include // Core graphics library -#include "Adafruit_ILI9341.h" // Hardware-specific library -#include -#include - -// TFT display and SD card will share the hardware SPI interface. -// Hardware SPI pins are specific to the Arduino board type and -// cannot be remapped to alternate pins. For Arduino Uno, -// Duemilanove, etc., pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK. - -#define TFT_DC 9 -#define TFT_CS 10 -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); - -#define SD_CS 4 - -void setup(void) { - Serial.begin(9600); - - tft.begin(); - - yield(); - - Serial.print("Initializing SD card..."); - if (!SD.begin(SD_CS)) { - Serial.println("failed!"); - } - Serial.println("OK!"); - -} - -void loop() { - for(uint8_t r=0; r<4; r++) { - tft.setRotation(r); - tft.fillScreen(ILI9341_BLUE); - for(int8_t i=-2; i<1; i++) { - bmpDraw("purple.bmp", - (tft.width() / 2) + (i * 120), - (tft.height() / 2) + (i * 160)); - } - } -} - -// This function opens a Windows Bitmap (BMP) file and -// displays it at the given coordinates. It's sped up -// by reading many pixels worth of data at a time -// (rather than pixel by pixel). Increasing the buffer -// size takes more of the Arduino's precious RAM but -// makes loading a little faster. 20 pixels seems a -// good balance. - -#define BUFFPIXEL 20 - -void bmpDraw(char *filename, int16_t x, int16_t y) { - - File bmpFile; - int bmpWidth, bmpHeight; // W+H in pixels - uint8_t bmpDepth; // Bit depth (currently must be 24) - uint32_t bmpImageoffset; // Start of image data in file - uint32_t rowSize; // Not always = bmpWidth; may have padding - uint8_t sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel) - uint8_t buffidx = sizeof(sdbuffer); // Current position in sdbuffer - boolean goodBmp = false; // Set to true on valid header parse - boolean flip = true; // BMP is stored bottom-to-top - int w, h, row, col, x2, y2, bx1, by1; - uint8_t r, g, b; - uint32_t pos = 0, startTime = millis(); - - if((x >= tft.width()) || (y >= tft.height())) return; - - Serial.println(); - Serial.print(F("Loading image '")); - Serial.print(filename); - Serial.println('\''); - - // Open requested file on SD card - if ((bmpFile = SD.open(filename)) == NULL) { - Serial.print(F("File not found")); - return; - } - - // Parse BMP header - if(read16(bmpFile) == 0x4D42) { // BMP signature - Serial.print(F("File size: ")); Serial.println(read32(bmpFile)); - (void)read32(bmpFile); // Read & ignore creator bytes - bmpImageoffset = read32(bmpFile); // Start of image data - Serial.print(F("Image Offset: ")); Serial.println(bmpImageoffset, DEC); - // Read DIB header - Serial.print(F("Header size: ")); Serial.println(read32(bmpFile)); - bmpWidth = read32(bmpFile); - bmpHeight = read32(bmpFile); - if(read16(bmpFile) == 1) { // # planes -- must be '1' - bmpDepth = read16(bmpFile); // bits per pixel - Serial.print(F("Bit Depth: ")); Serial.println(bmpDepth); - if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed - - goodBmp = true; // Supported BMP format -- proceed! - Serial.print(F("Image size: ")); - Serial.print(bmpWidth); - Serial.print('x'); - Serial.println(bmpHeight); - - // BMP rows are padded (if needed) to 4-byte boundary - rowSize = (bmpWidth * 3 + 3) & ~3; - - // If bmpHeight is negative, image is in top-down order. - // This is not canon but has been observed in the wild. - if(bmpHeight < 0) { - bmpHeight = -bmpHeight; - flip = false; - } - - // Crop area to be loaded - x2 = x + bmpWidth - 1; // Lower-right corner - y2 = y + bmpHeight - 1; - if((x2 >= 0) && (y2 >= 0)) { // On screen? - w = bmpWidth; // Width/height of section to load/display - h = bmpHeight; - bx1 = by1 = 0; // UL coordinate in BMP file - if(x < 0) { // Clip left - bx1 = -x; - x = 0; - w = x2 + 1; - } - if(y < 0) { // Clip top - by1 = -y; - y = 0; - h = y2 + 1; - } - if(x2 >= tft.width()) w = tft.width() - x; // Clip right - if(y2 >= tft.height()) h = tft.height() - y; // Clip bottom - - // Set TFT address window to clipped image bounds - tft.startWrite(); // Requires start/end transaction now - tft.setAddrWindow(x, y, w, h); - - for (row=0; row= sizeof(sdbuffer)) { // Indeed - tft.endWrite(); // End TFT transaction - bmpFile.read(sdbuffer, sizeof(sdbuffer)); - buffidx = 0; // Set index to beginning - tft.startWrite(); // Start new TFT transaction - } - // Convert pixel from BMP to TFT format, push to display - b = sdbuffer[buffidx++]; - g = sdbuffer[buffidx++]; - r = sdbuffer[buffidx++]; - tft.writePixel(tft.color565(r,g,b)); - } // end pixel - } // end scanline - tft.endWrite(); // End last TFT transaction - } // end onscreen - Serial.print(F("Loaded in ")); - Serial.print(millis() - startTime); - Serial.println(" ms"); - } // end goodBmp - } - } - - bmpFile.close(); - if(!goodBmp) Serial.println(F("BMP format not recognized.")); -} - -// These read 16- and 32-bit types from the SD card file. -// BMP data is stored little-endian, Arduino is little-endian too. -// May need to reverse subscript order if porting elsewhere. - -uint16_t read16(File &f) { - uint16_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); // MSB - return result; -} - -uint32_t read32(File &f) { - uint32_t result; - ((uint8_t *)&result)[0] = f.read(); // LSB - ((uint8_t *)&result)[1] = f.read(); - ((uint8_t *)&result)[2] = f.read(); - ((uint8_t *)&result)[3] = f.read(); // MSB - return result; -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint/touchpaint.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint/touchpaint.ino deleted file mode 100644 index 227abdc84..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint/touchpaint.ino +++ /dev/null @@ -1,146 +0,0 @@ -/*************************************************** - This is our touchscreen painting example for the Adafruit ILI9341 Shield - ----> http://www.adafruit.com/products/1651 - - Check out the links above for our tutorials and wiring diagrams - These displays use SPI to communicate, 4 or 5 pins are required to - interface (RST is optional) - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - - -#include // Core graphics library -#include -#include // this is needed even tho we aren't using it -#include -#include - -// This is calibration data for the raw touch data to the screen coordinates -#define TS_MINX 150 -#define TS_MINY 130 -#define TS_MAXX 3800 -#define TS_MAXY 4000 - -// The STMPE610 uses hardware SPI on the shield, and #8 -#define STMPE_CS 8 -Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); - -// The display also uses hardware SPI, plus #9 & #10 -#define TFT_CS 10 -#define TFT_DC 9 -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); - -// Size of the color selection boxes and the paintbrush size -#define BOXSIZE 40 -#define PENRADIUS 3 -int oldcolor, currentcolor; - -void setup(void) { - // while (!Serial); // used for leonardo debugging - - Serial.begin(9600); - Serial.println(F("Touch Paint!")); - - tft.begin(); - - if (!ts.begin()) { - Serial.println("Couldn't start touchscreen controller"); - while (1); - } - Serial.println("Touchscreen started"); - - tft.fillScreen(ILI9341_BLACK); - - // make the color selection boxes - tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); - tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); - tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); - tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); - tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); - tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); - - // select the current color 'red' - tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - currentcolor = ILI9341_RED; -} - - -void loop() -{ - // See if there's any touch data for us - if (ts.bufferEmpty()) { - return; - } - /* - // You can also wait for a touch - if (! ts.touched()) { - return; - } - */ - - // Retrieve a point - TS_Point p = ts.getPoint(); - - /* - Serial.print("X = "); Serial.print(p.x); - Serial.print("\tY = "); Serial.print(p.y); - Serial.print("\tPressure = "); Serial.println(p.z); - */ - - // Scale from ~0->4000 to tft.width using the calibration #'s - p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); - p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); - - /* - Serial.print("("); Serial.print(p.x); - Serial.print(", "); Serial.print(p.y); - Serial.println(")"); - */ - - if (p.y < BOXSIZE) { - oldcolor = currentcolor; - - if (p.x < BOXSIZE) { - currentcolor = ILI9341_RED; - tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*2) { - currentcolor = ILI9341_YELLOW; - tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*3) { - currentcolor = ILI9341_GREEN; - tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*4) { - currentcolor = ILI9341_CYAN; - tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*5) { - currentcolor = ILI9341_BLUE; - tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*6) { - currentcolor = ILI9341_MAGENTA; - tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } - - if (oldcolor != currentcolor) { - if (oldcolor == ILI9341_RED) - tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); - if (oldcolor == ILI9341_YELLOW) - tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); - if (oldcolor == ILI9341_GREEN) - tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); - if (oldcolor == ILI9341_CYAN) - tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); - if (oldcolor == ILI9341_BLUE) - tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); - if (oldcolor == ILI9341_MAGENTA) - tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); - } - } - if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) { - tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); - } -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/.mega2560.test.skip b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/.mega2560.test.skip deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/touchpaint_featherwing.ino b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/touchpaint_featherwing.ino deleted file mode 100644 index 5d317abcd..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/examples/touchpaint_featherwing/touchpaint_featherwing.ino +++ /dev/null @@ -1,165 +0,0 @@ -/*************************************************** - This is our touchscreen painting example for the Adafruit TFT FeatherWing - ----> http://www.adafruit.com/products/3315 - - Check out the links above for our tutorials and wiring diagrams - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - MIT license, all text above must be included in any redistribution - ****************************************************/ - -#include -#include // this is needed even tho we aren't using it - -#include // Core graphics library -#include // Hardware-specific library -#include - -#ifdef ESP8266 - #define STMPE_CS 16 - #define TFT_CS 0 - #define TFT_DC 15 - #define SD_CS 2 -#endif -#ifdef ESP32 - #define STMPE_CS 32 - #define TFT_CS 15 - #define TFT_DC 33 - #define SD_CS 14 -#endif -#ifdef TEENSYDUINO - #define TFT_DC 10 - #define TFT_CS 4 - #define STMPE_CS 3 - #define SD_CS 8 -#endif -#ifdef ARDUINO_STM32_FEATHER - #define TFT_DC PB4 - #define TFT_CS PA15 - #define STMPE_CS PC7 - #define SD_CS PC5 -#endif -#ifdef ARDUINO_NRF52_FEATHER /* BSP 0.6.5 and higher! */ - #define TFT_DC 11 - #define TFT_CS 31 - #define STMPE_CS 30 - #define SD_CS 27 -#endif -#if defined(ARDUINO_MAX32620FTHR) || defined(ARDUINO_MAX32630FTHR) - #define TFT_DC P5_4 - #define TFT_CS P5_3 - #define STMPE_CS P3_3 - #define SD_CS P3_2 -#endif - -// Anything else! -#if defined (__AVR_ATmega32U4__) || defined(ARDUINO_SAMD_FEATHER_M0) || defined (__AVR_ATmega328P__) || defined(ARDUINO_SAMD_ZERO) || defined(__SAMD51__) || defined(__SAM3X8E__) - #define STMPE_CS 6 - #define TFT_CS 9 - #define TFT_DC 10 - #define SD_CS 5 -#endif - - -Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); -Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS); - - -// This is calibration data for the raw touch data to the screen coordinates -#define TS_MINX 3800 -#define TS_MAXX 100 -#define TS_MINY 100 -#define TS_MAXY 3750 - -// Size of the color selection boxes and the paintbrush size -#define BOXSIZE 40 -#define PENRADIUS 3 -int oldcolor, currentcolor; - -void setup(void) { - Serial.begin(115200); - - delay(10); - Serial.println("FeatherWing TFT"); - if (!ts.begin()) { - Serial.println("Couldn't start touchscreen controller"); - while (1); - } - Serial.println("Touchscreen started"); - - tft.begin(); - tft.fillScreen(ILI9341_BLACK); - - // make the color selection boxes - tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); - tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); - tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); - tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); - tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); - tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); - - // select the current color 'red' - tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - currentcolor = ILI9341_RED; -} - -void loop() { - // Retrieve a point - TS_Point p = ts.getPoint(); - - Serial.print("X = "); Serial.print(p.x); - Serial.print("\tY = "); Serial.print(p.y); - Serial.print("\tPressure = "); Serial.println(p.z); - - - // Scale from ~0->4000 to tft.width using the calibration #'s - p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); - p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); - - if (p.y < BOXSIZE) { - oldcolor = currentcolor; - - if (p.x < BOXSIZE) { - currentcolor = ILI9341_RED; - tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*2) { - currentcolor = ILI9341_YELLOW; - tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*3) { - currentcolor = ILI9341_GREEN; - tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*4) { - currentcolor = ILI9341_CYAN; - tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*5) { - currentcolor = ILI9341_BLUE; - tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } else if (p.x < BOXSIZE*6) { - currentcolor = ILI9341_MAGENTA; - tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE); - } - - if (oldcolor != currentcolor) { - if (oldcolor == ILI9341_RED) - tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED); - if (oldcolor == ILI9341_YELLOW) - tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW); - if (oldcolor == ILI9341_GREEN) - tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN); - if (oldcolor == ILI9341_CYAN) - tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN); - if (oldcolor == ILI9341_BLUE) - tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE); - if (oldcolor == ILI9341_MAGENTA) - tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA); - } - } - - if (((p.y-PENRADIUS) > 0) && ((p.y+PENRADIUS) < tft.height())) { - tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); - } -} diff --git a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/library.properties b/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/library.properties deleted file mode 100644 index 8c93d49ee..000000000 --- a/lib/lib_display/Adafruit_ILI9341-1.2.0-Tasmota-1.0/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=Adafruit ILI9341 -version=1.2.0 -author=Adafruit -maintainer=Adafruit -sentence=Library for Adafruit ILI9341 displays -paragraph=Library for Adafruit ILI9341 displays -category=Display -url=https://github.com/adafruit/Adafruit_ILI9341 -architectures=* diff --git a/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.cpp b/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.cpp index 9946286b2..7347fa74f 100644 --- a/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.cpp +++ b/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.cpp @@ -21,6 +21,8 @@ ST7789_LIGHTGREY,ST7789_DARKGREY,ST7789_ORANGE,ST7789_GREENYELLOW,ST7789_PINK}; #define ST7789_DIMMER #endif + + uint16_t Arduino_ST7789::GetColorFromIndex(uint8_t index) { if (index>=sizeof(ST7789_colors)/2) index=0; return ST7789_colors[index]; @@ -50,7 +52,7 @@ inline uint16_t swapcolor(uint16_t x) { } #if defined (SPI_HAS_TRANSACTION) - static SPISettings mySPISettings; + static SPISettings ST7789_SPISettings; #elif defined (__AVR__) || defined(CORE_TEENSY) static uint8_t SPCRbackup; static uint8_t mySPCR; @@ -58,7 +60,7 @@ inline uint16_t swapcolor(uint16_t x) { #if defined (SPI_HAS_TRANSACTION) -#define SPI_BEGIN_TRANSACTION() if (_hwSPI) SPI.beginTransaction(mySPISettings) +#define SPI_BEGIN_TRANSACTION() if (_hwSPI) SPI.beginTransaction(ST7789_SPISettings) #define SPI_END_TRANSACTION() if (_hwSPI) SPI.endTransaction() #else #define SPI_BEGIN_TRANSACTION() (void) @@ -217,26 +219,28 @@ void Arduino_ST7789::displayInit(const uint8_t *addr) { uint16_t ms; //<----------------------------------------------------------------------------------------- DC_HIGH(); - #if defined(USE_FAST_IO) + if (!_hwSPI) { +#if defined(USE_FAST_IO) *clkport |= clkpinmask; - #else +#else digitalWrite(_sclk, HIGH); - #endif +#endif + } //<----------------------------------------------------------------------------------------- numCommands = pgm_read_byte(addr++); // Number of commands to follow - while(numCommands--) { // For each command... + while (numCommands--) { // For each command... writecommand(pgm_read_byte(addr++)); // Read, issue command numArgs = pgm_read_byte(addr++); // Number of args to follow ms = numArgs & ST_CMD_DELAY; // If hibit set, delay follows args numArgs &= ~ST_CMD_DELAY; // Mask out delay bit - while(numArgs--) { // For each argument... + while (numArgs--) { // For each argument... writedata(pgm_read_byte(addr++)); // Read, issue argument } - if(ms) { + if (ms) { ms = pgm_read_byte(addr++); // Read post-command delay time (ms) - if(ms == 255) ms = 500; // If 255, delay for 500 ms + if (ms == 255) ms = 500; // If 255, delay for 500 ms delay(ms); } } @@ -270,16 +274,16 @@ void Arduino_ST7789::commonInit(const uint8_t *cmdList) { dcport = portOutputRegister(digitalPinToPort(_dc)); dcpinmask = digitalPinToBitMask(_dc); if (_cs>=0) { - csport = portOutputRegister(digitalPinToPort(_cs)); - cspinmask = digitalPinToBitMask(_cs); + csport = portOutputRegister(digitalPinToPort(_cs)); + cspinmask = digitalPinToBitMask(_cs); } - #endif if(_hwSPI) { // Using hardware SPI #if defined (SPI_HAS_TRANSACTION) SPI.begin(); - mySPISettings = SPISettings(24000000, MSBFIRST, SPI_MODE2); + // ST7789_SPISettings = SPISettings(24000000, MSBFIRST, SPI_MODE2); + ST7789_SPISettings = SPISettings(1000000, MSBFIRST, SPI_MODE2); #elif defined (__AVR__) || defined(CORE_TEENSY) SPCRbackup = SPCR; SPI.begin(); @@ -318,7 +322,7 @@ void Arduino_ST7789::commonInit(const uint8_t *cmdList) { delay(50); } - if(cmdList) + if (cmdList) displayInit(cmdList); } @@ -391,7 +395,6 @@ void Arduino_ST7789::setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16 setAddrWindow_int(x0,y0,x1-1,y1-1); } - void Arduino_ST7789::setAddrWindow_int(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { uint16_t x_start = x0 + _xstart, x_end = x1 + _xstart; uint16_t y_start = y0 + _ystart, y_end = y1 + _ystart; diff --git a/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.h b/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.h index b8cbabeb8..ebd39dc25 100644 --- a/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.h +++ b/lib/lib_display/Arduino_ST7789-gemu-1.0/Arduino_ST7789.h @@ -15,6 +15,10 @@ #include #include +#ifdef ESP8266 +#define USE_FAST_IO +#endif + #if defined(__AVR__) || defined(CORE_TEENSY) #include #define USE_FAST_IO @@ -177,7 +181,7 @@ class Arduino_ST7789 : public Renderer { int8_t _cs, _dc, _rst, _sid, _sclk, _bp; #if defined(USE_FAST_IO) - volatile RwReg *dataport, *clkport, *csport, *dcport; + volatile uint32_t *dataport, *clkport, *csport, *dcport; #if defined(__AVR__) || defined(CORE_TEENSY) // 8 bit! uint8_t datapinmask, clkpinmask, cspinmask, dcpinmask; diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp index c05faee13..911d4809f 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.cpp @@ -87,6 +87,14 @@ void Renderer::Updateframe() { } + +void Renderer::setTextSize(uint8_t sf) { + if (sf < 1) sf = 1; + if (sf > 4) sf = 4; + tsize = sf; + Adafruit_GFX::setTextSize(sf); +} + /** * @brief: this draws a charactor on the frame buffer but not refresh */ @@ -96,14 +104,25 @@ void Renderer::DrawCharAt(int16_t x, int16_t y, char ascii_char,int16_t colored) int i, j; unsigned int char_offset = (ascii_char - ' ') * xfont->Height * (xfont->Width / 8 + (xfont->Width % 8 ? 1 : 0)); const unsigned char* ptr = &xfont->table[char_offset]; + uint8_t sf = tsize; for (j = 0; j < xfont->Height; j++) { for (i = 0; i < xfont->Width; i++) { if (pgm_read_byte(ptr) & (0x80 >> (i % 8))) { - writePixel(x + i, y + j, colored); + if (sf == 1) { + writePixel(x + i, y + j, colored); + } else { + writeFillRect(x + i * sf, y + j * sf, sf, sf, colored); + } } else { // fill background - if (!drawmode) writePixel(x + i, y + j, textbgcolor); + if (!drawmode) { + if (sf == 1) { + writePixel(x + i, y + j, textbgcolor); + } else { + writeFillRect(x + i * sf, y + j * sf, sf, sf, textbgcolor); + } + } } if (i % 8 == 7) { ptr++; @@ -146,8 +165,8 @@ void Renderer::DrawStringAt(int16_t x, int16_t y, const char* text, uint16_t col if (flag) { - x=(x-1)*xfont->Width; - y=(y-1)*xfont->Height; + x=(x-1)*xfont->Width*tsize; + y=(y-1)*xfont->Height*tsize; refcolumn = x; } @@ -159,7 +178,7 @@ void Renderer::DrawStringAt(int16_t x, int16_t y, const char* text, uint16_t col /* Display one character on EPD */ DrawCharAt(refcolumn, y, *p_text, colored); /* increment the column position */ - refcolumn += xfont->Width; + refcolumn += xfont->Width*tsize; /* Point on the next character */ p_text++; counter++; @@ -527,6 +546,13 @@ void Renderer::setDrawMode(uint8_t mode) { void Renderer::invertDisplay(boolean i) { } +void Renderer::setScrollMargins(uint16_t top, uint16_t bottom) { + +} +void Renderer::scrollTo(uint16_t y) { + +} + void VButton::xdrawButton(bool inverted) { wr_redir=1; drawButton(inverted); @@ -626,4 +652,5 @@ uint16_t VButton::UpdateSlider(int16_t x, int16_t y) { + /* END OF FILE */ diff --git a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h index b50745686..cae4b420b 100644 --- a/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h +++ b/lib/lib_display/Display_Renderer-gemu-1.0/src/renderer.h @@ -36,15 +36,19 @@ public: virtual void pushColors(uint16_t *data, uint16_t len, boolean first); virtual void setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); virtual void invertDisplay(boolean i); + virtual void setScrollMargins(uint16_t top, uint16_t bottom); + virtual void scrollTo(uint16_t y); void setDrawMode(uint8_t mode); uint8_t drawmode; virtual void FastString(uint16_t x,uint16_t y,uint16_t tcolor, const char* str); + void setTextSize(uint8_t s); private: void DrawCharAt(int16_t x, int16_t y, char ascii_char,int16_t colored); inline void drawFastVLineInternal(int16_t x, int16_t y, int16_t h, uint16_t color) __attribute__((always_inline)); inline void drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color) __attribute__((always_inline)); sFONT *selected_font; uint8_t font; + uint8_t tsize = 1; }; typedef union { diff --git a/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.cpp b/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.cpp index 428f7cb80..f8a365f8e 100644 --- a/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.cpp +++ b/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.cpp @@ -46,7 +46,7 @@ * */ -#ifdef ESP32 +//#ifdef ESP32 #include "ILI9341_2.h" #include @@ -57,25 +57,26 @@ #define ILI9341_2_DIMMER #undef ESP32_PWM_CHANNEL #define ESP32_PWM_CHANNEL 1 -#define ILI9341_2_HWSPI #endif +#define ILI9341_2_HWSPI + #if defined (ILI9341_2_HWSPI) #define SPI_BEGIN_TRANSACTION() if (_hwspi) spi2->beginTransaction(sspi2) #define SPI_END_TRANSACTION() if (_hwspi) spi2->endTransaction() #else -#define SPI_BEGIN_TRANSACTION() (void) -#define SPI_END_TRANSACTION() (void) +#define SPI_BEGIN_TRANSACTION() +#define SPI_END_TRANSACTION() #endif -const uint16_t ili9341_2_colors[]={ILI9341_2_BLACK,ILI9341_2_WHITE,ILI9341_2_RED,ILI9341_2_GREEN,ILI9341_2_BLUE,ILI9341_2_CYAN,ILI9341_2_MAGENTA,\ - ILI9341_2_YELLOW,ILI9341_2_NAVY,ILI9341_2_DARKGREEN,ILI9341_2_DARKCYAN,ILI9341_2_MAROON,ILI9341_2_PURPLE,ILI9341_2_OLIVE,\ -ILI9341_2_LIGHTGREY,ILI9341_2_DARKGREY,ILI9341_2_ORANGE,ILI9341_2_GREENYELLOW,ILI9341_2_PINK}; +const uint16_t ili9341_2_colors[]={ILI9341_BLACK,ILI9341_WHITE,ILI9341_RED,ILI9341_GREEN,ILI9341_BLUE,ILI9341_CYAN,ILI9341_MAGENTA,\ + ILI9341_YELLOW,ILI9341_NAVY,ILI9341_DARKGREEN,ILI9341_DARKCYAN,ILI9341_MAROON,ILI9341_PURPLE,ILI9341_OLIVE,\ +ILI9341_LIGHTGREY,ILI9341_DARKGREY,ILI9341_ORANGE,ILI9341_GREENYELLOW,ILI9341_PINK}; uint16_t ILI9341_2::GetColorFromIndex(uint8_t index) { - if (index>=sizeof(ili9341_2_colors)/2) index=0; + if (index >= sizeof(ili9341_2_colors) / 2) index = 0; return ili9341_2_colors[index]; } @@ -135,7 +136,7 @@ static const uint8_t PROGMEM ili9342_initcmd[] = { 0x00 // End of list }; -ILI9341_2::ILI9341_2(int8_t cs, int8_t mosi, int8_t miso, int8_t sclk, int8_t res, int8_t dc, int8_t bp) : Renderer(ILI9341_2_TFTWIDTH, ILI9341_2_TFTHEIGHT) { +ILI9341_2::ILI9341_2(int8_t cs, int8_t mosi, int8_t miso, int8_t sclk, int8_t res, int8_t dc, int8_t bp, int8_t spibus) : Renderer(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT) { _cs = cs; _mosi = mosi; _miso = miso; @@ -143,20 +144,22 @@ ILI9341_2::ILI9341_2(int8_t cs, int8_t mosi, int8_t miso, int8_t sclk, int8_t re _res = res; _dc = dc; _bp = bp; - _hwspi = 1; + _hwspi = 1; // sign ili9341 + _spibus = spibus; } -// special init for ILI9342 -ILI9341_2::ILI9341_2(int8_t cs, int8_t res, int8_t dc, int8_t bp) : Renderer(ILI9341_2_TFTWIDTH, ILI9341_2_TFTHEIGHT) { +// special init for ILI9342 uses SPI1 previously defined with SDCard +ILI9341_2::ILI9341_2(int8_t cs, int8_t res, int8_t dc, int8_t bp) : Renderer(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT) { _cs = cs; _res = res; _dc = dc; _bp = bp; - _hwspi = 2; + _hwspi = 2; // sign ili9342 + _spibus = 1; } -#define ILI9341_2_CS_LOW digitalWrite( _cs, LOW); -#define ILI9341_2_CS_HIGH digitalWrite( _cs, HIGH); +#define ILI9341_2_CS_LOW if (_cs>=0) digitalWrite( _cs, LOW); +#define ILI9341_2_CS_HIGH if (_cs>=0) digitalWrite( _cs, HIGH); void ILI9341_2::writecmd(uint8_t d) { @@ -172,12 +175,12 @@ void ILI9341_2::writecmd(uint8_t d) { void ILI9341_2::init(uint16_t width, uint16_t height) { //sspi2 = SPISettings(2500000, MSBFIRST, SPI_MODE3); - if (_hwspi==2) { - iwidth=ILI9341_2_TFTWIDTH; - iheight=ILI9341_2_TFTHEIGHT; + if (_hwspi == 2) { + iwidth = ILI9341_TFTWIDTH; + iheight = ILI9341_TFTHEIGHT; } else { - iwidth=ILI9341_2_TFTHEIGHT; - iheight=ILI9341_2_TFTWIDTH; + iwidth = ILI9341_TFTHEIGHT; + iheight = ILI9341_TFTWIDTH; } #ifdef ILI9341_2_HWSPI @@ -187,8 +190,17 @@ void ILI9341_2::init(uint16_t width, uint16_t height) { if (_hwspi==2) { spi2=&SPI; } else { - spi2 = new SPIClass(HSPI); +#ifdef ESP32 + if (_spibus == 2) { + spi2 = new SPIClass(HSPI); + } else { + spi2 = &SPI; + } spi2->begin(_sclk, _miso, _mosi, -1); +#else + SPI.begin(); + spi2 = &SPI; +#endif } #else @@ -205,12 +217,12 @@ void ILI9341_2::init(uint16_t width, uint16_t height) { pinMode(_dc, OUTPUT); digitalWrite(_dc,HIGH); - if (_bp>=0) { + if (_bp >= 0) { pinMode(_bp, OUTPUT); digitalWrite(_bp,HIGH); } - if (_res>=0) { + if (_res >= 0) { pinMode(_res, OUTPUT); digitalWrite(_res, HIGH); delay(100); @@ -227,11 +239,11 @@ void ILI9341_2::init(uint16_t width, uint16_t height) { delay(150); } - if (_bp>=0) { + if (_bp >= 0) { #ifdef ILI9341_2_DIMMER - ledcSetup(ESP32_PWM_CHANNEL,4000,8); - ledcAttachPin(_bp,ESP32_PWM_CHANNEL); - ledcWrite(ESP32_PWM_CHANNEL,128); + ledcSetup(ESP32_PWM_CHANNEL, 4000, 8); + ledcAttachPin(_bp, ESP32_PWM_CHANNEL); + ledcWrite(ESP32_PWM_CHANNEL, 128); #else pinMode(_bp, OUTPUT); #endif @@ -261,11 +273,9 @@ void ILI9341_2::init(uint16_t width, uint16_t height) { #endif ILI9341_2_CS_HIGH - if(x & 0x80) delay(120); + if (x & 0x80) delay(120); } SPI_END_TRANSACTION(); - -// endWrite(); } void ILI9341_2::DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font) { @@ -275,9 +285,9 @@ void ILI9341_2::DisplayInit(int8_t p,int8_t size,int8_t rot,int8_t font) { setRotation(rot); setTextFont(font&3); setTextSize(size&7); - setTextColor(ILI9341_2_WHITE,ILI9341_2_BLACK); + setTextColor(ILI9341_WHITE,ILI9341_BLACK); setCursor(0,0); - fillScreen(ILI9341_2_BLACK); + fillScreen(ILI9341_BLACK); } void ILI9341_2::setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { @@ -331,21 +341,20 @@ void ILI9341_2::setAddrWindow_int(uint16_t x, uint16_t y, uint16_t w, uint16_t h void ILI9341_2::drawPixel(int16_t x, int16_t y, uint16_t color) { - if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) return; - ILI9341_2_CS_LOW - SPI_BEGIN_TRANSACTION(); - setAddrWindow_int(x,y,1,1); + ILI9341_2_CS_LOW + setAddrWindow_int(x,y,1,1); #ifdef ILI9341_2_HWSPI spi2->write16(color); #else spiwrite16(color); #endif + ILI9341_2_CS_HIGH SPI_END_TRANSACTION(); @@ -354,7 +363,7 @@ void ILI9341_2::drawPixel(int16_t x, int16_t y, uint16_t color) { void ILI9341_2::setRotation(uint8_t m) { - if (_hwspi<2) { + if (_hwspi < 2) { rotation = m % 4; // can't be higher than 3 switch (rotation) { case 0: @@ -425,15 +434,14 @@ void ILI9341_2::setRotation(uint8_t m) { void ILI9341_2::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) { // Rudimentary clipping - if((x >= _width) || (y >= _height)) return; - if((y+h-1) >= _height) h = _height-y; - - ILI9341_2_CS_LOW + if ((x >= _width) || (y >= _height)) return; + if ((y + h - 1) >= _height) h = _height - y; SPI_BEGIN_TRANSACTION(); - setAddrWindow_int(x, y, 1, h); + ILI9341_2_CS_LOW + setAddrWindow_int(x, y, 1, h); while (h--) { #ifdef ILI9341_2_HWSPI @@ -454,10 +462,11 @@ void ILI9341_2::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) { if((x >= _width) || (y >= _height)) return; if((x+w-1) >= _width) w = _width-x; - ILI9341_2_CS_LOW SPI_BEGIN_TRANSACTION(); + ILI9341_2_CS_LOW + setAddrWindow_int(x, y, w, 1); @@ -486,10 +495,11 @@ void ILI9341_2::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t co if((x + w - 1) >= _width) w = _width - x; if((y + h - 1) >= _height) h = _height - y; - ILI9341_2_CS_LOW SPI_BEGIN_TRANSACTION(); + ILI9341_2_CS_LOW + setAddrWindow_int(x, y, w, h); for (y=h; y>0; y--) { @@ -605,4 +615,25 @@ void ILI9341_2::spiwrite32(uint32_t c) { #endif } -#endif +void ILI9341_2::setScrollMargins(uint16_t top, uint16_t bottom) { + uint16_t height = _height - (top + bottom); + SPI_BEGIN_TRANSACTION(); + ILI9341_2_CS_LOW + writecmd(0x33); + + spiwrite16(top); + spiwrite16(height); + spiwrite16(bottom); + ILI9341_2_CS_HIGH + SPI_END_TRANSACTION(); +} + + +void ILI9341_2::scrollTo(uint16_t y) { + SPI_BEGIN_TRANSACTION(); + ILI9341_2_CS_LOW + writecmd(ILI9341_2_VSCRSADD); + spiwrite16(y); + ILI9341_2_CS_HIGH + SPI_END_TRANSACTION(); +} diff --git a/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.h b/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.h index 482df9472..4b39ebf38 100644 --- a/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.h +++ b/lib/lib_display/ILI9341-gemu-1.0/ILI9341_2.h @@ -22,8 +22,8 @@ #include #include -#define ILI9341_2_TFTWIDTH 320 -#define ILI9341_2_TFTHEIGHT 240 +#define ILI9341_TFTWIDTH 320 +#define ILI9341_TFTHEIGHT 240 #define ILI9341_2_NOP 0x00 ///< No-op register #define ILI9341_2_SWRESET 0x01 ///< Software reset register @@ -81,25 +81,25 @@ // Color definitions -#define ILI9341_2_BLACK 0x0000 /* 0, 0, 0 */ -#define ILI9341_2_NAVY 0x000F /* 0, 0, 128 */ -#define ILI9341_2_DARKGREEN 0x03E0 /* 0, 128, 0 */ -#define ILI9341_2_DARKCYAN 0x03EF /* 0, 128, 128 */ -#define ILI9341_2_MAROON 0x7800 /* 128, 0, 0 */ -#define ILI9341_2_PURPLE 0x780F /* 128, 0, 128 */ -#define ILI9341_2_OLIVE 0x7BE0 /* 128, 128, 0 */ -#define ILI9341_2_LIGHTGREY 0xC618 /* 192, 192, 192 */ -#define ILI9341_2_DARKGREY 0x7BEF /* 128, 128, 128 */ -#define ILI9341_2_BLUE 0x001F /* 0, 0, 255 */ -#define ILI9341_2_GREEN 0x07E0 /* 0, 255, 0 */ -#define ILI9341_2_CYAN 0x07FF /* 0, 255, 255 */ -#define ILI9341_2_RED 0xF800 /* 255, 0, 0 */ -#define ILI9341_2_MAGENTA 0xF81F /* 255, 0, 255 */ -#define ILI9341_2_YELLOW 0xFFE0 /* 255, 255, 0 */ -#define ILI9341_2_WHITE 0xFFFF /* 255, 255, 255 */ -#define ILI9341_2_ORANGE 0xFD20 /* 255, 165, 0 */ -#define ILI9341_2_GREENYELLOW 0xAFE5 /* 173, 255, 47 */ -#define ILI9341_2_PINK 0xF81F +#define ILI9341_BLACK 0x0000 /* 0, 0, 0 */ +#define ILI9341_NAVY 0x000F /* 0, 0, 128 */ +#define ILI9341_DARKGREEN 0x03E0 /* 0, 128, 0 */ +#define ILI9341_DARKCYAN 0x03EF /* 0, 128, 128 */ +#define ILI9341_MAROON 0x7800 /* 128, 0, 0 */ +#define ILI9341_PURPLE 0x780F /* 128, 0, 128 */ +#define ILI9341_OLIVE 0x7BE0 /* 128, 128, 0 */ +#define ILI9341_LIGHTGREY 0xC618 /* 192, 192, 192 */ +#define ILI9341_DARKGREY 0x7BEF /* 128, 128, 128 */ +#define ILI9341_BLUE 0x001F /* 0, 0, 255 */ +#define ILI9341_GREEN 0x07E0 /* 0, 255, 0 */ +#define ILI9341_CYAN 0x07FF /* 0, 255, 255 */ +#define ILI9341_RED 0xF800 /* 255, 0, 0 */ +#define ILI9341_MAGENTA 0xF81F /* 255, 0, 255 */ +#define ILI9341_YELLOW 0xFFE0 /* 255, 255, 0 */ +#define ILI9341_WHITE 0xFFFF /* 255, 255, 255 */ +#define ILI9341_ORANGE 0xFD20 /* 255, 165, 0 */ +#define ILI9341_GREENYELLOW 0xAFE5 /* 173, 255, 47 */ +#define ILI9341_PINK 0xF81F #define MADCTL_2_MY 0x80 ///< Bottom to top @@ -115,7 +115,7 @@ class ILI9341_2 : public Renderer { public: - ILI9341_2(int8_t cs, int8_t mosi, int8_t miso, int8_t sclk, int8_t res, int8_t dc, int8_t bp); + ILI9341_2(int8_t cs, int8_t mosi, int8_t miso, int8_t sclk, int8_t res, int8_t dc, int8_t bp, int8_t spibus); ILI9341_2(int8_t cs, int8_t res, int8_t dc, int8_t bp); void init(uint16_t width, uint16_t height); @@ -141,6 +141,8 @@ class ILI9341_2 : public Renderer { void spiwrite(uint8_t c); void spiwrite16(uint16_t c); void spiwrite32(uint32_t c); + void setScrollMargins(uint16_t top, uint16_t bottom); + void scrollTo(uint16_t y); uint8_t tabcolor; uint8_t dimmer; @@ -151,6 +153,7 @@ class ILI9341_2 : public Renderer { int8_t _res; int8_t _dc; int8_t _bp; + int8_t _spibus; int8_t _hwspi; uint16_t iwidth; uint16_t iheight; diff --git a/tasmota/xdsp_04_ili9341.ino b/tasmota/xdsp_04_ili9341.ino index e6b38ca7d..56e904ba4 100644 --- a/tasmota/xdsp_04_ili9341.ino +++ b/tasmota/xdsp_04_ili9341.ino @@ -1,7 +1,7 @@ /* - xdsp_04_ili9341.ino - Display Tft Ili9341 support for Tasmota + xdsp_04_ILI9341.ino - Display ILI9341/2 support for Tasmota - Copyright (C) 2021 Theo Arends and Adafruit + Copyright (C) 2021 Gerhard Mutz and Theo Arends This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,29 +19,181 @@ #ifdef USE_SPI #ifdef USE_DISPLAY -#ifdef USE_DISPLAY_ILI9341 +#if (defined(USE_DISPLAY_ILI9341) || defined(USE_DISPLAY_ILI9342)) #define XDSP_04 4 +#include + +extern uint8_t *buffer; +extern uint8_t color_type; +ILI9341_2 *ili9341_2; + +#ifdef USE_FT5206 +#include +uint8_t ili9342_ctouch_counter = 0; +#endif // USE_FT5206 + + +/*********************************************************************************************/ + +void ILI9341_InitDriver() +{ + if (!Settings.display_model) { + Settings.display_model = XDSP_04; + } + + if (XDSP_04 == Settings.display_model) { + + if (Settings.display_width != ILI9341_TFTWIDTH) { + Settings.display_width = ILI9341_TFTWIDTH; + } + if (Settings.display_height != ILI9341_TFTHEIGHT) { + Settings.display_height = ILI9341_TFTHEIGHT; + } + + // disable screen buffer + buffer=NULL; + + // default colors + fg_color = ILI9341_WHITE; + bg_color = ILI9341_BLACK; + +#ifdef USE_M5STACK_CORE2 + // fixed pins on m5stack core2 + ili9341_2 = new ILI9341_2(5, -2, 15, -2); +#else + // check for special case with 2 SPI busses (ESP32 bitcoin) + if (TasmotaGlobal.soft_spi_enabled) { + // init renderer, may use hardware spi, however we use SSPI defintion because SD card uses SPI definition (2 spi busses) + if (PinUsed(GPIO_SSPI_CS) && PinUsed(GPIO_OLED_RESET) && PinUsed(GPIO_BACKLIGHT) && PinUsed(GPIO_SSPI_MOSI) && PinUsed(GPIO_SSPI_MISO) && PinUsed(GPIO_SSPI_SCLK) && PinUsed(GPIO_SSPI_DC)) { + ili9341_2 = new ILI9341_2(Pin(GPIO_SSPI_CS), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_MISO), Pin(GPIO_SSPI_SCLK), Pin(GPIO_OLED_RESET), Pin(GPIO_SSPI_DC), Pin(GPIO_BACKLIGHT), 2); + } else { + return; + } + } else if (TasmotaGlobal.spi_enabled) { + // there are displays without CS + int8_t cs = -1; + if (PinUsed(GPIO_ILI9341_CS)) { + cs = Pin(GPIO_ILI9341_CS); + } + if (PinUsed(GPIO_OLED_RESET) && PinUsed(GPIO_BACKLIGHT) && PinUsed(GPIO_ILI9341_DC)) { + ili9341_2 = new ILI9341_2(Pin(GPIO_ILI9341_CS), Pin(GPIO_SPI_MOSI), Pin(GPIO_SPI_MISO), Pin(GPIO_SPI_CLK), Pin(GPIO_OLED_RESET), Pin(GPIO_ILI9341_DC), Pin(GPIO_BACKLIGHT), 1); + } else { + return; + } + } else { + return; + } +#endif // USE_M5STACK_CORE2 + + ili9341_2->init(Settings.display_width,Settings.display_height); + renderer = ili9341_2; + renderer->DisplayInit(DISPLAY_INIT_MODE,Settings.display_size,Settings.display_rotate,Settings.display_font); + renderer->dim(Settings.display_dimmer); + +#ifdef SHOW_SPLASH + // Welcome text + renderer->setTextFont(2); + renderer->setTextColor(ILI9341_WHITE, ILI9341_BLACK); + renderer->DrawStringAt(30, (Settings.display_height/2)-12, "ILI9341 TFT!", ILI9341_WHITE, 0); + delay(1000); +#endif // SHOW_SPLASH + + color_type = COLOR_COLOR; + +#ifdef ESP32 +#ifdef USE_FT5206 + // start digitizer with fixed adress and pins for esp32 + #undef SDA_2 + #define SDA_2 21 + #undef SCL_2 + #define SCL_2 22 + Wire1.begin(SDA_2, SCL_2, 400000); + Touch_Init(Wire1); +#endif // USE_FT5206 +#endif // ESP32 + +#ifdef USE_DISPLAY_ILI9341 + AddLog(LOG_LEVEL_INFO, PSTR("DSP: ILI9341")); +#else + AddLog(LOG_LEVEL_INFO, PSTR("DSP: ILI9342")); +#endif + } +} + +void core2_disp_pwr(uint8_t on); +void core2_disp_dim(uint8_t dim); + +void ili9342_bpwr(uint8_t on) { +#ifdef USE_M5STACK_CORE2 + core2_disp_pwr(on); +#endif +} + +void ili9342_dimm(uint8_t dim) { +#ifdef USE_M5STACK_CORE2 + core2_disp_dim(dim); +#endif +} + +#ifdef ESP32 +#ifdef USE_FT5206 +#ifdef USE_TOUCH_BUTTONS + +void ili9342_RotConvert(int16_t *x, int16_t *y) { + +int16_t temp; + if (renderer) { + uint8_t rot = renderer->getRotation(); + switch (rot) { + case 0: + break; + case 1: + temp = *y; + *y = renderer->height() - *x; + *x = temp; + break; + case 2: + *x = renderer->width() - *x; + *y = renderer->height() - *y; + break; + case 3: + temp = *y; + *y = *x; + *x = renderer->width() - temp; + break; + } + } +} + +// check digitizer hit +void ili9342_CheckTouch() { +ili9342_ctouch_counter++; + if (2 == ili9342_ctouch_counter) { + // every 100 ms should be enough + ili9342_ctouch_counter = 0; + Touch_Check(ili9342_RotConvert); + } +} +#endif // USE_TOUCH_BUTTONS +#endif // USE_FT5206 +#endif // ESP32 + + +#ifdef USE_DISPLAY_MODES1TO5 + #define TFT_TOP 16 #define TFT_BOTTOM 16 #define TFT_FONT_WIDTH 6 #define TFT_FONT_HEIGTH 8 // Adafruit minimal font heigth pixels -#include -#include -#include // TFT 320x240 and 480x320 - -Adafruit_ILI9341 *tft; - uint16_t tft_top = TFT_TOP; uint16_t tft_bottom = TFT_BOTTOM; uint16_t tft_scroll = TFT_TOP; uint16_t tft_cols = 0; bool tft_init_done = false; -/*********************************************************************************************/ - bool Ili9341Header(void) { if (Settings.display_cols[0] != tft_cols) { tft_cols = Settings.display_cols[0]; @@ -53,107 +205,11 @@ bool Ili9341Header(void) { tft_bottom = 0; } tft_scroll = tft_top; - tft->setScrollMargins(tft_top, tft_bottom); + renderer->setScrollMargins(tft_top, tft_bottom); } return (tft_cols > 17); } -void Ili9341InitMode(void) { - tft->setRotation(Settings.display_rotate); // 0 - tft->invertDisplay(0); - tft->fillScreen(ILI9341_BLACK); - tft->setTextWrap(false); // Allow text to run off edges - tft->cp437(true); - if (!Settings.display_mode) { - tft->setCursor(0, 0); - tft->setTextColor(ILI9341_WHITE, ILI9341_BLACK); - tft->setTextSize(1); - } else { - Ili9341Header(); - tft->setCursor(0, 0); - tft->setTextColor(ILI9341_YELLOW, ILI9341_BLACK); - tft->setTextSize(2); -// tft->println("HEADER"); - - } -} - -void Ili9341Init(uint8_t mode) { - switch(mode) { - case DISPLAY_INIT_MODE: - Ili9341InitMode(); -#ifdef USE_DISPLAY_MODES1TO5 - if (Settings.display_rotate) { - DisplayClearScreenBuffer(); - } -#endif // USE_DISPLAY_MODES1TO5 - break; - case DISPLAY_INIT_PARTIAL: - case DISPLAY_INIT_FULL: - break; - } -} - -void Ili9341InitDriver(void) { - if (PinUsed(GPIO_ILI9341_CS) && PinUsed(GPIO_ILI9341_DC) && TasmotaGlobal.spi_enabled) { - - Settings.display_model = XDSP_04; - - if (Settings.display_width != ILI9341_TFTWIDTH) { - Settings.display_width = ILI9341_TFTWIDTH; - } - if (Settings.display_height != ILI9341_TFTHEIGHT) { - Settings.display_height = ILI9341_TFTHEIGHT; - } - - tft = new Adafruit_ILI9341(Pin(GPIO_ILI9341_CS), Pin(GPIO_ILI9341_DC)); - tft->begin(); - -#ifdef USE_DISPLAY_MODES1TO5 - if (Settings.display_rotate) { - DisplayAllocScreenBuffer(); - } -#endif // USE_DISPLAY_MODES1TO5 - - Ili9341InitMode(); - - tft_init_done = true; - AddLog(LOG_LEVEL_INFO, PSTR("DSP: ILI9341")); - } -} - -void Ili9341Clear(void) { - tft->fillScreen(ILI9341_BLACK); - tft->setCursor(0, 0); -} - -void Ili9341DrawStringAt(uint16_t x, uint16_t y, char *str, uint16_t color, uint8_t flag) { - uint16_t active_color = ILI9341_WHITE; - - tft->setTextSize(Settings.display_size); - if (!flag) { - tft->setCursor(x, y); - } else { - tft->setCursor((x-1) * TFT_FONT_WIDTH * Settings.display_size, (y-1) * TFT_FONT_HEIGTH * Settings.display_size); - } - if (color) { active_color = color; } - tft->setTextColor(active_color, ILI9341_BLACK); - tft->println(str); -} - -void Ili9341DisplayOnOff() { -// tft->showDisplay(disp_power); -// tft->invertDisplay(disp_power); - if (PinUsed(GPIO_BACKLIGHT)) { - pinMode(Pin(GPIO_BACKLIGHT), OUTPUT); - digitalWrite(Pin(GPIO_BACKLIGHT), disp_power); - } -} - -/*********************************************************************************************/ - -#ifdef USE_DISPLAY_MODES1TO5 - void Ili9341PrintLog(void) { disp_refresh--; if (!disp_refresh) { @@ -167,40 +223,40 @@ void Ili9341PrintLog(void) { uint8_t size = Settings.display_size; uint16_t theight = size * TFT_FONT_HEIGTH; - tft->setTextSize(size); - tft->setTextColor(ILI9341_CYAN, ILI9341_BLACK); // Add background color to solve flicker + renderer->setTextSize(size); + renderer->setTextColor(ILI9341_CYAN, ILI9341_BLACK); // Add background color to solve flicker if (!Settings.display_rotate) { // Use hardware scroll - tft->setCursor(0, tft_scroll); - tft->fillRect(0, tft_scroll, tft->width(), theight, ILI9341_BLACK); // Erase line - tft->print(txt); + renderer->setCursor(0, tft_scroll); + renderer->fillRect(0, tft_scroll, renderer->width(), theight, ILI9341_BLACK); // Erase line + renderer->print(txt); tft_scroll += theight; - if (tft_scroll >= (tft->height() - tft_bottom)) { + if (tft_scroll >= (renderer->height() - tft_bottom)) { tft_scroll = tft_top; } - tft->scrollTo(tft_scroll); + renderer->scrollTo(tft_scroll); } else { uint8_t last_row = Settings.display_rows -1; tft_scroll = (tft_top) ? theight : 0; // Start below header - tft->setCursor(0, tft_scroll); + renderer->setCursor(0, tft_scroll); for (uint32_t i = 0; i < last_row; i++) { strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols); // tft->fillRect(0, tft_scroll, tft->width(), theight, ILI9341_BLACK); // Erase line - tft->print(disp_screen_buffer[i]); + renderer->print(disp_screen_buffer[i]); tft_scroll += theight; - tft->setCursor(0, tft_scroll); + renderer->setCursor(0, tft_scroll); delay(1); // Fix background runs heap usage due to long runtime of this loop (up to 1 second) } strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols); DisplayFillScreen(last_row); - tft->print(disp_screen_buffer[last_row]); + renderer->print(disp_screen_buffer[last_row]); } AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION "[%s]"), txt); } } } -void Ili9341Refresh(void) { // Every second +void ILI9341_Refresh(void) { // Every second if (Settings.display_mode) { // Mode 0 is User text // 24-04-2017 13:45:43 = 19 + 1 ('\0') = 20 // 24-04-2017 13:45 = 16 + 1 ('\0') = 17 @@ -212,9 +268,9 @@ void Ili9341Refresh(void) { // Every second char spaces[Settings.display_cols[0] - (8 + time_size)]; char time[time_size]; // 13:45:43 - tft->setTextSize(Settings.display_size); - tft->setTextColor(ILI9341_YELLOW, ILI9341_RED); // Add background color to solve flicker - tft->setCursor(0, 0); + renderer->setTextSize(Settings.display_size); + renderer->setTextColor(ILI9341_YELLOW, ILI9341_RED); // Add background color to solve flicker + renderer->setCursor(0, 0); snprintf_P(date4, sizeof(date4), PSTR("%02d" D_MONTH_DAY_SEPARATOR "%02d" D_YEAR_MONTH_SEPARATOR "%04d"), RtcTime.day_of_month, RtcTime.month, RtcTime.year); memset(spaces, 0x20, sizeof(spaces)); @@ -222,9 +278,9 @@ void Ili9341Refresh(void) { // Every second snprintf_P(time, sizeof(time), PSTR("%02d" D_HOUR_MINUTE_SEPARATOR "%02d" D_MINUTE_SECOND_SEPARATOR "%02d"), RtcTime.hour, RtcTime.minute, RtcTime.second); snprintf_P(tftdt, sizeof(tftdt), PSTR("%s%s%s"), date4, spaces, time); - tft->print(tftdt); + renderer->print(tftdt); } else { - tft->setCursor(0, 0); + renderer->setCursor(0, 0); } switch (Settings.display_mode) { @@ -238,77 +294,44 @@ void Ili9341Refresh(void) { // Every second } } } - #endif // USE_DISPLAY_MODES1TO5 +/*********************************************************************************************/ /*********************************************************************************************\ * Interface \*********************************************************************************************/ - -bool Xdsp04(uint8_t function) { +bool Xdsp04(uint8_t function) +{ bool result = false; if (FUNC_DISPLAY_INIT_DRIVER == function) { - Ili9341InitDriver(); + ILI9341_InitDriver(); } - else if (tft_init_done && (XDSP_04 == Settings.display_model)) { - - if (!dsp_color) { dsp_color = ILI9341_WHITE; } - - switch (function) { - case FUNC_DISPLAY_MODEL: - result = true; - break; - case FUNC_DISPLAY_INIT: - Ili9341Init(dsp_init); - break; - case FUNC_DISPLAY_POWER: - Ili9341DisplayOnOff(); - break; - case FUNC_DISPLAY_CLEAR: - Ili9341Clear(); - break; - case FUNC_DISPLAY_DRAW_HLINE: - tft->writeFastHLine(dsp_x, dsp_y, dsp_len, dsp_color); - break; - case FUNC_DISPLAY_DRAW_VLINE: - tft->writeFastVLine(dsp_x, dsp_y, dsp_len, dsp_color); - break; - case FUNC_DISPLAY_DRAW_LINE: - tft->writeLine(dsp_x, dsp_y, dsp_x2, dsp_y2, dsp_color); - break; - case FUNC_DISPLAY_DRAW_CIRCLE: - tft->drawCircle(dsp_x, dsp_y, dsp_rad, dsp_color); - break; - case FUNC_DISPLAY_FILL_CIRCLE: - tft->fillCircle(dsp_x, dsp_y, dsp_rad, dsp_color); - break; - case FUNC_DISPLAY_DRAW_RECTANGLE: - tft->drawRect(dsp_x, dsp_y, dsp_x2, dsp_y2, dsp_color); - break; - case FUNC_DISPLAY_FILL_RECTANGLE: - tft->fillRect(dsp_x, dsp_y, dsp_x2, dsp_y2, dsp_color); - break; -// case FUNC_DISPLAY_DRAW_FRAME: -// oled->display(); -// break; - case FUNC_DISPLAY_TEXT_SIZE: - tft->setTextSize(Settings.display_size); - break; - case FUNC_DISPLAY_FONT_SIZE: -// tft->setTextSize(Settings.display_font); - break; - case FUNC_DISPLAY_DRAW_STRING: - Ili9341DrawStringAt(dsp_x, dsp_y, dsp_str, dsp_color, dsp_flag); - break; - case FUNC_DISPLAY_ROTATION: - tft->setRotation(Settings.display_rotate); - break; + else if (XDSP_04 == Settings.display_model) { + switch (function) { + case FUNC_DISPLAY_MODEL: + result = true; + break; + case FUNC_DISPLAY_TEXT_SIZE: + case FUNC_DISPLAY_FONT_SIZE: + case DISPLAY_INIT_MODE: + renderer->clearDisplay(); + break; +#ifdef USE_FT5206 +#ifdef USE_TOUCH_BUTTONS + case FUNC_DISPLAY_EVERY_50_MSECOND: + if (FT5206_found) { + ili9342_CheckTouch(); + } + break; +#endif // USE_TOUCH_BUTTONS +#endif // USE_FT5206 #ifdef USE_DISPLAY_MODES1TO5 - case FUNC_DISPLAY_EVERY_SECOND: - Ili9341Refresh(); - break; + case FUNC_DISPLAY_EVERY_SECOND: + ILI9341_Refresh(); + break; #endif // USE_DISPLAY_MODES1TO5 + } } return result; diff --git a/tasmota/xdsp_13_ILI9341-2.ino b/tasmota/xdsp_13_ILI9341-2.ino deleted file mode 100644 index 785dfc51f..000000000 --- a/tasmota/xdsp_13_ILI9341-2.ino +++ /dev/null @@ -1,290 +0,0 @@ -/* - xdsp_13_ILI9341-TTGO-TS.ino - Display ILI9341 support for Tasmota - - Copyright (C) 2021 Gerhard Mutz and Theo Arends - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -//#ifdef USE_SPI -#ifdef USE_SPI -#ifdef USE_DISPLAY -#if (defined(USE_DISPLAY_ILI9341_2) || defined(USE_DISPLAY_ILI9342)) - -#define XDSP_13 13 - -#undef COLORED -#define COLORED 1 -#undef UNCOLORED -#define UNCOLORED 0 - - -// using font 8 is opional (num=3) -// very badly readable, but may be useful for graphs -#undef USE_TINY_FONT -#define USE_TINY_FONT - - -#include - -extern uint8_t *buffer; -extern uint8_t color_type; -ILI9341_2 *ili9341_2; - -#ifdef USE_FT5206 -#include -#undef FT6336_address -#define FT6336_address 0x38 -uint8_t ili9342_ctouch_counter = 0; -#endif // USE_FT5206 - - -/*********************************************************************************************/ - -void ILI9341_2_InitDriver() -{ - if (!Settings.display_model) { - Settings.display_model = XDSP_13; - } - - - if (XDSP_13 == Settings.display_model) { - - if (Settings.display_width != ILI9341_2_TFTWIDTH) { - Settings.display_width = ILI9341_2_TFTWIDTH; - } - if (Settings.display_height != ILI9341_2_TFTHEIGHT) { - Settings.display_height = ILI9341_2_TFTHEIGHT; - } - - // disable screen buffer - buffer=NULL; - - // default colors - fg_color = ILI9341_2_WHITE; - bg_color = ILI9341_2_BLACK; - -#ifdef USE_M5STACK_CORE2 - ili9341_2 = new ILI9341_2(5, -2, 15, -2); -#else - // init renderer, may use hardware spi, however we use SSPI defintion because SD card uses SPI definition (2 spi busses) - if (PinUsed(GPIO_SSPI_CS) && PinUsed(GPIO_OLED_RESET) && PinUsed(GPIO_BACKLIGHT) && PinUsed(GPIO_SSPI_MOSI) && PinUsed(GPIO_SSPI_MISO) && PinUsed(GPIO_SSPI_SCLK) && PinUsed(GPIO_SSPI_DC)) { - ili9341_2 = new ILI9341_2(Pin(GPIO_SSPI_CS), Pin(GPIO_SSPI_MOSI), Pin(GPIO_SSPI_MISO), Pin(GPIO_SSPI_SCLK), Pin(GPIO_OLED_RESET), Pin(GPIO_SSPI_DC), Pin(GPIO_BACKLIGHT)); - } else { - return; - } -#endif - - ili9341_2->init(Settings.display_width,Settings.display_height); - renderer = ili9341_2; - renderer->DisplayInit(DISPLAY_INIT_MODE,Settings.display_size,Settings.display_rotate,Settings.display_font); - renderer->dim(Settings.display_dimmer); - -#ifdef SHOW_SPLASH - // Welcome text - renderer->setTextFont(2); - renderer->setTextColor(ILI9341_2_WHITE, ILI9341_2_BLACK); - renderer->DrawStringAt(30, (Settings.display_height/2)-12, "ILI9341 TFT!", ILI9341_2_WHITE, 0); - delay(1000); -#endif - - color_type = COLOR_COLOR; - -#ifdef ESP32 -#ifdef USE_FT5206 - // start digitizer with fixed adress and pins for esp32 - #define SDA_2 21 - #define SCL_2 22 - Wire1.begin(SDA_2, SCL_2, 400000); - Touch_Init(Wire1); -#endif // USE_FT5206 -#endif // ESP32 - - - } -} - -void core2_disp_pwr(uint8_t on); -void core2_disp_dim(uint8_t dim); - -void ili9342_bpwr(uint8_t on) { -#ifdef USE_M5STACK_CORE2 - core2_disp_pwr(on); -#endif -} - -void ili9342_dimm(uint8_t dim) { -#ifdef USE_M5STACK_CORE2 - core2_disp_dim(dim); -#endif -} - -#ifdef ESP32 -#ifdef USE_FT5206 -#ifdef USE_TOUCH_BUTTONS - -void ili9342_RotConvert(int16_t *x, int16_t *y) { - -int16_t temp; - if (renderer) { - uint8_t rot=renderer->getRotation(); - switch (rot) { - case 0: - break; - case 1: - temp=*y; - *y=renderer->height()-*x; - *x=temp; - break; - case 2: - *x=renderer->width()-*x; - *y=renderer->height()-*y; - break; - case 3: - temp=*y; - *y=*x; - *x=renderer->width()-temp; - break; - } - } -} - -// check digitizer hit -void ili9342_CheckTouch() { -ili9342_ctouch_counter++; - if (2 == ili9342_ctouch_counter) { - // every 100 ms should be enough - ili9342_ctouch_counter = 0; - Touch_Check(ili9342_RotConvert); - } -} -#endif // USE_TOUCH_BUTTONS -#endif // USE_FT5206 -#endif // ESP32 - - -#ifdef USE_DISPLAY_MODES1TO5 - -void ILI9341_2_PrintLog(bool withDateTime) { - disp_refresh--; - if (!disp_refresh) { - disp_refresh = Settings.display_refresh; - if (!disp_screen_buffer_cols) { DisplayAllocScreenBuffer(); } - - char* txt = DisplayLogBuffer('\370'); - if (txt != NULL) { - uint8_t last_row = Settings.display_rows -1; - - renderer->clearDisplay(); /** TODO: Would be smoother without clear, like ILI9341_2_Time() does. **/ - renderer->setCursor(0,0); - - if (withDateTime) { - char line[21]; - snprintf_P(line, sizeof(line), PSTR("%02d" D_HOUR_MINUTE_SEPARATOR "%02d" D_MINUTE_SECOND_SEPARATOR "%02d %02d" D_MONTH_DAY_SEPARATOR "%02d" D_YEAR_MONTH_SEPARATOR "%04d"), RtcTime.hour, RtcTime.minute, RtcTime.second, RtcTime.day_of_month, RtcTime.month, RtcTime.year); // [12:34:56 31-12-2021] - renderer->setTextColor(ILI9341_2_BLUE); - renderer->println(line); - renderer->setTextColor(fg_color); - last_row--; - } - - for (byte i = 0; i < last_row; i++) { - strlcpy(disp_screen_buffer[i], disp_screen_buffer[i +1], disp_screen_buffer_cols); - renderer->println(disp_screen_buffer[i]); - } - strlcpy(disp_screen_buffer[last_row], txt, disp_screen_buffer_cols); - DisplayFillScreen(last_row); - - AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_DEBUG "[%s]"), disp_screen_buffer[last_row]); - - renderer->println(disp_screen_buffer[last_row]); - renderer->Updateframe(); - } - } -} - -void ILI9341_2_Time(void) { - char line[12]; - /** TODO: DisplaySize is working, but renderer->println() does not respect DisplayFont **/ - snprintf_P(line, sizeof(line), PSTR(" %02d" D_HOUR_MINUTE_SEPARATOR "%02d" D_MINUTE_SECOND_SEPARATOR "%02d"), RtcTime.hour, RtcTime.minute, RtcTime.second); // [ 12:34:56 ] - renderer->setCursor(60, 140); - renderer->println(line); - snprintf_P(line, sizeof(line), PSTR("%02d" D_MONTH_DAY_SEPARATOR "%02d" D_YEAR_MONTH_SEPARATOR "%04d"), RtcTime.day_of_month, RtcTime.month, RtcTime.year); // [01-02-2018] - renderer->setCursor(60, 160); - renderer->println(line); - renderer->Updateframe(); -} - -void ILI9341_2_Refresh(void) { // Every second - if (Settings.display_mode) { // Mode 0 is User text - switch (Settings.display_mode) { - case 1: // Time - ILI9341_2_Time(); - break; - case 2: // Local - case 4: // Mqtt - ILI9341_2_PrintLog(false); - break; - case 3: // Local + Time - case 5: // Mqtt + Time - ILI9341_2_PrintLog(true); - break; - } - } -} - -#endif // USE_DISPLAY_MODES1TO5 - -/*********************************************************************************************/ -/*********************************************************************************************\ - * Interface -\*********************************************************************************************/ -bool Xdsp13(uint8_t function) -{ - bool result = false; - - if (FUNC_DISPLAY_INIT_DRIVER == function) { - ILI9341_2_InitDriver(); - } - else if (XDSP_13 == Settings.display_model) { - switch (function) { - case FUNC_DISPLAY_MODEL: - result = true; - break; - case FUNC_DISPLAY_TEXT_SIZE: - case FUNC_DISPLAY_FONT_SIZE: - case DISPLAY_INIT_MODE: - renderer->clearDisplay(); - break; -#ifdef USE_FT5206 -#ifdef USE_TOUCH_BUTTONS - case FUNC_DISPLAY_EVERY_50_MSECOND: - if (FT5206_found) { - ili9342_CheckTouch(); - } - break; -#endif // USE_TOUCH_BUTTONS -#endif // USE_FT5206 -#ifdef USE_DISPLAY_MODES1TO5 - case FUNC_DISPLAY_EVERY_SECOND: - ILI9341_2_Refresh(); - break; -#endif // USE_DISPLAY_MODES1TO5 - } - } - return result; -} - -#endif // USE_DISPLAY_ILI9341_2 -#endif // USE_DISPLAY -#endif // USE_SPI From c5df7ed1ae8905ebed49231f8da4ee05a8fc978a Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Sat, 13 Feb 2021 07:52:21 +0100 Subject: [PATCH 33/41] Update support_tasmota.ino --- tasmota/support_tasmota.ino | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index fe4cf34d8..7318b9076 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -1019,23 +1019,23 @@ void Every250mSeconds(void) if (TasmotaGlobal.ota_state_flag && BACKLOG_EMPTY) { TasmotaGlobal.ota_state_flag--; if (2 == TasmotaGlobal.ota_state_flag) { - RtcSettings.ota_loader = 0; // Try requested image first + RtcSettings.ota_loader = 0; // Try requested image first ota_retry_counter = OTA_ATTEMPTS; ESPhttpUpdate.rebootOnUpdate(false); - SettingsSave(1); // Free flash for OTA update + SettingsSave(1); // Free flash for OTA update } if (TasmotaGlobal.ota_state_flag <= 0) { #ifdef USE_BLE_ESP32 ExtStopBLE(); #endif // USE_BLE_ESP32 #ifdef USE_COUNTER - CounterInterruptDisable(true); // Prevent OTA failures on 100Hz counter interrupts + CounterInterruptDisable(true); // Prevent OTA failures on 100Hz counter interrupts #endif // USE_COUNTER #ifdef USE_WEBSERVER if (Settings.webserver) StopWebserver(); #endif // USE_WEBSERVER #ifdef USE_ARILUX_RF - AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine + AriluxRfDisable(); // Prevent restart exception on Arilux Interrupt routine #endif // USE_ARILUX_RF TasmotaGlobal.ota_state_flag = 92; ota_result = 0; @@ -1043,6 +1043,7 @@ void Every250mSeconds(void) if (ota_retry_counter) { char ota_url[TOPSZ]; strlcpy(TasmotaGlobal.mqtt_data, GetOtaUrl(ota_url, sizeof(ota_url)), sizeof(TasmotaGlobal.mqtt_data)); +#ifdef ESP8266 #ifndef FIRMWARE_MINIMAL if (RtcSettings.ota_loader) { // OTA File too large so try OTA minimal version @@ -1061,8 +1062,8 @@ void Every250mSeconds(void) // Replace http://192.168.2.17:80/api/arduino/tasmota.bin with http://192.168.2.17:80/api/arduino/tasmota-minimal.bin // Replace http://192.168.2.17/api/arduino/tasmota.bin.gz with http://192.168.2.17/api/arduino/tasmota-minimal.bin.gz - char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it - if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only + char *bch = strrchr(TasmotaGlobal.mqtt_data, '/'); // Only consider filename after last backslash prevent change of urls having "-" in it + if (bch == nullptr) { bch = TasmotaGlobal.mqtt_data; } // No path found so use filename only char *ech = strchr(bch, '.'); // Find file type in filename (none, .ino.bin, .ino.bin.gz, .bin, .bin.gz or .gz) if (ech == nullptr) { ech = TasmotaGlobal.mqtt_data + strlen(TasmotaGlobal.mqtt_data); } // Point to '/0' at end of mqtt_data becoming an empty string @@ -1077,6 +1078,14 @@ void Every250mSeconds(void) snprintf_P(TasmotaGlobal.mqtt_data, sizeof(TasmotaGlobal.mqtt_data), PSTR("%s-" D_JSON_MINIMAL "%s"), TasmotaGlobal.mqtt_data, ota_url_type); // Minimal filename must be filename-minimal } #endif // FIRMWARE_MINIMAL + if (ota_retry_counter < OTA_ATTEMPTS / 2) { + if (!strcasecmp_P(TasmotaGlobal.mqtt_data, PSTR(".gz"))) { + ota_retry_counter = 1; + } else { + strcat_P(TasmotaGlobal.mqtt_data, PSTR(".gz")); + } + } +#endif // ESP8266 AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_UPLOAD "%s"), TasmotaGlobal.mqtt_data); WiFiClient OTAclient; ota_result = (HTTP_UPDATE_FAILED != ESPhttpUpdate.update(OTAclient, TasmotaGlobal.mqtt_data)); @@ -1084,26 +1093,28 @@ void Every250mSeconds(void) #ifndef FIRMWARE_MINIMAL int ota_error = ESPhttpUpdate.getLastError(); DEBUG_CORE_LOG(PSTR("OTA: Error %d"), ota_error); +#ifdef ESP8266 if ((HTTP_UE_TOO_LESS_SPACE == ota_error) || (HTTP_UE_BIN_FOR_WRONG_FLASH == ota_error)) { - RtcSettings.ota_loader = 1; // Try minimal image next + RtcSettings.ota_loader = 1; // Try minimal image next } +#endif // ESP8266 #endif // FIRMWARE_MINIMAL - TasmotaGlobal.ota_state_flag = 2; // Upgrade failed - retry + TasmotaGlobal.ota_state_flag = 2; // Upgrade failed - retry } } } - if (90 == TasmotaGlobal.ota_state_flag) { // Allow MQTT to reconnect + if (90 == TasmotaGlobal.ota_state_flag) { // Allow MQTT to reconnect TasmotaGlobal.ota_state_flag = 0; Response_P(PSTR("{\"" D_CMND_UPGRADE "\":\"")); if (ota_result) { -// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285 +// SetFlashModeDout(); // Force DOUT for both ESP8266 and ESP8285 ResponseAppend_P(PSTR(D_JSON_SUCCESSFUL ". " D_JSON_RESTARTING)); TasmotaGlobal.restart_flag = 2; } else { ResponseAppend_P(PSTR(D_JSON_FAILED " %s"), ESPhttpUpdate.getLastErrorString().c_str()); } ResponseAppend_P(PSTR("\"}")); -// TasmotaGlobal.restart_flag = 2; // Restart anyway to keep memory clean webserver +// TasmotaGlobal.restart_flag = 2; // Restart anyway to keep memory clean webserver MqttPublishPrefixTopic_P(STAT, PSTR(D_CMND_UPGRADE)); #ifdef USE_COUNTER CounterInterruptDisable(false); From 2220b2d3e339e6784abd205f50936e2d59926ad2 Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sat, 13 Feb 2021 12:01:45 +0100 Subject: [PATCH 34/41] Berry language improved Tasmota integration --- CHANGELOG.md | 1 + .../Berry-0.1.10/generate/be_const_strtab.h | 239 +++++----- .../generate/be_const_strtab_def.h | 340 +++++++------- .../generate/be_fixed_be_class_map.h | 21 +- .../Berry-0.1.10/generate/be_fixed_string.h | 16 +- lib/lib_div/Berry-0.1.10/src/be_gc.h | 8 +- lib/lib_div/Berry-0.1.10/src/be_lexer.c | 3 +- lib/lib_div/Berry-0.1.10/src/be_maplib.c | 33 ++ lib/lib_div/Berry-0.1.10/src/be_object.h | 31 ++ lib/lib_div/Berry-0.1.10/src/be_parser.c | 2 +- lib/lib_div/Berry-0.1.10/src/be_string.c | 19 +- lib/lib_div/Berry-0.1.10/src/be_string.h | 2 +- lib/lib_div/Berry-0.1.10/src/be_strlib.c | 41 +- lib/lib_div/Berry-0.1.10/src/be_vector.c | 8 +- lib/lib_div/Berry-0.1.10/src/port/be_modtab.c | 5 + lib/lib_div/Berry-0.1.10/src/port/be_port.cpp | 63 ++- .../Berry-0.1.10/src/port/be_tasmotalib.c | 34 ++ .../Berry-0.1.10/src/port/berry_conf.h | 14 +- tasmota/berry/tasmota.be | 157 +++++++ tasmota/support_command.ino | 78 +++- tasmota/tasmota.h | 4 +- tasmota/xdrv_52_berry.ino | 416 +++++++++++++++--- tasmota/xdrv_interface.ino | 7 + 23 files changed, 1081 insertions(+), 461 deletions(-) create mode 100644 lib/lib_div/Berry-0.1.10/src/port/be_tasmotalib.c create mode 100644 tasmota/berry/tasmota.be diff --git a/CHANGELOG.md b/CHANGELOG.md index 671dbbc94..196566592 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file. - Support for Eastron SDM72D-M three phase 100A Modbus energy meter (#10862) - Support for Frysk language translations by Christiaan Heerze - ESP8266 Fallback to ``*.bin.gz`` binary when OTA upload of ``*.bin`` binary fails +- Berry language improved Tasmota integration ## [9.2.0.6] 20210210 ### Changed diff --git a/lib/lib_div/Berry-0.1.10/generate/be_const_strtab.h b/lib/lib_div/Berry-0.1.10/generate/be_const_strtab.h index df695ac4a..9234199bb 100644 --- a/lib/lib_div/Berry-0.1.10/generate/be_const_strtab.h +++ b/lib/lib_div/Berry-0.1.10/generate/be_const_strtab.h @@ -1,125 +1,128 @@ -extern const bcstring be_const_str_count; -extern const bcstring be_const_str_rad; -extern const bcstring be_const_str_str; -extern const bcstring be_const_str_import; -extern const bcstring be_const_str_opt_connect; -extern const bcstring be_const_str_open; -extern const bcstring be_const_str_codedump; -extern const bcstring be_const_str_imax; -extern const bcstring be_const_str_item; -extern const bcstring be_const_str_splitext; -extern const bcstring be_const_str___upper__; -extern const bcstring be_const_str_byte; -extern const bcstring be_const_str_isfile; -extern const bcstring be_const_str_issubclass; -extern const bcstring be_const_str_iter; -extern const bcstring be_const_str_classname; -extern const bcstring be_const_str_cos; -extern const bcstring be_const_str_number; -extern const bcstring be_const_str_true; -extern const bcstring be_const_str_hex; -extern const bcstring be_const_str_range; -extern const bcstring be_const_str_cosh; -extern const bcstring be_const_str_exp; -extern const bcstring be_const_str_exit; -extern const bcstring be_const_str_list; -extern const bcstring be_const_str_path; -extern const bcstring be_const_str_dot_p; -extern const bcstring be_const_str___iterator__; -extern const bcstring be_const_str_dump; -extern const bcstring be_const_str_deinit; -extern const bcstring be_const_str_size; -extern const bcstring be_const_str_false; -extern const bcstring be_const_str_clock; -extern const bcstring be_const_str_floor; -extern const bcstring be_const_str_module; -extern const bcstring be_const_str_tostring; -extern const bcstring be_const_str_type; -extern const bcstring be_const_str_upvname; -extern const bcstring be_const_str_opt_add; -extern const bcstring be_const_str___lower__; -extern const bcstring be_const_str_pi; -extern const bcstring be_const_str_assert; -extern const bcstring be_const_str_ceil; -extern const bcstring be_const_str_setitem; -extern const bcstring be_const_str_except; -extern const bcstring be_const_str_pow; -extern const bcstring be_const_str_sin; -extern const bcstring be_const_str_traceback; extern const bcstring be_const_str_calldepth; -extern const bcstring be_const_str_classof; -extern const bcstring be_const_str_init; -extern const bcstring be_const_str_sinh; -extern const bcstring be_const_str_split; -extern const bcstring be_const_str_raise; -extern const bcstring be_const_str_map; -extern const bcstring be_const_str_srand; -extern const bcstring be_const_str_allocated; -extern const bcstring be_const_str_asin; -extern const bcstring be_const_str_int; -extern const bcstring be_const_str_lower; -extern const bcstring be_const_str_var; -extern const bcstring be_const_str_abs; -extern const bcstring be_const_str_deg; -extern const bcstring be_const_str_setrange; -extern const bcstring be_const_str_time; -extern const bcstring be_const_str_real; -extern const bcstring be_const_str_end; -extern const bcstring be_const_str_isdir; -extern const bcstring be_const_str_; -extern const bcstring be_const_str_getcwd; -extern const bcstring be_const_str_attrdump; -extern const bcstring be_const_str_copy; -extern const bcstring be_const_str_imin; +extern const bcstring be_const_str_clock; +extern const bcstring be_const_str_size; extern const bcstring be_const_str_system; -extern const bcstring be_const_str_top; -extern const bcstring be_const_str_nil; -extern const bcstring be_const_str_push; -extern const bcstring be_const_str_remove; -extern const bcstring be_const_str_compile; -extern const bcstring be_const_str_atan; -extern const bcstring be_const_str_class; -extern const bcstring be_const_str_insert; -extern const bcstring be_const_str_pop; -extern const bcstring be_const_str_tanh; -extern const bcstring be_const_str_chdir; -extern const bcstring be_const_str_load; -extern const bcstring be_const_str_log; -extern const bcstring be_const_str_varname; -extern const bcstring be_const_str_find; -extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_type; extern const bcstring be_const_str_if; -extern const bcstring be_const_str_super; -extern const bcstring be_const_str_break; -extern const bcstring be_const_str_do; -extern const bcstring be_const_str_else; -extern const bcstring be_const_str_for; +extern const bcstring be_const_str_int; +extern const bcstring be_const_str_isfile; +extern const bcstring be_const_str_log; +extern const bcstring be_const_str_raise; extern const bcstring be_const_str_concat; -extern const bcstring be_const_str_resize; -extern const bcstring be_const_str_reverse; -extern const bcstring be_const_str_while; -extern const bcstring be_const_str_input; -extern const bcstring be_const_str_sqrt; -extern const bcstring be_const_str_elif; -extern const bcstring be_const_str_log10; -extern const bcstring be_const_str_print; -extern const bcstring be_const_str_continue; -extern const bcstring be_const_str_collect; -extern const bcstring be_const_str_clear; -extern const bcstring be_const_str_rand; -extern const bcstring be_const_str_opt_neq; -extern const bcstring be_const_str_opt_eq; -extern const bcstring be_const_str_acos; -extern const bcstring be_const_str_listdir; +extern const bcstring be_const_str_list; +extern const bcstring be_const_str_map; +extern const bcstring be_const_str_for; +extern const bcstring be_const_str_dot_p; +extern const bcstring be_const_str_isdir; extern const bcstring be_const_str_mkdir; -extern const bcstring be_const_str_sethook; -extern const bcstring be_const_str_tan; -extern const bcstring be_const_str_def; -extern const bcstring be_const_str_char; -extern const bcstring be_const_str_exists; -extern const bcstring be_const_str_join; -extern const bcstring be_const_str_as; +extern const bcstring be_const_str_remove; +extern const bcstring be_const_str_cosh; +extern const bcstring be_const_str_abs; +extern const bcstring be_const_str_reverse; +extern const bcstring be_const_str_sinh; +extern const bcstring be_const_str_hex; +extern const bcstring be_const_str_tostring; +extern const bcstring be_const_str_opt_add; +extern const bcstring be_const_str_atan; +extern const bcstring be_const_str_real; +extern const bcstring be_const_str_iter; +extern const bcstring be_const_str_top; +extern const bcstring be_const_str_except; +extern const bcstring be_const_str_getcwd; +extern const bcstring be_const_str_listdir; +extern const bcstring be_const_str_log10; +extern const bcstring be_const_str_allocated; +extern const bcstring be_const_str_init; +extern const bcstring be_const_str_module; +extern const bcstring be_const_str_ceil; +extern const bcstring be_const_str_clear; +extern const bcstring be_const_str_collect; +extern const bcstring be_const_str_find; +extern const bcstring be_const_str_item; extern const bcstring be_const_str_format; -extern const bcstring be_const_str_try; -extern const bcstring be_const_str_upper; +extern const bcstring be_const_str_sqrt; +extern const bcstring be_const_str_classname; +extern const bcstring be_const_str_byte; +extern const bcstring be_const_str_else; +extern const bcstring be_const_str_deinit; +extern const bcstring be_const_str_end; +extern const bcstring be_const_str_true; +extern const bcstring be_const_str___upper__; +extern const bcstring be_const_str_char; +extern const bcstring be_const_str_load; +extern const bcstring be_const_str_resize; +extern const bcstring be_const_str_sethook; +extern const bcstring be_const_str_varname; +extern const bcstring be_const_str_deg; +extern const bcstring be_const_str_srand; +extern const bcstring be_const_str_str; +extern const bcstring be_const_str_range; +extern const bcstring be_const_str_toupper; +extern const bcstring be_const_str_; +extern const bcstring be_const_str_copy; +extern const bcstring be_const_str_exp; +extern const bcstring be_const_str_time; +extern const bcstring be_const_str_break; +extern const bcstring be_const_str_opt_neq; +extern const bcstring be_const_str_assert; +extern const bcstring be_const_str_attrdump; +extern const bcstring be_const_str_chdir; +extern const bcstring be_const_str_isinstance; +extern const bcstring be_const_str_continue; +extern const bcstring be_const_str_do; +extern const bcstring be_const_str_lower; +extern const bcstring be_const_str_pow; +extern const bcstring be_const_str_false; +extern const bcstring be_const_str_count; +extern const bcstring be_const_str_exit; +extern const bcstring be_const_str_print; +extern const bcstring be_const_str_def; +extern const bcstring be_const_str_pop; +extern const bcstring be_const_str_tolower; +extern const bcstring be_const_str_classof; +extern const bcstring be_const_str_cos; +extern const bcstring be_const_str_dump; +extern const bcstring be_const_str_join; +extern const bcstring be_const_str_push; +extern const bcstring be_const_str_sin; extern const bcstring be_const_str_return; +extern const bcstring be_const_str_path; +extern const bcstring be_const_str_rand; +extern const bcstring be_const_str_class; +extern const bcstring be_const_str_nil; +extern const bcstring be_const_str_input; +extern const bcstring be_const_str_floor; +extern const bcstring be_const_str_keys; +extern const bcstring be_const_str_number; +extern const bcstring be_const_str_rad; +extern const bcstring be_const_str_imin; +extern const bcstring be_const_str_pi; +extern const bcstring be_const_str_splitext; +extern const bcstring be_const_str_compile; +extern const bcstring be_const_str_setrange; +extern const bcstring be_const_str_traceback; +extern const bcstring be_const_str_upper; +extern const bcstring be_const_str_var; +extern const bcstring be_const_str_opt_eq; +extern const bcstring be_const_str_codedump; +extern const bcstring be_const_str_tan; +extern const bcstring be_const_str_setitem; +extern const bcstring be_const_str_tanh; +extern const bcstring be_const_str_as; +extern const bcstring be_const_str_issubclass; +extern const bcstring be_const_str_upvname; +extern const bcstring be_const_str_opt_connect; +extern const bcstring be_const_str_try; +extern const bcstring be_const_str_while; +extern const bcstring be_const_str_import; +extern const bcstring be_const_str___lower__; +extern const bcstring be_const_str_open; +extern const bcstring be_const_str_acos; +extern const bcstring be_const_str_asin; +extern const bcstring be_const_str_imax; +extern const bcstring be_const_str_insert; +extern const bcstring be_const_str_split; +extern const bcstring be_const_str___iterator__; +extern const bcstring be_const_str_exists; +extern const bcstring be_const_str_super; +extern const bcstring be_const_str_elif; diff --git a/lib/lib_div/Berry-0.1.10/generate/be_const_strtab_def.h b/lib/lib_div/Berry-0.1.10/generate/be_const_strtab_def.h index f3503a6f5..25b5b9221 100644 --- a/lib/lib_div/Berry-0.1.10/generate/be_const_strtab_def.h +++ b/lib/lib_div/Berry-0.1.10/generate/be_const_strtab_def.h @@ -1,186 +1,190 @@ -be_define_const_str(count, "count", 967958004u, 0, 5, &be_const_str_rad); -be_define_const_str(rad, "rad", 1358899048u, 0, 3, &be_const_str_str); -be_define_const_str(str, "str", 3259748752u, 0, 3, &be_const_str_import); -be_define_const_str(import, "import", 288002260u, 66, 6, NULL); -be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, &be_const_str_open); -be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); -be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_imax); -be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_item); -be_define_const_str(item, "item", 2671260646u, 0, 4, &be_const_str_splitext); -be_define_const_str(splitext, "splitext", 2150391934u, 0, 8, NULL); -be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, &be_const_str_byte); -be_define_const_str(byte, "byte", 1683620383u, 0, 4, &be_const_str_isfile); -be_define_const_str(isfile, "isfile", 3131505107u, 0, 6, &be_const_str_issubclass); -be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_iter); -be_define_const_str(iter, "iter", 3124256359u, 0, 4, NULL); -be_define_const_str(classname, "classname", 1998589948u, 0, 9, &be_const_str_cos); -be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_number); -be_define_const_str(number, "number", 467038368u, 0, 6, NULL); -be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); -be_define_const_str(hex, "hex", 4273249610u, 0, 3, &be_const_str_range); -be_define_const_str(range, "range", 4208725202u, 0, 5, NULL); -be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, &be_const_str_exp); -be_define_const_str(exp, "exp", 1923516200u, 0, 3, NULL); -be_define_const_str(exit, "exit", 3454868101u, 0, 4, &be_const_str_list); -be_define_const_str(list, "list", 217798785u, 0, 4, NULL); -be_define_const_str(path, "path", 2223459638u, 0, 4, NULL); -be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str___iterator__); -be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_dump); -be_define_const_str(dump, "dump", 3663001223u, 0, 4, NULL); -be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_size); -be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_false); -be_define_const_str(false, "false", 184981848u, 62, 5, NULL); -be_define_const_str(clock, "clock", 363073373u, 0, 5, &be_const_str_floor); -be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_module); -be_define_const_str(module, "module", 3617558685u, 0, 6, &be_const_str_tostring); -be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, &be_const_str_type); -be_define_const_str(type, "type", 1361572173u, 0, 4, &be_const_str_upvname); -be_define_const_str(upvname, "upvname", 3848760617u, 0, 7, NULL); -be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str___lower__); -be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_pi); -be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); -be_define_const_str(assert, "assert", 2774883451u, 0, 6, NULL); -be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_setitem); -be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, &be_const_str_except); -be_define_const_str(except, "except", 950914032u, 69, 6, NULL); -be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_sin); -be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_traceback); -be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, NULL); -be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_classof); -be_define_const_str(classof, "classof", 1796577762u, 0, 7, NULL); -be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_sinh); -be_define_const_str(sinh, "sinh", 282220607u, 0, 4, &be_const_str_split); -be_define_const_str(split, "split", 2276994531u, 0, 5, &be_const_str_raise); -be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); -be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_srand); -be_define_const_str(srand, "srand", 465518633u, 0, 5, NULL); -be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_asin); -be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_int); -be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_lower); -be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_var); -be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); -be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_deg); -be_define_const_str(deg, "deg", 3327754271u, 0, 3, NULL); -be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_time); -be_define_const_str(time, "time", 1564253156u, 0, 4, NULL); -be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); -be_define_const_str(end, "end", 1787721130u, 56, 3, NULL); -be_define_const_str(isdir, "isdir", 2340917412u, 0, 5, NULL); -be_define_const_str(, "", 2166136261u, 0, 0, NULL); -be_define_const_str(getcwd, "getcwd", 652026575u, 0, 6, NULL); -be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_copy); -be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_imin); -be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_system); -be_define_const_str(system, "system", 1226705564u, 0, 6, &be_const_str_top); -be_define_const_str(top, "top", 2802900028u, 0, 3, &be_const_str_nil); -be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); -be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_remove); -be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); -be_define_const_str(compile, "compile", 1000265118u, 0, 7, NULL); -be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_class); -be_define_const_str(class, "class", 2872970239u, 57, 5, NULL); -be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_pop); -be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_tanh); -be_define_const_str(tanh, "tanh", 153638352u, 0, 4, NULL); -be_define_const_str(chdir, "chdir", 806634853u, 0, 5, &be_const_str_load); -be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_log); -be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_varname); -be_define_const_str(varname, "varname", 2273276445u, 0, 7, NULL); -be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_isinstance); -be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_if); +be_define_const_str(calldepth, "calldepth", 3122364302u, 0, 9, &be_const_str_clock); +be_define_const_str(clock, "clock", 363073373u, 0, 5, &be_const_str_size); +be_define_const_str(size, "size", 597743964u, 0, 4, &be_const_str_system); +be_define_const_str(system, "system", 1226705564u, 0, 6, &be_const_str_type); +be_define_const_str(type, "type", 1361572173u, 0, 4, &be_const_str_if); be_define_const_str(if, "if", 959999494u, 50, 2, NULL); -be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_break); -be_define_const_str(break, "break", 3378807160u, 58, 5, &be_const_str_do); -be_define_const_str(do, "do", 1646057492u, 65, 2, &be_const_str_else); -be_define_const_str(else, "else", 3183434736u, 52, 4, &be_const_str_for); +be_define_const_str(int, "int", 2515107422u, 0, 3, &be_const_str_isfile); +be_define_const_str(isfile, "isfile", 3131505107u, 0, 6, &be_const_str_log); +be_define_const_str(log, "log", 1062293841u, 0, 3, &be_const_str_raise); +be_define_const_str(raise, "raise", 1593437475u, 70, 5, NULL); +be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_list); +be_define_const_str(list, "list", 217798785u, 0, 4, &be_const_str_map); +be_define_const_str(map, "map", 3751997361u, 0, 3, &be_const_str_for); be_define_const_str(for, "for", 2901640080u, 54, 3, NULL); -be_define_const_str(concat, "concat", 4124019837u, 0, 6, &be_const_str_resize); -be_define_const_str(resize, "resize", 3514612129u, 0, 6, &be_const_str_reverse); -be_define_const_str(reverse, "reverse", 558918661u, 0, 7, NULL); -be_define_const_str(while, "while", 231090382u, 53, 5, NULL); -be_define_const_str(input, "input", 4191711099u, 0, 5, &be_const_str_sqrt); -be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, &be_const_str_elif); -be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); -be_define_const_str(log10, "log10", 2346846000u, 0, 5, &be_const_str_print); -be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_continue); -be_define_const_str(continue, "continue", 2977070660u, 59, 8, NULL); -be_define_const_str(collect, "collect", 2399039025u, 0, 7, NULL); -be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_rand); -be_define_const_str(rand, "rand", 2711325910u, 0, 4, NULL); -be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_opt_eq); -be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, &be_const_str_acos); -be_define_const_str(acos, "acos", 1006755615u, 0, 4, NULL); -be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_mkdir); -be_define_const_str(mkdir, "mkdir", 2883839448u, 0, 5, &be_const_str_sethook); -be_define_const_str(sethook, "sethook", 3963967276u, 0, 7, &be_const_str_tan); -be_define_const_str(tan, "tan", 2633446552u, 0, 3, &be_const_str_def); +be_define_const_str(dot_p, ".p", 1171526419u, 0, 2, &be_const_str_isdir); +be_define_const_str(isdir, "isdir", 2340917412u, 0, 5, &be_const_str_mkdir); +be_define_const_str(mkdir, "mkdir", 2883839448u, 0, 5, &be_const_str_remove); +be_define_const_str(remove, "remove", 3683784189u, 0, 6, NULL); +be_define_const_str(cosh, "cosh", 4099687964u, 0, 4, NULL); +be_define_const_str(abs, "abs", 709362235u, 0, 3, &be_const_str_reverse); +be_define_const_str(reverse, "reverse", 558918661u, 0, 7, &be_const_str_sinh); +be_define_const_str(sinh, "sinh", 282220607u, 0, 4, NULL); +be_define_const_str(hex, "hex", 4273249610u, 0, 3, NULL); +be_define_const_str(tostring, "tostring", 2299708645u, 0, 8, NULL); +be_define_const_str(opt_add, "+", 772578730u, 0, 1, &be_const_str_atan); +be_define_const_str(atan, "atan", 108579519u, 0, 4, &be_const_str_real); +be_define_const_str(real, "real", 3604983901u, 0, 4, NULL); +be_define_const_str(iter, "iter", 3124256359u, 0, 4, &be_const_str_top); +be_define_const_str(top, "top", 2802900028u, 0, 3, &be_const_str_except); +be_define_const_str(except, "except", 950914032u, 69, 6, NULL); +be_define_const_str(getcwd, "getcwd", 652026575u, 0, 6, &be_const_str_listdir); +be_define_const_str(listdir, "listdir", 2005220720u, 0, 7, &be_const_str_log10); +be_define_const_str(log10, "log10", 2346846000u, 0, 5, NULL); +be_define_const_str(allocated, "allocated", 429986098u, 0, 9, &be_const_str_init); +be_define_const_str(init, "init", 380752755u, 0, 4, &be_const_str_module); +be_define_const_str(module, "module", 3617558685u, 0, 6, NULL); +be_define_const_str(ceil, "ceil", 1659167240u, 0, 4, &be_const_str_clear); +be_define_const_str(clear, "clear", 1550717474u, 0, 5, &be_const_str_collect); +be_define_const_str(collect, "collect", 2399039025u, 0, 7, &be_const_str_find); +be_define_const_str(find, "find", 3186656602u, 0, 4, &be_const_str_item); +be_define_const_str(item, "item", 2671260646u, 0, 4, NULL); +be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_sqrt); +be_define_const_str(sqrt, "sqrt", 2112764879u, 0, 4, NULL); +be_define_const_str(classname, "classname", 1998589948u, 0, 9, NULL); +be_define_const_str(byte, "byte", 1683620383u, 0, 4, NULL); +be_define_const_str(else, "else", 3183434736u, 52, 4, NULL); +be_define_const_str(deinit, "deinit", 2345559592u, 0, 6, &be_const_str_end); +be_define_const_str(end, "end", 1787721130u, 56, 3, &be_const_str_true); +be_define_const_str(true, "true", 1303515621u, 61, 4, NULL); +be_define_const_str(__upper__, "__upper__", 3612202883u, 0, 9, NULL); +be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_load); +be_define_const_str(load, "load", 3859241449u, 0, 4, &be_const_str_resize); +be_define_const_str(resize, "resize", 3514612129u, 0, 6, &be_const_str_sethook); +be_define_const_str(sethook, "sethook", 3963967276u, 0, 7, &be_const_str_varname); +be_define_const_str(varname, "varname", 2273276445u, 0, 7, NULL); +be_define_const_str(deg, "deg", 3327754271u, 0, 3, &be_const_str_srand); +be_define_const_str(srand, "srand", 465518633u, 0, 5, &be_const_str_str); +be_define_const_str(str, "str", 3259748752u, 0, 3, NULL); +be_define_const_str(range, "range", 4208725202u, 0, 5, &be_const_str_toupper); +be_define_const_str(toupper, "toupper", 3691983576u, 0, 7, NULL); +be_define_const_str(, "", 2166136261u, 0, 0, &be_const_str_copy); +be_define_const_str(copy, "copy", 3848464964u, 0, 4, &be_const_str_exp); +be_define_const_str(exp, "exp", 1923516200u, 0, 3, &be_const_str_time); +be_define_const_str(time, "time", 1564253156u, 0, 4, &be_const_str_break); +be_define_const_str(break, "break", 3378807160u, 58, 5, NULL); +be_define_const_str(opt_neq, "!=", 2428715011u, 0, 2, &be_const_str_assert); +be_define_const_str(assert, "assert", 2774883451u, 0, 6, &be_const_str_attrdump); +be_define_const_str(attrdump, "attrdump", 1521571304u, 0, 8, &be_const_str_chdir); +be_define_const_str(chdir, "chdir", 806634853u, 0, 5, &be_const_str_isinstance); +be_define_const_str(isinstance, "isinstance", 3669352738u, 0, 10, &be_const_str_continue); +be_define_const_str(continue, "continue", 2977070660u, 59, 8, &be_const_str_do); +be_define_const_str(do, "do", 1646057492u, 65, 2, NULL); +be_define_const_str(lower, "lower", 3038577850u, 0, 5, &be_const_str_pow); +be_define_const_str(pow, "pow", 1479764693u, 0, 3, &be_const_str_false); +be_define_const_str(false, "false", 184981848u, 62, 5, NULL); +be_define_const_str(count, "count", 967958004u, 0, 5, NULL); +be_define_const_str(exit, "exit", 3454868101u, 0, 4, &be_const_str_print); +be_define_const_str(print, "print", 372738696u, 0, 5, &be_const_str_def); be_define_const_str(def, "def", 3310976652u, 55, 3, NULL); -be_define_const_str(char, "char", 2823553821u, 0, 4, &be_const_str_exists); -be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_join); -be_define_const_str(join, "join", 3374496889u, 0, 4, &be_const_str_as); -be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); -be_define_const_str(format, "format", 3114108242u, 0, 6, &be_const_str_try); -be_define_const_str(try, "try", 2887626766u, 68, 3, NULL); -be_define_const_str(upper, "upper", 176974407u, 0, 5, &be_const_str_return); +be_define_const_str(pop, "pop", 1362321360u, 0, 3, &be_const_str_tolower); +be_define_const_str(tolower, "tolower", 1042520049u, 0, 7, NULL); +be_define_const_str(classof, "classof", 1796577762u, 0, 7, &be_const_str_cos); +be_define_const_str(cos, "cos", 4220379804u, 0, 3, &be_const_str_dump); +be_define_const_str(dump, "dump", 3663001223u, 0, 4, &be_const_str_join); +be_define_const_str(join, "join", 3374496889u, 0, 4, &be_const_str_push); +be_define_const_str(push, "push", 2272264157u, 0, 4, &be_const_str_sin); +be_define_const_str(sin, "sin", 3761252941u, 0, 3, &be_const_str_return); be_define_const_str(return, "return", 2246981567u, 60, 6, NULL); +be_define_const_str(path, "path", 2223459638u, 0, 4, &be_const_str_rand); +be_define_const_str(rand, "rand", 2711325910u, 0, 4, &be_const_str_class); +be_define_const_str(class, "class", 2872970239u, 57, 5, &be_const_str_nil); +be_define_const_str(nil, "nil", 228849900u, 63, 3, NULL); +be_define_const_str(input, "input", 4191711099u, 0, 5, NULL); +be_define_const_str(floor, "floor", 3102149661u, 0, 5, &be_const_str_keys); +be_define_const_str(keys, "keys", 4182378701u, 0, 4, &be_const_str_number); +be_define_const_str(number, "number", 467038368u, 0, 6, &be_const_str_rad); +be_define_const_str(rad, "rad", 1358899048u, 0, 3, NULL); +be_define_const_str(imin, "imin", 2714127864u, 0, 4, &be_const_str_pi); +be_define_const_str(pi, "pi", 1213090802u, 0, 2, NULL); +be_define_const_str(splitext, "splitext", 2150391934u, 0, 8, NULL); +be_define_const_str(compile, "compile", 1000265118u, 0, 7, &be_const_str_setrange); +be_define_const_str(setrange, "setrange", 3794019032u, 0, 8, &be_const_str_traceback); +be_define_const_str(traceback, "traceback", 3385188109u, 0, 9, &be_const_str_upper); +be_define_const_str(upper, "upper", 176974407u, 0, 5, &be_const_str_var); +be_define_const_str(var, "var", 2317739966u, 64, 3, NULL); +be_define_const_str(opt_eq, "==", 2431966415u, 0, 2, NULL); +be_define_const_str(codedump, "codedump", 1786337906u, 0, 8, &be_const_str_tan); +be_define_const_str(tan, "tan", 2633446552u, 0, 3, NULL); +be_define_const_str(setitem, "setitem", 1554834596u, 0, 7, NULL); +be_define_const_str(tanh, "tanh", 153638352u, 0, 4, &be_const_str_as); +be_define_const_str(as, "as", 1579491469u, 67, 2, NULL); +be_define_const_str(issubclass, "issubclass", 4078395519u, 0, 10, &be_const_str_upvname); +be_define_const_str(upvname, "upvname", 3848760617u, 0, 7, NULL); +be_define_const_str(opt_connect, "..", 2748622605u, 0, 2, NULL); +be_define_const_str(try, "try", 2887626766u, 68, 3, &be_const_str_while); +be_define_const_str(while, "while", 231090382u, 53, 5, NULL); +be_define_const_str(import, "import", 288002260u, 66, 6, NULL); +be_define_const_str(__lower__, "__lower__", 123855590u, 0, 9, &be_const_str_open); +be_define_const_str(open, "open", 3546203337u, 0, 4, NULL); +be_define_const_str(acos, "acos", 1006755615u, 0, 4, &be_const_str_asin); +be_define_const_str(asin, "asin", 4272848550u, 0, 4, &be_const_str_imax); +be_define_const_str(imax, "imax", 3084515410u, 0, 4, &be_const_str_insert); +be_define_const_str(insert, "insert", 3332609576u, 0, 6, &be_const_str_split); +be_define_const_str(split, "split", 2276994531u, 0, 5, NULL); +be_define_const_str(__iterator__, "__iterator__", 3884039703u, 0, 12, &be_const_str_exists); +be_define_const_str(exists, "exists", 1002329533u, 0, 6, &be_const_str_super); +be_define_const_str(super, "super", 4152230356u, 0, 5, &be_const_str_elif); +be_define_const_str(elif, "elif", 3232090307u, 51, 4, NULL); static const bstring* const m_string_table[] = { - (const bstring *)&be_const_str_count, - (const bstring *)&be_const_str_opt_connect, - (const bstring *)&be_const_str_codedump, - (const bstring *)&be_const_str___upper__, - (const bstring *)&be_const_str_classname, - (const bstring *)&be_const_str_true, - (const bstring *)&be_const_str_hex, + (const bstring *)&be_const_str_calldepth, + (const bstring *)&be_const_str_int, + (const bstring *)&be_const_str_concat, + (const bstring *)&be_const_str_dot_p, NULL, (const bstring *)&be_const_str_cosh, - (const bstring *)&be_const_str_exit, - (const bstring *)&be_const_str_path, - (const bstring *)&be_const_str_dot_p, - (const bstring *)&be_const_str_deinit, - (const bstring *)&be_const_str_clock, - (const bstring *)&be_const_str_opt_add, - (const bstring *)&be_const_str_assert, - (const bstring *)&be_const_str_ceil, - (const bstring *)&be_const_str_pow, - (const bstring *)&be_const_str_calldepth, - (const bstring *)&be_const_str_init, - NULL, - (const bstring *)&be_const_str_map, - (const bstring *)&be_const_str_allocated, (const bstring *)&be_const_str_abs, - (const bstring *)&be_const_str_setrange, - (const bstring *)&be_const_str_real, - (const bstring *)&be_const_str_end, + (const bstring *)&be_const_str_hex, + (const bstring *)&be_const_str_tostring, + (const bstring *)&be_const_str_opt_add, + (const bstring *)&be_const_str_iter, + (const bstring *)&be_const_str_getcwd, NULL, - (const bstring *)&be_const_str_isdir, + (const bstring *)&be_const_str_allocated, + (const bstring *)&be_const_str_ceil, + (const bstring *)&be_const_str_format, + (const bstring *)&be_const_str_classname, + (const bstring *)&be_const_str_byte, + (const bstring *)&be_const_str_else, + (const bstring *)&be_const_str_deinit, + (const bstring *)&be_const_str___upper__, + (const bstring *)&be_const_str_char, + NULL, + (const bstring *)&be_const_str_deg, + NULL, + (const bstring *)&be_const_str_range, (const bstring *)&be_const_str_, NULL, - (const bstring *)&be_const_str_getcwd, - (const bstring *)&be_const_str_attrdump, - (const bstring *)&be_const_str_push, - (const bstring *)&be_const_str_compile, - (const bstring *)&be_const_str_atan, - (const bstring *)&be_const_str_insert, - (const bstring *)&be_const_str_chdir, - (const bstring *)&be_const_str_find, - NULL, - (const bstring *)&be_const_str_super, - (const bstring *)&be_const_str_concat, - (const bstring *)&be_const_str_while, - (const bstring *)&be_const_str_input, - (const bstring *)&be_const_str_log10, - (const bstring *)&be_const_str_collect, - (const bstring *)&be_const_str_clear, (const bstring *)&be_const_str_opt_neq, - (const bstring *)&be_const_str_listdir, - (const bstring *)&be_const_str_char, - (const bstring *)&be_const_str_format, - (const bstring *)&be_const_str_upper + (const bstring *)&be_const_str_lower, + (const bstring *)&be_const_str_count, + (const bstring *)&be_const_str_exit, + (const bstring *)&be_const_str_pop, + (const bstring *)&be_const_str_classof, + (const bstring *)&be_const_str_path, + (const bstring *)&be_const_str_input, + (const bstring *)&be_const_str_floor, + (const bstring *)&be_const_str_imin, + (const bstring *)&be_const_str_splitext, + NULL, + (const bstring *)&be_const_str_compile, + (const bstring *)&be_const_str_opt_eq, + (const bstring *)&be_const_str_codedump, + (const bstring *)&be_const_str_setitem, + (const bstring *)&be_const_str_tanh, + (const bstring *)&be_const_str_issubclass, + (const bstring *)&be_const_str_opt_connect, + (const bstring *)&be_const_str_try, + (const bstring *)&be_const_str_import, + (const bstring *)&be_const_str___lower__, + NULL, + (const bstring *)&be_const_str_acos, + (const bstring *)&be_const_str___iterator__ }; static const struct bconststrtab m_const_string_table = { - .size = 52, - .count = 104, + .size = 53, + .count = 107, .table = m_string_table }; diff --git a/lib/lib_div/Berry-0.1.10/generate/be_fixed_be_class_map.h b/lib/lib_div/Berry-0.1.10/generate/be_fixed_be_class_map.h index eebf1b658..06c75a050 100644 --- a/lib/lib_div/Berry-0.1.10/generate/be_fixed_be_class_map.h +++ b/lib/lib_div/Berry-0.1.10/generate/be_fixed_be_class_map.h @@ -1,21 +1,22 @@ #include "be_constobj.h" static be_define_const_map_slots(be_class_map_map) { - { be_const_key(init, -1), be_const_func(m_init) }, - { be_const_key(remove, 7), be_const_func(m_remove) }, - { be_const_key(find, -1), be_const_func(m_find) }, - { be_const_key(insert, 8), be_const_func(m_insert) }, + { be_const_key(dot_p, 2), be_const_int(0) }, + { be_const_key(insert, -1), be_const_func(m_insert) }, + { be_const_key(remove, -1), be_const_func(m_remove) }, + { be_const_key(tostring, -1), be_const_func(m_tostring) }, + { be_const_key(iter, 5), be_const_func(m_iter) }, { be_const_key(size, -1), be_const_func(m_size) }, - { be_const_key(tostring, 0), be_const_func(m_tostring) }, - { be_const_key(setitem, 3), be_const_func(m_setitem) }, - { be_const_key(iter, -1), be_const_func(m_iter) }, - { be_const_key(item, -1), be_const_func(m_item) }, - { be_const_key(dot_p, 1), be_const_int(0) }, + { be_const_key(keys, -1), be_const_func(m_keys) }, + { be_const_key(setitem, -1), be_const_func(m_setitem) }, + { be_const_key(find, 0), be_const_func(m_find) }, + { be_const_key(init, -1), be_const_func(m_init) }, + { be_const_key(item, 1), be_const_func(m_item) }, }; static be_define_const_map( be_class_map_map, - 10 + 11 ); BE_EXPORT_VARIABLE be_define_const_class( diff --git a/lib/lib_div/Berry-0.1.10/generate/be_fixed_string.h b/lib/lib_div/Berry-0.1.10/generate/be_fixed_string.h index c2da8b838..906c11f55 100644 --- a/lib/lib_div/Berry-0.1.10/generate/be_fixed_string.h +++ b/lib/lib_div/Berry-0.1.10/generate/be_fixed_string.h @@ -1,18 +1,20 @@ #include "be_constobj.h" static be_define_const_map_slots(m_libstring_map) { - { be_const_key(hex, 2), be_const_func(str_i2hex) }, - { be_const_key(byte, -1), be_const_func(str_byte) }, - { be_const_key(format, 5), be_const_func(str_format) }, - { be_const_key(find, -1), be_const_func(str_find) }, - { be_const_key(char, 1), be_const_func(str_char) }, - { be_const_key(split, -1), be_const_func(str_split) }, + { be_const_key(tolower, -1), be_const_func(str_tolower) }, { be_const_key(count, -1), be_const_func(str_count) }, + { be_const_key(hex, -1), be_const_func(str_i2hex) }, + { be_const_key(split, 5), be_const_func(str_split) }, + { be_const_key(byte, -1), be_const_func(str_byte) }, + { be_const_key(char, 6), be_const_func(str_char) }, + { be_const_key(toupper, 1), be_const_func(str_toupper) }, + { be_const_key(find, -1), be_const_func(str_find) }, + { be_const_key(format, -1), be_const_func(str_format) }, }; static be_define_const_map( m_libstring_map, - 7 + 9 ); static be_define_const_module( diff --git a/lib/lib_div/Berry-0.1.10/src/be_gc.h b/lib/lib_div/Berry-0.1.10/src/be_gc.h index 16ca7e766..5943a7392 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_gc.h +++ b/lib/lib_div/Berry-0.1.10/src/be_gc.h @@ -13,7 +13,7 @@ #define BE_GCOBJECT BE_STRING #define gc_object(o) cast(bgcobject*, o) -#define gc_cast(o, t, T) ((o) && (o)->type == (t) ? (T*)(o) : NULL) +#define gc_cast(o, t, T) ((o) && pgm_read_byte(&(o)->type) == (t) ? (T*)(o) : NULL) #define cast_proto(o) gc_cast(o, BE_PROTO, bproto) #define cast_closure(o) gc_cast(o, BE_CLOSURE, bclosure) #define cast_ntvclos(o) gc_cast(o, BE_NTVCLOS, bntvclos) @@ -38,11 +38,11 @@ if (!gc_isconst(o)) { \ #define gc_setwhite(o) gc_setmark((o), GC_WHITE) #define gc_setgray(o) gc_setmark((o), GC_GRAY) #define gc_setdark(o) gc_setmark((o), GC_DARK) -#define gc_isfixed(o) (((o)->marked & GC_FIXED) != 0) +#define gc_isfixed(o) ((pgm_read_byte(&(o)->marked) & GC_FIXED) != 0) #define gc_setfixed(o) ((o)->marked |= GC_FIXED) #define gc_clearfixed(o) ((o)->marked &= ~GC_FIXED) -#define gc_isconst(o) (((o)->marked & GC_CONST) != 0) -#define gc_exmark(o) (((o)->marked >> 4) & 0x0F) +#define gc_isconst(o) ((pgm_read_byte(&(o)->marked) & GC_CONST) != 0) +#define gc_exmark(o) ((pgm_read_byte(&(o)->marked) >> 4) & 0x0F) #define gc_setexmark(o, k) ((o)->marked |= (k) << 4) #define be_isgctype(t) ((t) >= BE_GCOBJECT) diff --git a/lib/lib_div/Berry-0.1.10/src/be_lexer.c b/lib/lib_div/Berry-0.1.10/src/be_lexer.c index eea82109d..b201e8df2 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_lexer.c +++ b/lib/lib_div/Berry-0.1.10/src/be_lexer.c @@ -105,7 +105,8 @@ static int next(blexer *lexer) lr->s = s ? s : &eos; --lr->len; } - lexer->cursor = *lr->s++; + // lexer->cursor = *lr->s++; // SH + lexer->cursor = pgm_read_byte(lr->s++); return lexer->cursor; } diff --git a/lib/lib_div/Berry-0.1.10/src/be_maplib.c b/lib/lib_div/Berry-0.1.10/src/be_maplib.c index 2d8446edd..936e3164d 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_maplib.c +++ b/lib/lib_div/Berry-0.1.10/src/be_maplib.c @@ -172,6 +172,37 @@ static int m_iter(bvm *vm) be_return(vm); } +static int keys_iter_closure(bvm *vm) +{ + /* for better performance, we operate the upvalues + * directly without using by the stack. */ + bntvclos *func = var_toobj(vm->cf->func); + bvalue *uv0 = be_ntvclos_upval(func, 0)->value; /* list value */ + bvalue *uv1 = be_ntvclos_upval(func, 1)->value; /* iter value */ + bmapiter iter = var_toobj(uv1); + bmapnode *next = be_map_next(var_toobj(uv0), &iter); + if (next == NULL) { + be_stop_iteration(vm); + be_return_nil(vm); /* will not be executed */ + } + var_setobj(uv1, BE_COMPTR, iter); /* set upvale[1] (iter value) */ + /* push next value to top */ + var_setobj(vm->top, next->key.type, next->key.v.p); + be_incrtop(vm); + be_return(vm); +} + +static int m_keys(bvm *vm) +{ + be_pushntvclosure(vm, keys_iter_closure, 2); + be_getmember(vm, 1, ".p"); + be_setupval(vm, -2, 0); + be_pushiter(vm, -1); + be_setupval(vm, -3, 1); + be_pop(vm, 2); + be_return(vm); +} + #if !BE_USE_PRECOMPILED_OBJECT void be_load_maplib(bvm *vm) { @@ -186,6 +217,7 @@ void be_load_maplib(bvm *vm) { "size", m_size }, { "insert", m_insert }, { "iter", m_iter }, + { "keys", m_keys }, { NULL, NULL } }; be_regclass(vm, "map", members); @@ -203,6 +235,7 @@ class be_class_map (scope: global, name: map) { size, func(m_size) insert, func(m_insert) iter, func(m_iter) + keys, func(m_keys) } @const_object_info_end */ #include "../generate/be_fixed_be_class_map.h" diff --git a/lib/lib_div/Berry-0.1.10/src/be_object.h b/lib/lib_div/Berry-0.1.10/src/be_object.h index d465138ec..dd73a8a87 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_object.h +++ b/lib/lib_div/Berry-0.1.10/src/be_object.h @@ -10,6 +10,37 @@ #include "berry.h" +/* support for PROGMEM on ESP8266 and AVR */ +#ifdef _PGMSPACE_H_ + #define strncmp strncmp_PP + #define strcmp(str1P, str2P) strncmp_PP((str1P), (str2P), SIZE_IRRELEVANT) + #define strncasecmp strncasecmp_P + #define strcasecmp_P(str1, str2P) strncasecmp_P((str1), (str2P), SIZE_IRRELEVANT) + #define strlen strlen_P + #define strchr strchr_P + #define strcat strcat_P + #define strncat strncat_P + #define strcpy strcpy_P + #define strncpy strncpy_P + #define memcpy memcpy_P + #define memccpy memccpy_P + #define memmove memmove_P + #define memcmp memcmp_P + #define memmem memmem_P + #define memchr memchr_P + #define sprintf sprintf_P + #define snprintf snprintf_P +#endif + +#ifndef pgm_read_byte +#define pgm_read_byte(addr) (*(const uint8_t*)(addr)) +#endif + +#ifndef pgm_read_word +#define pgm_read_word(addr) (*(const uint16_t*)(addr)) +#endif + + /* basic types, do not change value */ #define BE_NONE (-1) /* unknow type */ #define BE_COMPTR (-2) /* common pointer */ diff --git a/lib/lib_div/Berry-0.1.10/src/be_parser.c b/lib/lib_div/Berry-0.1.10/src/be_parser.c index 1839e9392..bdfdcaf3d 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_parser.c +++ b/lib/lib_div/Berry-0.1.10/src/be_parser.c @@ -31,7 +31,7 @@ #define FUNC_ANONYMOUS 2 /* get binary operator priority */ -#define binary_op_prio(op) (binary_op_prio_tab[cast_int(op) - OptAdd]) +#define binary_op_prio(op) (pgm_read_byte(&binary_op_prio_tab[cast_int(op) - OptAdd])) #define scan_next_token(parser) (be_lexer_scan_next(&(parser)->lexer)) #define next_token(parser) ((parser)->lexer.token) diff --git a/lib/lib_div/Berry-0.1.10/src/be_string.c b/lib/lib_div/Berry-0.1.10/src/be_string.c index db7dcaebf..0590fb396 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_string.c +++ b/lib/lib_div/Berry-0.1.10/src/be_string.c @@ -44,9 +44,9 @@ int be_eqstr(bstring *s1, bstring *s2) if (s1 == s2) { /* short string or the same string */ return 1; } - slen = s1->slen; + slen = pgm_read_byte(&s1->slen); /* long string */ - if (slen == 255 && slen == s2->slen) { + if (slen == 255 && slen == pgm_read_byte(&s2->slen)) { blstring *ls1 = cast(blstring*, s1); blstring *ls2 = cast(blstring*, s2); return ls1->llen == ls2->llen && !strcmp(lstr(ls1), lstr(ls2)); @@ -88,7 +88,7 @@ static void resize(bvm *vm, int size) static void free_sstring(bvm *vm, bstring *str) { - be_free(vm, str, sizeof(bsstring) + str->slen + 1); + be_free(vm, str, sizeof(bsstring) + pgm_read_byte(&str->slen) + 1); } /* FNV-1a Hash */ @@ -97,7 +97,8 @@ static uint32_t str_hash(const char *str, size_t len) uint32_t hash = 2166136261u; be_assert(str || len); while (len--) { - hash = (hash ^ (unsigned char)*str++) * 16777619u; + hash = (hash ^ (unsigned char)pgm_read_byte(str)) * 16777619u; + str++; } return hash; } @@ -149,7 +150,7 @@ static bstring* find_conststr(const char *str, size_t len) uint32_t hash = str_hash(str, len); bcstring *s = (bcstring*)tab->table[hash % tab->size]; for (; s != NULL; s = next(s)) { - if (len == s->slen && !strncmp(str, s->s, len)) { + if (len == pgm_read_byte(&s->slen) && !strncmp(str, s->s, len)) { return (bstring*)s; } } @@ -165,7 +166,7 @@ static bstring* newshortstr(bvm *vm, const char *str, size_t len) bstring **list = vm->strtab.table + (hash & (size - 1)); for (s = *list; s != NULL; s = next(s)) { - if (len == s->slen && !strncmp(str, sstr(s), len)) { + if (len == pgm_read_byte(&s->slen) && !strncmp(str, sstr(s), len)) { return s; } } @@ -252,7 +253,7 @@ uint32_t be_strhash(const bstring *s) return cast(bcstring*, s)->hash; } #if BE_USE_STR_HASH_CACHE - if (s->slen != 255) { + if (pgm_read_byte(&s->slen) != 255) { return cast(bsstring*, s)->hash; } #endif @@ -265,7 +266,7 @@ const char* be_str2cstr(const bstring *s) if (gc_isconst(s)) { return cstr(s); } - if (s->slen == 255) { + if (pgm_read_byte(&s->slen) == 255) { return lstr(s); } return sstr(s); @@ -276,4 +277,4 @@ void be_str_setextra(bstring *s, int extra) if (!gc_isconst(s)) { s->extra = cast(bbyte, extra); } -} +} \ No newline at end of file diff --git a/lib/lib_div/Berry-0.1.10/src/be_string.h b/lib/lib_div/Berry-0.1.10/src/be_string.h index 51b3fd016..8d3fba49e 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_string.h +++ b/lib/lib_div/Berry-0.1.10/src/be_string.h @@ -33,7 +33,7 @@ typedef struct { } bcstring; #define str_len(_s) \ - ((_s)->slen == 255 ? cast(blstring*, _s)->llen : (_s)->slen) + (pgm_read_byte(&(_s)->slen) == 255 ? cast(blstring*, _s)->llen : pgm_read_byte(&(_s)->slen)) #define str(_s) be_str2cstr(_s) #define str_extra(_s) ((_s)->extra) diff --git a/lib/lib_div/Berry-0.1.10/src/be_strlib.c b/lib/lib_div/Berry-0.1.10/src/be_strlib.c index f4bda16c4..37fe8e12b 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_strlib.c +++ b/lib/lib_div/Berry-0.1.10/src/be_strlib.c @@ -14,6 +14,7 @@ #include "be_mem.h" #include #include +#include #define is_space(c) ((c) == ' ' || (c) == '\t' || (c) == '\r' || (c) == '\n') #define is_digit(c) ((c) >= '0' && (c) <= '9') @@ -175,7 +176,7 @@ const char* be_pushvfstr(bvm *vm, const char *format, va_list arg) } pushstr(vm, format, p - format); concat2(vm); - switch (p[1]) { + switch (pgm_read_byte(&p[1])) { case 's': { const char *s = va_arg(arg, char*); if (s == NULL) { @@ -338,8 +339,8 @@ bstring* be_strindex(bvm *vm, bstring *str, bvalue *idx) const char* be_splitpath(const char *path) { const char *p; - for (p = path - 1; *path != '\0'; ++path) { - if (*path == '/') { + for (p = path - 1; pgm_read_byte(path) != '\0'; ++path) { + if (pgm_read_byte(path) == '/') { p = path; } } @@ -708,6 +709,34 @@ static int str_char(bvm *vm) be_return_nil(vm); } +// boolean to select whether we call toupper() or tolower() +static int str_touplower(bvm *vm, bbool up) +{ + if (be_top(vm) && be_isstring(vm, 1)) { + const char *p, *s = be_tostring(vm, 1); + size_t len = (size_t)be_strlen(vm, 1); + char *buf, *q; + buf = q = be_pushbuffer(vm, len); + /* convert to lower case */ + for (p = s; *p != '\0'; ++p, ++q) { + *q = up ? toupper(*p) : tolower(*p); + } + be_pushnstring(vm, buf, len); /* make escape string from buffer */ + be_remove(vm, 2); /* remove buffer */ + be_return(vm); + } + be_return_nil(vm); +} + +static int str_tolower(bvm *vm) { + return str_touplower(vm, bfalse); +} + +static int str_toupper(bvm *vm) { + return str_touplower(vm, btrue); +} + + #if !BE_USE_PRECOMPILED_OBJECT be_native_module_attr_table(string) { be_native_module_function("format", str_format), @@ -716,7 +745,9 @@ be_native_module_attr_table(string) { be_native_module_function("find", str_find), be_native_module_function("hex", str_i2hex), be_native_module_function("byte", str_byte), - be_native_module_function("char", str_char) + be_native_module_function("char", str_char), + be_native_module_function("tolower", str_tolower), + be_native_module_function("toupper", str_toupper), }; be_define_native_module(string, NULL); @@ -730,6 +761,8 @@ module string (scope: global, depend: BE_USE_STRING_MODULE) { hex, func(str_i2hex) byte, func(str_byte) char, func(str_char) + tolower, func(str_tolower) + toupper, func(str_toupper) } @const_object_info_end */ #include "../generate/be_fixed_string.h" diff --git a/lib/lib_div/Berry-0.1.10/src/be_vector.c b/lib/lib_div/Berry-0.1.10/src/be_vector.c index b73479601..2cd3f1e2e 100644 --- a/lib/lib_div/Berry-0.1.10/src/be_vector.c +++ b/lib/lib_div/Berry-0.1.10/src/be_vector.c @@ -122,16 +122,16 @@ static int binary_search(int value) const uint16_t *high = tab + array_count(tab) - 1; while (low <= high) { const uint16_t *mid = low + ((high - low) >> 1); - if (*mid == value) { - return mid[1]; + if (pgm_read_word(mid) == value) { + return pgm_read_word(&mid[1]); } - if (*mid < value) { + if (pgm_read_word(mid) < value) { low = mid + 1; } else { high = mid - 1; } } - return *low; + return pgm_read_word(low); } static int nextpow(int value) diff --git a/lib/lib_div/Berry-0.1.10/src/port/be_modtab.c b/lib/lib_div/Berry-0.1.10/src/port/be_modtab.c index 9250e83e2..eb83cf5a2 100644 --- a/lib/lib_div/Berry-0.1.10/src/port/be_modtab.c +++ b/lib/lib_div/Berry-0.1.10/src/port/be_modtab.c @@ -19,6 +19,9 @@ be_extern_native_module(sys); be_extern_native_module(debug); be_extern_native_module(gc); +/* Tasmota specific */ +be_extern_native_module(tasmota); + /* user-defined modules declare start */ /* user-defined modules declare end */ @@ -52,6 +55,8 @@ BERRY_LOCAL const bntvmodule* const be_module_table[] = { #endif /* user-defined modules register start */ + &be_native_module(tasmota), + /* user-defined modules register end */ NULL /* do not remove */ }; diff --git a/lib/lib_div/Berry-0.1.10/src/port/be_port.cpp b/lib/lib_div/Berry-0.1.10/src/port/be_port.cpp index 7233f57dc..fd9ac48d6 100644 --- a/lib/lib_div/Berry-0.1.10/src/port/be_port.cpp +++ b/lib/lib_div/Berry-0.1.10/src/port/be_port.cpp @@ -16,44 +16,35 @@ /* standard input and output */ extern "C" { - void serial(const char *sp) { - char s[200]; - snprintf_P(s, sizeof(s), "%s", sp); - Serial.printf(s); - Serial.flush(); - } - void serial3(const char *sp, uint32_t a, uint32_t b, uint32_t c) { - char s[200]; - snprintf_P(s, sizeof(s), "%s 0x%08X 0x%08X 0x%08X\n", sp, a, b, c); - Serial.printf(s); - Serial.flush(); - } - void serial2s1(const char *sp, const char * a, const char * b, uint32_t c) { - char s[200]; - snprintf_P(s, sizeof(s), "%s '%s' '%s' 0x%08X\n", sp, a, b, c); - Serial.printf(s); - Serial.flush(); + int strncmp_PP(const char * str1P, const char * str2P, size_t size) + { + int result = 0; + + while (size > 0) + { + char ch1 = pgm_read_byte(str1P++); + char ch2 = pgm_read_byte(str2P++); + result = ch1 - ch2; + if (result != 0 || ch2 == '\0') + { + break; + } + + size--; + } + + return result; } -// int strncmp_PP(const char * str1P, const char * str2P, size_t size) -// { -// int result = 0; - -// while (size > 0) -// { -// char ch1 = pgm_read_byte(str1P++); -// char ch2 = pgm_read_byte(str2P++); -// result = ch1 - ch2; -// if (result != 0 || ch2 == '\0') -// { -// break; -// } - -// size--; -// } - -// return result; -// } + // + char * strchr_P(const char *s, int c) { + do { + if (pgm_read_byte(s) == c) { + return (char*)s; + } + } while (pgm_read_byte(s++)); + return (0); + } } BERRY_API void be_writebuffer(const char *buffer, size_t length) diff --git a/lib/lib_div/Berry-0.1.10/src/port/be_tasmotalib.c b/lib/lib_div/Berry-0.1.10/src/port/be_tasmotalib.c new file mode 100644 index 000000000..7f17998cb --- /dev/null +++ b/lib/lib_div/Berry-0.1.10/src/port/be_tasmotalib.c @@ -0,0 +1,34 @@ +/******************************************************************** + * Tasmota lib + * + * To use: `import tasmota` + *******************************************************************/ +#include "be_object.h" + +extern int l_getFreeHeap(bvm *vm); +extern int l_publish(bvm *vm); +extern int l_cmd(bvm *vm); +extern int l_getoption(bvm *vm); +extern int l_millis(bvm *vm); +extern int l_timereached(bvm *vm); + +// #if !BE_USE_PRECOMPILED_OBJECT +#if 1 // TODO we will do pre-compiled later +be_native_module_attr_table(tasmota) { + be_native_module_function("getfreeheap", l_getFreeHeap), + be_native_module_function("publish", l_publish), + be_native_module_function("cmd", l_cmd), + be_native_module_function("getoption", l_getoption), + be_native_module_function("millis", l_millis), + be_native_module_function("timereached", l_timereached), +}; + +be_define_native_module(tasmota, NULL); +#else +/* @const_object_info_begin +module tasmota (scope: global, depend: 1) { + getfreeheap, func(l_getFreeHeap) +} +@const_object_info_end */ +#include "../generate/be_fixed_tasmota.h" +#endif diff --git a/lib/lib_div/Berry-0.1.10/src/port/berry_conf.h b/lib/lib_div/Berry-0.1.10/src/port/berry_conf.h index aee1214aa..5228f567f 100644 --- a/lib/lib_div/Berry-0.1.10/src/port/berry_conf.h +++ b/lib/lib_div/Berry-0.1.10/src/port/berry_conf.h @@ -8,14 +8,14 @@ #ifndef BERRY_CONF_H #define BERRY_CONF_H +#include + #ifdef __cplusplus extern "C" { #endif - extern void serial(const char *sp); - extern void serial3(const char *sp, uint32_t a, uint32_t b, uint32_t c); - extern void serial2s1(const char *sp, const char *a, const char *b, uint32_t c); extern int strncmp_PP(const char * str1P, const char * str2P, size_t size); + extern char * strchr_P(const char *s, int c); #ifdef __cplusplus } @@ -54,7 +54,11 @@ extern "C" { * runtime. Enable this macro can greatly optimize RAM usage. * Default: 1 **/ -#define BE_USE_PRECOMPILED_OBJECT 1 +#ifdef ESP8266 +#define BE_USE_PRECOMPILED_OBJECT 0 +#else +#define BE_USE_PRECOMPILED_OBJECT 0 // will enable later when stabilized +#endif /* Macro: BE_DEBUG_RUNTIME_INFO * Set runtime error debugging information. @@ -157,7 +161,7 @@ extern "C" { #define BE_USE_OS_MODULE 0 #define BE_USE_SYS_MODULE 0 #define BE_USE_DEBUG_MODULE 0 -#define BE_USE_GC_MODULE 0 +#define BE_USE_GC_MODULE 1 /* Macro: BE_EXPLICIT_XXX * If these macros are defined, the corresponding function will diff --git a/tasmota/berry/tasmota.be b/tasmota/berry/tasmota.be new file mode 100644 index 000000000..3393ea1bd --- /dev/null +++ b/tasmota/berry/tasmota.be @@ -0,0 +1,157 @@ +import json import string +tasmota = module("tasmota") +def charsinstring(s,c) + for i:0..size(s)-1 + for j:0..size(c)-1 + if s[i] == c[j] return i end + end + end + return -1 +end + +tasmota._eqstr=/s1,s2-> str(s1) == str(s2) +tasmota._neqstr=/s1,s2-> str(s1) != str(s2) +tasmota._eq=/f1,f2-> real(f1) == real(f2) +tasmota._neq=/f1,f2-> real(f1) != real(f2) +tasmota._gt=/f1,f2-> real(f1) > real(f2) +tasmota._lt=/f1,f2-> real(f1) < real(f2) +tasmota._ge=/f1,f2-> real(f1) >= real(f2) +tasmota._le=/f1,f2-> real(f1) <= real(f2) +tasmota._op=[ + ['==',tasmota._eqstr], + ['!==',tasmota._neqstr], + ['=',tasmota._eq], + ['!=',tasmota._neq], + ['>=',tasmota._ge], + ['<=',tasmota._le], + ['>',tasmota._gt], + ['<',tasmota._lt], +] +tasmota._operators="=<>!|" + +# split the item when there is an operator, returns a list of (left,op,right) +# ex: "Dimmer>50" -> ["Dimmer",tasmota_gt,"50"] +tasmota.find_op = def (item) + pos = charsinstring(item, tasmota._operators) + if pos>=0 + op_split = string.split(item,pos) + #print(op_split) + op_left = op_split[0] + op_rest = op_split[1] + # iterate through operators + for op:tasmota._op + if string.find(op_rest,op[0]) == 0 + op_func = op[1] + op_right = string.split(op_rest,size(op[0]))[1] + return [op_left,op_func,op_right] + end + end + end + return [item, nil, nil] +end + + +def findkeyi(m,keyi) + keyu=string.toupper(keyi) + if classof(m) == map + for k:m.keys() + if string.toupper(k)==keyu || keyi=='?' + return k + end + end + end +end + + +tasmota.try_rule = def (ev, rule, f) + rl_list = tasmota.find_op(rule) + e=ev + rl=string.split(rl_list[0],'#') + for it:rl + found=findkeyi(e,it) + if found == nil + return false + end + e=e[found] + end + # check if condition is true + if rl_list[1] + # did we find a function + if !rl_list[1](e,rl_list[2]) + # condition is not met + return false + end + end + f(e,ev) + return true +end +tasmota_rules={} +tasmota.rule = def(pat,f) tasmota_rules[pat] = f end + +tasmota.exec_rules = def (ev_json) + ev = json.load(ev_json) + if ev == nil + log("ERROR, bad json: "+ev_json, 3) + end + ret = false + for r:tasmota_rules.keys() + ret = tasmota.try_rule(ev,r,tasmota_rules[r]) || ret + end + return ret +end + +#- Test +################################################################# + +def log(m) print(m) end +def my_rule(e,ev) log("e1="+str(e)+" e2="+str(ev)) end + +tasmota.rule("ZBRECEIVED#?#LINKQUALITY", my_rule) +tasmota.rule("ZBRECEIVED#0x1234", my_rule) + +tasmota.rule("ZBRECEIVED#?#LINKQUALITY<10", my_rule) + +tasmota.rule("Dimmer>50", my_rule) +tasmota.rule("Dimmer=01", my_rule) + + +tasmota.rule("Color==022600", my_rule) + +tasmota.exec_rules('{"Color":"022600"}') + +tasmota.exec_rules('{"ZbReceived":{"0x1234":{"Device":"0x1234","LinkQuality":50}}}') + +tasmota.exec_rules('{"Dimmer":10}') + + + +# tasmota.rule("DIMMER", my_rule) +# tasmota.rule("DIMMER#DATA#DATA", my_rule) +# tasmota.exec_rules('{"Dimmer":{"Data":50}}') + + +-# + +#- +tasmota.find_op("aaa") +tasmota.find_op("aaa>50") +-# + +#- +# Example of backlog equivalent + +def backlog(cmd_list) + delay_backlog = tasmota.getoption(34) # in milliseconds + delay = 0 + for cmd:cmd_list + tasmota.timer(delay, /-> tasmota.cmd(cmd)) + delay = delay + delay_backlog + end +end + + +br def backlog(cmd_list) delay_backlog = tasmota.getoption(34) delay = 0 for cmd:cmd_list tasmota.timer(delay, /-> tasmota.cmd(cmd)) delay = delay + delay_backlog end end + +br backlog( [ "Power 0", "Status 4", "Power 1" ] ) + +-# \ No newline at end of file diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index 139631e74..065fabbcc 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -844,35 +844,67 @@ void CmndSetoption(void) { CmndSetoptionBase(1); } +// Code called by SetOption and by Berrt +bool SetoptionDecode(uint32_t index, uint32_t *ptype, uint32_t *pindex) { + if (index < 146) { + if (index <= 31) { // SetOption0 .. 31 = Settings.flag + *ptype = 2; + *pindex = index; // 0 .. 31 + } + else if (index <= 49) { // SetOption32 .. 49 = Settings.param + *ptype = 1; + *pindex = index -32; // 0 .. 17 (= PARAM8_SIZE -1) + } + else if (index <= 81) { // SetOption50 .. 81 = Settings.flag3 + *ptype = 3; + *pindex = index -50; // 0 .. 31 + } + else if (index <= 113) { // SetOption82 .. 113 = Settings.flag4 + *ptype = 4; + *pindex = index -82; // 0 .. 31 + } + else { // SetOption114 .. 145 = Settings.flag5 + *ptype = 5; + *pindex = index -114; // 0 .. 31 + } + return true; + } + return false; +} + +uint32_t GetOption(uint32_t index) { + uint32_t ptype; + uint32_t pindex; + if (SetoptionDecode(index, &ptype, &pindex)) { + if (1 == ptype) { + return Settings.param[pindex]; + } else { + uint32_t flag = Settings.flag.data; + if (3 == ptype) { + flag = Settings.flag3.data; + } + else if (4 == ptype) { + flag = Settings.flag4.data; + } + else if (5 == ptype) { + flag = Settings.flag5.data; + } + return bitRead(flag, pindex); + } + } else { + return 0; // fallback + } +} + void CmndSetoptionBase(bool indexed) { // Allow a command to access a single SetOption by it's command name // indexed = 0 : No index will be returned attached to the command // {"ClockDirection":"OFF"} // indexed = 1 : The SetOption index will be returned with the command // {"SetOption16":"OFF"} - if (XdrvMailbox.index < 146) { - uint32_t ptype; - uint32_t pindex; - if (XdrvMailbox.index <= 31) { // SetOption0 .. 31 = Settings.flag - ptype = 2; - pindex = XdrvMailbox.index; // 0 .. 31 - } - else if (XdrvMailbox.index <= 49) { // SetOption32 .. 49 = Settings.param - ptype = 1; - pindex = XdrvMailbox.index -32; // 0 .. 17 (= PARAM8_SIZE -1) - } - else if (XdrvMailbox.index <= 81) { // SetOption50 .. 81 = Settings.flag3 - ptype = 3; - pindex = XdrvMailbox.index -50; // 0 .. 31 - } - else if (XdrvMailbox.index <= 113) { // SetOption82 .. 113 = Settings.flag4 - ptype = 4; - pindex = XdrvMailbox.index -82; // 0 .. 31 - } - else { // SetOption114 .. 145 = Settings.flag5 - ptype = 5; - pindex = XdrvMailbox.index -114; // 0 .. 31 - } + uint32_t ptype; + uint32_t pindex; + if (SetoptionDecode(XdrvMailbox.index, &ptype, &pindex)) { if (XdrvMailbox.payload >= 0) { if (1 == ptype) { // SetOption32 .. 49 diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index c4daf839b..34e2a562a 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -370,10 +370,10 @@ enum DevGroupShareItem { DGR_SHARE_POWER = 1, DGR_SHARE_LIGHT_BRI = 2, DGR_SHARE enum CommandSource { SRC_IGNORE, SRC_MQTT, SRC_RESTART, SRC_BUTTON, SRC_SWITCH, SRC_BACKLOG, SRC_SERIAL, SRC_WEBGUI, SRC_WEBCOMMAND, SRC_WEBCONSOLE, SRC_PULSETIMER, SRC_TIMER, SRC_RULE, SRC_MAXPOWER, SRC_MAXENERGY, SRC_OVERTEMP, SRC_LIGHT, SRC_KNX, SRC_DISPLAY, SRC_WEMO, SRC_HUE, SRC_RETRY, SRC_REMOTE, SRC_SHUTTER, - SRC_THERMOSTAT, SRC_CHAT, SRC_TCL, SRC_MAX }; + SRC_THERMOSTAT, SRC_CHAT, SRC_TCL, SRC_BERRY, SRC_MAX }; const char kCommandSource[] PROGMEM = "I|MQTT|Restart|Button|Switch|Backlog|Serial|WebGui|WebCommand|WebConsole|PulseTimer|" "Timer|Rule|MaxPower|MaxEnergy|Overtemp|Light|Knx|Display|Wemo|Hue|Retry|Remote|Shutter|" - "Thermostat|Chat|TCL"; + "Thermostat|Chat|TCL|Berry"; const uint8_t kDefaultRfCode[9] PROGMEM = { 0x21, 0x16, 0x01, 0x0E, 0x03, 0x48, 0x2E, 0x1A, 0x00 }; diff --git a/tasmota/xdrv_52_berry.ino b/tasmota/xdrv_52_berry.ino index 04d73bf29..ce0f0b2b6 100644 --- a/tasmota/xdrv_52_berry.ino +++ b/tasmota/xdrv_52_berry.ino @@ -19,7 +19,6 @@ #ifdef USE_BERRY -// #ifdef ESP32 #define XDRV_52 52 @@ -67,6 +66,7 @@ void (* const BerryCommand[])(void) PROGMEM = { class BerrySupport { public: bvm *vm = nullptr; // berry vm + bool rules_busy = false; // are we already processing rules, avoid infinite loop #ifdef USE_BERRY_ASYNC // Alternate stack for the Berry VM uint8_t *stack_alloc = nullptr; // stack malloc address @@ -99,25 +99,126 @@ void checkBeTop(void) { /*********************************************************************************************\ * Native functions mapped to Berry functions * + * log(msg:string [,log_level:int]) ->nil + * + * import tasmota + * + * tasmota.getfreeheap() -> int + * tasmota.publish(topic:string, payload:string[, retain:bool]) -> nil + * tasmota.cmd(command:string) -> string + * tasmota.getoption(index:int) -> int + * tasmota.millis([delay:int]) -> int + * tasmota.timereached(timer:int) -> bool + * \*********************************************************************************************/ -// Berry: `log(string) -> nil` -// Logs the string at LOG_LEVEL_INFO (loglevel=2) -int32_t l_logInfo(struct bvm *vm) { - int32_t top = be_top(vm); // Get the number of arguments - if (top == 1 && be_isstring(vm, 1)) { // only 1 argument of type string accepted - const char * msg = be_tostring(vm, 1); - AddLog(LOG_LEVEL_INFO, D_LOG_BERRY "LOG: %s", msg); - be_return(vm); // Return +extern "C" { + // Berry: `log(msg:string [,log_level:int]) ->nil` + // Logs the string at LOG_LEVEL_INFO (loglevel=2) + int32_t l_logInfo(struct bvm *vm); + int32_t l_logInfo(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top >= 1 && be_isstring(vm, 1)) { // only 1 argument of type string accepted + const char * msg = be_tostring(vm, 1); + uint32_t log_level = LOG_LEVEL_INFO; + if (top >= 2 && be_isint(vm, 2)) { + log_level = be_toint(vm, 2); + if (log_level > LOG_LEVEL_DEBUG_MORE) { log_level = LOG_LEVEL_DEBUG_MORE; } + } + AddLog(log_level, PSTR("%s"), msg); + be_return(vm); // Return + } + be_return_nil(vm); // Return nil when something goes wrong + } + + // Berry: `getFreeHeap() -> int` + // ESP object + int32_t l_getFreeHeap(bvm *vm); + int32_t l_getFreeHeap(bvm *vm) { + be_pushint(vm, ESP.getFreeHeap()); + be_return(vm); + } + + // Berry: `tasmota.publish(topic, payload [,retain]) -> nil`` + // + int32_t l_publish(struct bvm *vm); + int32_t l_publish(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top >= 2 && be_isstring(vm, 1) && be_isstring(vm, 2)) { // 2 mandatory string arguments + if (top == 2 || (top == 3 && be_isbool(vm, 3))) { // 3rd optional argument must be bool + const char * topic = be_tostring(vm, 1); + const char * payload = be_tostring(vm, 2); + bool retain = false; + if (top == 3) { + retain = be_tobool(vm, 3); + } + strlcpy(TasmotaGlobal.mqtt_data, payload, sizeof(TasmotaGlobal.mqtt_data)); + MqttPublish(topic, retain); + be_return(vm); // Return + } + } + be_return_nil(vm); // Return nil when something goes wrong + } + + // Berry: `tasmota.cmd(command:string) -> string` + // + int32_t l_cmd(struct bvm *vm); + int32_t l_cmd(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top == 1 && be_isstring(vm, 1)) { // only 1 argument of type string accepted + const char * command = be_tostring(vm, 1); + ExecuteCommand(command, SRC_BERRY); + be_pushstring(vm, TasmotaGlobal.mqtt_data); + be_return(vm); // Return + } + be_return_nil(vm); // Return nil when something goes wrong + } + + // Berry: tasmota.millis([delay:int]) -> int + // + int32_t l_millis(struct bvm *vm); + int32_t l_millis(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top == 0 || (top == 1 && be_isint(vm, 1))) { // only 1 argument of type string accepted + uint32_t delay = 0; + if (top == 1) { + delay = be_toint(vm, 1); + } + uint32_t ret_millis = millis() + delay; + be_pushint(vm, ret_millis); + be_return(vm); // Return + } + be_return_nil(vm); // Return nil when something goes wrong + } + + // Berry: tasmota.getoption(index:int) -> int + // + int32_t l_getoption(struct bvm *vm); + int32_t l_getoption(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top == 1 && be_isint(vm, 1)) { + uint32_t opt = GetOption(be_toint(vm, 1)); + be_pushint(vm, opt); + be_return(vm); // Return + } + be_return_nil(vm); // Return nil when something goes wrong + } + + // Berry: tasmota.timereached(timer:int) -> bool + // + int32_t l_timereached(struct bvm *vm); + int32_t l_timereached(struct bvm *vm) { + int32_t top = be_top(vm); // Get the number of arguments + if (top == 1 && be_isint(vm, 1)) { // only 1 argument of type string accepted + uint32_t timer = be_toint(vm, 1); + bool reached = TimeReached(timer); + be_pushbool(vm, reached); + be_return(vm); // Return + } + be_return_nil(vm); // Return nil when something goes wrong } - be_return_nil(vm); // Return nil when something goes wrong } -// Berry: `getFreeHeap() -> int` -// ESP object -int32_t l_getFreeHeap(bvm *vm) { - be_pushint(vm, ESP.getFreeHeap()); - be_return(vm); -} + // Berry: `printStack() -> nul` // print stack pointer @@ -128,7 +229,7 @@ int32_t l_getFreeHeap(bvm *vm) { // } // Yield -int32_t l_yield(bvm *vm) { +int32_t l_yield(struct bvm *vm) { #ifdef USE_BERRY_ASYNC if (berry.ta_cont_ok) { // if no ta_cont address, then ignore if (setjmp(berry.vm_cont) == 0) { // record the current state @@ -157,25 +258,80 @@ int32_t l_yield(bvm *vm) { // callBerryFunctionVoid(berry.fname); // } +bool callBerryRule(void) { + if (berry.rules_busy) { return false; } + berry.rules_busy = true; + char * json_event = TasmotaGlobal.mqtt_data; + bool serviced = false; + + checkBeTop(); + be_getglobal(berry.vm, "_exec_rules"); + if (!be_isnil(berry.vm, -1)) { + + // { + // String event_saved = TasmotaGlobal.mqtt_data; + // // json_event = {"INA219":{"Voltage":4.494,"Current":0.020,"Power":0.089}} + // // json_event = {"System":{"Boot":1}} + // // json_event = {"SerialReceived":"on"} - invalid but will be expanded to {"SerialReceived":{"Data":"on"}} + // char *p = strchr(json_event, ':'); + // if ((p != NULL) && !(strchr(++p, ':'))) { // Find second colon + // event_saved.replace(F(":"), F(":{\"Data\":")); + // event_saved += F("}"); + // // event_saved = {"SerialReceived":{"Data":"on"}} + // } + // be_pushstring(berry.vm, event_saved.c_str()); + // } + be_pushstring(berry.vm, TasmotaGlobal.mqtt_data); + int ret = be_pcall(berry.vm, 1); + serviced = be_tobool(berry.vm, 1); + AddLog(LOG_LEVEL_DEBUG, PSTR(D_LOG_BERRY "Event (%s) serviced=%d"), TasmotaGlobal.mqtt_data, serviced); + be_pop(berry.vm, 2); // remove function object + } else { + be_pop(berry.vm, 1); // remove nil object + } + checkBeTop(); + berry.rules_busy = false; + + return serviced; // TODO event not handled +} + +// void callBerryMqttData(void) { +// AddLog(LOG_LEVEL_INFO, D_LOG_BERRY "callBerryMqttData"); +// if (nullptr == berry.vm) { return; } +// if (XdrvMailbox.data_len < 1) { +// return; +// } +// const char * topic = XdrvMailbox.topic; +// const char * payload = XdrvMailbox.data; + +// checkBeTop(); +// be_getglobal(berry.vm, "mqtt_data_dispatch"); +// if (!be_isnil(berry.vm, -1)) { +// be_pushstring(berry.vm, topic); +// be_pushstring(berry.vm, payload); +// be_pcall(berry.vm, 0); +// be_pop(berry.vm, 3); // remove function object +// } else { +// be_pop(berry.vm, 1); // remove nil object +// } +// checkBeTop(); +// } + // call a function (if exists) of type void -> void void callBerryFunctionVoid(const char * fname) { if (nullptr == berry.vm) { return; } checkBeTop(); be_getglobal(berry.vm, fname); if (!be_isnil(berry.vm, -1)) { - // AddLog(LOG_LEVEL_DEBUG, D_LOG_BERRY "Calling '%s'", fname); be_pcall(berry.vm, 0); - be_pop(berry.vm, 1); // remove function object - } else { - // AddLog(LOG_LEVEL_DEBUG, D_LOG_BERRY "Function '%s' not found", fname); - be_pop(berry.vm, 1); // remove nil object } + be_pop(berry.vm, 1); // remove function or nil object checkBeTop(); } void test_input(void) { int i = 0; - AddLog(LOG_LEVEL_INFO, "test_input stack = 0x%08X", &i); + AddLog(LOG_LEVEL_INFO, PSTR("test_input stack = 0x%08X"), &i); callBerryFunctionVoid("noop"); } @@ -217,7 +373,7 @@ int32_t callTrampoline(void *func) { // ---------------------------------- // the call has completed normally, and `yield` was not called berry.ta_cont_ok = false; - AddLog(LOG_LEVEL_INFO, "Trampo: old stack restored"); + AddLog(LOG_LEVEL_INFO, PSTR("Trampo: old stack restored")); // printStack(); } else { // WARNING @@ -229,7 +385,7 @@ int32_t callTrampoline(void *func) { // printStack(); berry.ta_cont_ok = true; // Berry can call back Tasmota thread callBerryFunctionVoid("noop"); - AddLog(LOG_LEVEL_INFO, "Trampo: after callBerryFunctionVoid"); + AddLog(LOG_LEVEL_INFO, PSTR("Trampo: after callBerryFunctionVoid")); // printStack(); longjmp(berry.ta_cont, -1); // this part is unreachable (longjmp does not return) @@ -254,23 +410,153 @@ int32_t callTrampoline(void *func) { * \*********************************************************************************************/ -const char berry_prog[] = +const char berry_prog[] PROGMEM = + "" //"def func(x) for i:1..x print('a') end end " //"def testreal() return str(1.2+1) end " //"def noop() log('noop before'); yield(); log('middle after'); yield(); log('noop after'); end " //"log(\"foobar\") " - // - def l_getFreeHeap() return 1234 end - // - def l_log(m) print(m) end - // Simulate Tasmota module - "class Tasmota " - "def getFreeHeap() return l_getFreeHeap() end " - // "def log(m) return l_log(m) end " - "end " - "tasmota = Tasmota() " + // auto-import modules + "import string " + "import json " + "import gc " + "import tasmota " + // import alias + "import tasmota as t " - "n = 1;" - "def every_second() n = n + 1; if (n % 100 == 10) log('foobar '+str(n)+' free_heap = '+str(tasmota.getFreeHeap())) end end; " + // add `charsinstring(s:string,c:string) -> int`` + // looks for any char in c, and return the position of the first chat + // or -1 if not found + "def charsinstring(s,c) " + "for i:0..size(s)-1 " + "for j:0..size(c)-1 " + "if s[i] == c[j] return i end " + "end " + "end " + "return -1 " + "end " + + // find a key in map, case insensitive, return actual key or nil if not found + "def findkeyi(m,keyi) " + "keyu=string.toupper(keyi) " + "if classof(m) == map " + "for k:m.keys() " + "if string.toupper(k)==keyu || keyi=='?' " + "return k " + "end " + "end " + "end " + "end " + + // Rules + + "tasmota._operators='=<>!' " // operators used in rules + // Rules comparisong functions + "tasmota._eqstr=/s1,s2-> str(s1) == str(s2) " + "tasmota._neqstr=/s1,s2-> str(s1) != str(s2) " + "tasmota._eq=/f1,f2-> real(f1) == real(f2) " + "tasmota._neq=/f1,f2-> real(f1) != real(f2) " + "tasmota._gt=/f1,f2-> real(f1) > real(f2) " + "tasmota._lt=/f1,f2-> real(f1) < real(f2) " + "tasmota._ge=/f1,f2-> real(f1) >= real(f2) " + "tasmota._le=/f1,f2-> real(f1) <= real(f2) " + + "tasmota._op=[" + "['==',tasmota._eqstr]," + "['!==',tasmota._neqstr]," + "['=',tasmota._eq]," + "['!=',tasmota._neq]," + "['>=',tasmota._ge]," + "['<=',tasmota._le]," + "['>',tasmota._gt]," + "['<',tasmota._lt]," + "] " + "tasmota_rules={} " + "tasmota.rule = def(pat,f) tasmota_rules[pat] = f end " + + // # split the item when there is an operator, returns a list of (left,op,right) + // # ex: "Dimmer>50" -> ["Dimmer",tasmota_gt,"50"] + "tasmota.find_op = def (item) " + "pos = charsinstring(item, tasmota._operators) " + "if pos>=0 " + "op_split = string.split(item,pos) " + // #print(op_split) + "op_left = op_split[0] " + "op_rest = op_split[1] " + // # iterate through operators + "for op:tasmota._op " + "if string.find(op_rest,op[0]) == 0 " + "op_func = op[1] " + "op_right = string.split(op_rest,size(op[0]))[1] " + "return [op_left,op_func,op_right] " + "end " + "end " + "end " + "return [item, nil, nil] " + "end " + + // Rules trigger if match. return true if match, false if not + // Note: condition is not yet managed + "tasmota.try_rule = def (ev, rule, f) " + "rl_list = tasmota.find_op(rule) " + "e=ev " + "rl=string.split(rl_list[0],'#') " + "for it:rl " + "found=findkeyi(e,it) " + "if found == nil " + "return false " + "end " + "e=e[found] " + "end " + // # check if condition is true + "if rl_list[1] " + // # did we find a function + "if !rl_list[1](e,rl_list[2]) " + // # condition is not met + "return false " + "end " + "end " + "f(e,ev) " + "return true " + "end " + // Run rules, i.e. check each individual rule + // Returns true if at least one rule matched, false if none + "tasmota.exec_rules = def (ev_json) " + "ev = json.load(ev_json) " + "ret = false " + "if ev == nil " + "log('BRY: ERROR, bad json: '+ev_json, 3) " + "end " + "for r:tasmota_rules.keys() " + "ret = tasmota.try_rule(ev,r,tasmota_rules[r]) || ret " + "end " + "return ret " + "end " + // Not sure how to run `tasmota.exec_rules` from C code, so alias with `_exec_rules()`` + "def _exec_rules(e) return tasmota.exec_rules(e) end " + + // Timers + "tasmota_timers=[] " + "tasmota.timer = def (delay,f) tasmota_timers.push([tasmota.millis(delay),f]) end " + + "def _run_deferred() " + "i=0 " + "while ion("/" WEB_HANDLE_SCRIPT, HandleScriptConfiguration); - // Webserver->on("/ta",HTTP_POST, HandleScriptTextareaConfiguration); - // Webserver->on("/exs", HTTP_POST,[]() { Webserver->sendHeader("Location","/exs");Webserver->send(303);}, script_upload_start); - // Webserver->on("/exs", HTTP_GET, ScriptExecuteUploadSuccess); break; #endif // USE_WEBSERVER case FUNC_SAVE_BEFORE_RESTART: - // if (bitRead(Settings.rule_enabled, 0)) { - // Run_Scripter(">R", 2, 0); - // Scripter_save_pvars(); - // } break; case FUNC_MQTT_DATA: + // callBerryMqttData(); break; case FUNC_WEB_SENSOR: break; @@ -542,5 +823,4 @@ bool Xdrv52(uint8_t function) return result; } -// #endif // ESP32 #endif // USE_BERRY diff --git a/tasmota/xdrv_interface.ino b/tasmota/xdrv_interface.ino index 77c93c6da..f95c0652f 100644 --- a/tasmota/xdrv_interface.ino +++ b/tasmota/xdrv_interface.ino @@ -1081,7 +1081,14 @@ void XsnsDriverState(void) bool XdrvRulesProcess(void) { +#ifdef USE_BERRY + // events are passed to both Rules engine AND Berry engine + bool rule_handled = XdrvCallDriver(10, FUNC_RULES_PROCESS); + bool berry_handled = XdrvCallDriver(52, FUNC_RULES_PROCESS); + return rule_handled || berry_handled; +#else return XdrvCallDriver(10, FUNC_RULES_PROCESS); +#endif } #ifdef USE_DEBUG_DRIVER From 9e0df6ce7551fe436992eeb9a394a1ed7ef8b35b Mon Sep 17 00:00:00 2001 From: Stephan Hadinger Date: Sat, 13 Feb 2021 14:51:52 +0100 Subject: [PATCH 35/41] IRremoteESP8266 library from v2.7.14 to v2.7.15 --- CHANGELOG.md | 1 + .../docs/doxygen/html/annotated.html | 178 - .../html/classIRTcl112Ac__coll__graph.map | 4 - .../html/classIRTcl112Ac__coll__graph.md5 | 1 - .../html/classIRTcl112Ac__coll__graph.png | Bin 2945 -> 0 bytes .../html/classIRTechnibelAc__coll__graph.map | 4 - .../html/classIRTechnibelAc__coll__graph.md5 | 1 - .../html/classIRTechnibelAc__coll__graph.png | Bin 3199 -> 0 bytes .../html/classIRTecoAc__coll__graph.map | 4 - .../html/classIRTecoAc__coll__graph.md5 | 1 - .../html/classIRTecoAc__coll__graph.png | Bin 3054 -> 0 bytes .../html/classIRToshibaAC__coll__graph.map | 4 - .../html/classIRToshibaAC__coll__graph.md5 | 1 - .../html/classIRToshibaAC__coll__graph.png | Bin 3399 -> 0 bytes .../html/classIRTranscoldAc-members.html | 118 - .../html/classIRTranscoldAc__coll__graph.map | 4 - .../html/classIRTranscoldAc__coll__graph.md5 | 1 - .../html/classIRTranscoldAc__coll__graph.png | Bin 3498 -> 0 bytes .../docs/doxygen/html/ir__Technibel_8h.html | 704 --- .../doxygen/html/ir__Technibel_8h_source.html | 328 -- .../docs/doxygen/html/search/all_1.js | 30 - .../docs/doxygen/html/search/all_11.js | 6 - .../docs/doxygen/html/search/all_17.js | 12 - .../docs/doxygen/html/search/all_1a.js | 7 - .../docs/doxygen/html/search/all_1b.js | 4 - .../docs/doxygen/html/search/all_4.js | 136 - .../docs/doxygen/html/search/all_5.js | 39 - .../docs/doxygen/html/search/all_8.js | 36 - .../docs/doxygen/html/search/all_9.js | 198 - .../docs/doxygen/html/search/all_c.js | 19 - .../docs/doxygen/html/search/classes_0.js | 6 - .../docs/doxygen/html/search/classes_1.js | 7 - .../docs/doxygen/html/search/classes_2.js | 13 - .../docs/doxygen/html/search/classes_3.js | 4 - .../docs/doxygen/html/search/classes_4.js | 5 - .../docs/doxygen/html/search/classes_5.js | 8 - .../docs/doxygen/html/search/classes_6.js | 57 - .../docs/doxygen/html/search/classes_7.js | 4 - .../docs/doxygen/html/search/classes_8.js | 4 - .../docs/doxygen/html/search/classes_9.js | 11 - .../docs/doxygen/html/search/classes_a.js | 4 - .../docs/doxygen/html/search/classes_b.js | 4 - .../docs/doxygen/html/search/classes_c.js | 7 - .../docs/doxygen/html/search/classes_d.js | 4 - .../docs/doxygen/html/search/classes_e.js | 4 - .../docs/doxygen/html/search/enums_5.js | 4 - .../docs/doxygen/html/search/enums_7.js | 6 - .../docs/doxygen/html/search/enumvalues_3.js | 6 - .../docs/doxygen/html/search/files_0.js | 7 - .../docs/doxygen/html/search/files_1.js | 8 - .../docs/doxygen/html/search/files_2.js | 4 - .../docs/doxygen/html/search/files_3.js | 115 - .../docs/doxygen/html/search/files_4.js | 4 - .../docs/doxygen/html/search/files_5.js | 4 - .../docs/doxygen/html/search/files_6.js | 4 - .../docs/doxygen/html/search/functions_1.js | 15 - .../docs/doxygen/html/search/functions_15.js | 4 - .../docs/doxygen/html/search/functions_17.js | 4 - .../docs/doxygen/html/search/functions_4.js | 103 - .../docs/doxygen/html/search/functions_a.js | 4 - .../docs/doxygen/html/search/functions_b.js | 7 - .../docs/doxygen/html/search/functions_d.js | 4 - .../docs/doxygen/html/search/functions_f.js | 5 - .../docs/doxygen/html/search/namespaces_0.js | 4 - .../docs/doxygen/html/search/namespaces_1.js | 5 - .../docs/doxygen/html/search/namespaces_2.js | 4 - .../docs/doxygen/html/search/pages_0.js | 4 - .../docs/doxygen/html/search/pages_1.js | 5 - .../docs/doxygen/html/search/pages_2.js | 4 - .../docs/doxygen/html/search/variables_1.js | 7 - .../docs/doxygen/html/search/variables_13.js | 10 - .../docs/doxygen/html/search/variables_14.js | 8 - .../docs/doxygen/html/search/variables_15.js | 8 - .../docs/doxygen/html/search/variables_16.js | 4 - .../docs/doxygen/html/search/variables_2.js | 13 - .../docs/doxygen/html/search/variables_4.js | 14 - .../docs/doxygen/html/search/variables_7.js | 9 - .../docs/doxygen/html/search/variables_a.js | 9 - .../docs/doxygen/html/search/variables_f.js | 6 - .../examples/Web-AC-control/data/favicon.ico | Bin 16446 -> 0 bytes .../Web-AC-control/data/level_1_off.svg | 49 - .../Web-AC-control/data/level_1_on.svg | 49 - .../Web-AC-control/data/level_2_off.svg | 49 - .../Web-AC-control/data/level_2_on.svg | 49 - .../Web-AC-control/data/level_3_off.svg | 49 - .../Web-AC-control/data/level_3_on.svg | 49 - .../Web-AC-control/data/level_4_off.svg | 49 - .../Web-AC-control/data/level_4_on.svg | 49 - .../examples/Web-AC-control/data/ui.html | 109 - .../examples/Web-AC-control/data/ui.js | 132 - .../IRremoteESP8266-2.7.14/src/ir_Technibel.h | 166 - .../IRremoteESP8266-2.7.14/src/ir_Teco.h | 176 - .../.github/CONTRIBUTING.md | 0 .../.github/Contributors.md | 0 .../.github/issue_template.md | 0 .../.gitignore | 0 .../.gitmodules | 0 .../.style.yapf | 0 .../.travis.yml | 0 .../CPPLINT.cfg | 0 .../Doxyfile | 0 .../LICENSE.txt | 0 .../README.md | 6 +- .../README_de.md | 6 +- .../README_fr.md | 6 +- .../ReleaseNotes.md | 27 + .../SupportedProtocols.md | 12 +- .../assets/images/banner.svg | 142 + .../assets/images/logo.svg | 50 + .../docs/README.md | 0 .../docs/README_de.md | 0 .../docs/README_fr.md | 0 .../docs/_config.yml | 0 .../docs/doxygen/html/IRac_8cpp.html | 0 .../docs/doxygen/html/IRac_8h.html | 0 .../docs/doxygen/html/IRac_8h_source.html | 132 +- .../docs/doxygen/html/IRrecv_8cpp.html | 0 .../docs/doxygen/html/IRrecv_8h.html | 0 .../docs/doxygen/html/IRrecv_8h_source.html | 1304 ++--- .../docs/doxygen/html/IRremoteESP8266_8h.html | 91 +- .../html/IRremoteESP8266_8h_source.html | 1580 +++--- .../docs/doxygen/html/IRsend_8cpp.html | 0 .../docs/doxygen/html/IRsend_8h.html | 19 +- .../docs/doxygen/html/IRsend_8h_source.html | 1578 +++--- .../docs/doxygen/html/IRtext_8cpp.html | 0 .../docs/doxygen/html/IRtext_8h.html | 0 .../docs/doxygen/html/IRtext_8h_source.html | 0 .../docs/doxygen/html/IRtimer_8cpp.html | 0 .../docs/doxygen/html/IRtimer_8h.html | 0 .../docs/doxygen/html/IRtimer_8h_source.html | 0 .../docs/doxygen/html/IRutils_8cpp.html | 9 + .../docs/doxygen/html/IRutils_8h.html | 9 + .../docs/doxygen/html/IRutils_8h_source.html | 172 +- .../docs/doxygen/html/README_8md.html | 0 .../docs/doxygen/html/annotated.html | 183 + .../docs/doxygen/html/bc_s.png | Bin .../docs/doxygen/html/bdwn.png | Bin .../html/classIRAirwellAc-members.html | 0 .../docs/doxygen/html/classIRAirwellAc.html | 0 .../html/classIRAirwellAc__coll__graph.map | 0 .../html/classIRAirwellAc__coll__graph.md5 | 0 .../html/classIRAirwellAc__coll__graph.png | Bin .../doxygen/html/classIRAmcorAc-members.html | 0 .../docs/doxygen/html/classIRAmcorAc.html | 0 .../html/classIRAmcorAc__coll__graph.map | 0 .../html/classIRAmcorAc__coll__graph.md5 | 0 .../html/classIRAmcorAc__coll__graph.png | Bin .../doxygen/html/classIRArgoAC-members.html | 0 .../docs/doxygen/html/classIRArgoAC.html | 0 .../html/classIRArgoAC__coll__graph.map | 0 .../html/classIRArgoAC__coll__graph.md5 | 0 .../html/classIRArgoAC__coll__graph.png | Bin .../html/classIRCarrierAc64-members.html | 0 .../docs/doxygen/html/classIRCarrierAc64.html | 0 .../html/classIRCarrierAc64__coll__graph.map | 0 .../html/classIRCarrierAc64__coll__graph.md5 | 0 .../html/classIRCarrierAc64__coll__graph.png | Bin .../doxygen/html/classIRCoolixAC-members.html | 0 .../docs/doxygen/html/classIRCoolixAC.html | 0 .../html/classIRCoolixAC__coll__graph.map | 0 .../html/classIRCoolixAC__coll__graph.md5 | 0 .../html/classIRCoolixAC__coll__graph.png | Bin .../doxygen/html/classIRCoronaAc-members.html | 0 .../docs/doxygen/html/classIRCoronaAc.html | 0 .../html/classIRCoronaAc__coll__graph.map | 0 .../html/classIRCoronaAc__coll__graph.md5 | 0 .../html/classIRCoronaAc__coll__graph.png | Bin .../html/classIRDaikin128-members.html | 0 .../docs/doxygen/html/classIRDaikin128.html | 0 .../html/classIRDaikin128__coll__graph.map | 0 .../html/classIRDaikin128__coll__graph.md5 | 0 .../html/classIRDaikin128__coll__graph.png | Bin .../html/classIRDaikin152-members.html | 0 .../docs/doxygen/html/classIRDaikin152.html | 0 .../html/classIRDaikin152__coll__graph.map | 0 .../html/classIRDaikin152__coll__graph.md5 | 0 .../html/classIRDaikin152__coll__graph.png | Bin .../html/classIRDaikin160-members.html | 0 .../docs/doxygen/html/classIRDaikin160.html | 0 .../html/classIRDaikin160__coll__graph.map | 0 .../html/classIRDaikin160__coll__graph.md5 | 0 .../html/classIRDaikin160__coll__graph.png | Bin .../html/classIRDaikin176-members.html | 0 .../docs/doxygen/html/classIRDaikin176.html | 0 .../html/classIRDaikin176__coll__graph.map | 0 .../html/classIRDaikin176__coll__graph.md5 | 0 .../html/classIRDaikin176__coll__graph.png | Bin .../doxygen/html/classIRDaikin2-members.html | 0 .../docs/doxygen/html/classIRDaikin2.html | 0 .../html/classIRDaikin216-members.html | 0 .../docs/doxygen/html/classIRDaikin216.html | 0 .../html/classIRDaikin216__coll__graph.map | 0 .../html/classIRDaikin216__coll__graph.md5 | 0 .../html/classIRDaikin216__coll__graph.png | Bin .../html/classIRDaikin2__coll__graph.map | 0 .../html/classIRDaikin2__coll__graph.md5 | 0 .../html/classIRDaikin2__coll__graph.png | Bin .../doxygen/html/classIRDaikin64-members.html | 0 .../docs/doxygen/html/classIRDaikin64.html | 0 .../html/classIRDaikin64__coll__graph.map | 0 .../html/classIRDaikin64__coll__graph.md5 | 0 .../html/classIRDaikin64__coll__graph.png | Bin .../html/classIRDaikinESP-members.html | 0 .../docs/doxygen/html/classIRDaikinESP.html | 0 .../html/classIRDaikinESP__coll__graph.map | 0 .../html/classIRDaikinESP__coll__graph.md5 | 0 .../html/classIRDaikinESP__coll__graph.png | Bin .../html/classIRDelonghiAc-members.html | 0 .../docs/doxygen/html/classIRDelonghiAc.html | 0 .../html/classIRDelonghiAc__coll__graph.map | 0 .../html/classIRDelonghiAc__coll__graph.md5 | 0 .../html/classIRDelonghiAc__coll__graph.png | Bin .../html/classIRElectraAc-members.html | 0 .../docs/doxygen/html/classIRElectraAc.html | 0 .../html/classIRElectraAc__coll__graph.map | 0 .../html/classIRElectraAc__coll__graph.md5 | 0 .../html/classIRElectraAc__coll__graph.png | Bin .../html/classIRFujitsuAC-members.html | 0 .../docs/doxygen/html/classIRFujitsuAC.html | 0 .../html/classIRFujitsuAC__coll__graph.map | 0 .../html/classIRFujitsuAC__coll__graph.md5 | 0 .../html/classIRFujitsuAC__coll__graph.png | Bin .../html/classIRGoodweatherAc-members.html | 0 .../doxygen/html/classIRGoodweatherAc.html | 0 .../classIRGoodweatherAc__coll__graph.map | 0 .../classIRGoodweatherAc__coll__graph.md5 | 0 .../classIRGoodweatherAc__coll__graph.png | Bin .../doxygen/html/classIRGreeAC-members.html | 0 .../docs/doxygen/html/classIRGreeAC.html | 0 .../html/classIRGreeAC__coll__graph.map | 0 .../html/classIRGreeAC__coll__graph.md5 | 0 .../html/classIRGreeAC__coll__graph.png | Bin .../doxygen/html/classIRHaierAC-members.html | 0 .../docs/doxygen/html/classIRHaierAC.html | 0 .../html/classIRHaierACYRW02-members.html | 0 .../doxygen/html/classIRHaierACYRW02.html | 0 .../html/classIRHaierACYRW02__coll__graph.map | 0 .../html/classIRHaierACYRW02__coll__graph.md5 | 0 .../html/classIRHaierACYRW02__coll__graph.png | Bin .../html/classIRHaierAC__coll__graph.map | 0 .../html/classIRHaierAC__coll__graph.md5 | 0 .../html/classIRHaierAC__coll__graph.png | Bin .../html/classIRHitachiAc-members.html | 0 .../docs/doxygen/html/classIRHitachiAc.html | 0 .../html/classIRHitachiAc1-members.html | 0 .../docs/doxygen/html/classIRHitachiAc1.html | 0 .../html/classIRHitachiAc1__coll__graph.map | 0 .../html/classIRHitachiAc1__coll__graph.md5 | 0 .../html/classIRHitachiAc1__coll__graph.png | Bin .../html/classIRHitachiAc3-members.html | 0 .../docs/doxygen/html/classIRHitachiAc3.html | 0 .../html/classIRHitachiAc344-members.html | 0 .../doxygen/html/classIRHitachiAc344.html | 0 .../html/classIRHitachiAc344__coll__graph.map | 0 .../html/classIRHitachiAc344__coll__graph.md5 | 0 .../html/classIRHitachiAc344__coll__graph.png | Bin .../classIRHitachiAc344__inherit__graph.map | 0 .../classIRHitachiAc344__inherit__graph.md5 | 0 .../classIRHitachiAc344__inherit__graph.png | Bin .../html/classIRHitachiAc3__coll__graph.map | 0 .../html/classIRHitachiAc3__coll__graph.md5 | 0 .../html/classIRHitachiAc3__coll__graph.png | Bin .../html/classIRHitachiAc424-members.html | 0 .../doxygen/html/classIRHitachiAc424.html | 0 .../html/classIRHitachiAc424__coll__graph.map | 0 .../html/classIRHitachiAc424__coll__graph.md5 | 0 .../html/classIRHitachiAc424__coll__graph.png | Bin .../classIRHitachiAc424__inherit__graph.map | 0 .../classIRHitachiAc424__inherit__graph.md5 | 0 .../classIRHitachiAc424__inherit__graph.png | Bin .../html/classIRHitachiAc__coll__graph.map | 0 .../html/classIRHitachiAc__coll__graph.md5 | 0 .../html/classIRHitachiAc__coll__graph.png | Bin .../html/classIRKelvinatorAC-members.html | 0 .../doxygen/html/classIRKelvinatorAC.html | 0 .../html/classIRKelvinatorAC__coll__graph.map | 0 .../html/classIRKelvinatorAC__coll__graph.md5 | 0 .../html/classIRKelvinatorAC__coll__graph.png | Bin .../doxygen/html/classIRLgAc-members.html | 0 .../docs/doxygen/html/classIRLgAc.html | 0 .../doxygen/html/classIRLgAc__coll__graph.map | 0 .../doxygen/html/classIRLgAc__coll__graph.md5 | 0 .../doxygen/html/classIRLgAc__coll__graph.png | Bin .../doxygen/html/classIRMideaAC-members.html | 0 .../docs/doxygen/html/classIRMideaAC.html | 0 .../html/classIRMideaAC__coll__graph.map | 0 .../html/classIRMideaAC__coll__graph.md5 | 0 .../html/classIRMideaAC__coll__graph.png | Bin .../html/classIRMitsubishi112-members.html | 0 .../doxygen/html/classIRMitsubishi112.html | 0 .../classIRMitsubishi112__coll__graph.map | 0 .../classIRMitsubishi112__coll__graph.md5 | 0 .../classIRMitsubishi112__coll__graph.png | Bin .../html/classIRMitsubishi136-members.html | 0 .../doxygen/html/classIRMitsubishi136.html | 0 .../classIRMitsubishi136__coll__graph.map | 0 .../classIRMitsubishi136__coll__graph.md5 | 0 .../classIRMitsubishi136__coll__graph.png | Bin .../html/classIRMitsubishiAC-members.html | 34 +- .../doxygen/html/classIRMitsubishiAC.html | 85 +- .../html/classIRMitsubishiAC__coll__graph.map | 0 .../html/classIRMitsubishiAC__coll__graph.md5 | 0 .../html/classIRMitsubishiAC__coll__graph.png | Bin .../classIRMitsubishiHeavy152Ac-members.html | 0 .../html/classIRMitsubishiHeavy152Ac.html | 0 ...assIRMitsubishiHeavy152Ac__coll__graph.map | 0 ...assIRMitsubishiHeavy152Ac__coll__graph.md5 | 0 ...assIRMitsubishiHeavy152Ac__coll__graph.png | Bin .../classIRMitsubishiHeavy88Ac-members.html | 0 .../html/classIRMitsubishiHeavy88Ac.html | 0 ...lassIRMitsubishiHeavy88Ac__coll__graph.map | 0 ...lassIRMitsubishiHeavy88Ac__coll__graph.md5 | 0 ...lassIRMitsubishiHeavy88Ac__coll__graph.png | Bin .../html/classIRNeoclimaAc-members.html | 0 .../docs/doxygen/html/classIRNeoclimaAc.html | 0 .../html/classIRNeoclimaAc__coll__graph.map | 0 .../html/classIRNeoclimaAc__coll__graph.md5 | 0 .../html/classIRNeoclimaAc__coll__graph.png | Bin .../html/classIRPanasonicAc-members.html | 0 .../docs/doxygen/html/classIRPanasonicAc.html | 0 .../html/classIRPanasonicAc32-members.html | 0 .../doxygen/html/classIRPanasonicAc32.html | 0 .../classIRPanasonicAc32__coll__graph.map | 0 .../classIRPanasonicAc32__coll__graph.md5 | 0 .../classIRPanasonicAc32__coll__graph.png | Bin .../html/classIRPanasonicAc__coll__graph.map | 0 .../html/classIRPanasonicAc__coll__graph.md5 | 0 .../html/classIRPanasonicAc__coll__graph.png | Bin .../html/classIRSamsungAc-members.html | 0 .../docs/doxygen/html/classIRSamsungAc.html | 0 .../html/classIRSamsungAc__coll__graph.map | 0 .../html/classIRSamsungAc__coll__graph.md5 | 0 .../html/classIRSamsungAc__coll__graph.png | Bin .../doxygen/html/classIRSanyoAc-members.html | 0 .../docs/doxygen/html/classIRSanyoAc.html | 0 .../html/classIRSanyoAc__coll__graph.map | 0 .../html/classIRSanyoAc__coll__graph.md5 | 0 .../html/classIRSanyoAc__coll__graph.png | Bin .../doxygen/html/classIRSharpAc-members.html | 2 +- .../docs/doxygen/html/classIRSharpAc.html | 27 +- .../html/classIRSharpAc__coll__graph.map | 0 .../html/classIRSharpAc__coll__graph.md5 | 0 .../html/classIRSharpAc__coll__graph.png | Bin .../doxygen/html/classIRTcl112Ac-members.html | 48 +- .../docs/doxygen/html/classIRTcl112Ac.html | 228 +- .../html/classIRTcl112Ac__coll__graph.map | 5 + .../html/classIRTcl112Ac__coll__graph.md5 | 1 + .../html/classIRTcl112Ac__coll__graph.png | Bin 0 -> 5627 bytes .../html/classIRTechnibelAc-members.html | 58 +- .../docs/doxygen/html/classIRTechnibelAc.html | 311 +- .../html/classIRTechnibelAc__coll__graph.map | 5 + .../html/classIRTechnibelAc__coll__graph.md5 | 1 + .../html/classIRTechnibelAc__coll__graph.png | Bin 0 -> 6013 bytes .../doxygen/html/classIRTecoAc-members.html | 46 +- .../docs/doxygen/html/classIRTecoAc.html | 254 +- .../html/classIRTecoAc__coll__graph.map | 5 + .../html/classIRTecoAc__coll__graph.md5 | 1 + .../html/classIRTecoAc__coll__graph.png | Bin 0 -> 5539 bytes .../html/classIRToshibaAC-members.html | 32 +- .../docs/doxygen/html/classIRToshibaAC.html | 258 +- .../html/classIRToshibaAC__coll__graph.map | 5 + .../html/classIRToshibaAC__coll__graph.md5 | 1 + .../html/classIRToshibaAC__coll__graph.png | Bin 0 -> 6229 bytes .../html/classIRTranscoldAc-members.html | 112 + .../docs/doxygen/html/classIRTranscoldAc.html | 416 +- .../html/classIRTranscoldAc__coll__graph.map | 5 + .../html/classIRTranscoldAc__coll__graph.md5 | 1 + .../html/classIRTranscoldAc__coll__graph.png | Bin 0 -> 6296 bytes .../html/classIRTrotecESP-members.html | 0 .../docs/doxygen/html/classIRTrotecESP.html | 0 .../html/classIRTrotecESP__coll__graph.map | 0 .../html/classIRTrotecESP__coll__graph.md5 | 0 .../html/classIRTrotecESP__coll__graph.png | Bin .../doxygen/html/classIRVestelAc-members.html | 0 .../docs/doxygen/html/classIRVestelAc.html | 0 .../html/classIRVestelAc__coll__graph.map | 0 .../html/classIRVestelAc__coll__graph.md5 | 0 .../html/classIRVestelAc__coll__graph.png | Bin .../doxygen/html/classIRVoltas-members.html | 0 .../docs/doxygen/html/classIRVoltas.html | 0 .../html/classIRVoltas__coll__graph.map | 0 .../html/classIRVoltas__coll__graph.md5 | 0 .../html/classIRVoltas__coll__graph.png | Bin .../html/classIRWhirlpoolAc-members.html | 0 .../docs/doxygen/html/classIRWhirlpoolAc.html | 0 .../html/classIRWhirlpoolAc__coll__graph.map | 0 .../html/classIRWhirlpoolAc__coll__graph.md5 | 0 .../html/classIRWhirlpoolAc__coll__graph.png | Bin .../docs/doxygen/html/classIRac-members.html | 0 .../docs/doxygen/html/classIRac.html | 7 + .../doxygen/html/classIRac__coll__graph.map | 0 .../doxygen/html/classIRac__coll__graph.md5 | 0 .../doxygen/html/classIRac__coll__graph.png | Bin .../doxygen/html/classIRrecv-members.html | 56 +- .../docs/doxygen/html/classIRrecv.html | 175 +- .../doxygen/html/classIRrecv__coll__graph.map | 0 .../doxygen/html/classIRrecv__coll__graph.md5 | 0 .../doxygen/html/classIRrecv__coll__graph.png | Bin .../doxygen/html/classIRsend-members.html | 70 +- .../docs/doxygen/html/classIRsend.html | 110 +- .../doxygen/html/classIRtimer-members.html | 0 .../docs/doxygen/html/classIRtimer.html | 0 .../doxygen/html/classTimerMs-members.html | 0 .../docs/doxygen/html/classTimerMs.html | 0 .../html/classdecode__results-members.html | 0 .../doxygen/html/classdecode__results.html | 32 +- .../docs/doxygen/html/classes.html | 226 +- .../docs/doxygen/html/closed.png | Bin .../docs/doxygen/html/de-CH_8h.html | 0 .../docs/doxygen/html/de-CH_8h_source.html | 0 .../docs/doxygen/html/de-DE_8h.html | 0 .../docs/doxygen/html/de-DE_8h_source.html | 0 .../docs/doxygen/html/defaults_8h.html | 0 .../docs/doxygen/html/defaults_8h_source.html | 520 +- .../docs/doxygen/html/deprecated.html | 0 .../dir_49e56c817e5e54854c35e136979f97ca.html | 0 .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 6 + .../dir_84fe998d1eb06414cc389ad334e77e63.html | 0 .../docs/doxygen/html/doc.png | Bin .../docs/doxygen/html/doxygen.css | 0 .../docs/doxygen/html/doxygen.png | Bin .../docs/doxygen/html/doxygen__index_8md.html | 0 .../docs/doxygen/html/dynsections.js | 0 .../docs/doxygen/html/en-AU_8h.html | 0 .../docs/doxygen/html/en-AU_8h_source.html | 0 .../docs/doxygen/html/en-IE_8h.html | 0 .../docs/doxygen/html/en-IE_8h_source.html | 0 .../docs/doxygen/html/en-UK_8h.html | 0 .../docs/doxygen/html/en-UK_8h_source.html | 0 .../docs/doxygen/html/en-US_8h.html | 0 .../docs/doxygen/html/en-US_8h_source.html | 0 .../docs/doxygen/html/es-ES_8h.html | 0 .../docs/doxygen/html/es-ES_8h_source.html | 0 .../docs/doxygen/html/files.html | 182 +- .../docs/doxygen/html/folderclosed.png | Bin .../docs/doxygen/html/folderopen.png | Bin .../docs/doxygen/html/fr-FR_8h.html | 0 .../docs/doxygen/html/fr-FR_8h_source.html | 0 .../docs/doxygen/html/functions.html | 37 +- .../docs/doxygen/html/functions_a.html | 3 - .../docs/doxygen/html/functions_b.html | 4 +- .../docs/doxygen/html/functions_c.html | 2 +- .../docs/doxygen/html/functions_d.html | 6 + .../docs/doxygen/html/functions_e.html | 6 +- .../docs/doxygen/html/functions_f.html | 11 + .../docs/doxygen/html/functions_func.html | 0 .../docs/doxygen/html/functions_func_a.html | 0 .../docs/doxygen/html/functions_func_b.html | 4 +- .../docs/doxygen/html/functions_func_c.html | 2 +- .../docs/doxygen/html/functions_func_d.html | 6 + .../docs/doxygen/html/functions_func_e.html | 0 .../docs/doxygen/html/functions_func_f.html | 0 .../docs/doxygen/html/functions_func_g.html | 99 +- .../docs/doxygen/html/functions_func_h.html | 0 .../docs/doxygen/html/functions_func_i.html | 2 +- .../docs/doxygen/html/functions_func_k.html | 0 .../docs/doxygen/html/functions_func_l.html | 0 .../docs/doxygen/html/functions_func_m.html | 4 +- .../docs/doxygen/html/functions_func_n.html | 0 .../docs/doxygen/html/functions_func_o.html | 8 +- .../docs/doxygen/html/functions_func_p.html | 0 .../docs/doxygen/html/functions_func_r.html | 1 - .../docs/doxygen/html/functions_func_s.html | 20 +- .../docs/doxygen/html/functions_func_t.html | 20 +- .../docs/doxygen/html/functions_func_u.html | 3 - .../docs/doxygen/html/functions_func_v.html | 0 .../docs/doxygen/html/functions_func_w.html | 0 .../docs/doxygen/html/functions_func_~.html | 0 .../docs/doxygen/html/functions_g.html | 99 +- .../docs/doxygen/html/functions_h.html | 12 + .../docs/doxygen/html/functions_i.html | 2 +- .../docs/doxygen/html/functions_k.html | 0 .../docs/doxygen/html/functions_l.html | 10 +- .../docs/doxygen/html/functions_m.html | 14 +- .../docs/doxygen/html/functions_n.html | 0 .../docs/doxygen/html/functions_o.html | 8 +- .../docs/doxygen/html/functions_p.html | 11 +- .../docs/doxygen/html/functions_q.html | 0 .../docs/doxygen/html/functions_r.html | 11 +- .../docs/doxygen/html/functions_rela.html | 0 .../docs/doxygen/html/functions_s.html | 45 +- .../docs/doxygen/html/functions_t.html | 44 +- .../docs/doxygen/html/functions_u.html | 7 +- .../docs/doxygen/html/functions_v.html | 0 .../docs/doxygen/html/functions_vars.html | 35 + .../docs/doxygen/html/functions_vars_a.html | 3 - .../docs/doxygen/html/functions_vars_b.html | 0 .../docs/doxygen/html/functions_vars_c.html | 0 .../docs/doxygen/html/functions_vars_d.html | 0 .../docs/doxygen/html/functions_vars_e.html | 6 +- .../docs/doxygen/html/functions_vars_f.html | 11 + .../docs/doxygen/html/functions_vars_h.html | 12 + .../docs/doxygen/html/functions_vars_i.html | 0 .../docs/doxygen/html/functions_vars_l.html | 10 +- .../docs/doxygen/html/functions_vars_m.html | 10 +- .../docs/doxygen/html/functions_vars_n.html | 0 .../docs/doxygen/html/functions_vars_o.html | 0 .../docs/doxygen/html/functions_vars_p.html | 11 +- .../docs/doxygen/html/functions_vars_q.html | 0 .../docs/doxygen/html/functions_vars_r.html | 10 +- .../docs/doxygen/html/functions_vars_s.html | 25 +- .../docs/doxygen/html/functions_vars_t.html | 24 +- .../docs/doxygen/html/functions_vars_u.html | 4 + .../docs/doxygen/html/functions_vars_v.html | 0 .../docs/doxygen/html/functions_vars_w.html | 1 + .../docs/doxygen/html/functions_vars_x.html | 0 .../docs/doxygen/html/functions_vars_z.html | 0 .../docs/doxygen/html/functions_w.html | 1 + .../docs/doxygen/html/functions_x.html | 0 .../docs/doxygen/html/functions_z.html | 0 .../docs/doxygen/html/functions_~.html | 0 .../docs/doxygen/html/globals.html | 0 .../docs/doxygen/html/globals_a.html | 3 + .../docs/doxygen/html/globals_c.html | 0 .../docs/doxygen/html/globals_d.html | 0 .../docs/doxygen/html/globals_e.html | 3 + .../docs/doxygen/html/globals_enum.html | 0 .../docs/doxygen/html/globals_eval.html | 9 + .../docs/doxygen/html/globals_f.html | 0 .../docs/doxygen/html/globals_func.html | 0 .../docs/doxygen/html/globals_g.html | 0 .../docs/doxygen/html/globals_h.html | 0 .../docs/doxygen/html/globals_i.html | 0 .../docs/doxygen/html/globals_j.html | 0 .../docs/doxygen/html/globals_k.html | 470 +- .../docs/doxygen/html/globals_l.html | 0 .../docs/doxygen/html/globals_m.html | 3 + .../docs/doxygen/html/globals_n.html | 0 .../docs/doxygen/html/globals_p.html | 0 .../docs/doxygen/html/globals_r.html | 0 .../docs/doxygen/html/globals_s.html | 0 .../docs/doxygen/html/globals_t.html | 0 .../docs/doxygen/html/globals_type.html | 0 .../docs/doxygen/html/globals_u.html | 0 .../docs/doxygen/html/globals_v.html | 0 .../docs/doxygen/html/globals_vars.html | 0 .../docs/doxygen/html/globals_vars_i.html | 0 .../docs/doxygen/html/globals_vars_k.html | 462 +- .../docs/doxygen/html/globals_w.html | 0 .../docs/doxygen/html/globals_x.html | 0 .../docs/doxygen/html/globals_y.html | 0 .../docs/doxygen/html/globals_z.html | 0 .../docs/doxygen/html/graph_legend.html | 0 .../docs/doxygen/html/graph_legend.md5 | 0 .../docs/doxygen/html/graph_legend.png | Bin .../docs/doxygen/html/hierarchy.html | 99 +- .../docs/doxygen/html/i18n_8h.html | 0 .../docs/doxygen/html/i18n_8h_source.html | 0 .../docs/doxygen/html/index.html | 0 .../docs/doxygen/html/inherit_graph_0.map | 0 .../docs/doxygen/html/inherit_graph_0.md5 | 0 .../docs/doxygen/html/inherit_graph_0.png | Bin .../docs/doxygen/html/inherit_graph_1.map | 0 .../docs/doxygen/html/inherit_graph_1.md5 | 0 .../docs/doxygen/html/inherit_graph_1.png | Bin .../docs/doxygen/html/inherit_graph_10.map | 0 .../docs/doxygen/html/inherit_graph_10.md5 | 0 .../docs/doxygen/html/inherit_graph_10.png | Bin .../docs/doxygen/html/inherit_graph_100.map} | 0 .../docs/doxygen/html/inherit_graph_100.md5} | 0 .../docs/doxygen/html/inherit_graph_100.png} | Bin .../docs/doxygen/html/inherit_graph_11.map | 0 .../docs/doxygen/html/inherit_graph_11.md5 | 0 .../docs/doxygen/html/inherit_graph_11.png | Bin .../docs/doxygen/html/inherit_graph_12.map | 0 .../docs/doxygen/html/inherit_graph_12.md5 | 0 .../docs/doxygen/html/inherit_graph_12.png | Bin .../docs/doxygen/html/inherit_graph_13.map | 0 .../docs/doxygen/html/inherit_graph_13.md5 | 0 .../docs/doxygen/html/inherit_graph_13.png | Bin .../docs/doxygen/html/inherit_graph_14.map | 0 .../docs/doxygen/html/inherit_graph_14.md5 | 0 .../docs/doxygen/html/inherit_graph_14.png | Bin .../docs/doxygen/html/inherit_graph_15.map | 0 .../docs/doxygen/html/inherit_graph_15.md5 | 0 .../docs/doxygen/html/inherit_graph_15.png | Bin .../docs/doxygen/html/inherit_graph_16.map | 0 .../docs/doxygen/html/inherit_graph_16.md5 | 0 .../docs/doxygen/html/inherit_graph_16.png | Bin .../docs/doxygen/html/inherit_graph_17.map | 0 .../docs/doxygen/html/inherit_graph_17.md5 | 0 .../docs/doxygen/html/inherit_graph_17.png | Bin .../docs/doxygen/html/inherit_graph_18.map | 0 .../docs/doxygen/html/inherit_graph_18.md5 | 0 .../docs/doxygen/html/inherit_graph_18.png | Bin .../docs/doxygen/html/inherit_graph_19.map | 0 .../docs/doxygen/html/inherit_graph_19.md5 | 0 .../docs/doxygen/html/inherit_graph_19.png | Bin .../docs/doxygen/html/inherit_graph_2.map | 0 .../docs/doxygen/html/inherit_graph_2.md5 | 0 .../docs/doxygen/html/inherit_graph_2.png | Bin .../docs/doxygen/html/inherit_graph_20.map | 0 .../docs/doxygen/html/inherit_graph_20.md5 | 0 .../docs/doxygen/html/inherit_graph_20.png | Bin .../docs/doxygen/html/inherit_graph_21.map | 0 .../docs/doxygen/html/inherit_graph_21.md5 | 0 .../docs/doxygen/html/inherit_graph_21.png | Bin .../docs/doxygen/html/inherit_graph_22.map | 0 .../docs/doxygen/html/inherit_graph_22.md5 | 0 .../docs/doxygen/html/inherit_graph_22.png | Bin .../docs/doxygen/html/inherit_graph_23.map | 0 .../docs/doxygen/html/inherit_graph_23.md5 | 0 .../docs/doxygen/html/inherit_graph_23.png | Bin .../docs/doxygen/html/inherit_graph_24.map | 0 .../docs/doxygen/html/inherit_graph_24.md5 | 0 .../docs/doxygen/html/inherit_graph_24.png | Bin .../docs/doxygen/html/inherit_graph_25.map | 0 .../docs/doxygen/html/inherit_graph_25.md5 | 0 .../docs/doxygen/html/inherit_graph_25.png | Bin .../docs/doxygen/html/inherit_graph_26.map | 0 .../docs/doxygen/html/inherit_graph_26.md5 | 0 .../docs/doxygen/html/inherit_graph_26.png | Bin .../docs/doxygen/html/inherit_graph_27.map | 0 .../docs/doxygen/html/inherit_graph_27.md5 | 0 .../docs/doxygen/html/inherit_graph_27.png | Bin .../docs/doxygen/html/inherit_graph_28.map | 0 .../docs/doxygen/html/inherit_graph_28.md5 | 0 .../docs/doxygen/html/inherit_graph_28.png | Bin .../docs/doxygen/html/inherit_graph_29.map | 0 .../docs/doxygen/html/inherit_graph_29.md5 | 0 .../docs/doxygen/html/inherit_graph_29.png | Bin .../docs/doxygen/html/inherit_graph_3.map | 0 .../docs/doxygen/html/inherit_graph_3.md5 | 0 .../docs/doxygen/html/inherit_graph_3.png | Bin .../docs/doxygen/html/inherit_graph_30.map | 0 .../docs/doxygen/html/inherit_graph_30.md5 | 0 .../docs/doxygen/html/inherit_graph_30.png | Bin .../docs/doxygen/html/inherit_graph_31.map | 0 .../docs/doxygen/html/inherit_graph_31.md5 | 0 .../docs/doxygen/html/inherit_graph_31.png | Bin .../docs/doxygen/html/inherit_graph_32.map | 0 .../docs/doxygen/html/inherit_graph_32.md5 | 0 .../docs/doxygen/html/inherit_graph_32.png | Bin .../docs/doxygen/html/inherit_graph_33.map | 0 .../docs/doxygen/html/inherit_graph_33.md5 | 0 .../docs/doxygen/html/inherit_graph_33.png | Bin .../docs/doxygen/html/inherit_graph_34.map | 0 .../docs/doxygen/html/inherit_graph_34.md5 | 0 .../docs/doxygen/html/inherit_graph_34.png | Bin .../docs/doxygen/html/inherit_graph_35.map | 0 .../docs/doxygen/html/inherit_graph_35.md5 | 0 .../docs/doxygen/html/inherit_graph_35.png | Bin .../docs/doxygen/html/inherit_graph_36.map | 0 .../docs/doxygen/html/inherit_graph_36.md5 | 0 .../docs/doxygen/html/inherit_graph_36.png | Bin .../docs/doxygen/html/inherit_graph_37.map | 0 .../docs/doxygen/html/inherit_graph_37.md5 | 0 .../docs/doxygen/html/inherit_graph_37.png | Bin .../docs/doxygen/html/inherit_graph_38.map | 0 .../docs/doxygen/html/inherit_graph_38.md5 | 0 .../docs/doxygen/html/inherit_graph_38.png | Bin .../docs/doxygen/html/inherit_graph_39.map | 0 .../docs/doxygen/html/inherit_graph_39.md5 | 0 .../docs/doxygen/html/inherit_graph_39.png | Bin .../docs/doxygen/html/inherit_graph_4.map | 0 .../docs/doxygen/html/inherit_graph_4.md5 | 0 .../docs/doxygen/html/inherit_graph_4.png | Bin .../docs/doxygen/html/inherit_graph_40.map | 0 .../docs/doxygen/html/inherit_graph_40.md5 | 0 .../docs/doxygen/html/inherit_graph_40.png | Bin .../docs/doxygen/html/inherit_graph_41.map | 0 .../docs/doxygen/html/inherit_graph_41.md5 | 0 .../docs/doxygen/html/inherit_graph_41.png | Bin .../docs/doxygen/html/inherit_graph_42.map | 0 .../docs/doxygen/html/inherit_graph_42.md5 | 0 .../docs/doxygen/html/inherit_graph_42.png | Bin .../docs/doxygen/html/inherit_graph_43.map | 0 .../docs/doxygen/html/inherit_graph_43.md5 | 0 .../docs/doxygen/html/inherit_graph_43.png | Bin .../docs/doxygen/html/inherit_graph_44.map | 0 .../docs/doxygen/html/inherit_graph_44.md5 | 0 .../docs/doxygen/html/inherit_graph_44.png | Bin .../docs/doxygen/html/inherit_graph_45.map | 0 .../docs/doxygen/html/inherit_graph_45.md5 | 0 .../docs/doxygen/html/inherit_graph_45.png | Bin .../docs/doxygen/html/inherit_graph_46.map | 0 .../docs/doxygen/html/inherit_graph_46.md5 | 0 .../docs/doxygen/html/inherit_graph_46.png | Bin .../docs/doxygen/html/inherit_graph_47.map | 0 .../docs/doxygen/html/inherit_graph_47.md5 | 0 .../docs/doxygen/html/inherit_graph_47.png | Bin .../docs/doxygen/html/inherit_graph_48.map | 0 .../docs/doxygen/html/inherit_graph_48.md5 | 0 .../docs/doxygen/html/inherit_graph_48.png | Bin .../docs/doxygen/html/inherit_graph_49.map | 0 .../docs/doxygen/html/inherit_graph_49.md5 | 0 .../docs/doxygen/html/inherit_graph_49.png | Bin .../docs/doxygen/html/inherit_graph_5.map | 0 .../docs/doxygen/html/inherit_graph_5.md5 | 0 .../docs/doxygen/html/inherit_graph_5.png | Bin .../docs/doxygen/html/inherit_graph_50.map | 0 .../docs/doxygen/html/inherit_graph_50.md5 | 0 .../docs/doxygen/html/inherit_graph_50.png | Bin .../docs/doxygen/html/inherit_graph_51.map | 0 .../docs/doxygen/html/inherit_graph_51.md5 | 0 .../docs/doxygen/html/inherit_graph_51.png | Bin .../docs/doxygen/html/inherit_graph_52.map | 0 .../docs/doxygen/html/inherit_graph_52.md5 | 0 .../docs/doxygen/html/inherit_graph_52.png | Bin .../docs/doxygen/html/inherit_graph_53.map | 0 .../docs/doxygen/html/inherit_graph_53.md5 | 0 .../docs/doxygen/html/inherit_graph_53.png | Bin .../docs/doxygen/html/inherit_graph_54.map | 0 .../docs/doxygen/html/inherit_graph_54.md5 | 0 .../docs/doxygen/html/inherit_graph_54.png | Bin .../docs/doxygen/html/inherit_graph_55.map | 0 .../docs/doxygen/html/inherit_graph_55.md5 | 0 .../docs/doxygen/html/inherit_graph_55.png | Bin .../docs/doxygen/html/inherit_graph_56.map | 0 .../docs/doxygen/html/inherit_graph_56.md5 | 0 .../docs/doxygen/html/inherit_graph_56.png | Bin .../docs/doxygen/html/inherit_graph_57.map | 0 .../docs/doxygen/html/inherit_graph_57.md5 | 0 .../docs/doxygen/html/inherit_graph_57.png | Bin .../docs/doxygen/html/inherit_graph_58.map | 0 .../docs/doxygen/html/inherit_graph_58.md5 | 0 .../docs/doxygen/html/inherit_graph_58.png | Bin .../docs/doxygen/html/inherit_graph_59.map | 0 .../docs/doxygen/html/inherit_graph_59.md5 | 0 .../docs/doxygen/html/inherit_graph_59.png | Bin .../docs/doxygen/html/inherit_graph_6.map | 0 .../docs/doxygen/html/inherit_graph_6.md5 | 0 .../docs/doxygen/html/inherit_graph_6.png | Bin .../docs/doxygen/html/inherit_graph_60.map | 0 .../docs/doxygen/html/inherit_graph_60.md5 | 0 .../docs/doxygen/html/inherit_graph_60.png | Bin .../docs/doxygen/html/inherit_graph_61.map | 0 .../docs/doxygen/html/inherit_graph_61.md5 | 0 .../docs/doxygen/html/inherit_graph_61.png | Bin .../docs/doxygen/html/inherit_graph_62.map | 0 .../docs/doxygen/html/inherit_graph_62.md5 | 0 .../docs/doxygen/html/inherit_graph_62.png | Bin .../docs/doxygen/html/inherit_graph_63.map | 0 .../docs/doxygen/html/inherit_graph_63.md5 | 0 .../docs/doxygen/html/inherit_graph_63.png | Bin .../docs/doxygen/html/inherit_graph_64.map | 0 .../docs/doxygen/html/inherit_graph_64.md5 | 0 .../docs/doxygen/html/inherit_graph_64.png | Bin .../docs/doxygen/html/inherit_graph_65.map | 0 .../docs/doxygen/html/inherit_graph_65.md5 | 0 .../docs/doxygen/html/inherit_graph_65.png | Bin .../docs/doxygen/html/inherit_graph_66.map | 0 .../docs/doxygen/html/inherit_graph_66.md5 | 0 .../docs/doxygen/html/inherit_graph_66.png | Bin .../docs/doxygen/html/inherit_graph_67.map | 0 .../docs/doxygen/html/inherit_graph_67.md5 | 0 .../docs/doxygen/html/inherit_graph_67.png | Bin .../docs/doxygen/html/inherit_graph_68.map | 0 .../docs/doxygen/html/inherit_graph_68.md5 | 0 .../docs/doxygen/html/inherit_graph_68.png | Bin .../docs/doxygen/html/inherit_graph_69.map | 0 .../docs/doxygen/html/inherit_graph_69.md5 | 0 .../docs/doxygen/html/inherit_graph_69.png | Bin .../docs/doxygen/html/inherit_graph_7.map | 0 .../docs/doxygen/html/inherit_graph_7.md5 | 0 .../docs/doxygen/html/inherit_graph_7.png | Bin .../docs/doxygen/html/inherit_graph_70.map | 0 .../docs/doxygen/html/inherit_graph_70.md5 | 0 .../docs/doxygen/html/inherit_graph_70.png | Bin .../docs/doxygen/html/inherit_graph_71.map | 0 .../docs/doxygen/html/inherit_graph_71.md5 | 0 .../docs/doxygen/html/inherit_graph_71.png | Bin .../docs/doxygen/html/inherit_graph_72.map | 0 .../docs/doxygen/html/inherit_graph_72.md5 | 0 .../docs/doxygen/html/inherit_graph_72.png | Bin .../docs/doxygen/html/inherit_graph_73.map | 0 .../docs/doxygen/html/inherit_graph_73.md5 | 0 .../docs/doxygen/html/inherit_graph_73.png | Bin .../docs/doxygen/html/inherit_graph_74.map | 0 .../docs/doxygen/html/inherit_graph_74.md5 | 0 .../docs/doxygen/html/inherit_graph_74.png | Bin .../docs/doxygen/html/inherit_graph_75.map | 0 .../docs/doxygen/html/inherit_graph_75.md5 | 0 .../docs/doxygen/html/inherit_graph_75.png | Bin .../docs/doxygen/html/inherit_graph_76.map | 0 .../docs/doxygen/html/inherit_graph_76.md5 | 0 .../docs/doxygen/html/inherit_graph_76.png | Bin .../docs/doxygen/html/inherit_graph_77.map | 0 .../docs/doxygen/html/inherit_graph_77.md5 | 0 .../docs/doxygen/html/inherit_graph_77.png | Bin .../docs/doxygen/html/inherit_graph_78.map | 0 .../docs/doxygen/html/inherit_graph_78.md5 | 0 .../docs/doxygen/html/inherit_graph_78.png | Bin .../docs/doxygen/html/inherit_graph_79.map | 0 .../docs/doxygen/html/inherit_graph_79.md5 | 0 .../docs/doxygen/html/inherit_graph_79.png | Bin .../docs/doxygen/html/inherit_graph_8.map | 0 .../docs/doxygen/html/inherit_graph_8.md5 | 0 .../docs/doxygen/html/inherit_graph_8.png | Bin .../docs/doxygen/html/inherit_graph_80.map | 0 .../docs/doxygen/html/inherit_graph_80.md5 | 0 .../docs/doxygen/html/inherit_graph_80.png | Bin .../docs/doxygen/html/inherit_graph_81.map | 0 .../docs/doxygen/html/inherit_graph_81.md5 | 0 .../docs/doxygen/html/inherit_graph_81.png | Bin .../docs/doxygen/html/inherit_graph_82.map | 0 .../docs/doxygen/html/inherit_graph_82.md5 | 0 .../docs/doxygen/html/inherit_graph_82.png | Bin .../docs/doxygen/html/inherit_graph_83.map | 0 .../docs/doxygen/html/inherit_graph_83.md5 | 0 .../docs/doxygen/html/inherit_graph_83.png | Bin .../docs/doxygen/html/inherit_graph_84.map | 0 .../docs/doxygen/html/inherit_graph_84.md5 | 0 .../docs/doxygen/html/inherit_graph_84.png | Bin .../docs/doxygen/html/inherit_graph_85.map | 0 .../docs/doxygen/html/inherit_graph_85.md5 | 0 .../docs/doxygen/html/inherit_graph_85.png | Bin .../docs/doxygen/html/inherit_graph_86.map | 0 .../docs/doxygen/html/inherit_graph_86.md5 | 0 .../docs/doxygen/html/inherit_graph_86.png | Bin .../docs/doxygen/html/inherit_graph_87.map | 0 .../docs/doxygen/html/inherit_graph_87.md5 | 0 .../docs/doxygen/html/inherit_graph_87.png | Bin .../docs/doxygen/html/inherit_graph_88.map | 0 .../docs/doxygen/html/inherit_graph_88.md5 | 0 .../docs/doxygen/html/inherit_graph_88.png | Bin .../docs/doxygen/html/inherit_graph_89.map | 0 .../docs/doxygen/html/inherit_graph_89.md5 | 0 .../docs/doxygen/html/inherit_graph_89.png | Bin .../docs/doxygen/html/inherit_graph_9.map | 0 .../docs/doxygen/html/inherit_graph_9.md5 | 0 .../docs/doxygen/html/inherit_graph_9.png | Bin .../docs/doxygen/html/inherit_graph_90.map | 0 .../docs/doxygen/html/inherit_graph_90.md5 | 0 .../docs/doxygen/html/inherit_graph_90.png | Bin .../docs/doxygen/html/inherit_graph_91.map | 0 .../docs/doxygen/html/inherit_graph_91.md5 | 0 .../docs/doxygen/html/inherit_graph_91.png | Bin .../docs/doxygen/html/inherit_graph_92.map | 0 .../docs/doxygen/html/inherit_graph_92.md5 | 0 .../docs/doxygen/html/inherit_graph_92.png | Bin .../docs/doxygen/html/inherit_graph_93.map | 0 .../docs/doxygen/html/inherit_graph_93.md5 | 0 .../docs/doxygen/html/inherit_graph_93.png | Bin .../docs/doxygen/html/inherit_graph_94.map | 3 + .../docs/doxygen/html/inherit_graph_94.md5 | 1 + .../docs/doxygen/html/inherit_graph_94.png | Bin 0 -> 1185 bytes .../docs/doxygen/html/inherit_graph_95.map | 3 + .../docs/doxygen/html/inherit_graph_95.md5 | 1 + .../docs/doxygen/html/inherit_graph_95.png | Bin 0 -> 1443 bytes .../docs/doxygen/html/inherit_graph_96.map | 3 + .../docs/doxygen/html/inherit_graph_96.md5 | 1 + .../docs/doxygen/html/inherit_graph_96.png | Bin 0 -> 1141 bytes .../docs/doxygen/html/inherit_graph_97.map} | 0 .../docs/doxygen/html/inherit_graph_97.md5} | 0 .../docs/doxygen/html/inherit_graph_97.png} | Bin .../docs/doxygen/html/inherit_graph_98.map | 3 + .../docs/doxygen/html/inherit_graph_98.md5 | 1 + .../docs/doxygen/html/inherit_graph_98.png | Bin 0 -> 1518 bytes .../docs/doxygen/html/inherit_graph_99.map | 3 + .../docs/doxygen/html/inherit_graph_99.md5 | 1 + .../docs/doxygen/html/inherit_graph_99.png | Bin 0 -> 1527 bytes .../docs/doxygen/html/inherits.html | 29 +- .../docs/doxygen/html/ir__Airwell_8cpp.html | 0 .../docs/doxygen/html/ir__Airwell_8h.html | 0 .../doxygen/html/ir__Airwell_8h_source.html | 6 +- .../docs/doxygen/html/ir__Aiwa_8cpp.html | 0 .../docs/doxygen/html/ir__Amcor_8cpp.html | 0 .../docs/doxygen/html/ir__Amcor_8h.html | 0 .../doxygen/html/ir__Amcor_8h_source.html | 8 +- .../docs/doxygen/html/ir__Argo_8cpp.html | 0 .../docs/doxygen/html/ir__Argo_8h.html | 0 .../docs/doxygen/html/ir__Argo_8h_source.html | 8 +- .../docs/doxygen/html/ir__Carrier_8cpp.html | 0 .../docs/doxygen/html/ir__Carrier_8h.html | 0 .../doxygen/html/ir__Carrier_8h_source.html | 6 +- .../docs/doxygen/html/ir__Coolix_8cpp.html | 0 .../docs/doxygen/html/ir__Coolix_8h.html | 0 .../doxygen/html/ir__Coolix_8h_source.html | 6 +- .../docs/doxygen/html/ir__Corona_8cpp.html | 0 .../docs/doxygen/html/ir__Corona_8h.html | 0 .../doxygen/html/ir__Corona_8h_source.html | 8 +- .../docs/doxygen/html/ir__Daikin_8cpp.html | 0 .../docs/doxygen/html/ir__Daikin_8h.html | 134 +- .../doxygen/html/ir__Daikin_8h_source.html | 2905 +++++------ .../docs/doxygen/html/ir__Delonghi_8cpp.html | 0 .../docs/doxygen/html/ir__Delonghi_8h.html | 0 .../doxygen/html/ir__Delonghi_8h_source.html | 6 +- .../docs/doxygen/html/ir__Denon_8cpp.html | 2 +- .../docs/doxygen/html/ir__Dish_8cpp.html | 0 .../docs/doxygen/html/ir__Doshisha_8cpp.html | 0 .../docs/doxygen/html/ir__EcoClim_8cpp.html | 258 + .../docs/doxygen/html/ir__Electra_8cpp.html | 0 .../docs/doxygen/html/ir__Electra_8h.html | 0 .../doxygen/html/ir__Electra_8h_source.html | 8 +- .../doxygen/html/ir__EliteScreens_8cpp.html | 0 .../docs/doxygen/html/ir__Epson_8cpp.html | 0 .../docs/doxygen/html/ir__Fujitsu_8cpp.html | 2 + .../docs/doxygen/html/ir__Fujitsu_8h.html | 2 + .../doxygen/html/ir__Fujitsu_8h_source.html | 596 +-- .../docs/doxygen/html/ir__GICable_8cpp.html | 2 +- .../doxygen/html/ir__GlobalCache_8cpp.html | 0 .../doxygen/html/ir__Goodweather_8cpp.html | 0 .../docs/doxygen/html/ir__Goodweather_8h.html | 0 .../html/ir__Goodweather_8h_source.html | 6 +- .../docs/doxygen/html/ir__Gree_8cpp.html | 0 .../docs/doxygen/html/ir__Gree_8h.html | 0 .../docs/doxygen/html/ir__Gree_8h_source.html | 12 +- .../docs/doxygen/html/ir__Haier_8cpp.html | 0 .../docs/doxygen/html/ir__Haier_8h.html | 0 .../doxygen/html/ir__Haier_8h_source.html | 12 +- .../docs/doxygen/html/ir__Hitachi_8cpp.html | 0 .../docs/doxygen/html/ir__Hitachi_8h.html | 0 .../doxygen/html/ir__Hitachi_8h_source.html | 18 +- .../docs/doxygen/html/ir__Inax_8cpp.html | 0 .../docs/doxygen/html/ir__JVC_8cpp.html | 4 +- .../doxygen/html/ir__Kelvinator_8cpp.html | 0 .../docs/doxygen/html/ir__Kelvinator_8h.html | 0 .../html/ir__Kelvinator_8h_source.html | 8 +- .../docs/doxygen/html/ir__LG_8cpp.html | 0 .../docs/doxygen/html/ir__LG_8h.html | 0 .../docs/doxygen/html/ir__LG_8h_source.html | 10 +- .../docs/doxygen/html/ir__Lasertag_8cpp.html | 0 .../docs/doxygen/html/ir__Lego_8cpp.html | 0 .../docs/doxygen/html/ir__Lutron_8cpp.html | 0 .../docs/doxygen/html/ir__MWM_8cpp.html | 0 .../docs/doxygen/html/ir__Magiquest_8cpp.html | 0 .../docs/doxygen/html/ir__Magiquest_8h.html | 0 .../doxygen/html/ir__Magiquest_8h_source.html | 0 .../docs/doxygen/html/ir__Metz_8cpp.html | 0 .../docs/doxygen/html/ir__Midea_8cpp.html | 0 .../docs/doxygen/html/ir__Midea_8h.html | 0 .../doxygen/html/ir__Midea_8h_source.html | 6 +- .../docs/doxygen/html/ir__MilesTag2_8cpp.html | 273 + .../docs/doxygen/html/ir__Mirage_8cpp.html | 0 .../html/ir__MitsubishiHeavy_8cpp.html | 0 .../doxygen/html/ir__MitsubishiHeavy_8h.html | 0 .../html/ir__MitsubishiHeavy_8h_source.html | 186 +- .../doxygen/html/ir__Mitsubishi_8cpp.html | 10 +- .../docs/doxygen/html/ir__Mitsubishi_8h.html | 230 +- .../html/ir__Mitsubishi_8h_source.html | 1183 ++--- .../doxygen/html/ir__Multibrackets_8cpp.html | 0 .../docs/doxygen/html/ir__NEC_8cpp.html | 2 +- .../docs/doxygen/html/ir__NEC_8h.html | 4 +- .../docs/doxygen/html/ir__NEC_8h_source.html | 2 +- .../docs/doxygen/html/ir__Neoclima_8cpp.html | 0 .../docs/doxygen/html/ir__Neoclima_8h.html | 0 .../doxygen/html/ir__Neoclima_8h_source.html | 8 +- .../docs/doxygen/html/ir__Nikai_8cpp.html | 0 .../docs/doxygen/html/ir__Panasonic_8cpp.html | 0 .../docs/doxygen/html/ir__Panasonic_8h.html | 0 .../doxygen/html/ir__Panasonic_8h_source.html | 170 +- .../docs/doxygen/html/ir__Pioneer_8cpp.html | 0 .../docs/doxygen/html/ir__Pronto_8cpp.html | 0 .../docs/doxygen/html/ir__RC5__RC6_8cpp.html | 2 +- .../docs/doxygen/html/ir__RCMM_8cpp.html | 2 +- .../docs/doxygen/html/ir__Samsung_8cpp.html | 2 +- .../docs/doxygen/html/ir__Samsung_8h.html | 0 .../doxygen/html/ir__Samsung_8h_source.html | 10 +- .../docs/doxygen/html/ir__Sanyo_8cpp.html | 14 +- .../docs/doxygen/html/ir__Sanyo_8h.html | 0 .../doxygen/html/ir__Sanyo_8h_source.html | 86 +- .../docs/doxygen/html/ir__Sharp_8cpp.html | 6 +- .../docs/doxygen/html/ir__Sharp_8h.html | 8 +- .../doxygen/html/ir__Sharp_8h_source.html | 613 +-- .../docs/doxygen/html/ir__Sherwood_8cpp.html | 0 .../docs/doxygen/html/ir__Sony_8cpp.html | 2 +- .../docs/doxygen/html/ir__Symphony_8cpp.html | 0 .../docs/doxygen/html/ir__Tcl_8cpp.html | 0 .../docs/doxygen/html/ir__Tcl_8h.html | 179 +- .../docs/doxygen/html/ir__Tcl_8h_source.html | 378 +- .../docs/doxygen/html/ir__Technibel_8cpp.html | 0 .../docs/doxygen/html/ir__Technibel_8h.html | 379 ++ .../doxygen/html/ir__Technibel_8h_source.html | 294 ++ .../docs/doxygen/html/ir__Teco_8cpp.html | 0 .../docs/doxygen/html/ir__Teco_8h.html | 275 +- .../docs/doxygen/html/ir__Teco_8h_source.html | 390 +- .../docs/doxygen/html/ir__Toshiba_8cpp.html | 0 .../docs/doxygen/html/ir__Toshiba_8h.html | 217 +- .../doxygen/html/ir__Toshiba_8h_source.html | 409 +- .../docs/doxygen/html/ir__Transcold_8cpp.html | 0 .../docs/doxygen/html/ir__Transcold_8h.html | 83 +- .../doxygen/html/ir__Transcold_8h_source.html | 456 +- .../docs/doxygen/html/ir__Trotec_8cpp.html | 0 .../docs/doxygen/html/ir__Trotec_8h.html | 0 .../doxygen/html/ir__Trotec_8h_source.html | 8 +- .../docs/doxygen/html/ir__Vestel_8cpp.html | 0 .../docs/doxygen/html/ir__Vestel_8h.html | 0 .../doxygen/html/ir__Vestel_8h_source.html | 6 +- .../docs/doxygen/html/ir__Voltas_8cpp.html | 0 .../docs/doxygen/html/ir__Voltas_8h.html | 0 .../doxygen/html/ir__Voltas_8h_source.html | 10 +- .../docs/doxygen/html/ir__Whirlpool_8cpp.html | 0 .../docs/doxygen/html/ir__Whirlpool_8h.html | 0 .../doxygen/html/ir__Whirlpool_8h_source.html | 10 +- .../docs/doxygen/html/ir__Whynter_8cpp.html | 2 +- .../docs/doxygen/html/ir__Zepeal_8cpp.html | 0 .../docs/doxygen/html/it-IT_8h.html | 0 .../docs/doxygen/html/it-IT_8h_source.html | 0 .../docs/doxygen/html/jquery.js | 0 .../doxygen/html/md_src_locale_README.html | 0 .../docs/doxygen/html/menu.js | 0 .../docs/doxygen/html/menudata.js | 0 .../docs/doxygen/html/namespaceIRAcUtils.html | 0 .../docs/doxygen/html/namespace__IRrecv.html | 0 .../docs/doxygen/html/namespaceirutils.html | 277 + .../docs/doxygen/html/namespacemembers.html | 9 + .../doxygen/html/namespacemembers_enum.html | 0 .../doxygen/html/namespacemembers_func.html | 9 + .../doxygen/html/namespacemembers_vars.html | 0 .../docs/doxygen/html/namespaces.html | 0 .../docs/doxygen/html/namespacestdAc.html | 0 .../docs/doxygen/html/nav_f.png | Bin .../docs/doxygen/html/nav_g.png | Bin .../docs/doxygen/html/nav_h.png | Bin .../docs/doxygen/html/open.png | Bin .../docs/doxygen/html/pages.html | 0 .../docs/doxygen/html/pt-BR_8h.html | 0 .../docs/doxygen/html/pt-BR_8h_source.html | 0 .../docs/doxygen/html/search/all_0.html | 0 .../docs/doxygen/html/search/all_0.js | 79 +- .../docs/doxygen/html/search/all_1.html | 0 .../docs/doxygen/html/search/all_1.js | 34 + .../docs/doxygen/html/search/all_10.html | 0 .../docs/doxygen/html/search/all_10.js | 65 +- .../docs/doxygen/html/search/all_11.html | 0 .../docs/doxygen/html/search/all_11.js | 6 + .../docs/doxygen/html/search/all_12.html | 0 .../docs/doxygen/html/search/all_12.js | 52 +- .../docs/doxygen/html/search/all_13.html | 0 .../docs/doxygen/html/search/all_13.js | 273 +- .../docs/doxygen/html/search/all_14.html | 0 .../docs/doxygen/html/search/all_14.js | 88 +- .../docs/doxygen/html/search/all_15.html | 0 .../docs/doxygen/html/search/all_15.js | 24 +- .../docs/doxygen/html/search/all_16.html | 0 .../docs/doxygen/html/search/all_16.js | 24 +- .../docs/doxygen/html/search/all_17.html | 0 .../docs/doxygen/html/search/all_17.js | 12 + .../docs/doxygen/html/search/all_18.html | 0 .../docs/doxygen/html/search/all_18.js | 4 +- .../docs/doxygen/html/search/all_19.html | 0 .../docs/doxygen/html/search/all_19.js | 4 +- .../docs/doxygen/html/search/all_1a.html | 0 .../docs/doxygen/html/search/all_1a.js | 7 + .../docs/doxygen/html/search/all_1b.html | 0 .../docs/doxygen/html/search/all_1b.js | 4 + .../docs/doxygen/html/search/all_2.html | 0 .../docs/doxygen/html/search/all_2.js | 30 +- .../docs/doxygen/html/search/all_3.html | 0 .../docs/doxygen/html/search/all_3.js | 118 +- .../docs/doxygen/html/search/all_4.html | 0 .../docs/doxygen/html/search/all_4.js | 138 + .../docs/doxygen/html/search/all_5.html | 0 .../docs/doxygen/html/search/all_5.js | 41 + .../docs/doxygen/html/search/all_6.html | 0 .../docs/doxygen/html/search/all_6.js | 42 +- .../docs/doxygen/html/search/all_7.html | 0 .../docs/doxygen/html/search/all_7.js | 251 +- .../docs/doxygen/html/search/all_8.html | 0 .../docs/doxygen/html/search/all_8.js | 39 + .../docs/doxygen/html/search/all_9.html | 0 .../docs/doxygen/html/search/all_9.js | 200 + .../docs/doxygen/html/search/all_a.html | 0 .../docs/doxygen/html/search/all_a.js | 2 +- .../docs/doxygen/html/search/all_b.html | 0 .../docs/doxygen/html/search/all_b.js | 4474 ++++++++--------- .../docs/doxygen/html/search/all_c.html | 0 .../docs/doxygen/html/search/all_c.js | 21 + .../docs/doxygen/html/search/all_d.html | 0 .../docs/doxygen/html/search/all_d.js | 98 +- .../docs/doxygen/html/search/all_e.html | 0 .../docs/doxygen/html/search/all_e.js | 14 +- .../docs/doxygen/html/search/all_f.html | 0 .../docs/doxygen/html/search/all_f.js | 64 +- .../docs/doxygen/html/search/classes_0.html | 0 .../docs/doxygen/html/search/classes_0.js | 6 + .../docs/doxygen/html/search/classes_1.html | 0 .../docs/doxygen/html/search/classes_1.js | 7 + .../docs/doxygen/html/search/classes_2.html | 0 .../docs/doxygen/html/search/classes_2.js | 13 + .../docs/doxygen/html/search/classes_3.html | 0 .../docs/doxygen/html/search/classes_3.js | 4 + .../docs/doxygen/html/search/classes_4.html | 0 .../docs/doxygen/html/search/classes_4.js | 5 + .../docs/doxygen/html/search/classes_5.html | 0 .../docs/doxygen/html/search/classes_5.js | 8 + .../docs/doxygen/html/search/classes_6.html | 0 .../docs/doxygen/html/search/classes_6.js | 57 + .../docs/doxygen/html/search/classes_7.html | 0 .../docs/doxygen/html/search/classes_7.js | 4 + .../docs/doxygen/html/search/classes_8.html | 0 .../docs/doxygen/html/search/classes_8.js | 4 + .../docs/doxygen/html/search/classes_9.html | 0 .../docs/doxygen/html/search/classes_9.js | 11 + .../docs/doxygen/html/search/classes_a.html | 0 .../docs/doxygen/html/search/classes_a.js | 4 + .../docs/doxygen/html/search/classes_b.html | 0 .../docs/doxygen/html/search/classes_b.js | 4 + .../docs/doxygen/html/search/classes_c.html | 0 .../docs/doxygen/html/search/classes_c.js | 7 + .../docs/doxygen/html/search/classes_d.html | 0 .../docs/doxygen/html/search/classes_d.js | 9 + .../docs/doxygen/html/search/classes_e.html | 0 .../docs/doxygen/html/search/classes_e.js | 4 + .../docs/doxygen/html/search/close.png | Bin .../docs/doxygen/html/search/enums_0.html | 0 .../docs/doxygen/html/search/enums_0.js | 2 +- .../docs/doxygen/html/search/enums_1.html | 0 .../docs/doxygen/html/search/enums_1.js | 4 +- .../docs/doxygen/html/search/enums_2.html | 0 .../docs/doxygen/html/search/enums_2.js | 2 +- .../docs/doxygen/html/search/enums_3.html | 0 .../docs/doxygen/html/search/enums_3.js | 2 +- .../docs/doxygen/html/search/enums_4.html | 0 .../docs/doxygen/html/search/enums_4.js | 2 +- .../docs/doxygen/html/search/enums_5.html | 0 .../docs/doxygen/html/search/enums_5.js | 4 + .../docs/doxygen/html/search/enums_6.html | 0 .../docs/doxygen/html/search/enums_6.js | 2 +- .../docs/doxygen/html/search/enums_7.html | 0 .../docs/doxygen/html/search/enums_7.js | 6 + .../docs/doxygen/html/search/enums_8.html | 0 .../docs/doxygen/html/search/enums_8.js | 2 +- .../docs/doxygen/html/search/enums_9.html | 0 .../docs/doxygen/html/search/enums_9.js | 2 +- .../doxygen/html/search/enumvalues_0.html | 0 .../docs/doxygen/html/search/enumvalues_0.js | 25 +- .../doxygen/html/search/enumvalues_1.html | 0 .../docs/doxygen/html/search/enumvalues_1.js | 10 +- .../doxygen/html/search/enumvalues_10.html | 0 .../docs/doxygen/html/search/enumvalues_10.js | 12 +- .../doxygen/html/search/enumvalues_11.html | 0 .../docs/doxygen/html/search/enumvalues_11.js | 4 +- .../doxygen/html/search/enumvalues_12.html | 0 .../docs/doxygen/html/search/enumvalues_12.js | 4 +- .../doxygen/html/search/enumvalues_13.html | 0 .../docs/doxygen/html/search/enumvalues_13.js | 4 +- .../doxygen/html/search/enumvalues_14.html | 0 .../docs/doxygen/html/search/enumvalues_14.js | 4 +- .../doxygen/html/search/enumvalues_15.html | 0 .../docs/doxygen/html/search/enumvalues_15.js | 2 +- .../doxygen/html/search/enumvalues_2.html | 0 .../docs/doxygen/html/search/enumvalues_2.js | 28 +- .../doxygen/html/search/enumvalues_3.html | 0 .../docs/doxygen/html/search/enumvalues_3.js | 7 + .../doxygen/html/search/enumvalues_4.html | 0 .../docs/doxygen/html/search/enumvalues_4.js | 2 +- .../doxygen/html/search/enumvalues_5.html | 0 .../docs/doxygen/html/search/enumvalues_5.js | 10 +- .../doxygen/html/search/enumvalues_6.html | 0 .../docs/doxygen/html/search/enumvalues_6.js | 16 +- .../doxygen/html/search/enumvalues_7.html | 0 .../docs/doxygen/html/search/enumvalues_7.js | 2 +- .../doxygen/html/search/enumvalues_8.html | 0 .../docs/doxygen/html/search/enumvalues_8.js | 2 +- .../doxygen/html/search/enumvalues_9.html | 0 .../docs/doxygen/html/search/enumvalues_9.js | 68 +- .../doxygen/html/search/enumvalues_a.html | 0 .../docs/doxygen/html/search/enumvalues_a.js | 10 +- .../doxygen/html/search/enumvalues_b.html | 0 .../docs/doxygen/html/search/enumvalues_b.js | 29 +- .../doxygen/html/search/enumvalues_c.html | 0 .../docs/doxygen/html/search/enumvalues_c.js | 8 +- .../doxygen/html/search/enumvalues_d.html | 0 .../docs/doxygen/html/search/enumvalues_d.js | 10 +- .../doxygen/html/search/enumvalues_e.html | 0 .../docs/doxygen/html/search/enumvalues_e.js | 14 +- .../doxygen/html/search/enumvalues_f.html | 0 .../docs/doxygen/html/search/enumvalues_f.js | 24 +- .../docs/doxygen/html/search/files_0.html | 0 .../docs/doxygen/html/search/files_0.js | 7 + .../docs/doxygen/html/search/files_1.html | 0 .../docs/doxygen/html/search/files_1.js | 8 + .../docs/doxygen/html/search/files_2.html | 0 .../docs/doxygen/html/search/files_2.js | 4 + .../docs/doxygen/html/search/files_3.html | 0 .../docs/doxygen/html/search/files_3.js | 117 + .../docs/doxygen/html/search/files_4.html | 0 .../docs/doxygen/html/search/files_4.js | 4 + .../docs/doxygen/html/search/files_5.html | 0 .../docs/doxygen/html/search/files_5.js | 4 + .../docs/doxygen/html/search/files_6.html | 0 .../docs/doxygen/html/search/files_6.js | 4 + .../docs/doxygen/html/search/functions_0.html | 0 .../docs/doxygen/html/search/functions_0.js | 34 +- .../docs/doxygen/html/search/functions_1.html | 0 .../docs/doxygen/html/search/functions_1.js | 18 + .../doxygen/html/search/functions_10.html | 0 .../docs/doxygen/html/search/functions_10.js | 20 +- .../doxygen/html/search/functions_11.html | 0 .../docs/doxygen/html/search/functions_11.js | 469 +- .../doxygen/html/search/functions_12.html | 0 .../docs/doxygen/html/search/functions_12.js | 42 +- .../doxygen/html/search/functions_13.html | 0 .../docs/doxygen/html/search/functions_13.js | 7 +- .../doxygen/html/search/functions_14.html | 0 .../docs/doxygen/html/search/functions_14.js | 8 +- .../doxygen/html/search/functions_15.html | 0 .../docs/doxygen/html/search/functions_15.js | 4 + .../doxygen/html/search/functions_16.html | 0 .../docs/doxygen/html/search/functions_16.js | 2 +- .../doxygen/html/search/functions_17.html | 0 .../docs/doxygen/html/search/functions_17.js | 4 + .../docs/doxygen/html/search/functions_2.html | 0 .../docs/doxygen/html/search/functions_2.js | 10 +- .../docs/doxygen/html/search/functions_3.html | 0 .../docs/doxygen/html/search/functions_3.js | 66 +- .../docs/doxygen/html/search/functions_4.html | 0 .../docs/doxygen/html/search/functions_4.js | 105 + .../docs/doxygen/html/search/functions_5.html | 0 .../docs/doxygen/html/search/functions_5.js | 48 +- .../docs/doxygen/html/search/functions_6.html | 0 .../docs/doxygen/html/search/functions_6.js | 10 +- .../docs/doxygen/html/search/functions_7.html | 0 .../docs/doxygen/html/search/functions_7.js | 239 +- .../docs/doxygen/html/search/functions_8.html | 0 .../docs/doxygen/html/search/functions_8.js | 24 +- .../docs/doxygen/html/search/functions_9.html | 0 .../docs/doxygen/html/search/functions_9.js | 144 +- .../docs/doxygen/html/search/functions_a.html | 0 .../docs/doxygen/html/search/functions_a.js | 4 + .../docs/doxygen/html/search/functions_b.html | 0 .../docs/doxygen/html/search/functions_b.js | 7 + .../docs/doxygen/html/search/functions_c.html | 0 .../docs/doxygen/html/search/functions_c.js | 44 +- .../docs/doxygen/html/search/functions_d.html | 0 .../docs/doxygen/html/search/functions_d.js | 4 + .../docs/doxygen/html/search/functions_e.html | 0 .../docs/doxygen/html/search/functions_e.js | 6 +- .../docs/doxygen/html/search/functions_f.html | 0 .../docs/doxygen/html/search/functions_f.js | 5 + .../docs/doxygen/html/search/mag_sel.png | Bin .../doxygen/html/search/namespaces_0.html | 0 .../docs/doxygen/html/search/namespaces_0.js | 4 + .../doxygen/html/search/namespaces_1.html | 0 .../docs/doxygen/html/search/namespaces_1.js | 5 + .../doxygen/html/search/namespaces_2.html | 0 .../docs/doxygen/html/search/namespaces_2.js | 4 + .../docs/doxygen/html/search/nomatches.html | 0 .../docs/doxygen/html/search/pages_0.html | 0 .../docs/doxygen/html/search/pages_0.js | 4 + .../docs/doxygen/html/search/pages_1.html | 0 .../docs/doxygen/html/search/pages_1.js | 5 + .../docs/doxygen/html/search/pages_2.html | 0 .../docs/doxygen/html/search/pages_2.js | 4 + .../docs/doxygen/html/search/related_0.html | 0 .../docs/doxygen/html/search/related_0.js | 2 +- .../docs/doxygen/html/search/search.css | 0 .../docs/doxygen/html/search/search.js | 0 .../docs/doxygen/html/search/search_l.png | Bin .../docs/doxygen/html/search/search_m.png | Bin .../docs/doxygen/html/search/search_r.png | Bin .../docs/doxygen/html/search/searchdata.js | 0 .../docs/doxygen/html/search/typedefs_0.html | 0 .../docs/doxygen/html/search/typedefs_0.js | 2 +- .../docs/doxygen/html/search/typedefs_1.html | 0 .../docs/doxygen/html/search/typedefs_1.js | 2 +- .../docs/doxygen/html/search/variables_0.html | 0 .../docs/doxygen/html/search/variables_0.js | 139 +- .../docs/doxygen/html/search/variables_1.html | 0 .../docs/doxygen/html/search/variables_1.js | 6 + .../doxygen/html/search/variables_10.html | 0 .../docs/doxygen/html/search/variables_10.js | 18 +- .../doxygen/html/search/variables_11.html | 0 .../docs/doxygen/html/search/variables_11.js | 74 +- .../doxygen/html/search/variables_12.html | 0 .../docs/doxygen/html/search/variables_12.js | 33 +- .../doxygen/html/search/variables_13.html | 0 .../docs/doxygen/html/search/variables_13.js | 11 + .../doxygen/html/search/variables_14.html | 0 .../docs/doxygen/html/search/variables_14.js | 8 + .../doxygen/html/search/variables_15.html | 0 .../docs/doxygen/html/search/variables_15.js | 8 + .../doxygen/html/search/variables_16.html | 0 .../docs/doxygen/html/search/variables_16.js | 4 + .../doxygen/html/search/variables_17.html | 0 .../docs/doxygen/html/search/variables_17.js | 4 +- .../docs/doxygen/html/search/variables_2.html | 0 .../docs/doxygen/html/search/variables_2.js | 13 + .../docs/doxygen/html/search/variables_3.html | 0 .../docs/doxygen/html/search/variables_3.js | 38 +- .../docs/doxygen/html/search/variables_4.html | 0 .../docs/doxygen/html/search/variables_4.js | 14 + .../docs/doxygen/html/search/variables_5.html | 0 .../docs/doxygen/html/search/variables_5.js | 7 +- .../docs/doxygen/html/search/variables_6.html | 0 .../docs/doxygen/html/search/variables_6.js | 24 +- .../docs/doxygen/html/search/variables_7.html | 0 .../docs/doxygen/html/search/variables_7.js | 12 + .../docs/doxygen/html/search/variables_8.html | 0 .../docs/doxygen/html/search/variables_8.js | 10 +- .../docs/doxygen/html/search/variables_9.html | 0 .../docs/doxygen/html/search/variables_9.js | 4436 ++++++++-------- .../docs/doxygen/html/search/variables_a.html | 0 .../docs/doxygen/html/search/variables_a.js | 11 + .../docs/doxygen/html/search/variables_b.html | 0 .../docs/doxygen/html/search/variables_b.js | 19 +- .../docs/doxygen/html/search/variables_c.html | 0 .../docs/doxygen/html/search/variables_c.js | 4 +- .../docs/doxygen/html/search/variables_d.html | 0 .../docs/doxygen/html/search/variables_d.js | 56 +- .../docs/doxygen/html/search/variables_e.html | 0 .../docs/doxygen/html/search/variables_e.js | 47 +- .../docs/doxygen/html/search/variables_f.html | 0 .../docs/doxygen/html/search/variables_f.js | 6 + .../docs/doxygen/html/splitbar.png | Bin .../html/structCoronaSection-members.html | 0 .../doxygen/html/structCoronaSection.html | 0 .../html/structirparams__t-members.html | 0 .../docs/doxygen/html/structirparams__t.html | 0 .../html/structmatch__result__t-members.html | 0 .../doxygen/html/structmatch__result__t.html | 0 .../html/structstdAc_1_1state__t-members.html | 0 .../doxygen/html/structstdAc_1_1state__t.html | 0 .../docs/doxygen/html/sync_off.png | Bin .../docs/doxygen/html/sync_on.png | Bin .../docs/doxygen/html/tab_a.png | Bin .../docs/doxygen/html/tab_b.png | Bin .../docs/doxygen/html/tab_h.png | Bin .../docs/doxygen/html/tab_s.png | Bin .../docs/doxygen/html/tabs.css | 0 .../docs/doxygen/html/todo.html | 0 .../html/unionAirwellProtocol-members.html | 0 .../doxygen/html/unionAirwellProtocol.html | 0 .../html/unionAmcorProtocol-members.html | 0 .../docs/doxygen/html/unionAmcorProtocol.html | 0 .../html/unionArgoProtocol-members.html | 0 .../docs/doxygen/html/unionArgoProtocol.html | 0 .../html/unionCarrierProtocol-members.html | 0 .../doxygen/html/unionCarrierProtocol.html | 0 .../html/unionCoolixProtocol-members.html | 0 .../doxygen/html/unionCoolixProtocol.html | 0 .../html/unionCoronaProtocol-members.html | 0 .../doxygen/html/unionCoronaProtocol.html | 0 .../html/unionCoronaProtocol__coll__graph.map | 0 .../html/unionCoronaProtocol__coll__graph.md5 | 0 .../html/unionCoronaProtocol__coll__graph.png | Bin .../html/unionDaikin128Protocol-members.html | 0 .../doxygen/html/unionDaikin128Protocol.html | 0 .../html/unionDaikin152Protocol-members.html | 0 .../doxygen/html/unionDaikin152Protocol.html | 0 .../html/unionDaikin160Protocol-members.html | 0 .../doxygen/html/unionDaikin160Protocol.html | 0 .../html/unionDaikin176Protocol-members.html | 0 .../doxygen/html/unionDaikin176Protocol.html | 0 .../html/unionDaikin216Protocol-members.html | 0 .../doxygen/html/unionDaikin216Protocol.html | 0 .../html/unionDaikin2Protocol-members.html | 0 .../doxygen/html/unionDaikin2Protocol.html | 0 .../html/unionDaikin64Protocol-members.html | 0 .../doxygen/html/unionDaikin64Protocol.html | 0 .../html/unionDaikinESPProtocol-members.html | 0 .../doxygen/html/unionDaikinESPProtocol.html | 0 .../html/unionDelonghiProtocol-members.html | 0 .../doxygen/html/unionDelonghiProtocol.html | 0 .../html/unionElectraProtocol-members.html | 0 .../doxygen/html/unionElectraProtocol.html | 0 .../unionGoodweatherProtocol-members.html | 0 .../html/unionGoodweatherProtocol.html | 0 .../html/unionGreeProtocol-members.html | 0 .../docs/doxygen/html/unionGreeProtocol.html | 0 .../html/unionHaierProtocol-members.html | 0 .../docs/doxygen/html/unionHaierProtocol.html | 0 .../html/unionHaierYRW02Protocol-members.html | 0 .../doxygen/html/unionHaierYRW02Protocol.html | 0 .../html/unionHitachi1Protocol-members.html | 0 .../doxygen/html/unionHitachi1Protocol.html | 0 .../html/unionHitachi424Protocol-members.html | 0 .../doxygen/html/unionHitachi424Protocol.html | 0 .../html/unionHitachiProtocol-members.html | 0 .../doxygen/html/unionHitachiProtocol.html | 0 .../html/unionKelvinatorProtocol-members.html | 0 .../doxygen/html/unionKelvinatorProtocol.html | 0 .../doxygen/html/unionLGProtocol-members.html | 0 .../docs/doxygen/html/unionLGProtocol.html | 0 .../html/unionMideaProtocol-members.html | 0 .../docs/doxygen/html/unionMideaProtocol.html | 0 .../unionMitsubishi112Protocol-members.html | 0 .../html/unionMitsubishi112Protocol.html | 0 .../unionMitsubishi136Protocol-members.html | 0 .../html/unionMitsubishi136Protocol.html | 0 .../unionMitsubishi144Protocol-members.html | 11 +- .../html/unionMitsubishi144Protocol.html | 56 +- .../unionMitsubishi152Protocol-members.html | 0 .../html/unionMitsubishi152Protocol.html | 0 .../unionMitsubishi88Protocol-members.html | 0 .../html/unionMitsubishi88Protocol.html | 0 .../html/unionNeoclimaProtocol-members.html | 0 .../doxygen/html/unionNeoclimaProtocol.html | 0 .../unionPanasonicAc32Protocol-members.html | 0 .../html/unionPanasonicAc32Protocol.html | 0 .../html/unionSamsungProtocol-members.html | 0 .../doxygen/html/unionSamsungProtocol.html | 0 .../html/unionSanyoProtocol-members.html | 0 .../docs/doxygen/html/unionSanyoProtocol.html | 0 .../html/unionSharpProtocol-members.html | 12 +- .../docs/doxygen/html/unionSharpProtocol.html | 32 +- .../html/unionTcl112Protocol-members.html | 102 + .../doxygen/html/unionTcl112Protocol.html | 482 ++ .../html/unionTechnibelProtocol-members.html | 98 + .../doxygen/html/unionTechnibelProtocol.html | 415 ++ .../html/unionTecoProtocol-members.html | 96 + .../docs/doxygen/html/unionTecoProtocol.html | 386 ++ .../html/unionToshibaProtocol-members.html | 97 + .../doxygen/html/unionToshibaProtocol.html | 405 ++ .../html/unionTranscoldProtocol-members.html | 86 + .../doxygen/html/unionTranscoldProtocol.html | 226 + .../html/unionVoltasProtocol-members.html | 0 .../doxygen/html/unionVoltasProtocol.html | 126 +- .../doxygen/html/unionmagiquest-members.html | 0 .../docs/doxygen/html/unionmagiquest.html | 0 .../docs/doxygen/html/zh-CN_8h.html | 0 .../docs/doxygen/html/zh-CN_8h_source.html | 0 .../docs/doxygen_index.md | 0 .../examples/BlynkIrRemote/BlynkIrRemote.ino | 0 .../examples/BlynkIrRemote/platformio.ini | 2 +- .../CommonAcControl/CommonAcControl.ino | 0 .../examples/CommonAcControl/platformio.ini | 0 .../ControlSamsungAC/ControlSamsungAC.ino | 0 .../examples/ControlSamsungAC/platformio.ini | 0 .../DumbIRRepeater/DumbIRRepeater.ino | 0 .../examples/DumbIRRepeater/platformio.ini | 0 .../examples/IRGCSendDemo/IRGCSendDemo.ino | 0 .../examples/IRGCSendDemo/platformio.ini | 0 .../examples/IRGCTCPServer/IRGCTCPServer.ino | 0 .../examples/IRGCTCPServer/platformio.ini | 0 .../examples/IRMQTTServer/IRMQTTServer.h | 0 .../examples/IRMQTTServer/IRMQTTServer.ino | 2 +- .../examples/IRMQTTServer/platformio.ini | 2 +- .../examples/IRServer/IRServer.ino | 0 .../examples/IRServer/platformio.ini | 0 .../examples/IRrecvDemo/IRrecvDemo.ino | 0 .../examples/IRrecvDemo/platformio.ini | 0 .../examples/IRrecvDump/IRrecvDump.ino | 0 .../examples/IRrecvDump/platformio.ini | 0 .../examples/IRrecvDumpV2/IRrecvDumpV2.ino | 0 .../examples/IRrecvDumpV2/platformio.ini | 0 .../examples/IRrecvDumpV3/BaseOTA.h | 0 .../examples/IRrecvDumpV3/IRrecvDumpV3.ino | 0 .../examples/IRrecvDumpV3/platformio.ini | 0 .../examples/IRsendDemo/IRsendDemo.ino | 0 .../examples/IRsendDemo/platformio.ini | 0 .../IRsendProntoDemo/IRsendProntoDemo.ino | 0 .../examples/IRsendProntoDemo/platformio.ini | 0 .../JVCPanasonicSendDemo.ino | 0 .../JVCPanasonicSendDemo/platformio.ini | 0 .../examples/LGACSend/LGACSend.ino | 0 .../examples/LGACSend/platformio.ini | 0 .../SmartIRRepeater/SmartIRRepeater.ino | 0 .../examples/SmartIRRepeater/platformio.ini | 0 .../examples/TurnOnArgoAC/TurnOnArgoAC.ino | 0 .../examples/TurnOnArgoAC/platformio.ini | 0 .../TurnOnDaikinAC/TurnOnDaikinAC.ino | 0 .../examples/TurnOnDaikinAC/platformio.ini | 0 .../TurnOnFujitsuAC/TurnOnFujitsuAC.ino | 0 .../examples/TurnOnFujitsuAC/platformio.ini | 0 .../examples/TurnOnGreeAC/TurnOnGreeAC.ino | 0 .../examples/TurnOnGreeAC/platformio.ini | 0 .../TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino | 0 .../TurnOnKelvinatorAC/platformio.ini | 0 .../TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino | 0 .../TurnOnMitsubishiAC/platformio.ini | 0 .../TurnOnMitsubishiHeavyAc.ino | 0 .../TurnOnMitsubishiHeavyAc/platformio.ini | 0 .../TurnOnPanasonicAC/TurnOnPanasonicAC.ino | 0 .../examples/TurnOnPanasonicAC/platformio.ini | 0 .../TurnOnToshibaAC/TurnOnToshibaAC.ino | 0 .../examples/TurnOnToshibaAC/platformio.ini | 0 .../TurnOnTrotecAC/TurnOnTrotecAC.ino | 0 .../examples/TurnOnTrotecAC/platformio.ini | 0 .../examples/Web-AC-control/README.md | 0 .../examples/Web-AC-control/Web-AC-control.h | 0 .../Web-AC-control/Web-AC-control.ino | 0 .../examples/Web-AC-control/platformio.ini | 2 +- .../examples/Web-AC-control/printscreen.png | Bin .../keywords.txt | 123 +- .../library.json | 2 +- .../library.properties | 2 +- .../platformio.ini | 0 .../pylintrc | 0 .../src/CPPLINT.cfg | 0 .../src/IRac.cpp | 10 +- .../src/IRac.h | 0 .../src/IRrecv.cpp | 77 +- .../src/IRrecv.h | 16 +- .../src/IRremoteESP8266.h | 25 +- .../src/IRsend.cpp | 13 + .../src/IRsend.h | 28 +- .../src/IRtext.cpp | 2 + .../src/IRtext.h | 0 .../src/IRtimer.cpp | 0 .../src/IRtimer.h | 0 .../src/IRutils.cpp | 133 + .../src/IRutils.h | 17 + .../src/i18n.h | 0 .../src/ir_Airwell.cpp | 0 .../src/ir_Airwell.h | 0 .../src/ir_Aiwa.cpp | 2 +- .../src/ir_Amcor.cpp | 0 .../src/ir_Amcor.h | 0 .../src/ir_Argo.cpp | 0 .../src/ir_Argo.h | 0 .../src/ir_Carrier.cpp | 0 .../src/ir_Carrier.h | 0 .../src/ir_Coolix.cpp | 0 .../src/ir_Coolix.h | 0 .../src/ir_Corona.cpp | 0 .../src/ir_Corona.h | 0 .../src/ir_Daikin.cpp | 160 +- .../src/ir_Daikin.h | 23 +- .../src/ir_Delonghi.cpp | 0 .../src/ir_Delonghi.h | 0 .../src/ir_Denon.cpp | 0 .../src/ir_Dish.cpp | 0 .../src/ir_Doshisha.cpp | 0 .../IRremoteESP8266-2.7.15/src/ir_EcoClim.cpp | 114 + .../src/ir_Electra.cpp | 0 .../src/ir_Electra.h | 0 .../src/ir_EliteScreens.cpp | 0 .../src/ir_Epson.cpp | 0 .../src/ir_Fujitsu.cpp | 5 + .../src/ir_Fujitsu.h | 7 + .../src/ir_GICable.cpp | 0 .../src/ir_GlobalCache.cpp | 0 .../src/ir_Goodweather.cpp | 0 .../src/ir_Goodweather.h | 0 .../src/ir_Gree.cpp | 0 .../src/ir_Gree.h | 0 .../src/ir_Haier.cpp | 0 .../src/ir_Haier.h | 0 .../src/ir_Hitachi.cpp | 0 .../src/ir_Hitachi.h | 0 .../src/ir_Inax.cpp | 0 .../src/ir_JVC.cpp | 8 +- .../src/ir_Kelvinator.cpp | 0 .../src/ir_Kelvinator.h | 0 .../src/ir_LG.cpp | 0 .../src/ir_LG.h | 0 .../src/ir_Lasertag.cpp | 2 +- .../src/ir_Lego.cpp | 0 .../src/ir_Lutron.cpp | 0 .../src/ir_MWM.cpp | 0 .../src/ir_Magiquest.cpp | 0 .../src/ir_Magiquest.h | 0 .../src/ir_Metz.cpp | 0 .../src/ir_Midea.cpp | 0 .../src/ir_Midea.h | 0 .../src/ir_MilesTag2.cpp | 113 + .../src/ir_Mirage.cpp | 0 .../src/ir_Mitsubishi.cpp | 225 +- .../src/ir_Mitsubishi.h | 45 +- .../src/ir_MitsubishiHeavy.cpp | 188 +- .../src/ir_MitsubishiHeavy.h | 0 .../src/ir_Multibrackets.cpp | 0 .../src/ir_NEC.cpp | 8 +- .../src/ir_NEC.h | 2 +- .../src/ir_Neoclima.cpp | 0 .../src/ir_Neoclima.h | 0 .../src/ir_Nikai.cpp | 0 .../src/ir_Panasonic.cpp | 90 +- .../src/ir_Panasonic.h | 0 .../src/ir_Pioneer.cpp | 0 .../src/ir_Pronto.cpp | 0 .../src/ir_RC5_RC6.cpp | 2 +- .../src/ir_RCMM.cpp | 2 +- .../src/ir_Samsung.cpp | 0 .../src/ir_Samsung.h | 0 .../src/ir_Sanyo.cpp | 33 +- .../src/ir_Sanyo.h | 0 .../src/ir_Sharp.cpp | 78 +- .../src/ir_Sharp.h | 30 +- .../src/ir_Sherwood.cpp | 0 .../src/ir_Sony.cpp | 2 +- .../src/ir_Symphony.cpp | 0 .../src/ir_Tcl.cpp | 144 +- .../src/ir_Tcl.h | 78 +- .../src/ir_Technibel.cpp | 128 +- .../IRremoteESP8266-2.7.15/src/ir_Technibel.h | 135 + .../src/ir_Teco.cpp | 128 +- .../IRremoteESP8266-2.7.15/src/ir_Teco.h | 131 + .../src/ir_Toshiba.cpp | 105 +- .../src/ir_Toshiba.h | 96 +- .../src/ir_Transcold.cpp | 177 +- .../src/ir_Transcold.h | 61 +- .../src/ir_Trotec.cpp | 0 .../src/ir_Trotec.h | 0 .../src/ir_Vestel.cpp | 0 .../src/ir_Vestel.h | 0 .../src/ir_Voltas.cpp | 0 .../src/ir_Voltas.h | 0 .../src/ir_Whirlpool.cpp | 0 .../src/ir_Whirlpool.h | 0 .../src/ir_Whynter.cpp | 0 .../src/ir_Zepeal.cpp | 0 .../src/locale/README.md | 0 .../src/locale/de-CH.h | 0 .../src/locale/de-DE.h | 0 .../src/locale/defaults.h | 6 + .../src/locale/en-AU.h | 0 .../src/locale/en-IE.h | 0 .../src/locale/en-UK.h | 0 .../src/locale/en-US.h | 0 .../src/locale/es-ES.h | 0 .../src/locale/fr-FR.h | 0 .../src/locale/it-IT.h | 0 .../src/locale/pt-BR.h | 0 .../src/locale/zh-CN.h | 0 .../test/IRac_test.cpp | 9 +- .../test/IRrecv_test.cpp | 68 + .../test/IRrecv_test.h | 0 .../test/IRsend_test.cpp | 0 .../test/IRsend_test.h | 0 .../test/IRutils_test.cpp | 0 .../test/Makefile | 0 .../test/ir_Airwell_test.cpp | 0 .../test/ir_Aiwa_test.cpp | 0 .../test/ir_Amcor_test.cpp | 0 .../test/ir_Argo_test.cpp | 0 .../test/ir_Carrier_test.cpp | 0 .../test/ir_Coolix_test.cpp | 0 .../test/ir_Corona_test.cpp | 0 .../test/ir_Daikin_test.cpp | 38 +- .../test/ir_Delonghi_test.cpp | 0 .../test/ir_Denon_test.cpp | 0 .../test/ir_Dish_test.cpp | 0 .../test/ir_Doshisha_test.cpp | 0 .../test/ir_Ecoclim_test.cpp | 204 + .../test/ir_Electra_test.cpp | 0 .../test/ir_EliteScreens_test.cpp | 0 .../test/ir_Epson_test.cpp | 0 .../test/ir_Fujitsu_test.cpp | 0 .../test/ir_GICable_test.cpp | 0 .../test/ir_GlobalCache_test.cpp | 0 .../test/ir_Goodweather_test.cpp | 0 .../test/ir_Gree_test.cpp | 0 .../test/ir_Haier_test.cpp | 0 .../test/ir_Hitachi_test.cpp | 0 .../test/ir_Inax_test.cpp | 0 .../test/ir_JVC_test.cpp | 0 .../test/ir_Kelvinator_test.cpp | 0 .../test/ir_LG_test.cpp | 0 .../test/ir_Lasertag_test.cpp | 0 .../test/ir_Lego_test.cpp | 0 .../test/ir_Lutron_test.cpp | 0 .../test/ir_MWM_test.cpp | 0 .../test/ir_Magiquest_test.cpp | 0 .../test/ir_Metz_test.cpp | 0 .../test/ir_Midea_test.cpp | 0 .../test/ir_Milestag2_test.cpp | 129 + .../test/ir_Mirage_test.cpp | 0 .../test/ir_MitsubishiHeavy_test.cpp | 0 .../test/ir_Mitsubishi_test.cpp | 382 +- .../test/ir_Multibrackets_test.cpp | 0 .../test/ir_NEC_test.cpp | 0 .../test/ir_Neoclima_test.cpp | 0 .../test/ir_Nikai_test.cpp | 0 .../test/ir_Panasonic_test.cpp | 0 .../test/ir_Pioneer_test.cpp | 0 .../test/ir_Pronto_test.cpp | 0 .../test/ir_RC5_RC6_test.cpp | 0 .../test/ir_RCMM_test.cpp | 0 .../test/ir_Samsung_test.cpp | 0 .../test/ir_Sanyo_test.cpp | 0 .../test/ir_Sharp_test.cpp | 65 +- .../test/ir_Sherwood_test.cpp | 0 .../test/ir_Sony_test.cpp | 0 .../test/ir_Symphony_test.cpp | 0 .../test/ir_Tcl_test.cpp | 0 .../test/ir_Technibel_test.cpp | 0 .../test/ir_Teco_test.cpp | 0 .../test/ir_Toshiba_test.cpp | 0 .../test/ir_Transcold_test.cpp | 0 .../test/ir_Trotec_test.cpp | 0 .../test/ir_Vestel_test.cpp | 0 .../test/ir_Voltas_test.cpp | 0 .../test/ir_Whirlpool_test.cpp | 0 .../test/ir_Whynter_test.cpp | 0 .../test/ir_Zepeal_test.cpp | 0 .../tools/Makefile | 0 .../tools/RawToGlobalCache.sh | 0 .../tools/auto_analyse_raw_data.py | 0 .../tools/auto_analyse_raw_data_test.py | 0 .../tools/gc_decode.cpp | 0 .../tools/generate_irtext_h.sh | 0 .../tools/mkkeywords | 0 .../tools/mode2_decode.cpp | 0 .../tools/raw_to_pronto_code.py | 0 .../tools/raw_to_pronto_code_test.py | 0 .../tools/scrape_supported_devices.py | 0 1680 files changed, 23618 insertions(+), 19905 deletions(-) delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/annotated.html delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.map delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.png delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.map delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.png delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.map delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.md5 delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.png delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.map delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.png delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc-members.html delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.map delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.png delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h.html delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h_source.html delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_11.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_17.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1a.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1b.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_4.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_5.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_8.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_9.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_c.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_0.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_2.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_3.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_4.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_5.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_6.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_7.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_8.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_9.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_a.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_b.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_c.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_d.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_e.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_5.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_7.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enumvalues_3.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_0.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_2.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_3.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_4.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_5.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_6.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_15.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_17.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_4.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_a.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_b.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_d.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_f.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_0.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_2.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_0.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_2.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_1.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_13.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_14.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_15.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_16.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_2.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_4.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_7.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_a.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_f.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/favicon.ico delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_1_off.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_1_on.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_off.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_on.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_off.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_on.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_off.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_on.svg delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.html delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.js delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Technibel.h delete mode 100644 lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Teco.h rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.github/CONTRIBUTING.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.github/Contributors.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.github/issue_template.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.gitignore (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.gitmodules (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.style.yapf (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/.travis.yml (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/CPPLINT.cfg (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/Doxyfile (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/LICENSE.txt (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/README.md (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/README_de.md (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/README_fr.md (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/ReleaseNotes.md (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/SupportedProtocols.md (94%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/banner.svg create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/logo.svg rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/README.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/README_de.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/README_fr.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/_config.yml (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRac_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRac_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRac_8h_source.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRrecv_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRrecv_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRrecv_8h_source.html (87%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRremoteESP8266_8h.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRremoteESP8266_8h_source.html (85%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRsend_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRsend_8h.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRsend_8h_source.html (87%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRtext_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRtext_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRtext_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRtimer_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRtimer_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRtimer_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRutils_8cpp.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRutils_8h.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/IRutils_8h_source.html (83%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/README_8md.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/annotated.html rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/bc_s.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/bdwn.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAirwellAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAirwellAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAirwellAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAirwellAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAirwellAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAmcorAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAmcorAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAmcorAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAmcorAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRAmcorAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRArgoAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRArgoAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRArgoAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRArgoAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRArgoAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCarrierAc64-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCarrierAc64.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCarrierAc64__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCarrierAc64__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCarrierAc64__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoolixAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoolixAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoolixAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoolixAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoolixAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoronaAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoronaAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoronaAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoronaAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRCoronaAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin128-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin128.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin128__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin128__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin128__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin152-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin152.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin152__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin152__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin152__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin160-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin160.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin160__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin160__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin160__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin176-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin176.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin176__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin176__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin176__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin2-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin2.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin216-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin216.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin216__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin216__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin216__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin2__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin2__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin2__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin64-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin64.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin64__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin64__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikin64__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikinESP-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikinESP.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikinESP__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikinESP__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDaikinESP__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDelonghiAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDelonghiAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDelonghiAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDelonghiAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRDelonghiAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRElectraAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRElectraAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRElectraAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRElectraAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRElectraAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRFujitsuAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRFujitsuAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRFujitsuAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRFujitsuAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRFujitsuAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGoodweatherAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGoodweatherAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGoodweatherAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGoodweatherAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGoodweatherAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGreeAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGreeAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGreeAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGreeAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRGreeAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierACYRW02-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierACYRW02.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierACYRW02__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierACYRW02__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierACYRW02__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHaierAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc1-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc1.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc1__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc1__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc1__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc3-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc3.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344__inherit__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344__inherit__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc344__inherit__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc3__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc3__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc3__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424__inherit__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424__inherit__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc424__inherit__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRHitachiAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRKelvinatorAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRKelvinatorAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRKelvinatorAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRKelvinatorAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRKelvinatorAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRLgAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRLgAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRLgAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRLgAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRLgAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMideaAC-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMideaAC.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMideaAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMideaAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMideaAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi112-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi112.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi112__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi112__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi112__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi136-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi136.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi136__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi136__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishi136__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiAC-members.html (77%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiAC.html (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiAC__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiAC__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiAC__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy152Ac-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy152Ac.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy152Ac__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy88Ac-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy88Ac.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRMitsubishiHeavy88Ac__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRNeoclimaAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRNeoclimaAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRNeoclimaAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRNeoclimaAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRNeoclimaAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc32-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc32.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc32__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc32__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc32__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRPanasonicAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSamsungAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSamsungAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSamsungAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSamsungAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSamsungAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSanyoAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSanyoAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSanyoAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSanyoAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSanyoAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSharpAc-members.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSharpAc.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSharpAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSharpAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRSharpAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTcl112Ac-members.html (69%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTcl112Ac.html (87%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTcl112Ac__coll__graph.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTcl112Ac__coll__graph.png rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTechnibelAc-members.html (66%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTechnibelAc.html (81%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTechnibelAc__coll__graph.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTechnibelAc__coll__graph.png rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTecoAc-members.html (66%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTecoAc.html (84%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTecoAc__coll__graph.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTecoAc__coll__graph.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTecoAc__coll__graph.png rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRToshibaAC-members.html (81%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRToshibaAC.html (88%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRToshibaAC__coll__graph.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRToshibaAC__coll__graph.png create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTranscoldAc-members.html rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTranscoldAc.html (71%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTranscoldAc__coll__graph.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/classIRTranscoldAc__coll__graph.png rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTrotecESP-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTrotecESP.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTrotecESP__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTrotecESP__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRTrotecESP__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVestelAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVestelAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVestelAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVestelAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVestelAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVoltas-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVoltas.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVoltas__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVoltas__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRVoltas__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRWhirlpoolAc-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRWhirlpoolAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRWhirlpoolAc__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRac-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRac.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRac__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRac__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRac__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRrecv-members.html (84%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRrecv.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRrecv__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRrecv__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRrecv__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRsend-members.html (81%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRsend.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRtimer-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classIRtimer.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classTimerMs-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classTimerMs.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classdecode__results-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classdecode__results.html (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/classes.html (90%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/closed.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/de-CH_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/de-CH_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/de-DE_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/de-DE_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/defaults_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/defaults_8h_source.html (87%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/deprecated.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/dir_49e56c817e5e54854c35e136979f97ca.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/dir_84fe998d1eb06414cc389ad334e77e63.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/doc.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/doxygen.css (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/doxygen.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/doxygen__index_8md.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/dynsections.js (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-AU_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-AU_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-IE_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-IE_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-UK_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-UK_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-US_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/en-US_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/es-ES_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/es-ES_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/files.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/folderclosed.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/folderopen.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/fr-FR_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/fr-FR_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions.html (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_a.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_b.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_c.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_d.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_e.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_f.html (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_a.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_b.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_c.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_d.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_e.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_f.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_g.html (92%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_i.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_k.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_l.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_m.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_n.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_o.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_p.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_r.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_s.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_t.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_u.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_v.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_w.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_func_~.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_g.html (92%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_h.html (87%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_i.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_k.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_l.html (89%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_m.html (92%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_n.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_o.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_p.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_q.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_r.html (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_rela.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_s.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_t.html (92%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_u.html (94%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_v.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars.html (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_a.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_b.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_c.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_d.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_e.html (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_f.html (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_h.html (84%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_i.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_l.html (88%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_m.html (92%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_n.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_o.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_p.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_q.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_r.html (94%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_s.html (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_t.html (86%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_u.html (94%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_v.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_w.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_x.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_vars_z.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_w.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_x.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_z.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/functions_~.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_a.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_c.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_d.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_e.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_enum.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_eval.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_f.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_func.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_g.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_i.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_j.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_k.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_l.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_m.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_n.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_p.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_r.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_s.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_t.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_type.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_u.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_v.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_vars.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_vars_i.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_vars_k.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_w.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_x.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_y.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/globals_z.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/graph_legend.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/graph_legend.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/graph_legend.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/hierarchy.html (64%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/i18n_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/i18n_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/index.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_0.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_0.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_0.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_1.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_1.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_1.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_10.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_10.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_10.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14/docs/doxygen/html/inherit_graph_95.map => IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_100.map} (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14/docs/doxygen/html/inherit_graph_95.md5 => IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_100.md5} (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14/docs/doxygen/html/inherit_graph_95.png => IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_100.png} (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_11.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_11.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_11.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_12.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_12.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_12.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_13.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_13.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_13.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_14.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_14.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_14.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_15.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_15.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_15.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_16.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_16.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_16.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_17.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_17.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_17.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_18.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_18.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_18.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_19.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_19.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_19.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_2.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_2.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_2.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_20.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_20.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_20.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_21.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_21.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_21.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_22.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_22.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_22.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_23.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_23.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_23.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_24.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_24.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_24.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_25.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_25.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_25.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_26.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_26.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_26.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_27.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_27.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_27.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_28.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_28.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_28.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_29.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_29.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_29.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_3.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_3.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_3.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_30.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_30.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_30.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_31.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_31.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_31.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_32.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_32.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_32.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_33.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_33.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_33.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_34.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_34.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_34.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_35.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_35.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_35.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_36.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_36.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_36.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_37.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_37.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_37.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_38.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_38.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_38.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_39.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_39.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_39.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_4.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_4.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_4.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_40.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_40.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_40.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_41.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_41.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_41.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_42.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_42.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_42.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_43.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_43.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_43.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_44.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_44.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_44.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_45.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_45.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_45.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_46.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_46.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_46.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_47.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_47.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_47.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_48.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_48.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_48.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_49.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_49.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_49.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_5.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_5.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_5.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_50.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_50.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_50.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_51.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_51.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_51.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_52.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_52.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_52.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_53.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_53.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_53.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_54.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_54.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_54.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_55.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_55.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_55.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_56.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_56.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_56.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_57.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_57.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_57.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_58.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_58.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_58.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_59.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_59.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_59.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_6.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_6.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_6.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_60.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_60.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_60.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_61.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_61.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_61.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_62.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_62.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_62.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_63.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_63.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_63.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_64.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_64.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_64.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_65.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_65.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_65.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_66.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_66.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_66.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_67.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_67.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_67.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_68.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_68.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_68.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_69.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_69.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_69.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_7.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_7.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_7.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_70.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_70.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_70.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_71.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_71.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_71.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_72.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_72.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_72.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_73.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_73.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_73.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_74.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_74.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_74.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_75.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_75.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_75.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_76.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_76.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_76.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_77.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_77.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_77.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_78.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_78.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_78.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_79.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_79.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_79.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_8.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_8.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_8.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_80.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_80.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_80.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_81.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_81.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_81.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_82.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_82.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_82.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_83.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_83.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_83.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_84.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_84.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_84.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_85.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_85.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_85.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_86.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_86.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_86.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_87.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_87.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_87.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_88.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_88.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_88.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_89.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_89.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_89.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_9.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_9.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_9.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_90.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_90.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_90.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_91.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_91.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_91.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_92.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_92.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_92.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_93.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_93.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherit_graph_93.png (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_94.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_94.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_94.png create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_95.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_95.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_95.png create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_96.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_96.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_96.png rename lib/lib_basic/{IRremoteESP8266-2.7.14/docs/doxygen/html/inherit_graph_94.map => IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_97.map} (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14/docs/doxygen/html/inherit_graph_94.md5 => IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_97.md5} (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14/docs/doxygen/html/inherit_graph_94.png => IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_97.png} (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_98.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_98.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_98.png create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_99.map create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_99.md5 create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/inherit_graph_99.png rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/inherits.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Airwell_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Airwell_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Airwell_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Aiwa_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Amcor_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Amcor_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Amcor_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Argo_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Argo_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Argo_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Carrier_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Carrier_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Carrier_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Coolix_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Coolix_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Coolix_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Corona_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Corona_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Corona_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Daikin_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Daikin_8h.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Daikin_8h_source.html (84%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Delonghi_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Delonghi_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Delonghi_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Denon_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Dish_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Doshisha_8cpp.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/ir__EcoClim_8cpp.html rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Electra_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Electra_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Electra_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__EliteScreens_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Epson_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Fujitsu_8cpp.html (94%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Fujitsu_8h.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Fujitsu_8h_source.html (80%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__GICable_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__GlobalCache_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Goodweather_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Goodweather_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Goodweather_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Gree_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Gree_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Gree_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Haier_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Haier_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Haier_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Hitachi_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Hitachi_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Hitachi_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Inax_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__JVC_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Kelvinator_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Kelvinator_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Kelvinator_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__LG_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__LG_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__LG_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Lasertag_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Lego_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Lutron_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__MWM_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Magiquest_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Magiquest_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Magiquest_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Metz_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Midea_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Midea_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Midea_8h_source.html (99%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/ir__MilesTag2_8cpp.html rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Mirage_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__MitsubishiHeavy_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__MitsubishiHeavy_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__MitsubishiHeavy_8h_source.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Mitsubishi_8cpp.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Mitsubishi_8h.html (83%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Mitsubishi_8h_source.html (73%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Multibrackets_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__NEC_8cpp.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__NEC_8h.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__NEC_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Neoclima_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Neoclima_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Neoclima_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Nikai_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Panasonic_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Panasonic_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Panasonic_8h_source.html (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Pioneer_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Pronto_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__RC5__RC6_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__RCMM_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Samsung_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Samsung_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Samsung_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sanyo_8cpp.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sanyo_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sanyo_8h_source.html (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sharp_8cpp.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sharp_8h.html (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sharp_8h_source.html (78%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sherwood_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Sony_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Symphony_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Tcl_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Tcl_8h.html (70%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Tcl_8h_source.html (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Technibel_8cpp.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/ir__Technibel_8h.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/ir__Technibel_8h_source.html rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Teco_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Teco_8h.html (50%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Teco_8h_source.html (51%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Toshiba_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Toshiba_8h.html (66%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Toshiba_8h_source.html (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Transcold_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Transcold_8h.html (85%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Transcold_8h_source.html (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Trotec_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Trotec_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Trotec_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Vestel_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Vestel_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Vestel_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Voltas_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Voltas_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Voltas_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Whirlpool_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Whirlpool_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Whirlpool_8h_source.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Whynter_8cpp.html (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/ir__Zepeal_8cpp.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/it-IT_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/it-IT_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/jquery.js (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/md_src_locale_README.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/menu.js (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/menudata.js (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespaceIRAcUtils.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespace__IRrecv.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespaceirutils.html (83%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespacemembers.html (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespacemembers_enum.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespacemembers_func.html (94%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespacemembers_vars.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespaces.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/namespacestdAc.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/nav_f.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/nav_g.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/nav_h.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/open.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/pages.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/pt-BR_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/pt-BR_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_0.js (86%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_10.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_10.js (74%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_11.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_11.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_12.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_12.js (69%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_13.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_13.js (87%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_14.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_14.js (81%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_15.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_15.js (51%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_16.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_16.js (85%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_17.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_17.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_18.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_18.js (52%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_19.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_19.js (54%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_1a.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_1a.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_1b.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_1b.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_2.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_2.js (76%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_3.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_3.js (85%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_4.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_4.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_5.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_5.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_6.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_6.js (70%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_7.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_7.js (77%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_8.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_8.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_9.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_9.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_a.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_a.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_b.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_b.js (53%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_c.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/all_c.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_d.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_d.js (64%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_e.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_e.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_f.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/all_f.js (82%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_0.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_0.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_2.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_2.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_3.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_3.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_4.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_4.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_5.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_5.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_6.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_6.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_7.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_7.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_8.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_8.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_9.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_9.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_a.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_a.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_b.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_b.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_c.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_c.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_d.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_d.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/classes_e.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/classes_e.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/close.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_0.js (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_1.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_1.js (53%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_2.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_2.js (59%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_3.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_3.js (61%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_4.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_4.js (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_5.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/enums_5.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_6.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_6.js (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_7.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/enums_7.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_8.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_8.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_9.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enums_9.js (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_0.js (50%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_1.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_1.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_10.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_10.js (59%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_11.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_11.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_12.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_12.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_13.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_13.js (61%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_14.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_14.js (54%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_15.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_15.js (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_2.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_2.js (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_3.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/enumvalues_3.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_4.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_4.js (64%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_5.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_5.js (59%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_6.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_6.js (61%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_7.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_7.js (61%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_8.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_8.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_9.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_9.js (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_a.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_a.js (57%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_b.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_b.js (56%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_c.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_c.js (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_d.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_d.js (60%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_e.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_e.js (57%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_f.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/enumvalues_f.js (58%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_0.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_0.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_2.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_2.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_3.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_3.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_4.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_4.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_5.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_5.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/files_6.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/files_6.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_0.js (54%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_10.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_10.js (68%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_11.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_11.js (80%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_12.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_12.js (89%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_13.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_13.js (53%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_14.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_14.js (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_15.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_15.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_16.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_16.js (82%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_17.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_17.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_2.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_2.js (88%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_3.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_3.js (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_4.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_4.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_5.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_5.js (52%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_6.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_6.js (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_7.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_7.js (78%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_8.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_8.js (52%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_9.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_9.js (54%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_a.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_a.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_b.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_b.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_c.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_c.js (55%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_d.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_d.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_e.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_e.js (92%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/functions_f.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/functions_f.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/mag_sel.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/namespaces_0.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/namespaces_0.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/namespaces_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/namespaces_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/namespaces_2.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/namespaces_2.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/nomatches.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/pages_0.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/pages_0.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/pages_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/pages_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/pages_2.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/pages_2.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/related_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/related_0.js (57%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/search.css (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/search.js (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/search_l.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/search_m.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/search_r.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/searchdata.js (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/typedefs_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/typedefs_0.js (52%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/typedefs_1.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/typedefs_1.js (53%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_0.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_0.js (81%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_1.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_1.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_10.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_10.js (74%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_11.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_11.js (63%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_12.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_12.js (65%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_13.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_13.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_14.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_14.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_15.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_15.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_16.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_16.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_17.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_17.js (52%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_2.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_2.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_3.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_3.js (50%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_4.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_4.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_5.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_5.js (53%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_6.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_6.js (74%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_7.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_7.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_8.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_8.js (63%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_9.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_9.js (53%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_a.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_a.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_b.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_b.js (71%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_c.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_c.js (62%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_d.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_d.js (72%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_e.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_e.js (76%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/search/variables_f.html (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/search/variables_f.js rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/splitbar.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structCoronaSection-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structCoronaSection.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structirparams__t-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structirparams__t.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structmatch__result__t-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structmatch__result__t.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structstdAc_1_1state__t-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/structstdAc_1_1state__t.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/sync_off.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/sync_on.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/tab_a.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/tab_b.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/tab_h.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/tab_s.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/tabs.css (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/todo.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionAirwellProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionAirwellProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionAmcorProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionAmcorProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionArgoProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionArgoProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCarrierProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCarrierProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoolixProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoolixProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoronaProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoronaProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoronaProtocol__coll__graph.map (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoronaProtocol__coll__graph.md5 (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionCoronaProtocol__coll__graph.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin128Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin128Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin152Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin152Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin160Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin160Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin176Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin176Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin216Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin216Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin2Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin2Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin64Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikin64Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikinESPProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDaikinESPProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDelonghiProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionDelonghiProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionElectraProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionElectraProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionGoodweatherProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionGoodweatherProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionGreeProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionGreeProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHaierProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHaierProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHaierYRW02Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHaierYRW02Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHitachi1Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHitachi1Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHitachi424Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHitachi424Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHitachiProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionHitachiProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionKelvinatorProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionKelvinatorProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionLGProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionLGProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMideaProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMideaProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi112Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi112Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi136Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi136Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi144Protocol-members.html (83%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi144Protocol.html (89%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi152Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi152Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi88Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionMitsubishi88Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionNeoclimaProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionNeoclimaProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionPanasonicAc32Protocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionPanasonicAc32Protocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionSamsungProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionSamsungProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionSanyoProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionSanyoProtocol.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionSharpProtocol-members.html (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionSharpProtocol.html (98%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTcl112Protocol-members.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTcl112Protocol.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTechnibelProtocol-members.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTechnibelProtocol.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTecoProtocol-members.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTecoProtocol.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionToshibaProtocol-members.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionToshibaProtocol.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTranscoldProtocol-members.html create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/unionTranscoldProtocol.html rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionVoltasProtocol-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionVoltasProtocol.html (85%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionmagiquest-members.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/unionmagiquest.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/zh-CN_8h.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen/html/zh-CN_8h_source.html (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/docs/doxygen_index.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/BlynkIrRemote/BlynkIrRemote.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/BlynkIrRemote/platformio.ini (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/CommonAcControl/CommonAcControl.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/CommonAcControl/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/ControlSamsungAC/ControlSamsungAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/ControlSamsungAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/DumbIRRepeater/DumbIRRepeater.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/DumbIRRepeater/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRGCSendDemo/IRGCSendDemo.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRGCSendDemo/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRGCTCPServer/IRGCTCPServer.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRGCTCPServer/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRMQTTServer/IRMQTTServer.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRMQTTServer/IRMQTTServer.ino (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRMQTTServer/platformio.ini (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRServer/IRServer.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRServer/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDemo/IRrecvDemo.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDemo/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDump/IRrecvDump.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDump/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDumpV2/IRrecvDumpV2.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDumpV2/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDumpV3/BaseOTA.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDumpV3/IRrecvDumpV3.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRrecvDumpV3/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRsendDemo/IRsendDemo.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRsendDemo/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRsendProntoDemo/IRsendProntoDemo.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/IRsendProntoDemo/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/JVCPanasonicSendDemo/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/LGACSend/LGACSend.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/LGACSend/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/SmartIRRepeater/SmartIRRepeater.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/SmartIRRepeater/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnArgoAC/TurnOnArgoAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnArgoAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnDaikinAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnFujitsuAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnGreeAC/TurnOnGreeAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnGreeAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnKelvinatorAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnMitsubishiAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnMitsubishiHeavyAc/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnPanasonicAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnToshibaAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/TurnOnTrotecAC/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/Web-AC-control/README.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/Web-AC-control/Web-AC-control.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/Web-AC-control/Web-AC-control.ino (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/Web-AC-control/platformio.ini (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/examples/Web-AC-control/printscreen.png (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/keywords.txt (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/library.json (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/library.properties (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/platformio.ini (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/pylintrc (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/CPPLINT.cfg (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRac.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRac.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRrecv.cpp (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRrecv.h (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRremoteESP8266.h (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRsend.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRsend.h (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRtext.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRtext.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRtimer.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRtimer.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRutils.cpp (87%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/IRutils.h (83%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/i18n.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Airwell.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Airwell.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Aiwa.cpp (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Amcor.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Amcor.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Argo.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Argo.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Carrier.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Carrier.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Coolix.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Coolix.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Corona.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Corona.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Daikin.cpp (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Daikin.h (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Delonghi.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Delonghi.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Denon.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Dish.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Doshisha.cpp (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/src/ir_EcoClim.cpp rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Electra.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Electra.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_EliteScreens.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Epson.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Fujitsu.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Fujitsu.h (94%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_GICable.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_GlobalCache.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Goodweather.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Goodweather.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Gree.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Gree.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Haier.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Haier.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Hitachi.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Hitachi.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Inax.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_JVC.cpp (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Kelvinator.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Kelvinator.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_LG.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_LG.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Lasertag.cpp (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Lego.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Lutron.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_MWM.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Magiquest.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Magiquest.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Metz.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Midea.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Midea.h (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/src/ir_MilesTag2.cpp rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Mirage.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Mitsubishi.cpp (88%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Mitsubishi.h (88%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_MitsubishiHeavy.cpp (91%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_MitsubishiHeavy.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Multibrackets.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_NEC.cpp (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_NEC.h (98%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Neoclima.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Neoclima.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Nikai.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Panasonic.cpp (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Panasonic.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Pioneer.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Pronto.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_RC5_RC6.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_RCMM.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Samsung.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Samsung.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Sanyo.cpp (97%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Sanyo.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Sharp.cpp (93%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Sharp.h (90%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Sherwood.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Sony.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Symphony.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Tcl.cpp (73%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Tcl.h (70%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Technibel.cpp (77%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/src/ir_Technibel.h rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Teco.cpp (75%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/src/ir_Teco.h rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Toshiba.cpp (85%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Toshiba.h (75%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Transcold.cpp (78%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Transcold.h (86%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Trotec.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Trotec.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Vestel.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Vestel.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Voltas.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Voltas.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Whirlpool.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Whirlpool.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Whynter.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/ir_Zepeal.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/README.md (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/de-CH.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/de-DE.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/defaults.h (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/en-AU.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/en-IE.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/en-UK.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/en-US.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/es-ES.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/fr-FR.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/it-IT.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/pt-BR.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/src/locale/zh-CN.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/IRac_test.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/IRrecv_test.cpp (96%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/IRrecv_test.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/IRsend_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/IRsend_test.h (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/IRutils_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/Makefile (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Airwell_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Aiwa_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Amcor_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Argo_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Carrier_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Coolix_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Corona_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Daikin_test.cpp (99%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Delonghi_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Denon_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Dish_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Doshisha_test.cpp (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/test/ir_Ecoclim_test.cpp rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Electra_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_EliteScreens_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Epson_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Fujitsu_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_GICable_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_GlobalCache_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Goodweather_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Gree_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Haier_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Hitachi_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Inax_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_JVC_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Kelvinator_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_LG_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Lasertag_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Lego_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Lutron_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_MWM_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Magiquest_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Metz_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Midea_test.cpp (100%) create mode 100644 lib/lib_basic/IRremoteESP8266-2.7.15/test/ir_Milestag2_test.cpp rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Mirage_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_MitsubishiHeavy_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Mitsubishi_test.cpp (89%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Multibrackets_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_NEC_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Neoclima_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Nikai_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Panasonic_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Pioneer_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Pronto_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_RC5_RC6_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_RCMM_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Samsung_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Sanyo_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Sharp_test.cpp (95%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Sherwood_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Sony_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Symphony_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Tcl_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Technibel_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Teco_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Toshiba_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Transcold_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Trotec_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Vestel_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Voltas_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Whirlpool_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Whynter_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/test/ir_Zepeal_test.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/Makefile (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/RawToGlobalCache.sh (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/auto_analyse_raw_data.py (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/auto_analyse_raw_data_test.py (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/gc_decode.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/generate_irtext_h.sh (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/mkkeywords (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/mode2_decode.cpp (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/raw_to_pronto_code.py (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/raw_to_pronto_code_test.py (100%) rename lib/lib_basic/{IRremoteESP8266-2.7.14 => IRremoteESP8266-2.7.15}/tools/scrape_supported_devices.py (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 196566592..f02a8257f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. - Support for Frysk language translations by Christiaan Heerze - ESP8266 Fallback to ``*.bin.gz`` binary when OTA upload of ``*.bin`` binary fails - Berry language improved Tasmota integration +- IRremoteESP8266 library from v2.7.14 to v2.7.15 ## [9.2.0.6] 20210210 ### Changed diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/annotated.html b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/annotated.html deleted file mode 100644 index a92687ec7..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/annotated.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -IRremoteESP8266: Class List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 NstdAcEnumerators and Structures for the Common A/C API
 Cstate_tStructure to hold a common A/C state
 CAirwellProtocolNative representation of a Airwell A/C message
 CAmcorProtocolNative representation of a Amcor A/C message
 CArgoProtocolNative representation of a Argo A/C message
 CCarrierProtocolNative representation of a Carrier A/C message
 CCoolixProtocolNative representation of a Coolix A/C message
 CCoronaProtocolNative representation of a Corona A/C message
 CCoronaSectionNative representation of a section of a Corona A/C message
 CDaikin128ProtocolNative representation of a Daikin128 A/C message
 CDaikin152ProtocolNative representation of a Daikin152 A/C message
 CDaikin160ProtocolNative representation of a Daikin160 A/C message
 CDaikin176ProtocolNative representation of a Daikin176 A/C message
 CDaikin216ProtocolNative representation of a Daikin216 A/C message
 CDaikin2ProtocolNative representation of a Daikin2 A/C message
 CDaikin64ProtocolNative representation of a Daikin64 A/C message
 CDaikinESPProtocolNative representation of a Daikin A/C message
 Cdecode_resultsResults returned from the decoder
 CDelonghiProtocolNative representation of a Delonghi A/C message
 CElectraProtocolNative representation of a Electra A/C message
 CGoodweatherProtocolNative representation of a Goodweather A/C message
 CGreeProtocolNative representation of a Gree A/C message
 CHaierProtocolNative representation of a Haier HSU07-HEA03 A/C message
 CHaierYRW02ProtocolNative representation of a Haier YRW02 A/C message
 CHitachi1ProtocolNative representation of a Hitachi 104-bit A/C message
 CHitachi424ProtocolNative representation of a Hitachi 53-byte/424-bit A/C message
 CHitachiProtocolNative representation of a Hitachi 224-bit A/C message
 CIRacA universal/common/generic interface for controling supported A/Cs
 CIRAirwellAcClass for handling detailed Airwell A/C messages
 CIRAmcorAcClass for handling detailed Amcor A/C messages
 CIRArgoACClass for handling detailed Argo A/C messages
 CIRCarrierAc64Class for handling detailed Carrier 64 bit A/C messages
 CIRCoolixACClass for handling detailed Coolix A/C messages
 CIRCoronaAcClass for handling detailed Corona A/C messages
 CIRDaikin128Class for handling detailed Daikin 128-bit A/C messages
 CIRDaikin152Class for handling detailed Daikin 152-bit A/C messages
 CIRDaikin160Class for handling detailed Daikin 160-bit A/C messages
 CIRDaikin176Class for handling detailed Daikin 176-bit A/C messages
 CIRDaikin2Class for handling detailed Daikin 312-bit A/C messages
 CIRDaikin216Class for handling detailed Daikin 216-bit A/C messages
 CIRDaikin64Class for handling detailed Daikin 64-bit A/C messages
 CIRDaikinESPClass for handling detailed Daikin 280-bit A/C messages
 CIRDelonghiAcClass for handling detailed Delonghi A/C messages
 CIRElectraAcClass for handling detailed Electra A/C messages
 CIRFujitsuACClass for handling detailed Fujitsu A/C messages
 CIRGoodweatherAcClass for handling detailed Goodweather A/C messages
 CIRGreeACClass for handling detailed Gree A/C messages
 CIRHaierACClass for handling detailed Haier A/C messages
 CIRHaierACYRW02Class for handling detailed Haier ACYRW02 A/C messages
 CIRHitachiAcClass for handling detailed Hitachi 224-bit A/C messages
 CIRHitachiAc1Class for handling detailed Hitachi 104-bit A/C messages
 CIRHitachiAc3Class for handling detailed Hitachi 15to27-byte/120to216-bit A/C messages
 CIRHitachiAc344Class for handling detailed Hitachi 344-bit A/C messages
 CIRHitachiAc424Class for handling detailed Hitachi 53-byte/424-bit A/C messages
 CIRKelvinatorACClass for handling detailed Kelvinator A/C messages
 CIRLgAcClass for handling detailed LG A/C messages
 CIRMideaACClass for handling detailed Midea A/C messages
 CIRMitsubishi112Class for handling detailed Mitsubishi 122-bit A/C messages
 CIRMitsubishi136Class for handling detailed Mitsubishi 136-bit A/C messages
 CIRMitsubishiACClass for handling detailed Mitsubishi 144-bit A/C messages
 CIRMitsubishiHeavy152AcClass for handling detailed Mitsubishi Heavy 152-bit A/C messages
 CIRMitsubishiHeavy88AcClass for handling detailed Mitsubishi Heavy 88-bit A/C messages
 CIRNeoclimaAcClass for handling detailed Neoclima A/C messages
 CIRPanasonicAcClass for handling detailed Panasonic A/C messages
 CIRPanasonicAc32Class for handling detailed Panasonic 32bit A/C messages
 Cirparams_tInformation for the interrupt handler
 CIRrecvClass for receiving IR messages
 CIRSamsungAcClass for handling detailed Samsung A/C messages
 CIRSanyoAcClass for handling detailed Sanyo A/C messages
 CIRsendClass for sending all basic IR protocols
 CIRSharpAcClass for handling detailed Sharp A/C messages
 CIRTcl112AcClass for handling detailed TCL A/C messages
 CIRTechnibelAcClass for handling detailed Technibel A/C messages
 CIRTecoAcClass for handling detailed Teco A/C messages
 CIRtimerThis class offers a simple counter in micro-seconds since instantiated
 CIRToshibaACClass for handling detailed Toshiba A/C messages
 CIRTranscoldAcClass for handling detailed Transcold A/C messages
 CIRTrotecESPClass for handling detailed Trotec A/C messages
 CIRVestelAcClass for handling detailed Vestel A/C messages
 CIRVoltasClass for handling detailed Voltas A/C messages
 CIRWhirlpoolAcClass for handling detailed Whirlpool A/C messages
 CKelvinatorProtocolNative representation of a Kelvinator A/C message
 CLGProtocolNative representation of a LG A/C message
 CmagiquestMagiQuest packet is both Wand ID and magnitude of swish and flick
 Cmatch_result_tResults from a data match
 CMideaProtocolNative representation of a Midea A/C message
 CMitsubishi112ProtocolNative representation of a Mitsubishi 112-bit A/C message
 CMitsubishi136ProtocolNative representation of a Mitsubishi 136-bit A/C message
 CMitsubishi144ProtocolNative representation of a Mitsubishi 144-bit A/C message
 CMitsubishi152ProtocolNative representation of a Mitsubishi Heavy 152-bit A/C message
 CMitsubishi88ProtocolNative representation of a Mitsubishi Heavy 88-bit A/C message
 CNeoclimaProtocolNative representation of a Neoclima A/C message
 CPanasonicAc32ProtocolNative representation of a Panasonic 32-bit A/C message
 CSamsungProtocolNative representation of a Samsung A/C message
 CSanyoProtocolNative representation of a Sanyo A/C message
 CSharpProtocolNative representation of a Sharp A/C message
 CTimerMsThis class offers a simple counter in milli-seconds since instantiated
 CVoltasProtocolNative representation of a Voltas A/C message
-
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.map b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.map deleted file mode 100644 index 206ef60dc..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 deleted file mode 100644 index b7845c7a0..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -b01bf74458107df4a91e8d68cd7bd7c2 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.png b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTcl112Ac__coll__graph.png deleted file mode 100644 index 713bce3fb12da126a2761dc964636db9878bc7fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2945 zcmZ9O2UHVT7smq&q1VtsAyfq+%5p#=g;S#%|UbOj+S zlF)^OVnHmlpwjsWigfA4Z(Psrcg{ESX5P7T-rRR*-n;krPj$3M2=L1AfJ!GDjpgU!K%(k`oSe_&55 zfYGkj5T|$IsZBZV=woReYl_ZHaV)FpEPtpw8#Zxt)NgY~Is04Rdf)oKYN5&7J`>$_ zO$0X-g!ynvsFaU3Hs^1T`fOw}dD1}8 z)YKG}d{R&~{iL!86*p!Svptn8xFFYiXU3q?SzXh;SYg%nF-924k!xGI5bh=qTLTS!{oQpW@Zc`?)pB z$y!!U4vxcVDJm(6NJ()wxRQp4(a>9?fB9^GA8@F_0!J(k43TC}6l>A_9WK@K% z5)l@TyXX^=8T=LPB7h%M+PI zA}_YEx>{3;AH2W95ZYd(O;EgFik6m_$FriKZ$~_1Np!k-SVV-Ph6bPPXqAQ3TZ8V_)M!Bu zrn}QPKwp-YBEB|$7#Og*d9&GR&mis7GfG|P{cf*2RwbQ&g}1;hV}hU*BGKH^l9L)T zk+Hpv5B~U!heRTQ;-a^f*g$kToxqo87&R>%1Yzn&G5Qau zSS;4vqeqUM*ql0Z8mAPTJ~@fW$<2M#)Fh3_kQ1Q>>B;09M+yoE2)MM}JS7T&U>jUT zq@{Th&F>Tx92GW~lOS2?`rMkDnv#-{iSPCjp+2xxJ)dz^|C%utBrGMB(%NeBZM2>% zQ~qpEBA+BBlw~hPvPw@+@4(R*zV&xlQE)gMbFjPdqQBqD$q7=8)~NA(o-sJ+%r7M5 zaOq-LnBF*kMqqY!wy32=RyCW)IO5y2&huyFamV>V)T^JsRYOGB^Lb^7_h3}9cDxZe2c(ix2Ir{3iyy;n*$P+H@}rc%94gy>#H zZdR}2rvE`Y!szpz=)B$QIunGv5ss;+^ka`1BI1|w8R@KD&^7;qI(a2@RN?DN$xZx= z3~HKm0LbC&#_yo)to~ZlKJ?o{^%Fggc5BausAo%o?;4YPM1z zoi)Q3E%Xb6jgKP5avL2rf+;gP%|C)}eUt>5=_Dt7ncf~&Y>LO7?6^ zrSX=mto>Q^Sl5X^*S%Pc@o(MxwLD3|S__|QO}qHgZcXmR$1F9en(Na|IEPhGV91=6 ztsm-Sro`s%LTyQPwe45!{PKz@U`*)QjnvSVxU8eH4L@d&uT&U6x z88?a9TcjfKEgS3Yrq6c!#X0u+bonVE|GnREK|!__?5(w&$> zr#)Nc>Y^eum&jh5mnO}~{FIaw?kSqF{kggK7gHgf*E4GS1N3D4^<-8|GDF&Tz^SRJ z^Yin=x1JJZejUpgz(f~-1#TR00<=o6QW+NQ?7f~ z-hbok)^x*?=;GVe(O`)e4vdS`b^jot=@LgE5WXz0eCN8dv=WPXThF1vNI^|$M9KAQ z^&d_!ODB@QZ0x?wlB(}o8fzhsBlKC?4tIV9S}8&eUqH`?89ip)l?x>36liPIbI-C^ zN{Wi?hK7dp-HnA2Hqf~;Q7jhwqOT9`<)t`W<8B;a$eYNXr{(@9np{>^w!PG{tU4C* zuOO0Qt+!RDs{qMa=~2pbR( z@NQva`*3f0wcmIdvpnAB9}<%6Q7idJR~Njrw3K^cAeR#a02LU;Y>8YBEz8Txn>pB; zKwP*WP9zfFF_|eJKA@6K2*QIyLr@hJ&Y_{9fwOoKkv62Wdakvd9cS-#r+y2dYOn6F z3YBzqAu=RzcXv1byLEo-F?Dry^OzVDXLWH2Ew`Vn1*R~X4eSH=NtZ(F(V9ttoOA>Z+^Sei7~@sp@19UQNm>!F7=3FoSOS=v1OVZ zb!c!9!$=ZXSzDvGEVrk9{OI~}M*OO3zEg!gPknY&RMexQA`k$M>^Yi?X5)?j@Mg%L z&7e@UL2<56B{WR9>7L?&qf_#>+YPwh)H4hTPcw9*~olSJK$Xe1s$0 zbES31p9&f_m>pTzaG~MI-mAoM6)+g=wYRwlECRyaeXMlH+`^)B-DGLvIV{4O9S93( zDk>^2t@t_$S(u${pM0e^!_ZAxTwI)ItXOQ7U8`AWeQOJ0Wd(lq`n8Uc(Q2VrGJ&7~ zg|Y!&ErNnHl9G}fFJDdr^x1hYbqx)R@bFXTkjT1gQ|8Ifl9Iq6GjH!w#wH*PfFc33 zyk6s^*SP$N=w(xYhcf_4v*$(|f+UNJi|-Z|X7=^j{**RaS~z;E5n0g2#)jDxs)jE> zpirV&Sy|e^;nV!aHvwIh*zMKXLy}E=R<~FE^=qJ}XM2nr*~7ylB`wXu&W<#&+AlHV zq5QPE8VmF52f5J=9R(uC*0v^D9BD>e=ek?KDh z?+Lnk4wZ}hc@Ftb7&w8AlmFGFZ1)eDXDn_Ua^<_5_&`9z>VT#O*;v}cYs@k6{{;X< Ba$*1g diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.map deleted file mode 100644 index d66eb5d21..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 deleted file mode 100644 index 26ba223dc..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -765ed53b484f35c6ead23d4d08827992 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTechnibelAc__coll__graph.png deleted file mode 100644 index 27d8bbdb97ec017c32fa1bbb270f1d62bfe1380c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3199 zcmY+H2{csgAIGo3gzUBvSvw^7Fm+D!4QM2S&AZi48oWpS+j>2 zOVp4p#@l4yXNdUU-v9qS|MQ-E?tRX4p5^|Y`~05I_j{v_4RyFUL^%Ke;L_7Yn}X$I z@D5>vg3q3OcQdenI$qO30|$SuoJM>K0B~N^Lu;A^yk5!-F}PtV8KwR{?6}$F479C9 z|I7-+x|(UFOUx;+=1NSpAuN*UjC<)m`c}4&DN+QU)+}vvnUVf8+48lAhtu=gvl_pn z35syzAm71P4JoORe75RPU(|yLdP9itvix)N#L3jG4QZu0RoZyqhp4E){v}mL)*~D* zB+}^Qx(~p~Xp_DHq!=(6z*)E1%}u<$71efT1#(L^Fv%$?#K#+VH0Svjb(iPoTm7ek zWz2l-$*&ae4vde>TLp)Scjpfe53|`7P>6TPqM8d%!EjcE?jy~AW(<guvNIyreQj$BY{!s8EdL_nmZ zqyiR+oex*PYu*+O%aytjh4j{e%+T^rPq%q=O2 znSv=P35mu-)qigaU=M!#w|8_%DJly1)n}gH_$%#JUS1xgv9Ym>OzwCe|nZ?D$_x9V`+IITAfAlf|R`P;Bw=iIQ zDzlyK?KSnaL#=TsNPR0S;WKh_gI~W!HU=`*=kyEsbrQrhuU$Kwdd@Cpc-ZVE`3_n~ zM@yPNmq6gb@kU)OHmfT=f94E_mX?-+FlSJ@A>RAiSYd{UoCqMz&(3l9u!+5W!q|IH z>h>BnfHC2p`^EJF63GdM9@_z_pWrSwi+LeudE)$ep0ctsg$%N?|FRfdQStV>n|5E1 z3J8Qhe|}_^Mr*rw5rrShee(t#YB8ykU)LKwP@6a?G)I69(?*ahsOuT{c<)I;^8z*<@iClJgPvCe(Jg-j{{4qkh zB}e;FXNWaV=S65;6M9 zLH6qo{qDjCcO@2tf#c~NniPe7S;nOx`#&L~E0yt&{f<2;>|+o}!SQhAMYuJFo{heII<pD7~Adb52?Y}WSeI<}CFCr>>!o|f! z8i{;8vgC(ilZq8Qd*ZDn0Y)jeJ9)D#Rr=Ja>#l}I^U?>qk~F=;GwY$YUc@0a*5 zCa0y*YBlhD^M;g*sEH(llc47OBNu-Qkg?3p0D=qC$Adv|YUUa~VvJ@~aB>FzU4h5{ zt1DR1m@qyWsQzj?rDEvPzvubWnCUFqnbO(#rHHaHI6OQXZN)PEakPnw!9n-kKb-!R zq$8pE=n=_jW<)5paoRs&q87)BP6h_Wo^?)_cZ{yUjkdAt-6=9MpBw{Dk5#*SryJU3 z{}b_d#bi){e8tqU;}7WXJth!EU*_+}(y*%{-Hcczy;mNEF7)h~8Asg$Q;i#5}-LlTmc`5U%p zV#9{#s!wNG5bWdk_JXX+EQ-Fk2CcRndKw+=we3ou3|!Ha7tAjz>ax2Xa1_TYhVWtQ zNjtCO?!MHUhSb;406-QJA5hNy^g(nvlh}K1$_tuVSmY6jd?0WGW};;(KrKdY4rl>D zT|=CCa}knU7D(*pyl9t+w%eSLP-Xi6Pd0AenzIFMq^mV>w>vvx1oa z{Mj^4E!WK6o;zMUJSK+2%-me+@@2uMz4gOQzX$Vm)_!Do&VaI}gTWv^_4If#hOU>d zcbeMR#DbETS6B$WfB*gn$>p#CY)G|ZKCZ3~QEFWY#bU8m?_7`0FD!_!+r9HFsky%1 z5`HKtH5FQGo6xVe%LyK;r!g_<6%B*;+UJJwCT3>1oekPaSy?vE#w|fmkq1Go3~vc7 zEQGm@l2``^2YF*VjAf5-GwxTCNW4NqQK6wg!{+B}3a<=)uBecYs9jeVeG9to03`#Vwbv+$|Pft(l>gj1-y~?_Y zQ7yHQ!|pCAJx@(_3ZT1^ zr#S7CS%J$}(ufHK1qG~t7z?vTP!JO2qz@v~W=v*;oS1eCD`N5XXcUiRR)v9{9y`d( znAljN>z6Z&g1DlRoI5a&vQ; zKo>$Y+9`Kz%=q^0raWjiZR@hLCHVyeOe`&FU+M9IHTDIjQYtDLT$lPZs@=yTD=HK~ zZ>;>LaxDG7hWKy7{fl7+0V^1vD%^$2hnMfcmlM(mO)%<$a^UqyvIvT))aW05T4gq- fl8!iOZ-f|&q|5DHk>m&eC;+{yhUjvXL)d=+Seg-0 diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.map deleted file mode 100644 index f3e5d1502..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.md5 deleted file mode 100644 index b08a20fd3..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -70b332a49408f4e1d8c532bf7d103f45 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTecoAc__coll__graph.png deleted file mode 100644 index 60d06d0839e714fc567f6101fea03934da83da8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3054 zcmZWr2UHVF7hXVWXaU4frB@*o%>zUN1VYD1S9mljDk@S1q!?YlwJ(Ih!o*p&il)G=RZ5UbMEfU-kI;-`Mw*AG1X&X;$;E=fW<&x#|-S@xZ_vtrR)#S1tpW z@DgX+IiwYfTHI-yJW8A^Obi)J9M&QoZG{S>|B@g*MbzZgWHvjue9CxvXObZ<5AMz< zCnboOlo)Fqpmv3hyFw|QFW#*Agt0HY+^QY?puDneAmOwSxRCXIC1x=zFfTVSLo||I zp#ml055&hhIZH*w7IH~Mn}xeSYiMuhIUo9~Fu6hhNqju>>*E7Tcsg>Hca%&{DAr42 z;>M-D2-p;PmYq#|g%IyC2-8dChl;QoGz4zD^(6JwDyF@8i(%qKNmI#{)zz`__c=K_ zYOY`iP?Ga4G)D3I_3PuU_p*o8`n;x8Sf{6_ZC?6HcOGpS38RuPgw`pFi;D|IIyyQ6 z@Qxjht?lj2?P28MW#%8y8fgd{Ti@pz+a53e(1T^k(8D$It3sIQdcPkS zK;60}6^|DEL7{j}byIcaZC48^&uvWix^Pc03P)Dkwk4*erTwa=naZSva3@Dc(`k@h zlu~dw2Jh9$7B5%7hYvY{lJfGH?+cp&`rxYbk>cV}!5cmF!3R@QLR6ZAZpwwY!{Y+iRsOH*Gb}s52l^LrDntv0d8(O;6b~cLiP|2 zhubi?YG}xD;JeN<@~rX23zfeclC*tLVXYpgD>ZgRuznPYmX;@-XSRL(LE&-r2}bO$M+rp8-ZT3S(COUS+a z@WH{(?brJY*$TV~FhRlSzFF+ReE1k8%CPiJGz%XFgEI}@yx`;1V$!ZN?snVrA0O8y&s?G_iMvxeAQn}TwJSoLI&Y@$$j~hls7_amv;egZ)vNk(|;`T_xxE1FimUDgc++{nZ=N7K7GFG*l52Uig^+ zwexK0rTjh#VWJODY}#&9O^w9=3?swZ64<*7+G5!g!jdCl5#JDZX4u%_q_82XN9zJ9 zMI78e-i<$6?>=x?B-;Z(qY!JE@~p>b@Z%swLTW@Ztrurm;FUAc2m65!(H$^Uuh47J zRAy6l$9i%UU)h&qmiKHJIk$>gM6_D@G09b!-?)6y!3W&}n~h!0mR?uD7CIf1bBBV) zzvl-;GYal|#1FTAll6aFfr9eR^1bwNgiS+GM?852`geSJfS(#(v>-;C{ge1*Wh2=0 z>_*M#zsU{{GyFI65y|p2$;?3|dD4sZ{O(ncQl+4$; zcdusLX^`nTz2f4NxO4C)0&l7ralE3s)Y^k&6Od*G>O&6wtL-~@Q&LiX9Z>3)v+eXr zdY@@EPudXPzmaWjEmwnr)Fxg%gm>jVeX2b(J4<9k9%-V{=>EE{V?%9i?fxjpIo!a! z$k5PGNpo}BaDHkk3QW&fqKn8Mp5MegUvJVGn3#wQCdI(7mYSs)Wy(WidbOTEe~vS& z6tl0(WY_KoiI7-klC2*Wh6D*gOiu3Jr0QKU$%WCb=BGc+BS0b$QM9zQJW@+Yh0yAl zBcL+rPfoH4#3<^S+PfkuANEqDYOEk&s~d}}>pWn}%F0?=U7eRa*JyJAmynRV>vgQs zPQvG88Ow9kUs^~askF0m(qL5EljrCZCwgJb*HUuuyC=b1ae0^xN^WlM5&0w8NJ|SF zfc+-<)Z;xhE%6gx6Z?NLh`oLEimIc=zoD0%pBTH`?hC2yar)a}U&qPwfX8ZW2RKMwOC z(RN^dejZb4AtfU-GX{6)WCoH4=JoaUyEEi$le4m7{V1PJZX_B@^iDLnFN%~Hs0M5Z zX&kO7TUc03Wx3};cWm||9P3g&Cz}~{b#+17B2jh&7IPmar=`vL@Ew1)^#r-7pt{<) zLLpcvvY?>>N*Sx`+nnvAF&~6^xATKsH{RsV29n!fKZs#nALqRbTU)u$$=f~do$j7Z zLMGn((mLHkfBp<`N_St{*i1}J>c6bobOc>$y-$8ZB4L{{Ns$m{Fts|n&%S;-i~DgYiKYCyAi1c2p|mwtSzs;H`(-ID_u z+{sD!E`rbb=1r%j2}cFkuW$RO+F@gZ%XA3k0m0;sbN#sWPIJR!kVInlU;7$6j6C5V z$b`ojBfP{{S669)xrK#9BMOBQp_@$*=Y3b?H`-}N{H*e0CoJ4_hK`g(A z9?BIJ6%k5pFK~lpgk4u??g^<6RG*Cib&c(oot+&3n3XzaNCUz5;!YW=fZ%YC}u`MvG#Ms*>Ch+~?ythU^ z#X!G*sW;?Hn`g|88gyWwYU|yJa8S2P%F3u=9lNX$NN*gx6K8E7NDDb9KPNe=8hWGx z`s@>ctEj*#D=RDN>hfEI!<5&s$XwHy*RRzPD`9La;|(-kUS2BRbNwNi@1kA)Q^)>; z4nQNzw|b?rJa5aLe>*ys&S^c$>q^+<`IOS!_8^^%jtB$k6<(C|-wMsaJaybx!Q=Dc Z1ei}+-M;H!h64+Dz(Chjr&ilB{9m7R$PNGi diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.map b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.map deleted file mode 100644 index 483543b42..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 deleted file mode 100644 index b4f1e5ba5..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -c09eeaf5909d6c222783788bba05faaf \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.png b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRToshibaAC__coll__graph.png deleted file mode 100644 index c1bfa564da481a1b5716bfc5f461d10dffa40f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3399 zcmZWsXH-*L8l_i7njlTO@{mW7-a-u|AWa1&ASDPWBBJyTf?z;_XDBZeL0YIHy%#Ae zC4dB^x6p&3H>q=+dGlvxW!;>Wd+$2=?*8_-_r54oWBrQ^+ze!7WEbHu-P>S&4vr8y z8t^^p`DZ3rXpn~bx@70SKbcKfG#S~26S%I{UEefPdeANQk?GJ3@&pEhPwX$lW_uQ& zisrGvi^ne&xIgKPt9pi9o&I%uqxXp>HpL(u6DDsLXZqT(bN4Xw3{h{ zeqXy-^0aU^n&Ks6QD$xJxAnRZ_jD^NhWnAP=GD4HR6Y9APH~W43`TaDmt8PI6Kgv^ zw@&7Hrc$p>2v+;>;RAww=2?Dz z{_JR(!=oc+0XYh0rwYp=!tq70JUWzR6pR=sMX_cYCXhYIqFP~XfO&bzM`xK@S*@*` zj)T*o5MdbzQ0K=knwUMk55$ z)zy^-2^ycW-%~!S?3g$_JdA($?q!zP$##zvasQIWN&M!fdtguyM%tbNYn*-?&&|yZ zGcM6uAUxJj{A9?wafd`=A-DEY5y1^(d8W)jZqJ%9xuQ7PInkB*`?!$FJsVN|u$E zm)G-EBw`wwZNpY#af2p2Y{WK%4~wVQ^z~J0@FpP_yA$7V$wtz>XPKOi zp5E+PteU!doi~Zw(b3W6mzI_maak*zhJ0Xj6b6M-H#awz3`M7Xojz^FJM6obJj3Y`ijbF^T2?q z+hlFnu#0((r38mjY{~T%PFC`h(^JbbBsGtsTTVd%ijtOTv-?J=DFV@5VpZd=k}jv9 zKzLC{$H?gLJKm#{34Q1)1wC6T6bH*TilruHxaw#y_?P&bSc|T)*2w=>>Orc+w@a z{>yt&&15lhFjMh}tRl-kR%gf3dSzBQl3FoF*9RYnhw53&XluR*X157nXnFw)c*uF)a@85#>SgG@#lN@C zq<<$T@%}q!oh{Q=oevK)a8q-Sq7zv8M$+!G+k9PQr^9BRta$N`q)hQ8Il=ze3OqCK z2x%D1q!a5&t}#fwjfAf!TC7P@iPmjf6b!;EN2UqeEp7tVA+@XCT6-2} zDyZdsTj=ABe6`Dc{Eg#lTe~!aaEY#}DhT6wxI07NdedOv)l>cg5t|}+JJktT1CEoz z)%oX;?a#*SyCFK_sNCa^vvXt5Ju^1t$>f-HRUcM1HXU>G zL=~CLVHZ&Wfy{}Sov$eJXE8s!J3@~zqee%Bj?nrJw?WS9GzsbR39Zj33MMgnR z?gcX%lf3Z$%~6Lq7H;lwg}FZR7+^|dwgWwIPnHn-f|J~p%uL|k38NSYhUO>t4e%rZx7drV%pP%Jv{_kB>#t^uyA<4 z#(5ghqRm~rNe%q`^kAmz+qYRDBuczY+S=N_!~!e~23y%yI_n!K-f>4Fg$fD^z_k}1 z9)7?ZQLkS=+FL0PKJ}-$bhWoT@kSMc&YcM6g~de~FXG+uii!!Cgt$0i_?~U&Bf0WN z--ReBDeF8}S)-WvvOax^N3mVshw-M|!%k06UwNy?4qf#$PO7h08N}mdxZi>^3Qxy7 z_SQy*chv*-;}a5e0|V6zlO=O=a&m^xfcG@+4jSG{Rd_pA;q0-!0GBUmBJQ@mVw8AL zpYRx;S7!H_!Z-s`l2>9`5ji?~pFkkM3=DvZhO4S-v0uI{^Y9yUl9a8nmsgbv7fU7G zbfcf_9jvkA_bg~cWF&z^G6IGKKwpyy8(?JRW1^i2I^c`Wl16sC*1#Q)KPmk_Fc8}H zkbpLUe8|g-e9NOq@h2|Ks>aO`%;ZC7=L+|^HU;yIv(sbCPj=)1`#&d8W?IZsRDb?Qq) zB`0(CLyjc^4%W@_k~WPX#CSEByP9NUI*N-WkPZ&0xH#vvA0;_hY|YI20e@j(p_rtk z(^$D96%|#!M=P&JFmEa@5{tcVV`Bpni?sW!rd}*>7eLG^ack0}pM{GH1!&W+wsQe& zJ?hGLuCu}=>m=>J`zSCl@HckS((%Ijv6bEPb90}=FF|11+7$Y6SIuiCTonuq42F^t z!0ns!aTJ(eHH6n2o;A>Z3_yK*X9o_4e_r*Z_;aLTa?;xS=P1}QtiJJhy}>1sn}b8o z-QB%ZEoQ&lgE0F!93%gPgNutxPEoNY)p_)j{Tpui=!2OMe$bX-m&NQj2y(LaIp~%< zVDqhOY#>>ITjyWYJ#ukrTYNF)Wj!`F#?Hyj7GR z2nzq!+k5xmhPXI|9mqE&-7(S8ZOAgaviqj&uNHff(aFhQfj}96$ix&CUS56^{0+dd zd98LMXXMNEYa$}?7))1l(6RKD3#28>mSA{tC3SZ?3G9h$@yU}$J) z+2k)@RaFH><@fx16?Qdzwv)EIiBa-d=LO2+I$jAcp|K6zf-1O - - - - - - -IRremoteESP8266: Member List - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- -
-
-
-
IRTranscoldAc Member List
-
-
- -

This is the complete list of members for IRTranscoldAc, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_irsendIRTranscoldAcprivate
begin()IRTranscoldAc
calibrate(void)IRTranscoldAcinline
convertFan(const stdAc::fanspeed_t speed)IRTranscoldAc
convertMode(const stdAc::opmode_t mode)IRTranscoldAc
getFan()IRTranscoldAc
getMode()IRTranscoldAc
getNormalState(void)IRTranscoldAcprivate
getPower()IRTranscoldAc
getRaw()IRTranscoldAc
getSwing()IRTranscoldAc
getTemp()IRTranscoldAc
getTempRaw()IRTranscoldAcprivate
handleSpecialState(const uint32_t data)IRTranscoldAcprivate
IRTranscoldAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)IRTranscoldAcexplicit
isSpecialState(void)IRTranscoldAcprivate
off()IRTranscoldAc
on()IRTranscoldAc
powerFlagIRTranscoldAcprivate
recoverSavedState(void)IRTranscoldAcprivate
remote_stateIRTranscoldAcprivate
saved_stateIRTranscoldAcprivate
send(const uint16_t repeat=kTranscoldDefaultRepeat)IRTranscoldAc
setFan(const uint8_t speed, const bool modecheck=true)IRTranscoldAc
setMode(const uint8_t mode)IRTranscoldAc
setPower(const bool state)IRTranscoldAc
setRaw(const uint32_t new_code)IRTranscoldAc
setSwing()IRTranscoldAc
setTemp(const uint8_t temp)IRTranscoldAc
setTempRaw(const uint8_t code)IRTranscoldAcprivate
stateReset()IRTranscoldAc
swingFlagIRTranscoldAcprivate
swingHFlagIRTranscoldAcprivate
swingVFlagIRTranscoldAcprivate
toCommon(const stdAc::state_t *prev=NULL)IRTranscoldAc
toCommonFanSpeed(const uint8_t speed)IRTranscoldAcstatic
toCommonMode(const uint8_t mode)IRTranscoldAcstatic
toString()IRTranscoldAc
updateSavedState(void)IRTranscoldAcprivate
- - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.map b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.map deleted file mode 100644 index e70c9c95d..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 deleted file mode 100644 index 517bf816e..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -6fe69bbccc1b788ab10dea841be7cbf1 \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.png b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/classIRTranscoldAc__coll__graph.png deleted file mode 100644 index d19e26b4eeed7ea5ef76fd48215ca901e71e5750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3498 zcmY*c1yoeq8XiCqlo0WfBHaio-AXecAp;UJbcleI^iYBz-QWyEDcw0VNOvP3NH+{B zNY~rm_3nM^ompqjT4$a0pMU?~{^ESlP*WtnNplkdfeG4{-Vt;Di6ZPj)bH z!8cV=l!ILT`K34J#DOP`l;xhn+*7bD0y9Rs7iWaQ`m33z;l7l+78_)Ye|z(bx?G_vY|69>#1oy@2RYw@<8yZQojZ2|z8EtI2_nYnMI>gf(Tm^xr?JoFiB(opW@f~w`ylo;*I)4C#a z)IewUGZc7@oPq+b1`H;ruTL}YdnHK`7DOs_>}Oc-%87`Ljpg9wU7IR1J3p8-BBFjA zczo=Bk0f|>t^P+7Gc)tM*OSFD@$v24B@HtB@m{8;OmH}yDnh}@$!V(E4wXN1-c67& z)#!zBpIXdT{mArOOUs}TuXps5B54c?RWOcHWm{ZcX1;mrmH|TN)vG*+oQFs4b4$#O z{ExZDgu}(f#iceLZ!ic5#Dm3@x&Ja{VrKR@n0O)Tdno});x)u&;NVcI zb$51lUjEU1wYIm~*SmgpcE;^{v@=ca_x?RTDF5@I^!H{zT0AK;lgUwWY*KuJ3c+db>q!{Pek2X`D*Ov z(Gfcfw_{oCzf1tJEN;wWW+7j8cTsyscMeDPv}u&J@rpcDSLxielkC zxarbn4CY$eE{>xY}eYw|>8)LVZg35~VE|^o>yc);F^@>~Qbu6fmeNOy} z#ptpl^t;b`|7Y3YMR8A;aZK$X9LbHk8ymLI<5qZyx9GPWbTF+~G9wYV3% z&1J87(p+6nhnMa)W+FE0$>%2c68@(_PhmsUTax;8k*xrX8B zlZegix~F;JDk|0Rx(^3?7uUBWU6M&^4;g2&SZPTseK}lbDekV<9cou^X+_wWHa~Db zok!@$Yo`=^QqQG?BlPX-infI2E+of^)CE5ygK&?xjMl+`ddK3(6*HE{4#0xn&IfDA{#ollShf)#5X(b>L<@VPi^2^K1)a_&u}`j)oiZF_k1n5^AjjAQZ!5Bh zi0Gcw7qHt;6c^Kzp^H~1y_c7kLc+q@79C2R*VQsVeag$t)wqK}4p^QZY#$9TpYuDu zuGk2EHk*&_iSjQ_tz zRsYW^7p;hIXFW8$A6#qxE%86bxx`wesM{atnCaWFI#}>Vk(uyUM&MVz9U1ZObEY1$G-oX5L464J|(|q9xkHjBz zj1}rtD5CYmIUe?|*GBTpzgU{-jxNrvE-kEPsOHQUb#Li4! zunI44ZYq0wOQ3}8TFoDm(a?AfRqwA2nEl=ud0FG&4^$I~tcc6TZQ$uLIb*-t$<=R@ zlehKpH5aaoAcf!DH|q>v1O^PYWlR&|EEb7`nwzsgypDER#l=xbBn>_>jT{tu6YmDe zwHC{YvbWnhYN-;+hK6*@T~StF0pM(M z+TIi2rJz_^U+)U1=GU*{e6MN2R1UYvLK_d zNlKy{y^fy4;e%@fsA-_{@9>FRtp%J`y2<37JUzvP?PnQ)Y5QE9I_^w8^0~Tj1Mx?< z%H}WN+UAy)rkI(Y?rsK9B|JP_Xc=B%NsRx_pHAG>xMEtj!tz-G&`Z(&R7qMlH#f`v z`veKvT08KOF2~SX9*dv{jmX$s1}U zSjj?*e}9T-967sMWv+^nl5ux5qr0c)Uh6GB<0}0!U7niS+Qr@7ND!JNJ%1Z-3}-Z) ztf3&u1D0UuJ)>DFgoK1&CMT0XrUA|8=H@P(pX~FztceDz;;hA}rAb9}jGj{Jm%tmL zCMJww6c1XBAKs>->ZX0uFp?S3VVY4>lT1j?26>1$b%~^xE@rWFn*UrHQiOMAC_O4x+_5A3RuH8xU^}lCYgBrLZHyf4Ar6j9b~+sSpql zpj&2o-Jsewqq;h=wDh6n08(C8m+DV4ESV&yqMG8uub2);p=f~yLiIE>ZbK3h5{gFI zb#!!=R#zvOBI~7v`S?gHru$cV;tb;HB|YOof}9ghjU3&?XaER0!YH)>sFxRKGj>-) zDG7ptf`x|liJw2S9PUiF@im{fg1}fhgC&)?Onzjh+w3C=nqg#O3c$?!pg@PXxVR1? z_g;bxsZH$~GBZdswn$<4=iqh)BQMB7VRTH1cD;lqTDb}ttfSA28O?UmKlGP@a} z$orD{JhVc#48p>c3r)XV?rQJGArJ^7LQMMp+uqOZ9M zA!Gh|aA2`Hng#M%3>rNE+DU-5^(FDKgSg15lK2qlR%mEwNJt1o<6Gn5x7Yn?(rEyI zd11#*@a!vV>xHZ&xaoAc#e>uvJ2RLlV0Kko%e%X3a&p%IO|YF~Wcr9&DQ@nt_I5eD z{4&~dn+dM-^K*SVY-JbnpRbYsS9stMyP{7=Bn&b~8kLlkthK*xeMl;3W?SB>JV1sg r^2^~?I{)hmyDjgAT3@@UT#}YpG>VwUu62QrFNm_dnq0Araln57q#Ws5 diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h.html b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h.html deleted file mode 100644 index a744c9920..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h.html +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Technibel.h File Reference - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
- -
-
ir_Technibel.h File Reference
-
-
- -

Support for Technibel protocol. -More...

- -

Go to the source code of this file.

- - - - - -

-Classes

class  IRTechnibelAc
 Class for handling detailed Technibel A/C messages. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Variables

const uint8_t kTechnibelAcChecksumOffset = 0
 
const uint8_t kTechnibelAcChecksumSize = 8
 
const uint8_t kTechnibelAcFooterOffset
 
const uint8_t kTechnibelAcFooterSize = 8
 
const uint8_t kTechnibelAcTimerHoursOffset
 
const uint8_t kTechnibelAcHoursSize = 8
 
const uint8_t kTechnibelAcTimerMax = 24
 
const uint8_t kTechnibelAcTempOffset
 
const uint8_t kTechnibelAcTempSize = 8
 
const uint8_t kTechnibelAcTempMinC = 16
 
const uint8_t kTechnibelAcTempMaxC = 31
 
const uint8_t kTechnibelAcTempMinF = 61
 
const uint8_t kTechnibelAcTempMaxF = 88
 
const uint8_t kTechnibelAcFanOffset
 
const uint8_t kTechnibelAcFanSize = 4
 
const uint8_t kTechnibelAcFanLow = 0b0001
 
const uint8_t kTechnibelAcFanMedium = 0b0010
 
const uint8_t kTechnibelAcFanHigh = 0b0100
 
const uint8_t kTechnibelAcSleepBit
 
const uint8_t kTechnibelAcSwingBit = kTechnibelAcSleepBit + 1
 
const uint8_t kTechnibelAcTempUnitBit = kTechnibelAcSwingBit + 1
 
const uint8_t kTechnibelAcTimerEnableBit = kTechnibelAcTempUnitBit + 1
 
const uint8_t kTechnibelAcModeOffset = kTechnibelAcTimerEnableBit + 1
 
const uint8_t kTechnibelAcModeSize = 4
 
const uint8_t kTechnibelAcCool = 0b0001
 
const uint8_t kTechnibelAcDry = 0b0010
 
const uint8_t kTechnibelAcFan = 0b0100
 
const uint8_t kTechnibelAcHeat = 0b1000
 
const uint8_t kTechnibelAcFanChangeBit
 
const uint8_t kTechnibelAcTempChangeBit = kTechnibelAcFanChangeBit + 1
 
const uint8_t kTechnibelAcTimerChangeBit = kTechnibelAcTempChangeBit + 1
 
const uint8_t kTechnibelAcPowerBit = kTechnibelAcTimerChangeBit + 1
 
const uint8_t kTechnibelAcHeaderOffset = kTechnibelAcPowerBit + 1
 
const uint8_t kTechnibelAcHeaderSize = 8
 
const uint8_t kTechnibelAcHeader = 0b00011000
 
const uint64_t kTechnibelAcResetState = 0x180101140000EA
 Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off. More...
 
-

Detailed Description

-

Support for Technibel protocol.

-

Variable Documentation

- -

◆ kTechnibelAcChecksumOffset

- -
-
- - - - -
const uint8_t kTechnibelAcChecksumOffset = 0
-
- -
-
- -

◆ kTechnibelAcChecksumSize

- -
-
- - - - -
const uint8_t kTechnibelAcChecksumSize = 8
-
- -
-
- -

◆ kTechnibelAcCool

- -
-
- - - - -
const uint8_t kTechnibelAcCool = 0b0001
-
- -
-
- -

◆ kTechnibelAcDry

- -
-
- - - - -
const uint8_t kTechnibelAcDry = 0b0010
-
- -
-
- -

◆ kTechnibelAcFan

- -
-
- - - - -
const uint8_t kTechnibelAcFan = 0b0100
-
- -
-
- -

◆ kTechnibelAcFanChangeBit

- -
-
- - - - -
const uint8_t kTechnibelAcFanChangeBit
-
-
- -

◆ kTechnibelAcFanHigh

- -
-
- - - - -
const uint8_t kTechnibelAcFanHigh = 0b0100
-
- -
-
- -

◆ kTechnibelAcFanLow

- -
-
- - - - -
const uint8_t kTechnibelAcFanLow = 0b0001
-
- -
-
- -

◆ kTechnibelAcFanMedium

- -
-
- - - - -
const uint8_t kTechnibelAcFanMedium = 0b0010
-
- -
-
- -

◆ kTechnibelAcFanOffset

- -
-
- - - - -
const uint8_t kTechnibelAcFanOffset
-
-
- -

◆ kTechnibelAcFanSize

- -
-
- - - - -
const uint8_t kTechnibelAcFanSize = 4
-
- -
-
- -

◆ kTechnibelAcFooterOffset

- -
-
- - - - -
const uint8_t kTechnibelAcFooterOffset
-
-
- -

◆ kTechnibelAcFooterSize

- -
-
- - - - -
const uint8_t kTechnibelAcFooterSize = 8
-
- -
-
- -

◆ kTechnibelAcHeader

- -
-
- - - - -
const uint8_t kTechnibelAcHeader = 0b00011000
-
- -
-
- -

◆ kTechnibelAcHeaderOffset

- -
-
- - - - -
const uint8_t kTechnibelAcHeaderOffset = kTechnibelAcPowerBit + 1
-
- -
-
- -

◆ kTechnibelAcHeaderSize

- -
-
- - - - -
const uint8_t kTechnibelAcHeaderSize = 8
-
- -
-
- -

◆ kTechnibelAcHeat

- -
-
- - - - -
const uint8_t kTechnibelAcHeat = 0b1000
-
- -
-
- -

◆ kTechnibelAcHoursSize

- -
-
- - - - -
const uint8_t kTechnibelAcHoursSize = 8
-
- -
-
- -

◆ kTechnibelAcModeOffset

- -
-
- - - - -
const uint8_t kTechnibelAcModeOffset = kTechnibelAcTimerEnableBit + 1
-
- -
-
- -

◆ kTechnibelAcModeSize

- -
-
- - - - -
const uint8_t kTechnibelAcModeSize = 4
-
- -
-
- -

◆ kTechnibelAcPowerBit

- -
-
- - - - -
const uint8_t kTechnibelAcPowerBit = kTechnibelAcTimerChangeBit + 1
-
- -
-
- -

◆ kTechnibelAcResetState

- -
-
- - - - -
const uint64_t kTechnibelAcResetState = 0x180101140000EA
-
- -

Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off.

- -
-
- -

◆ kTechnibelAcSleepBit

- -
-
- - - - -
const uint8_t kTechnibelAcSleepBit
-
-Initial value: -
-
- -

◆ kTechnibelAcSwingBit

- -
-
- - - - -
const uint8_t kTechnibelAcSwingBit = kTechnibelAcSleepBit + 1
-
- -
-
- -

◆ kTechnibelAcTempChangeBit

- -
-
- - - - -
const uint8_t kTechnibelAcTempChangeBit = kTechnibelAcFanChangeBit + 1
-
- -
-
- -

◆ kTechnibelAcTempMaxC

- -
-
- - - - -
const uint8_t kTechnibelAcTempMaxC = 31
-
- -
-
- -

◆ kTechnibelAcTempMaxF

- -
-
- - - - -
const uint8_t kTechnibelAcTempMaxF = 88
-
- -
-
- -

◆ kTechnibelAcTempMinC

- -
-
- - - - -
const uint8_t kTechnibelAcTempMinC = 16
-
- -
-
- -

◆ kTechnibelAcTempMinF

- -
-
- - - - -
const uint8_t kTechnibelAcTempMinF = 61
-
- -
-
- -

◆ kTechnibelAcTempOffset

- -
-
- - - - -
const uint8_t kTechnibelAcTempOffset
-
-
- -

◆ kTechnibelAcTempSize

- -
-
- - - - -
const uint8_t kTechnibelAcTempSize = 8
-
- -
-
- -

◆ kTechnibelAcTempUnitBit

- -
-
- - - - -
const uint8_t kTechnibelAcTempUnitBit = kTechnibelAcSwingBit + 1
-
- -
-
- -

◆ kTechnibelAcTimerChangeBit

- -
-
- - - - -
const uint8_t kTechnibelAcTimerChangeBit = kTechnibelAcTempChangeBit + 1
-
- -
-
- -

◆ kTechnibelAcTimerEnableBit

- -
-
- - - - -
const uint8_t kTechnibelAcTimerEnableBit = kTechnibelAcTempUnitBit + 1
-
- -
-
- -

◆ kTechnibelAcTimerHoursOffset

- -
-
- - - - -
const uint8_t kTechnibelAcTimerHoursOffset
-
-
- -

◆ kTechnibelAcTimerMax

- -
-
- - - - -
const uint8_t kTechnibelAcTimerMax = 24
-
- -
-
-
-
const uint8_t kTechnibelAcFooterSize
Definition: ir_Technibel.h:50
-
const uint8_t kTechnibelAcFanSize
Definition: ir_Technibel.h:67
-
const uint8_t kTechnibelAcChecksumOffset
Definition: ir_Technibel.h:45
-
const uint8_t kTechnibelAcTempOffset
Definition: ir_Technibel.h:57
-
const uint8_t kTechnibelAcFanOffset
Definition: ir_Technibel.h:65
-
const uint8_t kTechnibelAcModeOffset
Definition: ir_Technibel.h:82
-
const uint8_t kTechnibelAcHoursSize
Definition: ir_Technibel.h:54
-
const uint8_t kTechnibelAcTempSize
Definition: ir_Technibel.h:59
-
const uint8_t kTechnibelAcTimerHoursOffset
Definition: ir_Technibel.h:52
-
const uint8_t kTechnibelAcFooterOffset
Definition: ir_Technibel.h:48
-
const uint8_t kTechnibelAcModeSize
Definition: ir_Technibel.h:83
-
const uint8_t kTechnibelAcChecksumSize
Definition: ir_Technibel.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h_source.html b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h_source.html deleted file mode 100644 index 6c9cc9ecd..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/ir__Technibel_8h_source.html +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - -IRremoteESP8266: src/ir_Technibel.h Source File - - - - - - - - - -
-
- - - - - - -
-
IRremoteESP8266 -
-
-
- - - - - - - - -
-
- - -
- -
- - -
-
-
-
ir_Technibel.h
-
-
-Go to the documentation of this file.
1 // Copyright 2020 Quentin Briollant
-
2 
-
5 
-
6 #ifndef IR_TECHNIBEL_H_
-
7 #define IR_TECHNIBEL_H_
-
8 
-
9 #define __STDC_LIMIT_MACROS
-
10 #include <stdint.h>
-
11 #ifndef UNIT_TEST
-
12 #include <Arduino.h>
-
13 #endif
-
14 #include "IRremoteESP8266.h"
-
15 #include "IRsend.h"
-
16 #ifdef UNIT_TEST
-
17 #include "IRsend_test.h"
-
18 #endif
-
19 
-
20 // Supports:
-
21 // Brand: Technibel, Model: IRO PLUS
-
22 
-
23 
-
24 /* State bit map:
-
25 
-
26 +--+--+--+--+--+--+--+--+--+------------+-----------+----------+--+--+--+--+
-
27 | FIXED HEADER |ON|TIMER CHANGE|TEMP CHANGE|FAN CHANGE| MODE |
-
28 +--+--+--+--+--+--+--+--+--+------------+-----------+----------+--+--+--+--+
-
29  55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40
-
30 
-
31 +-----+------+-----+-----+---+--+--+--+---+--+--+--+--+--+--+--+
-
32 |TIMER|C OR F|SWING|SLEEP| 0 | FAN | 0 | TEMPERATURE |
-
33 +-----+------+-----+-----+---+--+--+--+---+--+--+--+--+--+--+--+
-
34  39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24
-
35 
-
36 +---+---+---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-
37 | 0 | 0 | 0 | ON TIME HOUR | FOOTER | CHECKSUM |
-
38 +---+---+---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
-
39  23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
-
40 
-
41 
-
42 */
-
43 
-
44 // Constants
-
45 const uint8_t kTechnibelAcChecksumOffset = 0;
-
46 const uint8_t kTechnibelAcChecksumSize = 8;
-
47 
- - -
50 const uint8_t kTechnibelAcFooterSize = 8;
-
51 
- - -
54 const uint8_t kTechnibelAcHoursSize = 8; // Max 24 hrs
-
55 const uint8_t kTechnibelAcTimerMax = 24;
-
56 
- - -
59 const uint8_t kTechnibelAcTempSize = 8;
-
60 const uint8_t kTechnibelAcTempMinC = 16; // Deg C
-
61 const uint8_t kTechnibelAcTempMaxC = 31; // Deg C
-
62 const uint8_t kTechnibelAcTempMinF = 61; // Deg F
-
63 const uint8_t kTechnibelAcTempMaxF = 88; // Deg F
-
64 
- - -
67 const uint8_t kTechnibelAcFanSize = 4;
-
68 const uint8_t kTechnibelAcFanLow = 0b0001;
-
69 const uint8_t kTechnibelAcFanMedium = 0b0010;
-
70 const uint8_t kTechnibelAcFanHigh = 0b0100;
-
71 
- - -
74 
- -
76 
-
77 // (0 = Celsius, 1 = Fahrenheit)
- -
79 
- -
81 
- -
83 const uint8_t kTechnibelAcModeSize = 4;
-
84 const uint8_t kTechnibelAcCool = 0b0001;
-
85 const uint8_t kTechnibelAcDry = 0b0010;
-
86 const uint8_t kTechnibelAcFan = 0b0100;
-
87 const uint8_t kTechnibelAcHeat = 0b1000;
-
88 
- - -
91 
- -
93 
- -
95 
- -
97 
- -
99 const uint8_t kTechnibelAcHeaderSize = 8;
-
100 const uint8_t kTechnibelAcHeader = 0b00011000;
-
101 
-
102 const uint64_t kTechnibelAcResetState = 0x180101140000EA;
-
103 
-
105 
-
106 // Classes
- -
109  public:
-
110  explicit IRTechnibelAc(const uint16_t pin, const bool inverted = false,
-
111  const bool use_modulation = true);
-
112  void stateReset();
-
113 #if SEND_TECHNIBEL_AC
-
114  void send(const uint16_t repeat = kTechnibelAcDefaultRepeat);
-
119  int8_t calibrate(void) { return _irsend.calibrate(); }
-
120 #endif // SEND_TECHNIBEL_AC
-
121  void begin();
-
122  static uint8_t calcChecksum(const uint64_t state);
-
123  static bool validChecksum(const uint64_t state);
-
124  void setPower(const bool on);
-
125  bool getPower();
-
126  void on();
-
127  void off();
-
128  void setTempUnit(const bool celsius);
-
129  bool getTempUnit(void);
-
130  void setTemp(const uint8_t temp, const bool fahrenheit = false);
-
131  uint8_t getTemp();
-
132  void setFan(const uint8_t speed);
-
133  uint8_t getFan();
-
134  void setMode(const uint8_t mode);
-
135  uint8_t getMode();
-
136  void setSwing(const bool on);
-
137  bool getSwing();
-
138  bool convertSwing(const stdAc::swingv_t swing);
-
139  stdAc::swingv_t toCommonSwing(const bool swing);
-
140  void setSleep(const bool on);
-
141  bool getSleep();
-
142  void setTimerEnabled(const bool on);
-
143  bool getTimerEnabled(void);
-
144  void setTimer(const uint16_t nr_of_mins);
-
145  uint16_t getTimer(void);
-
146  uint64_t getRaw();
-
147  void setRaw(const uint64_t state);
-
148  uint8_t convertMode(const stdAc::opmode_t mode);
-
149  uint8_t convertFan(const stdAc::fanspeed_t speed);
-
150  static stdAc::opmode_t toCommonMode(const uint8_t mode);
-
151  static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
-
152  stdAc::state_t toCommon(void);
-
153  String toString();
-
154 #ifndef UNIT_TEST
-
155 
-
156  private:
- -
158 #else
-
159  IRsendTest _irsend;
-
160 #endif
-
161  uint64_t remote_state; // The state of the IR remote.
-
162  uint8_t _saved_temp; // The previously user requested temp value.
-
163  uint8_t _saved_temp_units; // The previously user requested temp units.
-
164  void checksum(void);
-
165 };
-
166 #endif // IR_TECHNIBEL_H_
-
-
IRsendTest _irsend
Definition: ir_Technibel.h:159
-
String toString()
Convert the current internal state into a human readable string.
Definition: ir_Technibel.cpp:399
-
static uint8_t calcChecksum(const uint64_t state)
Compute the checksum of the supplied state.
Definition: ir_Technibel.cpp:109
-
bool getTempUnit(void)
Get the temperature unit setting.
Definition: ir_Technibel.cpp:180
-
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition: ir_Technibel.cpp:260
-
uint8_t getTemp()
Get the current temperature setting.
Definition: ir_Technibel.cpp:198
-
uint16_t getTimer(void)
Get the timer time for when the A/C unit will switch power state.
Definition: ir_Technibel.cpp:365
-
void stateReset()
Reset the internal state of the emulation.
Definition: ir_Technibel.cpp:134
-
const uint8_t kTechnibelAcFooterSize
Definition: ir_Technibel.h:50
-
const uint8_t kTechnibelAcTempMinF
Definition: ir_Technibel.h:62
-
void begin()
Set up hardware to be able to send a message.
Definition: ir_Technibel.cpp:96
-
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
-
const uint8_t kTechnibelAcFanLow
Definition: ir_Technibel.h:68
-
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
-
const uint8_t kTechnibelAcFanSize
Definition: ir_Technibel.h:67
-
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode into its stdAc equivalent.
Definition: ir_Technibel.cpp:292
-
void setRaw(const uint64_t state)
Set the internal state from a valid code for this protocol.
Definition: ir_Technibel.cpp:149
-
IRTechnibelAc(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: ir_Technibel.cpp:91
-
void setTempUnit(const bool celsius)
Set the temperature unit setting.
Definition: ir_Technibel.cpp:173
- -
void setTimer(const uint16_t nr_of_mins)
Set the timer for when the A/C unit will switch off.
Definition: ir_Technibel.cpp:355
-
void checksum(void)
Set the checksum of the internal state.
Definition: ir_Technibel.cpp:127
-
static bool validChecksum(const uint64_t state)
Confirm the checksum of the supplied state is valid.
Definition: ir_Technibel.cpp:121
-
Class for sending all basic IR protocols.
Definition: IRsend.h:182
-
const uint8_t kTechnibelAcChecksumOffset
Definition: ir_Technibel.h:45
-
const uint8_t kTechnibelAcTimerEnableBit
Definition: ir_Technibel.h:80
-
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition: IRsend.cpp:207
-
bool getPower()
Get the value of the current power setting.
Definition: ir_Technibel.cpp:167
-
void setTemp(const uint8_t temp, const bool fahrenheit=false)
Set the temperature.
Definition: ir_Technibel.cpp:187
-
uint64_t remote_state
Definition: ir_Technibel.h:161
-
uint64_t getRaw()
Get a copy of the internal state/code for this protocol.
Definition: ir_Technibel.cpp:142
-
std::string String
Definition: IRremoteESP8266.h:1178
-
const uint8_t kTechnibelAcTempMaxC
Definition: ir_Technibel.h:61
-
const uint8_t kTechnibelAcTempOffset
Definition: ir_Technibel.h:57
-
const uint8_t kTechnibelAcSleepBit
Definition: ir_Technibel.h:72
- -
stdAc::swingv_t toCommonSwing(const bool swing)
Convert a native swing into its stdAc equivalent.
Definition: ir_Technibel.cpp:323
-
const uint8_t kTechnibelAcFanOffset
Definition: ir_Technibel.h:65
-
const uint8_t kTechnibelAcFanHigh
Definition: ir_Technibel.h:70
-
const uint8_t kTechnibelAcTimerMax
Definition: ir_Technibel.h:55
-
void send(const uint16_t repeat=kTechnibelAcDefaultRepeat)
Send the current internal state as an IR message.
Definition: ir_Technibel.cpp:101
-
void off()
Set the requested power state of the A/C to off.
Definition: ir_Technibel.cpp:157
-
const uint8_t kTechnibelAcCool
Definition: ir_Technibel.h:84
-
const uint8_t kTechnibelAcTimerChangeBit
Definition: ir_Technibel.h:94
-
const uint8_t kTechnibelAcFan
Definition: ir_Technibel.h:86
-
const uint8_t kTechnibelAcHeader
Definition: ir_Technibel.h:100
-
bool getTimerEnabled(void)
Is the timer function enabled?
Definition: ir_Technibel.cpp:347
-
bool getSleep()
Get the Sleep setting of the A/C.
Definition: ir_Technibel.cpp:335
-
const uint8_t kTechnibelAcHeat
Definition: ir_Technibel.h:87
-
const uint8_t kTechnibelAcFanChangeBit
Definition: ir_Technibel.h:89
-
const uint8_t kTechnibelAcHeaderSize
Definition: ir_Technibel.h:99
-
Class for handling detailed Technibel A/C messages.
Definition: ir_Technibel.h:108
-
stdAc::state_t toCommon(void)
Convert the current internal state into its stdAc::state_t equivalent.
Definition: ir_Technibel.cpp:373
-
const uint8_t kTechnibelAcPowerBit
Definition: ir_Technibel.h:96
-
uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition: ir_Technibel.cpp:230
-
const uint8_t kTechnibelAcSwingBit
Definition: ir_Technibel.h:75
-
uint8_t _saved_temp
Definition: ir_Technibel.h:162
-
const uint8_t kTechnibelAcTempUnitBit
Definition: ir_Technibel.h:78
-
const uint8_t kTechnibelAcModeOffset
Definition: ir_Technibel.h:82
-
const uint8_t kTechnibelAcHeaderOffset
Definition: ir_Technibel.h:98
-
const uint8_t kTechnibelAcHoursSize
Definition: ir_Technibel.h:54
-
bool getSwing()
Get the (vertical) swing setting of the A/C.
Definition: ir_Technibel.cpp:309
-
const uint8_t kTechnibelAcTempMinC
Definition: ir_Technibel.h:60
-
const uint8_t kTechnibelAcTempSize
Definition: ir_Technibel.h:59
-
const uint8_t kTechnibelAcTimerHoursOffset
Definition: ir_Technibel.h:52
-
uint8_t _saved_temp_units
Definition: ir_Technibel.h:163
-
uint8_t getFan()
Get the current fan speed setting.
Definition: ir_Technibel.cpp:223
-
const uint64_t kTechnibelAcResetState
Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off.
Definition: ir_Technibel.h:102
-
void setTimerEnabled(const bool on)
Set the enable timer setting.
Definition: ir_Technibel.cpp:341
-
const uint16_t kTechnibelAcDefaultRepeat
Definition: IRremoteESP8266.h:929
-
void setSwing(const bool on)
Set the (vertical) swing setting of the A/C.
Definition: ir_Technibel.cpp:303
-
uint8_t getMode()
Get the operating mode setting of the A/C.
Definition: ir_Technibel.cpp:254
-
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition: ir_Technibel.h:119
-
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition: ir_Technibel.cpp:244
-
const uint8_t kTechnibelAcFanMedium
Definition: ir_Technibel.h:69
-
const uint8_t kTechnibelAcFooterOffset
Definition: ir_Technibel.h:48
-
void on()
Set the requested power state of the A/C to on.
Definition: ir_Technibel.cpp:154
-
Structure to hold a common A/C state.
Definition: IRsend.h:97
-
bool convertSwing(const stdAc::swingv_t swing)
Convert a stdAc::swingv_t enum into it's native swing.
Definition: ir_Technibel.cpp:316
-
uint8_t convertMode(const stdAc::opmode_t mode)
Convert a stdAc::opmode_t enum into its native mode.
Definition: ir_Technibel.cpp:280
-
const uint8_t kTechnibelAcDry
Definition: ir_Technibel.h:85
-
const uint8_t kTechnibelAcModeSize
Definition: ir_Technibel.h:83
-
const uint8_t kTechnibelAcChecksumSize
Definition: ir_Technibel.h:46
-
const uint8_t kTechnibelAcTempMaxF
Definition: ir_Technibel.h:63
-
IRsend _irsend
Definition: ir_Technibel.h:157
-
void setPower(const bool on)
Change the power setting.
Definition: ir_Technibel.cpp:161
-
void setSleep(const bool on)
Set the Sleep setting of the A/C.
Definition: ir_Technibel.cpp:329
-
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition: ir_Technibel.cpp:204
-
const uint8_t kTechnibelAcTempChangeBit
Definition: ir_Technibel.h:92
-
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
- - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1.js deleted file mode 100644 index 85b1dada7..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1.js +++ /dev/null @@ -1,30 +0,0 @@ -var searchData= -[ - ['a705_87',['A705',['../unionSharpProtocol.html#a17a7db01f34cacdc975e64e738233d72',1,'SharpProtocol::A705()'],['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a7478bee154c89b576fd478d9623d9281',1,'A705(): IRsend.h']]], - ['a907_88',['A907',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7a11c3296670bdeab9ddd87e4edb875e64',1,'IRsend.h']]], - ['add_89',['add',['../classIRtimer.html#aa8e3ff975ae5468b4727790c828fa032',1,'IRtimer::add()'],['../classTimerMs.html#a77bfc23a029a9172c3dbac03f746b0cb',1,'TimerMs::add()']]], - ['addbooltostring_90',['addBoolToString',['../namespaceirutils.html#a12ba9cf1830a886649a80c3cc5fdce2b',1,'irutils']]], - ['adddaytostring_91',['addDayToString',['../namespaceirutils.html#a6ead1d10578c64627f8a24b5d8a7444f',1,'irutils']]], - ['addfantostring_92',['addFanToString',['../namespaceirutils.html#af222d5a977e2cd2c979184c449d3c2f8',1,'irutils']]], - ['addinttostring_93',['addIntToString',['../namespaceirutils.html#a772e623c4b60208200e02afbaec66651',1,'irutils']]], - ['addlabeledstring_94',['addLabeledString',['../namespaceirutils.html#ac98793392d1e65c1b8d6895eb9d9b75b',1,'irutils']]], - ['addmodeltostring_95',['addModelToString',['../namespaceirutils.html#a06e5a5c2b6f6649035dfa5eb19801367',1,'irutils']]], - ['addmodetostring_96',['addModeToString',['../namespaceirutils.html#a8b74ae0258e98aa0eaebc6f3efe1481e',1,'irutils']]], - ['address_97',['address',['../classdecode__results.html#a2858c3a5e28eccca95d44aaa87b70e9e',1,'decode_results']]], - ['addtemptostring_98',['addTempToString',['../namespaceirutils.html#a0cef0634f4db979a93b7dc19cc2b4a85',1,'irutils']]], - ['airflow_99',['AirFlow',['../unionGoodweatherProtocol.html#a7b876552a27a7a9bf84b1009f7b12f7a',1,'GoodweatherProtocol']]], - ['airwell_100',['airwell',['../classIRac.html#a26cd62e09250d87b652d35406ebfb159',1,'IRac::airwell()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada0cd75c2edaa4c674d679dbb39635990a',1,'AIRWELL(): IRremoteESP8266.h']]], - ['airwellprotocol_101',['AirwellProtocol',['../unionAirwellProtocol.html',1,'']]], - ['aiwa_5frc_5ft501_102',['AIWA_RC_T501',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7dc14b2c4769ef9de663c2e2165d8f75',1,'IRremoteESP8266.h']]], - ['akb75215403_103',['AKB75215403',['../IRsend_8h.html#a50c54713e16502d280723334879dc83ba37d3851f43307f1e1eac46c5fbf3f08a',1,'IRsend.h']]], - ['altmode_104',['AltMode',['../unionDaikin176Protocol.html#a05511938e152951723792dc08b33d0dd',1,'Daikin176Protocol']]], - ['amcor_105',['amcor',['../classIRac.html#a4bad16621b232572e14fe4a53f678131',1,'IRac::amcor()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1325ba25674d7a99562f15a1b392086b',1,'AMCOR(): IRremoteESP8266.h']]], - ['amcorprotocol_106',['AmcorProtocol',['../unionAmcorProtocol.html',1,'']]], - ['ardb1_107',['ARDB1',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a6f6fcd0be917d91b71c1b80b5446ee5b',1,'IRsend.h']]], - ['argo_108',['argo',['../classIRac.html#aa06ee1314529dbf96f4e6f3c28ea6821',1,'IRac::argo()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac9ff1fa84905b54238b16d31197efb72',1,'ARGO(): IRremoteESP8266.h']]], - ['argoprotocol_109',['ArgoProtocol',['../unionArgoProtocol.html',1,'']]], - ['arjw2_110',['ARJW2',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0acbca1f3d199103d8cb9d856b9089cdc4',1,'IRsend.h']]], - ['arrah2e_111',['ARRAH2E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a6ccf47af1067e794e02e21f03389297b',1,'IRsend.h']]], - ['arreb1e_112',['ARREB1E',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0a2443ff6f0181dbc1af275c709d67147a',1,'IRsend.h']]], - ['arry4_113',['ARRY4',['../IRsend_8h.html#a7204e78a1fe37a819c0b66f87a685dc0aee3994c5a4a8447463d67df2cdf5a946',1,'IRsend.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_11.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_11.js deleted file mode 100644 index bff3b3ac0..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_11.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['quiet_3131',['quiet',['../structstdAc_1_1state__t.html#a251ad14e187a9905137e9e4e010c3e34',1,'stdAc::state_t::quiet()'],['../unionDaikinESPProtocol.html#af93324815f6be6cfc5d0d50af9e73aad',1,'DaikinESPProtocol::Quiet()'],['../unionDaikin2Protocol.html#afa111c9afbc94bcf52e9ba15b59c1bee',1,'Daikin2Protocol::Quiet()'],['../unionDaikin152Protocol.html#ac5bfe8541e53cb2732bfcbc71500ed32',1,'Daikin152Protocol::Quiet()'],['../unionKelvinatorProtocol.html#ac803fe14d6d21155418d2fe0543c9d9f',1,'KelvinatorProtocol::Quiet()']]], - ['quiet1_3132',['Quiet1',['../unionSamsungProtocol.html#ac38e3f34f98ac3dae9738a1582dfeca6',1,'SamsungProtocol']]], - ['quiet5_3133',['Quiet5',['../unionSamsungProtocol.html#a94a9d2b42e1ab7a308d079322350c3f9',1,'SamsungProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_17.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_17.js deleted file mode 100644 index 0b45cbddf..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_17.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['wall_3510',['Wall',['../unionDaikin128Protocol.html#aed2c5bc365820f2c0a5f27dd68fa8a05',1,'Daikin128Protocol']]], - ['wand_5fid_3511',['wand_id',['../unionmagiquest.html#a1b159cd47635d548e1d4198cd6d41e93',1,'magiquest']]], - ['weeklytimer_3512',['WeeklyTimer',['../unionDaikinESPProtocol.html#a25e632da82856caebd233699fda8d796',1,'DaikinESPProtocol']]], - ['whirlpool_3513',['whirlpool',['../classIRac.html#ae5f7a03589f614c03c5ad8629100b05a',1,'IRac']]], - ['whirlpool_5fac_3514',['WHIRLPOOL_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9faf927323d110269541b356f079b85a',1,'IRremoteESP8266.h']]], - ['whirlpool_5fac_5fremote_5fmodel_5ft_3515',['whirlpool_ac_remote_model_t',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2',1,'IRsend.h']]], - ['whynter_3516',['WHYNTER',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada458cdd7fa2b29dc8617c694696580c0c',1,'IRremoteESP8266.h']]], - ['widevane_3517',['WideVane',['../unionMitsubishi144Protocol.html#ad0c48e95ca7e0658edf7c2ac2b541c3c',1,'Mitsubishi144Protocol']]], - ['wifi_3518',['WiFi',['../unionGreeProtocol.html#a6cf8e0a6c54a5d2b6f14074c6f3dcc92',1,'GreeProtocol::WiFi()'],['../unionVoltasProtocol.html#aae1406825a156f159c5ad4b28d20364c',1,'VoltasProtocol::Wifi()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1a.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1a.js deleted file mode 100644 index b73a1ecc8..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1a.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['zepeal_3523',['ZEPEAL',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1622e3d0835b4d47add716811c7bf797',1,'IRremoteESP8266.h']]], - ['zh_2dcn_2eh_3524',['zh-CN.h',['../zh-CN_8h.html',1,'']]], - ['zonefollow1_3525',['ZoneFollow1',['../unionCoolixProtocol.html#a5f19a21823bbdb6d5deceb03db0d3d5b',1,'CoolixProtocol']]], - ['zonefollow2_3526',['ZoneFollow2',['../unionCoolixProtocol.html#ade33ba99bcfcf9d7dac334e56e9bb167',1,'CoolixProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1b.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1b.js deleted file mode 100644 index 502c01110..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_1b.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_7eirrecv_3527',['~IRrecv',['../classIRrecv.html#a87d4cca5e350177cb0922842dda1eb5b',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_4.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_4.js deleted file mode 100644 index d2fa6aac2..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_4.js +++ /dev/null @@ -1,136 +0,0 @@ -var searchData= -[ - ['d_188',['D',['../unionMitsubishi152Protocol.html#ac493830f3bf09e178aa09b24368746c9',1,'Mitsubishi152Protocol']]], - ['daikin_189',['daikin',['../classIRac.html#afb6d77bbeb5b2465437cef4f58b83e0e',1,'IRac::daikin()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad8dc0597fd237d7098246334f3b5f37e',1,'DAIKIN(): IRremoteESP8266.h']]], - ['daikin128_190',['daikin128',['../classIRac.html#a8fe7c254e1bcb32b6b6fdc1f91693a50',1,'IRac::daikin128()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4b26fb376f6375dd6d1d4be186438f88',1,'DAIKIN128(): IRremoteESP8266.h']]], - ['daikin128protocol_191',['Daikin128Protocol',['../unionDaikin128Protocol.html',1,'']]], - ['daikin152_192',['daikin152',['../classIRac.html#a6dff8e608e3e9fecffe71c3fd1ebe74e',1,'IRac::daikin152()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadad3f5f7ca39aee5fdab671a1b0d647ae4',1,'DAIKIN152(): IRremoteESP8266.h']]], - ['daikin152protocol_193',['Daikin152Protocol',['../unionDaikin152Protocol.html',1,'']]], - ['daikin160_194',['daikin160',['../classIRac.html#a3b34f44d713efa52f30d43405cde831c',1,'IRac::daikin160()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada4db6a848df3aed4289801e1b2bbbf6aa',1,'DAIKIN160(): IRremoteESP8266.h']]], - ['daikin160protocol_195',['Daikin160Protocol',['../unionDaikin160Protocol.html',1,'']]], - ['daikin176_196',['daikin176',['../classIRac.html#aaae173fd58a7b53c3f4d2edbf7c4afe7',1,'IRac::daikin176()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada57f78a3b04d904f19d10bac13483deab',1,'DAIKIN176(): IRremoteESP8266.h']]], - ['daikin176protocol_197',['Daikin176Protocol',['../unionDaikin176Protocol.html',1,'']]], - ['daikin2_198',['daikin2',['../classIRac.html#a89eddc0e1b3c41c608208d2752dc954c',1,'IRac::daikin2()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab37b344f84d575ec78a92ca55e153586',1,'DAIKIN2(): IRremoteESP8266.h']]], - ['daikin216_199',['daikin216',['../classIRac.html#a101ac8b9e9564e557ef1a1f61ff111d9',1,'IRac::daikin216()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaa833fa3a20c3cbb7e6206dac4da30ffb',1,'DAIKIN216(): IRremoteESP8266.h']]], - ['daikin216protocol_200',['Daikin216Protocol',['../unionDaikin216Protocol.html',1,'']]], - ['daikin2protocol_201',['Daikin2Protocol',['../unionDaikin2Protocol.html',1,'']]], - ['daikin64_202',['daikin64',['../classIRac.html#a074db6fc0cff2878d80a397020e1b249',1,'IRac::daikin64()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada70581853ce4883b747d22fdfd74409c4',1,'DAIKIN64(): IRremoteESP8266.h']]], - ['daikin64protocol_203',['Daikin64Protocol',['../unionDaikin64Protocol.html',1,'']]], - ['daikinespprotocol_204',['DaikinESPProtocol',['../unionDaikinESPProtocol.html',1,'']]], - ['data_205',['data',['../structmatch__result__t.html#ae88be61a6d1ffa7c3525aa958f4c0d25',1,'match_result_t']]], - ['data0_206',['Data0',['../structCoronaSection.html#a975b14d8bc30807013714158ef7474ea',1,'CoronaSection']]], - ['data0inv_207',['Data0Inv',['../structCoronaSection.html#ab05024b8314929dcd8ccdda9b497be8c',1,'CoronaSection']]], - ['data1_208',['Data1',['../structCoronaSection.html#a59d97a1bc0a1be50b6f96c4d70673425',1,'CoronaSection']]], - ['data1inv_209',['Data1Inv',['../structCoronaSection.html#ada247bbfb60f24cd9e9a612c9621cbb4',1,'CoronaSection']]], - ['de_2dch_2eh_210',['de-CH.h',['../de-CH_8h.html',1,'']]], - ['de_2dde_2eh_211',['de-DE.h',['../de-DE_8h.html',1,'']]], - ['decode_212',['decode',['../classIRrecv.html#aeaa5c07a8b46f8fbb982f996cc1f9f4b',1,'IRrecv']]], - ['decode_5fresults_213',['decode_results',['../classdecode__results.html',1,'']]], - ['decode_5ftype_214',['decode_type',['../classdecode__results.html#a9c0e9f161b9c90dc10b7561d4c0b50fa',1,'decode_results']]], - ['decode_5ftype_5ft_215',['decode_type_t',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fad',1,'IRremoteESP8266.h']]], - ['decodeairwell_216',['decodeAirwell',['../classIRrecv.html#acf4635d5ee146a82498cb0c269b6af41',1,'IRrecv']]], - ['decodeaiwarct501_217',['decodeAiwaRCT501',['../classIRrecv.html#aa4d678376a4c0f8ea953474a6f5ef9d2',1,'IRrecv']]], - ['decodeamcor_218',['decodeAmcor',['../classIRrecv.html#a8d81fcfb47e36925975d313027689a44',1,'IRrecv']]], - ['decodeargo_219',['decodeArgo',['../classIRrecv.html#a94f12dc000a6e7b75ea8680fd48fc487',1,'IRrecv']]], - ['decodecarrierac_220',['decodeCarrierAC',['../classIRrecv.html#acf3d1c37038120a5c0996d92577ce74a',1,'IRrecv']]], - ['decodecarrierac40_221',['decodeCarrierAC40',['../classIRrecv.html#a4bdb35ec34f49401a6b9becd15b8a3b5',1,'IRrecv']]], - ['decodecarrierac64_222',['decodeCarrierAC64',['../classIRrecv.html#a79d03c31da48a385ab47cc8f342ef9b3',1,'IRrecv']]], - ['decodecoolix_223',['decodeCOOLIX',['../classIRrecv.html#a964af7e72e2133688f0596c718cb98ca',1,'IRrecv']]], - ['decodecoronaac_224',['decodeCoronaAc',['../classIRrecv.html#a981cba14551c93af57f9c1c0e1775d12',1,'IRrecv']]], - ['decodedaikin_225',['decodeDaikin',['../classIRrecv.html#a141f0de9f4cae8daeb025aff3904ecaa',1,'IRrecv']]], - ['decodedaikin128_226',['decodeDaikin128',['../classIRrecv.html#ac7188577c874d9f8f19304a3ec775415',1,'IRrecv']]], - ['decodedaikin152_227',['decodeDaikin152',['../classIRrecv.html#ab20a6586b4e56cc428012ec96f5ccc2c',1,'IRrecv']]], - ['decodedaikin160_228',['decodeDaikin160',['../classIRrecv.html#af0b9822defe6b29099079d664d9dc413',1,'IRrecv']]], - ['decodedaikin176_229',['decodeDaikin176',['../classIRrecv.html#aa142d1340201b6fdc5b462f46fe21ee0',1,'IRrecv']]], - ['decodedaikin2_230',['decodeDaikin2',['../classIRrecv.html#a4c4799a0d45ea5562159c46939617d80',1,'IRrecv']]], - ['decodedaikin216_231',['decodeDaikin216',['../classIRrecv.html#a7f860686a5c58aa8f4d1842cfb15b2f9',1,'IRrecv']]], - ['decodedaikin64_232',['decodeDaikin64',['../classIRrecv.html#a030701f081a9c6eab0c07b75433b524c',1,'IRrecv']]], - ['decodedelonghiac_233',['decodeDelonghiAc',['../classIRrecv.html#a8c91cc83770d243e942387cc16e9ca6f',1,'IRrecv']]], - ['decodedenon_234',['decodeDenon',['../classIRrecv.html#a0b1bd1c817cb43bc3755126191b7f4a2',1,'IRrecv']]], - ['decodedish_235',['decodeDISH',['../classIRrecv.html#a851776d9178aeb706d9a1abd3f254e31',1,'IRrecv']]], - ['decodedoshisha_236',['decodeDoshisha',['../classIRrecv.html#a675c45e6b32aaeca3de734ccf2f0c819',1,'IRrecv']]], - ['decodeelectraac_237',['decodeElectraAC',['../classIRrecv.html#ad3a7be8afc36451c8e28e27f3c3e9aaa',1,'IRrecv']]], - ['decodeelitescreens_238',['decodeElitescreens',['../classIRrecv.html#ac830ece2c2c200b8c13fcd66828e2846',1,'IRrecv']]], - ['decodeepson_239',['decodeEpson',['../classIRrecv.html#aaadef8415f273ba25f4086fecd681d2e',1,'IRrecv']]], - ['decodefujitsuac_240',['decodeFujitsuAC',['../classIRrecv.html#aa3778bdf994bf9c99ac48ef95434a826',1,'IRrecv']]], - ['decodegicable_241',['decodeGICable',['../classIRrecv.html#afade8dac9b1d023e5e0946e6b2c08aea',1,'IRrecv']]], - ['decodegoodweather_242',['decodeGoodweather',['../classIRrecv.html#a64650ce7dbaf5fc860a6a253d906e9de',1,'IRrecv']]], - ['decodegree_243',['decodeGree',['../classIRrecv.html#a2e756342d7524a13d53d6c656700638c',1,'IRrecv']]], - ['decodehaierac_244',['decodeHaierAC',['../classIRrecv.html#ad97403174f05197a7fa9a4a0107e3111',1,'IRrecv']]], - ['decodehaieracyrw02_245',['decodeHaierACYRW02',['../classIRrecv.html#a281fb9d972fee75db49209c42f649822',1,'IRrecv']]], - ['decodehash_246',['decodeHash',['../classIRrecv.html#a7c15fbfa7936ca474712a1953911fd06',1,'IRrecv']]], - ['decodehitachiac_247',['decodeHitachiAC',['../classIRrecv.html#aa42facfffc0e304005272b6ddd4583c8',1,'IRrecv']]], - ['decodehitachiac1_248',['decodeHitachiAC1',['../classIRrecv.html#a122e0dcbf14c90ec2d77399acce21459',1,'IRrecv']]], - ['decodehitachiac3_249',['decodeHitachiAc3',['../classIRrecv.html#a113bc834eff00f55d5545ce3fa1ab203',1,'IRrecv']]], - ['decodehitachiac424_250',['decodeHitachiAc424',['../classIRrecv.html#a01c3dda56d6d916076fa1affa2213129',1,'IRrecv']]], - ['decodeinax_251',['decodeInax',['../classIRrecv.html#a94545c6a8da027b9cb0e23ecba4c29d8',1,'IRrecv']]], - ['decodejvc_252',['decodeJVC',['../classIRrecv.html#a25ab71efc223a418e9630d8421f44bc9',1,'IRrecv']]], - ['decodekelvinator_253',['decodeKelvinator',['../classIRrecv.html#a0ac82f20b48b2d71ee07eb392578b226',1,'IRrecv']]], - ['decodelasertag_254',['decodeLasertag',['../classIRrecv.html#ae4af614a45ea65cb3304ef5bd7965122',1,'IRrecv']]], - ['decodelegopf_255',['decodeLegoPf',['../classIRrecv.html#aea75ad0ba1d8fec33de16501940f2553',1,'IRrecv']]], - ['decodelg_256',['decodeLG',['../classIRrecv.html#afe70015c36b1477a5de0c193163e13a7',1,'IRrecv']]], - ['decodelutron_257',['decodeLutron',['../classIRrecv.html#a6093c4404a9a9d415c5bfeab5ec53be5',1,'IRrecv']]], - ['decodemagiquest_258',['decodeMagiQuest',['../classIRrecv.html#a6f3bfcc6767484151dee758bcf94fb0b',1,'IRrecv']]], - ['decodemetz_259',['decodeMetz',['../classIRrecv.html#ac39aa52eec10d1c92b6e9713a22252b6',1,'IRrecv']]], - ['decodemidea_260',['decodeMidea',['../classIRrecv.html#a255b15601f7439a09ab5e77ad78816fb',1,'IRrecv']]], - ['decodemidea24_261',['decodeMidea24',['../classIRrecv.html#a62a04019308b29ae2aea4b3a83ba9155',1,'IRrecv']]], - ['decodemirage_262',['decodeMirage',['../classIRrecv.html#aa88813f830a6ff6bfd6e7bde6728a3d5',1,'IRrecv']]], - ['decodemitsubishi_263',['decodeMitsubishi',['../classIRrecv.html#a6efe3be80f0ebef3ff94ed0e56c5c52a',1,'IRrecv']]], - ['decodemitsubishi112_264',['decodeMitsubishi112',['../classIRrecv.html#ae0690ff3cb5a5cdcdb6a514bb7bf0cdd',1,'IRrecv']]], - ['decodemitsubishi136_265',['decodeMitsubishi136',['../classIRrecv.html#a87b3ee57dbdf762a0e305ddd43eec629',1,'IRrecv']]], - ['decodemitsubishi2_266',['decodeMitsubishi2',['../classIRrecv.html#a9514197850491a5b8c30ae9ffc89d895',1,'IRrecv']]], - ['decodemitsubishiac_267',['decodeMitsubishiAC',['../classIRrecv.html#a942c5f41df5cbff32a8b7703673cb621',1,'IRrecv']]], - ['decodemitsubishiheavy_268',['decodeMitsubishiHeavy',['../classIRrecv.html#aef9cedf79793806df4cc5376710781bc',1,'IRrecv']]], - ['decodemultibrackets_269',['decodeMultibrackets',['../classIRrecv.html#af61afacc9865232643164ba824e665ab',1,'IRrecv']]], - ['decodemwm_270',['decodeMWM',['../classIRrecv.html#a27518b5d792cdf3ab333b324f409f328',1,'IRrecv']]], - ['decodenec_271',['decodeNEC',['../classIRrecv.html#a52b844f80df7f64edf9ce9cc189ac5b9',1,'IRrecv']]], - ['decodeneoclima_272',['decodeNeoclima',['../classIRrecv.html#a4729ee949e533448b481ae33bbbf1adf',1,'IRrecv']]], - ['decodenikai_273',['decodeNikai',['../classIRrecv.html#abbcbf5fc07d7e37d7724acc37bb5f592',1,'IRrecv']]], - ['decodepanasonic_274',['decodePanasonic',['../classIRrecv.html#aa8dd5f24d28576c6db03cc463bd0a865',1,'IRrecv']]], - ['decodepanasonicac_275',['decodePanasonicAC',['../classIRrecv.html#a0f78e180ed731e8fb16d1c85aa721c95',1,'IRrecv']]], - ['decodepanasonicac32_276',['decodePanasonicAC32',['../classIRrecv.html#a89ce20e483b1297cae05ab1ae96d24ec',1,'IRrecv']]], - ['decodepioneer_277',['decodePioneer',['../classIRrecv.html#a78a9487cbe8a562392a07a4090b3091e',1,'IRrecv']]], - ['decoderc5_278',['decodeRC5',['../classIRrecv.html#adab9dffbeceee514520fababd0e721bd',1,'IRrecv']]], - ['decoderc6_279',['decodeRC6',['../classIRrecv.html#a67316499ef37db82e3b3ecaac25c5980',1,'IRrecv']]], - ['decodercmm_280',['decodeRCMM',['../classIRrecv.html#a0e7bf769cb5bebf174e852e4b0b08cf3',1,'IRrecv']]], - ['decodesamsung_281',['decodeSAMSUNG',['../classIRrecv.html#a18b6cf177364faf11b9a076dd2025eec',1,'IRrecv']]], - ['decodesamsung36_282',['decodeSamsung36',['../classIRrecv.html#a290a9e6a0b12ef1fe02a92a456c8ad57',1,'IRrecv']]], - ['decodesamsungac_283',['decodeSamsungAC',['../classIRrecv.html#ae779c76ebd0f3cd1fc13abaa55f80d67',1,'IRrecv']]], - ['decodesanyoac_284',['decodeSanyoAc',['../classIRrecv.html#ab6c02d8b8079d7f344e141e6a4e7e225',1,'IRrecv']]], - ['decodesanyolc7461_285',['decodeSanyoLC7461',['../classIRrecv.html#a01a165bf2e7d16dbbb916d1eae740bc5',1,'IRrecv']]], - ['decodesharp_286',['decodeSharp',['../classIRrecv.html#a3390d63ba21a835d7c74c261532a22a7',1,'IRrecv']]], - ['decodesharpac_287',['decodeSharpAc',['../classIRrecv.html#a8a9b920079f783e236f8a938e20b9743',1,'IRrecv']]], - ['decodesony_288',['decodeSony',['../classIRrecv.html#ab03227955cf7d1d00c1620c55d7f9f18',1,'IRrecv']]], - ['decodesymphony_289',['decodeSymphony',['../classIRrecv.html#a61cdf4d891654521afbc6ca9fb415745',1,'IRrecv']]], - ['decodetechnibelac_290',['decodeTechnibelAc',['../classIRrecv.html#a2f022741309ad814bf11aec440a838d0',1,'IRrecv']]], - ['decodeteco_291',['decodeTeco',['../classIRrecv.html#a950711d7df8dfe4cda86f53650cd9f56',1,'IRrecv']]], - ['decodetoshibaac_292',['decodeToshibaAC',['../classIRrecv.html#aae6ab687ae319ae50a52238916bcfb1a',1,'IRrecv']]], - ['decodetostate_293',['decodeToState',['../namespaceIRAcUtils.html#ac5eb498bf12cb6cba023c9c1e9726949',1,'IRAcUtils']]], - ['decodetranscold_294',['decodeTranscold',['../classIRrecv.html#a16c44538d7e01d9b118d983de39d18e3',1,'IRrecv']]], - ['decodetrotec_295',['decodeTrotec',['../classIRrecv.html#ae2920c488173f3fa37f5325438157ced',1,'IRrecv']]], - ['decodevestelac_296',['decodeVestelAc',['../classIRrecv.html#a5d48b3c91434c18c7726cca504d75b73',1,'IRrecv']]], - ['decodevoltas_297',['decodeVoltas',['../classIRrecv.html#a43539320036ba1c17e9875e4dc9fd055',1,'IRrecv']]], - ['decodewhirlpoolac_298',['decodeWhirlpoolAC',['../classIRrecv.html#a0d1eec83cf092f5621cb34b3e94777c4',1,'IRrecv']]], - ['decodewhynter_299',['decodeWhynter',['../classIRrecv.html#a66289f6a462557ad26e6c0a64f36cf02',1,'IRrecv']]], - ['decodezepeal_300',['decodeZepeal',['../classIRrecv.html#a72afd857c8b2e0192021a40afc96c2d8',1,'IRrecv']]], - ['defaultbits_301',['defaultBits',['../classIRsend.html#a70a2256bee8ad9b8ea8571dd4f26596f',1,'IRsend']]], - ['defaults_2eh_302',['defaults.h',['../defaults_8h.html',1,'']]], - ['degrees_303',['degrees',['../structstdAc_1_1state__t.html#a3d1ff0ff2e0035db4ee8ead5c53b2dbd',1,'stdAc::state_t']]], - ['delonghi_5fac_304',['DELONGHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada149190c9dec98e9c3f4a2bd530b154a3',1,'IRremoteESP8266.h']]], - ['delonghiac_305',['delonghiac',['../classIRac.html#af290b0b08cff5121bb88c62051ed1074',1,'IRac']]], - ['delonghiprotocol_306',['DelonghiProtocol',['../unionDelonghiProtocol.html',1,'']]], - ['denon_307',['DENON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada2bda37b76abb290d1675c3e027e3c2e1',1,'IRremoteESP8266.h']]], - ['deprecated_20list_308',['Deprecated List',['../deprecated.html',1,'']]], - ['dg11j13a_309',['DG11J13A',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2a868d69f0605cf9151b0163a3481e2fb9',1,'IRsend.h']]], - ['dg11j191_310',['DG11J191',['../IRsend_8h.html#ab4e3ebf2fdf3c6a46da89a3e6ebcd2e2adaecfc16f36975f231db2507a8a36c0c',1,'IRsend.h']]], - ['disableirin_311',['disableIRIn',['../classIRrecv.html#a9f4a719e756ad78c7dd47186f8bef087',1,'IRrecv']]], - ['disableofftimer_312',['disableOffTimer',['../classIRDaikinESP.html#a1e4e05ad0799002d0ab25db92dcaac06',1,'IRDaikinESP::disableOffTimer()'],['../classIRDaikin2.html#a8cbdbc0de31b14f974cd8cd87f3ca54a',1,'IRDaikin2::disableOffTimer()']]], - ['disableontimer_313',['disableOnTimer',['../classIRDaikinESP.html#a0733e4a15d76baac23493926ef1765b1',1,'IRDaikinESP::disableOnTimer()'],['../classIRDaikin2.html#a170a1e9ddb7873dc1392184a85387cc3',1,'IRDaikin2::disableOnTimer()']]], - ['disablesensor_314',['disableSensor',['../unionMideaProtocol.html#a20cc2079eae404c980cc75101b4a3116',1,'MideaProtocol']]], - ['disablesleeptimer_315',['disableSleepTimer',['../classIRDaikin2.html#a152532ef9d905e26930ae145a9623877',1,'IRDaikin2']]], - ['dish_316',['DISH',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac27c6ac38ba872593af8e46ac2fdc85a',1,'IRremoteESP8266.h']]], - ['display_317',['Display',['../unionSamsungProtocol.html#aac97ebabee022e772aa00d4357079eb4',1,'SamsungProtocol']]], - ['displaytemp_318',['DisplayTemp',['../unionGreeProtocol.html#ad0756a64f9c90c9dd12ca6cd71c78bb2',1,'GreeProtocol']]], - ['doshisha_319',['DOSHISHA',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab4566b260773b60c85450f40fa5b4341',1,'IRremoteESP8266.h']]], - ['doxygen_5findex_2emd_320',['doxygen_index.md',['../doxygen__index_8md.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_5.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_5.js deleted file mode 100644 index 269dcf306..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_5.js +++ /dev/null @@ -1,39 +0,0 @@ -var searchData= -[ - ['econo_321',['Econo',['../unionCoronaProtocol.html#a1076afecc4292c370fed27ce380a1ed5',1,'CoronaProtocol::Econo()'],['../unionDaikinESPProtocol.html#a29138c4ff722520ca23863568a96bf53',1,'DaikinESPProtocol::Econo()'],['../unionDaikin2Protocol.html#aa715d01b8972f98a41829ed976932ef7',1,'Daikin2Protocol::Econo()'],['../unionDaikin128Protocol.html#a8920f30a9d4bb0132762d80c8297d5f2',1,'Daikin128Protocol::Econo()'],['../unionDaikin152Protocol.html#ad9c7903f82a89b94e0c9dfe8b7298658',1,'Daikin152Protocol::Econo()'],['../unionNeoclimaProtocol.html#ae6e84df0fe5279729c8980c68db35c50',1,'NeoclimaProtocol::Econo()'],['../unionVoltasProtocol.html#a4f44e3e3a68988d25173b2aab1c32e53',1,'VoltasProtocol::Econo()'],['../structstdAc_1_1state__t.html#a580c826c6d9671715adfe8445531b957',1,'stdAc::state_t::econo()']]], - ['elapsed_322',['elapsed',['../classIRtimer.html#ad655e585f053580d49d8de7d52cd62a1',1,'IRtimer::elapsed()'],['../classTimerMs.html#ad4aa759c58727393f69863b3461dfc09',1,'TimerMs::elapsed()']]], - ['electra_323',['electra',['../classIRac.html#abb847bd5e09feb293432b8a8cf0dd9de',1,'IRac']]], - ['electra_5fac_324',['ELECTRA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada05f193ef4ead3e54624bd92dc3203fac',1,'IRremoteESP8266.h']]], - ['electraprotocol_325',['ElectraProtocol',['../unionElectraProtocol.html',1,'']]], - ['elitescreens_326',['ELITESCREENS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafebe19d5453be4c99de8c031508b7cb1',1,'IRremoteESP8266.h']]], - ['en_2dau_2eh_327',['en-AU.h',['../en-AU_8h.html',1,'']]], - ['en_2die_2eh_328',['en-IE.h',['../en-IE_8h.html',1,'']]], - ['en_2duk_2eh_329',['en-UK.h',['../en-UK_8h.html',1,'']]], - ['en_2dus_2eh_330',['en-US.h',['../en-US_8h.html',1,'']]], - ['enableirin_331',['enableIRIn',['../classIRrecv.html#a52c05ec6d8f3dbfb75f21f3b4fe7be3d',1,'IRrecv']]], - ['enableirout_332',['enableIROut',['../classIRsend.html#ab3b6d36c9b5d26c400526717d433ed2d',1,'IRsend']]], - ['enableofftimer_333',['enableOffTimer',['../classIRDaikinESP.html#a8a5686066bfc86f1d7cc454e793d3357',1,'IRDaikinESP::enableOffTimer()'],['../classIRDaikin2.html#afc7ba7d7de2976e010a72778091d633a',1,'IRDaikin2::enableOffTimer()'],['../classIRWhirlpoolAc.html#abb1c3685d90d81b44e72050cd0e042f6',1,'IRWhirlpoolAc::enableOffTimer()']]], - ['enableontimer_334',['enableOnTimer',['../classIRDaikinESP.html#aac4d0f5f60c9f4c41d3bb1e0f24bc4bc',1,'IRDaikinESP::enableOnTimer()'],['../classIRDaikin2.html#a91ec5f7c67cb87102a5eb030e0763b50',1,'IRDaikin2::enableOnTimer()'],['../classIRWhirlpoolAc.html#aa3edd58882cf4fc65172e490c9e0bb2e',1,'IRWhirlpoolAc::enableOnTimer()']]], - ['enablesleeptimer_335',['enableSleepTimer',['../classIRDaikin2.html#a9c86782a98a54818ae92419eec5a060b',1,'IRDaikin2']]], - ['enabletimer_336',['enableTimer',['../classIRWhirlpoolAc.html#ad07804318721bc5dd60f7322e02c9696',1,'IRWhirlpoolAc']]], - ['encodedoshisha_337',['encodeDoshisha',['../classIRsend.html#a0522a2256e8358df715065530be6317d',1,'IRsend']]], - ['encodejvc_338',['encodeJVC',['../classIRsend.html#a6303b991c0545443e7ccf63ba89dbf18',1,'IRsend']]], - ['encodelg_339',['encodeLG',['../classIRsend.html#a109b67a68e7a33900cb5c5017ed4578b',1,'IRsend']]], - ['encodemagiquest_340',['encodeMagiQuest',['../classIRsend.html#a4ee40126279dbde8bb02888115577563',1,'IRsend']]], - ['encodemetz_341',['encodeMetz',['../classIRsend.html#a99c88ec9f8426003738a9a1682595b9a',1,'IRsend']]], - ['encodenec_342',['encodeNEC',['../classIRsend.html#ab2e1ce918e4e06b955c3d2a089ce189c',1,'IRsend']]], - ['encodepanasonic_343',['encodePanasonic',['../classIRsend.html#a8340497ae75f00c844e53dfc73700d9c',1,'IRsend']]], - ['encodepioneer_344',['encodePioneer',['../classIRsend.html#ae0686829eba31587b71034a1c0495971',1,'IRsend']]], - ['encoderc5_345',['encodeRC5',['../classIRsend.html#a88457fd4cc01d6e8097e04c022ede74a',1,'IRsend']]], - ['encoderc5x_346',['encodeRC5X',['../classIRsend.html#ae760ef1be11f25f7a61237f96a8871d9',1,'IRsend']]], - ['encoderc6_347',['encodeRC6',['../classIRsend.html#ac0e341462426ea146b944502a6d3fde0',1,'IRsend']]], - ['encodesamsung_348',['encodeSAMSUNG',['../classIRsend.html#a4ab0579bd854306b2667de19207e4ffb',1,'IRsend']]], - ['encodesanyolc7461_349',['encodeSanyoLC7461',['../classIRsend.html#a864bef0dc48f6af4b59057362906cf5d',1,'IRsend']]], - ['encodesharp_350',['encodeSharp',['../classIRsend.html#a8f4c7a36380ba31155eba5ff8f5f631e',1,'IRsend']]], - ['encodesony_351',['encodeSony',['../classIRsend.html#aa0aea2cb04f0a7ee9056f15fecfc08c3',1,'IRsend']]], - ['encodetime_352',['encodeTime',['../classIRPanasonicAc.html#a0eee4ad6105d35ee6c34c4666174b04b',1,'IRPanasonicAc']]], - ['epson_353',['EPSON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaaf677fd380c38297264a10732631927c',1,'IRremoteESP8266.h']]], - ['es_2des_2eh_354',['es-ES.h',['../es-ES_8h.html',1,'']]], - ['eye_355',['Eye',['../unionDaikin2Protocol.html#aa8351138b8db3b8be5f40d1515802381',1,'Daikin2Protocol::Eye()'],['../unionNeoclimaProtocol.html#a61b0055d4d939dc85ee204e4f3b6ab46',1,'NeoclimaProtocol::Eye()']]], - ['eyeauto_356',['EyeAuto',['../unionDaikin2Protocol.html#a22f2288452065069018bef94d2505ab7',1,'Daikin2Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_8.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_8.js deleted file mode 100644 index 311a9d250..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_8.js +++ /dev/null @@ -1,36 +0,0 @@ -var searchData= -[ - ['haier_502',['haier',['../classIRac.html#ae0a29a4cb8c7a4707a7725c576822a58',1,'IRac']]], - ['haier_5fac_503',['HAIER_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1f232bcdf330ec2e353196941b9f1628',1,'IRremoteESP8266.h']]], - ['haier_5fac_5fyrw02_504',['HAIER_AC_YRW02',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaacda5821835865551f6df46c76282fa4',1,'IRremoteESP8266.h']]], - ['haierprotocol_505',['HaierProtocol',['../unionHaierProtocol.html',1,'']]], - ['haieryrw02protocol_506',['HaierYRW02Protocol',['../unionHaierYRW02Protocol.html',1,'']]], - ['haieryrwo2_507',['haierYrwo2',['../classIRac.html#a7bc779a162dd9a1b4c925febec443353',1,'IRac']]], - ['handlespecialstate_508',['handleSpecialState',['../classIRCoolixAC.html#af78090c6d8b45b4202a80f1223640390',1,'IRCoolixAC::handleSpecialState()'],['../classIRTranscoldAc.html#a01a3e3f8f92b8fb3b6d023e595f3ce17',1,'IRTranscoldAc::handleSpecialState()']]], - ['handletoggles_509',['handleToggles',['../classIRac.html#a36833999dce4ad608a5a0f084988cfd1',1,'IRac']]], - ['hasacstate_510',['hasACState',['../IRutils_8cpp.html#a6efd4986db60709d3501606ec7ab5382',1,'hasACState(const decode_type_t protocol): IRutils.cpp'],['../IRutils_8h.html#a6efd4986db60709d3501606ec7ab5382',1,'hasACState(const decode_type_t protocol): IRutils.cpp']]], - ['hasinvertedstates_511',['hasInvertedStates',['../classIRHitachiAc3.html#ac06b36245c85480d97c1a9f49cfaa005',1,'IRHitachiAc3']]], - ['hasstatechanged_512',['hasStateChanged',['../classIRac.html#a35258c35a2d2b19886292b22b2aa053a',1,'IRac']]], - ['header_513',['Header',['../unionMideaProtocol.html#a892508b7b4cade91dd2e315b678f5f1b',1,'MideaProtocol']]], - ['header0_514',['Header0',['../structCoronaSection.html#a3b3c0a1a42da65bb4b481e59b42f26a6',1,'CoronaSection']]], - ['header1_515',['Header1',['../structCoronaSection.html#a3d6d6c1e31f82a76cd88f81bcdb83a3a',1,'CoronaSection']]], - ['health_516',['Health',['../unionHaierProtocol.html#a4cf70c633e33066e3fc0f98bb2ad3820',1,'HaierProtocol::Health()'],['../unionHaierYRW02Protocol.html#a7fa39803fd72a788736bb8f00acfa76f',1,'HaierYRW02Protocol::Health()']]], - ['heat_5fmode_517',['heat_mode',['../classIRArgoAC.html#a255762f71502b9ffeb0686759991ec53',1,'IRArgoAC']]], - ['hitachi_518',['hitachi',['../classIRac.html#acd0f2fcf03aabf947a19a195000add3c',1,'IRac']]], - ['hitachi1_519',['hitachi1',['../classIRac.html#ac8807d62f6ae87af72d44b50bed3f17b',1,'IRac']]], - ['hitachi1protocol_520',['Hitachi1Protocol',['../unionHitachi1Protocol.html',1,'']]], - ['hitachi344_521',['hitachi344',['../classIRac.html#a0bc34635a1a349816344916a82585460',1,'IRac']]], - ['hitachi424_522',['hitachi424',['../classIRac.html#aec6de0752ddd3a3e7c6824cb1b692508',1,'IRac']]], - ['hitachi424protocol_523',['Hitachi424Protocol',['../unionHitachi424Protocol.html',1,'']]], - ['hitachi_5fac_524',['HITACHI_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9020fb54ac69d8aec0185f7e80c962ca',1,'IRremoteESP8266.h']]], - ['hitachi_5fac1_525',['HITACHI_AC1',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada7d9a74161d95e62bece3c0e48900cb35',1,'IRremoteESP8266.h']]], - ['hitachi_5fac1_5fremote_5fmodel_5ft_526',['hitachi_ac1_remote_model_t',['../IRsend_8h.html#acd0c6107b5a6cab2080b18a8de14ea49',1,'IRsend.h']]], - ['hitachi_5fac2_527',['HITACHI_AC2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadab5a44068d519506efa8a3113aa44c9c0',1,'IRremoteESP8266.h']]], - ['hitachi_5fac3_528',['HITACHI_AC3',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadac3487c47b14da6af922f5b27992b30f3',1,'IRremoteESP8266.h']]], - ['hitachi_5fac344_529',['HITACHI_AC344',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada1e147eb39adc40e4181940cc2357f070',1,'IRremoteESP8266.h']]], - ['hitachi_5fac424_530',['HITACHI_AC424',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada85af068f8964d4359512265d8cc27a31',1,'IRremoteESP8266.h']]], - ['hitachiprotocol_531',['HitachiProtocol',['../unionHitachiProtocol.html',1,'']]], - ['hold_532',['Hold',['../unionNeoclimaProtocol.html#aaf3af5b5ab99978fb669e75949bfe136',1,'NeoclimaProtocol']]], - ['htmlescape_533',['htmlEscape',['../namespaceirutils.html#a6e55c6fdcc82e1ef8bd5f73df83609a7',1,'irutils']]], - ['hw_5ftimer_5ft_534',['hw_timer_t',['../IRrecv_8cpp.html#a6d06e662914b9ad7eeaea3cb650292c0',1,'IRrecv.cpp']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_9.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_9.js deleted file mode 100644 index 1fb29748a..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_9.js +++ /dev/null @@ -1,198 +0,0 @@ -var searchData= -[ - ['i18n_2eh_535',['i18n.h',['../i18n_8h.html',1,'']]], - ['ifeel_536',['iFeel',['../unionArgoProtocol.html#a9d51b32b8e2b2ff08339be238a775097',1,'ArgoProtocol::iFeel()'],['../unionGreeProtocol.html#a592364307a4b11064888bda76c403142',1,'GreeProtocol::IFeel()']]], - ['inax_537',['INAX',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafc566aab3afb8face6d8965ca4d0eab7',1,'IRremoteESP8266.h']]], - ['irremoteesp8266_20library_20api_20documentation_538',['IRremoteESP8266 Library API Documentation',['../index.html',1,'']]], - ['initstate_539',['initState',['../classIRac.html#af1c4ae70e61298c0be8d350d67e7c342',1,'IRac::initState(stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)'],['../classIRac.html#a165b7fdb9b3a02b1fb5ff2c2c3747958',1,'IRac::initState(stdAc::state_t *state)']]], - ['invertbits_540',['invertBits',['../IRutils_8cpp.html#a1a85904f25c8ec77fb554d238c59cfdb',1,'invertBits(const uint64_t data, const uint16_t nbits): IRutils.cpp'],['../IRutils_8h.html#a1a85904f25c8ec77fb554d238c59cfdb',1,'invertBits(const uint64_t data, const uint16_t nbits): IRutils.cpp']]], - ['invertbytepairs_541',['invertBytePairs',['../namespaceirutils.html#ad818a474349546c84824451a5468f4fe',1,'irutils']]], - ['ion_542',['Ion',['../unionNeoclimaProtocol.html#aeee2a3f53f997ad7ffdbef2b5b6ee31a',1,'NeoclimaProtocol::Ion()'],['../unionSamsungProtocol.html#a977ae7e0e4cea918e4b4a714b25bb4ca',1,'SamsungProtocol::Ion()'],['../unionSharpProtocol.html#ae744f63f03d1c13fbd5bbcf8f40aea0e',1,'SharpProtocol::Ion()']]], - ['ionfilter_543',['IonFilter',['../unionKelvinatorProtocol.html#ad7c762e410c8cba234614563cdc9d384',1,'KelvinatorProtocol']]], - ['ir_5fairwell_2ecpp_544',['ir_Airwell.cpp',['../ir__Airwell_8cpp.html',1,'']]], - ['ir_5fairwell_2eh_545',['ir_Airwell.h',['../ir__Airwell_8h.html',1,'']]], - ['ir_5faiwa_2ecpp_546',['ir_Aiwa.cpp',['../ir__Aiwa_8cpp.html',1,'']]], - ['ir_5famcor_2ecpp_547',['ir_Amcor.cpp',['../ir__Amcor_8cpp.html',1,'']]], - ['ir_5famcor_2eh_548',['ir_Amcor.h',['../ir__Amcor_8h.html',1,'']]], - ['ir_5fargo_2ecpp_549',['ir_Argo.cpp',['../ir__Argo_8cpp.html',1,'']]], - ['ir_5fargo_2eh_550',['ir_Argo.h',['../ir__Argo_8h.html',1,'']]], - ['ir_5fcarrier_2ecpp_551',['ir_Carrier.cpp',['../ir__Carrier_8cpp.html',1,'']]], - ['ir_5fcarrier_2eh_552',['ir_Carrier.h',['../ir__Carrier_8h.html',1,'']]], - ['ir_5fcoolix_2ecpp_553',['ir_Coolix.cpp',['../ir__Coolix_8cpp.html',1,'']]], - ['ir_5fcoolix_2eh_554',['ir_Coolix.h',['../ir__Coolix_8h.html',1,'']]], - ['ir_5fcorona_2ecpp_555',['ir_Corona.cpp',['../ir__Corona_8cpp.html',1,'']]], - ['ir_5fcorona_2eh_556',['ir_Corona.h',['../ir__Corona_8h.html',1,'']]], - ['ir_5fdaikin_2ecpp_557',['ir_Daikin.cpp',['../ir__Daikin_8cpp.html',1,'']]], - ['ir_5fdaikin_2eh_558',['ir_Daikin.h',['../ir__Daikin_8h.html',1,'']]], - ['ir_5fdelonghi_2ecpp_559',['ir_Delonghi.cpp',['../ir__Delonghi_8cpp.html',1,'']]], - ['ir_5fdelonghi_2eh_560',['ir_Delonghi.h',['../ir__Delonghi_8h.html',1,'']]], - ['ir_5fdenon_2ecpp_561',['ir_Denon.cpp',['../ir__Denon_8cpp.html',1,'']]], - ['ir_5fdish_2ecpp_562',['ir_Dish.cpp',['../ir__Dish_8cpp.html',1,'']]], - ['ir_5fdoshisha_2ecpp_563',['ir_Doshisha.cpp',['../ir__Doshisha_8cpp.html',1,'']]], - ['ir_5felectra_2ecpp_564',['ir_Electra.cpp',['../ir__Electra_8cpp.html',1,'']]], - ['ir_5felectra_2eh_565',['ir_Electra.h',['../ir__Electra_8h.html',1,'']]], - ['ir_5felitescreens_2ecpp_566',['ir_EliteScreens.cpp',['../ir__EliteScreens_8cpp.html',1,'']]], - ['ir_5fepson_2ecpp_567',['ir_Epson.cpp',['../ir__Epson_8cpp.html',1,'']]], - ['ir_5ffujitsu_2ecpp_568',['ir_Fujitsu.cpp',['../ir__Fujitsu_8cpp.html',1,'']]], - ['ir_5ffujitsu_2eh_569',['ir_Fujitsu.h',['../ir__Fujitsu_8h.html',1,'']]], - ['ir_5fgicable_2ecpp_570',['ir_GICable.cpp',['../ir__GICable_8cpp.html',1,'']]], - ['ir_5fglobalcache_2ecpp_571',['ir_GlobalCache.cpp',['../ir__GlobalCache_8cpp.html',1,'']]], - ['ir_5fgoodweather_2ecpp_572',['ir_Goodweather.cpp',['../ir__Goodweather_8cpp.html',1,'']]], - ['ir_5fgoodweather_2eh_573',['ir_Goodweather.h',['../ir__Goodweather_8h.html',1,'']]], - ['ir_5fgree_2ecpp_574',['ir_Gree.cpp',['../ir__Gree_8cpp.html',1,'']]], - ['ir_5fgree_2eh_575',['ir_Gree.h',['../ir__Gree_8h.html',1,'']]], - ['ir_5fhaier_2ecpp_576',['ir_Haier.cpp',['../ir__Haier_8cpp.html',1,'']]], - ['ir_5fhaier_2eh_577',['ir_Haier.h',['../ir__Haier_8h.html',1,'']]], - ['ir_5fhitachi_2ecpp_578',['ir_Hitachi.cpp',['../ir__Hitachi_8cpp.html',1,'']]], - ['ir_5fhitachi_2eh_579',['ir_Hitachi.h',['../ir__Hitachi_8h.html',1,'']]], - ['ir_5finax_2ecpp_580',['ir_Inax.cpp',['../ir__Inax_8cpp.html',1,'']]], - ['ir_5fjvc_2ecpp_581',['ir_JVC.cpp',['../ir__JVC_8cpp.html',1,'']]], - ['ir_5fkelvinator_2ecpp_582',['ir_Kelvinator.cpp',['../ir__Kelvinator_8cpp.html',1,'']]], - ['ir_5fkelvinator_2eh_583',['ir_Kelvinator.h',['../ir__Kelvinator_8h.html',1,'']]], - ['ir_5flasertag_2ecpp_584',['ir_Lasertag.cpp',['../ir__Lasertag_8cpp.html',1,'']]], - ['ir_5flego_2ecpp_585',['ir_Lego.cpp',['../ir__Lego_8cpp.html',1,'']]], - ['ir_5flg_2ecpp_586',['ir_LG.cpp',['../ir__LG_8cpp.html',1,'']]], - ['ir_5flg_2eh_587',['ir_LG.h',['../ir__LG_8h.html',1,'']]], - ['ir_5flutron_2ecpp_588',['ir_Lutron.cpp',['../ir__Lutron_8cpp.html',1,'']]], - ['ir_5fmagiquest_2ecpp_589',['ir_Magiquest.cpp',['../ir__Magiquest_8cpp.html',1,'']]], - ['ir_5fmagiquest_2eh_590',['ir_Magiquest.h',['../ir__Magiquest_8h.html',1,'']]], - ['ir_5fmetz_2ecpp_591',['ir_Metz.cpp',['../ir__Metz_8cpp.html',1,'']]], - ['ir_5fmidea_2ecpp_592',['ir_Midea.cpp',['../ir__Midea_8cpp.html',1,'']]], - ['ir_5fmidea_2eh_593',['ir_Midea.h',['../ir__Midea_8h.html',1,'']]], - ['ir_5fmirage_2ecpp_594',['ir_Mirage.cpp',['../ir__Mirage_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2ecpp_595',['ir_Mitsubishi.cpp',['../ir__Mitsubishi_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2eh_596',['ir_Mitsubishi.h',['../ir__Mitsubishi_8h.html',1,'']]], - ['ir_5fmitsubishiheavy_2ecpp_597',['ir_MitsubishiHeavy.cpp',['../ir__MitsubishiHeavy_8cpp.html',1,'']]], - ['ir_5fmitsubishiheavy_2eh_598',['ir_MitsubishiHeavy.h',['../ir__MitsubishiHeavy_8h.html',1,'']]], - ['ir_5fmultibrackets_2ecpp_599',['ir_Multibrackets.cpp',['../ir__Multibrackets_8cpp.html',1,'']]], - ['ir_5fmwm_2ecpp_600',['ir_MWM.cpp',['../ir__MWM_8cpp.html',1,'']]], - ['ir_5fnec_2ecpp_601',['ir_NEC.cpp',['../ir__NEC_8cpp.html',1,'']]], - ['ir_5fnec_2eh_602',['ir_NEC.h',['../ir__NEC_8h.html',1,'']]], - ['ir_5fneoclima_2ecpp_603',['ir_Neoclima.cpp',['../ir__Neoclima_8cpp.html',1,'']]], - ['ir_5fneoclima_2eh_604',['ir_Neoclima.h',['../ir__Neoclima_8h.html',1,'']]], - ['ir_5fnikai_2ecpp_605',['ir_Nikai.cpp',['../ir__Nikai_8cpp.html',1,'']]], - ['ir_5fpanasonic_2ecpp_606',['ir_Panasonic.cpp',['../ir__Panasonic_8cpp.html',1,'']]], - ['ir_5fpanasonic_2eh_607',['ir_Panasonic.h',['../ir__Panasonic_8h.html',1,'']]], - ['ir_5fpioneer_2ecpp_608',['ir_Pioneer.cpp',['../ir__Pioneer_8cpp.html',1,'']]], - ['ir_5fpronto_2ecpp_609',['ir_Pronto.cpp',['../ir__Pronto_8cpp.html',1,'']]], - ['ir_5frc5_5frc6_2ecpp_610',['ir_RC5_RC6.cpp',['../ir__RC5__RC6_8cpp.html',1,'']]], - ['ir_5frcmm_2ecpp_611',['ir_RCMM.cpp',['../ir__RCMM_8cpp.html',1,'']]], - ['ir_5fsamsung_2ecpp_612',['ir_Samsung.cpp',['../ir__Samsung_8cpp.html',1,'']]], - ['ir_5fsamsung_2eh_613',['ir_Samsung.h',['../ir__Samsung_8h.html',1,'']]], - ['ir_5fsanyo_2ecpp_614',['ir_Sanyo.cpp',['../ir__Sanyo_8cpp.html',1,'']]], - ['ir_5fsanyo_2eh_615',['ir_Sanyo.h',['../ir__Sanyo_8h.html',1,'']]], - ['ir_5fsharp_2ecpp_616',['ir_Sharp.cpp',['../ir__Sharp_8cpp.html',1,'']]], - ['ir_5fsharp_2eh_617',['ir_Sharp.h',['../ir__Sharp_8h.html',1,'']]], - ['ir_5fsherwood_2ecpp_618',['ir_Sherwood.cpp',['../ir__Sherwood_8cpp.html',1,'']]], - ['ir_5fsony_2ecpp_619',['ir_Sony.cpp',['../ir__Sony_8cpp.html',1,'']]], - ['ir_5fsymphony_2ecpp_620',['ir_Symphony.cpp',['../ir__Symphony_8cpp.html',1,'']]], - ['ir_5ftcl_2ecpp_621',['ir_Tcl.cpp',['../ir__Tcl_8cpp.html',1,'']]], - ['ir_5ftcl_2eh_622',['ir_Tcl.h',['../ir__Tcl_8h.html',1,'']]], - ['ir_5ftechnibel_2ecpp_623',['ir_Technibel.cpp',['../ir__Technibel_8cpp.html',1,'']]], - ['ir_5ftechnibel_2eh_624',['ir_Technibel.h',['../ir__Technibel_8h.html',1,'']]], - ['ir_5fteco_2ecpp_625',['ir_Teco.cpp',['../ir__Teco_8cpp.html',1,'']]], - ['ir_5fteco_2eh_626',['ir_Teco.h',['../ir__Teco_8h.html',1,'']]], - ['ir_5ftoshiba_2ecpp_627',['ir_Toshiba.cpp',['../ir__Toshiba_8cpp.html',1,'']]], - ['ir_5ftoshiba_2eh_628',['ir_Toshiba.h',['../ir__Toshiba_8h.html',1,'']]], - ['ir_5ftranscold_2ecpp_629',['ir_Transcold.cpp',['../ir__Transcold_8cpp.html',1,'']]], - ['ir_5ftranscold_2eh_630',['ir_Transcold.h',['../ir__Transcold_8h.html',1,'']]], - ['ir_5ftrotec_2ecpp_631',['ir_Trotec.cpp',['../ir__Trotec_8cpp.html',1,'']]], - ['ir_5ftrotec_2eh_632',['ir_Trotec.h',['../ir__Trotec_8h.html',1,'']]], - ['ir_5fvestel_2ecpp_633',['ir_Vestel.cpp',['../ir__Vestel_8cpp.html',1,'']]], - ['ir_5fvestel_2eh_634',['ir_Vestel.h',['../ir__Vestel_8h.html',1,'']]], - ['ir_5fvoltas_2ecpp_635',['ir_Voltas.cpp',['../ir__Voltas_8cpp.html',1,'']]], - ['ir_5fvoltas_2eh_636',['ir_Voltas.h',['../ir__Voltas_8h.html',1,'']]], - ['ir_5fwhirlpool_2ecpp_637',['ir_Whirlpool.cpp',['../ir__Whirlpool_8cpp.html',1,'']]], - ['ir_5fwhirlpool_2eh_638',['ir_Whirlpool.h',['../ir__Whirlpool_8h.html',1,'']]], - ['ir_5fwhynter_2ecpp_639',['ir_Whynter.cpp',['../ir__Whynter_8cpp.html',1,'']]], - ['ir_5fzepeal_2ecpp_640',['ir_Zepeal.cpp',['../ir__Zepeal_8cpp.html',1,'']]], - ['irac_641',['IRac',['../classIRac.html',1,'IRac'],['../classIRac.html#abb0864e277d4f6c68a92c2729112a40d',1,'IRac::IRac()']]], - ['irac_2ecpp_642',['IRac.cpp',['../IRac_8cpp.html',1,'']]], - ['irac_2eh_643',['IRac.h',['../IRac_8h.html',1,'']]], - ['iracutils_644',['IRAcUtils',['../namespaceIRAcUtils.html',1,'']]], - ['irairwellac_645',['IRAirwellAc',['../classIRAirwellAc.html',1,'IRAirwellAc'],['../classIRAirwellAc.html#a38cfe20bff4522034b16d64df64750e8',1,'IRAirwellAc::IRAirwellAc()']]], - ['iramcorac_646',['IRAmcorAc',['../classIRAmcorAc.html',1,'IRAmcorAc'],['../classIRAmcorAc.html#a92db59a33c861dcd3b2960e9711f97c4',1,'IRAmcorAc::IRAmcorAc()']]], - ['irargoac_647',['IRArgoAC',['../classIRArgoAC.html',1,'IRArgoAC'],['../classIRArgoAC.html#ad6c2250738397441b8f956d1477b7d70',1,'IRArgoAC::IRArgoAC()']]], - ['ircarrierac64_648',['IRCarrierAc64',['../classIRCarrierAc64.html',1,'IRCarrierAc64'],['../classIRCarrierAc64.html#ac225c0f24a0e385a145375ff447ab79b',1,'IRCarrierAc64::IRCarrierAc64()']]], - ['ircoolixac_649',['IRCoolixAC',['../classIRCoolixAC.html',1,'IRCoolixAC'],['../classIRCoolixAC.html#a043ad3b74e964e39b111e1fcf9e55f42',1,'IRCoolixAC::IRCoolixAC()']]], - ['ircoronaac_650',['IRCoronaAc',['../classIRCoronaAc.html',1,'IRCoronaAc'],['../classIRCoronaAc.html#aa96f1ffce21cdec5b3901ebbb1c63fbb',1,'IRCoronaAc::IRCoronaAc()']]], - ['irdaikin128_651',['IRDaikin128',['../classIRDaikin128.html',1,'IRDaikin128'],['../classIRDaikin128.html#aa669739541daf1a2b39ce1cd0424c43b',1,'IRDaikin128::IRDaikin128()']]], - ['irdaikin152_652',['IRDaikin152',['../classIRDaikin152.html',1,'IRDaikin152'],['../classIRDaikin152.html#a68dce79bab5890d9aea325a45ef8e4a3',1,'IRDaikin152::IRDaikin152()']]], - ['irdaikin160_653',['IRDaikin160',['../classIRDaikin160.html',1,'IRDaikin160'],['../classIRDaikin160.html#a76fb744b041c38abb730bce0538a497a',1,'IRDaikin160::IRDaikin160()']]], - ['irdaikin176_654',['IRDaikin176',['../classIRDaikin176.html',1,'IRDaikin176'],['../classIRDaikin176.html#accfe7c3f34351844d12059455f65f312',1,'IRDaikin176::IRDaikin176()']]], - ['irdaikin2_655',['IRDaikin2',['../classIRDaikin2.html',1,'IRDaikin2'],['../classIRDaikin2.html#a3ffe908313f162b92e92307578592fca',1,'IRDaikin2::IRDaikin2()']]], - ['irdaikin216_656',['IRDaikin216',['../classIRDaikin216.html',1,'IRDaikin216'],['../classIRDaikin216.html#ad802bde79e5ee2d16e3b09fbc8bbe8df',1,'IRDaikin216::IRDaikin216()']]], - ['irdaikin64_657',['IRDaikin64',['../classIRDaikin64.html',1,'IRDaikin64'],['../classIRDaikin64.html#a88855df33ce903884b21d2ef4771e94f',1,'IRDaikin64::IRDaikin64()']]], - ['irdaikinesp_658',['IRDaikinESP',['../classIRDaikinESP.html',1,'IRDaikinESP'],['../classIRDaikinESP.html#a2652cb45e07e8a4329c16cded9f6ad9a',1,'IRDaikinESP::IRDaikinESP()']]], - ['irdelonghiac_659',['IRDelonghiAc',['../classIRDelonghiAc.html',1,'IRDelonghiAc'],['../classIRDelonghiAc.html#aa6f8661cf6baa369a0a5b9d775c392e0',1,'IRDelonghiAc::IRDelonghiAc()']]], - ['irelectraac_660',['IRElectraAc',['../classIRElectraAc.html',1,'IRElectraAc'],['../classIRElectraAc.html#a2f56ad22943c3d261b1d2ef88d86e300',1,'IRElectraAc::IRElectraAc()']]], - ['irfujitsuac_661',['IRFujitsuAC',['../classIRFujitsuAC.html',1,'IRFujitsuAC'],['../classIRFujitsuAC.html#acdb70f239884507f540b872ba25747ce',1,'IRFujitsuAC::IRFujitsuAC()']]], - ['irgoodweatherac_662',['IRGoodweatherAc',['../classIRGoodweatherAc.html',1,'IRGoodweatherAc'],['../classIRGoodweatherAc.html#a681feff1a58125cde97b2d7ed0ba775e',1,'IRGoodweatherAc::IRGoodweatherAc()']]], - ['irgreeac_663',['IRGreeAC',['../classIRGreeAC.html',1,'IRGreeAC'],['../classIRGreeAC.html#abf7ead6ebee4bc776f83fb55f6fe6b63',1,'IRGreeAC::IRGreeAC()']]], - ['irhaierac_664',['IRHaierAC',['../classIRHaierAC.html',1,'IRHaierAC'],['../classIRHaierAC.html#a0b78060cbd150cd886a409adc2dea49c',1,'IRHaierAC::IRHaierAC()']]], - ['irhaieracyrw02_665',['IRHaierACYRW02',['../classIRHaierACYRW02.html',1,'IRHaierACYRW02'],['../classIRHaierACYRW02.html#afd9354c36df33434840bbc5f38d4e7ed',1,'IRHaierACYRW02::IRHaierACYRW02()']]], - ['irhitachiac_666',['IRHitachiAc',['../classIRHitachiAc.html',1,'IRHitachiAc'],['../classIRHitachiAc.html#a4c43e95e0cc28339e7162d7090ae16bf',1,'IRHitachiAc::IRHitachiAc()']]], - ['irhitachiac1_667',['IRHitachiAc1',['../classIRHitachiAc1.html',1,'IRHitachiAc1'],['../classIRHitachiAc1.html#ac00cfd9a60e08d34f292878de47f622f',1,'IRHitachiAc1::IRHitachiAc1()']]], - ['irhitachiac3_668',['IRHitachiAc3',['../classIRHitachiAc3.html',1,'IRHitachiAc3'],['../classIRHitachiAc3.html#adef0e7ad217f078ce418e3aa82b9cb86',1,'IRHitachiAc3::IRHitachiAc3()']]], - ['irhitachiac344_669',['IRHitachiAc344',['../classIRHitachiAc344.html',1,'IRHitachiAc344'],['../classIRHitachiAc424.html#a3c885313a79bf8c02bc5eb9f7d80088b',1,'IRHitachiAc424::IRHitachiAc344()'],['../classIRHitachiAc344.html#afbff8a1dd2777880d2d1713d07e1d419',1,'IRHitachiAc344::IRHitachiAc344()']]], - ['irhitachiac424_670',['IRHitachiAc424',['../classIRHitachiAc424.html',1,'IRHitachiAc424'],['../classIRHitachiAc424.html#add708c10a56d20621ef65a0ddcc2aac1',1,'IRHitachiAc424::IRHitachiAc424()']]], - ['irkelvinatorac_671',['IRKelvinatorAC',['../classIRKelvinatorAC.html',1,'IRKelvinatorAC'],['../classIRKelvinatorAC.html#a111dd384b1898a4fb880a19b6d1b1635',1,'IRKelvinatorAC::IRKelvinatorAC()']]], - ['irlgac_672',['IRLgAc',['../classIRLgAc.html',1,'IRLgAc'],['../classIRLgAc.html#a290636496526a9ed2057532649709375',1,'IRLgAc::IRLgAc()']]], - ['irmideaac_673',['IRMideaAC',['../classIRMideaAC.html',1,'IRMideaAC'],['../classIRMideaAC.html#a1ef2f532a1e6c6bfe89617d3fd0d9082',1,'IRMideaAC::IRMideaAC()']]], - ['irmitsubishi112_674',['IRMitsubishi112',['../classIRMitsubishi112.html',1,'IRMitsubishi112'],['../classIRMitsubishi112.html#adea6f3b7b7619b0bf6da4a94cec9d712',1,'IRMitsubishi112::IRMitsubishi112()']]], - ['irmitsubishi136_675',['IRMitsubishi136',['../classIRMitsubishi136.html',1,'IRMitsubishi136'],['../classIRMitsubishi136.html#ad92926b993869d0695f11ddb999b2090',1,'IRMitsubishi136::IRMitsubishi136()']]], - ['irmitsubishiac_676',['IRMitsubishiAC',['../classIRMitsubishiAC.html',1,'IRMitsubishiAC'],['../classIRMitsubishiAC.html#a83fabfd9ebed5cef8dd2a18a85fdf4e6',1,'IRMitsubishiAC::IRMitsubishiAC()']]], - ['irmitsubishiheavy152ac_677',['IRMitsubishiHeavy152Ac',['../classIRMitsubishiHeavy152Ac.html',1,'IRMitsubishiHeavy152Ac'],['../classIRMitsubishiHeavy152Ac.html#a704e9f96c2d0a07f9ba16a400d9c97aa',1,'IRMitsubishiHeavy152Ac::IRMitsubishiHeavy152Ac()']]], - ['irmitsubishiheavy88ac_678',['IRMitsubishiHeavy88Ac',['../classIRMitsubishiHeavy88Ac.html',1,'IRMitsubishiHeavy88Ac'],['../classIRMitsubishiHeavy88Ac.html#aceabecf4a615e807a4636ff5990d77d7',1,'IRMitsubishiHeavy88Ac::IRMitsubishiHeavy88Ac()']]], - ['irneoclimaac_679',['IRNeoclimaAc',['../classIRNeoclimaAc.html',1,'IRNeoclimaAc'],['../classIRNeoclimaAc.html#a99ed2962176e5f12f8387fab977c6395',1,'IRNeoclimaAc::IRNeoclimaAc()']]], - ['irpanasonicac_680',['IRPanasonicAc',['../classIRPanasonicAc.html',1,'IRPanasonicAc'],['../classIRPanasonicAc.html#ae8b0f4518ee1a913d47a7101b0a11185',1,'IRPanasonicAc::IRPanasonicAc()']]], - ['irpanasonicac32_681',['IRPanasonicAc32',['../classIRPanasonicAc32.html',1,'IRPanasonicAc32'],['../classIRPanasonicAc32.html#ade8637984d8c1d5d881dc636d501676d',1,'IRPanasonicAc32::IRPanasonicAc32()']]], - ['irparams_5fsave_682',['irparams_save',['../classIRrecv.html#a6fdac84ce51ce119972bf121ccc95aab',1,'IRrecv']]], - ['irparams_5ft_683',['irparams_t',['../structirparams__t.html',1,'']]], - ['irpin_684',['IRpin',['../classIRsend.html#ae4a6ea1e72f4861167002d6e7bf17b7c',1,'IRsend']]], - ['irrecv_685',['IRrecv',['../classIRrecv.html',1,'IRrecv'],['../classIRrecv.html#a8fe4d26ef1f863db1db9994fed5fc209',1,'IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)'],['../classIRrecv.html#a3bb1bcc1c1a3184294dd35c8f6f758b1',1,'IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false)']]], - ['irrecv_2ecpp_686',['IRrecv.cpp',['../IRrecv_8cpp.html',1,'']]], - ['irrecv_2eh_687',['IRrecv.h',['../IRrecv_8h.html',1,'']]], - ['irremoteesp8266_2eh_688',['IRremoteESP8266.h',['../IRremoteESP8266_8h.html',1,'']]], - ['irsamsungac_689',['IRSamsungAc',['../classIRSamsungAc.html',1,'IRSamsungAc'],['../classIRSamsungAc.html#a0db771b80d7d7a63b5ecb4b25efee609',1,'IRSamsungAc::IRSamsungAc()']]], - ['irsanyoac_690',['IRSanyoAc',['../classIRSanyoAc.html',1,'IRSanyoAc'],['../classIRSanyoAc.html#ab7b9a1f1685993b95807f7e48624e4e2',1,'IRSanyoAc::IRSanyoAc()']]], - ['irsend_691',['IRsend',['../classIRsend.html',1,'IRsend'],['../classIRsend.html#a792780b7de996c90c86dd7b700eaf271',1,'IRsend::IRsend()']]], - ['irsend_2ecpp_692',['IRsend.cpp',['../IRsend_8cpp.html',1,'']]], - ['irsend_2eh_693',['IRsend.h',['../IRsend_8h.html',1,'']]], - ['irsharpac_694',['IRSharpAc',['../classIRSharpAc.html',1,'IRSharpAc'],['../classIRSharpAc.html#a30b5f8f634a41c943b4e1453d12bc980',1,'IRSharpAc::IRSharpAc()']]], - ['irtcl112ac_695',['IRTcl112Ac',['../classIRTcl112Ac.html',1,'IRTcl112Ac'],['../classIRTcl112Ac.html#a061bdfdf4444cb5e06fa90824985c1ec',1,'IRTcl112Ac::IRTcl112Ac()']]], - ['irtechnibelac_696',['IRTechnibelAc',['../classIRTechnibelAc.html',1,'IRTechnibelAc'],['../classIRTechnibelAc.html#a799407de348870d5765acf163ab92a75',1,'IRTechnibelAc::IRTechnibelAc()']]], - ['irtecoac_697',['IRTecoAc',['../classIRTecoAc.html',1,'IRTecoAc'],['../classIRTecoAc.html#a56e3f31a080bfd565570bf3b165e71d4',1,'IRTecoAc::IRTecoAc()']]], - ['irtext_2ecpp_698',['IRtext.cpp',['../IRtext_8cpp.html',1,'']]], - ['irtext_2eh_699',['IRtext.h',['../IRtext_8h.html',1,'']]], - ['irtimer_700',['IRtimer',['../classIRtimer.html',1,'IRtimer'],['../classIRtimer.html#a09d64d689137ef8ca68973bb9e550e76',1,'IRtimer::IRtimer()']]], - ['irtimer_2ecpp_701',['IRtimer.cpp',['../IRtimer_8cpp.html',1,'']]], - ['irtimer_2eh_702',['IRtimer.h',['../IRtimer_8h.html',1,'']]], - ['irtoshibaac_703',['IRToshibaAC',['../classIRToshibaAC.html',1,'IRToshibaAC'],['../classIRToshibaAC.html#abf2b3db316f7d6acb20c4f7ea2476ec2',1,'IRToshibaAC::IRToshibaAC()']]], - ['irtranscoldac_704',['IRTranscoldAc',['../classIRTranscoldAc.html',1,'IRTranscoldAc'],['../classIRTranscoldAc.html#a155278b9e5803aacf69a1ae20ed5b652',1,'IRTranscoldAc::IRTranscoldAc()']]], - ['irtrotecesp_705',['IRTrotecESP',['../classIRTrotecESP.html',1,'IRTrotecESP'],['../classIRTrotecESP.html#a1b56b6e55bf133ccab6a482090408ee5',1,'IRTrotecESP::IRTrotecESP()']]], - ['irutils_706',['irutils',['../namespaceirutils.html',1,'']]], - ['irutils_2ecpp_707',['IRutils.cpp',['../IRutils_8cpp.html',1,'']]], - ['irutils_2eh_708',['IRutils.h',['../IRutils_8h.html',1,'']]], - ['irvestelac_709',['IRVestelAc',['../classIRVestelAc.html',1,'IRVestelAc'],['../classIRVestelAc.html#af1583ef81331edf112a0d04771c2cbec',1,'IRVestelAc::IRVestelAc()']]], - ['irvoltas_710',['IRVoltas',['../classIRVoltas.html',1,'IRVoltas'],['../classIRVoltas.html#a4bfb0c5b16507d330abea2a9147f8332',1,'IRVoltas::IRVoltas()']]], - ['irwhirlpoolac_711',['IRWhirlpoolAc',['../classIRWhirlpoolAc.html',1,'IRWhirlpoolAc'],['../classIRWhirlpoolAc.html#a89bc9d440a5f7d04a602d7bc73904bc2',1,'IRWhirlpoolAc::IRWhirlpoolAc()']]], - ['iseconotoggle_712',['isEconoToggle',['../classIRMideaAC.html#a227aeed678af6da49b510cb67b02991e',1,'IRMideaAC']]], - ['islighttoggle_713',['isLightToggle',['../classIRMideaAC.html#ac0f321a8a38bd2cecf453c6aff9020e6',1,'IRMideaAC']]], - ['isofftimeractive_714',['isOffTimerActive',['../classIRVestelAc.html#aa756171e82ed1b43593b81aa3a63b812',1,'IRVestelAc']]], - ['isofftimerenabled_715',['isOffTimerEnabled',['../classIRMideaAC.html#a10aa3386a15b46c62083baaca3bcf699',1,'IRMideaAC::isOffTimerEnabled()'],['../classIRPanasonicAc.html#ac8e218b4886d66889734b01232767c8a',1,'IRPanasonicAc::isOffTimerEnabled()'],['../classIRWhirlpoolAc.html#a1bc1366524cf3c7fb426e908a166801f',1,'IRWhirlpoolAc::isOffTimerEnabled()']]], - ['isontimeractive_716',['isOnTimerActive',['../classIRVestelAc.html#a67f0e970af50fcf6e01e4cac85c5862a',1,'IRVestelAc']]], - ['isontimerenabled_717',['isOnTimerEnabled',['../classIRMideaAC.html#a61f53e462caa1bc8329a6ebadbe47f93',1,'IRMideaAC::isOnTimerEnabled()'],['../classIRPanasonicAc.html#a04cbf8f5063a3892020d383c77abc57c',1,'IRPanasonicAc::isOnTimerEnabled()'],['../classIRWhirlpoolAc.html#aff1b8c2d063b376725a5a77745f6be3a',1,'IRWhirlpoolAc::isOnTimerEnabled()']]], - ['ispowerspecial_718',['isPowerSpecial',['../classIRSharpAc.html#ae18f76e03fd9ee8cb5bb8e9b41718e9d',1,'IRSharpAc']]], - ['isprotocolsupported_719',['isProtocolSupported',['../classIRac.html#ad9c2fc9d07db70704f78a2d5f7be5b1c',1,'IRac']]], - ['isspecialstate_720',['isSpecialState',['../classIRCoolixAC.html#aa9bfc6c78fca87962c9335d60f625322',1,'IRCoolixAC::isSpecialState()'],['../classIRTranscoldAc.html#aed8c20db75d4070e66445fb2b092e2de',1,'IRTranscoldAc::isSpecialState()']]], - ['isswingvstep_721',['isSwingVStep',['../classIRMideaAC.html#a360aa29e0f6817709644f6b36abce754',1,'IRMideaAC']]], - ['isswingvtoggle_722',['isSwingVToggle',['../classIRMideaAC.html#a5277fa1d077650be0edcf284db50d38b',1,'IRMideaAC']]], - ['istimecommand_723',['isTimeCommand',['../classIRVestelAc.html#ae811a07c1a8d82e7068c39b9ca73aaf1',1,'IRVestelAc']]], - ['istimeractive_724',['isTimerActive',['../classIRVestelAc.html#a160b73df8e1eda984f9bfbff3df7fa63',1,'IRVestelAc']]], - ['istimerenabled_725',['isTimerEnabled',['../classIRWhirlpoolAc.html#a5a713ffed99ab3450257d83e2d6e15ee',1,'IRWhirlpoolAc']]], - ['isturbotoggle_726',['isTurboToggle',['../classIRMideaAC.html#ae40e95fbee35ecc00ebff23c0b64e56d',1,'IRMideaAC']]], - ['isvalidlgac_727',['isValidLgAc',['../classIRLgAc.html#ad35d47f590ee4bd51bfdf9d911bce242',1,'IRLgAc']]], - ['it_2dit_2eh_728',['it-IT.h',['../it-IT_8h.html',1,'']]], - ['internationalisation_20_28i18n_29_20_26_20locale_20files_729',['Internationalisation (I18N) & Locale Files',['../md_src_locale_README.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_c.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_c.js deleted file mode 100644 index c01c4e915..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/all_c.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['label_2995',['Label',['../structCoronaSection.html#abc6d0caa713c73244c4bf2f602074d48',1,'CoronaSection']]], - ['lasertag_2996',['LASERTAG',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada92eadf4fa6dd16da5b79a2fcbf729894',1,'IRremoteESP8266.h']]], - ['ledflag_2997',['ledFlag',['../classIRCoolixAC.html#a03ba5e0a6cb47a7bb054155c2111a69c',1,'IRCoolixAC']]], - ['ledoff_2998',['ledOff',['../classIRsend.html#ae71cc5aa99f894785fb4f7abc05841b2',1,'IRsend']]], - ['ledon_2999',['ledOn',['../classIRsend.html#a13d804171fa7c14aff4def38c6ffb6c8',1,'IRsend']]], - ['legopf_3000',['LEGOPF',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada9a31bf5555b17ea7b115a5c2550fc1de',1,'IRremoteESP8266.h']]], - ['lg_3001',['lg',['../classIRac.html#afad31ecf9eae573882d53dd6629485fb',1,'IRac::lg()'],['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadadf6c249ac7d923229f9e623eff9a61f4',1,'LG(): IRremoteESP8266.h']]], - ['lg2_3002',['LG2',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada8402547ec0b99b9b0efe97dec65badf9',1,'IRremoteESP8266.h']]], - ['lg_5fac_5fremote_5fmodel_5ft_3003',['lg_ac_remote_model_t',['../IRsend_8h.html#a50c54713e16502d280723334879dc83b',1,'IRsend.h']]], - ['lgprotocol_3004',['LGProtocol',['../unionLGProtocol.html',1,'']]], - ['light_3005',['Light',['../unionDaikin2Protocol.html#adaf55ec9e1b9ba278c7391d9d797f3ba',1,'Daikin2Protocol::Light()'],['../unionGoodweatherProtocol.html#a845565af7661af0c05290a7ce039f8e2',1,'GoodweatherProtocol::Light()'],['../unionGreeProtocol.html#a72092768725667d3bce381a6e2900c66',1,'GreeProtocol::Light()'],['../unionKelvinatorProtocol.html#a38f5b978fd63fda659f0e0b5f682440e',1,'KelvinatorProtocol::Light()'],['../unionNeoclimaProtocol.html#a598346f565ad6d57df03f5256a878dd6',1,'NeoclimaProtocol::Light()'],['../unionVoltasProtocol.html#a811a0de66771c693831740440aac460c',1,'VoltasProtocol::Light()'],['../structstdAc_1_1state__t.html#a51c3a5c4703ea49b420d70aeb18b6b9b',1,'stdAc::state_t::light()']]], - ['lighttoggle_3006',['LightToggle',['../unionElectraProtocol.html#aa2a5998cafd139e5ce7626edc4782c56',1,'ElectraProtocol']]], - ['llword_3007',['llword',['../unionmagiquest.html#ad57fbc75ab289c3e93b94be0b2187d65',1,'magiquest']]], - ['lowlevelsanitycheck_3008',['lowLevelSanityCheck',['../namespaceirutils.html#af67b75834051c4aced358b274c1c55a8',1,'irutils']]], - ['lutron_3009',['LUTRON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada76cc459b9e26d82ed82cf120272fd8cb',1,'IRremoteESP8266.h']]], - ['lword_3010',['lword',['../unionmagiquest.html#ac87102145311831a232002b52fe2d02c',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_0.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_0.js deleted file mode 100644 index b8fcf1ddc..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['airwellprotocol_3528',['AirwellProtocol',['../unionAirwellProtocol.html',1,'']]], - ['amcorprotocol_3529',['AmcorProtocol',['../unionAmcorProtocol.html',1,'']]], - ['argoprotocol_3530',['ArgoProtocol',['../unionArgoProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_1.js deleted file mode 100644 index 750ecdc55..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_1.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['carrierprotocol_3531',['CarrierProtocol',['../unionCarrierProtocol.html',1,'']]], - ['coolixprotocol_3532',['CoolixProtocol',['../unionCoolixProtocol.html',1,'']]], - ['coronaprotocol_3533',['CoronaProtocol',['../unionCoronaProtocol.html',1,'']]], - ['coronasection_3534',['CoronaSection',['../structCoronaSection.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_2.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_2.js deleted file mode 100644 index 6bbf6694f..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_2.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['daikin128protocol_3535',['Daikin128Protocol',['../unionDaikin128Protocol.html',1,'']]], - ['daikin152protocol_3536',['Daikin152Protocol',['../unionDaikin152Protocol.html',1,'']]], - ['daikin160protocol_3537',['Daikin160Protocol',['../unionDaikin160Protocol.html',1,'']]], - ['daikin176protocol_3538',['Daikin176Protocol',['../unionDaikin176Protocol.html',1,'']]], - ['daikin216protocol_3539',['Daikin216Protocol',['../unionDaikin216Protocol.html',1,'']]], - ['daikin2protocol_3540',['Daikin2Protocol',['../unionDaikin2Protocol.html',1,'']]], - ['daikin64protocol_3541',['Daikin64Protocol',['../unionDaikin64Protocol.html',1,'']]], - ['daikinespprotocol_3542',['DaikinESPProtocol',['../unionDaikinESPProtocol.html',1,'']]], - ['decode_5fresults_3543',['decode_results',['../classdecode__results.html',1,'']]], - ['delonghiprotocol_3544',['DelonghiProtocol',['../unionDelonghiProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_3.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_3.js deleted file mode 100644 index ec47b54fc..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['electraprotocol_3545',['ElectraProtocol',['../unionElectraProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_4.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_4.js deleted file mode 100644 index 0f5d656af..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['goodweatherprotocol_3546',['GoodweatherProtocol',['../unionGoodweatherProtocol.html',1,'']]], - ['greeprotocol_3547',['GreeProtocol',['../unionGreeProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_5.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_5.js deleted file mode 100644 index 59c1e6417..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_5.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['haierprotocol_3548',['HaierProtocol',['../unionHaierProtocol.html',1,'']]], - ['haieryrw02protocol_3549',['HaierYRW02Protocol',['../unionHaierYRW02Protocol.html',1,'']]], - ['hitachi1protocol_3550',['Hitachi1Protocol',['../unionHitachi1Protocol.html',1,'']]], - ['hitachi424protocol_3551',['Hitachi424Protocol',['../unionHitachi424Protocol.html',1,'']]], - ['hitachiprotocol_3552',['HitachiProtocol',['../unionHitachiProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_6.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_6.js deleted file mode 100644 index a13cb82e3..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_6.js +++ /dev/null @@ -1,57 +0,0 @@ -var searchData= -[ - ['irac_3553',['IRac',['../classIRac.html',1,'']]], - ['irairwellac_3554',['IRAirwellAc',['../classIRAirwellAc.html',1,'']]], - ['iramcorac_3555',['IRAmcorAc',['../classIRAmcorAc.html',1,'']]], - ['irargoac_3556',['IRArgoAC',['../classIRArgoAC.html',1,'']]], - ['ircarrierac64_3557',['IRCarrierAc64',['../classIRCarrierAc64.html',1,'']]], - ['ircoolixac_3558',['IRCoolixAC',['../classIRCoolixAC.html',1,'']]], - ['ircoronaac_3559',['IRCoronaAc',['../classIRCoronaAc.html',1,'']]], - ['irdaikin128_3560',['IRDaikin128',['../classIRDaikin128.html',1,'']]], - ['irdaikin152_3561',['IRDaikin152',['../classIRDaikin152.html',1,'']]], - ['irdaikin160_3562',['IRDaikin160',['../classIRDaikin160.html',1,'']]], - ['irdaikin176_3563',['IRDaikin176',['../classIRDaikin176.html',1,'']]], - ['irdaikin2_3564',['IRDaikin2',['../classIRDaikin2.html',1,'']]], - ['irdaikin216_3565',['IRDaikin216',['../classIRDaikin216.html',1,'']]], - ['irdaikin64_3566',['IRDaikin64',['../classIRDaikin64.html',1,'']]], - ['irdaikinesp_3567',['IRDaikinESP',['../classIRDaikinESP.html',1,'']]], - ['irdelonghiac_3568',['IRDelonghiAc',['../classIRDelonghiAc.html',1,'']]], - ['irelectraac_3569',['IRElectraAc',['../classIRElectraAc.html',1,'']]], - ['irfujitsuac_3570',['IRFujitsuAC',['../classIRFujitsuAC.html',1,'']]], - ['irgoodweatherac_3571',['IRGoodweatherAc',['../classIRGoodweatherAc.html',1,'']]], - ['irgreeac_3572',['IRGreeAC',['../classIRGreeAC.html',1,'']]], - ['irhaierac_3573',['IRHaierAC',['../classIRHaierAC.html',1,'']]], - ['irhaieracyrw02_3574',['IRHaierACYRW02',['../classIRHaierACYRW02.html',1,'']]], - ['irhitachiac_3575',['IRHitachiAc',['../classIRHitachiAc.html',1,'']]], - ['irhitachiac1_3576',['IRHitachiAc1',['../classIRHitachiAc1.html',1,'']]], - ['irhitachiac3_3577',['IRHitachiAc3',['../classIRHitachiAc3.html',1,'']]], - ['irhitachiac344_3578',['IRHitachiAc344',['../classIRHitachiAc344.html',1,'']]], - ['irhitachiac424_3579',['IRHitachiAc424',['../classIRHitachiAc424.html',1,'']]], - ['irkelvinatorac_3580',['IRKelvinatorAC',['../classIRKelvinatorAC.html',1,'']]], - ['irlgac_3581',['IRLgAc',['../classIRLgAc.html',1,'']]], - ['irmideaac_3582',['IRMideaAC',['../classIRMideaAC.html',1,'']]], - ['irmitsubishi112_3583',['IRMitsubishi112',['../classIRMitsubishi112.html',1,'']]], - ['irmitsubishi136_3584',['IRMitsubishi136',['../classIRMitsubishi136.html',1,'']]], - ['irmitsubishiac_3585',['IRMitsubishiAC',['../classIRMitsubishiAC.html',1,'']]], - ['irmitsubishiheavy152ac_3586',['IRMitsubishiHeavy152Ac',['../classIRMitsubishiHeavy152Ac.html',1,'']]], - ['irmitsubishiheavy88ac_3587',['IRMitsubishiHeavy88Ac',['../classIRMitsubishiHeavy88Ac.html',1,'']]], - ['irneoclimaac_3588',['IRNeoclimaAc',['../classIRNeoclimaAc.html',1,'']]], - ['irpanasonicac_3589',['IRPanasonicAc',['../classIRPanasonicAc.html',1,'']]], - ['irpanasonicac32_3590',['IRPanasonicAc32',['../classIRPanasonicAc32.html',1,'']]], - ['irparams_5ft_3591',['irparams_t',['../structirparams__t.html',1,'']]], - ['irrecv_3592',['IRrecv',['../classIRrecv.html',1,'']]], - ['irsamsungac_3593',['IRSamsungAc',['../classIRSamsungAc.html',1,'']]], - ['irsanyoac_3594',['IRSanyoAc',['../classIRSanyoAc.html',1,'']]], - ['irsend_3595',['IRsend',['../classIRsend.html',1,'']]], - ['irsharpac_3596',['IRSharpAc',['../classIRSharpAc.html',1,'']]], - ['irtcl112ac_3597',['IRTcl112Ac',['../classIRTcl112Ac.html',1,'']]], - ['irtechnibelac_3598',['IRTechnibelAc',['../classIRTechnibelAc.html',1,'']]], - ['irtecoac_3599',['IRTecoAc',['../classIRTecoAc.html',1,'']]], - ['irtimer_3600',['IRtimer',['../classIRtimer.html',1,'']]], - ['irtoshibaac_3601',['IRToshibaAC',['../classIRToshibaAC.html',1,'']]], - ['irtranscoldac_3602',['IRTranscoldAc',['../classIRTranscoldAc.html',1,'']]], - ['irtrotecesp_3603',['IRTrotecESP',['../classIRTrotecESP.html',1,'']]], - ['irvestelac_3604',['IRVestelAc',['../classIRVestelAc.html',1,'']]], - ['irvoltas_3605',['IRVoltas',['../classIRVoltas.html',1,'']]], - ['irwhirlpoolac_3606',['IRWhirlpoolAc',['../classIRWhirlpoolAc.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_7.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_7.js deleted file mode 100644 index d64666355..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['kelvinatorprotocol_3607',['KelvinatorProtocol',['../unionKelvinatorProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_8.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_8.js deleted file mode 100644 index fd517523e..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['lgprotocol_3608',['LGProtocol',['../unionLGProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_9.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_9.js deleted file mode 100644 index efcfa7b5d..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_9.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['magiquest_3609',['magiquest',['../unionmagiquest.html',1,'']]], - ['match_5fresult_5ft_3610',['match_result_t',['../structmatch__result__t.html',1,'']]], - ['mideaprotocol_3611',['MideaProtocol',['../unionMideaProtocol.html',1,'']]], - ['mitsubishi112protocol_3612',['Mitsubishi112Protocol',['../unionMitsubishi112Protocol.html',1,'']]], - ['mitsubishi136protocol_3613',['Mitsubishi136Protocol',['../unionMitsubishi136Protocol.html',1,'']]], - ['mitsubishi144protocol_3614',['Mitsubishi144Protocol',['../unionMitsubishi144Protocol.html',1,'']]], - ['mitsubishi152protocol_3615',['Mitsubishi152Protocol',['../unionMitsubishi152Protocol.html',1,'']]], - ['mitsubishi88protocol_3616',['Mitsubishi88Protocol',['../unionMitsubishi88Protocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_a.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_a.js deleted file mode 100644 index 6401b09bc..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['neoclimaprotocol_3617',['NeoclimaProtocol',['../unionNeoclimaProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_b.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_b.js deleted file mode 100644 index 2f6d41608..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_b.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['panasonicac32protocol_3618',['PanasonicAc32Protocol',['../unionPanasonicAc32Protocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_c.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_c.js deleted file mode 100644 index b6355be8b..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_c.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['samsungprotocol_3619',['SamsungProtocol',['../unionSamsungProtocol.html',1,'']]], - ['sanyoprotocol_3620',['SanyoProtocol',['../unionSanyoProtocol.html',1,'']]], - ['sharpprotocol_3621',['SharpProtocol',['../unionSharpProtocol.html',1,'']]], - ['state_5ft_3622',['state_t',['../structstdAc_1_1state__t.html',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_d.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_d.js deleted file mode 100644 index 57ae8c033..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['timerms_3623',['TimerMs',['../classTimerMs.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_e.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_e.js deleted file mode 100644 index faadfb5f1..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/classes_e.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['voltasprotocol_3624',['VoltasProtocol',['../unionVoltasProtocol.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_5.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_5.js deleted file mode 100644 index 402bf7136..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['opmode_5ft_6987',['opmode_t',['../namespacestdAc.html#a99ad268c783486f9b3207cb78f48444f',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_7.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_7.js deleted file mode 100644 index c82f51ed6..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enums_7.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['sharp_5fac_5fremote_5fmodel_5ft_6989',['sharp_ac_remote_model_t',['../IRsend_8h.html#a258e4af12642d613587149fa734e45e7',1,'IRsend.h']]], - ['swingh_5ft_6990',['swingh_t',['../namespacestdAc.html#aae50ee315fa9c9ec1a4078da40d6b147',1,'stdAc']]], - ['swingv_5ft_6991',['swingv_t',['../namespacestdAc.html#ac07f224c7bb47cac55dd01f24770ef43',1,'stdAc']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enumvalues_3.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enumvalues_3.js deleted file mode 100644 index d1d7d023a..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/enumvalues_3.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['electra_5fac_7025',['ELECTRA_AC',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fada05f193ef4ead3e54624bd92dc3203fac',1,'IRremoteESP8266.h']]], - ['elitescreens_7026',['ELITESCREENS',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadafebe19d5453be4c99de8c031508b7cb1',1,'IRremoteESP8266.h']]], - ['epson_7027',['EPSON',['../IRremoteESP8266_8h.html#ad5b287a488a8c1b7b8661f029ab56fadaaf677fd380c38297264a10732631927c',1,'IRremoteESP8266.h']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_0.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_0.js deleted file mode 100644 index 106a1db5f..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_0.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['de_2dch_2eh_3629',['de-CH.h',['../de-CH_8h.html',1,'']]], - ['de_2dde_2eh_3630',['de-DE.h',['../de-DE_8h.html',1,'']]], - ['defaults_2eh_3631',['defaults.h',['../defaults_8h.html',1,'']]], - ['doxygen_5findex_2emd_3632',['doxygen_index.md',['../doxygen__index_8md.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_1.js deleted file mode 100644 index ecfc159e2..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_1.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['en_2dau_2eh_3633',['en-AU.h',['../en-AU_8h.html',1,'']]], - ['en_2die_2eh_3634',['en-IE.h',['../en-IE_8h.html',1,'']]], - ['en_2duk_2eh_3635',['en-UK.h',['../en-UK_8h.html',1,'']]], - ['en_2dus_2eh_3636',['en-US.h',['../en-US_8h.html',1,'']]], - ['es_2des_2eh_3637',['es-ES.h',['../es-ES_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_2.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_2.js deleted file mode 100644 index a941fb1ad..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['fr_2dfr_2eh_3638',['fr-FR.h',['../fr-FR_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_3.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_3.js deleted file mode 100644 index f8fb7de2b..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_3.js +++ /dev/null @@ -1,115 +0,0 @@ -var searchData= -[ - ['i18n_2eh_3639',['i18n.h',['../i18n_8h.html',1,'']]], - ['ir_5fairwell_2ecpp_3640',['ir_Airwell.cpp',['../ir__Airwell_8cpp.html',1,'']]], - ['ir_5fairwell_2eh_3641',['ir_Airwell.h',['../ir__Airwell_8h.html',1,'']]], - ['ir_5faiwa_2ecpp_3642',['ir_Aiwa.cpp',['../ir__Aiwa_8cpp.html',1,'']]], - ['ir_5famcor_2ecpp_3643',['ir_Amcor.cpp',['../ir__Amcor_8cpp.html',1,'']]], - ['ir_5famcor_2eh_3644',['ir_Amcor.h',['../ir__Amcor_8h.html',1,'']]], - ['ir_5fargo_2ecpp_3645',['ir_Argo.cpp',['../ir__Argo_8cpp.html',1,'']]], - ['ir_5fargo_2eh_3646',['ir_Argo.h',['../ir__Argo_8h.html',1,'']]], - ['ir_5fcarrier_2ecpp_3647',['ir_Carrier.cpp',['../ir__Carrier_8cpp.html',1,'']]], - ['ir_5fcarrier_2eh_3648',['ir_Carrier.h',['../ir__Carrier_8h.html',1,'']]], - ['ir_5fcoolix_2ecpp_3649',['ir_Coolix.cpp',['../ir__Coolix_8cpp.html',1,'']]], - ['ir_5fcoolix_2eh_3650',['ir_Coolix.h',['../ir__Coolix_8h.html',1,'']]], - ['ir_5fcorona_2ecpp_3651',['ir_Corona.cpp',['../ir__Corona_8cpp.html',1,'']]], - ['ir_5fcorona_2eh_3652',['ir_Corona.h',['../ir__Corona_8h.html',1,'']]], - ['ir_5fdaikin_2ecpp_3653',['ir_Daikin.cpp',['../ir__Daikin_8cpp.html',1,'']]], - ['ir_5fdaikin_2eh_3654',['ir_Daikin.h',['../ir__Daikin_8h.html',1,'']]], - ['ir_5fdelonghi_2ecpp_3655',['ir_Delonghi.cpp',['../ir__Delonghi_8cpp.html',1,'']]], - ['ir_5fdelonghi_2eh_3656',['ir_Delonghi.h',['../ir__Delonghi_8h.html',1,'']]], - ['ir_5fdenon_2ecpp_3657',['ir_Denon.cpp',['../ir__Denon_8cpp.html',1,'']]], - ['ir_5fdish_2ecpp_3658',['ir_Dish.cpp',['../ir__Dish_8cpp.html',1,'']]], - ['ir_5fdoshisha_2ecpp_3659',['ir_Doshisha.cpp',['../ir__Doshisha_8cpp.html',1,'']]], - ['ir_5felectra_2ecpp_3660',['ir_Electra.cpp',['../ir__Electra_8cpp.html',1,'']]], - ['ir_5felectra_2eh_3661',['ir_Electra.h',['../ir__Electra_8h.html',1,'']]], - ['ir_5felitescreens_2ecpp_3662',['ir_EliteScreens.cpp',['../ir__EliteScreens_8cpp.html',1,'']]], - ['ir_5fepson_2ecpp_3663',['ir_Epson.cpp',['../ir__Epson_8cpp.html',1,'']]], - ['ir_5ffujitsu_2ecpp_3664',['ir_Fujitsu.cpp',['../ir__Fujitsu_8cpp.html',1,'']]], - ['ir_5ffujitsu_2eh_3665',['ir_Fujitsu.h',['../ir__Fujitsu_8h.html',1,'']]], - ['ir_5fgicable_2ecpp_3666',['ir_GICable.cpp',['../ir__GICable_8cpp.html',1,'']]], - ['ir_5fglobalcache_2ecpp_3667',['ir_GlobalCache.cpp',['../ir__GlobalCache_8cpp.html',1,'']]], - ['ir_5fgoodweather_2ecpp_3668',['ir_Goodweather.cpp',['../ir__Goodweather_8cpp.html',1,'']]], - ['ir_5fgoodweather_2eh_3669',['ir_Goodweather.h',['../ir__Goodweather_8h.html',1,'']]], - ['ir_5fgree_2ecpp_3670',['ir_Gree.cpp',['../ir__Gree_8cpp.html',1,'']]], - ['ir_5fgree_2eh_3671',['ir_Gree.h',['../ir__Gree_8h.html',1,'']]], - ['ir_5fhaier_2ecpp_3672',['ir_Haier.cpp',['../ir__Haier_8cpp.html',1,'']]], - ['ir_5fhaier_2eh_3673',['ir_Haier.h',['../ir__Haier_8h.html',1,'']]], - ['ir_5fhitachi_2ecpp_3674',['ir_Hitachi.cpp',['../ir__Hitachi_8cpp.html',1,'']]], - ['ir_5fhitachi_2eh_3675',['ir_Hitachi.h',['../ir__Hitachi_8h.html',1,'']]], - ['ir_5finax_2ecpp_3676',['ir_Inax.cpp',['../ir__Inax_8cpp.html',1,'']]], - ['ir_5fjvc_2ecpp_3677',['ir_JVC.cpp',['../ir__JVC_8cpp.html',1,'']]], - ['ir_5fkelvinator_2ecpp_3678',['ir_Kelvinator.cpp',['../ir__Kelvinator_8cpp.html',1,'']]], - ['ir_5fkelvinator_2eh_3679',['ir_Kelvinator.h',['../ir__Kelvinator_8h.html',1,'']]], - ['ir_5flasertag_2ecpp_3680',['ir_Lasertag.cpp',['../ir__Lasertag_8cpp.html',1,'']]], - ['ir_5flego_2ecpp_3681',['ir_Lego.cpp',['../ir__Lego_8cpp.html',1,'']]], - ['ir_5flg_2ecpp_3682',['ir_LG.cpp',['../ir__LG_8cpp.html',1,'']]], - ['ir_5flg_2eh_3683',['ir_LG.h',['../ir__LG_8h.html',1,'']]], - ['ir_5flutron_2ecpp_3684',['ir_Lutron.cpp',['../ir__Lutron_8cpp.html',1,'']]], - ['ir_5fmagiquest_2ecpp_3685',['ir_Magiquest.cpp',['../ir__Magiquest_8cpp.html',1,'']]], - ['ir_5fmagiquest_2eh_3686',['ir_Magiquest.h',['../ir__Magiquest_8h.html',1,'']]], - ['ir_5fmetz_2ecpp_3687',['ir_Metz.cpp',['../ir__Metz_8cpp.html',1,'']]], - ['ir_5fmidea_2ecpp_3688',['ir_Midea.cpp',['../ir__Midea_8cpp.html',1,'']]], - ['ir_5fmidea_2eh_3689',['ir_Midea.h',['../ir__Midea_8h.html',1,'']]], - ['ir_5fmirage_2ecpp_3690',['ir_Mirage.cpp',['../ir__Mirage_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2ecpp_3691',['ir_Mitsubishi.cpp',['../ir__Mitsubishi_8cpp.html',1,'']]], - ['ir_5fmitsubishi_2eh_3692',['ir_Mitsubishi.h',['../ir__Mitsubishi_8h.html',1,'']]], - ['ir_5fmitsubishiheavy_2ecpp_3693',['ir_MitsubishiHeavy.cpp',['../ir__MitsubishiHeavy_8cpp.html',1,'']]], - ['ir_5fmitsubishiheavy_2eh_3694',['ir_MitsubishiHeavy.h',['../ir__MitsubishiHeavy_8h.html',1,'']]], - ['ir_5fmultibrackets_2ecpp_3695',['ir_Multibrackets.cpp',['../ir__Multibrackets_8cpp.html',1,'']]], - ['ir_5fmwm_2ecpp_3696',['ir_MWM.cpp',['../ir__MWM_8cpp.html',1,'']]], - ['ir_5fnec_2ecpp_3697',['ir_NEC.cpp',['../ir__NEC_8cpp.html',1,'']]], - ['ir_5fnec_2eh_3698',['ir_NEC.h',['../ir__NEC_8h.html',1,'']]], - ['ir_5fneoclima_2ecpp_3699',['ir_Neoclima.cpp',['../ir__Neoclima_8cpp.html',1,'']]], - ['ir_5fneoclima_2eh_3700',['ir_Neoclima.h',['../ir__Neoclima_8h.html',1,'']]], - ['ir_5fnikai_2ecpp_3701',['ir_Nikai.cpp',['../ir__Nikai_8cpp.html',1,'']]], - ['ir_5fpanasonic_2ecpp_3702',['ir_Panasonic.cpp',['../ir__Panasonic_8cpp.html',1,'']]], - ['ir_5fpanasonic_2eh_3703',['ir_Panasonic.h',['../ir__Panasonic_8h.html',1,'']]], - ['ir_5fpioneer_2ecpp_3704',['ir_Pioneer.cpp',['../ir__Pioneer_8cpp.html',1,'']]], - ['ir_5fpronto_2ecpp_3705',['ir_Pronto.cpp',['../ir__Pronto_8cpp.html',1,'']]], - ['ir_5frc5_5frc6_2ecpp_3706',['ir_RC5_RC6.cpp',['../ir__RC5__RC6_8cpp.html',1,'']]], - ['ir_5frcmm_2ecpp_3707',['ir_RCMM.cpp',['../ir__RCMM_8cpp.html',1,'']]], - ['ir_5fsamsung_2ecpp_3708',['ir_Samsung.cpp',['../ir__Samsung_8cpp.html',1,'']]], - ['ir_5fsamsung_2eh_3709',['ir_Samsung.h',['../ir__Samsung_8h.html',1,'']]], - ['ir_5fsanyo_2ecpp_3710',['ir_Sanyo.cpp',['../ir__Sanyo_8cpp.html',1,'']]], - ['ir_5fsanyo_2eh_3711',['ir_Sanyo.h',['../ir__Sanyo_8h.html',1,'']]], - ['ir_5fsharp_2ecpp_3712',['ir_Sharp.cpp',['../ir__Sharp_8cpp.html',1,'']]], - ['ir_5fsharp_2eh_3713',['ir_Sharp.h',['../ir__Sharp_8h.html',1,'']]], - ['ir_5fsherwood_2ecpp_3714',['ir_Sherwood.cpp',['../ir__Sherwood_8cpp.html',1,'']]], - ['ir_5fsony_2ecpp_3715',['ir_Sony.cpp',['../ir__Sony_8cpp.html',1,'']]], - ['ir_5fsymphony_2ecpp_3716',['ir_Symphony.cpp',['../ir__Symphony_8cpp.html',1,'']]], - ['ir_5ftcl_2ecpp_3717',['ir_Tcl.cpp',['../ir__Tcl_8cpp.html',1,'']]], - ['ir_5ftcl_2eh_3718',['ir_Tcl.h',['../ir__Tcl_8h.html',1,'']]], - ['ir_5ftechnibel_2ecpp_3719',['ir_Technibel.cpp',['../ir__Technibel_8cpp.html',1,'']]], - ['ir_5ftechnibel_2eh_3720',['ir_Technibel.h',['../ir__Technibel_8h.html',1,'']]], - ['ir_5fteco_2ecpp_3721',['ir_Teco.cpp',['../ir__Teco_8cpp.html',1,'']]], - ['ir_5fteco_2eh_3722',['ir_Teco.h',['../ir__Teco_8h.html',1,'']]], - ['ir_5ftoshiba_2ecpp_3723',['ir_Toshiba.cpp',['../ir__Toshiba_8cpp.html',1,'']]], - ['ir_5ftoshiba_2eh_3724',['ir_Toshiba.h',['../ir__Toshiba_8h.html',1,'']]], - ['ir_5ftranscold_2ecpp_3725',['ir_Transcold.cpp',['../ir__Transcold_8cpp.html',1,'']]], - ['ir_5ftranscold_2eh_3726',['ir_Transcold.h',['../ir__Transcold_8h.html',1,'']]], - ['ir_5ftrotec_2ecpp_3727',['ir_Trotec.cpp',['../ir__Trotec_8cpp.html',1,'']]], - ['ir_5ftrotec_2eh_3728',['ir_Trotec.h',['../ir__Trotec_8h.html',1,'']]], - ['ir_5fvestel_2ecpp_3729',['ir_Vestel.cpp',['../ir__Vestel_8cpp.html',1,'']]], - ['ir_5fvestel_2eh_3730',['ir_Vestel.h',['../ir__Vestel_8h.html',1,'']]], - ['ir_5fvoltas_2ecpp_3731',['ir_Voltas.cpp',['../ir__Voltas_8cpp.html',1,'']]], - ['ir_5fvoltas_2eh_3732',['ir_Voltas.h',['../ir__Voltas_8h.html',1,'']]], - ['ir_5fwhirlpool_2ecpp_3733',['ir_Whirlpool.cpp',['../ir__Whirlpool_8cpp.html',1,'']]], - ['ir_5fwhirlpool_2eh_3734',['ir_Whirlpool.h',['../ir__Whirlpool_8h.html',1,'']]], - ['ir_5fwhynter_2ecpp_3735',['ir_Whynter.cpp',['../ir__Whynter_8cpp.html',1,'']]], - ['ir_5fzepeal_2ecpp_3736',['ir_Zepeal.cpp',['../ir__Zepeal_8cpp.html',1,'']]], - ['irac_2ecpp_3737',['IRac.cpp',['../IRac_8cpp.html',1,'']]], - ['irac_2eh_3738',['IRac.h',['../IRac_8h.html',1,'']]], - ['irrecv_2ecpp_3739',['IRrecv.cpp',['../IRrecv_8cpp.html',1,'']]], - ['irrecv_2eh_3740',['IRrecv.h',['../IRrecv_8h.html',1,'']]], - ['irremoteesp8266_2eh_3741',['IRremoteESP8266.h',['../IRremoteESP8266_8h.html',1,'']]], - ['irsend_2ecpp_3742',['IRsend.cpp',['../IRsend_8cpp.html',1,'']]], - ['irsend_2eh_3743',['IRsend.h',['../IRsend_8h.html',1,'']]], - ['irtext_2ecpp_3744',['IRtext.cpp',['../IRtext_8cpp.html',1,'']]], - ['irtext_2eh_3745',['IRtext.h',['../IRtext_8h.html',1,'']]], - ['irtimer_2ecpp_3746',['IRtimer.cpp',['../IRtimer_8cpp.html',1,'']]], - ['irtimer_2eh_3747',['IRtimer.h',['../IRtimer_8h.html',1,'']]], - ['irutils_2ecpp_3748',['IRutils.cpp',['../IRutils_8cpp.html',1,'']]], - ['irutils_2eh_3749',['IRutils.h',['../IRutils_8h.html',1,'']]], - ['it_2dit_2eh_3750',['it-IT.h',['../it-IT_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_4.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_4.js deleted file mode 100644 index 95f5f3b5c..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['pt_2dbr_2eh_3751',['pt-BR.h',['../pt-BR_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_5.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_5.js deleted file mode 100644 index 090182563..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['readme_2emd_3752',['README.md',['../README_8md.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_6.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_6.js deleted file mode 100644 index 970f2b5e4..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/files_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zh_2dcn_2eh_3753',['zh-CN.h',['../zh-CN_8h.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_1.js deleted file mode 100644 index 29929c826..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_1.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['add_3771',['add',['../classIRtimer.html#aa8e3ff975ae5468b4727790c828fa032',1,'IRtimer::add()'],['../classTimerMs.html#a77bfc23a029a9172c3dbac03f746b0cb',1,'TimerMs::add()']]], - ['addbooltostring_3772',['addBoolToString',['../namespaceirutils.html#a12ba9cf1830a886649a80c3cc5fdce2b',1,'irutils']]], - ['adddaytostring_3773',['addDayToString',['../namespaceirutils.html#a6ead1d10578c64627f8a24b5d8a7444f',1,'irutils']]], - ['addfantostring_3774',['addFanToString',['../namespaceirutils.html#af222d5a977e2cd2c979184c449d3c2f8',1,'irutils']]], - ['addinttostring_3775',['addIntToString',['../namespaceirutils.html#a772e623c4b60208200e02afbaec66651',1,'irutils']]], - ['addlabeledstring_3776',['addLabeledString',['../namespaceirutils.html#ac98793392d1e65c1b8d6895eb9d9b75b',1,'irutils']]], - ['addmodeltostring_3777',['addModelToString',['../namespaceirutils.html#a06e5a5c2b6f6649035dfa5eb19801367',1,'irutils']]], - ['addmodetostring_3778',['addModeToString',['../namespaceirutils.html#a8b74ae0258e98aa0eaebc6f3efe1481e',1,'irutils']]], - ['addtemptostring_3779',['addTempToString',['../namespaceirutils.html#a0cef0634f4db979a93b7dc19cc2b4a85',1,'irutils']]], - ['airwell_3780',['airwell',['../classIRac.html#a26cd62e09250d87b652d35406ebfb159',1,'IRac']]], - ['amcor_3781',['amcor',['../classIRac.html#a4bad16621b232572e14fe4a53f678131',1,'IRac']]], - ['argo_3782',['argo',['../classIRac.html#aa06ee1314529dbf96f4e6f3c28ea6821',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_15.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_15.js deleted file mode 100644 index d85fa603e..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_15.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['whirlpool_4458',['whirlpool',['../classIRac.html#ae5f7a03589f614c03c5ad8629100b05a',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_17.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_17.js deleted file mode 100644 index 8112c05fd..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_17.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_7eirrecv_4460',['~IRrecv',['../classIRrecv.html#a87d4cca5e350177cb0922842dda1eb5b',1,'IRrecv']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_4.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_4.js deleted file mode 100644 index d577b5eae..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_4.js +++ /dev/null @@ -1,103 +0,0 @@ -var searchData= -[ - ['daikin_3821',['daikin',['../classIRac.html#afb6d77bbeb5b2465437cef4f58b83e0e',1,'IRac']]], - ['daikin128_3822',['daikin128',['../classIRac.html#a8fe7c254e1bcb32b6b6fdc1f91693a50',1,'IRac']]], - ['daikin152_3823',['daikin152',['../classIRac.html#a6dff8e608e3e9fecffe71c3fd1ebe74e',1,'IRac']]], - ['daikin160_3824',['daikin160',['../classIRac.html#a3b34f44d713efa52f30d43405cde831c',1,'IRac']]], - ['daikin176_3825',['daikin176',['../classIRac.html#aaae173fd58a7b53c3f4d2edbf7c4afe7',1,'IRac']]], - ['daikin2_3826',['daikin2',['../classIRac.html#a89eddc0e1b3c41c608208d2752dc954c',1,'IRac']]], - ['daikin216_3827',['daikin216',['../classIRac.html#a101ac8b9e9564e557ef1a1f61ff111d9',1,'IRac']]], - ['daikin64_3828',['daikin64',['../classIRac.html#a074db6fc0cff2878d80a397020e1b249',1,'IRac']]], - ['decode_3829',['decode',['../classIRrecv.html#aeaa5c07a8b46f8fbb982f996cc1f9f4b',1,'IRrecv']]], - ['decodeairwell_3830',['decodeAirwell',['../classIRrecv.html#acf4635d5ee146a82498cb0c269b6af41',1,'IRrecv']]], - ['decodeaiwarct501_3831',['decodeAiwaRCT501',['../classIRrecv.html#aa4d678376a4c0f8ea953474a6f5ef9d2',1,'IRrecv']]], - ['decodeamcor_3832',['decodeAmcor',['../classIRrecv.html#a8d81fcfb47e36925975d313027689a44',1,'IRrecv']]], - ['decodeargo_3833',['decodeArgo',['../classIRrecv.html#a94f12dc000a6e7b75ea8680fd48fc487',1,'IRrecv']]], - ['decodecarrierac_3834',['decodeCarrierAC',['../classIRrecv.html#acf3d1c37038120a5c0996d92577ce74a',1,'IRrecv']]], - ['decodecarrierac40_3835',['decodeCarrierAC40',['../classIRrecv.html#a4bdb35ec34f49401a6b9becd15b8a3b5',1,'IRrecv']]], - ['decodecarrierac64_3836',['decodeCarrierAC64',['../classIRrecv.html#a79d03c31da48a385ab47cc8f342ef9b3',1,'IRrecv']]], - ['decodecoolix_3837',['decodeCOOLIX',['../classIRrecv.html#a964af7e72e2133688f0596c718cb98ca',1,'IRrecv']]], - ['decodecoronaac_3838',['decodeCoronaAc',['../classIRrecv.html#a981cba14551c93af57f9c1c0e1775d12',1,'IRrecv']]], - ['decodedaikin_3839',['decodeDaikin',['../classIRrecv.html#a141f0de9f4cae8daeb025aff3904ecaa',1,'IRrecv']]], - ['decodedaikin128_3840',['decodeDaikin128',['../classIRrecv.html#ac7188577c874d9f8f19304a3ec775415',1,'IRrecv']]], - ['decodedaikin152_3841',['decodeDaikin152',['../classIRrecv.html#ab20a6586b4e56cc428012ec96f5ccc2c',1,'IRrecv']]], - ['decodedaikin160_3842',['decodeDaikin160',['../classIRrecv.html#af0b9822defe6b29099079d664d9dc413',1,'IRrecv']]], - ['decodedaikin176_3843',['decodeDaikin176',['../classIRrecv.html#aa142d1340201b6fdc5b462f46fe21ee0',1,'IRrecv']]], - ['decodedaikin2_3844',['decodeDaikin2',['../classIRrecv.html#a4c4799a0d45ea5562159c46939617d80',1,'IRrecv']]], - ['decodedaikin216_3845',['decodeDaikin216',['../classIRrecv.html#a7f860686a5c58aa8f4d1842cfb15b2f9',1,'IRrecv']]], - ['decodedaikin64_3846',['decodeDaikin64',['../classIRrecv.html#a030701f081a9c6eab0c07b75433b524c',1,'IRrecv']]], - ['decodedelonghiac_3847',['decodeDelonghiAc',['../classIRrecv.html#a8c91cc83770d243e942387cc16e9ca6f',1,'IRrecv']]], - ['decodedenon_3848',['decodeDenon',['../classIRrecv.html#a0b1bd1c817cb43bc3755126191b7f4a2',1,'IRrecv']]], - ['decodedish_3849',['decodeDISH',['../classIRrecv.html#a851776d9178aeb706d9a1abd3f254e31',1,'IRrecv']]], - ['decodedoshisha_3850',['decodeDoshisha',['../classIRrecv.html#a675c45e6b32aaeca3de734ccf2f0c819',1,'IRrecv']]], - ['decodeelectraac_3851',['decodeElectraAC',['../classIRrecv.html#ad3a7be8afc36451c8e28e27f3c3e9aaa',1,'IRrecv']]], - ['decodeelitescreens_3852',['decodeElitescreens',['../classIRrecv.html#ac830ece2c2c200b8c13fcd66828e2846',1,'IRrecv']]], - ['decodeepson_3853',['decodeEpson',['../classIRrecv.html#aaadef8415f273ba25f4086fecd681d2e',1,'IRrecv']]], - ['decodefujitsuac_3854',['decodeFujitsuAC',['../classIRrecv.html#aa3778bdf994bf9c99ac48ef95434a826',1,'IRrecv']]], - ['decodegicable_3855',['decodeGICable',['../classIRrecv.html#afade8dac9b1d023e5e0946e6b2c08aea',1,'IRrecv']]], - ['decodegoodweather_3856',['decodeGoodweather',['../classIRrecv.html#a64650ce7dbaf5fc860a6a253d906e9de',1,'IRrecv']]], - ['decodegree_3857',['decodeGree',['../classIRrecv.html#a2e756342d7524a13d53d6c656700638c',1,'IRrecv']]], - ['decodehaierac_3858',['decodeHaierAC',['../classIRrecv.html#ad97403174f05197a7fa9a4a0107e3111',1,'IRrecv']]], - ['decodehaieracyrw02_3859',['decodeHaierACYRW02',['../classIRrecv.html#a281fb9d972fee75db49209c42f649822',1,'IRrecv']]], - ['decodehash_3860',['decodeHash',['../classIRrecv.html#a7c15fbfa7936ca474712a1953911fd06',1,'IRrecv']]], - ['decodehitachiac_3861',['decodeHitachiAC',['../classIRrecv.html#aa42facfffc0e304005272b6ddd4583c8',1,'IRrecv']]], - ['decodehitachiac1_3862',['decodeHitachiAC1',['../classIRrecv.html#a122e0dcbf14c90ec2d77399acce21459',1,'IRrecv']]], - ['decodehitachiac3_3863',['decodeHitachiAc3',['../classIRrecv.html#a113bc834eff00f55d5545ce3fa1ab203',1,'IRrecv']]], - ['decodehitachiac424_3864',['decodeHitachiAc424',['../classIRrecv.html#a01c3dda56d6d916076fa1affa2213129',1,'IRrecv']]], - ['decodeinax_3865',['decodeInax',['../classIRrecv.html#a94545c6a8da027b9cb0e23ecba4c29d8',1,'IRrecv']]], - ['decodejvc_3866',['decodeJVC',['../classIRrecv.html#a25ab71efc223a418e9630d8421f44bc9',1,'IRrecv']]], - ['decodekelvinator_3867',['decodeKelvinator',['../classIRrecv.html#a0ac82f20b48b2d71ee07eb392578b226',1,'IRrecv']]], - ['decodelasertag_3868',['decodeLasertag',['../classIRrecv.html#ae4af614a45ea65cb3304ef5bd7965122',1,'IRrecv']]], - ['decodelegopf_3869',['decodeLegoPf',['../classIRrecv.html#aea75ad0ba1d8fec33de16501940f2553',1,'IRrecv']]], - ['decodelg_3870',['decodeLG',['../classIRrecv.html#afe70015c36b1477a5de0c193163e13a7',1,'IRrecv']]], - ['decodelutron_3871',['decodeLutron',['../classIRrecv.html#a6093c4404a9a9d415c5bfeab5ec53be5',1,'IRrecv']]], - ['decodemagiquest_3872',['decodeMagiQuest',['../classIRrecv.html#a6f3bfcc6767484151dee758bcf94fb0b',1,'IRrecv']]], - ['decodemetz_3873',['decodeMetz',['../classIRrecv.html#ac39aa52eec10d1c92b6e9713a22252b6',1,'IRrecv']]], - ['decodemidea_3874',['decodeMidea',['../classIRrecv.html#a255b15601f7439a09ab5e77ad78816fb',1,'IRrecv']]], - ['decodemidea24_3875',['decodeMidea24',['../classIRrecv.html#a62a04019308b29ae2aea4b3a83ba9155',1,'IRrecv']]], - ['decodemirage_3876',['decodeMirage',['../classIRrecv.html#aa88813f830a6ff6bfd6e7bde6728a3d5',1,'IRrecv']]], - ['decodemitsubishi_3877',['decodeMitsubishi',['../classIRrecv.html#a6efe3be80f0ebef3ff94ed0e56c5c52a',1,'IRrecv']]], - ['decodemitsubishi112_3878',['decodeMitsubishi112',['../classIRrecv.html#ae0690ff3cb5a5cdcdb6a514bb7bf0cdd',1,'IRrecv']]], - ['decodemitsubishi136_3879',['decodeMitsubishi136',['../classIRrecv.html#a87b3ee57dbdf762a0e305ddd43eec629',1,'IRrecv']]], - ['decodemitsubishi2_3880',['decodeMitsubishi2',['../classIRrecv.html#a9514197850491a5b8c30ae9ffc89d895',1,'IRrecv']]], - ['decodemitsubishiac_3881',['decodeMitsubishiAC',['../classIRrecv.html#a942c5f41df5cbff32a8b7703673cb621',1,'IRrecv']]], - ['decodemitsubishiheavy_3882',['decodeMitsubishiHeavy',['../classIRrecv.html#aef9cedf79793806df4cc5376710781bc',1,'IRrecv']]], - ['decodemultibrackets_3883',['decodeMultibrackets',['../classIRrecv.html#af61afacc9865232643164ba824e665ab',1,'IRrecv']]], - ['decodemwm_3884',['decodeMWM',['../classIRrecv.html#a27518b5d792cdf3ab333b324f409f328',1,'IRrecv']]], - ['decodenec_3885',['decodeNEC',['../classIRrecv.html#a52b844f80df7f64edf9ce9cc189ac5b9',1,'IRrecv']]], - ['decodeneoclima_3886',['decodeNeoclima',['../classIRrecv.html#a4729ee949e533448b481ae33bbbf1adf',1,'IRrecv']]], - ['decodenikai_3887',['decodeNikai',['../classIRrecv.html#abbcbf5fc07d7e37d7724acc37bb5f592',1,'IRrecv']]], - ['decodepanasonic_3888',['decodePanasonic',['../classIRrecv.html#aa8dd5f24d28576c6db03cc463bd0a865',1,'IRrecv']]], - ['decodepanasonicac_3889',['decodePanasonicAC',['../classIRrecv.html#a0f78e180ed731e8fb16d1c85aa721c95',1,'IRrecv']]], - ['decodepanasonicac32_3890',['decodePanasonicAC32',['../classIRrecv.html#a89ce20e483b1297cae05ab1ae96d24ec',1,'IRrecv']]], - ['decodepioneer_3891',['decodePioneer',['../classIRrecv.html#a78a9487cbe8a562392a07a4090b3091e',1,'IRrecv']]], - ['decoderc5_3892',['decodeRC5',['../classIRrecv.html#adab9dffbeceee514520fababd0e721bd',1,'IRrecv']]], - ['decoderc6_3893',['decodeRC6',['../classIRrecv.html#a67316499ef37db82e3b3ecaac25c5980',1,'IRrecv']]], - ['decodercmm_3894',['decodeRCMM',['../classIRrecv.html#a0e7bf769cb5bebf174e852e4b0b08cf3',1,'IRrecv']]], - ['decodesamsung_3895',['decodeSAMSUNG',['../classIRrecv.html#a18b6cf177364faf11b9a076dd2025eec',1,'IRrecv']]], - ['decodesamsung36_3896',['decodeSamsung36',['../classIRrecv.html#a290a9e6a0b12ef1fe02a92a456c8ad57',1,'IRrecv']]], - ['decodesamsungac_3897',['decodeSamsungAC',['../classIRrecv.html#ae779c76ebd0f3cd1fc13abaa55f80d67',1,'IRrecv']]], - ['decodesanyoac_3898',['decodeSanyoAc',['../classIRrecv.html#ab6c02d8b8079d7f344e141e6a4e7e225',1,'IRrecv']]], - ['decodesanyolc7461_3899',['decodeSanyoLC7461',['../classIRrecv.html#a01a165bf2e7d16dbbb916d1eae740bc5',1,'IRrecv']]], - ['decodesharp_3900',['decodeSharp',['../classIRrecv.html#a3390d63ba21a835d7c74c261532a22a7',1,'IRrecv']]], - ['decodesharpac_3901',['decodeSharpAc',['../classIRrecv.html#a8a9b920079f783e236f8a938e20b9743',1,'IRrecv']]], - ['decodesony_3902',['decodeSony',['../classIRrecv.html#ab03227955cf7d1d00c1620c55d7f9f18',1,'IRrecv']]], - ['decodesymphony_3903',['decodeSymphony',['../classIRrecv.html#a61cdf4d891654521afbc6ca9fb415745',1,'IRrecv']]], - ['decodetechnibelac_3904',['decodeTechnibelAc',['../classIRrecv.html#a2f022741309ad814bf11aec440a838d0',1,'IRrecv']]], - ['decodeteco_3905',['decodeTeco',['../classIRrecv.html#a950711d7df8dfe4cda86f53650cd9f56',1,'IRrecv']]], - ['decodetoshibaac_3906',['decodeToshibaAC',['../classIRrecv.html#aae6ab687ae319ae50a52238916bcfb1a',1,'IRrecv']]], - ['decodetostate_3907',['decodeToState',['../namespaceIRAcUtils.html#ac5eb498bf12cb6cba023c9c1e9726949',1,'IRAcUtils']]], - ['decodetranscold_3908',['decodeTranscold',['../classIRrecv.html#a16c44538d7e01d9b118d983de39d18e3',1,'IRrecv']]], - ['decodetrotec_3909',['decodeTrotec',['../classIRrecv.html#ae2920c488173f3fa37f5325438157ced',1,'IRrecv']]], - ['decodevestelac_3910',['decodeVestelAc',['../classIRrecv.html#a5d48b3c91434c18c7726cca504d75b73',1,'IRrecv']]], - ['decodevoltas_3911',['decodeVoltas',['../classIRrecv.html#a43539320036ba1c17e9875e4dc9fd055',1,'IRrecv']]], - ['decodewhirlpoolac_3912',['decodeWhirlpoolAC',['../classIRrecv.html#a0d1eec83cf092f5621cb34b3e94777c4',1,'IRrecv']]], - ['decodewhynter_3913',['decodeWhynter',['../classIRrecv.html#a66289f6a462557ad26e6c0a64f36cf02',1,'IRrecv']]], - ['decodezepeal_3914',['decodeZepeal',['../classIRrecv.html#a72afd857c8b2e0192021a40afc96c2d8',1,'IRrecv']]], - ['defaultbits_3915',['defaultBits',['../classIRsend.html#a70a2256bee8ad9b8ea8571dd4f26596f',1,'IRsend']]], - ['delonghiac_3916',['delonghiac',['../classIRac.html#af290b0b08cff5121bb88c62051ed1074',1,'IRac']]], - ['disableirin_3917',['disableIRIn',['../classIRrecv.html#a9f4a719e756ad78c7dd47186f8bef087',1,'IRrecv']]], - ['disableofftimer_3918',['disableOffTimer',['../classIRDaikinESP.html#a1e4e05ad0799002d0ab25db92dcaac06',1,'IRDaikinESP::disableOffTimer()'],['../classIRDaikin2.html#a8cbdbc0de31b14f974cd8cd87f3ca54a',1,'IRDaikin2::disableOffTimer()']]], - ['disableontimer_3919',['disableOnTimer',['../classIRDaikinESP.html#a0733e4a15d76baac23493926ef1765b1',1,'IRDaikinESP::disableOnTimer()'],['../classIRDaikin2.html#a170a1e9ddb7873dc1392184a85387cc3',1,'IRDaikin2::disableOnTimer()']]], - ['disablesleeptimer_3920',['disableSleepTimer',['../classIRDaikin2.html#a152532ef9d905e26930ae145a9623877',1,'IRDaikin2']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_a.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_a.js deleted file mode 100644 index 3e2144d46..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['kelvinator_4153',['kelvinator',['../classIRac.html#a6e4d8061841a7271205f81bd8e7d6171',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_b.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_b.js deleted file mode 100644 index 35253a70f..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ledoff_4154',['ledOff',['../classIRsend.html#ae71cc5aa99f894785fb4f7abc05841b2',1,'IRsend']]], - ['ledon_4155',['ledOn',['../classIRsend.html#a13d804171fa7c14aff4def38c6ffb6c8',1,'IRsend']]], - ['lg_4156',['lg',['../classIRac.html#afad31ecf9eae573882d53dd6629485fb',1,'IRac']]], - ['lowlevelsanitycheck_4157',['lowLevelSanityCheck',['../namespaceirutils.html#af67b75834051c4aced358b274c1c55a8',1,'irutils']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_d.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_d.js deleted file mode 100644 index 531b2c211..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_d.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['neoclima_4180',['neoclima',['../classIRac.html#a777da4b0552ee3b64d656c4592687f47',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_f.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_f.js deleted file mode 100644 index 5e5bbe8bd..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/functions_f.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['panasonic_4184',['panasonic',['../classIRac.html#af873db2b9735127eb6f079861daed67a',1,'IRac']]], - ['panasonic32_4185',['panasonic32',['../classIRac.html#a66ed34d5686ad25a1659862f3b683f68',1,'IRac']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_0.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_0.js deleted file mode 100644 index 472443f82..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5firrecv_3625',['_IRrecv',['../namespace__IRrecv.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_1.js deleted file mode 100644 index 33ee5e9fe..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['iracutils_3626',['IRAcUtils',['../namespaceIRAcUtils.html',1,'']]], - ['irutils_3627',['irutils',['../namespaceirutils.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_2.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_2.js deleted file mode 100644 index d475ae536..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/namespaces_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['stdac_3628',['stdAc',['../namespacestdAc.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_0.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_0.js deleted file mode 100644 index 8302553ba..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['deprecated_20list_7141',['Deprecated List',['../deprecated.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_1.js deleted file mode 100644 index 15e2a9d93..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['irremoteesp8266_20library_20api_20documentation_7142',['IRremoteESP8266 Library API Documentation',['../index.html',1,'']]], - ['internationalisation_20_28i18n_29_20_26_20locale_20files_7143',['Internationalisation (I18N) & Locale Files',['../md_src_locale_README.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_2.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_2.js deleted file mode 100644 index bdb25f053..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/pages_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['todo_20list_7144',['Todo List',['../todo.html',1,'']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_1.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_1.js deleted file mode 100644 index 4974d20c7..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_1.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['a705_4530',['A705',['../unionSharpProtocol.html#a17a7db01f34cacdc975e64e738233d72',1,'SharpProtocol']]], - ['address_4531',['address',['../classdecode__results.html#a2858c3a5e28eccca95d44aaa87b70e9e',1,'decode_results']]], - ['airflow_4532',['AirFlow',['../unionGoodweatherProtocol.html#a7b876552a27a7a9bf84b1009f7b12f7a',1,'GoodweatherProtocol']]], - ['altmode_4533',['AltMode',['../unionDaikin176Protocol.html#a05511938e152951723792dc08b33d0dd',1,'Daikin176Protocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_13.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_13.js deleted file mode 100644 index 6aed82ea0..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_13.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['unknown_6959',['unknown',['../unionHaierProtocol.html#aabc2a684c5936858544c02ec8a68afb9',1,'HaierProtocol']]], - ['unknown1_6960',['unknown1',['../unionGreeProtocol.html#ae973c1c723b7162959374e1fd8ecab61',1,'GreeProtocol']]], - ['unknown2_6961',['unknown2',['../unionGreeProtocol.html#aa102f7d68c26f5b8644b13113a5b05f4',1,'GreeProtocol']]], - ['use_5ftime_5fstate_6962',['use_time_state',['../classIRVestelAc.html#af1b622c50a4952fb3edaf483e1bf9328',1,'IRVestelAc']]], - ['used_6963',['used',['../structmatch__result__t.html#a26cea305aa83ed65b88ac0b6ed6de54a',1,'match_result_t']]], - ['usefah_6964',['UseFah',['../unionNeoclimaProtocol.html#ae60408715008e78ab8058ab024669955',1,'NeoclimaProtocol']]], - ['usefahrenheit_6965',['useFahrenheit',['../unionMideaProtocol.html#a1b1258107620bb83fd6356815242e19b',1,'MideaProtocol::useFahrenheit()'],['../unionGreeProtocol.html#a47c79761efe40c00e6bb01b7712b272c',1,'GreeProtocol::UseFahrenheit()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_14.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_14.js deleted file mode 100644 index f14120f7c..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_14.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['value_6966',['value',['../classdecode__results.html#a033502b7a6b4b0412e5a2062e33c5f47',1,'decode_results']]], - ['vane_6967',['Vane',['../unionMitsubishi144Protocol.html#af4cb685d4c5f87f6ff61d1305ccd6967',1,'Mitsubishi144Protocol']]], - ['vanebit_6968',['VaneBit',['../unionMitsubishi144Protocol.html#aaefd53cd1441b57b90dc3d21488bbdd3',1,'Mitsubishi144Protocol']]], - ['vent_6969',['Vent',['../unionAmcorProtocol.html#a289bcba64f01cd2c847845f41978d400',1,'AmcorProtocol']]], - ['ventswing_6970',['VentSwing',['../unionKelvinatorProtocol.html#af7cd4e8ebfaa36812d09105c54f868f2',1,'KelvinatorProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_15.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_15.js deleted file mode 100644 index 576ef6305..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_15.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['wall_6971',['Wall',['../unionDaikin128Protocol.html#aed2c5bc365820f2c0a5f27dd68fa8a05',1,'Daikin128Protocol']]], - ['wand_5fid_6972',['wand_id',['../unionmagiquest.html#a1b159cd47635d548e1d4198cd6d41e93',1,'magiquest']]], - ['weeklytimer_6973',['WeeklyTimer',['../unionDaikinESPProtocol.html#a25e632da82856caebd233699fda8d796',1,'DaikinESPProtocol']]], - ['widevane_6974',['WideVane',['../unionMitsubishi144Protocol.html#ad0c48e95ca7e0658edf7c2ac2b541c3c',1,'Mitsubishi144Protocol']]], - ['wifi_6975',['WiFi',['../unionGreeProtocol.html#a6cf8e0a6c54a5d2b6f14074c6f3dcc92',1,'GreeProtocol::WiFi()'],['../unionVoltasProtocol.html#aae1406825a156f159c5ad4b28d20364c',1,'VoltasProtocol::Wifi()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_16.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_16.js deleted file mode 100644 index 58d432f48..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_16.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['xfan_6976',['Xfan',['../unionGreeProtocol.html#a3fbf66dfc2043710c5e00f8230eddb48',1,'GreeProtocol::Xfan()'],['../unionKelvinatorProtocol.html#a44a0ba82ee5dc39f64215d26edb9636c',1,'KelvinatorProtocol::XFan()']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_2.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_2.js deleted file mode 100644 index 010612382..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_2.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['backup_4534',['backup',['../classIRToshibaAC.html#adc8d8c6918cd110f524f6bedf6f2bb6e',1,'IRToshibaAC']]], - ['basicfan_4535',['BasicFan',['../unionKelvinatorProtocol.html#a9237eb894fd7d6807169d18655bb3261',1,'KelvinatorProtocol']]], - ['beep_4536',['beep',['../structstdAc_1_1state__t.html#a468ce4cf8b68467964b1f1840257663d',1,'stdAc::state_t::beep()'],['../unionDaikin2Protocol.html#ae464d693bde12c9a0085cf268010d158',1,'Daikin2Protocol::Beep()'],['../unionSamsungProtocol.html#a80645f900ef2b45b44b0b9522f4265cc',1,'SamsungProtocol::Beep()'],['../unionSanyoProtocol.html#a56e41c218b229561ee48e9e0184981bd',1,'SanyoProtocol::Beep()']]], - ['beepdisable_4537',['BeepDisable',['../unionMideaProtocol.html#a2a1d3b51765737427adb5dddcda84d60',1,'MideaProtocol']]], - ['bits_4538',['bits',['../classdecode__results.html#aa5ba2fd53bdb36bdc120d8eabd9f36d7',1,'decode_results']]], - ['boost_4539',['Boost',['../unionDelonghiProtocol.html#ad3347e0739d5c00f3fb5cba7c9f53bcd',1,'DelonghiProtocol']]], - ['breeze_4540',['Breeze',['../unionSamsungProtocol.html#a5b60f239d70e2005e14e0f4c3c9f8986',1,'SamsungProtocol']]], - ['bufsize_4541',['bufsize',['../structirparams__t.html#a2b34d697b85ee6a0ce08344c941e50ec',1,'irparams_t']]], - ['button_4542',['Button',['../unionHaierYRW02Protocol.html#ab5b13626ecf6214cc1be52d47909915d',1,'HaierYRW02Protocol::Button()'],['../unionHitachi424Protocol.html#aaadfa5a2e789fb1159ce795f833b83e5',1,'Hitachi424Protocol::Button()'],['../unionNeoclimaProtocol.html#aedacead75ecd658f9e2c8c3a23d2bc58',1,'NeoclimaProtocol::Button()']]], - ['byte_4543',['byte',['../unionmagiquest.html#af1a9c9a147a1610fe5f0e77ca3e09e44',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_4.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_4.js deleted file mode 100644 index a1149ff0c..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_4.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['d_4563',['D',['../unionMitsubishi152Protocol.html#ac493830f3bf09e178aa09b24368746c9',1,'Mitsubishi152Protocol']]], - ['data_4564',['data',['../structmatch__result__t.html#ae88be61a6d1ffa7c3525aa958f4c0d25',1,'match_result_t']]], - ['data0_4565',['Data0',['../structCoronaSection.html#a975b14d8bc30807013714158ef7474ea',1,'CoronaSection']]], - ['data0inv_4566',['Data0Inv',['../structCoronaSection.html#ab05024b8314929dcd8ccdda9b497be8c',1,'CoronaSection']]], - ['data1_4567',['Data1',['../structCoronaSection.html#a59d97a1bc0a1be50b6f96c4d70673425',1,'CoronaSection']]], - ['data1inv_4568',['Data1Inv',['../structCoronaSection.html#ada247bbfb60f24cd9e9a612c9621cbb4',1,'CoronaSection']]], - ['decode_5ftype_4569',['decode_type',['../classdecode__results.html#a9c0e9f161b9c90dc10b7561d4c0b50fa',1,'decode_results']]], - ['degrees_4570',['degrees',['../structstdAc_1_1state__t.html#a3d1ff0ff2e0035db4ee8ead5c53b2dbd',1,'stdAc::state_t']]], - ['disablesensor_4571',['disableSensor',['../unionMideaProtocol.html#a20cc2079eae404c980cc75101b4a3116',1,'MideaProtocol']]], - ['display_4572',['Display',['../unionSamsungProtocol.html#aac97ebabee022e772aa00d4357079eb4',1,'SamsungProtocol']]], - ['displaytemp_4573',['DisplayTemp',['../unionGreeProtocol.html#ad0756a64f9c90c9dd12ca6cd71c78bb2',1,'GreeProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_7.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_7.js deleted file mode 100644 index d10dd77c7..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_7.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['header_4588',['Header',['../unionMideaProtocol.html#a892508b7b4cade91dd2e315b678f5f1b',1,'MideaProtocol']]], - ['header0_4589',['Header0',['../structCoronaSection.html#a3b3c0a1a42da65bb4b481e59b42f26a6',1,'CoronaSection']]], - ['header1_4590',['Header1',['../structCoronaSection.html#a3d6d6c1e31f82a76cd88f81bcdb83a3a',1,'CoronaSection']]], - ['health_4591',['Health',['../unionHaierProtocol.html#a4cf70c633e33066e3fc0f98bb2ad3820',1,'HaierProtocol::Health()'],['../unionHaierYRW02Protocol.html#a7fa39803fd72a788736bb8f00acfa76f',1,'HaierYRW02Protocol::Health()']]], - ['heat_5fmode_4592',['heat_mode',['../classIRArgoAC.html#a255762f71502b9ffeb0686759991ec53',1,'IRArgoAC']]], - ['hold_4593',['Hold',['../unionNeoclimaProtocol.html#aaf3af5b5ab99978fb669e75949bfe136',1,'NeoclimaProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_a.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_a.js deleted file mode 100644 index 8f6cb2681..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_a.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['label_6828',['Label',['../structCoronaSection.html#abc6d0caa713c73244c4bf2f602074d48',1,'CoronaSection']]], - ['ledflag_6829',['ledFlag',['../classIRCoolixAC.html#a03ba5e0a6cb47a7bb054155c2111a69c',1,'IRCoolixAC']]], - ['light_6830',['Light',['../unionDaikin2Protocol.html#adaf55ec9e1b9ba278c7391d9d797f3ba',1,'Daikin2Protocol::Light()'],['../unionGoodweatherProtocol.html#a845565af7661af0c05290a7ce039f8e2',1,'GoodweatherProtocol::Light()'],['../unionGreeProtocol.html#a72092768725667d3bce381a6e2900c66',1,'GreeProtocol::Light()'],['../unionKelvinatorProtocol.html#a38f5b978fd63fda659f0e0b5f682440e',1,'KelvinatorProtocol::Light()'],['../unionNeoclimaProtocol.html#a598346f565ad6d57df03f5256a878dd6',1,'NeoclimaProtocol::Light()'],['../unionVoltasProtocol.html#a811a0de66771c693831740440aac460c',1,'VoltasProtocol::Light()'],['../structstdAc_1_1state__t.html#a51c3a5c4703ea49b420d70aeb18b6b9b',1,'stdAc::state_t::light()']]], - ['lighttoggle_6831',['LightToggle',['../unionElectraProtocol.html#aa2a5998cafd139e5ce7626edc4782c56',1,'ElectraProtocol']]], - ['llword_6832',['llword',['../unionmagiquest.html#ad57fbc75ab289c3e93b94be0b2187d65',1,'magiquest']]], - ['lword_6833',['lword',['../unionmagiquest.html#ac87102145311831a232002b52fe2d02c',1,'magiquest']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_f.js b/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_f.js deleted file mode 100644 index 48427bbed..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/search/variables_f.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['quiet_6897',['quiet',['../structstdAc_1_1state__t.html#a251ad14e187a9905137e9e4e010c3e34',1,'stdAc::state_t::quiet()'],['../unionDaikinESPProtocol.html#af93324815f6be6cfc5d0d50af9e73aad',1,'DaikinESPProtocol::Quiet()'],['../unionDaikin2Protocol.html#afa111c9afbc94bcf52e9ba15b59c1bee',1,'Daikin2Protocol::Quiet()'],['../unionDaikin152Protocol.html#ac5bfe8541e53cb2732bfcbc71500ed32',1,'Daikin152Protocol::Quiet()'],['../unionKelvinatorProtocol.html#ac803fe14d6d21155418d2fe0543c9d9f',1,'KelvinatorProtocol::Quiet()']]], - ['quiet1_6898',['Quiet1',['../unionSamsungProtocol.html#ac38e3f34f98ac3dae9738a1582dfeca6',1,'SamsungProtocol']]], - ['quiet5_6899',['Quiet5',['../unionSamsungProtocol.html#a94a9d2b42e1ab7a308d079322350c3f9',1,'SamsungProtocol']]] -]; diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/favicon.ico b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/favicon.ico deleted file mode 100644 index f206c7cc7241d6969ccd7c9ab8d12a56bbf09430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16446 zcmeHOJ&4pm6wcwlC>+SC+-Bz|ncOa0_``w!;v&dd*eNP1*w}~`R)U3MsaV*Z3WAE- zh^Sy^V<(EBAP8cig^HjeihswUoZq|M+)ZM#o6SYd?#>=_Nhb5nyzkAMmp7A%W%b~% zTD9wvg&F2DHl)3K%lZ)GzcLWtR-sP5`mI!~$t=xuq?R-be{$>K0)U9+~cxG$w#g0?^E z?fd5>my`o5;@YWN)#;G`wqHJcY^DP#OC@l97sk;w>45AauI;Sy(Z;i=_9ye)H*syj zZVpYBtJ!||x{)mdeFc(aRziO z#?A=k!?qU1VJW}TSD9CD`-qOmc)CjYzD-&`WbM_l#6KyP%1Q1X z)bWx#=Uc&NQP%J`{jb{~`L?8XW$fRKf8BPB|1NQpNvqXDAQRA7wS3QE8XhEggMK-AlHcg7wSZ(x!QZL>3?JY9qItg_&5H~`2TeNA7f`P=gwux)s;M_aT%G~6Xn9vj(^%)60jRR zUd-uv)IOB7{3Z0+Zv4S@XV?bP^2eT?-R;I7eYQO-{z8;Rc)wSk^+9{lR6*HU@uzxd ztsVQbwnDGl@|;Mp!i|6{GR5ARur#>Wt?qvSTJ zA=+CW<*(9?fAXiWo5(%C0ei|xEQn|I`>6NIY5C)svMY}~8_ASq{DZo>I{u~o6^(SA z$9wobV@=oxq_uz4(}Ov{0r0$;_xA!MW87Y(Dew=gvMsL-e-r-&e3gm+BH};qTw4zA z1VUr{?`Ycp+S(awL-H+5K3zu%5Y*zys$1bF-0 z@DAg;&%gFfsT}q1b@~x~KZ^GQOMU)yB;QEip>zTFk*K*L>A6=CR_LR8#zu%k9v - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_1_on.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_1_on.svg deleted file mode 100644 index 32505f2a4..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_1_on.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_off.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_off.svg deleted file mode 100644 index 20d54679c..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_off.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_on.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_on.svg deleted file mode 100644 index 307370607..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_2_on.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_off.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_off.svg deleted file mode 100644 index 2bbf5848e..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_off.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_on.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_on.svg deleted file mode 100644 index ca29839e2..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_3_on.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_off.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_off.svg deleted file mode 100644 index 3ee1beced..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_off.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_on.svg b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_on.svg deleted file mode 100644 index 720d70148..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/level_4_on.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.html b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.html deleted file mode 100644 index cfefc20d5..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - Home Temperature - - - - - - - - - - - - - - - - -
- - - -
- -

-
- -
-
- - -
- OFF -
- -
-
-
-
- - -

Mode

-
- - - - - -
- -
-
- - -

Fan

-
- - - - -
- -
-
-
-
-
-
- - -

Target temperature

-
- ~ C -
- -
- - -
- - - -
-
-
- -
-
- - - - diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.js b/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.js deleted file mode 100644 index 9bdb8c795..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/examples/Web-AC-control/data/ui.js +++ /dev/null @@ -1,132 +0,0 @@ -var state = {} - -function updateStatus() { - $.ajax({ - type: 'GET', - url: "state", - dataType: "json", - data: [{ - name: "light", - value: "1" - }, ], - success: function(data) { - if (!data) { - return; - } - state = data; - if (state["power"] === true) { - $("#power").text(" ON"); - $("#power-btn").addClass("btn-info"); - $("#power-btn").removeClass("btn-default"); - } else { - $("#power").text(" OFF"); - $("#power-btn").addClass("btn-default"); - $("#power-btn").removeClass("btn-info"); - } - $("#target_temp").text(state["temp"] + " C"); - setModeColor(state["mode"]); - setFanColor(state["fan"]); - }, - error: function() { - console.log('error getting state'); - }, - timeout: 1000 - }); -} - -updateStatus(); - - - - -function postData(t) { - var e = new XMLHttpRequest; - e.timeout = 2000; - e.open("PUT", "state", !0); - e.setRequestHeader("Content-Type", "application/json"); - console.log(JSON.stringify(t)), e.send(JSON.stringify(t)); -} - -function mode_onclick(mode) { - state["mode"] = mode; - setModeColor(mode); - postData(state); -} - - -function setModeColor(mode) { - $(".mode-btn").addClass("btn-default"); - $(".mode-btn").removeClass("btn-info"); - - if (mode === 0) { - $("#mode_auto").removeClass("btn-default"); - $("#mode_auto").addClass("btn-info"); - setFanColor(0); - state["fan"] = 0; - } else if (mode === 1) { - $("#mode_cooling").removeClass("btn-default"); - $("#mode_cooling").addClass("btn-info"); - } else if (mode === 2) { - $("#mode_dehum").removeClass("btn-default"); - $("#mode_dehum").addClass("btn-info"); - } else if (mode === 3) { - $("#mode_heating").removeClass("btn-default"); - $("#mode_heating").addClass("btn-info"); - } else if (mode === 4) { - $("#mode_fan").removeClass("btn-default"); - $("#mode_fan").addClass("btn-info"); - } -} - -function setFanColor(fan) { - if (fan == 0) { - $("#fan_auto").removeClass("btn-default"); - $("#fan_auto").addClass("btn-info"); - } else { - $("#fan_auto").removeClass("btn-info"); - $("#fan_auto").addClass("btn-default"); - } - for (var i = 1; i <= 3; ++i) { - if (i <= fan) { - $("#fan_lvl_" + i).attr("src", "level_" + i + "_on.svg"); - } else { - $("#fan_lvl_" + i).attr("src", "level_" + i + "_off.svg"); - } - } -} - -function fan_onclick(fan) { - if (state["mode"] !== 0) { - state["fan"] = fan; - setFanColor(fan); - postData(state); - } -} - -function power_onclick(power) { - if (state["power"]) { - state["power"] = false; - $("#power").text(" OFF"); - $("#power-btn").removeClass("btn-info"); - $("#power-btn").addClass("btn-default"); - } else { - state["power"] = true; - $("#power").text(" ON"); - $("#power-btn").addClass("btn-info"); - $("#power-btn").removeClass("btn-default"); - } - postData(state); -} - - -function temp_onclick(temp) { - state["temp"] += temp; - if (state["temp"] < 17) { - state["temp"] = 17; - } - if (state["temp"] > 30) { - state["temp"] = 30; - } - $("#target_temp").text(state["temp"] + " C"); - postData(state); -} diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Technibel.h b/lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Technibel.h deleted file mode 100644 index 3539a4fd9..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Technibel.h +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2020 Quentin Briollant - -/// @file -/// @brief Support for Technibel protocol. - -#ifndef IR_TECHNIBEL_H_ -#define IR_TECHNIBEL_H_ - -#define __STDC_LIMIT_MACROS -#include -#ifndef UNIT_TEST -#include -#endif -#include "IRremoteESP8266.h" -#include "IRsend.h" -#ifdef UNIT_TEST -#include "IRsend_test.h" -#endif - -// Supports: -// Brand: Technibel, Model: IRO PLUS - - -/* State bit map: - -+--+--+--+--+--+--+--+--+--+------------+-----------+----------+--+--+--+--+ -| FIXED HEADER |ON|TIMER CHANGE|TEMP CHANGE|FAN CHANGE| MODE | -+--+--+--+--+--+--+--+--+--+------------+-----------+----------+--+--+--+--+ - 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 - -+-----+------+-----+-----+---+--+--+--+---+--+--+--+--+--+--+--+ -|TIMER|C OR F|SWING|SLEEP| 0 | FAN | 0 | TEMPERATURE | -+-----+------+-----+-----+---+--+--+--+---+--+--+--+--+--+--+--+ - 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 - -+---+---+---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ -| 0 | 0 | 0 | ON TIME HOUR | FOOTER | CHECKSUM | -+---+---+---+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - - -*/ - -// Constants -const uint8_t kTechnibelAcChecksumOffset = 0; -const uint8_t kTechnibelAcChecksumSize = 8; - -const uint8_t kTechnibelAcFooterOffset = kTechnibelAcChecksumOffset + - kTechnibelAcChecksumSize; -const uint8_t kTechnibelAcFooterSize = 8; - -const uint8_t kTechnibelAcTimerHoursOffset = kTechnibelAcFooterOffset + - kTechnibelAcFooterSize; -const uint8_t kTechnibelAcHoursSize = 8; // Max 24 hrs -const uint8_t kTechnibelAcTimerMax = 24; - -const uint8_t kTechnibelAcTempOffset = kTechnibelAcTimerHoursOffset + - kTechnibelAcHoursSize; -const uint8_t kTechnibelAcTempSize = 8; -const uint8_t kTechnibelAcTempMinC = 16; // Deg C -const uint8_t kTechnibelAcTempMaxC = 31; // Deg C -const uint8_t kTechnibelAcTempMinF = 61; // Deg F -const uint8_t kTechnibelAcTempMaxF = 88; // Deg F - -const uint8_t kTechnibelAcFanOffset = kTechnibelAcTempOffset - + kTechnibelAcTempSize; -const uint8_t kTechnibelAcFanSize = 4; -const uint8_t kTechnibelAcFanLow = 0b0001; -const uint8_t kTechnibelAcFanMedium = 0b0010; -const uint8_t kTechnibelAcFanHigh = 0b0100; - -const uint8_t kTechnibelAcSleepBit = kTechnibelAcFanOffset + - kTechnibelAcFanSize; - -const uint8_t kTechnibelAcSwingBit = kTechnibelAcSleepBit + 1; - -// (0 = Celsius, 1 = Fahrenheit) -const uint8_t kTechnibelAcTempUnitBit = kTechnibelAcSwingBit + 1; - -const uint8_t kTechnibelAcTimerEnableBit = kTechnibelAcTempUnitBit + 1; - -const uint8_t kTechnibelAcModeOffset = kTechnibelAcTimerEnableBit + 1; -const uint8_t kTechnibelAcModeSize = 4; -const uint8_t kTechnibelAcCool = 0b0001; -const uint8_t kTechnibelAcDry = 0b0010; -const uint8_t kTechnibelAcFan = 0b0100; -const uint8_t kTechnibelAcHeat = 0b1000; - -const uint8_t kTechnibelAcFanChangeBit = kTechnibelAcModeOffset + - kTechnibelAcModeSize; - -const uint8_t kTechnibelAcTempChangeBit = kTechnibelAcFanChangeBit + 1; - -const uint8_t kTechnibelAcTimerChangeBit = kTechnibelAcTempChangeBit + 1; - -const uint8_t kTechnibelAcPowerBit = kTechnibelAcTimerChangeBit + 1; - -const uint8_t kTechnibelAcHeaderOffset = kTechnibelAcPowerBit + 1; -const uint8_t kTechnibelAcHeaderSize = 8; -const uint8_t kTechnibelAcHeader = 0b00011000; - -const uint64_t kTechnibelAcResetState = 0x180101140000EA; ///< -///< Mode:Cool, Power:Off, fan:Low, temp:20, swing:Off, sleep:Off - - -// Classes -/// Class for handling detailed Technibel A/C messages. -class IRTechnibelAc { - public: - explicit IRTechnibelAc(const uint16_t pin, const bool inverted = false, - const bool use_modulation = true); - void stateReset(); -#if SEND_TECHNIBEL_AC - void send(const uint16_t repeat = kTechnibelAcDefaultRepeat); - /// Run the calibration to calculate uSec timing offsets for this platform. - /// @return The uSec timing offset needed per modulation of the IR Led. - /// @note This will produce a 65ms IR signal pulse at 38kHz. - /// Only ever needs to be run once per object instantiation, if at all. - int8_t calibrate(void) { return _irsend.calibrate(); } -#endif // SEND_TECHNIBEL_AC - void begin(); - static uint8_t calcChecksum(const uint64_t state); - static bool validChecksum(const uint64_t state); - void setPower(const bool on); - bool getPower(); - void on(); - void off(); - void setTempUnit(const bool celsius); - bool getTempUnit(void); - void setTemp(const uint8_t temp, const bool fahrenheit = false); - uint8_t getTemp(); - void setFan(const uint8_t speed); - uint8_t getFan(); - void setMode(const uint8_t mode); - uint8_t getMode(); - void setSwing(const bool on); - bool getSwing(); - bool convertSwing(const stdAc::swingv_t swing); - stdAc::swingv_t toCommonSwing(const bool swing); - void setSleep(const bool on); - bool getSleep(); - void setTimerEnabled(const bool on); - bool getTimerEnabled(void); - void setTimer(const uint16_t nr_of_mins); - uint16_t getTimer(void); - uint64_t getRaw(); - void setRaw(const uint64_t state); - uint8_t convertMode(const stdAc::opmode_t mode); - uint8_t convertFan(const stdAc::fanspeed_t speed); - static stdAc::opmode_t toCommonMode(const uint8_t mode); - static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); - stdAc::state_t toCommon(void); - String toString(); -#ifndef UNIT_TEST - - private: - IRsend _irsend; -#else - IRsendTest _irsend; -#endif - uint64_t remote_state; // The state of the IR remote. - uint8_t _saved_temp; // The previously user requested temp value. - uint8_t _saved_temp_units; // The previously user requested temp units. - void checksum(void); -}; -#endif // IR_TECHNIBEL_H_ diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Teco.h b/lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Teco.h deleted file mode 100644 index 770890caa..000000000 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/src/ir_Teco.h +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2019 Fabien Valthier - -/// @file -/// @brief Support for Teco protocols. - -// Supports: -// Brand: Alaska, Model: SAC9010QC A/C -// Brand: Alaska, Model: SAC9010QC remote - -#ifndef IR_TECO_H_ -#define IR_TECO_H_ - -#ifndef UNIT_TEST -#include -#endif -#include "IRremoteESP8266.h" -#include "IRsend.h" -#ifdef UNIT_TEST -#include "IRsend_test.h" -#endif - -// Constants. -const uint8_t kTecoAuto = 0; -const uint8_t kTecoCool = 1; -const uint8_t kTecoDry = 2; -const uint8_t kTecoFan = 3; -const uint8_t kTecoHeat = 4; -const uint8_t kTecoFanAuto = 0; // 0b00 -const uint8_t kTecoFanLow = 1; // 0b01 -const uint8_t kTecoFanMed = 2; // 0b10 -const uint8_t kTecoFanHigh = 3; // 0b11 -const uint8_t kTecoMinTemp = 16; // 16C -const uint8_t kTecoMaxTemp = 30; // 30C - -const uint8_t kTecoModeOffset = 0; -const uint8_t kTecoPowerOffset = 3; -const uint8_t kTecoFanOffset = 4; -const uint8_t kTecoFanSize = 2; // Nr. of bits -const uint8_t kTecoSwingOffset = 6; -const uint8_t kTecoSleepOffset = 7; -const uint8_t kTecoTempOffset = 8; -const uint8_t kTecoTempSize = 4; // Nr. of bits -const uint8_t kTecoTimerHalfHourOffset = 12; -const uint8_t kTecoTimerTensHoursOffset = 13; -const uint8_t kTecoTimerTensHoursSize = 2; // Nr. of bits -const uint8_t kTecoTimerOnOffset = 15; -const uint8_t kTecoTimerUnitHoursOffset = 16; -const uint8_t kTecoTimerUnitHoursSize = 4; // Nr. of bits -const uint8_t kTecoHumidOffset = 20; -const uint8_t kTecoLightOffset = 21; -const uint8_t kTecoSaveOffset = 23; -const uint64_t kTecoReset = 0b01001010000000000000010000000000000; -/* - (header mark and space) - Teco AC map read and to be sent in LSB with number of bits - - byte 0 = Cst 0x02 - byte 1 = Cst 0x50 - b6-7 = "AIR" 0, 1, 2 (Not Implemented) - byte 2: - b0 = Save - b1 = "Tree with bubbles" / Filter?? (Not Implemented) - b2 = Light/LED. - b3 = Humid - b4-7 = Timer hours (unit, not thenth) - hours: - 0000 (0) = +0 hour - 0001 (1) = +1 hour - ... - 1001 (9) = +9 hours - byte 3: = timer and Temperature - b0 = Timer (1 = On, 0 = Off) - b1-2 = Timer - number of 10hours - 10Hours: - 00 = 0 * 10hours of timer - 01 = 1 * 10 hours of timer - 10 = 2 * 10hours of timer - b3 = Timer - half hour (1=half hour on, 0 = round hour) - b4-7: Degrees C. - 0000 (0) = 16C - 0001 (1) = 17C - 0010 (2) = 18C - ... - 1101 (13) = 29C - 1110 (14) = 30C - byte 4: Basics - b0 = Sleep Mode (1 = On, 0 = Off) - b1 = Vent swing (1 = On, 0 = Off) - b2-3 = Fan - Fan: - 00 = Auto - 01 = Fan 1 - 10 = Fan 2 - 11 = Fan 3 or higher - b4 = Power Status (1 = On, 0 = Off) - b5-7 = Modes LSB first - Modes: - 000 = Auto (temp = 25C) - 001 = Cool - 010 = Dry (temp = 25C, but not shown) - 011 = Fan - 100 = Heat -*/ - -// Classes -/// Class for handling detailed Teco A/C messages. -class IRTecoAc { - public: - explicit IRTecoAc(const uint16_t pin, const bool inverted = false, - const bool use_modulation = true); - void stateReset(void); -#if SEND_TECO - void send(const uint16_t repeat = kTecoDefaultRepeat); - /// Run the calibration to calculate uSec timing offsets for this platform. - /// @return The uSec timing offset needed per modulation of the IR Led. - /// @note This will produce a 65ms IR signal pulse at 38kHz. - /// Only ever needs to be run once per object instantiation, if at all. - int8_t calibrate(void) { return _irsend.calibrate(); } -#endif // SEND_TECO - void begin(void); - void on(void); - void off(void); - - void setPower(const bool on); - bool getPower(void); - - void setTemp(const uint8_t temp); - uint8_t getTemp(void); - - void setFan(const uint8_t fan); - uint8_t getFan(void); - - void setMode(const uint8_t mode); - uint8_t getMode(void); - - void setSwing(const bool on); - bool getSwing(void); - - void setSleep(const bool on); - bool getSleep(void); - - void setLight(const bool on); - bool getLight(void); - - void setHumid(const bool on); - bool getHumid(void); - - void setSave(const bool on); - bool getSave(void); - - uint16_t getTimer(void); - void setTimer(const uint16_t mins); - - uint64_t getRaw(void); - void setRaw(const uint64_t new_code); - - uint8_t convertMode(const stdAc::opmode_t mode); - uint8_t convertFan(const stdAc::fanspeed_t speed); - static stdAc::opmode_t toCommonMode(const uint8_t mode); - static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed); - stdAc::state_t toCommon(void); - String toString(void); -#ifndef UNIT_TEST - - private: - IRsend _irsend; ///< Instance of the IR send class -#else // UNIT_TEST - /// @cond IGNORE - IRsendTest _irsend; ///< Instance of the testing IR send class - /// @endcond -#endif // UNIT_TEST - uint64_t remote_state; ///< The state of the IR remote in IR code form. - bool getTimerEnabled(void); -}; - -#endif // IR_TECO_H_ diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.github/CONTRIBUTING.md b/lib/lib_basic/IRremoteESP8266-2.7.15/.github/CONTRIBUTING.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.github/CONTRIBUTING.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/.github/CONTRIBUTING.md diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.github/Contributors.md b/lib/lib_basic/IRremoteESP8266-2.7.15/.github/Contributors.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.github/Contributors.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/.github/Contributors.md diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.github/issue_template.md b/lib/lib_basic/IRremoteESP8266-2.7.15/.github/issue_template.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.github/issue_template.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/.github/issue_template.md diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.gitignore b/lib/lib_basic/IRremoteESP8266-2.7.15/.gitignore similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.gitignore rename to lib/lib_basic/IRremoteESP8266-2.7.15/.gitignore diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.gitmodules b/lib/lib_basic/IRremoteESP8266-2.7.15/.gitmodules similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.gitmodules rename to lib/lib_basic/IRremoteESP8266-2.7.15/.gitmodules diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.style.yapf b/lib/lib_basic/IRremoteESP8266-2.7.15/.style.yapf similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.style.yapf rename to lib/lib_basic/IRremoteESP8266-2.7.15/.style.yapf diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/.travis.yml b/lib/lib_basic/IRremoteESP8266-2.7.15/.travis.yml similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/.travis.yml rename to lib/lib_basic/IRremoteESP8266-2.7.15/.travis.yml diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/CPPLINT.cfg b/lib/lib_basic/IRremoteESP8266-2.7.15/CPPLINT.cfg similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/CPPLINT.cfg rename to lib/lib_basic/IRremoteESP8266-2.7.15/CPPLINT.cfg diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/Doxyfile b/lib/lib_basic/IRremoteESP8266-2.7.15/Doxyfile similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/Doxyfile rename to lib/lib_basic/IRremoteESP8266-2.7.15/Doxyfile diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/LICENSE.txt b/lib/lib_basic/IRremoteESP8266-2.7.15/LICENSE.txt similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/LICENSE.txt rename to lib/lib_basic/IRremoteESP8266-2.7.15/LICENSE.txt diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/README.md b/lib/lib_basic/IRremoteESP8266-2.7.15/README.md similarity index 97% rename from lib/lib_basic/IRremoteESP8266-2.7.14/README.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/README.md index ab7f2b338..cf67962a4 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/README.md +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/README.md @@ -1,4 +1,4 @@ -# IRremoteESP8266 Library +![IRremoteESP8266 Library](./assets/images/banner.svg) [![Build Status](https://travis-ci.org/crankyoldgit/IRremoteESP8266.svg?branch=master)](https://travis-ci.org/crankyoldgit/IRremoteESP8266) [![arduino-library-badge](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) @@ -9,8 +9,8 @@ This library enables you to **send _and_ receive** infra-red signals on an [ESP8266](https://github.com/esp8266/Arduino) or an [ESP32](https://github.com/espressif/arduino-esp32) using the [Arduino framework](https://www.arduino.cc/) using common 940nm IR LEDs and common IR receiver modules. e.g. TSOP{17,22,24,36,38,44,48}* demodulators etc. -## v2.7.14 Now Available -Version 2.7.14 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. +## v2.7.15 Now Available +Version 2.7.15 of the library is now [available](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). You can view the [Release Notes](ReleaseNotes.md) for all the significant changes. #### Upgrading from pre-v2.0 Usage of the library has been slightly changed in v2.0. You will need to change your usage to work with v2.0 and beyond. You can read more about the changes required on our [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/README_de.md b/lib/lib_basic/IRremoteESP8266-2.7.15/README_de.md similarity index 97% rename from lib/lib_basic/IRremoteESP8266-2.7.14/README_de.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/README_de.md index 39c4ef489..770e061cf 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/README_de.md +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/README_de.md @@ -1,4 +1,4 @@ -# IRremoteESP8266 Library +![IRremoteESP8266 Library](./assets/images/banner.svg) [![Build-Status](https://travis-ci.org/crankyoldgit/IRremoteESP8266.svg?branch=master)](https://travis-ci.org/crankyoldgit/IRremoteESP8266) [![Arduino-Bibliothek-Abzeichen](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) @@ -9,8 +9,8 @@ Diese Programmbibliothek ermöglicht das **Senden _und_ Empfangen** von Infrarotsignalen mit [ESP8266](https://github.com/esp8266/Arduino)- und [ESP32](https://github.com/espressif/arduino-esp32)-Mikrocontrollern mithilfe des [Arduino-Frameworks](https://www.arduino.cc/) und handelsüblichen 940nm Infrarot-LEDs undIR-Empfängermodulen, wie zum Beispiel TSOP{17,22,24,36,38,44,48}*-Demodulatoren. -## v2.7.14 jetzt verfügbar -Version 2.7.14 der Bibliothek ist nun [verfügbar](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Die [Versionshinweise](ReleaseNotes.md) enthalten alle wichtigen Neuerungen. +## v2.7.15 jetzt verfügbar +Version 2.7.15 der Bibliothek ist nun [verfügbar](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Die [Versionshinweise](ReleaseNotes.md) enthalten alle wichtigen Neuerungen. #### Hinweis für Nutzer von Versionen vor v2.0 Die Benutzung der Bibliothek hat sich mit Version 2.0 leicht geändert. Einige Anpassungen im aufrufenden Code werden nötig sein, um mit Version ab 2.0 korrekt zu funktionieren. Mehr zu den Anpassungen finden sich auf unserer [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0)-Seite. diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/README_fr.md b/lib/lib_basic/IRremoteESP8266-2.7.15/README_fr.md similarity index 97% rename from lib/lib_basic/IRremoteESP8266-2.7.14/README_fr.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/README_fr.md index 91e2a76f0..820731366 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/README_fr.md +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/README_fr.md @@ -1,4 +1,4 @@ -# IRremoteESP8266 Library +![IRremoteESP8266 Library](./assets/images/banner.svg) [![Build Status](https://travis-ci.org/crankyoldgit/IRremoteESP8266.svg?branch=master)](https://travis-ci.org/crankyoldgit/IRremoteESP8266) [![arduino-library-badge](https://www.ardu-badge.com/badge/IRremoteESP8266.svg?)](https://www.ardu-badge.com/IRremoteESP8266) @@ -9,8 +9,8 @@ Cette librairie vous permetra de **recevoir et d'envoyer des signaux** infrarouge sur le protocole [ESP8266](https://github.com/esp8266/Arduino) ou sur le protocole [ESP32](https://github.com/espressif/arduino-esp32) en utilisant le [Arduino framework](https://www.arduino.cc/) qui utilise la norme 940nm IR LEDs et le module basique de reception d'onde IR. Exemple : TSOP{17,22,24,36,38,44,48}* modules etc. -## v2.7.14 disponible -Version 2.7.14 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. +## v2.7.15 disponible +Version 2.7.15 de la libraire est maintenant [disponible](https://github.com/crankyoldgit/IRremoteESP8266/releases/latest). Vous pouvez voir le [Release Notes](ReleaseNotes.md) pour tous les changements importants. #### mise à jour depuis pre-v2.0 L'utilisation de la librairie à un peu changer depuis la version in v2.0. Si vous voulez l'utiliser vous devrez changer votre utilisation aussi. Vous pouvez vous renseigner sur les précondition d'utilisation ici : [Upgrade to v2.0](https://github.com/crankyoldgit/IRremoteESP8266/wiki/Upgrading-to-v2.0) page. diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/ReleaseNotes.md b/lib/lib_basic/IRremoteESP8266-2.7.15/ReleaseNotes.md similarity index 97% rename from lib/lib_basic/IRremoteESP8266-2.7.14/ReleaseNotes.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/ReleaseNotes.md index 5478be920..7feab2ca3 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/ReleaseNotes.md +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/ReleaseNotes.md @@ -1,5 +1,32 @@ # Release Notes +## _v2.7.15 (20210213)_ + +**[BREAKING CHANGES]** +- Some Daikin2 constants have been changed. (#1393) + +**[Features]** +- Experimental basic support for EcoClim 56 & 15 bit protocols. (#1397 #1410) +- MITSUBISHI_AC: Add support for enabling Weekly Timer. (#1403 #1404) +- Mitsubishi ACs: Improve handling swing/vane settings. (#1399 #1401) +- MITSUBISHI_AC: Add support for half degrees. (#1398 #1400) +- Add `irutils::addSwing[V|H]ToString()` and adjust some constants (#1365 #1393) +- SharpAc: Add support for model A903, and improve `IRac` fan & power control. (#1387 #1390) +- Experimental support for Milestag2 (#1360 #1380) + +**[Misc]** +- Improve `IRac::sendAc()` documentation. (#1408 #1409) +- refactor ir_Transcold (#1407) +- refactor ir_Toshiba (#1395) +- Fix Travis-CI build issues. (#1396) +- refactor ir_Teco (#1392) +- Fujitsu A/C: Add warning/suggestions for AR-RAH1U devices (#1376 #1386) +- refactor ir_Technibel (#1385) +- Add the new logo and banner :tada: (#1371 #1372) +- Update references to sbprojects website. (#1381 #1383) +- refactor ir_Tcl (#1379) + + ## _v2.7.14 (20210103)_ **[Bug Fixes]** diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/SupportedProtocols.md b/lib/lib_basic/IRremoteESP8266-2.7.15/SupportedProtocols.md similarity index 94% rename from lib/lib_basic/IRremoteESP8266-2.7.14/SupportedProtocols.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/SupportedProtocols.md index 7fe0409ff..07a4506b2 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/SupportedProtocols.md +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/SupportedProtocols.md @@ -1,6 +1,6 @@ + Last generated: Fri 12 Feb 2021 23:30:54 +0000 ---> # IR Protocols supported by this library | Protocol | Brand | Model | A/C Model | Detailed A/C Support | @@ -22,12 +22,13 @@ | [Denon](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Denon.cpp) | **Denon** | AVR-3801 A/V Receiver (probably) | | - | | [Dish](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Dish.cpp) | **DISH NETWORK** | echostar 301 | | - | | [Doshisha](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Doshisha.cpp) | **Doshisha** | CZ-S32D LED Light
CZ-S38D LED Light
CZ-S50D LED Light
RCZ01 remote | | - | +| [EcoClim](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_EcoClim.cpp) | **EcoClim** | HYSFR-P348 remote
ZC200DPO A/C | | - | | [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[AUX](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | KFR-35GW/BpNFW=3 A/C
YKR-T/011 remote | | Yes | | [Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.cpp) | **[Electra](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Electra.h)** | Classic INV 17 / AXW12DCS A/C
YKR-M/003E remote | | Yes | | [EliteScreens](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_EliteScreens.cpp) | **Elite Screens** | CineTension2 / CineTension3 series
Home2 / Home3 series
Spectrum series
VMAX Plus4 series
VMAX2 / VMAX2 Plus series
ZSP-IR-B / ZSP-IR-W remote | | - | | [EliteScreens](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_EliteScreens.cpp) | **Lumene Screens** | Embassy | | - | | [Epson](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Epson.cpp) | **Epson** | EN-TW9100W Projector | | - | -| [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AGTV14LAC A/C (ARRAH2E)
AR-DB1 remote (ARDB1)
AR-DL10 remote (ARDB1)
AR-RAC1E remote (ARRAH2E)
AR-RAE1E remote (ARRAH2E)
AR-RAH2E remote (ARRAH2E)
AR-REB1E remote (ARREB1E)
AR-RY4 remote (ARRY4)
AST9RSGCW A/C (ARDB1)
ASTB09LBC A/C (ARRY4)
ASU30C1 A/C (ARDB1)
ASYG30LFCA A/C (ARRAH2E)
ASYG7LMCA A/C (ARREB1E) | ARDB1
ARJW2
ARRAH2E
ARREB1E
ARRY4 | Yes | +| [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AGTV14LAC A/C (ARRAH2E)
AR-DB1 remote (ARDB1)
AR-DL10 remote (ARDB1)
AR-RAC1E remote (ARRAH2E)
AR-RAE1E remote (ARRAH2E)
AR-RAH1U remote (ARREB1E)
AR-RAH2E remote (ARRAH2E)
AR-REB1E remote (ARREB1E)
AR-RY4 remote (ARRY4)
AST9RSGCW A/C (ARDB1)
ASTB09LBC A/C (ARRY4)
ASU12RLF A/C (ARREB1E)
ASU30C1 A/C (ARDB1)
ASYG30LFCA A/C (ARRAH2E)
ASYG7LMCA A/C (ARREB1E) | ARDB1
ARJW2
ARRAH2E
ARREB1E
ARRY4 | Yes | | [Fujitsu](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.cpp) | **[Fujitsu General](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Fujitsu.h)** | AOHG09LLC A/C (ARRAH2E)
AR-JW2 remote (ARJW2)
AR-RCE1E remote (ARRAH2E)
ASHG09LLCA A/C (ARRAH2E) | ARDB1
ARJW2
ARRAH2E
ARREB1E
ARRY4 | Yes | | [GICable](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GICable.cpp) | **G.I. Cable** | XRC-200 remote | | - | | [GlobalCache](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GlobalCache.cpp) | **Global Cache** | Control Tower IR DB | | - | @@ -60,9 +61,10 @@ | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | FS40-7AR Stand Fan (MIDEA24) | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[MrCool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG57A6/BGEFU1 remote (MIDEA) | | Yes | | [Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.cpp) | **[Pioneer System](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Midea.h)** | RG66B6(B)/BGEFU1 remote (MIDEA)
RUBO18GMFILCAD A/C (18K BTU) (MIDEA)
RYBO12GMFILCAD A/C (12K BTU) (MIDEA)
UB018GMFILCFHD A/C (12K BTU) (MIDEA)
WS012GMFI22HLD A/C (12K BTU) (MIDEA)
WS018GMFI22HLD A/C (12K BTU) (MIDEA) | | Yes | +| [MilesTag2](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MilesTag2.cpp) | **Milestag2** | Various | | - | | [Mirage](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mirage.cpp) | **Mirage** | VLU series A/C | | - | | [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | HC3000 Projector (MITSUBISHI2)
KM14A 0179213 remote
MS-GK24VA A/C
TV (MITSUBISHI) | | Yes | -| [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | 001CP T7WE10714 remote (MITSUBISHI136)
KPOA remote (MITSUBISHI112)
MSH-A24WV A/C (MITSUBISHI112)
MUH-A24WV A/C (MITSUBISHI112)
PEAD-RP71JAA Ducted A/C (MITSUBISHI136) | | Yes | +| [Mitsubishi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.cpp) | **[Mitsubishi Electric](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Mitsubishi.h)** | 001CP T7WE10714 remote (MITSUBISHI136)
KPOA remote (MITSUBISHI112)
MLZ-RX5017AS A/C (MITSUBISHI_AC)
MSH-A24WV A/C (MITSUBISHI112)
MSZ-GV2519 A/C (MITSUBISHI_AC)
MUH-A24WV A/C (MITSUBISHI112)
PEAD-RP71JAA Ducted A/C (MITSUBISHI136)
RH151/M21ED6426 remote (MITSUBISHI_AC)
SG153/M21EDF426 remote (MITSUBISHI_AC) | | Yes | | [MitsubishiHeavy](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.cpp) | **[Mitsubishi Heavy Industries](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_MitsubishiHeavy.h)** | RKX502A001C remote (88 bit)
RLA502A700B remote (152 bit)
SRKxxZJ-S A/C (88 bit)
SRKxxZM-S A/C (152 bit)
SRKxxZMXA-S A/C (152 bit) | | Yes | | [Multibrackets](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Multibrackets.cpp) | **Multibrackets** | Motorized Swing mount large - 4500 | | - | | [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Aloka](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | SleepyLights LED Lamp | | - | @@ -80,7 +82,7 @@ | [RCMM](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_RCMM.cpp) | **Microsoft** | XBOX 360 | | - | | [Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.cpp) | **[Samsung](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Samsung.h)** | AH59-02692E Soundbar remote (SAMSUNG36)
AK59-00167A Bluray remote (SAMSUNG36)
AR09FSSDAWKNFA A/C (SAMSUNG_AC)
AR12HSSDBWKNEU A/C (SAMSUNG_AC)
AR12KSFPEWQNET A/C (SAMSUNG_AC)
AR12NXCXAWKXEU A/C (SAMSUNG_AC)
BN59-01178B TV remote (SAMSUNG)
DB63-03556X003 remote
DB93-16761C remote
HW-J551 Soundbar (SAMSUNG36)
IEC-R03 remote
UA55H6300 TV (SAMSUNG) | | Yes | | [Sanyo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sanyo.cpp) | **[Sanyo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sanyo.h)** | LC7461 transmitter IC (SANYO_LC7461)
RCS-2HS4E remote (SANYO_AC)
RCS-2S4E remote (SANYO_AC)
SA 8650B - disabled
SAP-K121AHA A/C (SANYO_AC)
SAP-K242AH A/C (SANYO_AC) | | Yes | -| [Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.h)** | AH-AxSAY A/C (A907)
AH-XP10NRY A/C (A907)
AY-ZP40KR A/C (A907)
CRMC-820 JBEZ remote (A907)
CRMC-A705 JBEZ remote (A705)
CRMC-A907 JBEZ remote (A907)
LC-52D62U TV | A705
A907 | Yes | +| [Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.h)** | AH-A12REVP-1 A/C (A903)
AH-AxSAY A/C (A907)
AH-PR13-GL A/C (A903)
AH-XP10NRY A/C (A903)
AY-ZP40KR A/C (A907)
CRMC-820 JBEZ remote (A903)
CRMC-A705 JBEZ remote (A705)
CRMC-A863 JBEZ remote (A903)
CRMC-A903JBEZ remote (A903)
CRMC-A907 JBEZ remote (A907)
LC-52D62U TV | A705
A903
A907 | Yes | | [Sherwood](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sherwood.cpp) | **Sherwood** | RC-138 remote
RD6505(B) Receiver | | - | | [Sony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sony.cpp) | **Sony** | HT-CT380 Soundbar (Uses 38kHz & 3 repeats) | | - | | [Symphony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Symphony.cpp) | **Blyss** | Owen-SW-5 3 Fan
WP-YK8 090218 remote | | - | @@ -135,6 +137,7 @@ - DENON - DISH - DOSHISHA +- ECOCLIM - ELECTRA_AC - ELITESCREENS - EPSON @@ -162,6 +165,7 @@ - METZ - MIDEA - MIDEA24 +- MILESTAG2 - MIRAGE - MITSUBISHI - MITSUBISHI112 diff --git a/lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/banner.svg b/lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/banner.svg new file mode 100644 index 000000000..d1e2c3592 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/banner.svg @@ -0,0 +1,142 @@ +
Custom logo

IRremoteESP8266

Infrared remote library for ESP8266/ESP32: send and receive infrared signals with multiple protocols

+
\ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/logo.svg b/lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/logo.svg new file mode 100644 index 000000000..a42691f96 --- /dev/null +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/assets/images/logo.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/README.md b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/README.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/README.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/README.md diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/README_de.md b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/README_de.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/README_de.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/README_de.md diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/README_fr.md b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/README_fr.md similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/README_fr.md rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/README_fr.md diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/_config.yml b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/_config.yml similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/_config.yml rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/_config.yml diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8cpp.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8cpp.html similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8cpp.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8cpp.html diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8h.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8h.html similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8h.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8h.html diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8h_source.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8h_source.html similarity index 98% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8h_source.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8h_source.html index 051b58a17..eb32f990c 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRac_8h_source.html +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRac_8h_source.html @@ -529,93 +529,93 @@ $(function() {
Support for Kelvinator A/C protocols.
Class for handling detailed Samsung A/C messages.
Definition: ir_Samsung.h:130
void hitachi(IRHitachiAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Hitachi A/C message with the supplied settings.
Definition: IRac.cpp:1073
-
Class for handling detailed Toshiba A/C messages.
Definition: ir_Toshiba.h:100
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:771
+
Class for handling detailed Toshiba A/C messages.
Definition: ir_Toshiba.h:118
+
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:785
stdAc::state_t getStatePrev(void)
Get the previous internal A/C climate state that should have already been sent to the device....
Definition: IRac.cpp:133
stdAc::state_t getState(void)
Get the current internal A/C climate state.
Definition: IRac.cpp:128
Class for handling detailed Mitsubishi Heavy 152-bit A/C messages.
Definition: ir_MitsubishiHeavy.h:184
-
static stdAc::swingh_t strToSwingH(const char *str, const stdAc::swingh_t def=stdAc::swingh_t::kOff)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2842
-
void sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model, const bool on, const bool prev_power, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool filter, const bool clean)
Send a Sharp A/C message with the supplied settings.
Definition: IRac.cpp:1725
+
static stdAc::swingh_t strToSwingH(const char *str, const stdAc::swingh_t def=stdAc::swingh_t::kOff)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2848
+
void sharp(IRSharpAc *ac, const sharp_ac_remote_model_t model, const bool on, const bool prev_power, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool filter, const bool clean)
Send a Sharp A/C message with the supplied settings.
Definition: IRac.cpp:1727
void hitachi344(IRHitachiAc344 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Hitachi 344-bit A/C message with the supplied settings.
Definition: IRac.cpp:1149
Support for Electra A/C protocols.
-
void markAsSent(void)
Update the previous state to the current one.
Definition: IRac.cpp:2705
+
void markAsSent(void)
Update the previous state to the current one.
Definition: IRac.cpp:2711
swingv_t
Common A/C settings for Vertical Swing.
Definition: IRsend.h:70
Airwell "Manchester code" based protocol. Some other Airwell products use the COOLIX protocol.
void daikin2(IRDaikin2 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool econo, const bool filter, const bool clean, const bool beep, const int16_t sleep=-1, const int16_t clock=-1)
Send a Daikin2 A/C message with the supplied settings.
Definition: IRac.cpp:691
Support for Trotec protocols.
-
void sanyo(IRSanyoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool beep, const int16_t sleep=-1)
Send a Toshiba A/C message with the supplied settings.
Definition: IRac.cpp:1681
-
Class for handling detailed Daikin 280-bit A/C messages.
Definition: ir_Daikin.h:651
+
void sanyo(IRSanyoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool beep, const int16_t sleep=-1)
Send a Toshiba A/C message with the supplied settings.
Definition: IRac.cpp:1683
+
Class for handling detailed Daikin 280-bit A/C messages.
Definition: ir_Daikin.h:658
void lg(IRLgAc *ac, const lg_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
Send a LG A/C message with the supplied settings.
Definition: IRac.cpp:1255
Class for handling detailed Delonghi A/C messages.
Definition: ir_Delonghi.h:73
Class for handling detailed Corona A/C messages.
Definition: ir_Corona.h:107
void kelvinator(IRKelvinatorAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean)
Send a Kelvinator A/C message with the supplied settings.
Definition: IRac.cpp:1221
-
Class for handling detailed Daikin 312-bit A/C messages.
Definition: ir_Daikin.h:733
+
Class for handling detailed Daikin 312-bit A/C messages.
Definition: ir_Daikin.h:740
Support for Neoclima protocols. Analysis by crankyoldgit & AndreyShpilevoy.
-
Class for handling detailed Daikin 128-bit A/C messages.
Definition: ir_Daikin.h:994
+
Class for handling detailed Daikin 128-bit A/C messages.
Definition: ir_Daikin.h:1001
fanspeed_t
Common A/C settings for Fan Speeds.
Definition: IRsend.h:58
Support for Sharp protocols.
-
static String fanspeedToString(const stdAc::fanspeed_t speed)
Convert the supplied fan speed enum into the appropriate String.
Definition: IRac.cpp:2992
-
whirlpool_ac_remote_model_t
Whirlpool A/C model numbers.
Definition: IRsend.h:164
+
static String fanspeedToString(const stdAc::fanspeed_t speed)
Convert the supplied fan speed enum into the appropriate String.
Definition: IRac.cpp:2998
+
whirlpool_ac_remote_model_t
Whirlpool A/C model numbers.
Definition: IRsend.h:169
Carrier A/C.
-
void whirlpool(IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1, const int16_t clock=-1)
Send a Whirlpool A/C message with the supplied settings.
Definition: IRac.cpp:2036
+
void whirlpool(IRWhirlpoolAc *ac, const whirlpool_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1, const int16_t clock=-1)
Send a Whirlpool A/C message with the supplied settings.
Definition: IRac.cpp:2038
Results returned from the decoder.
Definition: IRrecv.h:92
void daikin64(IRDaikin64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const int16_t sleep=-1, const int16_t clock=-1)
Send a Daikin 64-bit A/C message with the supplied settings.
Definition: IRac.cpp:760
-
void voltas(IRVoltas *ac, const voltas_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
Send a Voltas A/C message with the supplied settings.
Definition: IRac.cpp:1995
-
void tcl112(IRTcl112Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool econo, const bool filter)
Send a TCL 112-bit A/C message with the supplied settings.
Definition: IRac.cpp:1778
-
void transcold(IRTranscoldAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Transcold A/C message with the supplied settings.
Definition: IRac.cpp:2073
-
bool sendAc(void)
Send an A/C message based soley on our internal state.
Definition: IRac.cpp:2711
-
static bool cmpStates(const stdAc::state_t a, const stdAc::state_t b)
Compare two AirCon states.
Definition: IRac.cpp:2722
+
void voltas(IRVoltas *ac, const voltas_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
Send a Voltas A/C message with the supplied settings.
Definition: IRac.cpp:1997
+
void tcl112(IRTcl112Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool econo, const bool filter)
Send a TCL 112-bit A/C message with the supplied settings.
Definition: IRac.cpp:1780
+
void transcold(IRTranscoldAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Transcold A/C message with the supplied settings.
Definition: IRac.cpp:2075
+
bool sendAc(void)
Send an A/C message based soley on our internal state.
Definition: IRac.cpp:2717
+
static bool cmpStates(const stdAc::state_t a, const stdAc::state_t b)
Compare two AirCon states.
Definition: IRac.cpp:2728
Support for Midea protocols. Midea added by crankyoldgit & bwze.
Support for Daikin A/C protocols.
-
gree_ac_remote_model_t
Gree A/C model numbers.
Definition: IRsend.h:129
-
Class for handling detailed Daikin 64-bit A/C messages.
Definition: ir_Daikin.h:1124
+
gree_ac_remote_model_t
Gree A/C model numbers.
Definition: IRsend.h:133
+
Class for handling detailed Daikin 64-bit A/C messages.
Definition: ir_Daikin.h:1131
Support for Coolix A/C protocols.
-
void vestel(IRVestelAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1, const int16_t clock=-1, const bool sendNormal=true)
Send a Vestel A/C message with the supplied settings.
Definition: IRac.cpp:1953
+
void vestel(IRVestelAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1, const int16_t clock=-1, const bool sendNormal=true)
Send a Vestel A/C message with the supplied settings.
Definition: IRac.cpp:1955
Class for handling detailed Hitachi 53-byte/424-bit A/C messages.
Definition: ir_Hitachi.h:371
void daikin(IRDaikinESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool clean)
Send a Daikin A/C message with the supplied settings.
Definition: IRac.cpp:527
IRac(const uint16_t pin, const bool inverted=false, const bool use_modulation=true)
Class constructor.
Definition: IRac.cpp:54
-
Class for handling detailed Daikin 216-bit A/C messages.
Definition: ir_Daikin.h:829
+
Class for handling detailed Daikin 216-bit A/C messages.
Definition: ir_Daikin.h:836
Class for handling detailed Voltas A/C messages.
Definition: ir_Voltas.h:90
-
hitachi_ac1_remote_model_t
HITACHI_AC1 A/C model numbers.
Definition: IRsend.h:135
-
void samsung(IRSamsungAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean, const bool beep, const bool prevpower=true, const bool forcepower=true)
Send a Samsung A/C message with the supplied settings.
Definition: IRac.cpp:1640
+
hitachi_ac1_remote_model_t
HITACHI_AC1 A/C model numbers.
Definition: IRsend.h:139
+
void samsung(IRSamsungAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool filter, const bool clean, const bool beep, const bool prevpower=true, const bool forcepower=true)
Send a Samsung A/C message with the supplied settings.
Definition: IRac.cpp:1642
void daikin128(IRDaikin128 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool light, const bool econo, const int16_t sleep=-1, const int16_t clock=-1)
Send a Daikin 128-bit A/C message with the supplied settings.
Definition: IRac.cpp:567
Class for handling detailed Hitachi 224-bit A/C messages.
Definition: ir_Hitachi.h:246
const int8_t kGpioUnused
A placeholder for not using an actual GPIO.
Definition: IRac.h:45
-
Common functions for use with all A/Cs supported by the IRac class.
Definition: IRac.cpp:3061
+
Common functions for use with all A/Cs supported by the IRac class.
Definition: IRac.cpp:3067
Class for handling detailed Sanyo A/C messages.
Definition: ir_Sanyo.h:106
void haier(IRHaierAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool filter, const int16_t sleep=-1, const int16_t clock=-1)
Send a Haier A/C message with the supplied settings.
Definition: IRac.cpp:1004
Class for handling detailed Whirlpool A/C messages.
Definition: ir_Whirlpool.h:91
Class for handling detailed Hitachi 344-bit A/C messages.
Definition: ir_Hitachi.h:459
-
static String boolToString(const bool value)
Convert the supplied boolean into the appropriate String.
Definition: IRac.cpp:2963
+
static String boolToString(const bool value)
Convert the supplied boolean into the appropriate String.
Definition: IRac.cpp:2969
stdAc::state_t next
The state we want the device to be in after we send.
Definition: IRac.h:97
-
std::string String
Definition: IRremoteESP8266.h:1178
-
Class for handling detailed Mitsubishi 144-bit A/C messages.
Definition: ir_Mitsubishi.h:221
-
void trotec(IRTrotecESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1)
Send a Trotec A/C message with the supplied settings.
Definition: IRac.cpp:1916
-
static int16_t strToModel(const char *str, const int16_t def=-1)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2882
+
std::string String
Definition: IRremoteESP8266.h:1199
+
Class for handling detailed Mitsubishi 144-bit A/C messages.
Definition: ir_Mitsubishi.h:242
+
void trotec(IRTrotecESP *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const int16_t sleep=-1)
Send a Trotec A/C message with the supplied settings.
Definition: IRac.cpp:1918
+
static int16_t strToModel(const char *str, const int16_t def=-1)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2888
Class for handling detailed Amcor A/C messages.
Definition: ir_Amcor.h:90
-
Class for handling detailed Mitsubishi 122-bit A/C messages.
Definition: ir_Mitsubishi.h:339
-
Class for handling detailed TCL A/C messages.
Definition: ir_Tcl.h:63
+
Class for handling detailed Mitsubishi 122-bit A/C messages.
Definition: ir_Mitsubishi.h:362
+
Class for handling detailed TCL A/C messages.
Definition: ir_Tcl.h:89
void daikin176(IRDaikin176 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingh_t swingh)
Send a Daikin 176-bit A/C message with the supplied settings.
Definition: IRac.cpp:659
Class for handling detailed Electra A/C messages.
Definition: ir_Electra.h:98
Support for TCL protocols.
-
bool hasStateChanged(void)
Check if the internal state has changed from what was previously sent.
Definition: IRac.cpp:2734
+
bool hasStateChanged(void)
Check if the internal state has changed from what was previously sent.
Definition: IRac.cpp:2740
void haierYrwo2(IRHaierACYRW02 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool filter, const int16_t sleep=-1)
Send a Haier YRWO2 A/C message with the supplied settings.
Definition: IRac.cpp:1041
void daikin216(IRDaikin216 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo)
Send a Daikin 216-bit A/C message with the supplied settings.
Definition: IRac.cpp:730
Support for Transcold A/C protocols.
Support for Hitachi A/C protocols.
Support for Panasonic protocols.
-
static stdAc::state_t handleToggles(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)
Create a new state base on desired & previous states but handle any state changes for options that ne...
Definition: IRac.cpp:2122
-
Class for handling detailed Mitsubishi 136-bit A/C messages.
Definition: ir_Mitsubishi.h:285
-
panasonic_ac_remote_model_t
Panasonic A/C model numbers.
Definition: IRsend.h:141
+
static stdAc::state_t handleToggles(const stdAc::state_t desired, const stdAc::state_t *prev=NULL)
Create a new state base on desired & previous states but handle any state changes for options that ne...
Definition: IRac.cpp:2124
+
Class for handling detailed Mitsubishi 136-bit A/C messages.
Definition: ir_Mitsubishi.h:308
+
panasonic_ac_remote_model_t
Panasonic A/C model numbers.
Definition: IRsend.h:145
swingh_t
Common A/C settings for Horizontal Swing.
Definition: IRsend.h:83
-
void mitsubishi112(IRMitsubishi112 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet)
Send a Mitsubishi 112-bit A/C message with the supplied settings.
Definition: IRac.cpp:1365
-
bool decodeToState(const decode_results *decode, stdAc::state_t *result, const stdAc::state_t *prev)
Convert a valid IR A/C remote message that we understand enough into a Common A/C state.
Definition: IRac.cpp:3430
+
void mitsubishi112(IRMitsubishi112 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet)
Send a Mitsubishi 112-bit A/C message with the supplied settings.
Definition: IRac.cpp:1367
+
bool decodeToState(const decode_results *decode, stdAc::state_t *result, const stdAc::state_t *prev)
Convert a valid IR A/C remote message that we understand enough into a Common A/C state.
Definition: IRac.cpp:3436
Class for handling detailed Hitachi 104-bit A/C messages.
Definition: ir_Hitachi.h:303
void hitachi424(IRHitachiAc424 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)
Send a Hitachi 424-bit A/C message with the supplied settings.
Definition: IRac.cpp:1183
Support for Samsung protocols. Samsung originally added from https://github.com/shirriff/Arduino-IRre...
-
String resultAcToString(const decode_results *const result)
Display the human readable state of an A/C message if we can.
Definition: IRac.cpp:3067
+
String resultAcToString(const decode_results *const result)
Display the human readable state of an A/C message if we can.
Definition: IRac.cpp:3073
void daikin152(IRDaikin152 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet, const bool turbo, const bool econo)
Send a Daikin 152-bit A/C message with the supplied settings.
Definition: IRac.cpp:604
fujitsu_ac_remote_model_t
Fujitsu A/C model numbers.
Definition: IRsend.h:120
Support for Gree A/C protocols.
@@ -623,56 +623,56 @@ $(function() {
Class for handling detailed Midea A/C messages.
Definition: ir_Midea.h:151
Class for handling detailed Kelvinator A/C messages.
Definition: ir_Kelvinator.h:121
bool _inverted
IR LED is lit when GPIO is LOW (true) or HIGH (false)?
Definition: IRac.h:103
-
Class for handling detailed Fujitsu A/C messages.
Definition: ir_Fujitsu.h:113
+
Class for handling detailed Fujitsu A/C messages.
Definition: ir_Fujitsu.h:120
Support for Mitsubishi Heavy Industry protocols. Code to emulate Mitsubishi Heavy Industries A/C IR r...
Class for handling detailed Coolix A/C messages.
Definition: ir_Coolix.h:112
void midea(IRMideaAC *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo, const bool light, const int16_t sleep=-1)
Send a Midea A/C message with the supplied settings.
Definition: IRac.cpp:1292
-
void panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool filter, const int16_t clock=-1)
Send a Panasonic A/C message with the supplied settings.
Definition: IRac.cpp:1562
-
static String swingvToString(const stdAc::swingv_t swingv)
Convert the supplied enum into the appropriate String.
Definition: IRac.cpp:3014
+
void panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool filter, const int16_t clock=-1)
Send a Panasonic A/C message with the supplied settings.
Definition: IRac.cpp:1564
+
static String swingvToString(const stdAc::swingv_t swingv)
Convert the supplied enum into the appropriate String.
Definition: IRac.cpp:3020
Support for Mitsubishi protocols. Mitsubishi (TV) decoding added from https://github....
A universal/common/generic interface for controling supported A/Cs.
Definition: IRac.h:49
Support for Teco protocols.
void gree(IRGreeAC *ac, const gree_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)
Send a Gree A/C message with the supplied settings.
Definition: IRac.cpp:966
Delonghi A/C.
void electra(IRElectraAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool lighttoggle, const bool clean)
Send an Electra A/C message with the supplied settings.
Definition: IRac.cpp:817
-
static stdAc::state_t cleanState(const stdAc::state_t state)
Create a new state base on the provided state that has been suitably fixed.
Definition: IRac.cpp:2109
+
static stdAc::state_t cleanState(const stdAc::state_t state)
Create a new state base on the provided state that has been suitably fixed.
Definition: IRac.cpp:2111
Support for Argo Ulisse 13 DCI Mobile Split ACs.
void mitsubishi(IRMitsubishiAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const int16_t clock=-1)
Send a Mitsubishi A/C message with the supplied settings.
Definition: IRac.cpp:1330
void amcor(IRAmcorAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan)
Send an Amcor A/C message with the supplied settings.
Definition: IRac.cpp:330
-
Class for handling detailed Technibel A/C messages.
Definition: ir_Technibel.h:108
+
Class for handling detailed Technibel A/C messages.
Definition: ir_Technibel.h:77
Class for handling detailed Airwell A/C messages.
Definition: ir_Airwell.h:60
Support for Voltas A/C protocol.
-
Class for handling detailed Daikin 152-bit A/C messages.
Definition: ir_Daikin.h:1064
+
Class for handling detailed Daikin 152-bit A/C messages.
Definition: ir_Daikin.h:1071
Class for handling detailed LG A/C messages.
Definition: ir_LG.h:67
Support for Fujitsu A/C protocols. Fujitsu A/C support added by Jonny Graham.
Class for handling detailed Haier A/C messages.
Definition: ir_Haier.h:244
-
void neoclima(IRNeoclimaAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const bool filter, const int16_t sleep=-1)
Send a Neoclima A/C message with the supplied settings.
Definition: IRac.cpp:1521
-
Class for handling detailed Daikin 160-bit A/C messages.
Definition: ir_Daikin.h:885
-
static String opmodeToString(const stdAc::opmode_t mode)
Convert the supplied operation mode into the appropriate String.
Definition: IRac.cpp:2970
-
Class for handling detailed Sharp A/C messages.
Definition: ir_Sharp.h:131
-
void toshiba(IRToshibaAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo)
Send a Toshiba A/C message with the supplied settings.
Definition: IRac.cpp:1880
+
void neoclima(IRNeoclimaAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool light, const bool filter, const int16_t sleep=-1)
Send a Neoclima A/C message with the supplied settings.
Definition: IRac.cpp:1523
+
Class for handling detailed Daikin 160-bit A/C messages.
Definition: ir_Daikin.h:892
+
static String opmodeToString(const stdAc::opmode_t mode)
Convert the supplied operation mode into the appropriate String.
Definition: IRac.cpp:2976
+
Class for handling detailed Sharp A/C messages.
Definition: ir_Sharp.h:137
+
void toshiba(IRToshibaAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool econo)
Send a Toshiba A/C message with the supplied settings.
Definition: IRac.cpp:1882
Support for Goodweather compatible HVAC protocols.
void argo(IRArgoAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const int16_t sleep=-1)
Send an Argo A/C message with the supplied settings.
Definition: IRac.cpp:362
-
lg_ac_remote_model_t
LG A/C model numbers.
Definition: IRsend.h:170
-
void mitsubishi136(IRMitsubishi136 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet)
Send a Mitsubishi 136-bit A/C message with the supplied settings.
Definition: IRac.cpp:1401
+
lg_ac_remote_model_t
LG A/C model numbers.
Definition: IRsend.h:175
+
void mitsubishi136(IRMitsubishi136 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool quiet)
Send a Mitsubishi 136-bit A/C message with the supplied settings.
Definition: IRac.cpp:1403
bool _modulation
Is frequency modulation to be used?
Definition: IRac.h:104
-
void teco(IRTecoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool light, const int16_t sleep=-1)
Send a Teco A/C message with the supplied settings.
Definition: IRac.cpp:1847
-
static stdAc::opmode_t strToOpmode(const char *str, const stdAc::opmode_t def=stdAc::opmode_t::kAuto)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2740
+
void teco(IRTecoAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool light, const int16_t sleep=-1)
Send a Teco A/C message with the supplied settings.
Definition: IRac.cpp:1849
+
static stdAc::opmode_t strToOpmode(const char *str, const stdAc::opmode_t def=stdAc::opmode_t::kAuto)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2746
Support for Sanyo protocols. Sanyo LC7461 support originally by marcosamarinho Sanyo SA 8650B origina...
void hitachi1(IRHitachiAc1 *ac, const hitachi_ac1_remote_model_t model, const bool on, const bool power_toggle, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool swing_toggle, const int16_t sleep=-1)
Send a Hitachi1 A/C message with the supplied settings.
Definition: IRac.cpp:1110
-
Class for handling detailed Transcold A/C messages.
Definition: ir_Transcold.h:111
+
Class for handling detailed Transcold A/C messages.
Definition: ir_Transcold.h:120
-
void panasonic32(IRPanasonicAc32 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Panasonic A/C message with the supplied settings.
Definition: IRac.cpp:1598
+
void panasonic32(IRPanasonicAc32 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh)
Send a Panasonic A/C message with the supplied settings.
Definition: IRac.cpp:1600
Support for Whirlpool protocols. Decoding help from: @redmusicxd, @josh929800, @raducostea.
-
static bool strToBool(const char *str, const bool def=false)
Convert the supplied str into the appropriate boolean value.
Definition: IRac.cpp:2945
-
void mitsubishiHeavy88(IRMitsubishiHeavy88Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool clean)
Send a Mitsubishi Heavy 88-bit A/C message with the supplied settings.
Definition: IRac.cpp:1436
-
static stdAc::swingv_t strToSwingV(const char *str, const stdAc::swingv_t def=stdAc::swingv_t::kOff)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2801
+
static bool strToBool(const char *str, const bool def=false)
Convert the supplied str into the appropriate boolean value.
Definition: IRac.cpp:2951
+
void mitsubishiHeavy88(IRMitsubishiHeavy88Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool econo, const bool clean)
Send a Mitsubishi Heavy 88-bit A/C message with the supplied settings.
Definition: IRac.cpp:1438
+
static stdAc::swingv_t strToSwingV(const char *str, const stdAc::swingv_t def=stdAc::swingv_t::kOff)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2807
Class for handling detailed Vestel A/C messages.
Definition: ir_Vestel.h:116
Class for handling detailed Panasonic 32bit A/C messages.
Definition: ir_Panasonic.h:219
Class for handling detailed Trotec A/C messages.
Definition: ir_Trotec.h:76
-
Class for handling detailed Teco A/C messages.
Definition: ir_Teco.h:107
-
static String swinghToString(const stdAc::swingh_t swingh)
Convert the supplied enum into the appropriate String.
Definition: IRac.cpp:3038
+
Class for handling detailed Teco A/C messages.
Definition: ir_Teco.h:62
+
static String swinghToString(const stdAc::swingh_t swingh)
Convert the supplied enum into the appropriate String.
Definition: IRac.cpp:3044
void fujitsu(IRFujitsuAC *ac, const fujitsu_ac_remote_model_t model, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
Send a Fujitsu A/C message with the supplied settings.
Definition: IRac.cpp:860
Support for Technibel protocol.
void delonghiac(IRDelonghiAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const bool turbo, const int16_t sleep=-1)
Send a Delonghi A/C message with the supplied settings.
Definition: IRac.cpp:790
@@ -681,13 +681,13 @@ $(function() {
void daikin160(IRDaikin160 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv)
Send a Daikin 160-bit A/C message with the supplied settings.
Definition: IRac.cpp:637
void corona(IRCoronaAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool econo)
Send a Corona A/C message with the supplied settings.
Definition: IRac.cpp:492
static void initState(stdAc::state_t *state, const decode_type_t vendor, const int16_t model, const bool power, const stdAc::opmode_t mode, const float degrees, const bool celsius, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool light, const bool filter, const bool clean, const bool beep, const int16_t sleep, const int16_t clock)
Initialise the given state with the supplied settings.
Definition: IRac.cpp:85
-
void mitsubishiHeavy152(IRMitsubishiHeavy152Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
Send a Mitsubishi Heavy 152-bit A/C message with the supplied settings.
Definition: IRac.cpp:1477
+
void mitsubishiHeavy152(IRMitsubishiHeavy152Ac *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool quiet, const bool turbo, const bool econo, const bool filter, const bool clean, const int16_t sleep=-1)
Send a Mitsubishi Heavy 152-bit A/C message with the supplied settings.
Definition: IRac.cpp:1479
Support for Haier A/C protocols. The specifics of reverse engineering the protocols details:
Class for handling detailed Mitsubishi Heavy 88-bit A/C messages.
Definition: ir_MitsubishiHeavy.h:271
Class for handling detailed Gree A/C messages.
Definition: ir_Gree.h:133
void coolix(IRCoolixAC *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const stdAc::swingh_t swingh, const bool turbo, const bool light, const bool clean, const int16_t sleep=-1)
Send a Coolix A/C message with the supplied settings.
Definition: IRac.cpp:431
-
static stdAc::fanspeed_t strToFanspeed(const char *str, const stdAc::fanspeed_t def=stdAc::fanspeed_t::kAuto)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2770
+
static stdAc::fanspeed_t strToFanspeed(const char *str, const stdAc::fanspeed_t def=stdAc::fanspeed_t::kAuto)
Convert the supplied str into the appropriate enum.
Definition: IRac.cpp:2776
Support for Toshiba protocols.
void goodweather(IRGoodweatherAc *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const bool turbo, const bool light, const int16_t sleep=-1)
Send a Goodweather A/C message with the supplied settings.
Definition: IRac.cpp:924
Structure to hold a common A/C state.
Definition: IRsend.h:97
@@ -697,12 +697,12 @@ $(function() {
Class for handling detailed Argo A/C messages.
Definition: ir_Argo.h:127
Class for handling detailed Neoclima A/C messages.
Definition: ir_Neoclima.h:120
static bool isProtocolSupported(const decode_type_t protocol)
Is the given protocol supported by the IRac class?
Definition: IRac.cpp:138
-
Class for handling detailed Daikin 176-bit A/C messages.
Definition: ir_Daikin.h:937
+
Class for handling detailed Daikin 176-bit A/C messages.
Definition: ir_Daikin.h:944
Amcor A/C protocol.
uint16_t _pin
The GPIO to use to transmit messages from.
Definition: IRac.h:102
-
void technibel(IRTechnibelAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
Send a Technibel A/C message with the supplied settings.
Definition: IRac.cpp:1814
-
voltas_ac_remote_model_t
Voltas A/C model numbers.
Definition: IRsend.h:158
-
sharp_ac_remote_model_t
Sharp A/C model numbers.
Definition: IRsend.h:152
+
void technibel(IRTechnibelAc *ac, const bool on, const stdAc::opmode_t mode, const bool celsius, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
Send a Technibel A/C message with the supplied settings.
Definition: IRac.cpp:1816
+
voltas_ac_remote_model_t
Voltas A/C model numbers.
Definition: IRsend.h:163
+
sharp_ac_remote_model_t
Sharp A/C model numbers.
Definition: IRsend.h:156
Support for LG protocols.
void carrier64(IRCarrierAc64 *ac, const bool on, const stdAc::opmode_t mode, const float degrees, const stdAc::fanspeed_t fan, const stdAc::swingv_t swingv, const int16_t sleep=-1)
Send a Carrier 64-bit A/C message with the supplied settings.
Definition: IRac.cpp:394
opmode_t
Common A/C settings for A/C operating modes.
Definition: IRsend.h:46
diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8cpp.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8cpp.html similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8cpp.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8cpp.html diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8h.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8h.html similarity index 100% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8h.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8h.html diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8h_source.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8h_source.html similarity index 87% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8h_source.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8h_source.html index 8e988309c..1a3c07175 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRrecv_8h_source.html +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRrecv_8h_source.html @@ -254,564 +254,577 @@ $(function() {
187  const uint8_t tolerance = kUseDefTol,
188  const int16_t excess = kMarkExcess,
189  const bool MSBfirst = true);
-
190  match_result_t matchData(volatile uint16_t *data_ptr, const uint16_t nbits,
+
190  match_result_t matchData(volatile uint16_t *data_ptr, const uint16_t nbits,
191  const uint16_t onemark, const uint32_t onespace,
192  const uint16_t zeromark, const uint32_t zerospace,
193  const uint8_t tolerance = kUseDefTol,
194  const int16_t excess = kMarkExcess,
-
195  const bool MSBfirst = true);
-
196  uint16_t matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr,
-
197  const uint16_t remaining, const uint16_t nbytes,
-
198  const uint16_t onemark, const uint32_t onespace,
-
199  const uint16_t zeromark, const uint32_t zerospace,
-
200  const uint8_t tolerance = kUseDefTol,
-
201  const int16_t excess = kMarkExcess,
-
202  const bool MSBfirst = true);
-
203  uint16_t matchGeneric(volatile uint16_t *data_ptr,
-
204  uint64_t *result_ptr,
-
205  const uint16_t remaining, const uint16_t nbits,
-
206  const uint16_t hdrmark, const uint32_t hdrspace,
-
207  const uint16_t onemark, const uint32_t onespace,
-
208  const uint16_t zeromark, const uint32_t zerospace,
-
209  const uint16_t footermark, const uint32_t footerspace,
-
210  const bool atleast = false,
-
211  const uint8_t tolerance = kUseDefTol,
-
212  const int16_t excess = kMarkExcess,
-
213  const bool MSBfirst = true);
-
214  uint16_t matchGeneric(volatile uint16_t *data_ptr, uint8_t *result_ptr,
-
215  const uint16_t remaining, const uint16_t nbits,
-
216  const uint16_t hdrmark, const uint32_t hdrspace,
-
217  const uint16_t onemark, const uint32_t onespace,
-
218  const uint16_t zeromark, const uint32_t zerospace,
-
219  const uint16_t footermark,
-
220  const uint32_t footerspace,
-
221  const bool atleast = false,
-
222  const uint8_t tolerance = kUseDefTol,
-
223  const int16_t excess = kMarkExcess,
-
224  const bool MSBfirst = true);
-
225  uint16_t matchGenericConstBitTime(volatile uint16_t *data_ptr,
-
226  uint64_t *result_ptr,
-
227  const uint16_t remaining,
-
228  const uint16_t nbits,
-
229  const uint16_t hdrmark,
-
230  const uint32_t hdrspace,
-
231  const uint16_t one,
-
232  const uint32_t zero,
-
233  const uint16_t footermark,
-
234  const uint32_t footerspace,
-
235  const bool atleast = false,
-
236  const uint8_t tolerance = kUseDefTol,
-
237  const int16_t excess = kMarkExcess,
-
238  const bool MSBfirst = true);
-
239  uint16_t matchManchesterData(volatile const uint16_t *data_ptr,
-
240  uint64_t *result_ptr,
-
241  const uint16_t remaining,
-
242  const uint16_t nbits,
-
243  const uint16_t half_period,
-
244  const uint16_t starting_balance = 0,
-
245  const uint8_t tolerance = kUseDefTol,
-
246  const int16_t excess = kMarkExcess,
-
247  const bool MSBfirst = true,
-
248  const bool GEThomas = true);
-
249  uint16_t matchManchester(volatile const uint16_t *data_ptr,
-
250  uint64_t *result_ptr,
-
251  const uint16_t remaining,
-
252  const uint16_t nbits,
-
253  const uint16_t hdrmark,
-
254  const uint32_t hdrspace,
-
255  const uint16_t clock_period,
-
256  const uint16_t footermark,
-
257  const uint32_t footerspace,
-
258  const bool atleast = false,
-
259  const uint8_t tolerance = kUseDefTol,
-
260  const int16_t excess = kMarkExcess,
-
261  const bool MSBfirst = true,
-
262  const bool GEThomas = true);
-
263  void crudeNoiseFilter(decode_results *results, const uint16_t floor = 0);
-
264  bool decodeHash(decode_results *results);
-
265 #if DECODE_VOLTAS
-
266  bool decodeVoltas(decode_results *results,
-
267  uint16_t offset = kStartOffset,
-
268  const uint16_t nbits = kVoltasBits,
-
269  const bool strict = true);
-
270 #endif // DECODE_VOLTAS
-
271 #if (DECODE_NEC || DECODE_SHERWOOD || DECODE_AIWA_RC_T501 || DECODE_SANYO)
-
272  bool decodeNEC(decode_results *results, uint16_t offset = kStartOffset,
-
273  const uint16_t nbits = kNECBits, const bool strict = true);
-
274 #endif
-
275 #if DECODE_ARGO
-
276  bool decodeArgo(decode_results *results, uint16_t offset = kStartOffset,
-
277  const uint16_t nbits = kArgoBits, const bool strict = true);
-
278 #endif // DECODE_ARGO
-
279 #if DECODE_SONY
-
280  bool decodeSony(decode_results *results, uint16_t offset = kStartOffset,
-
281  const uint16_t nbits = kSonyMinBits,
-
282  const bool strict = false);
-
283 #endif
-
284 #if DECODE_SANYO
-
285  // DISABLED due to poor quality.
-
286  // bool decodeSanyo(decode_results *results, uint16_t offset = kStartOffset,
-
287  // uint16_t nbits = kSanyoSA8650BBits,
-
288  // bool strict = false);
-
289  bool decodeSanyoLC7461(decode_results *results,
-
290  uint16_t offset = kStartOffset,
-
291  const uint16_t nbits = kSanyoLC7461Bits,
-
292  const bool strict = true);
-
293 #endif
-
294 #if DECODE_SANYO_AC
-
295  bool decodeSanyoAc(decode_results *results,
-
296  uint16_t offset = kStartOffset,
-
297  const uint16_t nbits = kSanyoAcBits,
-
298  const bool strict = true);
-
299 #endif // DECODE_SANYO_AC
-
300 #if DECODE_MITSUBISHI
-
301  bool decodeMitsubishi(decode_results *results, uint16_t offset = kStartOffset,
-
302  const uint16_t nbits = kMitsubishiBits,
-
303  const bool strict = true);
-
304 #endif
-
305 #if DECODE_MITSUBISHI2
-
306  bool decodeMitsubishi2(decode_results *results,
-
307  uint16_t offset = kStartOffset,
-
308  const uint16_t nbits = kMitsubishiBits,
-
309  const bool strict = true);
-
310 #endif
-
311 #if DECODE_MITSUBISHI_AC
-
312  bool decodeMitsubishiAC(decode_results *results,
-
313  uint16_t offset = kStartOffset,
-
314  const uint16_t nbits = kMitsubishiACBits,
-
315  const bool strict = false);
-
316 #endif
-
317 #if DECODE_MITSUBISHI136
-
318  bool decodeMitsubishi136(decode_results *results,
-
319  uint16_t offset = kStartOffset,
-
320  const uint16_t nbits = kMitsubishi136Bits,
-
321  const bool strict = true);
-
322 #endif
-
323 #if DECODE_MITSUBISHI112
-
324  bool decodeMitsubishi112(decode_results *results,
-
325  uint16_t offset = kStartOffset,
-
326  const uint16_t nbits = kMitsubishi112Bits,
-
327  const bool strict = true);
-
328 #endif
-
329 #if DECODE_MITSUBISHIHEAVY
- -
331  uint16_t offset = kStartOffset,
-
332  const uint16_t nbits = kMitsubishiHeavy152Bits,
-
333  const bool strict = true);
-
334 #endif
-
335 #if (DECODE_RC5 || DECODE_RC6 || DECODE_LASERTAG || DECODE_MWM)
-
336  int16_t getRClevel(decode_results *results, uint16_t *offset, uint16_t *used,
-
337  uint16_t bitTime, const uint8_t tolerance = kUseDefTol,
-
338  const int16_t excess = kMarkExcess,
-
339  const uint16_t delta = 0, const uint8_t maxwidth = 3);
-
340 #endif
-
341 #if DECODE_RC5
-
342  bool decodeRC5(decode_results *results, uint16_t offset = kStartOffset,
-
343  const uint16_t nbits = kRC5XBits,
-
344  const bool strict = true);
-
345 #endif
-
346 #if DECODE_RC6
-
347  bool decodeRC6(decode_results *results, uint16_t offset = kStartOffset,
-
348  const uint16_t nbits = kRC6Mode0Bits,
-
349  const bool strict = false);
-
350 #endif
-
351 #if DECODE_RCMM
-
352  bool decodeRCMM(decode_results *results, uint16_t offset = kStartOffset,
-
353  const uint16_t nbits = kRCMMBits,
-
354  const bool strict = false);
-
355 #endif
-
356 #if (DECODE_PANASONIC || DECODE_DENON)
-
357  bool decodePanasonic(decode_results *results, uint16_t offset = kStartOffset,
-
358  const uint16_t nbits = kPanasonicBits,
-
359  const bool strict = false,
-
360  const uint32_t manufacturer = kPanasonicManufacturer);
-
361 #endif
-
362 #if DECODE_LG
-
363  bool decodeLG(decode_results *results, uint16_t offset = kStartOffset,
-
364  const uint16_t nbits = kLgBits,
-
365  const bool strict = false);
-
366 #endif
-
367 #if DECODE_INAX
-
368  bool decodeInax(decode_results *results, uint16_t offset = kStartOffset,
-
369  const uint16_t nbits = kInaxBits,
-
370  const bool strict = true);
-
371 #endif // DECODE_INAX
-
372 #if DECODE_JVC
-
373  bool decodeJVC(decode_results *results, uint16_t offset = kStartOffset,
-
374  const uint16_t nbits = kJvcBits,
-
375  const bool strict = true);
-
376 #endif
-
377 #if DECODE_SAMSUNG
-
378  bool decodeSAMSUNG(decode_results *results, uint16_t offset = kStartOffset,
-
379  const uint16_t nbits = kSamsungBits,
-
380  const bool strict = true);
-
381 #endif
-
382 #if DECODE_SAMSUNG
-
383  bool decodeSamsung36(decode_results *results, uint16_t offset = kStartOffset,
-
384  const uint16_t nbits = kSamsung36Bits,
-
385  const bool strict = true);
-
386 #endif
-
387 #if DECODE_SAMSUNG_AC
-
388  bool decodeSamsungAC(decode_results *results, uint16_t offset = kStartOffset,
-
389  const uint16_t nbits = kSamsungAcBits,
-
390  const bool strict = true);
-
391 #endif
-
392 #if DECODE_WHYNTER
-
393  bool decodeWhynter(decode_results *results, uint16_t offset = kStartOffset,
-
394  const uint16_t nbits = kWhynterBits,
-
395  const bool strict = true);
-
396 #endif
-
397 #if DECODE_COOLIX
-
398  bool decodeCOOLIX(decode_results *results, uint16_t offset = kStartOffset,
-
399  const uint16_t nbits = kCoolixBits,
-
400  const bool strict = true);
-
401 #endif
-
402 #if DECODE_DENON
-
403  bool decodeDenon(decode_results *results, uint16_t offset = kStartOffset,
-
404  const uint16_t nbits = kDenonBits,
-
405  const bool strict = true);
-
406 #endif
-
407 #if DECODE_DISH
-
408  bool decodeDISH(decode_results *results, uint16_t offset = kStartOffset,
-
409  const uint16_t nbits = kDishBits,
-
410  const bool strict = true);
-
411 #endif
-
412 #if (DECODE_SHARP || DECODE_DENON)
-
413  bool decodeSharp(decode_results *results, uint16_t offset = kStartOffset,
-
414  const uint16_t nbits = kSharpBits,
-
415  const bool strict = true, const bool expansion = true);
-
416 #endif
-
417 #if DECODE_SHARP_AC
-
418  bool decodeSharpAc(decode_results *results, uint16_t offset = kStartOffset,
-
419  const uint16_t nbits = kSharpAcBits,
-
420  const bool strict = true);
-
421 #endif
-
422 #if DECODE_AIWA_RC_T501
-
423  bool decodeAiwaRCT501(decode_results *results, uint16_t offset = kStartOffset,
-
424  const uint16_t nbits = kAiwaRcT501Bits,
-
425  const bool strict = true);
-
426 #endif
-
427 #if DECODE_NIKAI
-
428  bool decodeNikai(decode_results *results, uint16_t offset = kStartOffset,
-
429  const uint16_t nbits = kNikaiBits,
-
430  const bool strict = true);
-
431 #endif
-
432 #if DECODE_MAGIQUEST
-
433  bool decodeMagiQuest(decode_results *results, uint16_t offset = kStartOffset,
-
434  const uint16_t nbits = kMagiquestBits,
-
435  const bool strict = true);
-
436 #endif
-
437 #if DECODE_KELVINATOR
-
438  bool decodeKelvinator(decode_results *results, uint16_t offset = kStartOffset,
-
439  const uint16_t nbits = kKelvinatorBits,
-
440  const bool strict = true);
-
441 #endif
-
442 #if DECODE_DAIKIN
-
443  bool decodeDaikin(decode_results *results, uint16_t offset = kStartOffset,
-
444  const uint16_t nbits = kDaikinBits,
-
445  const bool strict = true);
-
446 #endif
-
447 #if DECODE_DAIKIN64
-
448  bool decodeDaikin64(decode_results *results, uint16_t offset = kStartOffset,
-
449  const uint16_t nbits = kDaikin64Bits,
-
450  const bool strict = true);
-
451 #endif // DECODE_DAIKIN64
-
452 #if DECODE_DAIKIN128
-
453  bool decodeDaikin128(decode_results *results, uint16_t offset = kStartOffset,
-
454  const uint16_t nbits = kDaikin128Bits,
-
455  const bool strict = true);
-
456 #endif // DECODE_DAIKIN128
-
457 #if DECODE_DAIKIN152
-
458  bool decodeDaikin152(decode_results *results, uint16_t offset = kStartOffset,
-
459  const uint16_t nbits = kDaikin152Bits,
-
460  const bool strict = true);
-
461 #endif // DECODE_DAIKIN152
-
462 #if DECODE_DAIKIN160
-
463  bool decodeDaikin160(decode_results *results, uint16_t offset = kStartOffset,
-
464  const uint16_t nbits = kDaikin160Bits,
-
465  const bool strict = true);
-
466 #endif // DECODE_DAIKIN160
-
467 #if DECODE_DAIKIN176
-
468  bool decodeDaikin176(decode_results *results, uint16_t offset = kStartOffset,
-
469  const uint16_t nbits = kDaikin176Bits,
-
470  const bool strict = true);
-
471 #endif // DECODE_DAIKIN176
-
472 #if DECODE_DAIKIN2
-
473  bool decodeDaikin2(decode_results *results, uint16_t offset = kStartOffset,
-
474  const uint16_t nbits = kDaikin2Bits,
-
475  const bool strict = true);
-
476 #endif
-
477 #if DECODE_DAIKIN216
-
478  bool decodeDaikin216(decode_results *results, uint16_t offset = kStartOffset,
-
479  const uint16_t nbits = kDaikin216Bits,
-
480  const bool strict = true);
-
481 #endif
-
482 #if DECODE_TOSHIBA_AC
-
483  bool decodeToshibaAC(decode_results *results, uint16_t offset = kStartOffset,
-
484  const uint16_t nbits = kToshibaACBits,
-
485  const bool strict = true);
-
486 #endif
-
487 #if DECODE_TROTEC
-
488  bool decodeTrotec(decode_results *results, uint16_t offset = kStartOffset,
-
489  const uint16_t nbits = kTrotecBits,
-
490  const bool strict = true);
-
491 #endif // DECODE_TROTEC
-
492 #if DECODE_MIDEA
-
493  bool decodeMidea(decode_results *results, uint16_t offset = kStartOffset,
-
494  const uint16_t nbits = kMideaBits,
-
495  const bool strict = true);
-
496 #endif // DECODE_MIDEA
-
497 #if DECODE_MIDEA24
-
498  bool decodeMidea24(decode_results *results, uint16_t offset = kStartOffset,
-
499  const uint16_t nbits = kMidea24Bits,
-
500  const bool strict = true);
-
501 #endif // DECODE_MIDEA24
-
502 #if DECODE_FUJITSU_AC
-
503  bool decodeFujitsuAC(decode_results *results, uint16_t offset = kStartOffset,
-
504  const uint16_t nbits = kFujitsuAcBits,
-
505  const bool strict = false);
-
506 #endif
-
507 #if DECODE_LASERTAG
-
508  bool decodeLasertag(decode_results *results, uint16_t offset = kStartOffset,
-
509  const uint16_t nbits = kLasertagBits,
-
510  const bool strict = true);
-
511 #endif
-
512 #if DECODE_CARRIER_AC
-
513  bool decodeCarrierAC(decode_results *results, uint16_t offset = kStartOffset,
-
514  const uint16_t nbits = kCarrierAcBits,
-
515  const bool strict = true);
-
516 #endif // DECODE_CARRIER_AC
-
517 #if DECODE_CARRIER_AC40
-
518  bool decodeCarrierAC40(decode_results *results,
-
519  uint16_t offset = kStartOffset,
-
520  const uint16_t nbits = kCarrierAc40Bits,
-
521  const bool strict = true);
-
522 #endif // DECODE_CARRIER_AC40
-
523 #if DECODE_CARRIER_AC64
-
524  bool decodeCarrierAC64(decode_results *results,
-
525  uint16_t offset = kStartOffset,
-
526  const uint16_t nbits = kCarrierAc64Bits,
-
527  const bool strict = true);
-
528 #endif // DECODE_CARRIER_AC64
-
529 #if DECODE_GOODWEATHER
-
530  bool decodeGoodweather(decode_results *results,
-
531  uint16_t offset = kStartOffset,
-
532  const uint16_t nbits = kGoodweatherBits,
-
533  const bool strict = true);
-
534 #endif // DECODE_GOODWEATHER
-
535 #if DECODE_GREE
-
536  bool decodeGree(decode_results *results, uint16_t offset = kStartOffset,
-
537  const uint16_t nbits = kGreeBits,
-
538  const bool strict = true);
-
539 #endif
-
540 #if (DECODE_HAIER_AC | DECODE_HAIER_AC_YRW02)
-
541  bool decodeHaierAC(decode_results *results, uint16_t offset = kStartOffset,
-
542  const uint16_t nbits = kHaierACBits,
-
543  const bool strict = true);
-
544 #endif
-
545 #if DECODE_HAIER_AC_YRW02
-
546  bool decodeHaierACYRW02(decode_results *results,
-
547  uint16_t offset = kStartOffset,
-
548  const uint16_t nbits = kHaierACYRW02Bits,
-
549  const bool strict = true);
-
550 #endif
-
551 #if (DECODE_HITACHI_AC || DECODE_HITACHI_AC2 || DECODE_HITACHI_AC344)
-
552  bool decodeHitachiAC(decode_results *results, uint16_t offset = kStartOffset,
-
553  const uint16_t nbits = kHitachiAcBits,
-
554  const bool strict = true, const bool MSBfirst = true);
-
555 #endif
-
556 #if DECODE_HITACHI_AC1
-
557  bool decodeHitachiAC1(decode_results *results, uint16_t offset = kStartOffset,
-
558  const uint16_t nbits = kHitachiAc1Bits,
-
559  const bool strict = true);
-
560 #endif
-
561 #if DECODE_HITACHI_AC3
-
562  bool decodeHitachiAc3(decode_results *results,
-
563  uint16_t offset = kStartOffset,
-
564  const uint16_t nbits = kHitachiAc3Bits,
-
565  const bool strict = true);
-
566 #endif // DECODE_HITACHI_AC3
-
567 #if DECODE_HITACHI_AC424
-
568  bool decodeHitachiAc424(decode_results *results,
-
569  uint16_t offset = kStartOffset,
-
570  const uint16_t nbits = kHitachiAc424Bits,
-
571  const bool strict = true);
-
572 #endif // DECODE_HITACHI_AC424
-
573 #if DECODE_GICABLE
-
574  bool decodeGICable(decode_results *results, uint16_t offset = kStartOffset,
-
575  const uint16_t nbits = kGicableBits,
-
576  const bool strict = true);
-
577 #endif
-
578 #if DECODE_WHIRLPOOL_AC
-
579  bool decodeWhirlpoolAC(decode_results *results,
-
580  uint16_t offset = kStartOffset,
-
581  const uint16_t nbits = kWhirlpoolAcBits,
-
582  const bool strict = true);
-
583 #endif
-
584 #if DECODE_LUTRON
-
585  bool decodeLutron(decode_results *results, uint16_t offset = kStartOffset,
-
586  const uint16_t nbits = kLutronBits,
-
587  const bool strict = true);
-
588 #endif
-
589 #if DECODE_ELECTRA_AC
-
590  bool decodeElectraAC(decode_results *results, uint16_t offset = kStartOffset,
-
591  const uint16_t nbits = kElectraAcBits,
-
592  const bool strict = true);
-
593 #endif
-
594 #if DECODE_PANASONIC_AC
-
595  bool decodePanasonicAC(decode_results *results,
-
596  uint16_t offset = kStartOffset,
-
597  const uint16_t nbits = kPanasonicAcBits,
-
598  const bool strict = true);
-
599 #endif // DECODE_PANASONIC_AC
-
600 #if DECODE_PANASONIC_AC32
-
601  bool decodePanasonicAC32(decode_results *results,
-
602  uint16_t offset = kStartOffset,
-
603  const uint16_t nbits = kPanasonicAc32Bits,
-
604  const bool strict = true);
-
605 #endif // DECODE_PANASONIC_AC32
-
606 #if DECODE_PIONEER
-
607  bool decodePioneer(decode_results *results, uint16_t offset = kStartOffset,
-
608  const uint16_t nbits = kPioneerBits,
-
609  const bool strict = true);
-
610 #endif
-
611 #if DECODE_MWM
-
612  bool decodeMWM(decode_results *results, uint16_t offset = kStartOffset,
-
613  const uint16_t nbits = 24,
-
614  const bool strict = true);
-
615 #endif
-
616 #if DECODE_VESTEL_AC
-
617  bool decodeVestelAc(decode_results *results, uint16_t offset = kStartOffset,
-
618  const uint16_t nbits = kVestelAcBits,
-
619  const bool strict = true);
-
620 #endif
-
621 #if DECODE_TECO
-
622  bool decodeTeco(decode_results *results, uint16_t offset = kStartOffset,
-
623  const uint16_t nbits = kTecoBits,
-
624  const bool strict = false);
-
625 #endif
-
626 #if DECODE_LEGOPF
-
627  bool decodeLegoPf(decode_results *results, uint16_t offset = kStartOffset,
-
628  const uint16_t nbits = kLegoPfBits,
-
629  const bool strict = true);
-
630 #endif
-
631 #if DECODE_NEOCLIMA
-
632  bool decodeNeoclima(decode_results *results, uint16_t offset = kStartOffset,
-
633  const uint16_t nbits = kNeoclimaBits,
-
634  const bool strict = true);
-
635 #endif // DECODE_NEOCLIMA
-
636 #if DECODE_AMCOR
-
637  bool decodeAmcor(decode_results *results, uint16_t offset = kStartOffset,
-
638  const uint16_t nbits = kAmcorBits,
-
639  const bool strict = true);
-
640 #endif // DECODE_AMCOR
-
641 #if DECODE_EPSON
-
642  bool decodeEpson(decode_results *results, uint16_t offset = kStartOffset,
-
643  const uint16_t nbits = kEpsonBits,
-
644  const bool strict = true);
-
645 #endif // DECODE_EPSON
-
646 #if DECODE_SYMPHONY
-
647  bool decodeSymphony(decode_results *results, uint16_t offset = kStartOffset,
-
648  const uint16_t nbits = kSymphonyBits,
-
649  const bool strict = true);
-
650 #endif // DECODE_SYMPHONY
-
651 #if DECODE_AIRWELL
-
652  bool decodeAirwell(decode_results *results, uint16_t offset = kStartOffset,
-
653  const uint16_t nbits = kAirwellBits,
-
654  const bool strict = true);
-
655 #endif // DECODE_AIRWELL
-
656 #if DECODE_DELONGHI_AC
-
657  bool decodeDelonghiAc(decode_results *results, uint16_t offset = kStartOffset,
-
658  const uint16_t nbits = kDelonghiAcBits,
-
659  const bool strict = true);
-
660 #endif // DECODE_DELONGHI_AC
-
661 #if DECODE_DOSHISHA
-
662  bool decodeDoshisha(decode_results *results, uint16_t offset = kStartOffset,
-
663  const uint16_t nbits = kDoshishaBits,
-
664  const bool strict = true);
-
665 #endif // DECODE_DOSHISHA
-
666 #if DECODE_MULTIBRACKETS
-
667  bool decodeMultibrackets(decode_results *results,
-
668  uint16_t offset = kStartOffset,
-
669  const uint16_t nbits = kMultibracketsBits,
-
670  const bool strict = true);
-
671 #endif // DECODE_MULTIBRACKETS
-
672 #if DECODE_TECHNIBEL_AC
-
673  bool decodeTechnibelAc(decode_results *results,
-
674  uint16_t offset = kStartOffset,
-
675  const uint16_t nbits = kTechnibelAcBits,
-
676  const bool strict = true);
-
677 #endif // DECODE_TECHNIBEL_AC
-
678 #if DECODE_CORONA_AC
-
679  bool decodeCoronaAc(decode_results *results, uint16_t offset = kStartOffset,
-
680  const uint16_t nbits = kCoronaAcBitsShort,
-
681  const bool strict = true);
-
682 #endif // DECODE_CORONA_AC
-
683 #if DECODE_ZEPEAL
-
684  bool decodeZepeal(decode_results *results, uint16_t offset = kStartOffset,
-
685  const uint16_t nbits = kZepealBits,
-
686  const bool strict = true);
-
687 #endif // DECODE_ZEPEAL
-
688 #if DECODE_METZ
-
689  bool decodeMetz(decode_results *results, uint16_t offset = kStartOffset,
-
690  const uint16_t nbits = kMetzBits,
-
691  const bool strict = true);
-
692 #endif // DECODE_METZ
-
693 #if DECODE_TRANSCOLD
-
694  bool decodeTranscold(decode_results *results, uint16_t offset = kStartOffset,
-
695  const uint16_t nbits = kTranscoldBits,
-
696  const bool strict = true);
-
697 #endif // DECODE_TRANSCOLD
-
698 #if DECODE_MIRAGE
-
699  bool decodeMirage(decode_results *results,
-
700  uint16_t offset = kStartOffset,
-
701  const uint16_t nbits = kMirageBits,
-
702  const bool strict = true);
-
703 #endif // DECODE_MIRAGE
-
704 #if DECODE_ELITESCREENS
-
705  bool decodeElitescreens(decode_results *results,
-
706  uint16_t offset = kStartOffset,
-
707  const uint16_t nbits = kEliteScreensBits,
-
708  const bool strict = true);
-
709 #endif // DECODE_ELITESCREENS
-
710 };
-
711 
-
712 #endif // IRRECV_H_
+
195  const bool MSBfirst = true,
+
196  const bool expectlastspace = true);
+
197  uint16_t matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr,
+
198  const uint16_t remaining, const uint16_t nbytes,
+
199  const uint16_t onemark, const uint32_t onespace,
+
200  const uint16_t zeromark, const uint32_t zerospace,
+
201  const uint8_t tolerance = kUseDefTol,
+
202  const int16_t excess = kMarkExcess,
+
203  const bool MSBfirst = true,
+
204  const bool expectlastspace = true);
+
205  uint16_t matchGeneric(volatile uint16_t *data_ptr,
+
206  uint64_t *result_ptr,
+
207  const uint16_t remaining, const uint16_t nbits,
+
208  const uint16_t hdrmark, const uint32_t hdrspace,
+
209  const uint16_t onemark, const uint32_t onespace,
+
210  const uint16_t zeromark, const uint32_t zerospace,
+
211  const uint16_t footermark, const uint32_t footerspace,
+
212  const bool atleast = false,
+
213  const uint8_t tolerance = kUseDefTol,
+
214  const int16_t excess = kMarkExcess,
+
215  const bool MSBfirst = true);
+
216  uint16_t matchGeneric(volatile uint16_t *data_ptr, uint8_t *result_ptr,
+
217  const uint16_t remaining, const uint16_t nbits,
+
218  const uint16_t hdrmark, const uint32_t hdrspace,
+
219  const uint16_t onemark, const uint32_t onespace,
+
220  const uint16_t zeromark, const uint32_t zerospace,
+
221  const uint16_t footermark,
+
222  const uint32_t footerspace,
+
223  const bool atleast = false,
+
224  const uint8_t tolerance = kUseDefTol,
+
225  const int16_t excess = kMarkExcess,
+
226  const bool MSBfirst = true);
+
227  uint16_t matchGenericConstBitTime(volatile uint16_t *data_ptr,
+
228  uint64_t *result_ptr,
+
229  const uint16_t remaining,
+
230  const uint16_t nbits,
+
231  const uint16_t hdrmark,
+
232  const uint32_t hdrspace,
+
233  const uint16_t one,
+
234  const uint32_t zero,
+
235  const uint16_t footermark,
+
236  const uint32_t footerspace,
+
237  const bool atleast = false,
+
238  const uint8_t tolerance = kUseDefTol,
+
239  const int16_t excess = kMarkExcess,
+
240  const bool MSBfirst = true);
+
241  uint16_t matchManchesterData(volatile const uint16_t *data_ptr,
+
242  uint64_t *result_ptr,
+
243  const uint16_t remaining,
+
244  const uint16_t nbits,
+
245  const uint16_t half_period,
+
246  const uint16_t starting_balance = 0,
+
247  const uint8_t tolerance = kUseDefTol,
+
248  const int16_t excess = kMarkExcess,
+
249  const bool MSBfirst = true,
+
250  const bool GEThomas = true);
+
251  uint16_t matchManchester(volatile const uint16_t *data_ptr,
+
252  uint64_t *result_ptr,
+
253  const uint16_t remaining,
+
254  const uint16_t nbits,
+
255  const uint16_t hdrmark,
+
256  const uint32_t hdrspace,
+
257  const uint16_t clock_period,
+
258  const uint16_t footermark,
+
259  const uint32_t footerspace,
+
260  const bool atleast = false,
+
261  const uint8_t tolerance = kUseDefTol,
+
262  const int16_t excess = kMarkExcess,
+
263  const bool MSBfirst = true,
+
264  const bool GEThomas = true);
+
265  void crudeNoiseFilter(decode_results *results, const uint16_t floor = 0);
+
266  bool decodeHash(decode_results *results);
+
267 #if DECODE_VOLTAS
+
268  bool decodeVoltas(decode_results *results,
+
269  uint16_t offset = kStartOffset,
+
270  const uint16_t nbits = kVoltasBits,
+
271  const bool strict = true);
+
272 #endif // DECODE_VOLTAS
+
273 #if (DECODE_NEC || DECODE_SHERWOOD || DECODE_AIWA_RC_T501 || DECODE_SANYO)
+
274  bool decodeNEC(decode_results *results, uint16_t offset = kStartOffset,
+
275  const uint16_t nbits = kNECBits, const bool strict = true);
+
276 #endif
+
277 #if DECODE_ARGO
+
278  bool decodeArgo(decode_results *results, uint16_t offset = kStartOffset,
+
279  const uint16_t nbits = kArgoBits, const bool strict = true);
+
280 #endif // DECODE_ARGO
+
281 #if DECODE_SONY
+
282  bool decodeSony(decode_results *results, uint16_t offset = kStartOffset,
+
283  const uint16_t nbits = kSonyMinBits,
+
284  const bool strict = false);
+
285 #endif
+
286 #if DECODE_SANYO
+
287  // DISABLED due to poor quality.
+
288  // bool decodeSanyo(decode_results *results, uint16_t offset = kStartOffset,
+
289  // uint16_t nbits = kSanyoSA8650BBits,
+
290  // bool strict = false);
+
291  bool decodeSanyoLC7461(decode_results *results,
+
292  uint16_t offset = kStartOffset,
+
293  const uint16_t nbits = kSanyoLC7461Bits,
+
294  const bool strict = true);
+
295 #endif
+
296 #if DECODE_SANYO_AC
+
297  bool decodeSanyoAc(decode_results *results,
+
298  uint16_t offset = kStartOffset,
+
299  const uint16_t nbits = kSanyoAcBits,
+
300  const bool strict = true);
+
301 #endif // DECODE_SANYO_AC
+
302 #if DECODE_MITSUBISHI
+
303  bool decodeMitsubishi(decode_results *results, uint16_t offset = kStartOffset,
+
304  const uint16_t nbits = kMitsubishiBits,
+
305  const bool strict = true);
+
306 #endif
+
307 #if DECODE_MITSUBISHI2
+
308  bool decodeMitsubishi2(decode_results *results,
+
309  uint16_t offset = kStartOffset,
+
310  const uint16_t nbits = kMitsubishiBits,
+
311  const bool strict = true);
+
312 #endif
+
313 #if DECODE_MITSUBISHI_AC
+
314  bool decodeMitsubishiAC(decode_results *results,
+
315  uint16_t offset = kStartOffset,
+
316  const uint16_t nbits = kMitsubishiACBits,
+
317  const bool strict = false);
+
318 #endif
+
319 #if DECODE_MITSUBISHI136
+
320  bool decodeMitsubishi136(decode_results *results,
+
321  uint16_t offset = kStartOffset,
+
322  const uint16_t nbits = kMitsubishi136Bits,
+
323  const bool strict = true);
+
324 #endif
+
325 #if DECODE_MITSUBISHI112
+
326  bool decodeMitsubishi112(decode_results *results,
+
327  uint16_t offset = kStartOffset,
+
328  const uint16_t nbits = kMitsubishi112Bits,
+
329  const bool strict = true);
+
330 #endif
+
331 #if DECODE_MITSUBISHIHEAVY
+ +
333  uint16_t offset = kStartOffset,
+
334  const uint16_t nbits = kMitsubishiHeavy152Bits,
+
335  const bool strict = true);
+
336 #endif
+
337 #if (DECODE_RC5 || DECODE_RC6 || DECODE_LASERTAG || DECODE_MWM)
+
338  int16_t getRClevel(decode_results *results, uint16_t *offset, uint16_t *used,
+
339  uint16_t bitTime, const uint8_t tolerance = kUseDefTol,
+
340  const int16_t excess = kMarkExcess,
+
341  const uint16_t delta = 0, const uint8_t maxwidth = 3);
+
342 #endif
+
343 #if DECODE_RC5
+
344  bool decodeRC5(decode_results *results, uint16_t offset = kStartOffset,
+
345  const uint16_t nbits = kRC5XBits,
+
346  const bool strict = true);
+
347 #endif
+
348 #if DECODE_RC6
+
349  bool decodeRC6(decode_results *results, uint16_t offset = kStartOffset,
+
350  const uint16_t nbits = kRC6Mode0Bits,
+
351  const bool strict = false);
+
352 #endif
+
353 #if DECODE_RCMM
+
354  bool decodeRCMM(decode_results *results, uint16_t offset = kStartOffset,
+
355  const uint16_t nbits = kRCMMBits,
+
356  const bool strict = false);
+
357 #endif
+
358 #if (DECODE_PANASONIC || DECODE_DENON)
+
359  bool decodePanasonic(decode_results *results, uint16_t offset = kStartOffset,
+
360  const uint16_t nbits = kPanasonicBits,
+
361  const bool strict = false,
+
362  const uint32_t manufacturer = kPanasonicManufacturer);
+
363 #endif
+
364 #if DECODE_LG
+
365  bool decodeLG(decode_results *results, uint16_t offset = kStartOffset,
+
366  const uint16_t nbits = kLgBits,
+
367  const bool strict = false);
+
368 #endif
+
369 #if DECODE_INAX
+
370  bool decodeInax(decode_results *results, uint16_t offset = kStartOffset,
+
371  const uint16_t nbits = kInaxBits,
+
372  const bool strict = true);
+
373 #endif // DECODE_INAX
+
374 #if DECODE_JVC
+
375  bool decodeJVC(decode_results *results, uint16_t offset = kStartOffset,
+
376  const uint16_t nbits = kJvcBits,
+
377  const bool strict = true);
+
378 #endif
+
379 #if DECODE_SAMSUNG
+
380  bool decodeSAMSUNG(decode_results *results, uint16_t offset = kStartOffset,
+
381  const uint16_t nbits = kSamsungBits,
+
382  const bool strict = true);
+
383 #endif
+
384 #if DECODE_SAMSUNG
+
385  bool decodeSamsung36(decode_results *results, uint16_t offset = kStartOffset,
+
386  const uint16_t nbits = kSamsung36Bits,
+
387  const bool strict = true);
+
388 #endif
+
389 #if DECODE_SAMSUNG_AC
+
390  bool decodeSamsungAC(decode_results *results, uint16_t offset = kStartOffset,
+
391  const uint16_t nbits = kSamsungAcBits,
+
392  const bool strict = true);
+
393 #endif
+
394 #if DECODE_WHYNTER
+
395  bool decodeWhynter(decode_results *results, uint16_t offset = kStartOffset,
+
396  const uint16_t nbits = kWhynterBits,
+
397  const bool strict = true);
+
398 #endif
+
399 #if DECODE_COOLIX
+
400  bool decodeCOOLIX(decode_results *results, uint16_t offset = kStartOffset,
+
401  const uint16_t nbits = kCoolixBits,
+
402  const bool strict = true);
+
403 #endif
+
404 #if DECODE_DENON
+
405  bool decodeDenon(decode_results *results, uint16_t offset = kStartOffset,
+
406  const uint16_t nbits = kDenonBits,
+
407  const bool strict = true);
+
408 #endif
+
409 #if DECODE_DISH
+
410  bool decodeDISH(decode_results *results, uint16_t offset = kStartOffset,
+
411  const uint16_t nbits = kDishBits,
+
412  const bool strict = true);
+
413 #endif
+
414 #if (DECODE_SHARP || DECODE_DENON)
+
415  bool decodeSharp(decode_results *results, uint16_t offset = kStartOffset,
+
416  const uint16_t nbits = kSharpBits,
+
417  const bool strict = true, const bool expansion = true);
+
418 #endif
+
419 #if DECODE_SHARP_AC
+
420  bool decodeSharpAc(decode_results *results, uint16_t offset = kStartOffset,
+
421  const uint16_t nbits = kSharpAcBits,
+
422  const bool strict = true);
+
423 #endif
+
424 #if DECODE_AIWA_RC_T501
+
425  bool decodeAiwaRCT501(decode_results *results, uint16_t offset = kStartOffset,
+
426  const uint16_t nbits = kAiwaRcT501Bits,
+
427  const bool strict = true);
+
428 #endif
+
429 #if DECODE_NIKAI
+
430  bool decodeNikai(decode_results *results, uint16_t offset = kStartOffset,
+
431  const uint16_t nbits = kNikaiBits,
+
432  const bool strict = true);
+
433 #endif
+
434 #if DECODE_MAGIQUEST
+
435  bool decodeMagiQuest(decode_results *results, uint16_t offset = kStartOffset,
+
436  const uint16_t nbits = kMagiquestBits,
+
437  const bool strict = true);
+
438 #endif
+
439 #if DECODE_KELVINATOR
+
440  bool decodeKelvinator(decode_results *results, uint16_t offset = kStartOffset,
+
441  const uint16_t nbits = kKelvinatorBits,
+
442  const bool strict = true);
+
443 #endif
+
444 #if DECODE_DAIKIN
+
445  bool decodeDaikin(decode_results *results, uint16_t offset = kStartOffset,
+
446  const uint16_t nbits = kDaikinBits,
+
447  const bool strict = true);
+
448 #endif
+
449 #if DECODE_DAIKIN64
+
450  bool decodeDaikin64(decode_results *results, uint16_t offset = kStartOffset,
+
451  const uint16_t nbits = kDaikin64Bits,
+
452  const bool strict = true);
+
453 #endif // DECODE_DAIKIN64
+
454 #if DECODE_DAIKIN128
+
455  bool decodeDaikin128(decode_results *results, uint16_t offset = kStartOffset,
+
456  const uint16_t nbits = kDaikin128Bits,
+
457  const bool strict = true);
+
458 #endif // DECODE_DAIKIN128
+
459 #if DECODE_DAIKIN152
+
460  bool decodeDaikin152(decode_results *results, uint16_t offset = kStartOffset,
+
461  const uint16_t nbits = kDaikin152Bits,
+
462  const bool strict = true);
+
463 #endif // DECODE_DAIKIN152
+
464 #if DECODE_DAIKIN160
+
465  bool decodeDaikin160(decode_results *results, uint16_t offset = kStartOffset,
+
466  const uint16_t nbits = kDaikin160Bits,
+
467  const bool strict = true);
+
468 #endif // DECODE_DAIKIN160
+
469 #if DECODE_DAIKIN176
+
470  bool decodeDaikin176(decode_results *results, uint16_t offset = kStartOffset,
+
471  const uint16_t nbits = kDaikin176Bits,
+
472  const bool strict = true);
+
473 #endif // DECODE_DAIKIN176
+
474 #if DECODE_DAIKIN2
+
475  bool decodeDaikin2(decode_results *results, uint16_t offset = kStartOffset,
+
476  const uint16_t nbits = kDaikin2Bits,
+
477  const bool strict = true);
+
478 #endif
+
479 #if DECODE_DAIKIN216
+
480  bool decodeDaikin216(decode_results *results, uint16_t offset = kStartOffset,
+
481  const uint16_t nbits = kDaikin216Bits,
+
482  const bool strict = true);
+
483 #endif
+
484 #if DECODE_TOSHIBA_AC
+
485  bool decodeToshibaAC(decode_results *results, uint16_t offset = kStartOffset,
+
486  const uint16_t nbits = kToshibaACBits,
+
487  const bool strict = true);
+
488 #endif
+
489 #if DECODE_TROTEC
+
490  bool decodeTrotec(decode_results *results, uint16_t offset = kStartOffset,
+
491  const uint16_t nbits = kTrotecBits,
+
492  const bool strict = true);
+
493 #endif // DECODE_TROTEC
+
494 #if DECODE_MIDEA
+
495  bool decodeMidea(decode_results *results, uint16_t offset = kStartOffset,
+
496  const uint16_t nbits = kMideaBits,
+
497  const bool strict = true);
+
498 #endif // DECODE_MIDEA
+
499 #if DECODE_MIDEA24
+
500  bool decodeMidea24(decode_results *results, uint16_t offset = kStartOffset,
+
501  const uint16_t nbits = kMidea24Bits,
+
502  const bool strict = true);
+
503 #endif // DECODE_MIDEA24
+
504 #if DECODE_FUJITSU_AC
+
505  bool decodeFujitsuAC(decode_results *results, uint16_t offset = kStartOffset,
+
506  const uint16_t nbits = kFujitsuAcBits,
+
507  const bool strict = false);
+
508 #endif
+
509 #if DECODE_LASERTAG
+
510  bool decodeLasertag(decode_results *results, uint16_t offset = kStartOffset,
+
511  const uint16_t nbits = kLasertagBits,
+
512  const bool strict = true);
+
513 #endif
+
514 #if DECODE_MILESTAG2
+
515  bool decodeMilestag2(decode_results *results, uint16_t offset = kStartOffset,
+
516  const uint16_t nbits = kMilesTag2ShotBits,
+
517  const bool strict = true);
+
518 #endif
+
519 #if DECODE_CARRIER_AC
+
520  bool decodeCarrierAC(decode_results *results, uint16_t offset = kStartOffset,
+
521  const uint16_t nbits = kCarrierAcBits,
+
522  const bool strict = true);
+
523 #endif // DECODE_CARRIER_AC
+
524 #if DECODE_CARRIER_AC40
+
525  bool decodeCarrierAC40(decode_results *results,
+
526  uint16_t offset = kStartOffset,
+
527  const uint16_t nbits = kCarrierAc40Bits,
+
528  const bool strict = true);
+
529 #endif // DECODE_CARRIER_AC40
+
530 #if DECODE_CARRIER_AC64
+
531  bool decodeCarrierAC64(decode_results *results,
+
532  uint16_t offset = kStartOffset,
+
533  const uint16_t nbits = kCarrierAc64Bits,
+
534  const bool strict = true);
+
535 #endif // DECODE_CARRIER_AC64
+
536 #if DECODE_GOODWEATHER
+
537  bool decodeGoodweather(decode_results *results,
+
538  uint16_t offset = kStartOffset,
+
539  const uint16_t nbits = kGoodweatherBits,
+
540  const bool strict = true);
+
541 #endif // DECODE_GOODWEATHER
+
542 #if DECODE_GREE
+
543  bool decodeGree(decode_results *results, uint16_t offset = kStartOffset,
+
544  const uint16_t nbits = kGreeBits,
+
545  const bool strict = true);
+
546 #endif
+
547 #if (DECODE_HAIER_AC | DECODE_HAIER_AC_YRW02)
+
548  bool decodeHaierAC(decode_results *results, uint16_t offset = kStartOffset,
+
549  const uint16_t nbits = kHaierACBits,
+
550  const bool strict = true);
+
551 #endif
+
552 #if DECODE_HAIER_AC_YRW02
+
553  bool decodeHaierACYRW02(decode_results *results,
+
554  uint16_t offset = kStartOffset,
+
555  const uint16_t nbits = kHaierACYRW02Bits,
+
556  const bool strict = true);
+
557 #endif
+
558 #if (DECODE_HITACHI_AC || DECODE_HITACHI_AC2 || DECODE_HITACHI_AC344)
+
559  bool decodeHitachiAC(decode_results *results, uint16_t offset = kStartOffset,
+
560  const uint16_t nbits = kHitachiAcBits,
+
561  const bool strict = true, const bool MSBfirst = true);
+
562 #endif
+
563 #if DECODE_HITACHI_AC1
+
564  bool decodeHitachiAC1(decode_results *results, uint16_t offset = kStartOffset,
+
565  const uint16_t nbits = kHitachiAc1Bits,
+
566  const bool strict = true);
+
567 #endif
+
568 #if DECODE_HITACHI_AC3
+
569  bool decodeHitachiAc3(decode_results *results,
+
570  uint16_t offset = kStartOffset,
+
571  const uint16_t nbits = kHitachiAc3Bits,
+
572  const bool strict = true);
+
573 #endif // DECODE_HITACHI_AC3
+
574 #if DECODE_HITACHI_AC424
+
575  bool decodeHitachiAc424(decode_results *results,
+
576  uint16_t offset = kStartOffset,
+
577  const uint16_t nbits = kHitachiAc424Bits,
+
578  const bool strict = true);
+
579 #endif // DECODE_HITACHI_AC424
+
580 #if DECODE_GICABLE
+
581  bool decodeGICable(decode_results *results, uint16_t offset = kStartOffset,
+
582  const uint16_t nbits = kGicableBits,
+
583  const bool strict = true);
+
584 #endif
+
585 #if DECODE_WHIRLPOOL_AC
+
586  bool decodeWhirlpoolAC(decode_results *results,
+
587  uint16_t offset = kStartOffset,
+
588  const uint16_t nbits = kWhirlpoolAcBits,
+
589  const bool strict = true);
+
590 #endif
+
591 #if DECODE_LUTRON
+
592  bool decodeLutron(decode_results *results, uint16_t offset = kStartOffset,
+
593  const uint16_t nbits = kLutronBits,
+
594  const bool strict = true);
+
595 #endif
+
596 #if DECODE_ELECTRA_AC
+
597  bool decodeElectraAC(decode_results *results, uint16_t offset = kStartOffset,
+
598  const uint16_t nbits = kElectraAcBits,
+
599  const bool strict = true);
+
600 #endif
+
601 #if DECODE_PANASONIC_AC
+
602  bool decodePanasonicAC(decode_results *results,
+
603  uint16_t offset = kStartOffset,
+
604  const uint16_t nbits = kPanasonicAcBits,
+
605  const bool strict = true);
+
606 #endif // DECODE_PANASONIC_AC
+
607 #if DECODE_PANASONIC_AC32
+
608  bool decodePanasonicAC32(decode_results *results,
+
609  uint16_t offset = kStartOffset,
+
610  const uint16_t nbits = kPanasonicAc32Bits,
+
611  const bool strict = true);
+
612 #endif // DECODE_PANASONIC_AC32
+
613 #if DECODE_PIONEER
+
614  bool decodePioneer(decode_results *results, uint16_t offset = kStartOffset,
+
615  const uint16_t nbits = kPioneerBits,
+
616  const bool strict = true);
+
617 #endif
+
618 #if DECODE_MWM
+
619  bool decodeMWM(decode_results *results, uint16_t offset = kStartOffset,
+
620  const uint16_t nbits = 24,
+
621  const bool strict = true);
+
622 #endif
+
623 #if DECODE_VESTEL_AC
+
624  bool decodeVestelAc(decode_results *results, uint16_t offset = kStartOffset,
+
625  const uint16_t nbits = kVestelAcBits,
+
626  const bool strict = true);
+
627 #endif
+
628 #if DECODE_TECO
+
629  bool decodeTeco(decode_results *results, uint16_t offset = kStartOffset,
+
630  const uint16_t nbits = kTecoBits,
+
631  const bool strict = false);
+
632 #endif
+
633 #if DECODE_LEGOPF
+
634  bool decodeLegoPf(decode_results *results, uint16_t offset = kStartOffset,
+
635  const uint16_t nbits = kLegoPfBits,
+
636  const bool strict = true);
+
637 #endif
+
638 #if DECODE_NEOCLIMA
+
639  bool decodeNeoclima(decode_results *results, uint16_t offset = kStartOffset,
+
640  const uint16_t nbits = kNeoclimaBits,
+
641  const bool strict = true);
+
642 #endif // DECODE_NEOCLIMA
+
643 #if DECODE_AMCOR
+
644  bool decodeAmcor(decode_results *results, uint16_t offset = kStartOffset,
+
645  const uint16_t nbits = kAmcorBits,
+
646  const bool strict = true);
+
647 #endif // DECODE_AMCOR
+
648 #if DECODE_EPSON
+
649  bool decodeEpson(decode_results *results, uint16_t offset = kStartOffset,
+
650  const uint16_t nbits = kEpsonBits,
+
651  const bool strict = true);
+
652 #endif // DECODE_EPSON
+
653 #if DECODE_SYMPHONY
+
654  bool decodeSymphony(decode_results *results, uint16_t offset = kStartOffset,
+
655  const uint16_t nbits = kSymphonyBits,
+
656  const bool strict = true);
+
657 #endif // DECODE_SYMPHONY
+
658 #if DECODE_AIRWELL
+
659  bool decodeAirwell(decode_results *results, uint16_t offset = kStartOffset,
+
660  const uint16_t nbits = kAirwellBits,
+
661  const bool strict = true);
+
662 #endif // DECODE_AIRWELL
+
663 #if DECODE_DELONGHI_AC
+
664  bool decodeDelonghiAc(decode_results *results, uint16_t offset = kStartOffset,
+
665  const uint16_t nbits = kDelonghiAcBits,
+
666  const bool strict = true);
+
667 #endif // DECODE_DELONGHI_AC
+
668 #if DECODE_DOSHISHA
+
669  bool decodeDoshisha(decode_results *results, uint16_t offset = kStartOffset,
+
670  const uint16_t nbits = kDoshishaBits,
+
671  const bool strict = true);
+
672 #endif // DECODE_DOSHISHA
+
673 #if DECODE_MULTIBRACKETS
+
674  bool decodeMultibrackets(decode_results *results,
+
675  uint16_t offset = kStartOffset,
+
676  const uint16_t nbits = kMultibracketsBits,
+
677  const bool strict = true);
+
678 #endif // DECODE_MULTIBRACKETS
+
679 #if DECODE_TECHNIBEL_AC
+
680  bool decodeTechnibelAc(decode_results *results,
+
681  uint16_t offset = kStartOffset,
+
682  const uint16_t nbits = kTechnibelAcBits,
+
683  const bool strict = true);
+
684 #endif // DECODE_TECHNIBEL_AC
+
685 #if DECODE_CORONA_AC
+
686  bool decodeCoronaAc(decode_results *results, uint16_t offset = kStartOffset,
+
687  const uint16_t nbits = kCoronaAcBitsShort,
+
688  const bool strict = true);
+
689 #endif // DECODE_CORONA_AC
+
690 #if DECODE_ZEPEAL
+
691  bool decodeZepeal(decode_results *results, uint16_t offset = kStartOffset,
+
692  const uint16_t nbits = kZepealBits,
+
693  const bool strict = true);
+
694 #endif // DECODE_ZEPEAL
+
695 #if DECODE_METZ
+
696  bool decodeMetz(decode_results *results, uint16_t offset = kStartOffset,
+
697  const uint16_t nbits = kMetzBits,
+
698  const bool strict = true);
+
699 #endif // DECODE_METZ
+
700 #if DECODE_TRANSCOLD
+
701  bool decodeTranscold(decode_results *results, uint16_t offset = kStartOffset,
+
702  const uint16_t nbits = kTranscoldBits,
+
703  const bool strict = true);
+
704 #endif // DECODE_TRANSCOLD
+
705 #if DECODE_MIRAGE
+
706  bool decodeMirage(decode_results *results,
+
707  uint16_t offset = kStartOffset,
+
708  const uint16_t nbits = kMirageBits,
+
709  const bool strict = true);
+
710 #endif // DECODE_MIRAGE
+
711 #if DECODE_ELITESCREENS
+
712  bool decodeElitescreens(decode_results *results,
+
713  uint16_t offset = kStartOffset,
+
714  const uint16_t nbits = kEliteScreensBits,
+
715  const bool strict = true);
+
716 #endif // DECODE_ELITESCREENS
+
717 #if DECODE_ECOCLIM
+
718  bool decodeEcoclim(decode_results *results, uint16_t offset = kStartOffset,
+
719  const uint16_t nbits = kEcoclimBits,
+
720  const bool strict = true);
+
721 #endif // DECODE_ECOCLIM
+
722 };
+
723 
+
724 #endif // IRRECV_H_
bool decodeMultibrackets(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMultibracketsBits, const bool strict=true)
Decode the Multibrackets message. Status: BETA / Appears to be working.
Definition: ir_Multibrackets.cpp:59
-
const uint16_t kDelonghiAcBits
Definition: IRremoteESP8266.h:926
-
bool decodeMitsubishi(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
Decode the supplied Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:121
-
const uint16_t kMirageBits
Definition: IRremoteESP8266.h:998
+
uint16_t matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbytes, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)
Match & decode the typical data section of an IR message. The bytes are stored at result_ptr....
Definition: IRrecv.cpp:1282
+
const uint16_t kDelonghiAcBits
Definition: IRremoteESP8266.h:942
+
bool decodeMitsubishi(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
Decode the supplied Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:126
+
const uint16_t kMirageBits
Definition: IRremoteESP8266.h:1016
bool decodeHaierAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACBits, const bool strict=true)
Decode the supplied Haier HSU07-HEA03 remote message. Status: STABLE / Known to be working.
Definition: ir_Haier.cpp:974
bool decodeNEC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNECBits, const bool strict=true)
Decode the supplied NEC (Renesas) message. Status: STABLE / Known good.
Definition: ir_NEC.cpp:81
const uint32_t kFnvPrime32
Definition: IRrecv.h:52
bool overflow
Definition: IRrecv.h:109
-
bool decodeDaikin128(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin128Bits, const bool strict=true)
Decode the supplied Daikin 128-bit message. (DAIKIN128) Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3029
-
const uint16_t kGicableBits
Definition: IRremoteESP8266.h:948
-
uint16_t matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical <= 64bit IR message. The data is stored at result_ptr.
Definition: IRrecv.cpp:1399
-
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:771
-
const uint16_t kCarrierAcBits
Definition: IRremoteESP8266.h:891
-
bool decodeTranscold(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTranscoldBits, const bool strict=true)
Decode the supplied Transcold A/C message. Status: STABLE / Known Working.
Definition: ir_Transcold.cpp:482
+
bool decodeDaikin128(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin128Bits, const bool strict=true)
Decode the supplied Daikin 128-bit message. (DAIKIN128) Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3001
+
const uint16_t kGicableBits
Definition: IRremoteESP8266.h:966
+
uint16_t matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical <= 64bit IR message. The data is stored at result_ptr.
Definition: IRrecv.cpp:1436
+
decode_type_t
Enumerator for defining and numbering of supported IR protocol.
Definition: IRremoteESP8266.h:785
+
const uint16_t kCarrierAcBits
Definition: IRremoteESP8266.h:907
+
bool decodeTranscold(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTranscoldBits, const bool strict=true)
Decode the supplied Transcold A/C message. Status: STABLE / Known Working.
Definition: ir_Transcold.cpp:447
int16_t getRClevel(decode_results *results, uint16_t *offset, uint16_t *used, uint16_t bitTime, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const uint16_t delta=0, const uint8_t maxwidth=3)
Gets one undecoded level at a time from the raw buffer. The RC5/6 decoding is easier if the data is b...
Definition: ir_RC5_RC6.cpp:243
-
const uint16_t kMultibracketsBits
Definition: IRremoteESP8266.h:1019
-
const uint16_t kSharpAcBits
Definition: IRremoteESP8266.h:1060
-
const uint16_t kWhynterBits
Definition: IRremoteESP8266.h:1091
-
bool decodeSanyoAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoAcBits, const bool strict=true)
Decode the supplied SanyoAc message. Status: STABLE / Reported as working.
Definition: ir_Sanyo.cpp:272
+
const uint16_t kMultibracketsBits
Definition: IRremoteESP8266.h:1037
+
const uint16_t kSharpAcBits
Definition: IRremoteESP8266.h:1078
+
const uint16_t kWhynterBits
Definition: IRremoteESP8266.h:1109
+
bool decodeSanyoAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoAcBits, const bool strict=true)
Decode the supplied SanyoAc message. Status: STABLE / Reported as working.
Definition: ir_Sanyo.cpp:273
uint8_t overflow
Definition: IRrecv.h:78
-
bool decodeMitsubishi2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
Decode the supplied second variation of a Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:186
+
bool decodeMitsubishi2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiBits, const bool strict=true)
Decode the supplied second variation of a Mitsubishi 16-bit message. Status: STABLE / Working.
Definition: ir_Mitsubishi.cpp:191
bool decodeGree(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGreeBits, const bool strict=true)
Decode the supplied Gree HVAC message. Status: STABLE / Working.
Definition: ir_Gree.cpp:659
-
const uint16_t kAirwellBits
Definition: IRremoteESP8266.h:878
+
const uint16_t kAirwellBits
Definition: IRremoteESP8266.h:894
irparams_t * irparams_save
Definition: IRrecv.h:151
-
const uint16_t kMitsubishiACBits
Definition: IRremoteESP8266.h:1005
-
bool decodeFujitsuAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kFujitsuAcBits, const bool strict=false)
Decode the supplied Fujitsu AC IR message if possible. Status: STABLE / Working.
Definition: ir_Fujitsu.cpp:892
-
const uint16_t kTechnibelAcBits
Definition: IRremoteESP8266.h:928
+
const uint16_t kMitsubishiACBits
Definition: IRremoteESP8266.h:1023
+
bool decodeFujitsuAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kFujitsuAcBits, const bool strict=false)
Decode the supplied Fujitsu AC IR message if possible. Status: STABLE / Working.
Definition: ir_Fujitsu.cpp:897
+
const uint16_t kTechnibelAcBits
Definition: IRremoteESP8266.h:944
bool decodeTrotec(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTrotecBits, const bool strict=true)
Decode the supplied Trotec message. Status: STABLE / Works. Untested on real devices.
Definition: ir_Trotec.cpp:313
bool decodeNeoclima(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNeoclimaBits, const bool strict=true)
Decode the supplied Neoclima message. Status: STABLE / Known working.
Definition: ir_Neoclima.cpp:571
-
const uint16_t kVoltasBits
Definition: IRremoteESP8266.h:1095
-
bool decodeMitsubishi112(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi112Bits, const bool strict=true)
Decode the supplied Mitsubishi/TCL 112-bit A/C message. (MITSUBISHI112, TCL112AC) Status: STABLE / Re...
Definition: ir_Mitsubishi.cpp:1201
+
const uint16_t kVoltasBits
Definition: IRremoteESP8266.h:1113
+
bool decodeMitsubishi112(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi112Bits, const bool strict=true)
Decode the supplied Mitsubishi/TCL 112-bit A/C message. (MITSUBISHI112, TCL112AC) Status: STABLE / Re...
Definition: ir_Mitsubishi.cpp:1243
bool decodeSamsungAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungAcBits, const bool strict=true)
Decode the supplied Samsung A/C message. Status: Stable / Known to be working.
Definition: ir_Samsung.cpp:772
bool decodeAirwell(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAirwellBits, const bool strict=true)
Decode the supplied Airwell "Manchester code" message.
Definition: ir_Airwell.cpp:53
-
const uint16_t kRC5XBits
Definition: IRremoteESP8266.h:1038
+
const uint16_t kRC5XBits
Definition: IRremoteESP8266.h:1056
bool decodeMagiQuest(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMagiquestBits, const bool strict=true)
Decode the supplied MagiQuest message. Status: Beta / Should work.
Definition: ir_Magiquest.cpp:69
uint16_t rawlen
Definition: IRrecv.h:77
const uint8_t kUseDefTol
Definition: IRrecv.h:36
@@ -819,209 +832,212 @@ $(function() {
Class for receiving IR messages.
Definition: IRrecv.h:114
uint16_t bufsize
Definition: IRrecv.h:73
Results returned from the decoder.
Definition: IRrecv.h:92
-
uint16_t matchGenericConstBitTime(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t one, const uint32_t zero, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical constant bit time <= 64bit IR message. The data is stored at result_...
Definition: IRrecv.cpp:1493
+
uint16_t matchGenericConstBitTime(volatile uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t one, const uint32_t zero, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical constant bit time <= 64bit IR message. The data is stored at result_...
Definition: IRrecv.cpp:1530
bool decodeCarrierAC64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc64Bits, const bool strict=true)
Decode the supplied Carrier 64-bit HVAC message. Status: STABLE / Known to be working.
Definition: ir_Carrier.cpp:195
-
const uint16_t kCoolixBits
Definition: IRremoteESP8266.h:889
+
const uint16_t kCoolixBits
Definition: IRremoteESP8266.h:905
bool decodeArgo(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kArgoBits, const bool strict=true)
Decode the supplied Argo message. Status: BETA / Probably works.
Definition: ir_Argo.cpp:445
-
const uint16_t kCoronaAcBitsShort
Definition: IRremoteESP8266.h:899
+
const uint16_t kCoronaAcBitsShort
Definition: IRremoteESP8266.h:915
uint64_t data
Definition: IRrecv.h:85
-
const uint16_t kSamsung36Bits
Definition: IRremoteESP8266.h:1043
-
const uint16_t kMagiquestBits
Definition: IRremoteESP8266.h:990
+
const uint16_t kSamsung36Bits
Definition: IRremoteESP8266.h:1061
+
const uint16_t kMagiquestBits
Definition: IRremoteESP8266.h:1008
uint16_t * rawbuf
Definition: IRrecv.h:74
Information for the interrupt handler.
Definition: IRrecv.h:69
uint16_t getBufSize(void)
Obtain the maximum number of entries possible in the capture buffer. i.e. It's size.
Definition: IRrecv.cpp:411
-
const uint16_t kSanyoLC7461Bits
Definition: IRremoteESP8266.h:1054
+
const uint16_t kSanyoLC7461Bits
Definition: IRremoteESP8266.h:1072
bool repeat
Definition: IRrecv.h:110
bool decodeHitachiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAcBits, const bool strict=true, const bool MSBfirst=true)
Decode the supplied Hitachi A/C message. Status: STABLE / Expected to work.
Definition: ir_Hitachi.cpp:846
-
const uint16_t kTrotecBits
Definition: IRremoteESP8266.h:1086
+
const uint16_t kTrotecBits
Definition: IRremoteESP8266.h:1104
bool decodeVestelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVestelAcBits, const bool strict=true)
Decode the supplied Vestel message. Status: Alpha / Needs testing against a real device.
Definition: ir_Vestel.cpp:572
const uint8_t kIdleState
Definition: IRrecv.h:31
bool decodeAmcor(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAmcorBits, const bool strict=true)
Decode the supplied Amcor HVAC message. Status: STABLE / Reported as working.
Definition: ir_Amcor.cpp:58
-
bool decodeDaikin(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikinBits, const bool strict=true)
Decode the supplied Daikin 280-bit message. (DAIKIN) Status: STABLE / Reported as working.
Definition: ir_Daikin.cpp:595
-
const uint16_t kEliteScreensBits
Definition: IRremoteESP8266.h:941
+
bool decodeDaikin(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikinBits, const bool strict=true)
Decode the supplied Daikin 280-bit message. (DAIKIN) Status: STABLE / Reported as working.
Definition: ir_Daikin.cpp:597
+
const uint16_t kEliteScreensBits
Definition: IRremoteESP8266.h:959
uint8_t recvpin
Definition: IRrecv.h:70
uint16_t timer
Definition: IRrecv.h:72
-
bool decodeDaikin64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin64Bits, const bool strict=true)
Decode the supplied Daikin 64-bit message. (DAIKIN64) Status: Beta / Probably Working.
Definition: ir_Daikin.cpp:3501
+
bool decodeDaikin64(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin64Bits, const bool strict=true)
Decode the supplied Daikin 64-bit message. (DAIKIN64) Status: Beta / Probably Working.
Definition: ir_Daikin.cpp:3473
bool decodeMetz(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMetzBits, const bool strict=true)
Decode the supplied Metz message. Status: BETA / Probably works.
Definition: ir_Metz.cpp:67
bool success
Definition: IRrecv.h:84
-
bool decodeDaikin2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin2Bits, const bool strict=true)
Decode the supplied Daikin 312-bit message. (DAIKIN2) Status: STABLE / Works as expected.
Definition: ir_Daikin.cpp:1379
-
const uint16_t kElectraAcBits
Definition: IRremoteESP8266.h:939
-
bool matchSpace(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
Check if we match a space signal(measured) with the desired within +/-tolerance percent,...
Definition: IRrecv.cpp:1131
-
const uint16_t kSonyMinBits
Definition: IRremoteESP8266.h:1067
+
bool decodeDaikin2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin2Bits, const bool strict=true)
Decode the supplied Daikin 312-bit message. (DAIKIN2) Status: STABLE / Works as expected.
Definition: ir_Daikin.cpp:1352
+
const uint16_t kElectraAcBits
Definition: IRremoteESP8266.h:957
+
bool matchSpace(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
Check if we match a space signal(measured) with the desired within +/-tolerance percent,...
Definition: IRrecv.cpp:1144
+
const uint16_t kSonyMinBits
Definition: IRremoteESP8266.h:1085
const uint8_t kStopState
Definition: IRrecv.h:34
uint16_t rawlen
Definition: IRrecv.h:108
const uint16_t kMaxTimeoutMs
Definition: IRrecv.h:49
-
bool decodePanasonicAC32(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAc32Bits, const bool strict=true)
Decode the supplied Panasonic AC 32/16bit message. Status: STABLE / Confirmed working.
Definition: ir_Panasonic.cpp:990
-
const uint16_t kDaikin2Bits
Definition: IRremoteESP8266.h:907
-
bool decodePanasonic(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicBits, const bool strict=false, const uint32_t manufacturer=kPanasonicManufacturer)
Decode the supplied Panasonic message. Status: STABLE / Should be working.
Definition: ir_Panasonic.cpp:126
-
const uint16_t kHitachiAc1Bits
Definition: IRremoteESP8266.h:965
+
bool decodePanasonicAC32(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAc32Bits, const bool strict=true)
Decode the supplied Panasonic AC 32/16bit message. Status: STABLE / Confirmed working.
Definition: ir_Panasonic.cpp:980
+
const uint16_t kDaikin2Bits
Definition: IRremoteESP8266.h:923
+
bool decodePanasonic(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicBits, const bool strict=false, const uint32_t manufacturer=kPanasonicManufacturer)
Decode the supplied Panasonic message. Status: STABLE / Should be working.
Definition: ir_Panasonic.cpp:128
+
const uint16_t kHitachiAc1Bits
Definition: IRremoteESP8266.h:983
bool decodeElectraAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kElectraAcBits, const bool strict=true)
Decode the supplied Electra A/C message. Status: STABLE / Known working.
Definition: ir_Electra.cpp:370
-
bool decodeDaikin216(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin216Bits, const bool strict=true)
Decode the supplied Daikin 216-bit message. (DAIKIN216) Status: STABLE / Should be working.
Definition: ir_Daikin.cpp:1742
-
bool decodeDaikin152(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin152Bits, const bool strict=true)
Decode the supplied Daikin 152-bit message. (DAIKIN152) Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3118
+
bool decodeDaikin216(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin216Bits, const bool strict=true)
Decode the supplied Daikin 216-bit message. (DAIKIN216) Status: STABLE / Should be working.
Definition: ir_Daikin.cpp:1715
+
bool decodeDaikin152(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin152Bits, const bool strict=true)
Decode the supplied Daikin 152-bit message. (DAIKIN152) Status: STABLE / Known Working.
Definition: ir_Daikin.cpp:3090
bool decodeElitescreens(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEliteScreensBits, const bool strict=true)
Decode the supplied Elite Screens message. Status: STABLE / Confirmed working.
Definition: ir_EliteScreens.cpp:63
bool decodeDenon(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDenonBits, const bool strict=true)
Decode the supplied Delonghi A/C message. Status: STABLE / Should work fine.
Definition: ir_Denon.cpp:70
-
const uint16_t kPanasonicBits
Definition: IRremoteESP8266.h:1026
+
const uint16_t kPanasonicBits
Definition: IRremoteESP8266.h:1044
+
const uint16_t kMilesTag2ShotBits
Definition: IRremoteESP8266.h:1115
decode_type_t decode_type
Definition: IRrecv.h:94
-
const uint16_t kPanasonicAcBits
Definition: IRremoteESP8266.h:1030
-
bool decodeTechnibelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTechnibelAcBits, const bool strict=true)
Status: STABLE / Reported as working on a real device.
Definition: ir_Technibel.cpp:56
+
const uint16_t kPanasonicAcBits
Definition: IRremoteESP8266.h:1048
+
bool decodeTechnibelAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTechnibelAcBits, const bool strict=true)
Status: STABLE / Reported as working on a real device.
Definition: ir_Technibel.cpp:54
const uint64_t kRepeat
Definition: IRrecv.h:26
void setTolerance(const uint8_t percent=kTolerance)
Set the base tolerance percentage for matching incoming IR messages.
Definition: IRrecv.cpp:424
bool decodeMidea(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMideaBits, const bool strict=true)
Decode the supplied Midea message. Status: Alpha / Needs testing against a real device.
Definition: ir_Midea.cpp:666
bool decodeVoltas(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kVoltasBits, const bool strict=true)
Decode the supplied Voltas message. Status: STABLE / Working on real device.
Definition: ir_Voltas.cpp:61
-
const uint16_t kDaikin160Bits
Definition: IRremoteESP8266.h:912
+
const uint16_t kDaikin160Bits
Definition: IRremoteESP8266.h:928
void copyIrParams(volatile irparams_t *src, irparams_t *dst)
Make a copy of the interrupt state & buffer data. Needed because irparams is marked as volatile,...
Definition: IRrecv.cpp:387
bool decodeKelvinator(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kKelvinatorBits, const bool strict=true)
Decode the supplied Kelvinator message. Status: STABLE / Known working.
Definition: ir_Kelvinator.cpp:459
-
const uint16_t kGoodweatherBits
Definition: IRremoteESP8266.h:950
+
const uint16_t kGoodweatherBits
Definition: IRremoteESP8266.h:968
bool decodeMWM(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=24, const bool strict=true)
Decode the supplied MWM message. Status: Implemented.
Definition: ir_MWM.cpp:81
void enableIRIn(const bool pullup=false)
Set up and (re)start the IR capture mechanism.
Definition: IRrecv.cpp:319
-
const uint16_t kDaikin152Bits
Definition: IRremoteESP8266.h:918
-
bool decodePanasonicAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAcBits, const bool strict=true)
Decode the supplied Panasonic AC message. Status: STABLE / Works with real device(s).
Definition: ir_Panasonic.cpp:861
+
const uint16_t kDaikin152Bits
Definition: IRremoteESP8266.h:934
+
bool decodePanasonicAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPanasonicAcBits, const bool strict=true)
Decode the supplied Panasonic AC message. Status: STABLE / Works with real device(s).
Definition: ir_Panasonic.cpp:851
bool decodeDoshisha(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDoshishaBits, const bool strict=true)
Decode the supplied Doshisha message. Status: STABLE / Works on real device.
Definition: ir_Doshisha.cpp:85
bool decodeZepeal(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kZepealBits, const bool strict=true)
Decode the supplied Zepeal message. Status: STABLE / Works on real device.
Definition: ir_Zepeal.cpp:67
-
bool decodeDaikin160(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin160Bits, const bool strict=true)
Decode the supplied Daikin 160-bit message. (DAIKIN160) Status: STABLE / Confirmed working.
Definition: ir_Daikin.cpp:2107
+
bool decodeDaikin160(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin160Bits, const bool strict=true)
Decode the supplied Daikin 160-bit message. (DAIKIN160) Status: STABLE / Confirmed working.
Definition: ir_Daikin.cpp:2080
bool decodeLasertag(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLasertagBits, const bool strict=true)
Decode the supplied Lasertag message. Status: BETA / Appears to be working 90% of the time.
Definition: ir_Lasertag.cpp:70
const uint8_t kTimeoutMs
Definition: IRrecv.h:47
-
uint16_t _matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_bits_ptr, uint8_t *result_ptr, const bool use_bits, const uint16_t remaining, const uint16_t required, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical IR message. The data is stored in result_bits_ptr or result_bytes_pt...
Definition: IRrecv.cpp:1299
+
uint16_t _matchGeneric(volatile uint16_t *data_ptr, uint64_t *result_bits_ptr, uint8_t *result_ptr, const bool use_bits, const uint16_t remaining, const uint16_t required, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode a generic/typical IR message. The data is stored in result_bits_ptr or result_bytes_pt...
Definition: IRrecv.cpp:1334
const uint8_t kMarkState
Definition: IRrecv.h:32
void setUnknownThreshold(const uint16_t length)
Set the minimum length we will consider for reporting UNKNOWN message types.
Definition: IRrecv.cpp:416
-
const uint16_t kSymphonyBits
Definition: IRremoteESP8266.h:1069
+
const uint16_t kSymphonyBits
Definition: IRremoteESP8266.h:1087
bool decodeMirage(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMirageBits, const bool strict=true)
Decode the supplied Mirage message. Status: STABLE / Reported as working.
Definition: ir_Mirage.cpp:50
-
const uint16_t kRC6Mode0Bits
Definition: IRremoteESP8266.h:1039
+
const uint16_t kRC6Mode0Bits
Definition: IRremoteESP8266.h:1057
const uint16_t kStateSizeMax
Definition: IRrecv.h:60
Results from a data match.
Definition: IRrecv.h:83
uint8_t rcvstate
Definition: IRrecv.h:71
-
const uint16_t kMetzBits
Definition: IRremoteESP8266.h:991
+
const uint16_t kMetzBits
Definition: IRremoteESP8266.h:1009
bool decodeRC6(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC6Mode0Bits, const bool strict=false)
Decode the supplied RC6 message. Status: Stable.
Definition: ir_RC5_RC6.cpp:383
bool decodeRC5(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRC5XBits, const bool strict=true)
Decode the supplied RC-5/RC5X message. Status: RC-5 (stable), RC-5X (alpha)
Definition: ir_RC5_RC6.cpp:309
~IRrecv(void)
Class destructor Cleans up after the object is no longer needed. e.g. Frees up all memory used by the...
Definition: IRrecv.cpp:304
bool decodeHitachiAc3(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc3Bits, const bool strict=true)
Decode the supplied Hitachi 15to27-byte/120to216-bit A/C message. Status: STABLE / Works fine.
Definition: ir_Hitachi.cpp:1425
bool decodeWhynter(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhynterBits, const bool strict=true)
Decode the supplied Whynter message. Status: STABLE / Working. Strict mode is ALPHA.
Definition: ir_Whynter.cpp:74
bool decodeCarrierAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAcBits, const bool strict=true)
Decode the supplied Carrier HVAC message.
Definition: ir_Carrier.cpp:82
-
match_result_t matchData(volatile uint16_t *data_ptr, const uint16_t nbits, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode the typical data section of an IR message. The data value is stored in the least signi...
Definition: IRrecv.cpp:1207
-
const uint16_t kMitsubishiHeavy152Bits
Definition: IRremoteESP8266.h:1017
-
const uint16_t kDoshishaBits
Definition: IRremoteESP8266.h:935
-
const uint16_t kCarrierAc40Bits
Definition: IRremoteESP8266.h:893
+
const uint16_t kMitsubishiHeavy152Bits
Definition: IRremoteESP8266.h:1035
+
const uint16_t kDoshishaBits
Definition: IRremoteESP8266.h:951
+
const uint16_t kCarrierAc40Bits
Definition: IRremoteESP8266.h:909
const uint16_t kStartOffset
Definition: IRrecv.h:20
-
const uint16_t kAmcorBits
Definition: IRremoteESP8266.h:884
+
const uint16_t kAmcorBits
Definition: IRremoteESP8266.h:900
bool decodeRCMM(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kRCMMBits, const bool strict=false)
Decode a Philips RC-MM packet (between 12 & 32 bits) if possible. Status: STABLE / Should be working.
Definition: ir_RCMM.cpp:96
IRrecv(const uint16_t recvpin, const uint16_t bufsize=kRawBuf, const uint8_t timeout=kTimeoutMs, const bool save_buffer=false, const uint8_t timer_num=kDefaultESP32Timer)
Class constructor Args:
Definition: IRrecv.cpp:243
-
bool decodeMitsubishi136(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi136Bits, const bool strict=true)
Decode the supplied Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: STABLE / Reported as work...
Definition: ir_Mitsubishi.cpp:829
+
bool decodeMitsubishi136(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishi136Bits, const bool strict=true)
Decode the supplied Mitsubishi 136-bit A/C message. (MITSUBISHI136) Status: STABLE / Reported as work...
Definition: ir_Mitsubishi.cpp:869
volatile uint16_t * rawbuf
Definition: IRrecv.h:107
const uint8_t kTolerance
Definition: IRrecv.h:35
bool decodeSharp(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpBits, const bool strict=true, const bool expansion=true)
Decode the supplied Sharp message. Status: STABLE / Working fine.
Definition: ir_Sharp.cpp:155
uint16_t used
Definition: IRrecv.h:86
-
const uint32_t kPanasonicManufacturer
Definition: IRremoteESP8266.h:1027
+
const uint32_t kPanasonicManufacturer
Definition: IRremoteESP8266.h:1045
uint32_t address
Definition: IRrecv.h:101
bool decodeNikai(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kNikaiBits, const bool strict=true)
Decode the supplied Nikai message. Status: STABLE / Working.
Definition: ir_Nikai.cpp:52
-
const uint16_t kMitsubishiBits
Definition: IRremoteESP8266.h:1000
-
bool match(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Check if we match a pulse(measured) with the desired within +/-tolerance percent and/or +/- a fixed d...
Definition: IRrecv.cpp:1039
+
const uint16_t kMitsubishiBits
Definition: IRremoteESP8266.h:1018
+
bool match(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Check if we match a pulse(measured) with the desired within +/-tolerance percent and/or +/- a fixed d...
Definition: IRrecv.cpp:1052
bool decodeSymphony(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSymphonyBits, const bool strict=true)
Decode the supplied Symphony packet/message. Status: STABLE / Should be working.
Definition: ir_Symphony.cpp:60
-
const uint16_t kSamsungAcBits
Definition: IRremoteESP8266.h:1045
+
const uint16_t kSamsungAcBits
Definition: IRremoteESP8266.h:1063
const uint16_t kUnknownThreshold
Definition: IRrecv.h:28
-
const uint16_t kMideaBits
Definition: IRremoteESP8266.h:993
+
const uint16_t kMideaBits
Definition: IRremoteESP8266.h:1011
bool decodeAiwaRCT501(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kAiwaRcT501Bits, const bool strict=true)
Decode the supplied Aiwa RC T501 message. Status: BETA / Should work.
Definition: ir_Aiwa.cpp:61
-
const uint16_t kKelvinatorBits
Definition: IRremoteESP8266.h:980
+
const uint16_t kKelvinatorBits
Definition: IRremoteESP8266.h:998
bool decodeGICable(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGicableBits, const bool strict=true)
Decode the supplied G.I. Cable message. Status: Alpha / Not tested against a real device.
Definition: ir_GICable.cpp:63
-
bool decodeTeco(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTecoBits, const bool strict=false)
Decode the supplied Teco message. Status: STABLE / Tested.
Definition: ir_Teco.cpp:365
-
bool decodeSanyoLC7461(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoLC7461Bits, const bool strict=true)
Decode the supplied SANYO LC7461 message. Status: BETA / Probably works.
Definition: ir_Sanyo.cpp:135
+
bool decodeTeco(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kTecoBits, const bool strict=false)
Decode the supplied Teco message. Status: STABLE / Tested.
Definition: ir_Teco.cpp:353
+
bool decodeSanyoLC7461(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSanyoLC7461Bits, const bool strict=true)
Decode the supplied SANYO LC7461 message. Status: BETA / Probably works.
Definition: ir_Sanyo.cpp:136
bool decodeCarrierAC40(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCarrierAc40Bits, const bool strict=true)
Decode the supplied Carrier 40-bit HVAC message. Carrier HVAC messages contain only 40 bits,...
Definition: ir_Carrier.cpp:147
-
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1022
-
const uint16_t kDenonBits
Definition: IRremoteESP8266.h:930
-
const uint16_t kHaierACBits
Definition: IRremoteESP8266.h:956
-
bool matchAtLeast(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Check if we match a pulse(measured) of at least desired within tolerance percent and/or a fixed delta...
Definition: IRrecv.cpp:1070
-
const uint16_t kZepealBits
Definition: IRremoteESP8266.h:1093
-
const uint16_t kMidea24Bits
Definition: IRremoteESP8266.h:995
-
bool decodeDaikin176(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin176Bits, const bool strict=true)
Decode the supplied Daikin 176-bit message. (DAIKIN176) Status: STABLE / Expected to work.
Definition: ir_Daikin.cpp:2500
-
const uint16_t kNeoclimaBits
Definition: IRremoteESP8266.h:1024
-
const uint16_t kWhirlpoolAcBits
Definition: IRremoteESP8266.h:1089
-
bool decodeSharpAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpAcBits, const bool strict=true)
Decode the supplied Sharp A/C message. Status: STABLE / Known working.
Definition: ir_Sharp.cpp:821
+
const uint16_t kNECBits
Definition: IRremoteESP8266.h:1040
+
const uint16_t kDenonBits
Definition: IRremoteESP8266.h:946
+
const uint16_t kHaierACBits
Definition: IRremoteESP8266.h:974
+
bool matchAtLeast(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Check if we match a pulse(measured) of at least desired within tolerance percent and/or a fixed delta...
Definition: IRrecv.cpp:1083
+
const uint16_t kZepealBits
Definition: IRremoteESP8266.h:1111
+
const uint16_t kMidea24Bits
Definition: IRremoteESP8266.h:1013
+
bool decodeDaikin176(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDaikin176Bits, const bool strict=true)
Decode the supplied Daikin 176-bit message. (DAIKIN176) Status: STABLE / Expected to work.
Definition: ir_Daikin.cpp:2472
+
const uint16_t kNeoclimaBits
Definition: IRremoteESP8266.h:1042
+
const uint16_t kWhirlpoolAcBits
Definition: IRremoteESP8266.h:1107
+
bool decodeSharpAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSharpAcBits, const bool strict=true)
Decode the supplied Sharp A/C message. Status: STABLE / Known working.
Definition: ir_Sharp.cpp:855
bool decodeJVC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kJvcBits, const bool strict=true)
Decode the supplied JVC message. Status: Stable / Known working.
Definition: ir_JVC.cpp:94
-
bool decodeMitsubishiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiACBits, const bool strict=false)
Decode the supplied Mitsubish 144-bit A/C message. Status: BETA / Probably works.
Definition: ir_Mitsubishi.cpp:252
-
const uint16_t kCarrierAc64Bits
Definition: IRremoteESP8266.h:895
-
const uint16_t kPioneerBits
Definition: IRremoteESP8266.h:1034
+
bool decodeEcoclim(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEcoclimBits, const bool strict=true)
Decode the supplied EcoClim A/C message. Status: STABLE / Confirmed working on real remote.
Definition: ir_EcoClim.cpp:62
+
bool decodeMitsubishiAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiACBits, const bool strict=false)
Decode the supplied Mitsubish 144-bit A/C message. Status: BETA / Probably works.
Definition: ir_Mitsubishi.cpp:257
+
const uint16_t kCarrierAc64Bits
Definition: IRremoteESP8266.h:911
+
const uint16_t kPioneerBits
Definition: IRremoteESP8266.h:1052
uint16_t bits
Definition: IRrecv.h:106
-
const uint16_t kGreeBits
Definition: IRremoteESP8266.h:953
-
const uint16_t kJvcBits
Definition: IRremoteESP8266.h:978
-
const uint16_t kLasertagBits
Definition: IRremoteESP8266.h:982
-
const uint16_t kDaikin128Bits
Definition: IRremoteESP8266.h:915
-
const uint16_t kAiwaRcT501Bits
Definition: IRremoteESP8266.h:880
-
uint32_t ticksLow(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Calculate the lower bound of the nr. of ticks.
Definition: IRrecv.cpp:1013
-
const uint16_t kTecoBits
Definition: IRremoteESP8266.h:1074
+
const uint16_t kGreeBits
Definition: IRremoteESP8266.h:971
+
const uint16_t kJvcBits
Definition: IRremoteESP8266.h:996
+
const uint16_t kLasertagBits
Definition: IRremoteESP8266.h:1000
+
const uint16_t kDaikin128Bits
Definition: IRremoteESP8266.h:931
+
const uint16_t kAiwaRcT501Bits
Definition: IRremoteESP8266.h:896
+
uint32_t ticksLow(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Calculate the lower bound of the nr. of ticks.
Definition: IRrecv.cpp:1026
+
const uint16_t kTecoBits
Definition: IRremoteESP8266.h:1092
bool decodeEpson(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kEpsonBits, const bool strict=true)
Decode the supplied Epson message. Status: Beta / Probably works.
Definition: ir_Epson.cpp:45
-
const uint16_t kToshibaACBits
Definition: IRremoteESP8266.h:1077
+
const uint16_t kToshibaACBits
Definition: IRremoteESP8266.h:1095
bool decodeSony(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSonyMinBits, const bool strict=false)
Decode the supplied Sony/SIRC message. Status: STABLE / Should be working. strict mode is ALPHA / Unt...
Definition: ir_Sony.cpp:121
-
const uint16_t kDaikinBits
Definition: IRremoteESP8266.h:902
-
bool matchMark(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
Check if we match a mark signal(measured) with the desired within +/-tolerance percent,...
Definition: IRrecv.cpp:1112
-
const uint16_t kHitachiAcBits
Definition: IRremoteESP8266.h:962
-
const uint16_t kHitachiAc3Bits
Definition: IRremoteESP8266.h:969
+
const uint16_t kDaikinBits
Definition: IRremoteESP8266.h:918
+
bool matchMark(const uint32_t measured, const uint32_t desired, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess)
Check if we match a mark signal(measured) with the desired within +/-tolerance percent,...
Definition: IRrecv.cpp:1125
+
const uint16_t kHitachiAcBits
Definition: IRremoteESP8266.h:980
+
const uint16_t kHitachiAc3Bits
Definition: IRremoteESP8266.h:987
const uint16_t kRawBuf
Definition: IRrecv.h:25
bool decode(decode_results *results, irparams_t *save=NULL, uint8_t max_skip=0, uint16_t noise_floor=0)
Decodes the received IR message. If the interrupt state is saved, we will immediately resume waiting ...
Definition: IRrecv.cpp:501
bool decodePioneer(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kPioneerBits, const bool strict=true)
Decode the supplied Pioneer message. Status: STABLE / Should be working. (Self decodes & real example...
Definition: ir_Pioneer.cpp:92
uint8_t getTolerance(void)
Get the base tolerance percentage for matching incoming IR messages.
Definition: IRrecv.cpp:430
-
const uint16_t kDishBits
Definition: IRremoteESP8266.h:933
-
uint16_t compare(const uint16_t oldval, const uint16_t newval)
Compare two tick values.
Definition: IRrecv.cpp:1149
+
const uint16_t kDishBits
Definition: IRremoteESP8266.h:949
+
uint16_t compare(const uint16_t oldval, const uint16_t newval)
Compare two tick values.
Definition: IRrecv.cpp:1162
uint32_t command
Definition: IRrecv.h:102
-
const uint16_t kFujitsuAcBits
Definition: IRremoteESP8266.h:946
+
const uint16_t kFujitsuAcBits
Definition: IRremoteESP8266.h:964
uint64_t value
Definition: IRrecv.h:100
-
const uint16_t kArgoBits
Definition: IRremoteESP8266.h:887
-
const uint16_t kHitachiAc2StateLength
Definition: IRremoteESP8266.h:966
+
const uint16_t kArgoBits
Definition: IRremoteESP8266.h:903
+
const uint16_t kHitachiAc2StateLength
Definition: IRremoteESP8266.h:984
bool decodeSamsung36(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsung36Bits, const bool strict=true)
Decode the supplied Samsung36 message. Status: STABLE / Expected to work.
Definition: ir_Samsung.cpp:192
const uint16_t kFooter
Definition: IRrecv.h:19
-
const uint16_t kNikaiBits
Definition: IRremoteESP8266.h:1021
-
const uint16_t kLutronBits
Definition: IRremoteESP8266.h:989
+
const uint16_t kNikaiBits
Definition: IRremoteESP8266.h:1039
+
const uint16_t kLutronBits
Definition: IRremoteESP8266.h:1007
uint8_t timeout
Definition: IRrecv.h:79
bool decodeCoronaAc(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoronaAcBitsShort, const bool strict=true)
Decode the supplied CoronaAc message. Status: STABLE / Appears to be working.
Definition: ir_Corona.cpp:88
bool decodeLutron(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLutronBits, const bool strict=true)
Decode the supplied Lutron message. Status: STABLE / Working.
Definition: ir_Lutron.cpp:65
bool decodeDISH(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kDishBits, const bool strict=true)
Decode the supplied DISH NETWORK message. Status: ALPHA (untested and unconfirmed....
Definition: ir_Dish.cpp:77
const uint16_t kRawTick
Definition: IRrecv.h:37
-
uint16_t matchManchesterData(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t half_period, const uint16_t starting_balance=0, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
Match & decode a Manchester Code data (<= 64bits.
Definition: IRrecv.cpp:1687
+
uint16_t matchManchesterData(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t half_period, const uint16_t starting_balance=0, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
Match & decode a Manchester Code data (<= 64bits.
Definition: IRrecv.cpp:1724
void resume(void)
Resume collection of received IR data.
Definition: IRrecv.cpp:372
-
const uint16_t kHaierACYRW02Bits
Definition: IRremoteESP8266.h:959
-
const uint16_t kHitachiAc424Bits
Definition: IRremoteESP8266.h:975
+
bool decodeMilestag2(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMilesTag2ShotBits, const bool strict=true)
Decode the supplied MilesTag2 message. Status: ALPHA / Probably works but needs testing with a real d...
Definition: ir_MilesTag2.cpp:63
+
const uint16_t kEcoclimBits
Definition: IRremoteESP8266.h:952
+
const uint16_t kHaierACYRW02Bits
Definition: IRremoteESP8266.h:977
+
match_result_t matchData(volatile uint16_t *data_ptr, const uint16_t nbits, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool expectlastspace=true)
Match & decode the typical data section of an IR message. The data value is stored in the least signi...
Definition: IRrecv.cpp:1221
+
const uint16_t kHitachiAc424Bits
Definition: IRremoteESP8266.h:993
bool decodeWhirlpoolAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kWhirlpoolAcBits, const bool strict=true)
Decode the supplied Whirlpool A/C message. Status: STABLE / Working as intended.
Definition: ir_Whirlpool.cpp:652
const uint16_t kMarkExcess
Definition: IRrecv.h:24
bool decodeHaierACYRW02(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHaierACYRW02Bits, const bool strict=true)
Decode the supplied Haier YR-W02 remote A/C message. Status: BETA / Appears to be working.
Definition: ir_Haier.cpp:1020
bool decodeLG(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLgBits, const bool strict=false)
Decode the supplied LG message. Status: STABLE / Working.
Definition: ir_LG.cpp:139
bool decodeCOOLIX(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kCoolixBits, const bool strict=true)
Decode the supplied Coolix A/C message. Status: STABLE / Known Working.
Definition: ir_Coolix.cpp:628
-
const uint16_t kLegoPfBits
Definition: IRremoteESP8266.h:984
-
const uint16_t kSharpBits
Definition: IRremoteESP8266.h:1058
+
const uint16_t kLegoPfBits
Definition: IRremoteESP8266.h:1002
+
const uint16_t kSharpBits
Definition: IRremoteESP8266.h:1076
bool decodeGoodweather(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kGoodweatherBits, const bool strict=true)
Decode the supplied Goodweather message. Status: BETA / Probably works.
Definition: ir_Goodweather.cpp:424
uint8_t _tolerance
Definition: IRrecv.h:152
const uint8_t kDefaultESP32Timer
Definition: IRrecv.h:56
-
uint16_t matchManchester(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t clock_period, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
Match & decode a Manchester Code <= 64bit IR message. The data is stored at result_ptr.
Definition: IRrecv.cpp:1580
+
uint16_t matchManchester(volatile const uint16_t *data_ptr, uint64_t *result_ptr, const uint16_t remaining, const uint16_t nbits, const uint16_t hdrmark, const uint32_t hdrspace, const uint16_t clock_period, const uint16_t footermark, const uint32_t footerspace, const bool atleast=false, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true, const bool GEThomas=true)
Match & decode a Manchester Code <= 64bit IR message. The data is stored at result_ptr.
Definition: IRrecv.cpp:1617
bool decodeInax(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kInaxBits, const bool strict=true)
Decode the supplied Inax Toilet message. Status: Stable / Known working.
Definition: ir_Inax.cpp:51
void crudeNoiseFilter(decode_results *results, const uint16_t floor=0)
Remove or merge pulses in the capture buffer that are too short.
Definition: IRrecv.cpp:437
bool decodeHitachiAC1(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc1Bits, const bool strict=true)
bool decodeSAMSUNG(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kSamsungBits, const bool strict=true)
Decode the supplied Samsung 32-bit message. Status: STABLE.
Definition: ir_Samsung.cpp:118
bool decodeLegoPf(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kLegoPfBits, const bool strict=true)
Decode the supplied LEGO Power Functions message. Status: STABLE / Appears to work.
Definition: ir_Lego.cpp:71
-
const uint16_t kRCMMBits
Definition: IRremoteESP8266.h:1041
-
const uint8_t kVestelAcBits
Definition: IRremoteESP8266.h:1092
-
const uint16_t kTranscoldBits
Definition: IRremoteESP8266.h:1083
-
const uint16_t kInaxBits
Definition: IRremoteESP8266.h:976
-
bool decodeMitsubishiHeavy(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiHeavy152Bits, const bool strict=true)
Decode the supplied Mitsubishi Heavy Industries A/C message. Status: BETA / Appears to be working....
Definition: ir_MitsubishiHeavy.cpp:1085
+
const uint16_t kRCMMBits
Definition: IRremoteESP8266.h:1059
+
const uint8_t kVestelAcBits
Definition: IRremoteESP8266.h:1110
+
const uint16_t kTranscoldBits
Definition: IRremoteESP8266.h:1101
+
const uint16_t kInaxBits
Definition: IRremoteESP8266.h:994
+
bool decodeMitsubishiHeavy(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMitsubishiHeavy152Bits, const bool strict=true)
Decode the supplied Mitsubishi Heavy Industries A/C message. Status: BETA / Appears to be working....
Definition: ir_MitsubishiHeavy.cpp:1003
uint16_t _unknown_threshold
Definition: IRrecv.h:157
-
const uint16_t kDaikin176Bits
Definition: IRremoteESP8266.h:921
+
const uint16_t kDaikin176Bits
Definition: IRremoteESP8266.h:937
bool decodeMidea24(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kMidea24Bits, const bool strict=true)
Decode the supplied Midea24 message. Status: STABLE / Confirmed working on a real device.
Definition: ir_Midea.cpp:759
void disableIRIn(void)
Stop collection of any received IR data. Disable any timers and interrupts.
Definition: IRrecv.cpp:356
bool decodeHitachiAc424(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kHitachiAc424Bits, const bool strict=true)
Decode the supplied Hitachi 53-byte/424-bit A/C message. Status: STABLE / Reported as working.
Definition: ir_Hitachi.cpp:959
-
bool decodeToshibaAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kToshibaACBits, const bool strict=true)
Decode the supplied Toshiba A/C message. Status: STABLE / Working.
Definition: ir_Toshiba.cpp:472
-
uint32_t ticksHigh(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Calculate the upper bound of the nr. of ticks.
Definition: IRrecv.cpp:1026
-
const uint16_t kSamsungBits
Definition: IRremoteESP8266.h:1042
+
bool decodeToshibaAC(decode_results *results, uint16_t offset=kStartOffset, const uint16_t nbits=kToshibaACBits, const bool strict=true)
Decode the supplied Toshiba A/C message. Status: STABLE / Working.
Definition: ir_Toshiba.cpp:463
+
uint32_t ticksHigh(const uint32_t usecs, const uint8_t tolerance=kUseDefTol, const uint16_t delta=0)
Calculate the upper bound of the nr. of ticks.
Definition: IRrecv.cpp:1039
+
const uint16_t kSamsungBits
Definition: IRremoteESP8266.h:1060
uint8_t _timer_num
Definition: IRrecv.h:154
-
const uint16_t kDaikin64Bits
Definition: IRremoteESP8266.h:909
-
const uint16_t kPanasonicAc32Bits
Definition: IRremoteESP8266.h:1033
-
const uint16_t kDaikin216Bits
Definition: IRremoteESP8266.h:924
-
const uint16_t kMitsubishi136Bits
Definition: IRremoteESP8266.h:1008
-
uint16_t matchBytes(volatile uint16_t *data_ptr, uint8_t *result_ptr, const uint16_t remaining, const uint16_t nbytes, const uint16_t onemark, const uint32_t onespace, const uint16_t zeromark, const uint32_t zerospace, const uint8_t tolerance=kUseDefTol, const int16_t excess=kMarkExcess, const bool MSBfirst=true)
Match & decode the typical data section of an IR message. The bytes are stored at result_ptr....
Definition: IRrecv.cpp:1249
-
const uint16_t kSanyoAcBits
Definition: IRremoteESP8266.h:1050
-
const uint16_t kMitsubishi112Bits
Definition: IRremoteESP8266.h:1011
-
const uint16_t kEpsonBits
Definition: IRremoteESP8266.h:936
+
const uint16_t kDaikin64Bits
Definition: IRremoteESP8266.h:925
+
const uint16_t kPanasonicAc32Bits
Definition: IRremoteESP8266.h:1051
+
const uint16_t kDaikin216Bits
Definition: IRremoteESP8266.h:940
+
const uint16_t kMitsubishi136Bits
Definition: IRremoteESP8266.h:1026
+
const uint16_t kSanyoAcBits
Definition: IRremoteESP8266.h:1068
+
const uint16_t kMitsubishi112Bits
Definition: IRremoteESP8266.h:1029
+
const uint16_t kEpsonBits
Definition: IRremoteESP8266.h:954
uint8_t state[kStateSizeMax]
Definition: IRrecv.h:104
-
bool decodeHash(decode_results *results)
Decode any arbitrary IR message into a 32-bit code value. Instead of decoding using a standard encodi...
Definition: IRrecv.cpp:1170
+
bool decodeHash(decode_results *results)
Decode any arbitrary IR message into a 32-bit code value. Instead of decoding using a standard encodi...
Definition: IRrecv.cpp:1183
const uint8_t kSpaceState
Definition: IRrecv.h:33
-
const uint16_t kLgBits
Definition: IRremoteESP8266.h:986
-
uint8_t _validTolerance(const uint8_t percentage)
Convert the tolerance percentage into something valid.
Definition: IRrecv.cpp:1004
+
const uint16_t kLgBits
Definition: IRremoteESP8266.h:1004
+
uint8_t _validTolerance(const uint8_t percentage)
Convert the tolerance percentage into something valid.
Definition: IRrecv.cpp:1017
const uint16_t kHeader
Definition: IRrecv.h:18
const uint32_t kFnvBasis32
Definition: IRrecv.h:53
diff --git a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRremoteESP8266_8h.html b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRremoteESP8266_8h.html similarity index 98% rename from lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRremoteESP8266_8h.html rename to lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRremoteESP8266_8h.html index bc9e49713..37e51415c 100644 --- a/lib/lib_basic/IRremoteESP8266-2.7.14/docs/doxygen/html/IRremoteESP8266_8h.html +++ b/lib/lib_basic/IRremoteESP8266-2.7.15/docs/doxygen/html/IRremoteESP8266_8h.html @@ -206,7 +206,10 @@ Enumerations
  ELITESCREENS, PANASONIC_AC32, -kLastDecodeType = PANASONIC_AC32 +MILESTAG2, +ECOCLIM, +
+  kLastDecodeType = ECOCLIM
}  Enumerator for defining and numbering of supported IR protocol. More...
@@ -334,6 +337,10 @@ Variables   const uint16_t kDoshishaBits = 40   +const uint16_t kEcoclimBits = 56 +  +const uint16_t kEcoclimShortBits = 15 +  const uint16_t kEpsonBits = 32   const uint16_t kEpsonMinRepeat = 2 @@ -650,6 +657,12 @@ Variables   const uint16_t kVoltasStateLength = 10   +const uint16_t kMilesTag2ShotBits = 14 +  +const uint16_t kMilesTag2MsgBits = 24 +  +const uint16_t kMilesMinRepeat = 0 + 

Typedef Documentation

@@ -780,6 +793,8 @@ Variables MIRAGE  ELITESCREENS  PANASONIC_AC32  +MILESTAG2  +ECOCLIM  kLastDecodeType  @@ -1568,6 +1583,34 @@ Variables
+
+ + +

◆ kEcoclimBits

+ +
+
+ + + + +
const uint16_t kEcoclimBits = 56
+
+ +
+
+ +

◆ kEcoclimShortBits

+ +
+
+ + + + +
const uint16_t kEcoclimShortBits = 15
+
+
@@ -2422,6 +2465,48 @@ Variables
+
+ + +

◆ kMilesMinRepeat

+ +
+
+ + + + +
const uint16_t kMilesMinRepeat = 0
+
+ +
+
+ +

◆ kMilesTag2MsgBits

+ +
+
+ + + + +
const uint16_t kMilesTag2MsgBits = 24
+
+ +
+
+ +

◆ kMilesTag2ShotBits

+ +
+
+ + + + +
const uint16_t kMilesTag2ShotBits = 14
+
+
@@ -3841,8 +3926,8 @@ Variables -
const uint16_t kSanyoLC7461CommandBits
Definition: IRremoteESP8266.h:1053
-
const uint16_t kSanyoLC7461AddressBits
Definition: IRremoteESP8266.h:1052
+
const uint16_t kSanyoLC7461CommandBits
Definition: IRremoteESP8266.h:1071
+
const uint16_t kSanyoLC7461AddressBits
Definition: IRremoteESP8266.h:1070