Merge branch 'development' into new-windmeter-sensor

This commit is contained in:
Matteo Albinola 2020-04-26 19:39:14 +02:00
commit dcc4623791
286 changed files with 1384 additions and 877 deletions

View File

@ -1,46 +0,0 @@
[platformio]
src_dir = .
[env]
; Default platform
platform = espressif8266
; Default board
board = nodemcuv2
framework = arduino
lib_extra_dirs = ../../
lib_ldf_mode = deep+
lib_ignore = examples
build_flags = ; -D_IR_LOCALE_=en-AU
[env:nodemcuv2]
board = nodemcuv2
; build_flags = -D_IR_LOCALE_=en-AU
[env:esp32dev]
platform = espressif32
board = esp32dev
; build_flags = -D_IR_LOCALE_=en-AU
[env:de-CH]
build_flags = -D_IR_LOCALE_=de-CH
[env:de-DE]
build_flags = -D_IR_LOCALE_=de-DE
[env:en-AU]
build_flags = -D_IR_LOCALE_=en-AU
[env:en-IE]
build_flags = -D_IR_LOCALE_=en-IE
[env:en-UK]
build_flags = -D_IR_LOCALE_=en-UK
[env:en-US]
build_flags = -D_IR_LOCALE_=en-US
[env:es-ES]
build_flags = -D_IR_LOCALE_=es-ES
[env:fr-FR]
build_flags = -D_IR_LOCALE_=fr-FR

View File

@ -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.5 Now Available
Version 2.7.5 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.6 Now Available
Version 2.7.6 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.

View File

@ -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.5 disponible
Version 2.7.5 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.6 disponible
Version 2.7.6 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.

View File

