Update RCSwitch.cpp

Use DRAM for ESP32 protocol list and replace ICACHE_RAM_ATTR by IRAM_ATTR for ESP32, so as to avoid core dump when using in conjunction with Wifi
Added support for Holtek's HT12E encoder/decoders
Added 1ByOne Doorbell protocol
This commit is contained in:
Jason2866 2020-07-15 15:41:11 +02:00 committed by GitHub
parent 6f52b0f7cc
commit 60fc491b4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 7 deletions

View File

@ -13,19 +13,20 @@
- Robert ter Vehn / <first name>.<last name>(at)gmail(dot)com - Robert ter Vehn / <first name>.<last name>(at)gmail(dot)com
- Johann Richard / <first name>.<last name>(at)gmail(dot)com - Johann Richard / <first name>.<last name>(at)gmail(dot)com
- Vlad Gheorghe / <first name>.<last name>(at)gmail(dot)com https://github.com/vgheo - Vlad Gheorghe / <first name>.<last name>(at)gmail(dot)com https://github.com/vgheo
- Matias Cuenca-Acuna
Project home: https://github.com/sui77/rc-switch/ Project home: https://github.com/sui77/rc-switch/
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version. version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details. Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
@ -40,17 +41,22 @@
#define memcpy_P(dest, src, num) memcpy((dest), (src), (num)) #define memcpy_P(dest, src, num) memcpy((dest), (src), (num))
#endif #endif
#if defined(ESP8266) || defined(ESP32) #if defined(ESP8266)
// interrupt handler and related code must be in RAM on ESP8266, // interrupt handler and related code must be in RAM on ESP8266,
// according to issue #46. // according to issue #46.
#define RECEIVE_ATTR ICACHE_RAM_ATTR #define RECEIVE_ATTR ICACHE_RAM_ATTR
#define VAR_ISR_ATTR
#elif defined(ESP32)
#define RECEIVE_ATTR IRAM_ATTR
#define VAR_ISR_ATTR DRAM_ATTR
#else #else
#define RECEIVE_ATTR #define RECEIVE_ATTR
#define VAR_ISR_ATTR
#endif #endif
/* Format for protocol definitions: /* Format for protocol definitions:
* {pulselength, Sync bit, "0" bit, "1" bit} * {pulselength, Sync bit, "0" bit, "1" bit, invertedSignal}
* *
* pulselength: pulse length in microseconds, e.g. 350 * pulselength: pulse length in microseconds, e.g. 350
* Sync bit: {1, 31} means 1 high pulse and 31 low pulses * Sync bit: {1, 31} means 1 high pulse and 31 low pulses
@ -69,7 +75,7 @@
* These are combined to form Tri-State bits when sending or receiving codes. * These are combined to form Tri-State bits when sending or receiving codes.
*/ */
#if defined(ESP8266) || defined(ESP32) #if defined(ESP8266) || defined(ESP32)
static const RCSwitch::Protocol proto[] = { static const VAR_ISR_ATTR RCSwitch::Protocol proto[] = {
#else #else
static const RCSwitch::Protocol PROGMEM proto[] = { static const RCSwitch::Protocol PROGMEM proto[] = {
#endif #endif
@ -81,7 +87,10 @@ static const RCSwitch::Protocol PROGMEM proto[] = {
{ 450, { 23, 1 }, { 1, 2 }, { 2, 1 }, true }, // protocol 6 (HT6P20B) { 450, { 23, 1 }, { 1, 2 }, { 2, 1 }, true }, // protocol 6 (HT6P20B)
{ 150, { 2, 62 }, { 1, 6 }, { 6, 1 }, false }, // protocol 7 (HS2303-PT, i. e. used in AUKEY Remote) { 150, { 2, 62 }, { 1, 6 }, { 6, 1 }, false }, // protocol 7 (HS2303-PT, i. e. used in AUKEY Remote)
{ 200, { 3, 130}, { 7, 16 }, { 3, 16}, false}, // protocol 8 Conrad RS-200 RX { 200, { 3, 130}, { 7, 16 }, { 3, 16}, false}, // protocol 8 Conrad RS-200 RX
{ 200, { 130, 7 }, { 16, 7 }, { 16, 3 }, true} // protocol 9 Conrad RS-200 TX { 200, { 130, 7 }, { 16, 7 }, { 16, 3 }, true}, // protocol 9 Conrad RS-200 TX
{ 365, { 18, 1 }, { 3, 1 }, { 1, 3 }, true }, // protocol 10 (1ByOne Doorbell)
{ 270, { 36, 1 }, { 1, 2 }, { 2, 1 }, true }, // protocol 11 (HT12E)
{ 320, { 36, 1 }, { 1, 2 }, { 2, 1 }, true } // protocol 12 (SM5212)
}; };
enum { enum {