@ -1,5 +1,17 @@
# Release Notes
## _v2.7.6 (20200425)_
**[Features]**
- IRMQTTServer: Use more i18n text. (#1086)
- Convert Protocol names to shared text. Saves ~3k of flash. (#1078)
- Add Chinese translation (zh-CN) & add utf-8 support. (#1080, #1085)
**[Misc]**
- IRMQTTServer: Ensure MQTT_MAX_PACKET_SIZE is correctly set. (#1084)
- Add Italian locale to IRrecvDumpV2 platformio file.
## _v2.7.5 (20200409)_
**[Features]**

View File

@ -239,7 +239,7 @@ const uint16_t kJsonAcStateMaxSize = 1024; // Bytes
// ----------------- End of User Configuration Section -------------------------
// Constants
#define _MY_VERSION_ "v1.4.7"
#define _MY_VERSION_ "v1.4.9"
const uint8_t kRebootTime = 15; // Seconds
const uint8_t kQuickDisplayTime = 2; // Seconds

View File

@ -358,12 +358,17 @@
#include <IRutils.h>
#include <IRac.h>
#if MQTT_ENABLE
#include <PubSubClient.h>
// --------------------------------------------------------------------
// * * * IMPORTANT * * *
// You must change <PubSubClient.h> to have the following value.
// #define MQTT_MAX_PACKET_SIZE 768
// --------------------------------------------------------------------
#include <PubSubClient.h>
// Check that the user has set MQTT_MAX_PACKET_SIZE to an appropriate size.
#if MQTT_MAX_PACKET_SIZE < 768
#error "MQTT_MAX_PACKET_SIZE in <PubSubClient.h> is too small. "\
"Increase the value per comments."
#endif // MQTT_MAX_PACKET_SIZE < 768
#endif // MQTT_ENABLE
#include <algorithm> // NOLINT(build/include)
#include <memory>
@ -622,7 +627,7 @@ bool loadConfigFile(void) {
String timeElapsed(uint32_t const msec) {
String result = msToString(msec);
if (result.equalsIgnoreCase("Now"))
if (result.equalsIgnoreCase(D_STR_NOW))
return result;
else
return result + F(" ago");
@ -642,7 +647,7 @@ String timeSince(uint32_t const start) {
String gpioToString(const int16_t gpio) {
if (gpio == kGpioUnused)
return F("Unused");
return F(D_STR_UNUSED);
else
return String(gpio);
}
@ -715,13 +720,13 @@ void handleRoot(void) {
html += F(
"<h3>Send a simple IR message</h3><p>"
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
"Type: ");
D_STR_PROTOCOL ": ");
html += htmlSelectAcStateProtocol(KEY_TYPE, decode_type_t::NEC, true);
html += F(
" Code: 0x<input type='text' name='code' min='0' value='0' size='16'"
" maxlength='16'>"
" Bit size: "
"<select name='bits'>"
" " D_STR_CODE ": 0x<input type='text' name='" KEY_CODE "' min='0' "
"value='0' size='16' maxlength='16'> "
D_STR_BITS ": "
"<select name='" KEY_BITS "'>"
"<option selected='selected' value='0'>Default</option>"); // Default
for (uint8_t i = 0; i < sizeof(kCommonBitSizes); i++) {
String num = String(kCommonBitSizes[i]);
@ -733,18 +738,18 @@ void handleRoot(void) {
}
html += F(
"</select>"
" Repeats: <input type='number' name='repeats' min='0' max='99' value='0'"
"size='2' maxlength='2'>"
" <input type='submit' value='Send IR'>"
" " D_STR_REPEAT ": <input type='number' name='" KEY_REPEAT "' min='0' "
"max='99' value='0' size='2' maxlength='2'>"
" <input type='submit' value='Send " D_STR_CODE "'>"
"</form>"
"<br><hr>"
"<h3>Send a complex (Air Conditioner) IR message</h3><p>"
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
"Type: ");
D_STR_PROTOCOL ": ");
html += htmlSelectAcStateProtocol(KEY_TYPE, decode_type_t::KELVINATOR, false);
html += F(
" State code: 0x"
"<input type='text' name='code' size='");
" State " D_STR_CODE ": 0x"
"<input type='text' name='" KEY_CODE "' size='");
html += String(kStateSizeMax * 2);
html += F("' maxlength='");
html += String(kStateSizeMax * 2);
@ -754,14 +759,14 @@ void handleRoot(void) {
"190B8050000000E0190B8070000010F0"
#endif // EXAMPLES_ENABLE
"'>"
" <input type='submit' value='Send A/C State'>"
" <input type='submit' value='Send A/C " D_STR_CODE "'>"
"</form>"
"<br><hr>"
"<h3>Send an IRremote Raw IR message</h3><p>"
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
"<input type='hidden' name='type' value='30'>"
"String: (freq,array data) <input type='text' name='code' size='132'"
" value='"
"<input type='hidden' name='" KEY_TYPE "' value='30'>"
"String: (freq,array data) <input type='text' name='" KEY_CODE "'"
" size='132' value='"
#if EXAMPLES_ENABLE
"38000,4420,4420,520,1638,520,1638,520,1638,520,520,520,520,520,"
"520,520,520,520,520,520,1638,520,1638,520,1638,520,520,520,"
@ -776,8 +781,8 @@ void handleRoot(void) {
"<h3>Send a <a href='https://irdb.globalcache.com/'>GlobalCache</a>"
" IR message</h3><p>"
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
"<input type='hidden' name='type' value='31'>"
"String: 1:1,1,<input type='text' name='code' size='132'"
"<input type='hidden' name='" KEY_TYPE "' value='31'>"
"String: 1:1,1,<input type='text' name='" KEY_CODE "' size='132'"
" value='"
#if EXAMPLES_ENABLE
"38000,1,1,170,170,20,63,20,63,20,63,20,20,20,20,20,20,20,20,20,"
@ -792,9 +797,9 @@ void handleRoot(void) {
"<h3>Send a <a href='http://www.remotecentral.com/cgi-bin/files/rcfiles.cgi"
"?area=pronto&db=discrete'>Pronto code</a> IR message</h3><p>"
"<form method='POST' action='/ir' enctype='multipart/form-data'>"
"<input type='hidden' name='type' value='25'>"
"String (comma separated): <input type='text' name='code' size='132'"
" value='"
"<input type='hidden' name='" KEY_TYPE "' value='25'>"
"String (comma separated): <input type='text' name='" KEY_CODE "'"
" size='132' value='"
#if EXAMPLES_ENABLE
"0000,0067,0000,0015,0060,0018,0018,0018,0030,0018,0030,0018,"
"0030,0018,0018,0018,0030,0018,0018,0018,0018,0018,0030,0018,0018,"
@ -802,8 +807,8 @@ void handleRoot(void) {
"0018,0018,0018,0018,0030,0018,0018,03f6"
#endif // EXAMPLES_ENABLE
"'>"
" Repeats: <input type='number' name='repeats' min='0' max='99' value='0'"
"size='2' maxlength='2'>"
" " D_STR_REPEAT ": <input type='number' name='" KEY_REPEAT "' min='0' "
"max='99' value='0' size='2' maxlength='2'>"
" <input type='submit' value='Send Pronto'>"
"</form>"
"<br>");
@ -825,7 +830,7 @@ String addJsReloadUrl(const String url, const uint16_t timeout_s,
if (notify && timeout_s) {
html += F(" document.write(\"You will be redirected to the main page in ");
html += String(timeout_s);
html += F(" seconds.\");\n");
html += F(" " D_STR_SECONDS ".\");\n");
}
html += F(" setTimeout('Redirect()', ");
html += String(timeout_s * 1000); // Convert to mSecs
@ -848,35 +853,44 @@ void handleExamples(void) {
html += htmlMenu();
html += F(
"<h3>Hardcoded examples</h3>"
"<p><a href=\"ir?code=38000,1,69,341,171,21,64,21,64,21,21,21,21,21,21,21,"
"21,21,21,21,64,21,64,21,21,21,64,21,21,21,21,21,21,21,64,21,21,21,64,"
"21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,21,21,64,21,64,21,64,21,"
"21,21,64,21,64,21,64,21,1600,341,85,21,3647&type=31\">"
"Sherwood Amp On (GlobalCache)</a></p>"
"<p><a href=\"ir?code=38000,8840,4446,546,1664,546,1664,546,546,546,546,"
"546,546,546,546,546,546,546,1664,546,1664,546,546,546,1664,546,546,"
"546,546,546,546,546,1664,546,546,546,1664,546,546,546,1664,546,1664,"
"546,1664,546,546,546,546,546,546,546,546,546,1664,546,546,546,546,546,"
"546,546,1664,546,1664,546,1664,546,41600,8840,2210,546&type=30\">"
"Sherwood Amp Off (Raw)</a></p>"
"<p><a href=\"ir?code=0000,006E,0022,0002,0155,00AA,0015,0040,0015,0040"
",0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,0040"
",0015,0015,0015,0040,0015,0015,0015,0015,0015,0015,0015,0040,0015,0015"
",0015,0015,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,0015"
",0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,0040"
",0015,0040,0015,0040,0015,0640,0155,0055,0015,0E40"
"&type=25&repeats=1\">"
"<p><a href=\"ir?" KEY_CODE "=38000,1,69,341,171,21,64,21,64,21,21,21,21,"
"21,21,21,21,21,21,21,64,21,64,21,21,21,64,21,21,21,21,21,21,21,64,21,"
"21,21,64,21,21,21,21,21,21,21,64,21,21,21,21,21,21,21,21,21,64,21,64,"
"21,64,21,21,21,64,21,64,21,64,21,1600,341,85,21,3647"
"&" KEY_TYPE "=31\">Sherwood Amp " D_STR_ON " (GlobalCache)</a></p>"
"<p><a href=\"ir?" KEY_CODE "=38000,8840,4446,546,1664,546,1664,546,546,"
"546,546,546,546,546,546,546,546,546,1664,546,1664,546,546,546,1664,"
"546,546,546,546,546,546,546,1664,546,546,546,1664,546,546,546,1664,"
"546,1664,546,1664,546,546,546,546,546,546,546,546,546,1664,546,546,"
"546,546,546,546,546,1664,546,1664,546,1664,546,41600,8840,2210,546"
"&" KEY_TYPE "=30\">Sherwood Amp " D_STR_OFF " (Raw)</a></p>"
"<p><a href=\"ir?" KEY_CODE "=0000,006E,0022,0002,0155,00AA,0015,0040,0015,"
"0040,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0015,0040,0015,"
"0040,0015,0015,0015,0040,0015,0015,0015,0015,0015,0015,0015,0040,0015,"
"0015,0015,0015,0015,0040,0015,0040,0015,0015,0015,0015,0015,0015,0015,"
"0015,0015,0015,0015,0040,0015,0015,0015,0015,0015,0040,0015,0040,0015,"
"0040,0015,0040,0015,0040,0015,0640,0155,0055,0015,0E40"
"&" KEY_TYPE "=25&" KEY_REPEAT "=1\">"
"Sherwood Amp Input TAPE (Pronto)</a></p>"
"<p><a href=\"ir?type=7&code=E0E09966\">TV on (Samsung)</a></p>"
"<p><a href=\"ir?type=4&code=0xf50&bits=12\">Power Off (Sony 12bit)</a></p>"
"<p><a href=\"aircon/set?protocol=PANASONIC_AC&model=LKE&power=on&"
"mode=auto&fanspeed=min&temp=23\">"
"Panasonic A/C LKE model, On, Auto mode, Min fan, 23C"
"<p><a href=\"ir?" KEY_TYPE "=7&" KEY_CODE "=E0E09966\">TV " D_STR_ON
" (Samsung)</a></p>"
"<p><a href=\"ir?" KEY_TYPE "=4&" KEY_CODE "=0xf50&bits=12\">" D_STR_POWER
" " D_STR_OFF " (Sony 12 " D_STR_BITS ")</a></p>"
"<p><a href=\"aircon/set?protocol=PANASONIC_AC&"
KEY_MODEL "=LKE&"
KEY_POWER "=on&"
KEY_MODE "=auto&"
KEY_FANSPEED "=min&"
KEY_TEMP "=23\">"
"Panasonic A/C " D_STR_MODEL " LKE, " D_STR_ON ", " D_STR_AUTO " "
D_STR_MODE ", " D_STR_MIN " " D_STR_FAN ", 23C"
" <i>(via HTTP aircon interface)</i></a></p>"
"<p><a href=\"aircon/set?temp=27\">"
"Change just the temp to 27C <i>(via HTTP aircon interface)</i></a></p>"
"<p><a href=\"aircon/set?power=off&mode=off\">"
"Turn OFF the current A/C <i>(via HTTP aircon interface)</i></a></p>"
"<p><a href=\"aircon/set?" KEY_TEMP "=27\">"
"Change just the " D_STR_TEMP " to 27C <i>"
"(via HTTP aircon interface)</i></a></p>"
"<p><a href=\"aircon/set?" KEY_POWER "=off&" KEY_MODE "=off\">"
"Turn " D_STR_OFF " the current A/C <i>("
"via HTTP aircon interface)</i></a></p>"
"<br><hr>");
html += htmlEnd();
server.send(200, "text/html", html);
@ -996,7 +1010,9 @@ String htmlSelectSwingh(const String name, const stdAc::swingh_t def) {
String htmlHeader(const String title, const String h1_text) {
String html = F("<html><head><title>");
html += title;
html += F("</title></head><body><center><h1>");
html += F("</title><meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=utf-8\">"
"</head><body><center><h1>");
if (h1_text.length())
html += h1_text;
else
@ -1042,20 +1058,20 @@ void handleAirCon(void) {
"<input type='hidden' name='" KEY_CHANNEL "' value='" + String(chan) +
"'>" +
"<table style='width:33%'>"
"<tr><td>Protocol</td><td>" +
"<tr><td>" D_STR_PROTOCOL "</td><td>" +
htmlSelectClimateProtocol(KEY_PROTOCOL,
climate[chan]->next.protocol) +
"</td></tr>"
"<tr><td>Model</td><td>" +
"<tr><td>" D_STR_MODEL "</td><td>" +
htmlSelectModel(KEY_MODEL, climate[chan]->next.model) +
"</td></tr>"
"<tr><td>Power</td><td>" +
"<tr><td>" D_STR_POWER "</td><td>" +
htmlSelectBool(KEY_POWER, climate[chan]->next.power) +
"</td></tr>"
"<tr><td>Mode</td><td>" +
"<tr><td>" D_STR_MODE "</td><td>" +
htmlSelectMode(KEY_MODE, climate[chan]->next.mode) +
"</td></tr>"
"<tr><td>Temp</td><td>"
"<tr><td>" D_STR_TEMP "</td><td>"
"<input type='number' name='" KEY_TEMP "' min='16' max='90' "
"step='0.5' value='" + String(climate[chan]->next.degrees, 1) + "'>"
"<select name='" KEY_CELSIUS "'>"
@ -1066,34 +1082,34 @@ void handleAirCon(void) {
(!climate[chan]->next.celsius ? " selected='selected'" : "") +
">F</option>"
"</select></td></tr>"
"<tr><td>Fan Speed</td><td>" +
"<tr><td>" D_STR_FAN "</td><td>" +
htmlSelectFanspeed(KEY_FANSPEED, climate[chan]->next.fanspeed) +
"</td></tr>"
"<tr><td>Swing (V)</td><td>" +
"<tr><td>" D_STR_SWINGV "</td><td>" +
htmlSelectSwingv(KEY_SWINGV, climate[chan]->next.swingv) +
"</td></tr>"
"<tr><td>Swing (H)</td><td>" +
"<tr><td>" D_STR_SWINGH "</td><td>" +
htmlSelectSwingh(KEY_SWINGH, climate[chan]->next.swingh) +
"</td></tr>"
"<tr><td>Quiet</td><td>" +
"<tr><td>" D_STR_QUIET "</td><td>" +
htmlSelectBool(KEY_QUIET, climate[chan]->next.quiet) +
"</td></tr>"
"<tr><td>Turbo</td><td>" +
"<tr><td>" D_STR_TURBO "</td><td>" +
htmlSelectBool(KEY_TURBO, climate[chan]->next.turbo) +
"</td></tr>"
"<tr><td>Econo</td><td>" +
"<tr><td>" D_STR_ECONO "</td><td>" +
htmlSelectBool(KEY_ECONO, climate[chan]->next.econo) +
"</td></tr>"
"<tr><td>Light</td><td>" +
"<tr><td>" D_STR_LIGHT "</td><td>" +
htmlSelectBool(KEY_LIGHT, climate[chan]->next.light) +
"</td></tr>"
"<tr><td>Filter</td><td>" +
"<tr><td>" D_STR_FILTER "</td><td>" +
htmlSelectBool(KEY_FILTER, climate[chan]->next.filter) +
"</td></tr>"
"<tr><td>Clean</td><td>" +
"<tr><td>" D_STR_CLEAN "</td><td>" +
htmlSelectBool(KEY_CLEAN, climate[chan]->next.clean) +
"</td></tr>"
"<tr><td>Beep</td><td>" +
"<tr><td>" D_STR_BEEP "</td><td>" +
htmlSelectBool(KEY_BEEP, climate[chan]->next.beep) +
"</td></tr>"
"<tr><td>Force resend</td><td>" +
@ -1260,9 +1276,9 @@ void handleInfo(void) {
"Last IR Received: " + lastIrReceived +
" <i>(" + timeSince(lastIrReceivedTime) + ")</i><br>"
#endif // IR_RX
"Duplicate Wifi networks: " +
"Duplicate " D_STR_WIFI " networks: " +
String(HIDE_DUPLICATE_NETWORKS ? "Hide" : "Show") + "<br>"
"Min Wifi signal required: "
"Min " D_STR_WIFI " signal required: "
#ifdef MIN_SIGNAL_STRENGTH
+ String(static_cast<int>(MIN_SIGNAL_STRENGTH)) +
#else // MIN_SIGNAL_STRENGTH
@ -1271,9 +1287,9 @@ void handleInfo(void) {
"%<br>"
"Serial debugging: "
#if DEBUG
+ String(isSerialGpioUsedByIr() ? "Off" : "On") +
+ String(isSerialGpioUsedByIr() ? D_STR_OFF : D_STR_ON) +
#else // DEBUG
"Off"
D_STR_OFF
#endif // DEBUG
"<br>"
#if REPORT_VCC
@ -1289,6 +1305,7 @@ void handleInfo(void) {
: "Disconnected " + timeSince(lastConnectedTime)) +
")</i><br>"
"Disconnections: " + String(mqttDisconnectCounter - 1) + "<br>"
"Max Packet Size: " + MQTT_MAX_PACKET_SIZE + " bytes<br>"
"Client id: " + MqttClientId + "<br>"
"Command topic(s): " + listOfCommandTopics() + "<br>"
"Acknowledgements topic: " + MqttAck + "<br>"
@ -1330,6 +1347,7 @@ void handleInfo(void) {
timeElapsed(lastDiscovery.elapsed()) :
String("<i>Never</i>"))) +
"<br>"
"Discovery topic: " + MqttDiscovery + "<br>" +
#endif // MQTT_DISCOVERY_ENABLE
"Command topics: " + MqttClimate + channel_re + '/' + MQTT_CLIMATE_CMND +
'/' + kClimateTopics +
@ -1339,7 +1357,7 @@ void handleInfo(void) {
"</p>"
// Page footer
"<hr><p><small><center>"
"<i>(Note: Page will refresh every 60 seconds.)</i>"
"<i>(Note: Page will refresh every 60 " D_STR_SECONDS ".)</i>"
"<centre></small></p>";
html += addJsReloadUrl(kUrlInfo, 60, false);
html += htmlEnd();
@ -1401,7 +1419,7 @@ void handleClearMqtt(void) {
htmlHeader(F("Clearing saved info from MQTT"),
F("Removing all saved settings for this device from "
"MQTT.")) +
"<p>Device restarting. Try connecting in a few seconds.</p>" +
"<p>Device restarting. Try connecting in a few " D_STR_SECONDS ".</p>" +
addJsReloadUrl(kUrlRoot, 10, true) +
htmlEnd());
// Do the clearing.
@ -1423,7 +1441,7 @@ void handleReset(void) {
server.send(200, "text/html",
htmlHeader(F("Reset WiFi Config"),
F("Resetting the WiFiManager config back to defaults.")) +
"<p>Device restarting. Try connecting in a few seconds.</p>" +
"<p>Device restarting. Try connecting in a few " D_STR_SECONDS ".</p>" +
addJsReloadUrl(kUrlRoot, 10, true) +
htmlEnd());
// Do the reset.
@ -1456,7 +1474,7 @@ void handleReboot() {
#endif
server.send(200, "text/html",
htmlHeader(F("Device restarting.")) +
"<p>Try connecting in a few seconds.</p>" +
"<p>Try connecting in a few " D_STR_SECONDS ".</p>" +
addJsReloadUrl(kUrlRoot, kRebootTime, true) +
htmlEnd());
doRestart("Reboot requested");
@ -2012,7 +2030,8 @@ void setup_wifi(void) {
if (!wifiManager.autoConnect())
// Reboot. A.k.a. "Have you tried turning it Off and On again?"
doRestart("Wifi failed to connect and hit timeout. Rebooting...", true);
doRestart(D_STR_WIFI " failed to connect and hit timeout. Rebooting...",
true);
#if MQTT_ENABLE
strncpy(MqttServer, custom_mqtt_server.getValue(), kHostnameLength);
@ -2184,7 +2203,8 @@ void setup(void) {
server.send(200, "text/html",
htmlHeader(F("Updating firmware")) +
"<hr>"
"<h3>Warning! Don't power off the device for 60 seconds!</h3>"
"<h3>Warning! Don't " D_STR_POWER " " D_STR_OFF " the device for "
"60 " D_STR_SECONDS "!</h3>"
"<p>The firmware is uploading and will try to flash itself. "
"It is important to not interrupt the process.</p>"
"<p>The firmware upload seems to have " +
@ -2768,12 +2788,12 @@ bool sendIRCode(IRsend *irsend, decode_type_t const ir_type,
} else {
debug("Failed to send IR Message:");
}
debug("Type:");
debug(D_STR_PROTOCOL ": ");
debug(String(ir_type).c_str());
// For "long" codes we basically repeat what we got.
if (hasACState(ir_type) || ir_type == PRONTO || ir_type == RAW ||
ir_type == GLOBALCACHE) {
debug("Code: ");
debug(D_STR_CODE ": ");
debug(code_str);
// Confirm what we were asked to send was sent.
#if MQTT_ENABLE
@ -2792,9 +2812,9 @@ bool sendIRCode(IRsend *irsend, decode_type_t const ir_type,
}
#endif // MQTT_ENABLE
} else { // For "short" codes, we break it down a bit more before we report.
debug(("Code: 0x" + uint64ToString(code, 16)).c_str());
debug(("Bits: " + String(bits)).c_str());
debug(("Repeats: " + String(repeat)).c_str());
debug((D_STR_CODE ": 0x" + uint64ToString(code, 16)).c_str());
debug((D_STR_BITS ": " + String(bits)).c_str());
debug((D_STR_REPEAT ": " + String(repeat)).c_str());
#if MQTT_ENABLE
if (success) {
mqtt_client.publish(MqttAck.c_str(), (String(ir_type) +

View File

@ -65,7 +65,10 @@ IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
void handleRoot() {
server.send(200, "text/html",
"<html>" \
"<head><title>" HOSTNAME " Demo</title></head>" \
"<head><title>" HOSTNAME " Demo </title>" \
"<meta http-equiv=\"Content-Type\" " \
"content=\"text/html;charset=utf-8\">" \
"</head>" \
"<body>" \
"<h1>Hello from " HOSTNAME ", you can send NEC encoded IR" \
"signals from here!</h1>" \

View File

@ -0,0 +1,52 @@
[platformio]
src_dir = .
[env]
; Default platform
platform = espressif8266
; Default board
board = nodemcuv2
framework = arduino
lib_extra_dirs = ../../
lib_ldf_mode = deep+
lib_ignore = examples
build_flags = ; -D_IR_LOCALE_=en-AU
[env:nodemcuv2]
board = nodemcuv2
; build_flags = -D_IR_LOCALE_=en-AU
[env:esp32dev]
platform = espressif32
board = esp32dev
; build_flags = -D_IR_LOCALE_=en-AU
[env:de-CH]
build_flags = -D_IR_LOCALE_=de-CH ; German (Swiss)
[env:de-DE]
build_flags = -D_IR_LOCALE_=de-DE ; German
[env:en-AU]
build_flags = -D_IR_LOCALE_=en-AU ; English (Australian) (Default)
[env:en-IE]
build_flags = -D_IR_LOCALE_=en-IE ; English (Irish)
[env:en-UK]
build_flags = -D_IR_LOCALE_=en-UK ; English (UK)
[env:en-US]
build_flags = -D_IR_LOCALE_=en-US ; English (Simplified) (USA)
[env:es-ES]
build_flags = -D_IR_LOCALE_=es-ES ; Spanish
[env:fr-FR]
build_flags = -D_IR_LOCALE_=fr-FR ; French
[env:it-IT]
build_flags = -D_IR_LOCALE_=it-IT ; Italian
[env:zh-CN]
build_flags = -D_IR_LOCALE_=zh-CN ; Chinese (Simplified)

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -629,6 +629,7 @@ xorBytes KEYWORD2
# Constants (LITERAL1)
#######################################
*kAllProtocolNamesStr LITERAL1
// LITERAL1
AIRWELL LITERAL1
AIWA_RC_T501 LITERAL1

View File

@ -1,6 +1,6 @@
{
"name": "IRremoteESP8266",
"version": "2.7.5",
"version": "2.7.6",
"keywords": "infrared, ir, remote, esp8266, esp32",
"description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)",
"repository":

View File

@ -1,5 +1,5 @@
name=IRremoteESP8266
version=2.7.5
version=2.7.6
author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff
maintainer=David Conran, Mark Szabo, Sebastien Warin, Roi Dayan, Massimiliano Pinto
sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32)

View File

@ -0,0 +1,21 @@
[platformio]
# Default to building IRrecvDumpV2 if not in a specific example directory.
src_dir = examples/IRrecvDumpV2
[env]
lib_extra_dirs = .
lib_ldf_mode = deep+
lib_ignore = examples
framework = arduino
platform = espressif8266
build_flags = ; -D_IR_LOCALE_=en-AU
[env:nodemcuv2]
board = nodemcuv2
[env:d1_mini]
board = d1_mini
[env:esp32dev]
platform = espressif32
board = esp32dev

View File

@ -52,7 +52,7 @@
#endif // UNIT_TEST
// Library Version
#define _IRREMOTEESP8266_VERSION_ "2.7.5"
#define _IRREMOTEESP8266_VERSION_ "2.7.6"
// Set the language & locale for the library. See the `locale` dir for options.
#ifndef _IR_LOCALE_

View File

@ -163,3 +163,88 @@ const PROGMEM char* kFalseStr = D_STR_FALSE;
const PROGMEM char* kRepeatStr = D_STR_REPEAT;
const PROGMEM char* kCodeStr = D_STR_CODE;
const PROGMEM char* kBitsStr = D_STR_BITS;
// Protocol Names
// Needs to be in decode_type_t order.
const PROGMEM char *kAllProtocolNamesStr =
D_STR_UNUSED "\x0"
D_STR_RC5 "\x0"
D_STR_RC6 "\x0"
D_STR_NEC "\x0"
D_STR_SONY "\x0"
D_STR_PANASONIC "\x0"
D_STR_JVC "\x0"
D_STR_SAMSUNG "\x0"
D_STR_WHYNTER "\x0"
D_STR_AIWA_RC_T501 "\x0"
D_STR_LG "\x0"
D_STR_SANYO "\x0"
D_STR_MITSUBISHI "\x0"
D_STR_DISH "\x0"
D_STR_SHARP "\x0"
D_STR_COOLIX "\x0"
D_STR_DAIKIN "\x0"
D_STR_DENON "\x0"
D_STR_KELVINATOR "\x0"
D_STR_SHERWOOD "\x0"
D_STR_MITSUBISHI_AC "\x0"
D_STR_RCMM "\x0"
D_STR_SANYO_LC7461 "\x0"
D_STR_RC5X "\x0"
D_STR_GREE "\x0"
D_STR_PRONTO "\x0"
D_STR_NEC_LIKE "\x0"
D_STR_ARGO "\x0"
D_STR_TROTEC "\x0"
D_STR_NIKAI "\x0"
D_STR_RAW "\x0"
D_STR_GLOBALCACHE "\x0"
D_STR_TOSHIBA_AC "\x0"
D_STR_FUJITSU_AC "\x0"
D_STR_MIDEA "\x0"
D_STR_MAGIQUEST "\x0"
D_STR_LASERTAG "\x0"
D_STR_CARRIER_AC "\x0"
D_STR_HAIER_AC "\x0"
D_STR_MITSUBISHI2 "\x0"
D_STR_HITACHI_AC "\x0"
D_STR_HITACHI_AC1 "\x0"
D_STR_HITACHI_AC2 "\x0"
D_STR_GICABLE "\x0"
D_STR_HAIER_AC_YRW02 "\x0"
D_STR_WHIRLPOOL_AC "\x0"
D_STR_SAMSUNG_AC "\x0"
D_STR_LUTRON "\x0"
D_STR_ELECTRA_AC "\x0"
D_STR_PANASONIC_AC "\x0"
D_STR_PIONEER "\x0"
D_STR_LG2 "\x0"
D_STR_MWM "\x0"
D_STR_DAIKIN2 "\x0"
D_STR_VESTEL_AC "\x0"
D_STR_TECO "\x0"
D_STR_SAMSUNG36 "\x0"
D_STR_TCL112AC "\x0"
D_STR_LEGOPF "\x0"
D_STR_MITSUBISHI_HEAVY_88 "\x0"
D_STR_MITSUBISHI_HEAVY_152 "\x0"
D_STR_DAIKIN216 "\x0"
D_STR_SHARP_AC "\x0"
D_STR_GOODWEATHER "\x0"
D_STR_INAX "\x0"
D_STR_DAIKIN160 "\x0"
D_STR_NEOCLIMA "\x0"
D_STR_DAIKIN176 "\x0"
D_STR_DAIKIN128 "\x0"
D_STR_AMCOR "\x0"
D_STR_DAIKIN152 "\x0"
D_STR_MITSUBISHI136 "\x0"
D_STR_MITSUBISHI112 "\x0"
D_STR_HITACHI_AC424 "\x0"
D_STR_SONY_38K "\x0"
D_STR_EPSON "\x0"
D_STR_SYMPHONY "\x0"
D_STR_HITACHI_AC3 "\x0"
D_STR_DAIKIN64 "\x0"
D_STR_AIRWELL "\x0"
"\x0"; // This string requires double null termination.

View File

@ -17,6 +17,7 @@ extern const char* k3DStr;
extern const char* k6thSenseStr;
extern const char* k8CHeatStr;
extern const char* kAirFlowStr;
extern const char *kAllProtocolNamesStr;
extern const char* kAutomaticStr;
extern const char* kAutoStr;
extern const char* kBeepStr;

View File

@ -91,169 +91,14 @@ void serialPrintUint64(uint64_t input, uint8_t base) {
// Returns:
// A decode_type_t enum.
decode_type_t strToDecodeType(const char * const str) {
if (!strcasecmp(str, kUnknownStr))
return decode_type_t::UNKNOWN;
else if (!strcasecmp(str, "UNUSED"))
return decode_type_t::UNUSED;
else if (!strcasecmp(str, "AIRWELL"))
return decode_type_t::AIRWELL;
else if (!strcasecmp(str, "AIWA_RC_T501"))
return decode_type_t::AIWA_RC_T501;
else if (!strcasecmp(str, "AMCOR"))
return decode_type_t::AMCOR;
else if (!strcasecmp(str, "ARGO"))
return decode_type_t::ARGO;
else if (!strcasecmp(str, "CARRIER_AC"))
return decode_type_t::CARRIER_AC;
else if (!strcasecmp(str, "COOLIX"))
return decode_type_t::COOLIX;
else if (!strcasecmp(str, "DAIKIN"))
return decode_type_t::DAIKIN;
else if (!strcasecmp(str, "DAIKIN128"))
return decode_type_t::DAIKIN128;
else if (!strcasecmp(str, "DAIKIN152"))
return decode_type_t::DAIKIN152;
else if (!strcasecmp(str, "DAIKIN160"))
return decode_type_t::DAIKIN160;
else if (!strcasecmp(str, "DAIKIN176"))
return decode_type_t::DAIKIN176;
else if (!strcasecmp(str, "DAIKIN2"))
return decode_type_t::DAIKIN2;
else if (!strcasecmp(str, "DAIKIN216"))
return decode_type_t::DAIKIN216;
else if (!strcasecmp(str, "DAIKIN64"))
return decode_type_t::DAIKIN64;
else if (!strcasecmp(str, "DENON"))
return decode_type_t::DENON;
else if (!strcasecmp(str, "DISH"))
return decode_type_t::DISH;
else if (!strcasecmp(str, "ELECTRA_AC"))
return decode_type_t::ELECTRA_AC;
else if (!strcasecmp(str, "EPSON"))
return decode_type_t::EPSON;
else if (!strcasecmp(str, "FUJITSU_AC"))
return decode_type_t::FUJITSU_AC;
else if (!strcasecmp(str, "GICABLE"))
return decode_type_t::GICABLE;
else if (!strcasecmp(str, "GLOBALCACHE"))
return decode_type_t::GLOBALCACHE;
else if (!strcasecmp(str, "GOODWEATHER"))
return decode_type_t::GOODWEATHER;
else if (!strcasecmp(str, "GREE"))
return decode_type_t::GREE;
else if (!strcasecmp(str, "HAIER_AC"))
return decode_type_t::HAIER_AC;
else if (!strcasecmp(str, "HAIER_AC_YRW02"))
return decode_type_t::HAIER_AC_YRW02;
else if (!strcasecmp(str, "HITACHI_AC"))
return decode_type_t::HITACHI_AC;
else if (!strcasecmp(str, "HITACHI_AC1"))
return decode_type_t::HITACHI_AC1;
else if (!strcasecmp(str, "HITACHI_AC2"))
return decode_type_t::HITACHI_AC2;
else if (!strcasecmp(str, "HITACHI_AC3"))
return decode_type_t::HITACHI_AC3;
else if (!strcasecmp(str, "HITACHI_AC424"))
return decode_type_t::HITACHI_AC424;
else if (!strcasecmp(str, "INAX"))
return decode_type_t::INAX;
else if (!strcasecmp(str, "JVC"))
return decode_type_t::JVC;
else if (!strcasecmp(str, "KELVINATOR"))
return decode_type_t::KELVINATOR;
else if (!strcasecmp(str, "LEGOPF"))
return decode_type_t::LEGOPF;
else if (!strcasecmp(str, "LG"))
return decode_type_t::LG;
else if (!strcasecmp(str, "LG2"))
return decode_type_t::LG2;
else if (!strcasecmp(str, "LASERTAG"))
return decode_type_t::LASERTAG;
else if (!strcasecmp(str, "LUTRON"))
return decode_type_t::LUTRON;
else if (!strcasecmp(str, "MAGIQUEST"))
return decode_type_t::MAGIQUEST;
else if (!strcasecmp(str, "MIDEA"))
return decode_type_t::MIDEA;
else if (!strcasecmp(str, "MITSUBISHI"))
return decode_type_t::MITSUBISHI;
else if (!strcasecmp(str, "MITSUBISHI2"))
return decode_type_t::MITSUBISHI2;
else if (!strcasecmp(str, "MITSUBISHI_AC"))
return decode_type_t::MITSUBISHI_AC;
else if (!strcasecmp(str, "MITSUBISHI136"))
return decode_type_t::MITSUBISHI136;
else if (!strcasecmp(str, "MITSUBISHI112"))
return decode_type_t::MITSUBISHI112;
else if (!strcasecmp(str, "MITSUBISHI_HEAVY_88"))
return decode_type_t::MITSUBISHI_HEAVY_88;
else if (!strcasecmp(str, "MITSUBISHI_HEAVY_152"))
return decode_type_t::MITSUBISHI_HEAVY_152;
else if (!strcasecmp(str, "MWM"))
return decode_type_t::MWM;
else if (!strcasecmp(str, "NEOCLIMA"))
return decode_type_t::NEOCLIMA;
else if (!strcasecmp(str, "NEC"))
return decode_type_t::NEC;
else if (!strcasecmp(str, "NEC_LIKE") ||
!strcasecmp(str, "NEC (NON-STRICT)"))
return decode_type_t::NEC_LIKE;
else if (!strcasecmp(str, "NIKAI"))
return decode_type_t::NIKAI;
else if (!strcasecmp(str, "PANASONIC"))
return decode_type_t::PANASONIC;
else if (!strcasecmp(str, "PANASONIC_AC"))
return decode_type_t::PANASONIC_AC;
else if (!strcasecmp(str, "PIONEER"))
return decode_type_t::PIONEER;
else if (!strcasecmp(str, "PRONTO"))
return decode_type_t::PRONTO;
else if (!strcasecmp(str, "RAW"))
return decode_type_t::RAW;
else if (!strcasecmp(str, "RC5"))
return decode_type_t::RC5;
else if (!strcasecmp(str, "RC5X"))
return decode_type_t::RC5X;
else if (!strcasecmp(str, "RC6"))
return decode_type_t::RC6;
else if (!strcasecmp(str, "RCMM"))
return decode_type_t::RCMM;
else if (!strcasecmp(str, "SAMSUNG"))
return decode_type_t::SAMSUNG;
else if (!strcasecmp(str, "SAMSUNG36"))
return decode_type_t::SAMSUNG36;
else if (!strcasecmp(str, "SAMSUNG_AC"))
return decode_type_t::SAMSUNG_AC;
else if (!strcasecmp(str, "SANYO"))
return decode_type_t::SANYO;
else if (!strcasecmp(str, "SANYO_LC7461"))
return decode_type_t::SANYO_LC7461;
else if (!strcasecmp(str, "SHARP"))
return decode_type_t::SHARP;
else if (!strcasecmp(str, "SHARP_AC"))
return decode_type_t::SHARP_AC;
else if (!strcasecmp(str, "SHERWOOD"))
return decode_type_t::SHERWOOD;
else if (!strcasecmp(str, "SONY"))
return decode_type_t::SONY;
else if (!strcasecmp(str, "SONY_38K"))
return decode_type_t::SONY_38K;
else if (!strcasecmp(str, "SYMPHONY"))
return decode_type_t::SYMPHONY;
else if (!strcasecmp(str, "TCL112AC"))
return decode_type_t::TCL112AC;
else if (!strcasecmp(str, "TECO"))
return decode_type_t::TECO;
else if (!strcasecmp(str, "TOSHIBA_AC"))
return decode_type_t::TOSHIBA_AC;
else if (!strcasecmp(str, "TROTEC"))
return decode_type_t::TROTEC;
else if (!strcasecmp(str, "VESTEL_AC"))
return decode_type_t::VESTEL_AC;
else if (!strcasecmp(str, "WHIRLPOOL_AC"))
return decode_type_t::WHIRLPOOL_AC;
else if (!strcasecmp(str, "WHYNTER"))
return decode_type_t::WHYNTER;
const char *ptr = kAllProtocolNamesStr;
uint16_t length = strlen(ptr);
for (uint16_t i = 0; length; i++) {
if (!strcasecmp(str, ptr)) return (decode_type_t)i;
ptr += length + 1;
length = strlen(ptr);
}
// Handle integer values of the type by converting to a string and back again.
decode_type_t result = strToDecodeType(
typeToString((decode_type_t)atoi(str)).c_str());
@ -271,251 +116,17 @@ decode_type_t strToDecodeType(const char * const str) {
// A string containing the protocol name.
String typeToString(const decode_type_t protocol, const bool isRepeat) {
String result = "";
switch (protocol) {
case UNUSED:
result = F("UNUSED");
break;
case AIRWELL:
result = F("AIRWELL");
break;
case AIWA_RC_T501:
result = F("AIWA_RC_T501");
break;
case AMCOR:
result = F("AMCOR");
break;
case ARGO:
result = F("ARGO");
break;
case CARRIER_AC:
result = F("CARRIER_AC");
break;
case COOLIX:
result = F("COOLIX");
break;
case DAIKIN:
result = F("DAIKIN");
break;
case DAIKIN128:
result = F("DAIKIN128");
break;
case DAIKIN152:
result = F("DAIKIN152");
break;
case DAIKIN160:
result = F("DAIKIN160");
break;
case DAIKIN176:
result = F("DAIKIN176");
break;
case DAIKIN2:
result = F("DAIKIN2");
break;
case DAIKIN216:
result = F("DAIKIN216");
break;
case DAIKIN64:
result = F("DAIKIN64");
break;
case DENON:
result = F("DENON");
break;
case DISH:
result = F("DISH");
break;
case ELECTRA_AC:
result = F("ELECTRA_AC");
break;
case EPSON:
result = F("EPSON");
break;
case FUJITSU_AC:
result = F("FUJITSU_AC");
break;
case GICABLE:
result = F("GICABLE");
break;
case GLOBALCACHE:
result = F("GLOBALCACHE");
break;
case GOODWEATHER:
result = F("GOODWEATHER");
break;
case GREE:
result = F("GREE");
break;
case HAIER_AC:
result = F("HAIER_AC");
break;
case HAIER_AC_YRW02:
result = F("HAIER_AC_YRW02");
break;
case HITACHI_AC:
result = F("HITACHI_AC");
break;
case HITACHI_AC1:
result = F("HITACHI_AC1");
break;
case HITACHI_AC2:
result = F("HITACHI_AC2");
break;
case HITACHI_AC3:
result = F("HITACHI_AC3");
break;
case HITACHI_AC424:
result = F("HITACHI_AC424");
break;
case INAX:
result = F("INAX");
break;
case JVC:
result = F("JVC");
break;
case KELVINATOR:
result = F("KELVINATOR");
break;
case LEGOPF:
result = F("LEGOPF");
break;
case LG:
result = F("LG");
break;
case LG2:
result = F("LG2");
break;
case LASERTAG:
result = F("LASERTAG");
break;
case LUTRON:
result = F("LUTRON");
break;
case MAGIQUEST:
result = F("MAGIQUEST");
break;
case MIDEA:
result = F("MIDEA");
break;
case MITSUBISHI:
result = F("MITSUBISHI");
break;
case MITSUBISHI2:
result = F("MITSUBISHI2");
break;
case MITSUBISHI_AC:
result = F("MITSUBISHI_AC");
break;
case MITSUBISHI136:
result = F("MITSUBISHI136");
break;
case MITSUBISHI112:
result = F("MITSUBISHI112");
break;
case MITSUBISHI_HEAVY_88:
result = F("MITSUBISHI_HEAVY_88");
break;
case MITSUBISHI_HEAVY_152:
result = F("MITSUBISHI_HEAVY_152");
break;
case MWM:
result = F("MWM");
break;
case NEOCLIMA:
result = F("NEOCLIMA");
break;
case NEC:
result = F("NEC");
break;
case NEC_LIKE:
result = F("NEC (non-strict)");
break;
case NIKAI:
result = F("NIKAI");
break;
case PANASONIC:
result = F("PANASONIC");
break;
case PANASONIC_AC:
result = F("PANASONIC_AC");
break;
case PIONEER:
result = F("PIONEER");
break;
case PRONTO:
result = F("PRONTO");
break;
case RAW:
result = F("RAW");
break;
case RC5:
result = F("RC5");
break;
case RC5X:
result = F("RC5X");
break;
case RC6:
result = F("RC6");
break;
case RCMM:
result = F("RCMM");
break;
case SAMSUNG:
result = F("SAMSUNG");
break;
case SAMSUNG36:
result = F("SAMSUNG36");
break;
case SAMSUNG_AC:
result = F("SAMSUNG_AC");
break;
case SANYO:
result = F("SANYO");
break;
case SANYO_LC7461:
result = F("SANYO_LC7461");
break;
case SHARP:
result = F("SHARP");
break;
case SHARP_AC:
result = F("SHARP_AC");
break;
case SHERWOOD:
result = F("SHERWOOD");
break;
case SONY:
result = F("SONY");
break;
case SONY_38K:
result = F("SONY_38K");
break;
case SYMPHONY:
result = F("SYMPHONY");
break;
case TCL112AC:
result = F("TCL112AC");
break;
case TECO:
result = F("TECO");
break;
case TOSHIBA_AC:
result = F("TOSHIBA_AC");
break;
case TROTEC:
result = F("TROTEC");
break;
case VESTEL_AC:
result = F("VESTEL_AC");
break;
case WHIRLPOOL_AC:
result = F("WHIRLPOOL_AC");
break;
case WHYNTER:
result = F("WHYNTER");
break;
case UNKNOWN:
default:
result = kUnknownStr;
break;
const char *ptr = kAllProtocolNamesStr;
if (protocol > kLastDecodeType || protocol == decode_type_t::UNKNOWN) {
result = kUnknownStr;
} else {
for (uint16_t i = 0; i <= protocol && strlen(ptr); i++) {
if (i == protocol) {
result = ptr;
break;
}
ptr += strlen(ptr) + 1;
}
}
if (isRepeat) {
result += kSpaceLBraceStr;

Some files were not shown because too many files have changed in this diff Show More