From cfbd1cb85d870085276d7592a69c0e238de2237a Mon Sep 17 00:00:00 2001 From: RemiDing Date: Sat, 25 Jan 2020 11:22:28 +0100 Subject: [PATCH 01/25] optimized --- tasmota/support_switch.ino | 41 +++++++++++++++++++++++++++++++++++++- tasmota/tasmota.h | 4 ++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/tasmota/support_switch.ino b/tasmota/support_switch.ino index 9cc3c336f..6df39c5d7 100644 --- a/tasmota/support_switch.ino +++ b/tasmota/support_switch.ino @@ -154,6 +154,22 @@ void SwitchHandler(uint8_t mode) case FOLLOWMULTI_INV: switchflag = ~button &1; // Follow inverted wall switch state after hold break; + case PUSHHOLDMULTI: + if (PRESSED == button){ + Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 25; + SendKey(KEY_SWITCH, i +1, POWER_HOLD); // Execute command via MQTT + } + else + SendKey(KEY_SWITCH, i +1, POWER_CLEAR); // Execute command via MQTT + break; + case PUSHHOLDMULTI_INV: + if (NOT_PRESSED == button){ + Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 25; + SendKey(KEY_SWITCH, i +1, POWER_HOLD); // Execute command via MQTT + } + else + SendKey(KEY_SWITCH, i +1, POWER_CLEAR); // Execute command via MQTT + break; default: SendKey(KEY_SWITCH, i +1, POWER_HOLD); // Execute command via MQTT break; @@ -213,8 +229,31 @@ void SwitchHandler(uint8_t mode) Switch.hold_timer[i] = loops_per_second / 2; // 0.5 second multi press window } break; + case PUSHHOLDMULTI: + if ((PRESSED == button) && (NOT_PRESSED == Switch.last_state[i])) { + if(Switch.hold_timer[i]!=0) + SendKey(KEY_SWITCH, i +1, POWER_INV); // Execute command via MQTT + Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; + } + if ((NOT_PRESSED == button) && (PRESSED == Switch.last_state[i])) { + if(Switch.hold_timer[i] > loops_per_second * Settings.param[P_HOLD_TIME] / 25) + switchflag = POWER_TOGGLE; // Toggle with pushbutton + Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; + } + break; + case PUSHHOLDMULTI_INV: + if ((NOT_PRESSED == button) && (PRESSED == Switch.last_state[i])) { + if(Switch.hold_timer[i]!=0) + SendKey(KEY_SWITCH, i +1, POWER_INV); // Execute command via MQTT + Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; + } + if ((PRESSED == button) && (NOT_PRESSED == Switch.last_state[i])) { + if(Switch.hold_timer[i] > loops_per_second * Settings.param[P_HOLD_TIME] / 25) + switchflag = POWER_TOGGLE; // Toggle with pushbutton + Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; + } + break; } - Switch.last_state[i] = button; } if (switchflag <= POWER_TOGGLE) { diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index b4b944d80..d12bb22ef 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -231,7 +231,7 @@ enum LoggingLevels {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_D enum WifiConfigOptions {WIFI_RESTART, EX_WIFI_SMARTCONFIG, WIFI_MANAGER, EX_WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL, WIFI_MANAGER_RESET_ONLY, MAX_WIFI_OPTION}; -enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI, FOLLOWMULTI, FOLLOWMULTI_INV, MAX_SWITCH_OPTION}; +enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI, FOLLOWMULTI, FOLLOWMULTI_INV, PUSHHOLDMULTI, PUSHHOLDMULTI_INV, MAX_SWITCH_OPTION}; enum LedStateOptions {LED_OFF, LED_POWER, LED_MQTTSUB, LED_POWER_MQTTSUB, LED_MQTTPUB, LED_POWER_MQTTPUB, LED_MQTT, LED_POWER_MQTT, MAX_LED_OPTION}; @@ -242,7 +242,7 @@ enum TopicOptions { CMND, STAT, TELE, nu1, RESULT_OR_CMND, RESULT_OR_STAT, RESUL enum ExecuteCommandPowerOptions { POWER_OFF, POWER_ON, POWER_TOGGLE, POWER_BLINK, POWER_BLINK_STOP, POWER_OFF_NO_STATE = 8, POWER_ON_NO_STATE, POWER_TOGGLE_NO_STATE, POWER_SHOW_STATE = 16 }; -enum SendKeyPowerOptions { POWER_HOLD = 3, CLEAR_RETAIN = 9 }; +enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INV = 4, POWER_CLEAR = 5, CLEAR_RETAIN = 9 }; enum SendKeyOptions { KEY_BUTTON, KEY_SWITCH }; enum PowerOnStateOptions { POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON }; From 72935bdcc644152dc10ef0710f2a7a3600afee8c Mon Sep 17 00:00:00 2001 From: to-scho Date: Tue, 28 Jan 2020 11:22:36 +0100 Subject: [PATCH 02/25] Buzzer extensions Add infinite mode (count==-1), add follow led mode (count==-2), add count>1 for tune playback --- tasmota/support_tasmota.ino | 6 +++++ tasmota/xdrv_24_buzzer.ino | 54 ++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/tasmota/support_tasmota.ino b/tasmota/support_tasmota.ino index 9095a09bf..c69647b18 100644 --- a/tasmota/support_tasmota.ino +++ b/tasmota/support_tasmota.ino @@ -347,6 +347,9 @@ void SetLedPowerIdx(uint32_t led, uint32_t state) } DigitalWrite(GPIO_LED1 + led, bitRead(led_inverted, led) ? !state : state); } + #ifdef USE_BUZZER + if (led == 0) { BuzzerSetStateToLed(state); } + #endif // USE_BUZZER } void SetLedPower(uint32_t state) @@ -382,6 +385,9 @@ void SetLedLink(uint32_t state) if (state) { state = 1; } digitalWrite(led_pin, (led_inv) ? !state : state); } + #ifdef USE_BUZZER + BuzzerSetStateToLed(state); + #endif // USE_BUZZER } void SetPulseTimer(uint32_t index, uint32_t time) diff --git a/tasmota/xdrv_24_buzzer.ino b/tasmota/xdrv_24_buzzer.ino index 78246f0f6..40af3128c 100644 --- a/tasmota/xdrv_24_buzzer.ino +++ b/tasmota/xdrv_24_buzzer.ino @@ -26,10 +26,12 @@ struct BUZZER { uint32_t tune = 0; + uint32_t tune_reload = 0; bool active = true; bool enable = false; uint8_t inverted = 0; // Buzzer inverted flag (1 = (0 = On, 1 = Off)) uint8_t count = 0; // Number of buzzes + uint8_t mode = 0; // Buzzer mode (0 = (0 = regular, 2 = infinite, 3 = follow LED)) uint8_t set[2]; uint8_t duration; uint8_t state = 0; @@ -42,13 +44,15 @@ void BuzzerOff(void) DigitalWrite(GPIO_BUZZER, Buzzer.inverted); // Buzzer Off } -//void BuzzerBeep(uint32_t count = 1, uint32_t on = 1, uint32_t off = 1, uint32_t tune = 0); -void BuzzerBeep(uint32_t count, uint32_t on, uint32_t off, uint32_t tune) +//void BuzzerBeep(uint32_t count = 1, uint32_t on = 1, uint32_t off = 1, uint32_t tune = 0, uint32_t mode = 0); +void BuzzerBeep(uint32_t count, uint32_t on, uint32_t off, uint32_t tune, uint32_t mode) { Buzzer.set[0] = off; // off duration in 100 mSec steps Buzzer.set[1] = on; // on duration in 100 mSec steps Buzzer.duration = 1; // Start buzzer on first step - Buzzer.tune = 0; + Buzzer.tune_reload = 0; + Buzzer.mode = mode; + if (tune) { uint32_t tune1 = tune; uint32_t tune2 = tune; @@ -56,15 +60,14 @@ void BuzzerBeep(uint32_t count, uint32_t on, uint32_t off, uint32_t tune) if (!(tune2 & 0x80000000)) { tune2 <<= 1; // Skip leading silence } else { - Buzzer.tune <<= 1; // Add swapped tune - Buzzer.tune |= tune1 & 1; + Buzzer.tune_reload <<= 1; // Add swapped tune + Buzzer.tune_reload |= tune1 & 1; tune1 >>= 1; } } - Buzzer.count = 1; // Allow tune only once - } else { - Buzzer.count = count * 2; // Start buzzer + Buzzer.tune = Buzzer.tune_reload; } + Buzzer.count = count * 2; // Start buzzer AddLog_P2(LOG_LEVEL_DEBUG, PSTR("BUZ: %d(%d),%d,%d,0x%08X(0x%08X)"), count, Buzzer.count, on, off, tune, Buzzer.tune); @@ -74,14 +77,21 @@ void BuzzerBeep(uint32_t count, uint32_t on, uint32_t off, uint32_t tune) } } +void BuzzerSetStateToLed(uint32_t state) { + if ((Buzzer.enable) && (Buzzer.mode==2)) { + Buzzer.state = (state!=0); + DigitalWrite(GPIO_BUZZER, (Buzzer.inverted) ? !Buzzer.state : Buzzer.state); + } +} + void BuzzerBeep(uint32_t count) { - BuzzerBeep(count, 1, 1, 0); + BuzzerBeep(count, 1, 1, 0, 0); } void BuzzerEnabledBeep(uint32_t count, uint32_t duration) { if (Settings.flag3.buzzer_enable) { // SetOption67 - Enable buzzer when available - BuzzerBeep(count, duration, 1, 0); + BuzzerBeep(count, duration, 1, 0, 0); } } @@ -109,7 +119,7 @@ void BuzzerInit(void) void BuzzerEvery100mSec(void) { - if (Buzzer.enable) { + if ((Buzzer.enable) && (Buzzer.mode != 2)) { if (Buzzer.count) { if (Buzzer.duration) { Buzzer.duration--; @@ -118,8 +128,10 @@ void BuzzerEvery100mSec(void) Buzzer.state = Buzzer.tune & 1; Buzzer.tune >>= 1; } else { - Buzzer.count--; + Buzzer.tune = Buzzer.tune_reload; + Buzzer.count-= (Buzzer.tune_reload) ? 2 : 1; Buzzer.state = Buzzer.count & 1; + if (Buzzer.mode) { Buzzer.count |= 2; } } Buzzer.duration = Buzzer.set[Buzzer.state]; } @@ -151,16 +163,20 @@ void CmndBuzzer(void) // Buzzer 2 = Beep twice with duration 200mS and pause 100mS // Buzzer 2,3 = Beep twice with duration 300mS and pause 100mS // Buzzer 2,3,4 = Beep twice with duration 300mS and pause 400mS - // Buzzer 2,3,4,0xF54 = Beep a sequence once indicated by 0xF54 = 1111 0101 01 with duration 300mS and pause 400mS + // Buzzer 2,3,4,0xF54 = Beep a sequence twice indicated by 0xF54 = 1111 0101 01 with duration 300mS and pause 400mS if (XdrvMailbox.data_len > 0) { - if (XdrvMailbox.payload > 0) { - uint32_t parm[4] = { 0 }; + if (XdrvMailbox.payload != 0) { + uint32_t parm[4] = { 0 }, mode = 0; ParseParameters(4, parm); - for (uint32_t i = 0; i < 3; i++) { - if (parm[i] < 1) { parm[i] = 1; } // Default Count, On time, Off time + if (XdrvMailbox.payload <= 0) { + parm[0] = 1; // Default Count + mode = -XdrvMailbox.payload; } - BuzzerBeep(parm[0], parm[1], parm[2], parm[3]); + for (uint32_t i = 1; i < 3; i++) { + if (parm[i] < 1) { parm[i] = 1; } // Default On time, Off time + } + BuzzerBeep(parm[0], parm[1], parm[2], parm[3], mode); } else { BuzzerBeep(0); } @@ -197,4 +213,4 @@ bool Xdrv24(uint8_t function) return result; } -#endif // USE_BUZZER \ No newline at end of file +#endif // USE_BUZZER From 7892bad81bb9a68993db21945ff9e5098a0efe9b Mon Sep 17 00:00:00 2001 From: RemiDing Date: Tue, 28 Jan 2020 15:10:23 +0100 Subject: [PATCH 03/25] toggle pressed and not_pressed --- tasmota/support_switch.ino | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tasmota/support_switch.ino b/tasmota/support_switch.ino index 6df39c5d7..0cb88d05d 100644 --- a/tasmota/support_switch.ino +++ b/tasmota/support_switch.ino @@ -155,17 +155,17 @@ void SwitchHandler(uint8_t mode) switchflag = ~button &1; // Follow inverted wall switch state after hold break; case PUSHHOLDMULTI: - if (PRESSED == button){ + if (NOT_PRESSED == button){ Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 25; - SendKey(KEY_SWITCH, i +1, POWER_HOLD); // Execute command via MQTT + SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT } else SendKey(KEY_SWITCH, i +1, POWER_CLEAR); // Execute command via MQTT break; case PUSHHOLDMULTI_INV: - if (NOT_PRESSED == button){ + if (PRESSED == button){ Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 25; - SendKey(KEY_SWITCH, i +1, POWER_HOLD); // Execute command via MQTT + SendKey(KEY_SWITCH, i +1, POWER_INCREMENT); // Execute command via MQTT } else SendKey(KEY_SWITCH, i +1, POWER_CLEAR); // Execute command via MQTT @@ -177,7 +177,7 @@ void SwitchHandler(uint8_t mode) } } -// enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI, FOLLOWMULTI, FOLLOWMULTI_INV, MAX_SWITCH_OPTION}; +// enum SwitchModeOptions {TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON, PUSHBUTTON_INV, PUSHBUTTONHOLD, PUSHBUTTONHOLD_INV, PUSHBUTTON_TOGGLE, TOGGLEMULTI, FOLLOWMULTI, FOLLOWMULTI_INV, PUSHHOLDMULTI, PUSHHOLDMULTI_INV, MAX_SWITCH_OPTION}; if (button != Switch.last_state[i]) { switch (Settings.switchmode[i]) { @@ -230,24 +230,24 @@ void SwitchHandler(uint8_t mode) } break; case PUSHHOLDMULTI: - if ((PRESSED == button) && (NOT_PRESSED == Switch.last_state[i])) { + if ((NOT_PRESSED == button) && (PRESSED == Switch.last_state[i])) { if(Switch.hold_timer[i]!=0) SendKey(KEY_SWITCH, i +1, POWER_INV); // Execute command via MQTT Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; } - if ((NOT_PRESSED == button) && (PRESSED == Switch.last_state[i])) { + if ((PRESSED == button) && (NOT_PRESSED == Switch.last_state[i])) { if(Switch.hold_timer[i] > loops_per_second * Settings.param[P_HOLD_TIME] / 25) switchflag = POWER_TOGGLE; // Toggle with pushbutton Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; } break; case PUSHHOLDMULTI_INV: - if ((NOT_PRESSED == button) && (PRESSED == Switch.last_state[i])) { + if ((PRESSED == button) && (NOT_PRESSED == Switch.last_state[i])) { if(Switch.hold_timer[i]!=0) SendKey(KEY_SWITCH, i +1, POWER_INV); // Execute command via MQTT Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; } - if ((PRESSED == button) && (NOT_PRESSED == Switch.last_state[i])) { + if ((NOT_PRESSED == button) && (PRESSED == Switch.last_state[i])) { if(Switch.hold_timer[i] > loops_per_second * Settings.param[P_HOLD_TIME] / 25) switchflag = POWER_TOGGLE; // Toggle with pushbutton Switch.hold_timer[i] = loops_per_second * Settings.param[P_HOLD_TIME] / 10; From deb8398d0bbb02dc6b097beab8cf67b0c4486f3a Mon Sep 17 00:00:00 2001 From: RemiDing Date: Tue, 28 Jan 2020 15:15:49 +0100 Subject: [PATCH 04/25] maybe needed --- tasmota/xdrv_10_rules.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/xdrv_10_rules.ino b/tasmota/xdrv_10_rules.ino index 13287d009..c58fb10a6 100644 --- a/tasmota/xdrv_10_rules.ino +++ b/tasmota/xdrv_10_rules.ino @@ -563,7 +563,7 @@ void RulesEvery50ms(void) #else if (pin[GPIO_SWT1 +i] < 99) { #endif // USE_TM1638 - bool swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]) || (FOLLOWMULTI_INV == Settings.switchmode[i])); + bool swm = ((FOLLOW_INV == Settings.switchmode[i]) || (PUSHBUTTON_INV == Settings.switchmode[i]) || (PUSHBUTTONHOLD_INV == Settings.switchmode[i]) || (FOLLOWMULTI_INV == Settings.switchmode[i]) || (PUSHHOLDMULTI_INV == Settings.switchmode[i])); snprintf_P(json_event, sizeof(json_event), PSTR("{\"" D_JSON_SWITCH "%d\":{\"Boot\":%d}}"), i +1, (swm ^ SwitchLastState(i))); RulesProcessEvent(json_event); } From 5278a842529e3ef2870ffd7a86e4cfba63a10d28 Mon Sep 17 00:00:00 2001 From: RemiDing Date: Tue, 28 Jan 2020 15:37:18 +0100 Subject: [PATCH 05/25] POWER_INCREMENT added --- tasmota/tasmota.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasmota/tasmota.h b/tasmota/tasmota.h index d12bb22ef..d39ea72a7 100644 --- a/tasmota/tasmota.h +++ b/tasmota/tasmota.h @@ -242,7 +242,7 @@ enum TopicOptions { CMND, STAT, TELE, nu1, RESULT_OR_CMND, RESULT_OR_STAT, RESUL enum ExecuteCommandPowerOptions { POWER_OFF, POWER_ON, POWER_TOGGLE, POWER_BLINK, POWER_BLINK_STOP, POWER_OFF_NO_STATE = 8, POWER_ON_NO_STATE, POWER_TOGGLE_NO_STATE, POWER_SHOW_STATE = 16 }; -enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INV = 4, POWER_CLEAR = 5, CLEAR_RETAIN = 9 }; +enum SendKeyPowerOptions { POWER_HOLD = 3, POWER_INCREMENT = 4, POWER_INV = 5, POWER_CLEAR = 6, CLEAR_RETAIN = 9 }; enum SendKeyOptions { KEY_BUTTON, KEY_SWITCH }; enum PowerOnStateOptions { POWER_ALL_OFF, POWER_ALL_ON, POWER_ALL_SAVED_TOGGLE, POWER_ALL_SAVED, POWER_ALL_ALWAYS_ON, POWER_ALL_OFF_PULSETIME_ON }; From c6a2854a6ec1925cee7a93fa4bfdf0d0bd2a9f98 Mon Sep 17 00:00:00 2001 From: to-scho Date: Thu, 30 Jan 2020 14:33:33 +0100 Subject: [PATCH 06/25] simultaneous shutter button press per shutter detect simultaneous press per shutter and not for whole module --- tasmota/xdrv_27_shutter.ino | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tasmota/xdrv_27_shutter.ino b/tasmota/xdrv_27_shutter.ino index 0a226c2ea..c353a1dd4 100644 --- a/tasmota/xdrv_27_shutter.ino +++ b/tasmota/xdrv_27_shutter.ino @@ -513,11 +513,11 @@ void ShutterRelayChanged(void) } } -bool ShutterButtonIsSimultaneousHold(uint32_t button_index) { +bool ShutterButtonIsSimultaneousHold(uint32_t button_index, uint32_t shutter_index) { // check for simultaneous shutter button hold uint32 min_shutterbutton_hold_timer = -1; for (uint32_t i = 0; i < MAX_KEYS; i++) { - if ((Settings.shutter_button[i] & (1<<31)) && (Button.hold_timer[i] < min_shutterbutton_hold_timer)) + if ((Settings.shutter_button[i] & (1<<31)) && ((Settings.shutter_button[i] & 0x03) == shutter_index) && (Button.hold_timer[i] < min_shutterbutton_hold_timer)) min_shutterbutton_hold_timer = Button.hold_timer[i]; } return (min_shutterbutton_hold_timer > (Button.hold_timer[button_index]>>1)); @@ -562,10 +562,10 @@ void ShutterButtonHandler(void) } if ((Button.press_counter[button_index]<99) && (Button.hold_timer[button_index] == loops_per_second * Settings.param[P_HOLD_TIME] / 10)) { // press still valid && SetOption32 (40) - Button hold // check for simultaneous shutter button hold - if (ShutterButtonIsSimultaneousHold(button_index)) { + if (ShutterButtonIsSimultaneousHold(button_index, shutter_index)) { // simultaneous shutter button hold detected for (uint32_t i = 0; i < MAX_KEYS; i++) - if (Settings.shutter_button[i] & (1<<31)) + if ((Settings.shutter_button[i] & (1<<31)) && ((Settings.shutter_button[i] & 0x03) == shutter_index)) Button.press_counter[i] = 99; // Remember to discard further action for press & hold within button timings press_index = 0; buttonState = SHT_PRESSED_HOLD_SIMULTANEOUS; @@ -578,7 +578,7 @@ void ShutterButtonHandler(void) } if ((Button.press_counter[button_index]==0) && (Button.hold_timer[button_index] == loops_per_second * IMMINENT_RESET_FACTOR * Settings.param[P_HOLD_TIME] / 10)) { // SetOption32 (40) - Button held for factor times longer // check for simultaneous shutter button extend hold - if (ShutterButtonIsSimultaneousHold(button_index)) { + if (ShutterButtonIsSimultaneousHold(button_index, shutter_index)) { // simultaneous shutter button extend hold detected press_index = 0; buttonState = SHT_PRESSED_EXT_HOLD_SIMULTANEOUS; @@ -596,14 +596,14 @@ void ShutterButtonHandler(void) // check for simultaneous shutter button press uint32 min_shutterbutton_press_counter = -1; for (uint32_t i = 0; i < MAX_KEYS; i++) { - if ((Settings.shutter_button[i] & (1<<31)) && (Button.press_counter[i] < min_shutterbutton_press_counter)) + if ((Settings.shutter_button[i] & (1<<31)) && ((Settings.shutter_button[i] & 0x03) == shutter_index) && (Button.press_counter[i] < min_shutterbutton_press_counter)) min_shutterbutton_press_counter = Button.press_counter[i]; } if (min_shutterbutton_press_counter == Button.press_counter[button_index]) { // simultaneous shutter button press detected press_index = Button.press_counter[button_index]; for (uint32_t i = 0; i < MAX_KEYS; i++) - if (Settings.shutter_button[i] & (1<<31)) + if ((Settings.shutter_button[i] & (1<<31)) && ((Settings.shutter_button[i] & 0x03) == shutter_index)) Button.press_counter[i] = 99; // Remember to discard further action for press & hold within button timings buttonState = SHT_PRESSED_MULTI_SIMULTANEOUS; } From 3b61d7768083054c367193406d8f202c92b2200f Mon Sep 17 00:00:00 2001 From: Hadinger Date: Sat, 1 Feb 2020 14:23:13 +0100 Subject: [PATCH 07/25] Fix wrong CT channel for Module 48 --- tasmota/xdrv_04_light.ino | 62 ++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index 4ef8b409e..a45a5499d 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -2030,38 +2030,40 @@ void calcGammaMultiChannels(uint16_t cur_col_10[5]) { void calcGammaBulbs(uint16_t cur_col_10[5]) { // Apply gamma correction for 8 and 10 bits resolutions, if needed - if (Settings.light_correction) { - // First apply combined correction to the overall white power - if ((LST_COLDWARM == Light.subtype) || (LST_RGBCW == Light.subtype)) { - // channels for white are always the last two channels - uint32_t cw1 = Light.subtype - 1; // address for the ColorTone PWM - uint32_t cw0 = Light.subtype - 2; // address for the White Brightness PWM - uint16_t white_bri10 = cur_col_10[cw0] + cur_col_10[cw1]; // cumulated brightness - uint16_t white_bri10_1023 = (white_bri10 > 1023) ? 1023 : white_bri10; // max 1023 - if (PHILIPS == my_module_type) { // channel 1 is the color tone, mapped to cold channel (0..255) - // Xiaomi Philips bulbs follow a different scheme: - cur_col_10[cw1] = light_state.getCT10bits(); - // channel 0=intensity, channel1=temperature - if (Settings.light_correction) { // gamma correction - cur_col_10[cw0] = ledGamma10_10(white_bri10_1023); // 10 bits gamma correction - } else { - cur_col_10[cw0] = white_bri10_1023; // no gamma, extend to 10 bits - } + // First apply combined correction to the overall white power + if ((LST_COLDWARM == Light.subtype) || (LST_RGBCW == Light.subtype)) { + // channels for white are always the last two channels + uint32_t cw1 = Light.subtype - 1; // address for the ColorTone PWM + uint32_t cw0 = Light.subtype - 2; // address for the White Brightness PWM + uint16_t white_bri10 = cur_col_10[cw0] + cur_col_10[cw1]; // cumulated brightness + uint16_t white_bri10_1023 = (white_bri10 > 1023) ? 1023 : white_bri10; // max 1023 + + if (PHILIPS == my_module_type) { // channel 1 is the color tone, mapped to cold channel (0..255) + // Xiaomi Philips bulbs follow a different scheme: + cur_col_10[cw1] = light_state.getCT10bits(); + // channel 0=intensity, channel1=temperature + if (Settings.light_correction) { // gamma correction + cur_col_10[cw0] = ledGamma10_10(white_bri10_1023); // 10 bits gamma correction } else { - // if sum of both channels is > 255, then channels are probably uncorrelated - if (white_bri10 <= 1031) { // take a margin of 8 above 1023 to account for rounding errors - // we calculate the gamma corrected sum of CW + WW - uint16_t white_bri_gamma10 = ledGamma10_10(white_bri10_1023); - // then we split the total energy among the cold and warm leds - cur_col_10[cw0] = changeUIntScale(cur_col_10[cw0], 0, white_bri10_1023, 0, white_bri_gamma10); - cur_col_10[cw1] = changeUIntScale(cur_col_10[cw1], 0, white_bri10_1023, 0, white_bri_gamma10); - } else { - cur_col_10[cw0] = ledGamma10_10(cur_col_10[cw0]); - cur_col_10[cw1] = ledGamma10_10(cur_col_10[cw1]); - } + cur_col_10[cw0] = white_bri10_1023; // no gamma, extend to 10 bits + } + } else if (Settings.light_correction) { + // if sum of both channels is > 255, then channels are probably uncorrelated + if (white_bri10 <= 1031) { // take a margin of 8 above 1023 to account for rounding errors + // we calculate the gamma corrected sum of CW + WW + uint16_t white_bri_gamma10 = ledGamma10_10(white_bri10_1023); + // then we split the total energy among the cold and warm leds + cur_col_10[cw0] = changeUIntScale(cur_col_10[cw0], 0, white_bri10_1023, 0, white_bri_gamma10); + cur_col_10[cw1] = changeUIntScale(cur_col_10[cw1], 0, white_bri10_1023, 0, white_bri_gamma10); + } else { + cur_col_10[cw0] = ledGamma10_10(cur_col_10[cw0]); + cur_col_10[cw1] = ledGamma10_10(cur_col_10[cw1]); } } + } + + if (Settings.light_correction) { // then apply gamma correction to RGB channels if (LST_RGB <= Light.subtype) { for (uint32_t i = 0; i < 3; i++) { @@ -2069,8 +2071,8 @@ void calcGammaBulbs(uint16_t cur_col_10[5]) { } } // If RGBW or Single channel, also adjust White channel - if ((LST_COLDWARM != Light.subtype) && (LST_RGBCW != Light.subtype)) { - cur_col_10[3] = ledGamma10_10(cur_col_10[3]); + if ((LST_SINGLE == Light.subtype) || (LST_RGBW == Light.subtype)) { + cur_col_10[Light.subtype - 1] = ledGamma10_10(cur_col_10[Light.subtype - 1]); } } } From ed455df7604837d12caa2acb55aec49c293a7548 Mon Sep 17 00:00:00 2001 From: Hadinger Date: Sun, 2 Feb 2020 13:13:44 +0100 Subject: [PATCH 08/25] Fix PWM flickering at low levels (#7415) --- tasmota/CHANGELOG.md | 1 + tasmota/core_esp8266_waveform.cpp | 317 ++++++++++++++++++++++++++++++ 2 files changed, 318 insertions(+) create mode 100644 tasmota/core_esp8266_waveform.cpp diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index b5036467c..e82a7c082 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -4,6 +4,7 @@ - Change wifi connectivity stability (#7602) - Add ``SetOption84 1`` sends AWS IoT device shadow updates (alternative to retained) +- Fix PWM flickering at low levels (#7415) ### 8.1.0.4 20200116 diff --git a/tasmota/core_esp8266_waveform.cpp b/tasmota/core_esp8266_waveform.cpp new file mode 100644 index 000000000..14cec9789 --- /dev/null +++ b/tasmota/core_esp8266_waveform.cpp @@ -0,0 +1,317 @@ +/* + esp8266_waveform - General purpose waveform generation and control, + supporting outputs on all pins in parallel. + + Copyright (c) 2018 Earle F. Philhower, III. All rights reserved. + + The core idea is to have a programmable waveform generator with a unique + high and low period (defined in microseconds). TIMER1 is set to 1-shot + mode and is always loaded with the time until the next edge of any live + waveforms. + + Up to one waveform generator per pin supported. + + Each waveform generator is synchronized to the ESP cycle counter, not the + timer. This allows for removing interrupt jitter and delay as the counter + always increments once per 80MHz clock. Changes to a waveform are + contiguous and only take effect on the next waveform transition, + allowing for smooth transitions. + + This replaces older tone(), analogWrite(), and the Servo classes. + + Everywhere in the code where "cycles" is used, it means ESP.getCycleTime() + cycles, not TIMER1 cycles (which may be 2 CPU clocks @ 160MHz). + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + 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, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// Use PWM from core 2.4.0 as all versions below 2.5.0-beta3 produce LED flickering when settings are saved to flash +#include +#if defined(ARDUINO_ESP8266_RELEASE_2_6_1) || defined(ARDUINO_ESP8266_RELEASE_2_6_2) || defined(ARDUINO_ESP8266_RELEASE_2_6_3) +#warning **** Tasmota is using a patched PWM Arduino version as planned **** + + +#include +#include "ets_sys.h" +#include "core_esp8266_waveform.h" + +extern "C" { + +// Maximum delay between IRQs +#define MAXIRQUS (10000) + +// Set/clear GPIO 0-15 by bitmask +#define SetGPIO(a) do { GPOS = a; } while (0) +#define ClearGPIO(a) do { GPOC = a; } while (0) + +// Waveform generator can create tones, PWM, and servos +typedef struct { + uint32_t nextServiceCycle; // ESP cycle timer when a transition required + uint32_t expiryCycle; // For time-limited waveform, the cycle when this waveform must stop + uint32_t nextTimeHighCycles; // Copy over low->high to keep smooth waveform + uint32_t nextTimeLowCycles; // Copy over high->low to keep smooth waveform +} Waveform; + +static Waveform waveform[17]; // State of all possible pins +static volatile uint32_t waveformState = 0; // Is the pin high or low, updated in NMI so no access outside the NMI code +static volatile uint32_t waveformEnabled = 0; // Is it actively running, updated in NMI so no access outside the NMI code + +// Enable lock-free by only allowing updates to waveformState and waveformEnabled from IRQ service routine +static volatile uint32_t waveformToEnable = 0; // Message to the NMI handler to start a waveform on a inactive pin +static volatile uint32_t waveformToDisable = 0; // Message to the NMI handler to disable a pin from waveform generation + +static uint32_t (*timer1CB)() = NULL; + + +// Non-speed critical bits +#pragma GCC optimize ("Os") + +static inline ICACHE_RAM_ATTR uint32_t GetCycleCount() { + uint32_t ccount; + __asm__ __volatile__("esync; rsr %0,ccount":"=a"(ccount)); + return ccount; +} + +// Interrupt on/off control +static ICACHE_RAM_ATTR void timer1Interrupt(); +static bool timerRunning = false; + +static void initTimer() { + timer1_disable(); + ETS_FRC_TIMER1_INTR_ATTACH(NULL, NULL); + ETS_FRC_TIMER1_NMI_INTR_ATTACH(timer1Interrupt); + timer1_enable(TIM_DIV1, TIM_EDGE, TIM_SINGLE); + timerRunning = true; +} + +static void ICACHE_RAM_ATTR deinitTimer() { + ETS_FRC_TIMER1_NMI_INTR_ATTACH(NULL); + timer1_disable(); + timer1_isr_init(); + timerRunning = false; +} + +// Set a callback. Pass in NULL to stop it +void setTimer1Callback(uint32_t (*fn)()) { + timer1CB = fn; + if (!timerRunning && fn) { + initTimer(); + timer1_write(microsecondsToClockCycles(1)); // Cause an interrupt post-haste + } else if (timerRunning && !fn && !waveformEnabled) { + deinitTimer(); + } +} + +// Start up a waveform on a pin, or change the current one. Will change to the new +// waveform smoothly on next low->high transition. For immediate change, stopWaveform() +// first, then it will immediately begin. +int startWaveform(uint8_t pin, uint32_t timeHighUS, uint32_t timeLowUS, uint32_t runTimeUS) { + if ((pin > 16) || isFlashInterfacePin(pin)) { + return false; + } + Waveform *wave = &waveform[pin]; + // Adjust to shave off some of the IRQ time, approximately + wave->nextTimeHighCycles = microsecondsToClockCycles(timeHighUS); + wave->nextTimeLowCycles = microsecondsToClockCycles(timeLowUS); + wave->expiryCycle = runTimeUS ? GetCycleCount() + microsecondsToClockCycles(runTimeUS) : 0; + if (runTimeUS && !wave->expiryCycle) { + wave->expiryCycle = 1; // expiryCycle==0 means no timeout, so avoid setting it + } + + uint32_t mask = 1<nextServiceCycle = GetCycleCount() + microsecondsToClockCycles(1); + waveformToEnable |= mask; + if (!timerRunning) { + initTimer(); + timer1_write(microsecondsToClockCycles(10)); + } else { + // Ensure timely service.... + if (T1L > microsecondsToClockCycles(10)) { + timer1_write(microsecondsToClockCycles(10)); + } + } + while (waveformToEnable) { + delay(0); // Wait for waveform to update + } + } + + return true; +} + +// Speed critical bits +#pragma GCC optimize ("O2") +// Normally would not want two copies like this, but due to different +// optimization levels the inline attribute gets lost if we try the +// other version. + +static inline ICACHE_RAM_ATTR uint32_t GetCycleCountIRQ() { + uint32_t ccount; + __asm__ __volatile__("rsr %0,ccount":"=a"(ccount)); + return ccount; +} + +static inline ICACHE_RAM_ATTR uint32_t min_u32(uint32_t a, uint32_t b) { + if (a < b) { + return a; + } + return b; +} + +// Stops a waveform on a pin +int ICACHE_RAM_ATTR stopWaveform(uint8_t pin) { + // Can't possibly need to stop anything if there is no timer active + if (!timerRunning) { + return false; + } + // If user sends in a pin >16 but <32, this will always point to a 0 bit + // If they send >=32, then the shift will result in 0 and it will also return false + uint32_t mask = 1< microsecondsToClockCycles(10)) { + timer1_write(microsecondsToClockCycles(10)); + } + while (waveformToDisable) { + /* no-op */ // Can't delay() since stopWaveform may be called from an IRQ + } + if (!waveformEnabled && !timer1CB) { + deinitTimer(); + } + return true; +} + +// The SDK and hardware take some time to actually get to our NMI code, so +// decrement the next IRQ's timer value by a bit so we can actually catch the +// real CPU cycle counter we want for the waveforms. +#if F_CPU == 80000000 + #define DELTAIRQ (microsecondsToClockCycles(3)) +#else + #define DELTAIRQ (microsecondsToClockCycles(2)) +#endif + + +static ICACHE_RAM_ATTR void timer1Interrupt() { + // Optimize the NMI inner loop by keeping track of the min and max GPIO that we + // are generating. In the common case (1 PWM) these may be the same pin and + // we can avoid looking at the other pins. + static int startPin = 0; + static int endPin = 0; + + uint32_t nextEventCycles = microsecondsToClockCycles(MAXIRQUS); + uint32_t timeoutCycle = GetCycleCountIRQ() + microsecondsToClockCycles(14); + + if (waveformToEnable || waveformToDisable) { + // Handle enable/disable requests from main app. + waveformEnabled = (waveformEnabled & ~waveformToDisable) | waveformToEnable; // Set the requested waveforms on/off + waveformState &= ~waveformToEnable; // And clear the state of any just started + waveformToEnable = 0; + waveformToDisable = 0; + // Find the first GPIO being generated by checking GCC's find-first-set (returns 1 + the bit of the first 1 in an int32_t) + startPin = __builtin_ffs(waveformEnabled) - 1; + // Find the last bit by subtracting off GCC's count-leading-zeros (no offset in this one) + endPin = 32 - __builtin_clz(waveformEnabled); + } + + bool done = false; + if (waveformEnabled) { + do { + nextEventCycles = microsecondsToClockCycles(MAXIRQUS); + for (int i = startPin; i <= endPin; i++) { + uint32_t mask = 1<expiryCycle) { + int32_t expiryToGo = wave->expiryCycle - now; + if (expiryToGo < 0) { + // Done, remove! + waveformEnabled &= ~mask; + if (i == 16) { + GP16O &= ~1; + } else { + ClearGPIO(mask); + } + continue; + } + } + + // Check for toggles + int32_t cyclesToGo = wave->nextServiceCycle - now; + if (cyclesToGo < 0) { + waveformState ^= mask; + if (waveformState & mask) { + if (i == 16) { + GP16O |= 1; // GPIO16 write slow as it's RMW + } else { + SetGPIO(mask); + } + wave->nextServiceCycle = now + wave->nextTimeHighCycles + cyclesToGo; + nextEventCycles = min_u32(nextEventCycles, min_u32(wave->nextTimeHighCycles + cyclesToGo, 1)); + } else { + if (i == 16) { + GP16O &= ~1; // GPIO16 write slow as it's RMW + } else { + ClearGPIO(mask); + } + wave->nextServiceCycle = now + wave->nextTimeLowCycles + cyclesToGo; + nextEventCycles = min_u32(nextEventCycles, min_u32(wave->nextTimeLowCycles + cyclesToGo, 1)); + } + } else { + uint32_t deltaCycles = wave->nextServiceCycle - now; + nextEventCycles = min_u32(nextEventCycles, deltaCycles); + } + } + + // Exit the loop if we've hit the fixed runtime limit or the next event is known to be after that timeout would occur + uint32_t now = GetCycleCountIRQ(); + int32_t cycleDeltaNextEvent = timeoutCycle - (now + nextEventCycles); + int32_t cyclesLeftTimeout = timeoutCycle - now; + done = (cycleDeltaNextEvent < 0) || (cyclesLeftTimeout < 0); + } while (!done); + } // if (waveformEnabled) + + if (timer1CB) { + nextEventCycles = min_u32(nextEventCycles, timer1CB()); + } + + if (nextEventCycles < microsecondsToClockCycles(10)) { + nextEventCycles = microsecondsToClockCycles(10); + } + nextEventCycles -= DELTAIRQ; + + // Do it here instead of global function to save time and because we know it's edge-IRQ +#if F_CPU == 160000000 + T1L = nextEventCycles >> 1; // Already know we're in range by MAXIRQUS +#else + T1L = nextEventCycles; // Already know we're in range by MAXIRQUS +#endif + TEIE |= TEIE1; // Edge int enable +} + +}; + +#endif // ARDUINO_ESP8266_RELEASE \ No newline at end of file From 02df35b6b5d9173e76fd3a5589c0672a1a7da441 Mon Sep 17 00:00:00 2001 From: Hadinger Date: Sun, 2 Feb 2020 18:02:31 +0100 Subject: [PATCH 09/25] Safeguard if delay is too high --- tasmota/core_esp8266_waveform.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tasmota/core_esp8266_waveform.cpp b/tasmota/core_esp8266_waveform.cpp index 14cec9789..8ee2d9eba 100644 --- a/tasmota/core_esp8266_waveform.cpp +++ b/tasmota/core_esp8266_waveform.cpp @@ -262,6 +262,7 @@ static ICACHE_RAM_ATTR void timer1Interrupt() { // Check for toggles int32_t cyclesToGo = wave->nextServiceCycle - now; if (cyclesToGo < 0) { + cyclesToGo = -((-cyclesToGo) % (wave->nextTimeHighCycles + wave->nextTimeLowCycles)); waveformState ^= mask; if (waveformState & mask) { if (i == 16) { From 9ce92d7df8135f39a802a3e647a1c35488fcba06 Mon Sep 17 00:00:00 2001 From: Hadinger Date: Sun, 2 Feb 2020 18:38:27 +0100 Subject: [PATCH 10/25] Fixed comment --- tasmota/core_esp8266_waveform.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tasmota/core_esp8266_waveform.cpp b/tasmota/core_esp8266_waveform.cpp index 8ee2d9eba..a17b63a9b 100644 --- a/tasmota/core_esp8266_waveform.cpp +++ b/tasmota/core_esp8266_waveform.cpp @@ -37,7 +37,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -// Use PWM from core 2.4.0 as all versions below 2.5.0-beta3 produce LED flickering when settings are saved to flash #include #if defined(ARDUINO_ESP8266_RELEASE_2_6_1) || defined(ARDUINO_ESP8266_RELEASE_2_6_2) || defined(ARDUINO_ESP8266_RELEASE_2_6_3) #warning **** Tasmota is using a patched PWM Arduino version as planned **** From 49ebd870ca256febaf74f7dbd33310cad2d4991e Mon Sep 17 00:00:00 2001 From: Hadinger Date: Sun, 2 Feb 2020 20:53:49 +0100 Subject: [PATCH 11/25] Add ``ZbBind`` (experimental) and bug fixes --- tasmota/CHANGELOG.md | 1 + tasmota/i18n.h | 1 + tasmota/xdrv_23_zigbee_3_devices.ino | 22 ++++- tasmota/xdrv_23_zigbee_5_converters.ino | 19 ++-- tasmota/xdrv_23_zigbee_8_parsers.ino | 3 + tasmota/xdrv_23_zigbee_9_impl.ino | 125 ++++++++++++++++++------ 6 files changed, 134 insertions(+), 37 deletions(-) diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index b5036467c..4d2834a4e 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -4,6 +4,7 @@ - Change wifi connectivity stability (#7602) - Add ``SetOption84 1`` sends AWS IoT device shadow updates (alternative to retained) +- Add ``ZbBind`` (experimental) and bug fixes ### 8.1.0.4 20200116 diff --git a/tasmota/i18n.h b/tasmota/i18n.h index fdf07acd6..d44030569 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -493,6 +493,7 @@ #define D_JSON_ZIGBEE_ZCL_SENT "ZbZCLSent" #define D_JSON_ZIGBEE_RECEIVED "ZbReceived" #define D_JSON_ZIGBEE_RECEIVED_LEGACY "ZigbeeReceived" +#define D_CMND_ZIGBEE_BIND "Bind" // Commands xdrv_25_A4988_Stepper.ino #define D_CMND_MOTOR "MOTOR" diff --git a/tasmota/xdrv_23_zigbee_3_devices.ino b/tasmota/xdrv_23_zigbee_3_devices.ino index 5db3986e4..984842380 100644 --- a/tasmota/xdrv_23_zigbee_3_devices.ino +++ b/tasmota/xdrv_23_zigbee_3_devices.ino @@ -71,6 +71,8 @@ public: uint16_t isKnownIndex(uint32_t index) const; uint16_t isKnownFriendlyName(const char * name) const; + uint64_t getDeviceLongAddr(uint16_t shortaddr) const; + // Add new device, provide ShortAddr and optional longAddr // If it is already registered, update information, otherwise create the entry void updateDevice(uint16_t shortaddr, uint64_t longaddr = 0); @@ -142,6 +144,7 @@ private: static int32_t findClusterEndpoint(const std::vector & vecOfElements, uint16_t element); Z_Device & getShortAddr(uint16_t shortaddr); // find Device from shortAddr, creates it if does not exist + const Z_Device & getShortAddrConst(uint16_t shortaddr) const ; // find Device from shortAddr, creates it if does not exist Z_Device & getLongAddr(uint64_t longaddr); // find Device from shortAddr, creates it if does not exist int32_t findShortAddr(uint16_t shortaddr) const; @@ -160,6 +163,9 @@ private: Z_Devices zigbee_devices = Z_Devices(); +// Local coordinator information +uint64_t localIEEEAddr = 0; + // https://thispointer.com/c-how-to-find-an-element-in-vector-and-get-its-index/ template < typename T> bool Z_Devices::findInVector(const std::vector & vecOfElements, const T & element) { @@ -326,6 +332,11 @@ uint16_t Z_Devices::isKnownFriendlyName(const char * name) const { } } +uint64_t Z_Devices::getDeviceLongAddr(uint16_t shortaddr) const { + const Z_Device & device = getShortAddrConst(shortaddr); + return device.longaddr; +} + // // We have a seen a shortaddr on the network, get the corresponding // @@ -335,9 +346,18 @@ Z_Device & Z_Devices::getShortAddr(uint16_t shortaddr) { if (found >= 0) { return _devices[found]; } -//Serial.printf("Device entry created for shortaddr = 0x%02X, found = %d\n", shortaddr, found); + //Serial.printf("Device entry created for shortaddr = 0x%02X, found = %d\n", shortaddr, found); return createDeviceEntry(shortaddr, 0); } +// Same version but Const +const Z_Device & Z_Devices::getShortAddrConst(uint16_t shortaddr) const { + if (!shortaddr) { return *(Z_Device*) nullptr; } // this is not legal + int32_t found = findShortAddr(shortaddr); + if (found >= 0) { + return _devices[found]; + } + return *((Z_Device*)nullptr); +} // find the Device object by its longaddr (unique key if not null) Z_Device & Z_Devices::getLongAddr(uint64_t longaddr) { diff --git a/tasmota/xdrv_23_zigbee_5_converters.ino b/tasmota/xdrv_23_zigbee_5_converters.ino index 0518ec6be..fa79a0796 100644 --- a/tasmota/xdrv_23_zigbee_5_converters.ino +++ b/tasmota/xdrv_23_zigbee_5_converters.ino @@ -39,10 +39,10 @@ class ZCLFrame { public: ZCLFrame(uint8_t frame_control, uint16_t manuf_code, uint8_t transact_seq, uint8_t cmd_id, - const char *buf, size_t buf_len, uint16_t clusterid = 0, uint16_t groupid = 0, - uint16_t srcaddr = 0, uint8_t srcendpoint = 0, uint8_t dstendpoint = 0, uint8_t wasbroadcast = 0, - uint8_t linkquality = 0, uint8_t securityuse = 0, uint8_t seqnumber = 0, - uint32_t timestamp = 0): + const char *buf, size_t buf_len, uint16_t clusterid, uint16_t groupid, + uint16_t srcaddr, uint8_t srcendpoint, uint8_t dstendpoint, uint8_t wasbroadcast, + uint8_t linkquality, uint8_t securityuse, uint8_t seqnumber, + uint32_t timestamp): _cmd_id(cmd_id), _manuf_code(manuf_code), _transact_seq(transact_seq), _payload(buf_len ? buf_len : 250), // allocate the data frame from source or preallocate big enough _cluster_id(clusterid), _group_id(groupid), @@ -74,9 +74,9 @@ public: } static ZCLFrame parseRawFrame(const SBuffer &buf, uint8_t offset, uint8_t len, uint16_t clusterid, uint16_t groupid, - uint16_t srcaddr = 0, uint8_t srcendpoint = 0, uint8_t dstendpoint = 0, uint8_t wasbroadcast = 0, - uint8_t linkquality = 0, uint8_t securityuse = 0, uint8_t seqnumber = 0, - uint32_t timestamp = 0) { // parse a raw frame and build the ZCL frame object + uint16_t srcaddr, uint8_t srcendpoint, uint8_t dstendpoint, uint8_t wasbroadcast, + uint8_t linkquality, uint8_t securityuse, uint8_t seqnumber, + uint32_t timestamp) { // parse a raw frame and build the ZCL frame object uint32_t i = offset; ZCLHeaderFrameControl_t frame_control; uint16_t manuf_code = 0; @@ -92,7 +92,10 @@ public: cmd_id = buf.get8(i++); ZCLFrame zcl_frame(frame_control.d8, manuf_code, transact_seq, cmd_id, (const char *)(buf.buf() + i), len + offset - i, - clusterid, groupid); + clusterid, groupid, + srcaddr, srcendpoint, dstendpoint, wasbroadcast, + linkquality, securityuse, seqnumber, + timestamp); return zcl_frame; } diff --git a/tasmota/xdrv_23_zigbee_8_parsers.ino b/tasmota/xdrv_23_zigbee_8_parsers.ino index 74a900f00..668f85471 100644 --- a/tasmota/xdrv_23_zigbee_8_parsers.ino +++ b/tasmota/xdrv_23_zigbee_8_parsers.ino @@ -33,6 +33,9 @@ int32_t Z_ReceiveDeviceInfo(int32_t res, class SBuffer &buf) { uint8_t device_state = buf.get8(14); uint8_t device_associated = buf.get8(15); + // keep track of the local IEEE address + localIEEEAddr = long_adr; + char hex[20]; Uint64toHex(long_adr, hex, 64); Response_P(PSTR("{\"" D_JSON_ZIGBEE_STATE "\":{" diff --git a/tasmota/xdrv_23_zigbee_9_impl.ino b/tasmota/xdrv_23_zigbee_9_impl.ino index 2b529c8d6..43f7a2ef4 100644 --- a/tasmota/xdrv_23_zigbee_9_impl.ino +++ b/tasmota/xdrv_23_zigbee_9_impl.ino @@ -33,19 +33,19 @@ const char kZbCommands[] PROGMEM = D_PRFX_ZB "|" // prefix D_CMND_ZIGBEEZNPSEND "|" D_CMND_ZIGBEE_PERMITJOIN "|" D_CMND_ZIGBEE_STATUS "|" D_CMND_ZIGBEE_RESET "|" D_CMND_ZIGBEE_SEND "|" D_CMND_ZIGBEE_PROBE "|" D_CMND_ZIGBEE_READ "|" D_CMND_ZIGBEEZNPRECEIVE "|" - D_CMND_ZIGBEE_FORGET "|" D_CMND_ZIGBEE_SAVE "|" D_CMND_ZIGBEE_NAME ; + D_CMND_ZIGBEE_FORGET "|" D_CMND_ZIGBEE_SAVE "|" D_CMND_ZIGBEE_NAME "|" D_CMND_ZIGBEE_BIND ; const char kZigbeeCommands[] PROGMEM = D_PRFX_ZIGBEE "|" // legacy prefix -- deprecated D_CMND_ZIGBEEZNPSEND "|" D_CMND_ZIGBEE_PERMITJOIN "|" D_CMND_ZIGBEE_STATUS "|" D_CMND_ZIGBEE_RESET "|" D_CMND_ZIGBEE_SEND "|" D_CMND_ZIGBEE_PROBE "|" D_CMND_ZIGBEE_READ "|" D_CMND_ZIGBEEZNPRECEIVE "|" - D_CMND_ZIGBEE_FORGET "|" D_CMND_ZIGBEE_SAVE "|" D_CMND_ZIGBEE_NAME ; + D_CMND_ZIGBEE_FORGET "|" D_CMND_ZIGBEE_SAVE "|" D_CMND_ZIGBEE_NAME "|" D_CMND_ZIGBEE_BIND ; void (* const ZigbeeCommand[])(void) PROGMEM = { - &CmndZigbeeZNPSend, &CmndZigbeePermitJoin, - &CmndZigbeeStatus, &CmndZigbeeReset, &CmndZigbeeSend, - &CmndZigbeeProbe, &CmndZigbeeRead, &CmndZigbeeZNPReceive, - &CmndZigbeeForget, &CmndZigbeeSave, &CmndZigbeeName + &CmndZbZNPSend, &CmndZbPermitJoin, + &CmndZbStatus, &CmndZbReset, &CmndZbSend, + &CmndZbProbe, &CmndZbRead, &CmndZbZNPReceive, + &CmndZbForget, &CmndZbSave, &CmndZbName, &CmndZbBind }; int32_t ZigbeeProcessInput(class SBuffer &buf) { @@ -257,7 +257,7 @@ const unsigned char ZIGBEE_FACTORY_RESET[] PROGMEM = { Z_SREQ | Z_SAPI, SAPI_WRITE_CONFIGURATION, CONF_STARTUP_OPTION, 0x01 /* len */, 0x01 /* STARTOPT_CLEAR_CONFIG */}; //"2605030101"; // Z_SREQ | Z_SAPI, SAPI_WRITE_CONFIGURATION, CONF_STARTUP_OPTION, 0x01 len, 0x01 STARTOPT_CLEAR_CONFIG // Do a factory reset of the CC2530 -void CmndZigbeeReset(void) { +void CmndZbReset(void) { if (ZigbeeSerial) { switch (XdrvMailbox.payload) { case 1: @@ -272,7 +272,7 @@ void CmndZigbeeReset(void) { } } -void CmndZigbeeZNPSendOrReceive(bool send) +void CmndZbZNPSendOrReceive(bool send) { if (ZigbeeSerial && (XdrvMailbox.data_len > 0)) { uint8_t code; @@ -300,14 +300,14 @@ void CmndZigbeeZNPSendOrReceive(bool send) } // For debug purposes only, simulates a message received -void CmndZigbeeZNPReceive(void) +void CmndZbZNPReceive(void) { - CmndZigbeeZNPSendOrReceive(false); + CmndZbZNPSendOrReceive(false); } -void CmndZigbeeZNPSend(void) +void CmndZbZNPSend(void) { - CmndZigbeeZNPSendOrReceive(true); + CmndZbZNPSendOrReceive(true); } void ZigbeeZNPSend(const uint8_t *msg, size_t len) { @@ -442,7 +442,7 @@ void zigbeeZCLSendStr(uint16_t dstAddr, uint8_t endpoint, const char *data) { ResponseCmndDone(); } -void CmndZigbeeSend(void) { +void CmndZbSend(void) { // ZigbeeSend { "device":"0x1234", "endpoint":"0x03", "send":{"Power":1} } // ZigbeeSend { "device":"0x1234", "endpoint":"0x03", "send":{"Power":"3"} } // ZigbeeSend { "device":"0x1234", "endpoint":"0x03", "send":{"Power":"0xFF"} } @@ -465,9 +465,14 @@ void CmndZigbeeSend(void) { uint8_t endpoint = 0x00; // 0x00 is invalid for the dst endpoint String cmd_str = ""; // the actual low-level command, either specified or computed - const JsonVariant &val_device = getCaseInsensitive(json, PSTR("device")); - if (nullptr != &val_device) { device = strToUInt(val_device); } - const JsonVariant &val_endpoint = getCaseInsensitive(json, PSTR("endpoint")); + const JsonVariant &val_device = getCaseInsensitive(json, PSTR("Device")); + if (nullptr != &val_device) { + device = zigbee_devices.parseDeviceParam(val_device.as()); + if (0xFFFF == device) { ResponseCmndChar("Invalid parameter"); return; } + } + if ((nullptr == &val_device) || (0x000 == device)) { ResponseCmndChar("Unknown device"); return; } + + const JsonVariant &val_endpoint = getCaseInsensitive(json, PSTR("Endpoint")); if (nullptr != &val_endpoint) { endpoint = strToUInt(val_endpoint); } const JsonVariant &val_cmd = getCaseInsensitive(json, PSTR("Send")); if (nullptr != &val_cmd) { @@ -547,8 +552,64 @@ void CmndZigbeeSend(void) { } +ZBM(ZBS_BIND_REQ, Z_SREQ | Z_ZDO, ZDO_BIND_REQ, + 0,0, // dstAddr - 16 bits, device to send the bind to + 0,0,0,0,0,0,0,0, // srcAddr - 64 bits, IEEE binding source + 0x00, // source endpoint + 0x00, 0x00, // cluster + 0x03, // DstAddrMode - 0x03 = ADDRESS_64_BIT + 0,0,0,0,0,0,0,0, // dstAddr - 64 bits, IEEE binding destination, i.e. coordinator + 0x01 // dstEndpoint - 0x01 for coordinator +) + +void CmndZbBind(void) { + // ZbBind { "device":"0x1234", "endpoint":1, "cluster":6 } + + // local endpoint is always 1, IEEE addresses are calculated + if (zigbee.init_phase) { ResponseCmndChar(D_ZIGBEE_NOT_STARTED); return; } + DynamicJsonBuffer jsonBuf; + JsonObject &json = jsonBuf.parseObject(XdrvMailbox.data); + if (!json.success()) { ResponseCmndChar(D_JSON_INVALID_JSON); return; } + + // params + // static char delim[] = ", "; // delimiters for parameters + uint16_t device = 0xFFFF; // 0xFFFF is broadcast, so considered valid + uint8_t endpoint = 0x00; // 0x00 is invalid for the dst endpoint + uint16_t cluster = 0; // 0xFFFF is invalid + uint32_t group = 0xFFFFFFFF; // 16 bits values, otherwise 0xFFFFFFFF is unspecified + + const JsonVariant &val_device = getCaseInsensitive(json, PSTR("Device")); + if (nullptr != &val_device) { + device = zigbee_devices.parseDeviceParam(val_device.as()); + if (0xFFFF == device) { ResponseCmndChar("Invalid parameter"); return; } + } + if ((nullptr == &val_device) || (0x000 == device)) { ResponseCmndChar("Unknown device"); return; } + + const JsonVariant &val_endpoint = getCaseInsensitive(json, PSTR("Endpoint")); + if (nullptr != &val_endpoint) { endpoint = strToUInt(val_endpoint); } + const JsonVariant &val_cluster = getCaseInsensitive(json, PSTR("Cluster")); + if (nullptr != &val_cluster) { cluster = strToUInt(val_cluster); } + + // TODO compute endpoint from cluster + + SBuffer buf(sizeof(ZBS_BIND_REQ)); + buf.add8(Z_SREQ | Z_ZDO); + buf.add8(ZDO_BIND_REQ); + buf.add16(device); + buf.add64(zigbee_devices.getDeviceLongAddr(device)); + buf.add8(endpoint); + buf.add16(cluster); + buf.add8(0x03); // DstAddrMode - 0x03 = ADDRESS_64_BIT + buf.add64(localIEEEAddr); // coordinatore IEEE address + buf.add8(0x01); // local endpoint = 1 + + ZigbeeZNPSend(buf.getBuffer(), buf.len()); + + ResponseCmndDone(); +} + // Probe a specific device to get its endpoints and supported clusters -void CmndZigbeeProbe(void) { +void CmndZbProbe(void) { if (zigbee.init_phase) { ResponseCmndChar(D_ZIGBEE_NOT_STARTED); return; } uint16_t shortaddr = zigbee_devices.parseDeviceParam(XdrvMailbox.data); if (0x0000 == shortaddr) { ResponseCmndChar("Unknown device"); return; } @@ -560,7 +621,7 @@ void CmndZigbeeProbe(void) { } // Specify, read or erase a Friendly Name -void CmndZigbeeName(void) { +void CmndZbName(void) { // Syntax is: // ZigbeeName , - assign a friendly name // ZigbeeName - display the current friendly name @@ -589,7 +650,7 @@ void CmndZigbeeName(void) { } // Remove an old Zigbee device from the list of known devices, use ZigbeeStatus to know all registered devices -void CmndZigbeeForget(void) { +void CmndZbForget(void) { if (zigbee.init_phase) { ResponseCmndChar(D_ZIGBEE_NOT_STARTED); return; } uint16_t shortaddr = zigbee_devices.parseDeviceParam(XdrvMailbox.data); if (0x0000 == shortaddr) { ResponseCmndChar("Unknown device"); return; } @@ -604,7 +665,7 @@ void CmndZigbeeForget(void) { } // Save Zigbee information to flash -void CmndZigbeeSave(void) { +void CmndZbSave(void) { if (zigbee.init_phase) { ResponseCmndChar(D_ZIGBEE_NOT_STARTED); return; } saveZigbeeDevices(); @@ -613,7 +674,7 @@ void CmndZigbeeSave(void) { } // Send an attribute read command to a device, specifying cluster and list of attributes -void CmndZigbeeRead(void) { +void CmndZbRead(void) { // ZigbeeRead {"Device":"0xF289","Cluster":0,"Endpoint":3,"Attr":5} // ZigbeeRead {"Device":"0xF289","Cluster":"0x0000","Endpoint":"0x0003","Attr":"0x0005"} // ZigbeeRead {"Device":"0xF289","Cluster":0,"Endpoint":3,"Attr":[5,6,7,4]} @@ -629,10 +690,14 @@ void CmndZigbeeRead(void) { size_t attrs_len = 0; uint8_t* attrs = nullptr; // empty string is valid - const JsonVariant &val_device = getCaseInsensitive(json, PSTR("Device")); - if (nullptr != &val_device) { device = strToUInt(val_device); } - const JsonVariant val_cluster = getCaseInsensitive(json, PSTR("Cluster")); + if (nullptr != &val_device) { + device = zigbee_devices.parseDeviceParam(val_device.as()); + if (0xFFFF == device) { ResponseCmndChar("Invalid parameter"); return; } + } + if ((nullptr == &val_device) || (0x000 == device)) { ResponseCmndChar("Unknown device"); return; } + + const JsonVariant &val_cluster = getCaseInsensitive(json, PSTR("Cluster")); if (nullptr != &val_cluster) { cluster = strToUInt(val_cluster); } const JsonVariant &val_endpoint = getCaseInsensitive(json, PSTR("Endpoint")); if (nullptr != &val_endpoint) { endpoint = strToUInt(val_endpoint); } @@ -659,14 +724,18 @@ void CmndZigbeeRead(void) { } } - ZigbeeZCLSend(device, cluster, endpoint, ZCL_READ_ATTRIBUTES, false, attrs, attrs_len, false /* we do want a response */); + if ((0 != endpoint) && (attrs_len > 0)) { + ZigbeeZCLSend(device, cluster, endpoint, ZCL_READ_ATTRIBUTES, false, attrs, attrs_len, false /* we do want a response */); + ResponseCmndDone(); + } else { + ResponseCmndChar("Missing parameters"); + } if (attrs) { delete[] attrs; } - ResponseCmndDone(); } // Allow or Deny pairing of new Zigbee devices -void CmndZigbeePermitJoin(void) +void CmndZbPermitJoin(void) { if (zigbee.init_phase) { ResponseCmndChar(D_ZIGBEE_NOT_STARTED); return; } uint32_t payload = XdrvMailbox.payload; @@ -683,7 +752,7 @@ void CmndZigbeePermitJoin(void) ResponseCmndDone(); } -void CmndZigbeeStatus(void) { +void CmndZbStatus(void) { if (ZigbeeSerial) { if (zigbee.init_phase) { ResponseCmndChar(D_ZIGBEE_NOT_STARTED); return; } uint16_t shortaddr = zigbee_devices.parseDeviceParam(XdrvMailbox.data); From 97f49246397c73883d902f8ccafb67f74f5e672f Mon Sep 17 00:00:00 2001 From: Hadinger Date: Mon, 3 Feb 2020 19:41:35 +0100 Subject: [PATCH 12/25] Change update IRRemoteESP8266 v2.7.3 --- .../CPPLINT.cfg | 0 .../LICENSE.txt | 0 .../README.md | 4 +- .../README_fr.md | 4 +- .../ReleaseNotes.md | 17 + .../SupportedProtocols.md | 29 +- .../CommonAcControl/CommonAcControl.ino | 0 .../examples/CommonAcControl/platformio.ini | 0 .../ControlSamsungAC/ControlSamsungAC.ino | 0 .../examples/ControlSamsungAC/platformio.ini | 0 .../DumbIRRepeater/DumbIRRepeater.ino | 3 + .../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 | 1 + .../examples/IRMQTTServer/IRMQTTServer.ino | 2 +- .../examples/IRMQTTServer/platformio.ini | 0 .../examples/IRServer/IRServer.ino | 0 .../examples/IRServer/platformio.ini | 0 .../examples/IRrecvDemo/IRrecvDemo.ino | 1 + .../examples/IRrecvDemo/platformio.ini | 0 .../examples/IRrecvDump/IRrecvDump.ino | 0 .../examples/IRrecvDump/platformio.ini | 0 .../examples/IRrecvDumpV2/IRrecvDumpV2.ino | 1 + .../examples/IRrecvDumpV2/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 | 3 + .../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 .../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 .../Web-AC-control/Web-AC-control.ino | 0 .../examples/Web-AC-control/platformio.ini | 0 .../examples/Web-AC-control/printscreen.png | Bin .../Web-AC-control/upload/favicon.ico | Bin .../Web-AC-control/upload/level_1_off.svg | 0 .../Web-AC-control/upload/level_1_on.svg | 0 .../Web-AC-control/upload/level_2_off.svg | 0 .../Web-AC-control/upload/level_2_on.svg | 0 .../Web-AC-control/upload/level_3_off.svg | 0 .../Web-AC-control/upload/level_3_on.svg | 0 .../Web-AC-control/upload/level_4_off.svg | 0 .../Web-AC-control/upload/level_4_on.svg | 0 .../examples/Web-AC-control/upload/ui.html | 0 .../examples/Web-AC-control/upload/ui.js | 0 .../keywords.txt | 7 + .../library.json | 2 +- .../library.properties | 2 +- .../pylintrc | 0 .../src/CPPLINT.cfg | 0 .../src/IRac.cpp | 8 +- .../src/IRac.h | 3 +- .../src/IRrecv.cpp | 0 .../src/IRrecv.h | 0 .../src/IRremoteESP8266.h | 915 ++++++++++-------- .../src/IRsend.cpp | 6 + .../src/IRsend.h | 8 +- .../src/IRtext.cpp | 0 .../src/IRtext.h | 0 .../src/IRtimer.cpp | 0 .../src/IRtimer.h | 0 .../src/IRutils.cpp | 5 + .../src/IRutils.h | 0 .../src/i18n.h | 0 .../src/ir_Aiwa.cpp | 0 .../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_Coolix.cpp | 19 +- .../src/ir_Coolix.h | 0 .../src/ir_Daikin.cpp | 0 .../src/ir_Daikin.h | 0 .../src/ir_Denon.cpp | 0 .../src/ir_Dish.cpp | 0 .../src/ir_Electra.cpp | 0 .../src/ir_Electra.h | 2 + .../src/ir_Fujitsu.cpp | 0 .../src/ir_Fujitsu.h | 0 .../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 | 0 .../src/ir_Kelvinator.cpp | 0 .../src/ir_Kelvinator.h | 0 .../src/ir_LG.cpp | 0 .../src/ir_LG.h | 0 .../src/ir_Lasertag.cpp | 0 .../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_Midea.cpp | 0 .../src/ir_Midea.h | 0 .../src/ir_Mitsubishi.cpp | 0 .../src/ir_Mitsubishi.h | 0 .../src/ir_MitsubishiHeavy.cpp | 0 .../src/ir_MitsubishiHeavy.h | 0 .../src/ir_NEC.cpp | 0 .../src/ir_NEC.h | 7 +- .../src/ir_Neoclima.cpp | 0 .../src/ir_Neoclima.h | 0 .../src/ir_Nikai.cpp | 0 .../src/ir_Panasonic.cpp | 32 +- .../src/ir_Panasonic.h | 18 +- .../src/ir_Pioneer.cpp | 0 .../src/ir_Pronto.cpp | 0 .../src/ir_RC5_RC6.cpp | 0 .../src/ir_RCMM.cpp | 0 .../src/ir_Samsung.cpp | 0 .../src/ir_Samsung.h | 0 .../src/ir_Sanyo.cpp | 0 .../src/ir_Sharp.cpp | 0 .../src/ir_Sharp.h | 0 .../src/ir_Sherwood.cpp | 0 .../src/ir_Sony.cpp | 52 +- .../src/ir_Tcl.cpp | 0 .../src/ir_Tcl.h | 0 .../src/ir_Teco.cpp | 0 .../src/ir_Teco.h | 0 .../src/ir_Toshiba.cpp | 0 .../src/ir_Toshiba.h | 0 .../src/ir_Trotec.cpp | 0 .../src/ir_Trotec.h | 0 .../src/ir_Vestel.cpp | 0 .../src/ir_Vestel.h | 0 .../src/ir_Whirlpool.cpp | 0 .../src/ir_Whirlpool.h | 0 .../src/ir_Whynter.cpp | 0 .../src/locale/README.md | 0 .../src/locale/de-CH.h | 0 .../src/locale/de-DE.h | 0 .../src/locale/defaults.h | 0 .../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 .../test/IRac_test.cpp | 103 +- .../test/IRrecv_test.cpp | 72 +- .../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_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 | 292 +++--- .../test/ir_Daikin_test.cpp | 0 .../test/ir_Denon_test.cpp | 0 .../test/ir_Dish_test.cpp | 0 .../test/ir_Electra_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_Midea_test.cpp | 0 .../test/ir_MitsubishiHeavy_test.cpp | 0 .../test/ir_Mitsubishi_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 | 57 +- .../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 | 0 .../test/ir_Sherwood_test.cpp | 0 .../test/ir_Sony_test.cpp | 225 +++++ .../test/ir_Tcl_test.cpp | 0 .../test/ir_Teco_test.cpp | 0 .../test/ir_Toshiba_test.cpp | 0 .../test/ir_Trotec_test.cpp | 0 .../test/ir_Vestel_test.cpp | 0 .../test/ir_Whirlpool_test.cpp | 0 .../test/ir_Whynter_test.cpp | 0 .../tools/Makefile | 0 .../tools/RawToGlobalCache.sh | 0 .../tools/auto_analyse_raw_data.py | 26 +- .../tools/auto_analyse_raw_data_test.py | 218 +++++ .../tools/gc_decode.cpp | 0 .../tools/generate_irtext_h.sh | 0 .../tools/mkkeywords | 0 .../tools/mode2_decode.cpp | 0 .../tools/scrape_supported_devices.py | 76 +- platformio.ini | 9 + platformio_tasmota_env.ini | 4 +- tasmota/CHANGELOG.md | 1 + 241 files changed, 1504 insertions(+), 730 deletions(-) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/CPPLINT.cfg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/LICENSE.txt (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/README.md (98%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/README_fr.md (98%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/ReleaseNotes.md (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/SupportedProtocols.md (91%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/CommonAcControl/CommonAcControl.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/CommonAcControl/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/ControlSamsungAC/ControlSamsungAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/ControlSamsungAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/DumbIRRepeater/DumbIRRepeater.ino (96%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/DumbIRRepeater/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRGCSendDemo/IRGCSendDemo.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRGCSendDemo/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRGCTCPServer/IRGCTCPServer.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRGCTCPServer/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRMQTTServer/IRMQTTServer.h (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRMQTTServer/IRMQTTServer.ino (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRMQTTServer/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRServer/IRServer.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRServer/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRrecvDemo/IRrecvDemo.ino (95%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRrecvDemo/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRrecvDump/IRrecvDump.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRrecvDump/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRrecvDumpV2/IRrecvDumpV2.ino (98%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRrecvDumpV2/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRsendDemo/IRsendDemo.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRsendDemo/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRsendProntoDemo/IRsendProntoDemo.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/IRsendProntoDemo/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/JVCPanasonicSendDemo/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/LGACSend/LGACSend.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/LGACSend/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/SmartIRRepeater/SmartIRRepeater.ino (96%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/SmartIRRepeater/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnArgoAC/TurnOnArgoAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnArgoAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnDaikinAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnFujitsuAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnKelvinatorAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnMitsubishiAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnMitsubishiHeavyAc/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnPanasonicAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnToshibaAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/TurnOnTrotecAC/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/README.md (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/Web-AC-control.ino (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/platformio.ini (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/printscreen.png (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/favicon.ico (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_1_off.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_1_on.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_2_off.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_2_on.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_3_off.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_3_on.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_4_off.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/level_4_on.svg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/ui.html (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/examples/Web-AC-control/upload/ui.js (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/keywords.txt (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/library.json (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/library.properties (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/pylintrc (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/CPPLINT.cfg (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRac.cpp (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRac.h (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRrecv.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRrecv.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRremoteESP8266.h (54%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRsend.cpp (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRsend.h (98%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRtext.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRtext.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRtimer.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRtimer.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRutils.cpp (99%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/IRutils.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/i18n.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Aiwa.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Amcor.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Amcor.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Argo.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Argo.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Carrier.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Coolix.cpp (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Coolix.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Daikin.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Daikin.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Denon.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Dish.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Electra.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Electra.h (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Fujitsu.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Fujitsu.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_GICable.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_GlobalCache.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Goodweather.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Goodweather.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Gree.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Gree.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Haier.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Haier.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Hitachi.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Hitachi.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Inax.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_JVC.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Kelvinator.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Kelvinator.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_LG.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_LG.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Lasertag.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Lego.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Lutron.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_MWM.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Magiquest.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Magiquest.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Midea.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Midea.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Mitsubishi.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Mitsubishi.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_MitsubishiHeavy.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_MitsubishiHeavy.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_NEC.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_NEC.h (93%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Neoclima.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Neoclima.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Nikai.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Panasonic.cpp (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Panasonic.h (94%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Pioneer.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Pronto.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_RC5_RC6.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_RCMM.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Samsung.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Samsung.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Sanyo.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Sharp.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Sharp.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Sherwood.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Sony.cpp (74%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Tcl.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Tcl.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Teco.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Teco.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Toshiba.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Toshiba.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Trotec.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Trotec.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Vestel.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Vestel.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Whirlpool.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Whirlpool.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/ir_Whynter.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/README.md (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/de-CH.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/de-DE.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/defaults.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/en-AU.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/en-IE.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/en-UK.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/en-US.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/es-ES.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/src/locale/fr-FR.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/IRac_test.cpp (95%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/IRrecv_test.cpp (95%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/IRrecv_test.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/IRsend_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/IRsend_test.h (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/IRutils_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/Makefile (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Aiwa_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Amcor_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Argo_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Carrier_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Coolix_test.cpp (69%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Daikin_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Denon_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Dish_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Electra_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Fujitsu_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_GICable_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_GlobalCache_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Goodweather_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Gree_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Haier_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Hitachi_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Inax_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_JVC_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Kelvinator_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_LG_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Lasertag_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Lego_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Lutron_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_MWM_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Magiquest_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Midea_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_MitsubishiHeavy_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Mitsubishi_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_NEC_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Neoclima_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Nikai_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Panasonic_test.cpp (96%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Pioneer_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Pronto_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_RC5_RC6_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_RCMM_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Samsung_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Sanyo_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Sharp_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Sherwood_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Sony_test.cpp (61%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Tcl_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Teco_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Toshiba_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Trotec_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Vestel_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Whirlpool_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/test/ir_Whynter_test.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/Makefile (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/RawToGlobalCache.sh (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/auto_analyse_raw_data.py (97%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/auto_analyse_raw_data_test.py (84%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/gc_decode.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/generate_irtext_h.sh (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/mkkeywords (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/mode2_decode.cpp (100%) rename lib/{IRremoteESP8266-2.7.2 => IRremoteESP8266-2.7.3}/tools/scrape_supported_devices.py (76%) diff --git a/lib/IRremoteESP8266-2.7.2/CPPLINT.cfg b/lib/IRremoteESP8266-2.7.3/CPPLINT.cfg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/CPPLINT.cfg rename to lib/IRremoteESP8266-2.7.3/CPPLINT.cfg diff --git a/lib/IRremoteESP8266-2.7.2/LICENSE.txt b/lib/IRremoteESP8266-2.7.3/LICENSE.txt similarity index 100% rename from lib/IRremoteESP8266-2.7.2/LICENSE.txt rename to lib/IRremoteESP8266-2.7.3/LICENSE.txt diff --git a/lib/IRremoteESP8266-2.7.2/README.md b/lib/IRremoteESP8266-2.7.3/README.md similarity index 98% rename from lib/IRremoteESP8266-2.7.2/README.md rename to lib/IRremoteESP8266-2.7.3/README.md index 18066c612..9ca606af8 100644 --- a/lib/IRremoteESP8266-2.7.2/README.md +++ b/lib/IRremoteESP8266-2.7.3/README.md @@ -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.2 Now Available -Version 2.7.2 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.3 Now Available +Version 2.7.3 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/IRremoteESP8266-2.7.2/README_fr.md b/lib/IRremoteESP8266-2.7.3/README_fr.md similarity index 98% rename from lib/IRremoteESP8266-2.7.2/README_fr.md rename to lib/IRremoteESP8266-2.7.3/README_fr.md index 8dad47961..ca31b3b7b 100644 --- a/lib/IRremoteESP8266-2.7.2/README_fr.md +++ b/lib/IRremoteESP8266-2.7.3/README_fr.md @@ -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.2 disponible -Version 2.7.2 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.3 disponible +Version 2.7.3 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/IRremoteESP8266-2.7.2/ReleaseNotes.md b/lib/IRremoteESP8266-2.7.3/ReleaseNotes.md similarity index 97% rename from lib/IRremoteESP8266-2.7.2/ReleaseNotes.md rename to lib/IRremoteESP8266-2.7.3/ReleaseNotes.md index 04dee7b81..a7218fc07 100644 --- a/lib/IRremoteESP8266-2.7.2/ReleaseNotes.md +++ b/lib/IRremoteESP8266-2.7.3/ReleaseNotes.md @@ -1,5 +1,22 @@ # Release Notes +## _v2.7.3 (20200130)_ + +**[Features]** +- Allow protocols to be enabled or disabled with compiler flags. (#1013, #1012) +- Panasonic AC: Add Ion Filter support for DKE models. (#1025, #1024) +- Add support for sending Sony at 38Khz (#1029, #1018, #1019) +- auto_analyse_raw_data.py: Handle analysing messages with no headers. (#1017) + +**[Misc]** +- Fix Coolix unit test errors when using Apple c++ compiler. (#1030, #1028) +- Fix Apple clang c++ compiler error in unit tests. (#1027, #1026) +- Improve/fix scraping of supported devices (#1022) +- Panasonic PKR series A/C uses DKE protocol. (#1020, #1021) +- Update NEC supported devices. (#1018) +- Add note to avoid GPIO16 on the ESP8266 for receiving. (#1016, #1015) + + ## _v2.7.2 (20200106)_ **[Bug Fixes]** diff --git a/lib/IRremoteESP8266-2.7.2/SupportedProtocols.md b/lib/IRremoteESP8266-2.7.3/SupportedProtocols.md similarity index 91% rename from lib/IRremoteESP8266-2.7.2/SupportedProtocols.md rename to lib/IRremoteESP8266-2.7.3/SupportedProtocols.md index 440fe8e20..c9b2f85c7 100644 --- a/lib/IRremoteESP8266-2.7.2/SupportedProtocols.md +++ b/lib/IRremoteESP8266-2.7.3/SupportedProtocols.md @@ -1,6 +1,6 @@ + Last generated: Thu Jan 30 20:05:33 2020 ---> # IR Protocols supported by this library | Protocol | Brand | Model | A/C Model | Detailed A/C Support | @@ -11,20 +11,20 @@ | [Carrier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Carrier.cpp) | **Carrier/Surrey** | 42QG5A55970 remote
53NGK009/012 Inverter
619EGX0090E0 A/C
619EGX0120E0 A/C
619EGX0180E0 A/C
619EGX0220E0 A/C | | - | | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Beko](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | BINR 070/071 split-type A/C
BINR 070/071 split-type A/C
RG57K7(B)/BGEF Remote
RG57K7(B)/BGEF Remote | | Yes | | [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Midea](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | MS12FU-10HRDN1-QRD0GW(B) A/C
MS12FU-10HRDN1-QRD0GW(B) A/C
MSABAU-07HRFN1-QRD0GW A/C (circa 2016)
MSABAU-07HRFN1-QRD0GW A/C (circa 2016)
RG52D/BGE Remote
RG52D/BGE Remote | | Yes | -| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Tokio](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | AATOEMF17-12CHR1SW split-type RG51|50/BGE Remote
AATOEMF17-12CHR1SW split-type RG51|50/BGE Remote | | Yes | +| [Coolix](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.cpp) | **[Tokio](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Coolix.h)** | AATOEMF17-12CHR1SW split-type RG51\|50/BGE Remote
AATOEMF17-12CHR1SW split-type RG51\|50/BGE Remote | | Yes | | [Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.cpp) | **[Daikin](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Daikin.h)** | 17 Series A/C (DAIKIN128)
ARC423A5 remote
ARC433** remote
ARC433B69 remote
ARC477A1 remote
ARC480A5 remote (DAIKIN152)
BRC4C153 remote
BRC52B63 remote (DAIKIN128)
FTE12HV2S A/C
FTXB09AXVJU A/C (DAIKIN128)
FTXB12AXVJU A/C (DAIKIN128)
FTXZ25NV1B A/C
FTXZ35NV1B A/C
FTXZ50NV1B A/C | | Yes | | [Denon](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Denon.cpp) | **Unknown** | | | - | | [Dish](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Dish.cpp) | **DISH NETWORK** | echostar 301 | | - | | [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 | -| [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
AR-DB1 remote
AR-DL10 remote
AR-RAC1E remote
AR-RAE1E remote
AR-RAH2E remote
AR-REB1E remote
AR-RY4 remote
AST9RSGCW A/C
ASTB09LBC A/C
ASU30C1 A/C
ASYG30LFCA A/C
ASYG7LMCA A/C | | 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)** | AR-JW2 remote | | 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
AR-DB1 remote
AR-DL10 remote
AR-RAC1E remote
AR-RAE1E remote
AR-RAH2E remote
AR-REB1E remote
AR-RY4 remote
AST9RSGCW A/C
ASTB09LBC A/C
ASU30C1 A/C
ASYG30LFCA A/C
ASYG7LMCA A/C | 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)** | AR-JW2 remote | ARDB1
ARJW2
ARRAH2E
ARREB1E
ARRY4 | Yes | | [GICable](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GICable.cpp) | **Unknown** | | | - | | [GlobalCache](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_GlobalCache.cpp) | **Unknown** | | | - | | [Goodweather](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Goodweather.cpp) | **[Goodweather](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Goodweather.h)** | ZH/JT-03 remote | | Yes | -| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[EKOKAI](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | A/C | | Yes | -| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | YBOFB remote
YBOFB2 remote | | Yes | -| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[RusClimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | EACS/I-09HAR_X/N3 A/C
YAW1F remote | | Yes | -| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Ultimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | Heat Pump | | Yes | +| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[EKOKAI](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | A/C | YAW1F
YBOFB | Yes | +| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Green](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | YBOFB remote
YBOFB2 remote | YAW1F
YBOFB | Yes | +| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[RusClimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | EACS/I-09HAR_X/N3 A/C
YAW1F remote | YAW1F
YBOFB | Yes | +| [Gree](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.cpp) | **[Ultimate](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Gree.h)** | Heat Pump | YAW1F
YBOFB | Yes | | [Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.cpp) | **[Haier](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Haier.h)** | HSU-09HMC203 A/C
HSU07-HEA03 remote
YR-W02 remote | | Yes | | [Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.cpp) | **[Hitachi](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Hitachi.h)** | LT0541-HTA remote
RAR-8P2 remote
RAS-35THA6 remote
RAS-AJ25H A/C
Series VI A/C (Circa 2007) | | Yes | | [Inax](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Inax.cpp) | **Lixil** | Inax DT-BA283 Toilet | | - | @@ -45,10 +45,11 @@ | [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
KPOA remote
MSH-A24WV / MUH-A24WV A/C
PEAD-RP71JAA Ducted A/C | | 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
RLA502A700B remote
SRKxxZJ-S A/C
SRKxxZM-S A/C
SRKxxZMXA-S A/C | | Yes | | [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 | | - | +| [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | 42TL838 LCD TV | | - | | [NEC](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.cpp) | **[Yamaha](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_NEC.h)** | RAV561 remote
RXV585B A/V Receiver | | - | | [Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.cpp) | **[Neoclima](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Neoclima.h)** | NS-09AHTI A/C
NS-09AHTI A/C
ZH/TY-01 remote
ZH/TY-01 remote | | Yes | | [Nikai](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Nikai.cpp) | **Unknown** | | | - | -| [Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.cpp) | **[Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.h)** | A75C2311 remote (CKP)
A75C3704 remote
A75C3747 remote
A75C3747 remote
A75C3747 remote
A75C3747 remote
CKP series A/C
CS-ME10CKPG A/C
CS-ME12CKPG A/C
CS-ME14CKPG A/C
CS-YW9MKD A/C
CS-Z9RKR A/C
DKE series A/C
JKE series A/C
NKE series A/C
RKR series A/C
TV | | Yes | +| [Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.cpp) | **[Panasonic](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Panasonic.h)** | A75C2311 remote (CKP)
A75C2616-1 remote (DKE)
A75C3704 remote
A75C3747 remote
CKP series A/C
CS-E7PKR A/C (DKE)
CS-ME10CKPG A/C
CS-ME12CKPG A/C
CS-ME14CKPG A/C
CS-YW9MKD A/C
CS-Z9RKR A/C
DKE series A/C
DKW series A/C (DKE)
JKE series A/C
NKE series A/C
PKR series A/C (DKE)
RKR series A/C
TV | CKP
DKE
JKE
LKE
NKE
RKR | Yes | | [Pioneer](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Pioneer.cpp) | **Unknown** | | | - | | [Pronto](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Pronto.cpp) | **Unknown** | | | - | | [RC5_RC6](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_RC5_RC6.cpp) | **Unknown** | | | - | @@ -57,24 +58,23 @@ | [Sanyo](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sanyo.cpp) | **Unknown** | | | - | | [Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.cpp) | **[Sharp](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sharp.h)** | AY-ZP40KR A/C
LC-52D62U TV | | 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) | **Unknown** | | | - | +| [Sony](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Sony.cpp) | **Sony** | HT-CT380 Soundbar (Uses 38kHz & 3 repeats) | | - | | [Tcl](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.cpp) | **[Leberg](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Tcl.h)** | LBS-TOR07 A/C | | Yes | | [Teco](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teco.cpp) | **[Alaska](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Teco.h)** | SAC9010QC A/C
SAC9010QC remote | | Yes | | [Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.cpp) | **[Toshiba](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Toshiba.h)** | Akita EVO II
RAS 18SKP-ES
RAS-B13N3KV2
RAS-B13N3KVP-E
WC-L03SE
WH-TA04NE | | Yes | | [Trotec](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.cpp) | **[Unknown](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Trotec.h)** | | | Yes | | [Vestel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Vestel.cpp) | **[Vestel](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Vestel.h)** | BIOX CXP-9 A/C (9K BTU) | | Yes | -| [Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.cpp) | **[Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.h)** | DG11J1-04 remote
DG11J1-3A remote
DG11J1-91 remote
SPIS409L A/C
SPIS412L A/C
SPIW409L A/C
SPIW412L A/C
SPIW418L A/C | | Yes | +| [Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.cpp) | **[Whirlpool](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whirlpool.h)** | DG11J1-04 remote
DG11J1-3A remote
DG11J1-91 remote
SPIS409L A/C
SPIS412L A/C
SPIW409L A/C
SPIW412L A/C
SPIW418L A/C | DG11J13A
DG11J191 | Yes | | [Whynter](https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_Whynter.cpp) | **Whynter** | ARC-110WD A/C | | - | ## Send only protocols: - GLOBALCACHE -- MITSUBISHI112 - PRONTO - RAW - SHERWOOD -- TCL112AC +- SONY_38K ## Send & decodable protocols: @@ -115,6 +115,7 @@ - MAGIQUEST - MIDEA - MITSUBISHI +- MITSUBISHI112 - MITSUBISHI136 - MITSUBISHI2 - MITSUBISHI_AC @@ -140,10 +141,10 @@ - SHARP - SHARP_AC - SONY +- TCL112AC - TECO - TOSHIBA_AC - TROTEC - VESTEL_AC - WHIRLPOOL_AC - WHYNTER -- typeguess diff --git a/lib/IRremoteESP8266-2.7.2/examples/CommonAcControl/CommonAcControl.ino b/lib/IRremoteESP8266-2.7.3/examples/CommonAcControl/CommonAcControl.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/CommonAcControl/CommonAcControl.ino rename to lib/IRremoteESP8266-2.7.3/examples/CommonAcControl/CommonAcControl.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/CommonAcControl/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/CommonAcControl/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/CommonAcControl/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/CommonAcControl/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/ControlSamsungAC/ControlSamsungAC.ino b/lib/IRremoteESP8266-2.7.3/examples/ControlSamsungAC/ControlSamsungAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/ControlSamsungAC/ControlSamsungAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/ControlSamsungAC/ControlSamsungAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/ControlSamsungAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/ControlSamsungAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/ControlSamsungAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/ControlSamsungAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/DumbIRRepeater/DumbIRRepeater.ino b/lib/IRremoteESP8266-2.7.3/examples/DumbIRRepeater/DumbIRRepeater.ino similarity index 96% rename from lib/IRremoteESP8266-2.7.2/examples/DumbIRRepeater/DumbIRRepeater.ino rename to lib/IRremoteESP8266-2.7.3/examples/DumbIRRepeater/DumbIRRepeater.ino index 80f5ce64a..d3ddbdb6a 100644 --- a/lib/IRremoteESP8266-2.7.2/examples/DumbIRRepeater/DumbIRRepeater.ino +++ b/lib/IRremoteESP8266-2.7.3/examples/DumbIRRepeater/DumbIRRepeater.ino @@ -37,6 +37,8 @@ * * Pin 0/D3: Can interfere with the boot/program mode & support circuits. * * Pin 1/TX/TXD0: Any serial transmissions from the ESP will interfere. * * Pin 3/RX/RXD0: Any serial transmissions to the ESP will interfere. + * * Pin 16/D0: Has no interrupts on the ESP8266, so can't be used for IR + * receiving with this library. * * ESP-01 modules are tricky. We suggest you use a module with more GPIOs * for your first time. e.g. ESP-12 etc. * @@ -54,6 +56,7 @@ // ==================== start of TUNEABLE PARAMETERS ==================== // The GPIO an IR detector/demodulator is connected to. Recommended: 14 (D5) +// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts. const uint16_t kRecvPin = 14; // GPIO to use to control the IR LED circuit. Recommended: 4 (D2). diff --git a/lib/IRremoteESP8266-2.7.2/examples/DumbIRRepeater/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/DumbIRRepeater/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/DumbIRRepeater/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/DumbIRRepeater/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRGCSendDemo/IRGCSendDemo.ino b/lib/IRremoteESP8266-2.7.3/examples/IRGCSendDemo/IRGCSendDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRGCSendDemo/IRGCSendDemo.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRGCSendDemo/IRGCSendDemo.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRGCSendDemo/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRGCSendDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRGCSendDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRGCSendDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRGCTCPServer/IRGCTCPServer.ino b/lib/IRremoteESP8266-2.7.3/examples/IRGCTCPServer/IRGCTCPServer.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRGCTCPServer/IRGCTCPServer.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRGCTCPServer/IRGCTCPServer.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRGCTCPServer/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRGCTCPServer/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRGCTCPServer/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRGCTCPServer/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/IRMQTTServer.h b/lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/IRMQTTServer.h similarity index 99% rename from lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/IRMQTTServer.h rename to lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/IRMQTTServer.h index c9d4898b9..0693a4908 100644 --- a/lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/IRMQTTServer.h +++ b/lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/IRMQTTServer.h @@ -47,6 +47,7 @@ const int8_t kDefaultIrLed = 4; // <=- CHANGE_ME (optional) const bool kInvertTxOutput = false; // Default GPIO the IR demodulator is connected to/controlled by. GPIO 14 = D5. +// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts. const int8_t kDefaultIrRx = 14; // <=- CHANGE_ME (optional) // Enable/disable receiving/decoding IR messages entirely. diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/IRMQTTServer.ino b/lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/IRMQTTServer.ino similarity index 99% rename from lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/IRMQTTServer.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/IRMQTTServer.ino index dfb1aa044..1824c660a 100644 --- a/lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/IRMQTTServer.ino +++ b/lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/IRMQTTServer.ino @@ -271,7 +271,7 @@ * * #### Home Assistant MQTT Discovery * There is an option for this: 'Send MQTT Discovery' under the 'Admin' menu. - * It will produce a single MQTT Cliamte Discovery message for Home Assistant + * It will produce a single MQTT Climate Discovery message for Home Assistant * provided you have everything configured correctly here and in HA. * This message has MQTT RETAIN set on it, so it only ever needs to be sent * once or if the config details change etc. diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRMQTTServer/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRMQTTServer/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRServer/IRServer.ino b/lib/IRremoteESP8266-2.7.3/examples/IRServer/IRServer.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRServer/IRServer.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRServer/IRServer.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRServer/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRServer/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRServer/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRServer/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDemo/IRrecvDemo.ino b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDemo/IRrecvDemo.ino similarity index 95% rename from lib/IRremoteESP8266-2.7.2/examples/IRrecvDemo/IRrecvDemo.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRrecvDemo/IRrecvDemo.ino index 5fd03f4b4..945f94055 100644 --- a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDemo/IRrecvDemo.ino +++ b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDemo/IRrecvDemo.ino @@ -23,6 +23,7 @@ // An IR detector/demodulator is connected to GPIO pin 14(D5 on a NodeMCU // board). +// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts. const uint16_t kRecvPin = 14; IRrecv irrecv(kRecvPin); diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDemo/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRrecvDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRrecvDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDump/IRrecvDump.ino b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDump/IRrecvDump.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRrecvDump/IRrecvDump.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRrecvDump/IRrecvDump.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDump/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDump/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRrecvDump/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRrecvDump/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDumpV2/IRrecvDumpV2.ino b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDumpV2/IRrecvDumpV2.ino similarity index 98% rename from lib/IRremoteESP8266-2.7.2/examples/IRrecvDumpV2/IRrecvDumpV2.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRrecvDumpV2/IRrecvDumpV2.ino index fc61f9b84..beed6c746 100644 --- a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDumpV2/IRrecvDumpV2.ino +++ b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDumpV2/IRrecvDumpV2.ino @@ -34,6 +34,7 @@ // ==================== start of TUNEABLE PARAMETERS ==================== // An IR detector/demodulator is connected to GPIO pin 14 // e.g. D5 on a NodeMCU board. +// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts. const uint16_t kRecvPin = 14; // The Serial connection baud rate. diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRrecvDumpV2/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRrecvDumpV2/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRrecvDumpV2/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRrecvDumpV2/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRsendDemo/IRsendDemo.ino b/lib/IRremoteESP8266-2.7.3/examples/IRsendDemo/IRsendDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRsendDemo/IRsendDemo.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRsendDemo/IRsendDemo.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRsendDemo/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRsendDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRsendDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRsendDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRsendProntoDemo/IRsendProntoDemo.ino b/lib/IRremoteESP8266-2.7.3/examples/IRsendProntoDemo/IRsendProntoDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRsendProntoDemo/IRsendProntoDemo.ino rename to lib/IRremoteESP8266-2.7.3/examples/IRsendProntoDemo/IRsendProntoDemo.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/IRsendProntoDemo/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/IRsendProntoDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/IRsendProntoDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/IRsendProntoDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino b/lib/IRremoteESP8266-2.7.3/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino rename to lib/IRremoteESP8266-2.7.3/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/JVCPanasonicSendDemo/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/JVCPanasonicSendDemo/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/JVCPanasonicSendDemo/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/JVCPanasonicSendDemo/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/LGACSend/LGACSend.ino b/lib/IRremoteESP8266-2.7.3/examples/LGACSend/LGACSend.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/LGACSend/LGACSend.ino rename to lib/IRremoteESP8266-2.7.3/examples/LGACSend/LGACSend.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/LGACSend/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/LGACSend/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/LGACSend/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/LGACSend/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/SmartIRRepeater/SmartIRRepeater.ino b/lib/IRremoteESP8266-2.7.3/examples/SmartIRRepeater/SmartIRRepeater.ino similarity index 96% rename from lib/IRremoteESP8266-2.7.2/examples/SmartIRRepeater/SmartIRRepeater.ino rename to lib/IRremoteESP8266-2.7.3/examples/SmartIRRepeater/SmartIRRepeater.ino index 8dd202382..576abb516 100644 --- a/lib/IRremoteESP8266-2.7.2/examples/SmartIRRepeater/SmartIRRepeater.ino +++ b/lib/IRremoteESP8266-2.7.3/examples/SmartIRRepeater/SmartIRRepeater.ino @@ -40,6 +40,8 @@ * * Pin 0/D3: Can interfere with the boot/program mode & support circuits. * * Pin 1/TX/TXD0: Any serial transmissions from the ESP will interfere. * * Pin 3/RX/RXD0: Any serial transmissions to the ESP will interfere. + * * Pin 16/D0: Has no interrupts on the ESP8266, so can't be used for IR + * receiving with this library. * * ESP-01 modules are tricky. We suggest you use a module with more GPIOs * for your first time. e.g. ESP-12 etc. * @@ -57,6 +59,7 @@ // ==================== start of TUNEABLE PARAMETERS ==================== // The GPIO an IR detector/demodulator is connected to. Recommended: 14 (D5) +// Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts. const uint16_t kRecvPin = 14; // GPIO to use to control the IR LED circuit. Recommended: 4 (D2). diff --git a/lib/IRremoteESP8266-2.7.2/examples/SmartIRRepeater/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/SmartIRRepeater/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/SmartIRRepeater/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/SmartIRRepeater/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnArgoAC/TurnOnArgoAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnArgoAC/TurnOnArgoAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnArgoAC/TurnOnArgoAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnArgoAC/TurnOnArgoAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnArgoAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnArgoAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnArgoAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnArgoAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnDaikinAC/TurnOnDaikinAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnDaikinAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnDaikinAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnDaikinAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnDaikinAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnFujitsuAC/TurnOnFujitsuAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnFujitsuAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnFujitsuAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnFujitsuAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnFujitsuAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnKelvinatorAC/TurnOnKelvinatorAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnKelvinatorAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnKelvinatorAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnKelvinatorAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnKelvinatorAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiAC/TurnOnMitsubishiAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiHeavyAc/TurnOnMitsubishiHeavyAc.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiHeavyAc/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiHeavyAc/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnMitsubishiHeavyAc/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnMitsubishiHeavyAc/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnPanasonicAC/TurnOnPanasonicAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnPanasonicAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnPanasonicAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnPanasonicAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnPanasonicAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnToshibaAC/TurnOnToshibaAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnToshibaAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnToshibaAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnToshibaAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnToshibaAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino b/lib/IRremoteESP8266-2.7.3/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnTrotecAC/TurnOnTrotecAC.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/TurnOnTrotecAC/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/TurnOnTrotecAC/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/TurnOnTrotecAC/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/TurnOnTrotecAC/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/README.md b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/README.md similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/README.md rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/README.md diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/Web-AC-control.ino b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/Web-AC-control.ino similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/Web-AC-control.ino rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/Web-AC-control.ino diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/platformio.ini b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/platformio.ini similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/platformio.ini rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/platformio.ini diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/printscreen.png b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/printscreen.png similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/printscreen.png rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/printscreen.png diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/favicon.ico b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/favicon.ico similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/favicon.ico rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/favicon.ico diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_1_off.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_1_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_1_off.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_1_off.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_1_on.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_1_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_1_on.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_1_on.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_2_off.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_2_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_2_off.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_2_off.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_2_on.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_2_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_2_on.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_2_on.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_3_off.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_3_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_3_off.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_3_off.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_3_on.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_3_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_3_on.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_3_on.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_4_off.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_4_off.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_4_off.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_4_off.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_4_on.svg b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_4_on.svg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/level_4_on.svg rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/level_4_on.svg diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/ui.html b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/ui.html similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/ui.html rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/ui.html diff --git a/lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/ui.js b/lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/ui.js similarity index 100% rename from lib/IRremoteESP8266-2.7.2/examples/Web-AC-control/upload/ui.js rename to lib/IRremoteESP8266-2.7.3/examples/Web-AC-control/upload/ui.js diff --git a/lib/IRremoteESP8266-2.7.2/keywords.txt b/lib/IRremoteESP8266-2.7.3/keywords.txt similarity index 99% rename from lib/IRremoteESP8266-2.7.2/keywords.txt rename to lib/IRremoteESP8266-2.7.3/keywords.txt index 2c8018ea6..65b0d8b2e 100644 --- a/lib/IRremoteESP8266-2.7.2/keywords.txt +++ b/lib/IRremoteESP8266-2.7.3/keywords.txt @@ -84,6 +84,7 @@ _delayMicroseconds KEYWORD2 _getTime KEYWORD2 _getTimer KEYWORD2 _matchGeneric KEYWORD2 +_sendSony KEYWORD2 _setMode KEYWORD2 _setTemp KEYWORD2 _setTime KEYWORD2 @@ -459,6 +460,7 @@ sendSharpAc KEYWORD2 sendSharpRaw KEYWORD2 sendSherwood KEYWORD2 sendSony KEYWORD2 +sendSony38 KEYWORD2 sendTcl112Ac KEYWORD2 sendTeco KEYWORD2 sendToshibaAC KEYWORD2 @@ -1024,6 +1026,7 @@ SONY LITERAL1 SONY_12_BITS LITERAL1 SONY_15_BITS LITERAL1 SONY_20_BITS LITERAL1 +SONY_38K LITERAL1 TCL112AC LITERAL1 TECO LITERAL1 TIMEOUT_MS LITERAL1 @@ -2606,6 +2609,8 @@ kPanasonicAcFanMed LITERAL1 kPanasonicAcFanMin LITERAL1 kPanasonicAcFanModeTemp LITERAL1 kPanasonicAcHeat LITERAL1 +kPanasonicAcIonFilterByte LITERAL1 +kPanasonicAcIonFilterOffset LITERAL1 kPanasonicAcMaxTemp LITERAL1 kPanasonicAcMessageGap LITERAL1 kPanasonicAcMinTemp LITERAL1 @@ -2896,6 +2901,7 @@ kSlowStr LITERAL1 kSony12Bits LITERAL1 kSony15Bits LITERAL1 kSony20Bits LITERAL1 +kSonyAltFreq LITERAL1 kSonyHdrMark LITERAL1 kSonyHdrMarkTicks LITERAL1 kSonyMinBits LITERAL1 @@ -2908,6 +2914,7 @@ kSonyRptLength LITERAL1 kSonyRptLengthTicks LITERAL1 kSonySpace LITERAL1 kSonySpaceTicks LITERAL1 +kSonyStdFreq LITERAL1 kSonyTick LITERAL1 kSonyZeroMark LITERAL1 kSonyZeroMarkTicks LITERAL1 diff --git a/lib/IRremoteESP8266-2.7.2/library.json b/lib/IRremoteESP8266-2.7.3/library.json similarity index 97% rename from lib/IRremoteESP8266-2.7.2/library.json rename to lib/IRremoteESP8266-2.7.3/library.json index 4ade0fa6b..b28b1b218 100644 --- a/lib/IRremoteESP8266-2.7.2/library.json +++ b/lib/IRremoteESP8266-2.7.3/library.json @@ -1,6 +1,6 @@ { "name": "IRremoteESP8266", - "version": "2.7.2", + "version": "2.7.3", "keywords": "infrared, ir, remote, esp8266, esp32", "description": "Send and receive infrared signals with multiple protocols (ESP8266/ESP32)", "repository": diff --git a/lib/IRremoteESP8266-2.7.2/library.properties b/lib/IRremoteESP8266-2.7.3/library.properties similarity index 97% rename from lib/IRremoteESP8266-2.7.2/library.properties rename to lib/IRremoteESP8266-2.7.3/library.properties index b5d866c3d..b22e7f8cc 100644 --- a/lib/IRremoteESP8266-2.7.2/library.properties +++ b/lib/IRremoteESP8266-2.7.3/library.properties @@ -1,5 +1,5 @@ name=IRremoteESP8266 -version=2.7.2 +version=2.7.3 author=David Conran, Sebastien Warin, Mark Szabo, Ken Shirriff maintainer=Mark Szabo, David Conran, Sebastien Warin, Roi Dayan, Massimiliano Pinto sentence=Send and receive infrared signals with multiple protocols (ESP8266/ESP32) diff --git a/lib/IRremoteESP8266-2.7.2/pylintrc b/lib/IRremoteESP8266-2.7.3/pylintrc similarity index 100% rename from lib/IRremoteESP8266-2.7.2/pylintrc rename to lib/IRremoteESP8266-2.7.3/pylintrc diff --git a/lib/IRremoteESP8266-2.7.2/src/CPPLINT.cfg b/lib/IRremoteESP8266-2.7.3/src/CPPLINT.cfg similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/CPPLINT.cfg rename to lib/IRremoteESP8266-2.7.3/src/CPPLINT.cfg diff --git a/lib/IRremoteESP8266-2.7.2/src/IRac.cpp b/lib/IRremoteESP8266-2.7.3/src/IRac.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.2/src/IRac.cpp rename to lib/IRremoteESP8266-2.7.3/src/IRac.cpp index 5cb56b974..7b8b0f378 100644 --- a/lib/IRremoteESP8266-2.7.2/src/IRac.cpp +++ b/lib/IRremoteESP8266-2.7.3/src/IRac.cpp @@ -940,7 +940,8 @@ void IRac::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 int16_t clock) { + const bool quiet, const bool turbo, const bool filter, + const int16_t clock) { ac->begin(); ac->setModel(model); ac->setPower(on); @@ -951,9 +952,9 @@ void IRac::panasonic(IRPanasonicAc *ac, const panasonic_ac_remote_model_t model, ac->setSwingHorizontal(ac->convertSwingH(swingh)); ac->setQuiet(quiet); ac->setPowerful(turbo); + ac->setIon(filter); // No Light setting available. // No Econo setting available. - // No Filter setting available. // No Clean setting available. // No Beep setting available. // No Sleep setting available. @@ -1799,7 +1800,8 @@ int16_t IRac::strToModel(const char *str, const int16_t def) { return panasonic_ac_remote_model_t::kPanasonicLke; } else if (!strcasecmp(str, "NKE") || !strcasecmp(str, "PANASONICNKE")) { return panasonic_ac_remote_model_t::kPanasonicNke; - } else if (!strcasecmp(str, "DKE") || !strcasecmp(str, "PANASONICDKE")) { + } else if (!strcasecmp(str, "DKE") || !strcasecmp(str, "PANASONICDKE") || + !strcasecmp(str, "PKR") || !strcasecmp(str, "PANASONICPKR")) { return panasonic_ac_remote_model_t::kPanasonicDke; } else if (!strcasecmp(str, "JKE") || !strcasecmp(str, "PANASONICJKE")) { return panasonic_ac_remote_model_t::kPanasonicJke; diff --git a/lib/IRremoteESP8266-2.7.2/src/IRac.h b/lib/IRremoteESP8266-2.7.3/src/IRac.h similarity index 99% rename from lib/IRremoteESP8266-2.7.2/src/IRac.h rename to lib/IRremoteESP8266-2.7.3/src/IRac.h index 0f49943e4..4945bfac9 100644 --- a/lib/IRremoteESP8266-2.7.2/src/IRac.h +++ b/lib/IRremoteESP8266-2.7.3/src/IRac.h @@ -292,7 +292,8 @@ 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 quiet, const bool turbo, const int16_t clock = -1); + const bool quiet, const bool turbo, const bool filter, + const int16_t clock = -1); #endif // SEND_PANASONIC_AC #if SEND_SAMSUNG_AC void samsung(IRSamsungAc *ac, diff --git a/lib/IRremoteESP8266-2.7.2/src/IRrecv.cpp b/lib/IRremoteESP8266-2.7.3/src/IRrecv.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRrecv.cpp rename to lib/IRremoteESP8266-2.7.3/src/IRrecv.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/IRrecv.h b/lib/IRremoteESP8266-2.7.3/src/IRrecv.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRrecv.h rename to lib/IRremoteESP8266-2.7.3/src/IRrecv.h diff --git a/lib/IRremoteESP8266-2.7.2/src/IRremoteESP8266.h b/lib/IRremoteESP8266-2.7.3/src/IRremoteESP8266.h similarity index 54% rename from lib/IRremoteESP8266-2.7.2/src/IRremoteESP8266.h rename to lib/IRremoteESP8266-2.7.3/src/IRremoteESP8266.h index 856ec880a..eb8a67f5c 100644 --- a/lib/IRremoteESP8266-2.7.2/src/IRremoteESP8266.h +++ b/lib/IRremoteESP8266-2.7.3/src/IRremoteESP8266.h @@ -52,428 +52,518 @@ #endif // UNIT_TEST // Library Version -#define _IRREMOTEESP8266_VERSION_ "2.7.2" +#define _IRREMOTEESP8266_VERSION_ "2.7.3" // Set the language & locale for the library. See the `locale` dir for options. #ifndef _IR_LOCALE_ #define _IR_LOCALE_ en-AU #endif // _IR_LOCALE_ +// Do we enable all the protocols by default (true), or disable them (false)? +// This allows users of the library to disable or enable all protocols at +// compile-time with `-D_IR_ENABLE_DEFAULT_=true` or +// `-D_IR_ENABLE_DEFAULT_=false` compiler flags respectively. +// Everything is included by default. +// e.g. If you only want to enable use of he NEC protocol to save program space, +// you would use something like: +// `-D_IR_ENABLE_DEFAULT_=false -DDECODE_NEC=true -DSEND_NEC=true` +// +// or alter your 'platform.ini' file accordingly: +// ``` +// build_flags = -D_IR_ENABLE_DEFAULT_=false +// -DDECODE_NEC=true +// -DSEND_NEC=true +// ``` +// If you want to enable support for every protocol *except* _decoding_ the +// Kelvinator protocol, you would use: +// `-DDECODE_KELVINATOR=false` +#ifndef _IR_ENABLE_DEFAULT_ +#define _IR_ENABLE_DEFAULT_ true // Unless set externally, the default is on. +#endif // _IR_ENABLE_DEFAULT_ + // Supported IR protocols // Each protocol you include costs memory and, during decode, costs time // Disable (set to false) all the protocols you do not need/want! // The Air Conditioner protocols are the most expensive memory-wise. // -#ifdef USE_IR_REMOTE_FULL // full IR protocols -#define DECODE_HASH true // Semi-unique code for unknown messages - -#define SEND_RAW true - -#define DECODE_NEC true -#define SEND_NEC true - -#define DECODE_SHERWOOD true // Doesn't exist. Actually is DECODE_NEC -#define SEND_SHERWOOD true - -#define DECODE_RC5 true -#define SEND_RC5 true - -#define DECODE_RC6 true -#define SEND_RC6 true - -#define DECODE_RCMM true -#define SEND_RCMM true - -#define DECODE_SONY true -#define SEND_SONY true - -#define DECODE_PANASONIC true -#define SEND_PANASONIC true - -#define DECODE_JVC true -#define SEND_JVC true - -#define DECODE_SAMSUNG true -#define SEND_SAMSUNG true - -#define DECODE_SAMSUNG36 true -#define SEND_SAMSUNG36 true - -#define DECODE_SAMSUNG_AC true -#define SEND_SAMSUNG_AC true - -#define DECODE_WHYNTER true -#define SEND_WHYNTER true - -#define DECODE_AIWA_RC_T501 true -#define SEND_AIWA_RC_T501 true - -#define DECODE_LG true -#define SEND_LG true - -#define DECODE_SANYO true -#define SEND_SANYO true - -#define DECODE_MITSUBISHI true -#define SEND_MITSUBISHI true - -#define DECODE_MITSUBISHI2 true -#define SEND_MITSUBISHI2 true - -#define DECODE_DISH true -#define SEND_DISH true - -#define DECODE_SHARP true -#define SEND_SHARP true - -#define DECODE_SHARP_AC true -#define SEND_SHARP_AC true - -#define DECODE_DENON true -#define SEND_DENON true - -#define DECODE_KELVINATOR true -#define SEND_KELVINATOR true - -#define DECODE_MITSUBISHI_AC true // Beta. -#define SEND_MITSUBISHI_AC true - -#define DECODE_MITSUBISHI136 true -#define SEND_MITSUBISHI136 true - -#define DECODE_MITSUBISHI112 true -#define SEND_MITSUBISHI112 true - -#define DECODE_FUJITSU_AC true -#define SEND_FUJITSU_AC true - -#define DECODE_INAX true -#define SEND_INAX true - -#define DECODE_DAIKIN true -#define SEND_DAIKIN true - -#define DECODE_COOLIX true -#define SEND_COOLIX true - -#define DECODE_GLOBALCACHE false // Not written. -#define SEND_GLOBALCACHE true - -#define DECODE_GOODWEATHER true -#define SEND_GOODWEATHER true - -#define DECODE_GREE true -#define SEND_GREE true - -#define DECODE_PRONTO false // Not written. -#define SEND_PRONTO true - -#define DECODE_ARGO true // Experimental -#define SEND_ARGO true - -#define DECODE_TROTEC true -#define SEND_TROTEC true - -#define DECODE_NIKAI true -#define SEND_NIKAI true - -#define DECODE_TOSHIBA_AC true -#define SEND_TOSHIBA_AC true - -#define DECODE_MAGIQUEST true -#define SEND_MAGIQUEST true - -#define DECODE_MIDEA true -#define SEND_MIDEA true - -#define DECODE_LASERTAG true -#define SEND_LASERTAG true - -#define DECODE_CARRIER_AC true -#define SEND_CARRIER_AC true - -#define DECODE_HAIER_AC true -#define SEND_HAIER_AC true - -#define DECODE_HITACHI_AC true -#define SEND_HITACHI_AC true - -#define DECODE_HITACHI_AC1 true -#define SEND_HITACHI_AC1 true - -#define DECODE_HITACHI_AC2 true -#define SEND_HITACHI_AC2 true - -#define DECODE_GICABLE true -#define SEND_GICABLE true - -#define DECODE_HAIER_AC_YRW02 true -#define SEND_HAIER_AC_YRW02 true - -#define DECODE_WHIRLPOOL_AC true -#define SEND_WHIRLPOOL_AC true - -#define DECODE_LUTRON true -#define SEND_LUTRON true - -#define DECODE_ELECTRA_AC true -#define SEND_ELECTRA_AC true - -#define DECODE_PANASONIC_AC true -#define SEND_PANASONIC_AC true - -#define DECODE_MWM true -#define SEND_MWM true - -#define DECODE_PIONEER true -#define SEND_PIONEER true - -#define DECODE_DAIKIN2 true -#define SEND_DAIKIN2 true - -#define DECODE_VESTEL_AC true -#define SEND_VESTEL_AC true - -#define DECODE_TECO true -#define SEND_TECO true - -#define DECODE_TCL112AC true -#define SEND_TCL112AC true - -#define DECODE_LEGOPF true -#define SEND_LEGOPF true - -#define DECODE_MITSUBISHIHEAVY true -#define SEND_MITSUBISHIHEAVY true - -#define DECODE_DAIKIN216 true -#define SEND_DAIKIN216 true - -#define DECODE_DAIKIN160 true -#define SEND_DAIKIN160 true - -#define DECODE_NEOCLIMA true -#define SEND_NEOCLIMA true - -#define DECODE_DAIKIN176 true -#define SEND_DAIKIN176 true - -#define DECODE_DAIKIN128 true -#define SEND_DAIKIN128 true - -#define DECODE_AMCOR true -#define SEND_AMCOR true - -#define DECODE_DAIKIN152 true -#define SEND_DAIKIN152 true - -#define DECODE_HITACHI_AC424 true -#define SEND_HITACHI_AC424 true - -#else // defined(FIRMWARE_IR) || defined(FIRMWARE_IR_CUSTOM) // full IR protocols - -// Tasmota supported protocols (less protocols is less code size) -#define DECODE_HASH true // Semi-unique code for unknown messages - -#define SEND_RAW false - -#define DECODE_NEC true -#define SEND_NEC true - -#define DECODE_SHERWOOD false // Doesn't exist. Actually is DECODE_NEC -#define SEND_SHERWOOD false - -#define DECODE_RC5 true -#define SEND_RC5 true - -#define DECODE_RC6 true -#define SEND_RC6 true - -#define DECODE_RCMM false -#define SEND_RCMM false - -#define DECODE_SONY false -#define SEND_SONY false - -#define DECODE_PANASONIC false -#define SEND_PANASONIC false - -#define DECODE_JVC false -#define SEND_JVC false - -#define DECODE_SAMSUNG false -#define SEND_SAMSUNG false - -#define DECODE_SAMSUNG36 false -#define SEND_SAMSUNG36 false - -#define DECODE_SAMSUNG_AC false -#define SEND_SAMSUNG_AC false - -#define DECODE_WHYNTER false -#define SEND_WHYNTER false - -#define DECODE_AIWA_RC_T501 false -#define SEND_AIWA_RC_T501 false - -#define DECODE_LG false -#define SEND_LG false - -#define DECODE_SANYO false -#define SEND_SANYO false - -#define DECODE_MITSUBISHI false -#define SEND_MITSUBISHI false - -#define DECODE_MITSUBISHI2 false -#define SEND_MITSUBISHI2 false - -#define DECODE_DISH false -#define SEND_DISH false - -#define DECODE_SHARP false -#define SEND_SHARP false - -#define DECODE_SHARP_AC false -#define SEND_SHARP_AC false - -#define DECODE_DENON false -#define SEND_DENON false - -#define DECODE_KELVINATOR false -#define SEND_KELVINATOR false - -#define DECODE_MITSUBISHI_AC false // Beta. -#define SEND_MITSUBISHI_AC false - -#define DECODE_FUJITSU_AC false -#define SEND_FUJITSU_AC false - -#define DECODE_INAX false -#define SEND_INAX false - -#define DECODE_DAIKIN false -#define SEND_DAIKIN false - -#define DECODE_COOLIX false -#define SEND_COOLIX false - -#define DECODE_GLOBALCACHE false // Not written. -#define SEND_GLOBALCACHE false - -#define DECODE_GOODWEATHER false -#define SEND_GOODWEATHER false - -#define DECODE_GREE false -#define SEND_GREE false - -#define DECODE_PRONTO false // Not written. -#define SEND_PRONTO false - -#define DECODE_ARGO false // Experimental -#define SEND_ARGO false - -#define DECODE_TROTEC false -#define SEND_TROTEC false - -#define DECODE_NIKAI false -#define SEND_NIKAI false - -#define DECODE_TOSHIBA_AC false -#define SEND_TOSHIBA_AC false - -#define DECODE_MAGIQUEST false -#define SEND_MAGIQUEST false - -#define DECODE_MIDEA false -#define SEND_MIDEA false - -#define DECODE_LASERTAG false -#define SEND_LASERTAG false - -#define DECODE_CARRIER_AC false -#define SEND_CARRIER_AC false - -#define DECODE_HAIER_AC false -#define SEND_HAIER_AC false - -#define DECODE_HITACHI_AC false -#define SEND_HITACHI_AC false - -#define DECODE_HITACHI_AC1 false -#define SEND_HITACHI_AC1 false - -#define DECODE_HITACHI_AC2 false -#define SEND_HITACHI_AC2 false - -#define DECODE_GICABLE false -#define SEND_GICABLE false - -#define DECODE_HAIER_AC_YRW02 false -#define SEND_HAIER_AC_YRW02 false - -#define DECODE_WHIRLPOOL_AC false -#define SEND_WHIRLPOOL_AC false - -#define DECODE_LUTRON false -#define SEND_LUTRON false - -#define DECODE_ELECTRA_AC false -#define SEND_ELECTRA_AC false - -#define DECODE_PANASONIC_AC false -#define SEND_PANASONIC_AC false - -#define DECODE_MWM false -#define SEND_MWM false - -#define DECODE_PIONEER false -#define SEND_PIONEER false - -#define DECODE_DAIKIN2 false -#define SEND_DAIKIN2 false - -#define DECODE_VESTEL_AC false -#define SEND_VESTEL_AC false - -#define DECODE_TECO false -#define SEND_TECO false - -#define DECODE_TCL112AC false -#define SEND_TCL112AC false - -#define DECODE_LEGOPF false -#define SEND_LEGOPF false - -#define DECODE_MITSUBISHIHEAVY false -#define SEND_MITSUBISHIHEAVY false - -#define DECODE_DAIKIN216 false -#define SEND_DAIKIN216 false - -#define DECODE_DAIKIN160 false -#define SEND_DAIKIN160 false - -#define DECODE_NEOCLIMA false -#define SEND_NEOCLIMA false - -#define DECODE_DAIKIN176 false -#define SEND_DAIKIN176 false - -#define DECODE_DAIKIN128 false -#define SEND_DAIKIN128 false - -#define DECODE_AMCOR false -#define SEND_AMCOR false - -#define DECODE_DAIKIN152 false -#define SEND_DAIKIN152 false - -#define DECODE_HITACHI_AC424 false -#define SEND_HITACHI_AC424 false - -#endif // defined(FIRMWARE_IR) || defined(FIRMWARE_IR_CUSTOM) // full IR protocols +// Semi-unique code for unknown messages +#ifndef DECODE_HASH +#define DECODE_HASH _IR_ENABLE_DEFAULT_ +#endif // DECODE_HASH + +#ifndef SEND_RAW +#define SEND_RAW _IR_ENABLE_DEFAULT_ +#endif // SEND_RAW + +#ifndef DECODE_NEC +#define DECODE_NEC _IR_ENABLE_DEFAULT_ +#endif // DECODE_NEC +#ifndef SEND_NEC +#define SEND_NEC _IR_ENABLE_DEFAULT_ +#endif // SEND_NEC + +#ifndef DECODE_SHERWOOD +#define DECODE_SHERWOOD false // Not applicable. Actually is DECODE_NEC +#endif // DECODE_SHERWOOD +#ifndef SEND_SHERWOOD +#define SEND_SHERWOOD _IR_ENABLE_DEFAULT_ +#endif // SEND_SHERWOOD + +#ifndef DECODE_RC5 +#define DECODE_RC5 _IR_ENABLE_DEFAULT_ +#endif // DECODE_RC5 +#ifndef SEND_RC5 +#define SEND_RC5 _IR_ENABLE_DEFAULT_ +#endif // SEND_RC5 + +#ifndef DECODE_RC6 +#define DECODE_RC6 _IR_ENABLE_DEFAULT_ +#endif // DECODE_RC6 +#ifndef SEND_RC6 +#define SEND_RC6 _IR_ENABLE_DEFAULT_ +#endif // SEND_RC6 + +#ifndef DECODE_RCMM +#define DECODE_RCMM _IR_ENABLE_DEFAULT_ +#endif // DECODE_RCMM +#ifndef SEND_RCMM +#define SEND_RCMM _IR_ENABLE_DEFAULT_ +#endif // SEND_RCMM + +#ifndef DECODE_SONY +#define DECODE_SONY _IR_ENABLE_DEFAULT_ +#endif // DECODE_SONY +#ifndef SEND_SONY +#define SEND_SONY _IR_ENABLE_DEFAULT_ +#endif // SEND_SONY + +#ifndef DECODE_PANASONIC +#define DECODE_PANASONIC _IR_ENABLE_DEFAULT_ +#endif // DECODE_PANASONIC +#ifndef SEND_PANASONIC +#define SEND_PANASONIC _IR_ENABLE_DEFAULT_ +#endif // SEND_PANASONIC + +#ifndef DECODE_JVC +#define DECODE_JVC _IR_ENABLE_DEFAULT_ +#endif // DECODE_JVC +#ifndef SEND_JVC +#define SEND_JVC _IR_ENABLE_DEFAULT_ +#endif // SEND_JVC + +#ifndef DECODE_SAMSUNG +#define DECODE_SAMSUNG _IR_ENABLE_DEFAULT_ +#endif // DECODE_SAMSUNG +#ifndef SEND_SAMSUNG +#define SEND_SAMSUNG _IR_ENABLE_DEFAULT_ +#endif // SEND_SAMSUNG + +#ifndef DECODE_SAMSUNG36 +#define DECODE_SAMSUNG36 _IR_ENABLE_DEFAULT_ +#endif // DECODE_SAMSUNG36 +#ifndef SEND_SAMSUNG36 +#define SEND_SAMSUNG36 _IR_ENABLE_DEFAULT_ +#endif // SEND_SAMSUNG36 + +#ifndef DECODE_SAMSUNG_AC +#define DECODE_SAMSUNG_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_SAMSUNG_AC +#ifndef SEND_SAMSUNG_AC +#define SEND_SAMSUNG_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_SAMSUNG_AC + +#ifndef DECODE_WHYNTER +#define DECODE_WHYNTER _IR_ENABLE_DEFAULT_ +#endif // DECODE_WHYNTER +#ifndef SEND_WHYNTER +#define SEND_WHYNTER _IR_ENABLE_DEFAULT_ +#endif // SEND_WHYNTER + +#ifndef DECODE_AIWA_RC_T501 +#define DECODE_AIWA_RC_T501 _IR_ENABLE_DEFAULT_ +#endif // DECODE_AIWA_RC_T501 +#ifndef SEND_AIWA_RC_T501 +#define SEND_AIWA_RC_T501 _IR_ENABLE_DEFAULT_ +#endif // SEND_AIWA_RC_T501 + +#ifndef DECODE_LG +#define DECODE_LG _IR_ENABLE_DEFAULT_ +#endif // DECODE_LG +#ifndef SEND_LG +#define SEND_LG _IR_ENABLE_DEFAULT_ +#endif // SEND_LG + +#ifndef DECODE_SANYO +#define DECODE_SANYO _IR_ENABLE_DEFAULT_ +#endif // DECODE_SANYO +#ifndef SEND_SANYO +#define SEND_SANYO _IR_ENABLE_DEFAULT_ +#endif // SEND_SANYO + +#ifndef DECODE_MITSUBISHI +#define DECODE_MITSUBISHI _IR_ENABLE_DEFAULT_ +#endif // DECODE_MITSUBISHI +#ifndef SEND_MITSUBISHI +#define SEND_MITSUBISHI _IR_ENABLE_DEFAULT_ +#endif // SEND_MITSUBISHI + +#ifndef DECODE_MITSUBISHI2 +#define DECODE_MITSUBISHI2 _IR_ENABLE_DEFAULT_ +#endif // DECODE_MITSUBISHI2 +#ifndef SEND_MITSUBISHI2 +#define SEND_MITSUBISHI2 _IR_ENABLE_DEFAULT_ +#endif // SEND_MITSUBISHI2 + +#ifndef DECODE_DISH +#define DECODE_DISH _IR_ENABLE_DEFAULT_ +#endif // DECODE_DISH +#ifndef SEND_DISH +#define SEND_DISH _IR_ENABLE_DEFAULT_ +#endif // SEND_DISH + +#ifndef DECODE_SHARP +#define DECODE_SHARP _IR_ENABLE_DEFAULT_ +#endif // DECODE_SHARP +#ifndef SEND_SHARP +#define SEND_SHARP _IR_ENABLE_DEFAULT_ +#endif // SEND_SHARP + +#ifndef DECODE_SHARP_AC +#define DECODE_SHARP_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_SHARP_AC +#ifndef SEND_SHARP_AC +#define SEND_SHARP_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_SHARP_AC + +#ifndef DECODE_DENON +#define DECODE_DENON _IR_ENABLE_DEFAULT_ +#endif // DECODE_DENON +#ifndef SEND_DENON +#define SEND_DENON _IR_ENABLE_DEFAULT_ +#endif // SEND_DENON + +#ifndef DECODE_KELVINATOR +#define DECODE_KELVINATOR _IR_ENABLE_DEFAULT_ +#endif // DECODE_KELVINATOR +#ifndef SEND_KELVINATOR +#define SEND_KELVINATOR _IR_ENABLE_DEFAULT_ +#endif // SEND_KELVINATOR + +#ifndef DECODE_MITSUBISHI_AC +#define DECODE_MITSUBISHI_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_MITSUBISHI_AC +#ifndef SEND_MITSUBISHI_AC +#define SEND_MITSUBISHI_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_MITSUBISHI_AC + +#ifndef DECODE_MITSUBISHI136 +#define DECODE_MITSUBISHI136 _IR_ENABLE_DEFAULT_ +#endif // DECODE_MITSUBISHI136 +#ifndef SEND_MITSUBISHI136 +#define SEND_MITSUBISHI136 _IR_ENABLE_DEFAULT_ +#endif // SEND_MITSUBISHI136 + +#ifndef DECODE_MITSUBISHI112 +#define DECODE_MITSUBISHI112 _IR_ENABLE_DEFAULT_ +#endif // DECODE_MITSUBISHI112 +#ifndef SEND_MITSUBISHI112 +#define SEND_MITSUBISHI112 _IR_ENABLE_DEFAULT_ +#endif // SEND_MITSUBISHI112 + +#ifndef DECODE_FUJITSU_AC +#define DECODE_FUJITSU_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_FUJITSU_AC +#ifndef SEND_FUJITSU_AC +#define SEND_FUJITSU_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_FUJITSU_AC + +#ifndef DECODE_INAX +#define DECODE_INAX _IR_ENABLE_DEFAULT_ +#endif // DECODE_INAX +#ifndef SEND_INAX +#define SEND_INAX _IR_ENABLE_DEFAULT_ +#endif // SEND_INAX + +#ifndef DECODE_DAIKIN +#define DECODE_DAIKIN _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN +#ifndef SEND_DAIKIN +#define SEND_DAIKIN _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN + +#ifndef DECODE_COOLIX +#define DECODE_COOLIX _IR_ENABLE_DEFAULT_ +#endif // DECODE_COOLIX +#ifndef SEND_COOLIX +#define SEND_COOLIX _IR_ENABLE_DEFAULT_ +#endif // SEND_COOLIX + +#ifndef DECODE_GLOBALCACHE +#define DECODE_GLOBALCACHE false // Not applicable. +#endif // DECODE_GLOBALCACHE +#ifndef SEND_GLOBALCACHE +#define SEND_GLOBALCACHE _IR_ENABLE_DEFAULT_ +#endif // SEND_GLOBALCACHE + +#ifndef DECODE_GOODWEATHER +#define DECODE_GOODWEATHER _IR_ENABLE_DEFAULT_ +#endif // DECODE_GOODWEATHER +#ifndef SEND_GOODWEATHER +#define SEND_GOODWEATHER _IR_ENABLE_DEFAULT_ +#endif // SEND_GOODWEATHER + +#ifndef DECODE_GREE +#define DECODE_GREE _IR_ENABLE_DEFAULT_ +#endif // DECODE_GREE +#ifndef SEND_GREE +#define SEND_GREE _IR_ENABLE_DEFAULT_ +#endif // SEND_GREE + +#ifndef DECODE_PRONTO +#define DECODE_PRONTO false // Not applicable. +#endif // DECODE_PRONTO +#ifndef SEND_PRONTO +#define SEND_PRONTO _IR_ENABLE_DEFAULT_ +#endif // SEND_PRONTO + +#ifndef DECODE_ARGO +#define DECODE_ARGO _IR_ENABLE_DEFAULT_ +#endif // DECODE_ARGO +#ifndef SEND_ARGO +#define SEND_ARGO _IR_ENABLE_DEFAULT_ +#endif // SEND_ARGO + +#ifndef DECODE_TROTEC +#define DECODE_TROTEC _IR_ENABLE_DEFAULT_ +#endif // DECODE_TROTEC +#ifndef SEND_TROTEC +#define SEND_TROTEC _IR_ENABLE_DEFAULT_ +#endif // SEND_TROTEC + +#ifndef DECODE_NIKAI +#define DECODE_NIKAI _IR_ENABLE_DEFAULT_ +#endif // DECODE_NIKAI +#ifndef SEND_NIKAI +#define SEND_NIKAI _IR_ENABLE_DEFAULT_ +#endif // SEND_NIKAI + +#ifndef DECODE_TOSHIBA_AC +#define DECODE_TOSHIBA_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_TOSHIBA_AC +#ifndef SEND_TOSHIBA_AC +#define SEND_TOSHIBA_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_TOSHIBA_AC + +#ifndef DECODE_MAGIQUEST +#define DECODE_MAGIQUEST _IR_ENABLE_DEFAULT_ +#endif // DECODE_MAGIQUEST +#ifndef SEND_MAGIQUEST +#define SEND_MAGIQUEST _IR_ENABLE_DEFAULT_ +#endif // SEND_MAGIQUEST + +#ifndef DECODE_MIDEA +#define DECODE_MIDEA _IR_ENABLE_DEFAULT_ +#endif // DECODE_MIDEA +#ifndef SEND_MIDEA +#define SEND_MIDEA _IR_ENABLE_DEFAULT_ +#endif // SEND_MIDEA + +#ifndef DECODE_LASERTAG +#define DECODE_LASERTAG _IR_ENABLE_DEFAULT_ +#endif // DECODE_LASERTAG +#ifndef SEND_LASERTAG +#define SEND_LASERTAG _IR_ENABLE_DEFAULT_ +#endif // SEND_LASERTAG + +#ifndef DECODE_CARRIER_AC +#define DECODE_CARRIER_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_CARRIER_AC +#ifndef SEND_CARRIER_AC +#define SEND_CARRIER_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_CARRIER_AC + +#ifndef DECODE_HAIER_AC +#define DECODE_HAIER_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_HAIER_AC +#ifndef SEND_HAIER_AC +#define SEND_HAIER_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_HAIER_AC + +#ifndef DECODE_HITACHI_AC +#define DECODE_HITACHI_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_HITACHI_AC +#ifndef SEND_HITACHI_AC +#define SEND_HITACHI_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_HITACHI_AC + +#ifndef DECODE_HITACHI_AC1 +#define DECODE_HITACHI_AC1 _IR_ENABLE_DEFAULT_ +#endif // DECODE_HITACHI_AC1 +#ifndef SEND_HITACHI_AC1 +#define SEND_HITACHI_AC1 _IR_ENABLE_DEFAULT_ +#endif // SEND_HITACHI_AC1 + +#ifndef DECODE_HITACHI_AC2 +#define DECODE_HITACHI_AC2 _IR_ENABLE_DEFAULT_ +#endif // DECODE_HITACHI_AC2 +#ifndef SEND_HITACHI_AC2 +#define SEND_HITACHI_AC2 _IR_ENABLE_DEFAULT_ +#endif // SEND_HITACHI_AC2 + +#ifndef DECODE_GICABLE +#define DECODE_GICABLE _IR_ENABLE_DEFAULT_ +#endif // DECODE_GICABLE +#ifndef SEND_GICABLE +#define SEND_GICABLE _IR_ENABLE_DEFAULT_ +#endif // SEND_GICABLE + +#ifndef DECODE_HAIER_AC_YRW02 +#define DECODE_HAIER_AC_YRW02 _IR_ENABLE_DEFAULT_ +#endif // DECODE_HAIER_AC_YRW02 +#ifndef SEND_HAIER_AC_YRW02 +#define SEND_HAIER_AC_YRW02 _IR_ENABLE_DEFAULT_ +#endif // SEND_HAIER_AC_YRW02 + +#ifndef DECODE_WHIRLPOOL_AC +#define DECODE_WHIRLPOOL_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_WHIRLPOOL_AC +#ifndef SEND_WHIRLPOOL_AC +#define SEND_WHIRLPOOL_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_WHIRLPOOL_AC + +#ifndef DECODE_LUTRON +#define DECODE_LUTRON _IR_ENABLE_DEFAULT_ +#endif // DECODE_LUTRON +#ifndef SEND_LUTRON +#define SEND_LUTRON _IR_ENABLE_DEFAULT_ +#endif // SEND_LUTRON + +#ifndef DECODE_ELECTRA_AC +#define DECODE_ELECTRA_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_ELECTRA_AC +#ifndef SEND_ELECTRA_AC +#define SEND_ELECTRA_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_ELECTRA_AC + +#ifndef DECODE_PANASONIC_AC +#define DECODE_PANASONIC_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_PANASONIC_AC +#ifndef SEND_PANASONIC_AC +#define SEND_PANASONIC_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_PANASONIC_AC + +#ifndef DECODE_MWM +#define DECODE_MWM _IR_ENABLE_DEFAULT_ +#endif // DECODE_MWM +#ifndef SEND_MWM +#define SEND_MWM _IR_ENABLE_DEFAULT_ +#endif // SEND_MWM + +#ifndef DECODE_PIONEER +#define DECODE_PIONEER _IR_ENABLE_DEFAULT_ +#endif // DECODE_PIONEER +#ifndef SEND_PIONEER +#define SEND_PIONEER _IR_ENABLE_DEFAULT_ +#endif // SEND_PIONEER + +#ifndef DECODE_DAIKIN2 +#define DECODE_DAIKIN2 _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN2 +#ifndef SEND_DAIKIN2 +#define SEND_DAIKIN2 _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN2 + +#ifndef DECODE_VESTEL_AC +#define DECODE_VESTEL_AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_VESTEL_AC +#ifndef SEND_VESTEL_AC +#define SEND_VESTEL_AC _IR_ENABLE_DEFAULT_ +#endif // SEND_VESTEL_AC + +#ifndef DECODE_TECO +#define DECODE_TECO _IR_ENABLE_DEFAULT_ +#endif // DECODE_TECO +#ifndef SEND_TECO +#define SEND_TECO _IR_ENABLE_DEFAULT_ +#endif // SEND_TECO + +#ifndef DECODE_TCL112AC +#define DECODE_TCL112AC _IR_ENABLE_DEFAULT_ +#endif // DECODE_TCL112AC +#ifndef SEND_TCL112AC +#define SEND_TCL112AC _IR_ENABLE_DEFAULT_ +#endif // SEND_TCL112AC + +#ifndef DECODE_LEGOPF +#define DECODE_LEGOPF _IR_ENABLE_DEFAULT_ +#endif // DECODE_LEGOPF +#ifndef SEND_LEGOPF +#define SEND_LEGOPF _IR_ENABLE_DEFAULT_ +#endif // SEND_LEGOPF + +#ifndef DECODE_MITSUBISHIHEAVY +#define DECODE_MITSUBISHIHEAVY _IR_ENABLE_DEFAULT_ +#endif // DECODE_MITSUBISHIHEAVY +#ifndef SEND_MITSUBISHIHEAVY +#define SEND_MITSUBISHIHEAVY _IR_ENABLE_DEFAULT_ +#endif // SEND_MITSUBISHIHEAVY + +#ifndef DECODE_DAIKIN216 +#define DECODE_DAIKIN216 _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN216 +#ifndef SEND_DAIKIN216 +#define SEND_DAIKIN216 _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN216 + +#ifndef DECODE_DAIKIN160 +#define DECODE_DAIKIN160 _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN160 +#ifndef SEND_DAIKIN160 +#define SEND_DAIKIN160 _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN160 + +#ifndef DECODE_NEOCLIMA +#define DECODE_NEOCLIMA _IR_ENABLE_DEFAULT_ +#endif // DECODE_NEOCLIMA +#ifndef SEND_NEOCLIMA +#define SEND_NEOCLIMA _IR_ENABLE_DEFAULT_ +#endif // SEND_NEOCLIMA + +#ifndef DECODE_DAIKIN176 +#define DECODE_DAIKIN176 _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN176 +#ifndef SEND_DAIKIN176 +#define SEND_DAIKIN176 _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN176 + +#ifndef DECODE_DAIKIN128 +#define DECODE_DAIKIN128 _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN128 +#ifndef SEND_DAIKIN128 +#define SEND_DAIKIN128 _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN128 + +#ifndef DECODE_AMCOR +#define DECODE_AMCOR _IR_ENABLE_DEFAULT_ +#endif // DECODE_AMCOR +#ifndef SEND_AMCOR +#define SEND_AMCOR _IR_ENABLE_DEFAULT_ +#endif // SEND_AMCOR + +#ifndef DECODE_DAIKIN152 +#define DECODE_DAIKIN152 _IR_ENABLE_DEFAULT_ +#endif // DECODE_DAIKIN152 +#ifndef SEND_DAIKIN152 +#define SEND_DAIKIN152 _IR_ENABLE_DEFAULT_ +#endif // SEND_DAIKIN152 + +#ifndef DECODE_HITACHI_AC424 +#define DECODE_HITACHI_AC424 _IR_ENABLE_DEFAULT_ +#endif // DECODE_HITACHI_AC424 +#ifndef SEND_HITACHI_AC424 +#define SEND_HITACHI_AC424 _IR_ENABLE_DEFAULT_ +#endif // SEND_HITACHI_AC424 #if (DECODE_ARGO || DECODE_DAIKIN || DECODE_FUJITSU_AC || DECODE_GREE || \ DECODE_KELVINATOR || DECODE_MITSUBISHI_AC || DECODE_TOSHIBA_AC || \ @@ -495,7 +585,9 @@ // Note: If you plan to send IR messages in the callbacks of the AsyncWebserver // library, you need to set ALLOW_DELAY_CALLS to false. // Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/430 +#ifndef ALLOW_DELAY_CALLS #define ALLOW_DELAY_CALLS true +#endif // ALLOW_DELAY_CALLS /* * Always add to the end of the list and should never remove entries @@ -578,8 +670,9 @@ enum decode_type_t { MITSUBISHI136, MITSUBISHI112, HITACHI_AC424, + SONY_38K, // Add new entries before this one, and update it to point to the last entry. - kLastDecodeType = HITACHI_AC424, + kLastDecodeType = SONY_38K, }; // Message lengths & required repeat values diff --git a/lib/IRremoteESP8266-2.7.2/src/IRsend.cpp b/lib/IRremoteESP8266-2.7.3/src/IRsend.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.2/src/IRsend.cpp rename to lib/IRremoteESP8266-2.7.3/src/IRsend.cpp index 18e2eb559..4bc16a75c 100644 --- a/lib/IRremoteESP8266-2.7.2/src/IRsend.cpp +++ b/lib/IRremoteESP8266-2.7.3/src/IRsend.cpp @@ -515,6 +515,8 @@ uint16_t IRsend::minRepeats(const decode_type_t protocol) { return kDishMinRepeat; case SONY: return kSonyMinRepeat; + case SONY_38K: + return kSonyMinRepeat + 1; default: return kNoRepeat; } @@ -545,6 +547,7 @@ uint16_t IRsend::defaultBits(const decode_type_t protocol) { return 16; case RC6: case SONY: + case SONY_38K: return 20; case COOLIX: case INAX: @@ -818,6 +821,9 @@ bool IRsend::send(const decode_type_t type, const uint64_t data, case SONY: sendSony(data, nbits, min_repeat); break; + case SONY_38K: + sendSony38(data, nbits, min_repeat); + break; #endif #if SEND_TECO case TECO: diff --git a/lib/IRremoteESP8266-2.7.2/src/IRsend.h b/lib/IRremoteESP8266-2.7.3/src/IRsend.h similarity index 98% rename from lib/IRremoteESP8266-2.7.2/src/IRsend.h rename to lib/IRremoteESP8266-2.7.3/src/IRsend.h index e86f4e7de..ff801210d 100644 --- a/lib/IRremoteESP8266-2.7.2/src/IRsend.h +++ b/lib/IRremoteESP8266-2.7.3/src/IRsend.h @@ -130,7 +130,7 @@ enum panasonic_ac_remote_model_t { kPanasonicUnknown = 0, kPanasonicLke = 1, kPanasonicNke = 2, - kPanasonicDke = 3, + kPanasonicDke = 3, // PKR too. kPanasonicJke = 4, kPanasonicCkp = 5, kPanasonicRkr = 6, @@ -203,6 +203,8 @@ class IRsend { // a Sony command that will be accepted be a device. void sendSony(uint64_t data, uint16_t nbits = kSony20Bits, uint16_t repeat = kSonyMinRepeat); + void sendSony38(uint64_t data, uint16_t nbits = kSony20Bits, + uint16_t repeat = kSonyMinRepeat + 1); uint32_t encodeSony(uint16_t nbits, uint16_t command, uint16_t address, uint16_t extended = 0); #endif @@ -561,6 +563,10 @@ class IRsend { uint8_t _dutycycle; bool modulation; uint32_t calcUSecPeriod(uint32_t hz, bool use_offset = true); +#if SEND_SONY + void _sendSony(uint64_t data, uint16_t nbits, + uint16_t repeat, uint16_t freq); +#endif }; #endif // IRSEND_H_ diff --git a/lib/IRremoteESP8266-2.7.2/src/IRtext.cpp b/lib/IRremoteESP8266-2.7.3/src/IRtext.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRtext.cpp rename to lib/IRremoteESP8266-2.7.3/src/IRtext.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/IRtext.h b/lib/IRremoteESP8266-2.7.3/src/IRtext.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRtext.h rename to lib/IRremoteESP8266-2.7.3/src/IRtext.h diff --git a/lib/IRremoteESP8266-2.7.2/src/IRtimer.cpp b/lib/IRremoteESP8266-2.7.3/src/IRtimer.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRtimer.cpp rename to lib/IRremoteESP8266-2.7.3/src/IRtimer.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/IRtimer.h b/lib/IRremoteESP8266-2.7.3/src/IRtimer.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRtimer.h rename to lib/IRremoteESP8266-2.7.3/src/IRtimer.h diff --git a/lib/IRremoteESP8266-2.7.2/src/IRutils.cpp b/lib/IRremoteESP8266-2.7.3/src/IRutils.cpp similarity index 99% rename from lib/IRremoteESP8266-2.7.2/src/IRutils.cpp rename to lib/IRremoteESP8266-2.7.3/src/IRutils.cpp index e785f625d..bbb9ed491 100644 --- a/lib/IRremoteESP8266-2.7.2/src/IRutils.cpp +++ b/lib/IRremoteESP8266-2.7.3/src/IRutils.cpp @@ -228,6 +228,8 @@ decode_type_t strToDecodeType(const char * const str) { 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, "TCL112AC")) return decode_type_t::TCL112AC; else if (!strcasecmp(str, "TECO")) @@ -461,6 +463,9 @@ String typeToString(const decode_type_t protocol, const bool isRepeat) { case SONY: result = F("SONY"); break; + case SONY_38K: + result = F("SONY_38K"); + break; case TCL112AC: result = F("TCL112AC"); break; diff --git a/lib/IRremoteESP8266-2.7.2/src/IRutils.h b/lib/IRremoteESP8266-2.7.3/src/IRutils.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/IRutils.h rename to lib/IRremoteESP8266-2.7.3/src/IRutils.h diff --git a/lib/IRremoteESP8266-2.7.2/src/i18n.h b/lib/IRremoteESP8266-2.7.3/src/i18n.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/i18n.h rename to lib/IRremoteESP8266-2.7.3/src/i18n.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Aiwa.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Aiwa.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Aiwa.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Aiwa.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Amcor.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Amcor.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Amcor.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Amcor.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Amcor.h b/lib/IRremoteESP8266-2.7.3/src/ir_Amcor.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Amcor.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Amcor.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Argo.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Argo.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Argo.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Argo.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Argo.h b/lib/IRremoteESP8266-2.7.3/src/ir_Argo.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Argo.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Argo.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Carrier.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Carrier.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Carrier.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Carrier.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Coolix.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Coolix.cpp similarity index 97% rename from lib/IRremoteESP8266-2.7.2/src/ir_Coolix.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Coolix.cpp index 0dbd68d63..8b184bf9f 100644 --- a/lib/IRremoteESP8266-2.7.2/src/ir_Coolix.cpp +++ b/lib/IRremoteESP8266-2.7.3/src/ir_Coolix.cpp @@ -27,16 +27,16 @@ // Pulse parms are *50-100 for the Mark and *50+100 for the space // First MARK is the one after the long gap // pulse parameters in usec -const uint16_t kCoolixTick = 560; // Approximately 21 cycles at 38kHz -const uint16_t kCoolixBitMarkTicks = 1; +const uint16_t kCoolixTick = 276; // Approximately 10.5 cycles at 38kHz +const uint16_t kCoolixBitMarkTicks = 2; const uint16_t kCoolixBitMark = kCoolixBitMarkTicks * kCoolixTick; -const uint16_t kCoolixOneSpaceTicks = 3; +const uint16_t kCoolixOneSpaceTicks = 6; const uint16_t kCoolixOneSpace = kCoolixOneSpaceTicks * kCoolixTick; -const uint16_t kCoolixZeroSpaceTicks = 1; +const uint16_t kCoolixZeroSpaceTicks = 2; const uint16_t kCoolixZeroSpace = kCoolixZeroSpaceTicks * kCoolixTick; -const uint16_t kCoolixHdrMarkTicks = 8; +const uint16_t kCoolixHdrMarkTicks = 17; const uint16_t kCoolixHdrMark = kCoolixHdrMarkTicks * kCoolixTick; -const uint16_t kCoolixHdrSpaceTicks = 8; +const uint16_t kCoolixHdrSpaceTicks = 16; const uint16_t kCoolixHdrSpace = kCoolixHdrSpaceTicks * kCoolixTick; const uint16_t kCoolixMinGapTicks = kCoolixHdrMarkTicks + kCoolixZeroSpaceTicks; const uint16_t kCoolixMinGap = kCoolixMinGapTicks * kCoolixTick; @@ -57,11 +57,10 @@ using irutils::setBits; // nbits: Nr. of bits of data to be sent. Typically kCoolixBits. // repeat: Nr. of additional times the message is to be sent. // -// Status: BETA / Probably works. +// Status: STABLE / Confirmed Working. // // Ref: // https://github.com/z3t0/Arduino-IRremote/blob/master/ir_COOLIX.cpp -// TODO(anyone): Verify repeat functionality against a real unit. void IRsend::sendCOOLIX(uint64_t data, uint16_t nbits, uint16_t repeat) { if (nbits % 8 != 0) return; // nbits is required to be a multiple of 8. @@ -443,7 +442,11 @@ stdAc::state_t IRCoolixAC::toCommon(const stdAc::state_t *prev) { } else { // Set defaults for non-zero values that are not implicitly set for when // there is no previous state. + // e.g. Any setting that toggles should probably go here. result.swingv = stdAc::swingv_t::kOff; + result.turbo = false; + result.clean = false; + result.light = false; result.sleep = -1; } // Not supported. diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Coolix.h b/lib/IRremoteESP8266-2.7.3/src/ir_Coolix.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Coolix.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Coolix.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Daikin.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Daikin.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Daikin.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Daikin.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Daikin.h b/lib/IRremoteESP8266-2.7.3/src/ir_Daikin.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Daikin.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Daikin.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Denon.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Denon.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Denon.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Denon.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Dish.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Dish.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Dish.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Dish.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Electra.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Electra.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Electra.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Electra.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Electra.h b/lib/IRremoteESP8266-2.7.3/src/ir_Electra.h similarity index 97% rename from lib/IRremoteESP8266-2.7.2/src/ir_Electra.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Electra.h index ef28b44cf..a120bcd28 100644 --- a/lib/IRremoteESP8266-2.7.2/src/ir_Electra.h +++ b/lib/IRremoteESP8266-2.7.3/src/ir_Electra.h @@ -19,6 +19,8 @@ // Supports: // Brand: AUX, Model: KFR-35GW/BpNFW=3 A/C // Brand: AUX, Model: YKR-T/011 remote +// Brand: Electra, Model: Classic INV 17 / AXW12DCS A/C +// Brand: Electra, Model: YKR-M/003E remote // Ref: // https://github.com/ToniA/arduino-heatpumpir/blob/master/AUXHeatpumpIR.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Fujitsu.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Fujitsu.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Fujitsu.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Fujitsu.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Fujitsu.h b/lib/IRremoteESP8266-2.7.3/src/ir_Fujitsu.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Fujitsu.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Fujitsu.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_GICable.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_GICable.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_GICable.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_GICable.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_GlobalCache.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_GlobalCache.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_GlobalCache.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_GlobalCache.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Goodweather.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Goodweather.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Goodweather.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Goodweather.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Goodweather.h b/lib/IRremoteESP8266-2.7.3/src/ir_Goodweather.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Goodweather.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Goodweather.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Gree.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Gree.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Gree.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Gree.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Gree.h b/lib/IRremoteESP8266-2.7.3/src/ir_Gree.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Gree.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Gree.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Haier.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Haier.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Haier.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Haier.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Haier.h b/lib/IRremoteESP8266-2.7.3/src/ir_Haier.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Haier.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Haier.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Hitachi.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Hitachi.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Hitachi.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Hitachi.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Hitachi.h b/lib/IRremoteESP8266-2.7.3/src/ir_Hitachi.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Hitachi.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Hitachi.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Inax.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Inax.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Inax.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Inax.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_JVC.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_JVC.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_JVC.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_JVC.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Kelvinator.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Kelvinator.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Kelvinator.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Kelvinator.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Kelvinator.h b/lib/IRremoteESP8266-2.7.3/src/ir_Kelvinator.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Kelvinator.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Kelvinator.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_LG.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_LG.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_LG.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_LG.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_LG.h b/lib/IRremoteESP8266-2.7.3/src/ir_LG.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_LG.h rename to lib/IRremoteESP8266-2.7.3/src/ir_LG.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Lasertag.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Lasertag.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Lasertag.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Lasertag.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Lego.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Lego.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Lego.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Lego.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Lutron.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Lutron.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Lutron.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Lutron.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_MWM.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_MWM.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_MWM.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_MWM.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Magiquest.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Magiquest.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Magiquest.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Magiquest.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Magiquest.h b/lib/IRremoteESP8266-2.7.3/src/ir_Magiquest.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Magiquest.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Magiquest.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Midea.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Midea.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Midea.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Midea.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Midea.h b/lib/IRremoteESP8266-2.7.3/src/ir_Midea.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Midea.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Midea.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Mitsubishi.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Mitsubishi.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Mitsubishi.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Mitsubishi.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Mitsubishi.h b/lib/IRremoteESP8266-2.7.3/src/ir_Mitsubishi.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Mitsubishi.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Mitsubishi.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_MitsubishiHeavy.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_MitsubishiHeavy.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_MitsubishiHeavy.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_MitsubishiHeavy.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_MitsubishiHeavy.h b/lib/IRremoteESP8266-2.7.3/src/ir_MitsubishiHeavy.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_MitsubishiHeavy.h rename to lib/IRremoteESP8266-2.7.3/src/ir_MitsubishiHeavy.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_NEC.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_NEC.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_NEC.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_NEC.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_NEC.h b/lib/IRremoteESP8266-2.7.3/src/ir_NEC.h similarity index 93% rename from lib/IRremoteESP8266-2.7.2/src/ir_NEC.h rename to lib/IRremoteESP8266-2.7.3/src/ir_NEC.h index 6319d32dc..cf6191100 100644 --- a/lib/IRremoteESP8266-2.7.2/src/ir_NEC.h +++ b/lib/IRremoteESP8266-2.7.3/src/ir_NEC.h @@ -10,9 +10,10 @@ #include "IRremoteESP8266.h" // Supports: -// Brand: Yamaha, Model: RAV561 remote -// Brand: Yamaha, Model: RXV585B A/V Receiver -// Brand: Aloka, Model: SleepyLights LED Lamp +// Brand: Yamaha, Model: RAV561 remote +// Brand: Yamaha, Model: RXV585B A/V Receiver +// Brand: Aloka, Model: SleepyLights LED Lamp +// Brand: Toshiba, Model: 42TL838 LCD TV // Constants // Ref: diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Neoclima.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Neoclima.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Neoclima.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Neoclima.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Neoclima.h b/lib/IRremoteESP8266-2.7.3/src/ir_Neoclima.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Neoclima.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Neoclima.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Nikai.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Nikai.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Nikai.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Nikai.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Panasonic.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Panasonic.cpp similarity index 97% rename from lib/IRremoteESP8266-2.7.2/src/ir_Panasonic.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Panasonic.cpp index a25f4cb02..511986a11 100644 --- a/lib/IRremoteESP8266-2.7.2/src/ir_Panasonic.cpp +++ b/lib/IRremoteESP8266-2.7.3/src/ir_Panasonic.cpp @@ -25,8 +25,8 @@ // Code by crankyoldgit // Panasonic A/C models supported: // A/C Series/models: -// JKE, LKE, DKE, CKP, RKR, & NKE series. (In theory) -// CS-YW9MKD, CS-Z9RKR (confirmed) +// JKE, LKE, DKE, CKP, PKR, RKR, & NKE series. (In theory) +// CS-YW9MKD, CS-Z9RKR, CS-E7PKR (confirmed) // CS-ME14CKPG / CS-ME12CKPG / CS-ME10CKPG // A/C Remotes: // A75C3747 (confirmed) @@ -202,8 +202,9 @@ bool IRrecv::decodePanasonic(decode_results *results, const uint16_t nbits, //: // Panasonic A/C models supported: // A/C Series/models: -// JKE, LKE, DKE, CKP, RKR, & NKE series. +// JKE, LKE, DKE, CKP, PKR, RKR, & NKE series. // CS-YW9MKD +// CS-E7PKR // A/C Remotes: // A75C3747 // A75C3704 @@ -310,6 +311,8 @@ void IRPanasonicAc::setModel(const panasonic_ac_remote_model_t model) { default: break; } + // Reset the Ion filter. + setIon(getIon()); } panasonic_ac_remote_model_t IRPanasonicAc::getModel(void) { @@ -588,6 +591,22 @@ bool IRPanasonicAc::isOffTimerEnabled(void) { return GETBIT8(remote_state[13], kPanasonicAcOffTimerOffset); } +bool IRPanasonicAc::getIon(void) { + switch (this->getModel()) { + case kPanasonicDke: + return GETBIT8(remote_state[kPanasonicAcIonFilterByte], + kPanasonicAcIonFilterOffset); + default: + return false; + } +} + +void IRPanasonicAc::setIon(const bool on) { + if (this->getModel() == kPanasonicDke) + setBit(&remote_state[kPanasonicAcIonFilterByte], + kPanasonicAcIonFilterOffset, on); +} + // Convert a standard A/C mode into its native mode. uint8_t IRPanasonicAc::convertMode(const stdAc::opmode_t mode) { switch (mode) { @@ -692,10 +711,10 @@ stdAc::state_t IRPanasonicAc::toCommon(void) { result.swingh = this->toCommonSwingH(this->getSwingHorizontal()); result.quiet = this->getQuiet(); result.turbo = this->getPowerful(); + result.filter = this->getIon(); // Not supported. result.econo = false; result.clean = false; - result.filter = false; result.light = false; result.beep = false; result.sleep = -1; @@ -774,6 +793,8 @@ String IRPanasonicAc::toString(void) { } result += addBoolToString(getQuiet(), kQuietStr); result += addBoolToString(getPowerful(), kPowerfulStr); + if (getModel() == kPanasonicDke) + result += addBoolToString(getIon(), kIonStr); result += addLabeledString(minsToString(getClock()), kClockStr); result += addLabeledString( isOnTimerEnabled() ? minsToString(getOnTimer()) : kOffStr, @@ -798,8 +819,9 @@ String IRPanasonicAc::toString(void) { // // Panasonic A/C models supported: // A/C Series/models: -// JKE, LKE, DKE, & NKE series. +// JKE, LKE, DKE, PKR, & NKE series. // CS-YW9MKD +// CS-E7PKR // A/C Remotes: // A75C3747 (Confirmed) // A75C3704 diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Panasonic.h b/lib/IRremoteESP8266-2.7.3/src/ir_Panasonic.h similarity index 94% rename from lib/IRremoteESP8266-2.7.2/src/ir_Panasonic.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Panasonic.h index 89c2e5395..42e771fb3 100644 --- a/lib/IRremoteESP8266-2.7.2/src/ir_Panasonic.h +++ b/lib/IRremoteESP8266-2.7.3/src/ir_Panasonic.h @@ -4,19 +4,20 @@ // Brand: Panasonic, Model: TV // Brand: Panasonic, Model: JKE series A/C // Brand: Panasonic, Model: DKE series A/C +// Brand: Panasonic, Model: DKW series A/C (DKE) +// Brand: Panasonic, Model: PKR series A/C (DKE) // Brand: Panasonic, Model: CKP series A/C +// Brand: Panasonic, Model: NKE series A/C +// Brand: Panasonic, Model: RKR series A/C // Brand: Panasonic, Model: CS-ME10CKPG A/C // Brand: Panasonic, Model: CS-ME12CKPG A/C // Brand: Panasonic, Model: CS-ME14CKPG A/C -// Brand: Panasonic, Model: RKR series A/C +// Brand: Panasonic, Model: CS-E7PKR A/C (DKE) // Brand: Panasonic, Model: CS-Z9RKR A/C -// Brand: Panasonic, Model: NKE series A/C // Brand: Panasonic, Model: CS-YW9MKD A/C -// Brand: Panasonic, Model: A75C3747 remote -// Brand: Panasonic, Model: A75C3704 remote // Brand: Panasonic, Model: A75C2311 remote (CKP) -// Brand: Panasonic, Model: A75C3747 remote -// Brand: Panasonic, Model: A75C3747 remote +// Brand: Panasonic, Model: A75C2616-1 remote (DKE) +// Brand: Panasonic, Model: A75C3704 remote // Brand: Panasonic, Model: A75C3747 remote #ifndef IR_PANASONIC_H_ @@ -84,6 +85,9 @@ const uint8_t kPanasonicAcTimeOverflowSize = 3; // Bits const uint16_t kPanasonicAcTimeMax = 23 * 60 + 59; // Mins since midnight. const uint16_t kPanasonicAcTimeSpecial = 0x600; +const uint8_t kPanasonicAcIonFilterByte = 22; // Byte +const uint8_t kPanasonicAcIonFilterOffset = 0; // Bit + const uint8_t kPanasonicKnownGoodState[kPanasonicAcStateLength] = { 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, @@ -121,6 +125,8 @@ class IRPanasonicAc { bool getQuiet(void); void setPowerful(const bool on); bool getPowerful(void); + void setIon(const bool on); + bool getIon(void); void setModel(const panasonic_ac_remote_model_t model); panasonic_ac_remote_model_t getModel(void); void setSwingVertical(const uint8_t elevation); diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Pioneer.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Pioneer.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Pioneer.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Pioneer.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Pronto.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Pronto.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Pronto.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Pronto.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_RC5_RC6.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_RC5_RC6.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_RC5_RC6.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_RC5_RC6.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_RCMM.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_RCMM.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_RCMM.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_RCMM.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Samsung.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Samsung.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Samsung.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Samsung.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Samsung.h b/lib/IRremoteESP8266-2.7.3/src/ir_Samsung.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Samsung.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Samsung.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Sanyo.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Sanyo.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Sanyo.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Sanyo.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Sharp.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Sharp.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Sharp.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Sharp.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Sharp.h b/lib/IRremoteESP8266-2.7.3/src/ir_Sharp.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Sharp.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Sharp.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Sherwood.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Sherwood.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Sherwood.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Sherwood.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Sony.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Sony.cpp similarity index 74% rename from lib/IRremoteESP8266-2.7.2/src/ir_Sony.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Sony.cpp index 6fc39b7b5..d0f4b3c7a 100644 --- a/lib/IRremoteESP8266-2.7.2/src/ir_Sony.cpp +++ b/lib/IRremoteESP8266-2.7.3/src/ir_Sony.cpp @@ -1,9 +1,12 @@ // Copyright 2009 Ken Shirriff // Copyright 2016 marcosamarinho -// Copyright 2017 David Conran +// Copyright 2017,2020 David Conran // Sony Remote Emulation +// Supports: +// Brand: Sony, Model: HT-CT380 Soundbar (Uses 38kHz & 3 repeats) + #include #include "IRrecv.h" #include "IRsend.h" @@ -28,9 +31,11 @@ const uint16_t kSonyRptLengthTicks = 225; const uint16_t kSonyRptLength = kSonyRptLengthTicks * kSonyTick; const uint16_t kSonyMinGapTicks = 50; const uint16_t kSonyMinGap = kSonyMinGapTicks * kSonyTick; +const uint16_t kSonyStdFreq = 40000; // kHz +const uint16_t kSonyAltFreq = 38000; // kHz #if SEND_SONY -// Send a Sony/SIRC(Serial Infra-Red Control) message. +// Send a standard Sony/SIRC(Serial Infra-Red Control) message. (40kHz) // // Args: // data: message to be sent. @@ -46,10 +51,50 @@ const uint16_t kSonyMinGap = kSonyMinGapTicks * kSonyTick; // Ref: // http://www.sbprojects.com/knowledge/ir/sirc.php void IRsend::sendSony(uint64_t data, uint16_t nbits, uint16_t repeat) { + _sendSony(data, nbits, repeat, kSonyStdFreq); +} + +// Send an alternative 38kHz Sony/SIRC(Serial Infra-Red Control) message. +// +// Args: +// data: message to be sent. +// nbits: Nr. of bits of the message to be sent. +// repeat: Nr. of additional times the message is to be sent. (Default: 3) +// +// Status: STABLE / Known working. +// +// Notes: +// - `sendSony38()`` should typically be called with repeat=3 as these Sony +// devices expect the message to be sent at least 4 times. +// - Messages send via this method will be detected by this library as just +// `SONY`, not `SONY_38K` as the library has no way to determine the +// modulation frequency used. Hence, there is no `decodeSony38()`. +// +// Ref: +// http://www.sbprojects.com/knowledge/ir/sirc.php +// https://github.com/crankyoldgit/IRremoteESP8266/issues/1018 +void IRsend::sendSony38(uint64_t data, uint16_t nbits, uint16_t repeat) { + _sendSony(data, nbits, repeat, kSonyAltFreq); +} + +// Internal procedure to generate a Sony/SIRC(Serial Infra-Red Control) message. +// +// Args: +// data: message to be sent. +// nbits: Nr. of bits of the message to be sent. +// repeat: Nr. of additional times the message is to be sent. +// freq: Frequency of the modulation to transmit at. (Hz or kHz) +// +// Status: STABLE / Known working. +// +// Ref: +// http://www.sbprojects.com/knowledge/ir/sirc.php +void IRsend::_sendSony(uint64_t data, uint16_t nbits, uint16_t repeat, + uint16_t freq) { sendGeneric(kSonyHdrMark, kSonySpace, kSonyOneMark, kSonySpace, kSonyZeroMark, kSonySpace, 0, // No Footer mark. - kSonyMinGap, kSonyRptLength, data, nbits, 40, true, repeat, 33); + kSonyMinGap, kSonyRptLength, data, nbits, freq, true, repeat, 33); } // Convert Sony/SIRC command, address, & extended bits into sendSony format. @@ -149,6 +194,7 @@ bool IRrecv::decodeSony(decode_results *results, uint16_t nbits, bool strict) { // Success results->bits = actualBits; results->value = data; + // We can't detect SONY_38K messages so always assume it is just `SONY` 40kHz. results->decode_type = SONY; // Message comes in LSB first. Convert ot MSB first. data = reverseBits(data, actualBits); diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Tcl.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Tcl.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Tcl.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Tcl.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Tcl.h b/lib/IRremoteESP8266-2.7.3/src/ir_Tcl.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Tcl.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Tcl.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Teco.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Teco.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Teco.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Teco.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Teco.h b/lib/IRremoteESP8266-2.7.3/src/ir_Teco.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Teco.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Teco.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Toshiba.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Toshiba.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Toshiba.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Toshiba.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Toshiba.h b/lib/IRremoteESP8266-2.7.3/src/ir_Toshiba.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Toshiba.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Toshiba.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Trotec.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Trotec.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Trotec.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Trotec.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Trotec.h b/lib/IRremoteESP8266-2.7.3/src/ir_Trotec.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Trotec.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Trotec.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Vestel.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Vestel.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Vestel.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Vestel.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Vestel.h b/lib/IRremoteESP8266-2.7.3/src/ir_Vestel.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Vestel.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Vestel.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Whirlpool.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Whirlpool.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Whirlpool.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Whirlpool.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Whirlpool.h b/lib/IRremoteESP8266-2.7.3/src/ir_Whirlpool.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Whirlpool.h rename to lib/IRremoteESP8266-2.7.3/src/ir_Whirlpool.h diff --git a/lib/IRremoteESP8266-2.7.2/src/ir_Whynter.cpp b/lib/IRremoteESP8266-2.7.3/src/ir_Whynter.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/ir_Whynter.cpp rename to lib/IRremoteESP8266-2.7.3/src/ir_Whynter.cpp diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/README.md b/lib/IRremoteESP8266-2.7.3/src/locale/README.md similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/README.md rename to lib/IRremoteESP8266-2.7.3/src/locale/README.md diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/de-CH.h b/lib/IRremoteESP8266-2.7.3/src/locale/de-CH.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/de-CH.h rename to lib/IRremoteESP8266-2.7.3/src/locale/de-CH.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/de-DE.h b/lib/IRremoteESP8266-2.7.3/src/locale/de-DE.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/de-DE.h rename to lib/IRremoteESP8266-2.7.3/src/locale/de-DE.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/defaults.h b/lib/IRremoteESP8266-2.7.3/src/locale/defaults.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/defaults.h rename to lib/IRremoteESP8266-2.7.3/src/locale/defaults.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/en-AU.h b/lib/IRremoteESP8266-2.7.3/src/locale/en-AU.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/en-AU.h rename to lib/IRremoteESP8266-2.7.3/src/locale/en-AU.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/en-IE.h b/lib/IRremoteESP8266-2.7.3/src/locale/en-IE.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/en-IE.h rename to lib/IRremoteESP8266-2.7.3/src/locale/en-IE.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/en-UK.h b/lib/IRremoteESP8266-2.7.3/src/locale/en-UK.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/en-UK.h rename to lib/IRremoteESP8266-2.7.3/src/locale/en-UK.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/en-US.h b/lib/IRremoteESP8266-2.7.3/src/locale/en-US.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/en-US.h rename to lib/IRremoteESP8266-2.7.3/src/locale/en-US.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/es-ES.h b/lib/IRremoteESP8266-2.7.3/src/locale/es-ES.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/es-ES.h rename to lib/IRremoteESP8266-2.7.3/src/locale/es-ES.h diff --git a/lib/IRremoteESP8266-2.7.2/src/locale/fr-FR.h b/lib/IRremoteESP8266-2.7.3/src/locale/fr-FR.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/src/locale/fr-FR.h rename to lib/IRremoteESP8266-2.7.3/src/locale/fr-FR.h diff --git a/lib/IRremoteESP8266-2.7.2/test/IRac_test.cpp b/lib/IRremoteESP8266-2.7.3/test/IRac_test.cpp similarity index 95% rename from lib/IRremoteESP8266-2.7.2/test/IRac_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/IRac_test.cpp index 2c17e2a92..875485eee 100644 --- a/lib/IRremoteESP8266-2.7.2/test/IRac_test.cpp +++ b/lib/IRremoteESP8266-2.7.3/test/IRac_test.cpp @@ -108,29 +108,29 @@ TEST(TestIRac, Coolix) { "f38000d50" // 38kHz Frequency and 50% duty-cycle. // Start of message #1 (i.e. Repeat '0') // Header - "m4480s4480" + "m4692s4416" // Data - "m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s560" - "m560s1680m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s552m552s552" + "m552s1656m552s552m552s552m552s1656m552s552m552s552m552s1656m552s1656" // Footer - "m560s5040" + "m552s5244" // End of message #1 (i.e. Repeat '0') // Start of message #2 (i.e. Repeat '1') // Header - "m4480s4480" + "m4692s4416" // Data - "m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s560" - "m560s1680m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s552m552s552" + "m552s1656m552s552m552s552m552s1656m552s552m552s552m552s1656m552s1656" // Footer - "m560s105040", + "m552s105244", // End of message #2 (i.e. Repeat '1') // Note: the two messages (#1 & #2) are identical. ac._irsend.outputStr()); @@ -851,6 +851,7 @@ TEST(TestIRac, Panasonic) { stdAc::swingh_t::kLeft, // Horizontal swing true, // Quiet false, // Turbo + false, // Filter 19 * 60 + 17); // Clock ASSERT_EQ(expected_nke, ac.toString()); ac._irsend.makeDecodeResult(); @@ -862,7 +863,8 @@ TEST(TestIRac, Panasonic) { char expected_dke[] = "Model: 3 (DKE), Power: On, Mode: 3 (Cool), Temp: 18C, Fan: 4 (High), " "Swing(V): 2 (High), Swing(H): 6 (Middle), " - "Quiet: Off, Powerful: On, Clock: 19:17, On Timer: Off, Off Timer: Off"; + "Quiet: Off, Powerful: On, Ion: On, " + "Clock: 19:17, On Timer: Off, Off Timer: Off"; ac._irsend.reset(); irac.panasonic(&ac, kPanasonicDke, // Model @@ -874,6 +876,7 @@ TEST(TestIRac, Panasonic) { stdAc::swingh_t::kMiddle, // Horizontal swing false, // Quiet true, // Turbo + true, // Filter 19 * 60 + 17); // Clock ASSERT_EQ(expected_dke, ac.toString()); ac._irsend.makeDecodeResult(); @@ -1475,39 +1478,39 @@ TEST(TestIRac, Issue821) { ASSERT_EQ("Power: On, Light: Toggle", IRAcUtils::resultAcToString(&ac._irsend.capture)); EXPECT_EQ( - "f38000d50m" - "4480s4480" - "m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s560m560s560m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560" - "m560s5040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s560m560s560m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560" - "m560s105040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560" - "m560s560m560s1680m560s560m560s560m560s1680m560s560m560s560m560s560" - "m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s1680" - "m560s5040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560" - "m560s560m560s1680m560s560m560s560m560s1680m560s560m560s560m560s560" - "m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s1680" - "m560s105040", + "f38000d50" + "m4692s4416" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552" + "m552s5244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s552" + "m552s105244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656" + "m552s5244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552" + "m552s1656m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656" + "m552s105244", ac._irsend.outputStr()); } diff --git a/lib/IRremoteESP8266-2.7.2/test/IRrecv_test.cpp b/lib/IRremoteESP8266-2.7.3/test/IRrecv_test.cpp similarity index 95% rename from lib/IRremoteESP8266-2.7.2/test/IRrecv_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/IRrecv_test.cpp index cda7b747f..9dff78c75 100644 --- a/lib/IRremoteESP8266-2.7.2/test/IRrecv_test.cpp +++ b/lib/IRremoteESP8266-2.7.3/test/IRrecv_test.cpp @@ -565,8 +565,8 @@ TEST(TestMatchGeneric, NormalWithNoAtleast) { IRrecv irrecv(1); irsend.begin(); - uint16_t good_entries_trailing_space = 12; - uint16_t good_trailing_space_data[good_entries_trailing_space] = { + const uint16_t kgood_entries_trailing_space = 12; + uint16_t good_trailing_space_data[kgood_entries_trailing_space] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -576,8 +576,8 @@ TEST(TestMatchGeneric, NormalWithNoAtleast) { 3000, // Footer mark 15000}; // Footer space - uint16_t good_entries_no_trailing_space = 11; - uint16_t good_no_trailing_space_data[good_entries_no_trailing_space] = { + const uint16_t kgood_entries_no_trailing_space = 11; + uint16_t good_no_trailing_space_data[kgood_entries_no_trailing_space] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -588,7 +588,7 @@ TEST(TestMatchGeneric, NormalWithNoAtleast) { uint16_t offset = kStartOffset; irsend.reset(); - irsend.sendRaw(good_trailing_space_data, good_entries_trailing_space, 38000); + irsend.sendRaw(good_trailing_space_data, kgood_entries_trailing_space, 38000); irsend.makeDecodeResult(); uint64_t result_data = 0; uint16_t entries_used = 0; @@ -607,7 +607,7 @@ TEST(TestMatchGeneric, NormalWithNoAtleast) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(good_entries_trailing_space, entries_used); + EXPECT_EQ(kgood_entries_trailing_space, entries_used); // Same again but with a footer space mis-match, which should fail. result_data = 0; @@ -628,7 +628,7 @@ TEST(TestMatchGeneric, NormalWithNoAtleast) { // Same again as first part but with no footer space data as the last entry. irsend.reset(); result_data = 0; - irsend.sendRaw(good_no_trailing_space_data, good_entries_no_trailing_space, + irsend.sendRaw(good_no_trailing_space_data, kgood_entries_no_trailing_space, 38000); irsend.makeDecodeResult(); entries_used = irrecv.matchGeneric( @@ -646,7 +646,7 @@ TEST(TestMatchGeneric, NormalWithNoAtleast) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(good_entries_no_trailing_space, entries_used); + EXPECT_EQ(kgood_entries_no_trailing_space, entries_used); } @@ -655,8 +655,8 @@ TEST(TestMatchGeneric, NormalWithAtleast) { IRrecv irrecv(1); irsend.begin(); - uint16_t good_entries_trailing_space = 12; - uint16_t good_trailing_space_data[good_entries_trailing_space] = { + const uint16_t kgood_entries_trailing_space = 12; + uint16_t good_trailing_space_data[kgood_entries_trailing_space] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -666,8 +666,8 @@ TEST(TestMatchGeneric, NormalWithAtleast) { 3000, // Footer mark 15000}; // Footer space - uint16_t good_entries_no_trailing_space = 11; - uint16_t good_no_trailing_space_data[good_entries_no_trailing_space] = { + const uint16_t kgood_entries_no_trailing_space = 11; + uint16_t good_no_trailing_space_data[kgood_entries_no_trailing_space] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -678,7 +678,7 @@ TEST(TestMatchGeneric, NormalWithAtleast) { uint16_t offset = kStartOffset; irsend.reset(); - irsend.sendRaw(good_trailing_space_data, good_entries_trailing_space, 38000); + irsend.sendRaw(good_trailing_space_data, kgood_entries_trailing_space, 38000); irsend.makeDecodeResult(); uint64_t result_data = 0; uint16_t entries_used = 0; @@ -697,7 +697,7 @@ TEST(TestMatchGeneric, NormalWithAtleast) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(good_entries_trailing_space, entries_used); + EXPECT_EQ(kgood_entries_trailing_space, entries_used); // Same again but with a footer space under-match. result_data = 0; @@ -716,7 +716,7 @@ TEST(TestMatchGeneric, NormalWithAtleast) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(good_entries_trailing_space, entries_used); + EXPECT_EQ(kgood_entries_trailing_space, entries_used); // Same again but with a footer space under-match using less bits so the // atleast footer isn't the last entry in the buffer. @@ -737,7 +737,7 @@ TEST(TestMatchGeneric, NormalWithAtleast) { EXPECT_EQ(0b101, result_data); // -2 because we reduced nbits by 1. EXPECT_EQ(irsend.capture.rawlen - kStartOffset - 2, entries_used); - EXPECT_EQ(good_entries_trailing_space - 2, entries_used); + EXPECT_EQ(kgood_entries_trailing_space - 2, entries_used); // Same again but with a footer space over-match, which should fail. result_data = 0; @@ -758,7 +758,7 @@ TEST(TestMatchGeneric, NormalWithAtleast) { // Same as first part but with no footer space data as the last entry. irsend.reset(); result_data = 0; - irsend.sendRaw(good_no_trailing_space_data, good_entries_no_trailing_space, + irsend.sendRaw(good_no_trailing_space_data, kgood_entries_no_trailing_space, 38000); irsend.makeDecodeResult(); entries_used = irrecv.matchGeneric( @@ -776,7 +776,7 @@ TEST(TestMatchGeneric, NormalWithAtleast) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(good_entries_no_trailing_space, entries_used); + EXPECT_EQ(kgood_entries_no_trailing_space, entries_used); } TEST(TestMatchGeneric, FailureCases) { @@ -784,8 +784,8 @@ TEST(TestMatchGeneric, FailureCases) { IRrecv irrecv(1); irsend.begin(); - uint16_t entries = 11; - uint16_t data[entries] = { + const uint16_t kentries = 11; + uint16_t data[kentries] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -796,7 +796,7 @@ TEST(TestMatchGeneric, FailureCases) { uint16_t offset = kStartOffset; irsend.reset(); - irsend.sendRaw(data, entries, 38000); + irsend.sendRaw(data, kentries, 38000); irsend.makeDecodeResult(); uint16_t entries_used = 0; @@ -942,8 +942,8 @@ TEST(TestMatchGeneric, MissingHeaderFooter) { IRrecv irrecv(1); irsend.begin(); - uint16_t entries = 11; - uint16_t data[entries] = { + const uint16_t kentries = 11; + uint16_t data[kentries] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -954,7 +954,7 @@ TEST(TestMatchGeneric, MissingHeaderFooter) { uint16_t offset = kStartOffset; irsend.reset(); - irsend.sendRaw(data, entries, 38000); + irsend.sendRaw(data, kentries, 38000); irsend.makeDecodeResult(); uint16_t entries_used = 0; @@ -976,7 +976,7 @@ TEST(TestMatchGeneric, MissingHeaderFooter) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset - 1, entries_used); - EXPECT_EQ(entries - 1, entries_used); + EXPECT_EQ(kentries - 1, entries_used); // No header match (should fail) entries_used = irrecv.matchGeneric( @@ -1010,7 +1010,7 @@ TEST(TestMatchGeneric, MissingHeaderFooter) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - offset, entries_used); - EXPECT_EQ(entries - 2, entries_used); + EXPECT_EQ(kentries - 2, entries_used); } TEST(TestMatchGeneric, BitOrdering) { @@ -1018,8 +1018,8 @@ TEST(TestMatchGeneric, BitOrdering) { IRrecv irrecv(1); irsend.begin(); - uint16_t entries = 11; - uint16_t data[entries] = { + const uint16_t kentries = 11; + uint16_t data[kentries] = { 8000, // Header mark 4000, // Header space 500, 2000, // Bit #0 (1) @@ -1030,7 +1030,7 @@ TEST(TestMatchGeneric, BitOrdering) { uint16_t offset = kStartOffset; irsend.reset(); - irsend.sendRaw(data, entries, 38000); + irsend.sendRaw(data, kentries, 38000); irsend.makeDecodeResult(); uint16_t entries_used = 0; @@ -1052,7 +1052,7 @@ TEST(TestMatchGeneric, BitOrdering) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b1010, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(entries, entries_used); + EXPECT_EQ(kentries, entries_used); // LSB order entries_used = irrecv.matchGeneric( @@ -1070,7 +1070,7 @@ TEST(TestMatchGeneric, BitOrdering) { ASSERT_NE(0, entries_used); EXPECT_EQ(0b0101, result_data); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(entries, entries_used); + EXPECT_EQ(kentries, entries_used); } TEST(TestMatchGeneric, UsingBytes) { @@ -1078,8 +1078,8 @@ TEST(TestMatchGeneric, UsingBytes) { IRrecv irrecv(1); irsend.begin(); - uint16_t entries = 32; - uint16_t data[entries] = { + const uint16_t kentries = 32; + uint16_t data[kentries] = { // No header 500, 2000, // Byte #0 Bit #0 (1) 500, 1000, // Byte #0 Bit #1 (0) @@ -1100,7 +1100,7 @@ TEST(TestMatchGeneric, UsingBytes) { uint16_t offset = kStartOffset; irsend.reset(); - irsend.sendRaw(data, entries, 38000); + irsend.sendRaw(data, kentries, 38000); irsend.makeDecodeResult(); uint16_t entries_used = 0; @@ -1123,7 +1123,7 @@ TEST(TestMatchGeneric, UsingBytes) { EXPECT_EQ(0b10101010, result_data[0]); EXPECT_EQ(0b11110000, result_data[1]); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(entries, entries_used); + EXPECT_EQ(kentries, entries_used); // LSB order entries_used = irrecv.matchGeneric( @@ -1142,7 +1142,7 @@ TEST(TestMatchGeneric, UsingBytes) { EXPECT_EQ(0b01010101, result_data[0]); EXPECT_EQ(0b00001111, result_data[1]); EXPECT_EQ(irsend.capture.rawlen - kStartOffset, entries_used); - EXPECT_EQ(entries, entries_used); + EXPECT_EQ(kentries, entries_used); // Asking for too much. entries_used = irrecv.matchGeneric( diff --git a/lib/IRremoteESP8266-2.7.2/test/IRrecv_test.h b/lib/IRremoteESP8266-2.7.3/test/IRrecv_test.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/IRrecv_test.h rename to lib/IRremoteESP8266-2.7.3/test/IRrecv_test.h diff --git a/lib/IRremoteESP8266-2.7.2/test/IRsend_test.cpp b/lib/IRremoteESP8266-2.7.3/test/IRsend_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/IRsend_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/IRsend_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/IRsend_test.h b/lib/IRremoteESP8266-2.7.3/test/IRsend_test.h similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/IRsend_test.h rename to lib/IRremoteESP8266-2.7.3/test/IRsend_test.h diff --git a/lib/IRremoteESP8266-2.7.2/test/IRutils_test.cpp b/lib/IRremoteESP8266-2.7.3/test/IRutils_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/IRutils_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/IRutils_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/Makefile b/lib/IRremoteESP8266-2.7.3/test/Makefile similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/Makefile rename to lib/IRremoteESP8266-2.7.3/test/Makefile diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Aiwa_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Aiwa_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Aiwa_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Aiwa_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Amcor_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Amcor_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Amcor_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Amcor_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Argo_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Argo_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Argo_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Argo_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Carrier_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Carrier_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Carrier_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Carrier_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Coolix_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Coolix_test.cpp similarity index 69% rename from lib/IRremoteESP8266-2.7.2/test/ir_Coolix_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Coolix_test.cpp index 514e16dba..226e1aa68 100644 --- a/lib/IRremoteESP8266-2.7.2/test/ir_Coolix_test.cpp +++ b/lib/IRremoteESP8266-2.7.3/test/ir_Coolix_test.cpp @@ -17,66 +17,66 @@ TEST(TestSendCoolix, SendDataOnly) { irsend.sendCOOLIX(0x0); EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s5040" - "m4480s4480" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s105040", + "m4692s4416" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s5244" + "m4692s4416" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s105244", irsend.outputStr()); irsend.reset(); irsend.sendCOOLIX(0xAA55AA); EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s5040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s105040", + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s5244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s105244", irsend.outputStr()); irsend.reset(); irsend.sendCOOLIX(0xFFFFFF); EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s5040" - "m4480s4480" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s105040", + "m4692s4416" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s5244" + "m4692s4416" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s105244", irsend.outputStr()); } @@ -89,50 +89,50 @@ TEST(TestSendCoolix, SendWithRepeats) { irsend.sendCOOLIX(0xAA55AA, kCoolixBits, 1); // 1 repeat. EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s5040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s105040", + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s5244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s105244", irsend.outputStr()); irsend.sendCOOLIX(0xAA55AA, kCoolixBits, 2); // 2 repeats. EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s5040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s5040" - "m4480s4480" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680" - "m560s105040", + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s5244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s5244" + "m4692s4416" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656" + "m552s105244", irsend.outputStr()); } @@ -145,56 +145,56 @@ TEST(TestSendCoolix, SendUnusualSize) { irsend.sendCOOLIX(0x0, 8); EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s5040" - "m4480s4480" - "m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560" - "m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" - "m560s105040", + "m4692s4416" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s5244" + "m4692s4416" + "m552s552m552s552m552s552m552s552m552s552m552s552m552s552m552s552" + "m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" + "m552s105244", irsend.outputStr()); irsend.reset(); irsend.sendCOOLIX(0x1234567890ABCDEF, 64); EXPECT_EQ( "f38000d50" - "m4480s4480" - "m560s560m560s560m560s560m560s1680m560s560m560s560m560s1680m560s560" - "m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560" - "m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s1680m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560m560s1680" - "m560s560m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560" - "m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680m560s1680" - "m560s1680m560s560m560s560m560s1680m560s560m560s560m560s560m560s560" - "m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560" - "m560s1680m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" - "m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s1680m560s560m560s560m560s560m560s560" - "m560s5040" - "m4480s4480" - "m560s560m560s560m560s560m560s1680m560s560m560s560m560s1680m560s560" - "m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560" - "m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s1680m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680m560s560" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560m560s1680" - "m560s560m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560" - "m560s1680m560s560m560s560m560s560m560s560m560s1680m560s1680m560s1680" - "m560s1680m560s560m560s560m560s1680m560s560m560s560m560s560m560s560" - "m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680" - "m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s1680" - "m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s560" - "m560s1680m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" - "m560s560m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" - "m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s1680m560s1680" - "m560s560m560s560m560s560m560s1680m560s560m560s560m560s560m560s560" - "m560s105040", + "m4692s4416" + "m552s552m552s552m552s552m552s1656m552s552m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s552" + "m552s1656m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s552m552s1656" + "m552s552m552s1656m552s1656m552s1656m552s1656m552s552m552s552m552s552" + "m552s1656m552s552m552s552m552s552m552s552m552s1656m552s1656m552s1656" + "m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s552" + "m552s1656m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s552m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s1656m552s552m552s552m552s552m552s552" + "m552s5244" + "m4692s4416" + "m552s552m552s552m552s552m552s1656m552s552m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s1656m552s1656m552s552m552s1656m552s552m552s552" + "m552s1656m552s1656m552s552m552s552m552s1656m552s552m552s1656m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s1656m552s552" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s552m552s1656" + "m552s552m552s1656m552s1656m552s1656m552s1656m552s552m552s552m552s552" + "m552s1656m552s552m552s552m552s552m552s552m552s1656m552s1656m552s1656" + "m552s1656m552s552m552s552m552s1656m552s552m552s552m552s552m552s552" + "m552s552m552s1656m552s1656m552s552m552s1656m552s1656m552s1656m552s1656" + "m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s1656" + "m552s552m552s1656m552s552m552s1656m552s552m552s1656m552s552m552s552" + "m552s1656m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" + "m552s552m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" + "m552s1656m552s1656m552s1656m552s552m552s1656m552s1656m552s1656m552s1656" + "m552s552m552s552m552s552m552s1656m552s552m552s552m552s552m552s552" + "m552s105244", irsend.outputStr()); // Bit sizes must be a multiple of 8. @@ -719,33 +719,33 @@ TEST(TestCoolixACClass, Issue722) { // Raw data supplied by @mariusmotea "f38000d50" // 4434,4376, - "m4480s4480" + "m4692s4416" // 566,1614,592,504,566,1618,566,1616,568,528,564,532,564,1616,568,532, - "m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560" + "m552s1656m552s552m552s1656m552s1656m552s552m552s552m552s1656m552s552" // 566,530,566,1620,568,528,566,530,566,1618,564,1618,566,530,564,1624, - "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s552m552s1656" // 538,560,566,530,564,1620,566,1618,566,1618,566,1616,566,1616,566,1620, - "m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680" + "m552s552m552s552m552s1656m552s1656m552s1656m552s1656m552s1656m552s1656" // 568,1620,566,1616,566,530,566,530,564,530,562,532,564,530,566,530, - "m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560" + "m552s1656m552s1656m552s552m552s552m552s552m552s552m552s552m552s552" // 566,1622,566,1616,540,1642,566,528,566,530,566,1616,566,530,566,532, - "m560s1680m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s560" + "m552s1656m552s1656m552s1656m552s552m552s552m552s1656m552s552m552s552" // 564,532,564,530,566,530,566,1614,566,1616,562,532,564,1620,566,1618, - "m560s560m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s1680" + "m552s552m552s552m552s552m552s1656m552s1656m552s552m552s1656m552s1656" // 538,5254,4432,4364,566,1616,568,530,564,1620,568,1616,564,532,564,530, - "m560s5040m4480s4480m560s1680m560s560m560s1680m560s1680m560s560m560s560" + "m552s5244m4692s4416m552s1656m552s552m552s1656m552s1656m552s552m552s552" // 566,1616,566,532,564,532,566,1620,568,528,566,530,566,1616,564,1618, - "m560s1680m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680" + "m552s1656m552s552m552s552m552s1656m552s552m552s552m552s1656m552s1656" // 566,530,566,1622,566,532,566,528,566,1620,568,1614,566,1618,566,1618, - "m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680" + "m552s552m552s1656m552s552m552s552m552s1656m552s1656m552s1656m552s1656" // 566,1614,568,1618,566,1622,568,1616,566,530,564,530,566,530,566,528, - "m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560" + "m552s1656m552s1656m552s1656m552s1656m552s552m552s552m552s552m552s552" // 564,530,566,532,566,1622,564,1616,566,1616,564,532,564,530,564,1616, - "m560s560m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s1680" + "m552s552m552s552m552s1656m552s1656m552s1656m552s552m552s552m552s1656" // 564,530,564,532,566,530,564,530,566,528,564,1618,564,1618,564,532, - "m560s560m560s560m560s560m560s560m560s560m560s1680m560s1680m560s560" + "m552s552m552s552m552s552m552s552m552s552m552s1656m552s1656m552s552" // 564,1620,566,1618,562 // Raw data matches what is expected. - "m560s1680m560s1680m560s105040", ac._irsend.outputStr()); + "m552s1656m552s1656m552s105244", ac._irsend.outputStr()); } TEST(TestCoolixACClass, Issue985) { diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Daikin_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Daikin_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Daikin_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Daikin_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Denon_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Denon_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Denon_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Denon_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Dish_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Dish_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Dish_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Dish_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Electra_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Electra_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Electra_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Electra_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Fujitsu_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Fujitsu_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Fujitsu_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Fujitsu_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_GICable_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_GICable_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_GICable_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_GICable_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_GlobalCache_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_GlobalCache_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_GlobalCache_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_GlobalCache_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Goodweather_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Goodweather_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Goodweather_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Goodweather_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Gree_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Gree_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Gree_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Gree_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Haier_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Haier_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Haier_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Haier_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Hitachi_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Hitachi_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Hitachi_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Hitachi_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Inax_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Inax_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Inax_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Inax_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_JVC_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_JVC_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_JVC_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_JVC_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Kelvinator_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Kelvinator_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Kelvinator_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Kelvinator_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_LG_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_LG_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_LG_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_LG_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Lasertag_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Lasertag_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Lasertag_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Lasertag_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Lego_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Lego_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Lego_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Lego_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Lutron_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Lutron_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Lutron_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Lutron_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_MWM_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_MWM_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_MWM_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_MWM_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Magiquest_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Magiquest_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Magiquest_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Magiquest_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Midea_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Midea_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Midea_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Midea_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_MitsubishiHeavy_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_MitsubishiHeavy_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_MitsubishiHeavy_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_MitsubishiHeavy_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Mitsubishi_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Mitsubishi_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Mitsubishi_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Mitsubishi_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_NEC_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_NEC_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_NEC_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_NEC_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Neoclima_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Neoclima_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Neoclima_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Neoclima_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Nikai_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Nikai_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Nikai_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Nikai_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Panasonic_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Panasonic_test.cpp similarity index 96% rename from lib/IRremoteESP8266-2.7.2/test/ir_Panasonic_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Panasonic_test.cpp index 471a324c8..97f9bbb28 100644 --- a/lib/IRremoteESP8266-2.7.2/test/ir_Panasonic_test.cpp +++ b/lib/IRremoteESP8266-2.7.3/test/ir_Panasonic_test.cpp @@ -736,6 +736,26 @@ TEST(TestIRPanasonicAcClass, QuietAndPowerful) { EXPECT_FALSE(pana.getPowerful()); } +TEST(TestIRPanasonicAcClass, SetAndGetIon) { + IRPanasonicAc ac(0); + // Ion Filter only works for DKE. + ac.setModel(kPanasonicDke); + ac.setIon(true); + EXPECT_TRUE(ac.getIon()); + ac.setIon(false); + EXPECT_FALSE(ac.getIon()); + ac.setIon(true); + EXPECT_TRUE(ac.getIon()); + + // Now try a different (a guess at unsupported) model. + ac.setModel(kPanasonicRkr); + EXPECT_FALSE(ac.getIon()); + ac.setIon(true); + EXPECT_FALSE(ac.getIon()); + ac.setIon(false); + EXPECT_FALSE(ac.getIon()); +} + TEST(TestIRPanasonicAcClass, HumanReadable) { IRPanasonicAc pana(0); EXPECT_EQ( @@ -767,7 +787,7 @@ TEST(TestIRPanasonicAcClass, HumanReadable) { EXPECT_EQ( "Model: 3 (DKE), Power: Off, Mode: 4 (Heat), Temp: 30C, " "Fan: 4 (High), Swing(V): 15 (Auto), " - "Swing(H): 11 (Right), Quiet: On, Powerful: Off, " + "Swing(H): 11 (Right), Quiet: On, Powerful: Off, Ion: Off, " "Clock: 00:00, On Timer: Off, Off Timer: Off", pana.toString()); } @@ -1180,3 +1200,38 @@ TEST(TestIRPanasonicAcClass, toCommon) { ASSERT_EQ(kPanasonicAcSwingVMiddle, IRPanasonicAc::convertSwingV(stdAc::swingv_t::kMiddle)); } + +// +// Test for DKE/DKW model / see issue #1024 +TEST(TestDecodePanasonicAC, DkeIonRealMessages) { + IRsendTest irsend(0); + IRrecv irrecv(0); + irsend.begin(); + + // Data from Issue #1024 + // 0x0220E004000000060220E004004F3280AF0D000660000001000630 + uint8_t dkeIonOff[kPanasonicAcStateLength] = { + 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, + 0x20, 0xE0, 0x04, 0x00, 0x4F, 0x32, 0x80, 0xAF, 0x0D, + 0x00, 0x06, 0x60, 0x00, 0x00, 0x01, 0x00, 0x06, 0x30}; + + // 0x0220E004000000060220E004004F3280AF0D000660000101000631 + uint8_t dkeIonOn[kPanasonicAcStateLength] = { + 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, + 0x20, 0xE0, 0x04, 0x00, 0x4F, 0x32, 0x80, 0xAF, 0x0D, + 0x00, 0x06, 0x60, 0x00, 0x01, 0x01, 0x00, 0x06, 0x31}; + + IRPanasonicAc ac(0); + ac.setRaw(dkeIonOff); + EXPECT_EQ( + "Model: 3 (DKE), Power: On, Mode: 4 (Heat), Temp: 25C, Fan: 7 (Auto), " + "Swing(V): 15 (Auto), Swing(H): 13 (Auto), Quiet: Off, Powerful: Off, " + "Ion: Off, Clock: 00:00, On Timer: 00:00, Off Timer: 00:00", + ac.toString()); + ac.setRaw(dkeIonOn); + EXPECT_EQ( + "Model: 3 (DKE), Power: On, Mode: 4 (Heat), Temp: 25C, Fan: 7 (Auto), " + "Swing(V): 15 (Auto), Swing(H): 13 (Auto), Quiet: Off, Powerful: Off, " + "Ion: On, Clock: 00:00, On Timer: 00:00, Off Timer: 00:00", + ac.toString()); +} diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Pioneer_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Pioneer_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Pioneer_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Pioneer_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Pronto_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Pronto_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Pronto_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Pronto_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_RC5_RC6_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_RC5_RC6_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_RC5_RC6_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_RC5_RC6_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_RCMM_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_RCMM_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_RCMM_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_RCMM_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Samsung_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Samsung_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Samsung_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Samsung_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Sanyo_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Sanyo_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Sanyo_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Sanyo_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Sharp_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Sharp_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Sharp_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Sharp_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Sherwood_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Sherwood_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Sherwood_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Sherwood_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Sony_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Sony_test.cpp similarity index 61% rename from lib/IRremoteESP8266-2.7.2/test/ir_Sony_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Sony_test.cpp index 51bacbd6d..18fc58334 100644 --- a/lib/IRremoteESP8266-2.7.2/test/ir_Sony_test.cpp +++ b/lib/IRremoteESP8266-2.7.3/test/ir_Sony_test.cpp @@ -360,3 +360,228 @@ TEST(TestEncodeSony, Issue476) { EXPECT_EQ(0xE2, (0x7156 >> 7) & 0xFF); // extended (top 8 of 15 bits) EXPECT_EQ(0x6AB47, irsend.encodeSony(20, 0x56, 0x1A, 0xE2)); } + +// Encoding & Decode 15 bit Sony messages. Issue #1018 +TEST(TestEncodeSony, Issue1018) { + IRsendTest irsend(0); + IRrecv irrecv(0); + irsend.begin(); + + irsend.reset(); + irsend.sendSony(0x240C, 15); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(SONY, irsend.capture.decode_type); + EXPECT_EQ(15, irsend.capture.bits); + EXPECT_EQ(0x240C, irsend.capture.value); // 15 bits + EXPECT_EQ(0x30, irsend.capture.address); + EXPECT_EQ(0x12, irsend.capture.command); + EXPECT_EQ( + "f40000d33" + "m2400s600" // Message + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200" + "m2400s600" // Repeat #1 + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200" + "m2400s600" // Repeat #2 + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200", + irsend.outputStr()); + + irsend.reset(); + uint16_t rawData[127] = { + 2448, 550, + 648, 544, 1250, 546, 648, 548, 648, 550, 1272, 524, 648, 550, 644, 550, + 674, 524, 648, 550, 648, 544, 674, 524, 1270, 524, 1246, 550, 674, 524, + 648, 22404, + 2474, 524, + 674, 520, 1250, 548, 648, 544, 674, 524, 1270, 524, 648, 550, 648, 546, + 674, 524, 648, 546, 652, 546, 674, 524, 1270, 524, 1272, 522, 674, 520, + 648, 22404, + 2452, 544, + 674, 524, 1270, 524, 674, 518, 674, 522, 1246, 550, 674, 524, 648, 544, + 674, 524, 648, 546, 674, 524, 674, 518, 1276, 518, 1276, 524, 648, 546, + 674, 22380, + 2474, 520, + 674, 524, 1250, 544, 674, 524, 674, 518, 1276, 520, 674, 522, 674, 524, + 674, 520, 674, 524, 674, 524, 674, 518, 1276, 518, 1276, 524, 672, 524, + 648}; // SONY 240C + + irsend.sendRaw(rawData, 127, 40); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(SONY, irsend.capture.decode_type); + EXPECT_EQ(15, irsend.capture.bits); + EXPECT_EQ(0x240C, irsend.capture.value); // 15 bits + EXPECT_EQ(0x30, irsend.capture.address); + EXPECT_EQ(0x12, irsend.capture.command); + EXPECT_EQ( + "f40000d50" + "m2448s550" // Message + "m648s544m1250s546m648s548m648s550m1272s524m648s550m644s550" + "m674s524m648s550m648s544m674s524m1270s524m1246s550m674s524" + "m648s22404" + "m2474s524" // Repeat #1 + "m674s520m1250s548m648s544m674s524m1270s524m648s550m648s546" + "m674s524m648s546m652s546m674s524m1270s524m1272s522m674s520" + "m648s22404" + "m2452s544" // Repeat #2 + "m674s524m1270s524m674s518m674s522m1246s550m674s524m648s544" + "m674s524m648s546m674s524m674s518m1276s518m1276s524m648s546" + "m674s22380" + "m2474s520" // Repeat #3 + "m674s524m1250s544m674s524m674s518m1276s520m674s522m674s524" + "m674s520m674s524m674s524m674s518m1276s518m1276s524m672s524" + "m648", + irsend.outputStr()); + + // Now see if we can reproduce it with `sendSony` + irsend.reset(); + irsend.sendSony(0x240C, 15, 3); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(SONY, irsend.capture.decode_type); + EXPECT_EQ(15, irsend.capture.bits); + EXPECT_EQ(0x240C, irsend.capture.value); // 15 bits + EXPECT_EQ(0x30, irsend.capture.address); + EXPECT_EQ(0x12, irsend.capture.command); + + // Compare expected result with real `rawData` result. + // Comparison notes: + // * Seems visually the same. i.e. '1' where '1's should be etc. + // * Timings are *roughly* the same. They should be within device + // tollerance. + // TL;DR: Looks fine/the same/as expected. + EXPECT_EQ( + "f40000d33" + "m2400s600" // Message + // "m2448s550" (Commented out data is from `rawData` sample above.) + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + // "m648s544m1250s546m648s548m648s550m1272s524m648s550m644s550" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + // "m674s524m648s550m648s544m674s524m1270s524m1246s550m674s524" + "m600s22200" + // "m648s22404" + "m2400s600" // Repeat #1 + // "m2474s524" + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + // "m674s520m1250s548m648s544m674s524m1270s524m648s550m648s546" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + // "m674s524m648s546m652s546m674s524m1270s524m1272s522m674s520" + "m600s22200" + // "m648s22404" + "m2400s600" // Repeat #2 + // "m2452s544" + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + // "m674s524m1270s524m674s518m674s522m1246s550m674s524m648s544" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + // "m674s524m648s546m674s524m674s518m1276s518m1276s524m648s546" + "m600s22200" + // "m674s22380" + "m2400s600" // Repeat #3 + // "m2474s520" + "m600s600m1200s600m600s600m600s600m1200s600m600s600m600s600" + // "m674s524m1250s544m674s524m674s518m1276s520m674s522m674s524" + "m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + // "m674s520m674s524m674s524m674s518m1276s518m1276s524m672s524" + "m600s22200", + // "m648" // (Trailing space is ignored in real captures.) + irsend.outputStr()); + + // Now see if we can reproduce it with `sendSony38` + irsend.reset(); + irsend.sendSony38(0x240C, 15); + irsend.makeDecodeResult(); + + ASSERT_TRUE(irrecv.decode(&irsend.capture)); + EXPECT_EQ(SONY, irsend.capture.decode_type); + EXPECT_EQ(15, irsend.capture.bits); + EXPECT_EQ(0x240C, irsend.capture.value); // 15 bits + EXPECT_EQ(0x30, irsend.capture.address); + EXPECT_EQ(0x12, irsend.capture.command); +} + +// Test sending typical data only. +TEST(TestSendSony38, SendDataOnly) { + IRsendTest irsend(0); + irsend.begin(); + + irsend.reset(); + irsend.sendSony38(0); + // We expect three 20-bit commands to be sent. + EXPECT_EQ( + "f38000d33" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s18600" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s18600" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s18600" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m600s600m600s600m600s600m600s18600", + irsend.outputStr()); + + irsend.reset(); + irsend.sendSony38(0x240C, kSony20Bits); + // We expect three 20-bit commands to be sent. + EXPECT_EQ( + "f38000d33" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600" + "m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m1200s600m1200s600m600s600m600s16200" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600" + "m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m1200s600m1200s600m600s600m600s16200" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600" + "m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m1200s600m1200s600m600s600m600s16200" + "m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600" + "m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600" + "m600s600m1200s600m1200s600m600s600m600s16200", + irsend.outputStr()); + + irsend.reset(); + irsend.sendSony38(0x240C, kSony15Bits); + // We expect three 15-bit commands to be sent. + EXPECT_EQ( + "f38000d33" + "m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200" + "m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200" + "m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200" + "m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600" + "m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600" + "m600s22200", + irsend.outputStr()); + + irsend.reset(); + irsend.sendSony38(0xA90, kSony12Bits); + // We expect three 15-bit commands to be sent. + EXPECT_EQ( + "f38000d33" + "m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600" + "m600s600m1200s600m600s600m600s600m600s600m600s25800" + "m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600" + "m600s600m1200s600m600s600m600s600m600s600m600s25800" + "m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600" + "m600s600m1200s600m600s600m600s600m600s600m600s25800" + "m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600" + "m600s600m1200s600m600s600m600s600m600s600m600s25800", + irsend.outputStr()); +} diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Tcl_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Tcl_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Tcl_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Tcl_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Teco_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Teco_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Teco_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Teco_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Toshiba_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Toshiba_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Toshiba_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Toshiba_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Trotec_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Trotec_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Trotec_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Trotec_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Vestel_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Vestel_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Vestel_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Vestel_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Whirlpool_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Whirlpool_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Whirlpool_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Whirlpool_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/test/ir_Whynter_test.cpp b/lib/IRremoteESP8266-2.7.3/test/ir_Whynter_test.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/test/ir_Whynter_test.cpp rename to lib/IRremoteESP8266-2.7.3/test/ir_Whynter_test.cpp diff --git a/lib/IRremoteESP8266-2.7.2/tools/Makefile b/lib/IRremoteESP8266-2.7.3/tools/Makefile similarity index 100% rename from lib/IRremoteESP8266-2.7.2/tools/Makefile rename to lib/IRremoteESP8266-2.7.3/tools/Makefile diff --git a/lib/IRremoteESP8266-2.7.2/tools/RawToGlobalCache.sh b/lib/IRremoteESP8266-2.7.3/tools/RawToGlobalCache.sh similarity index 100% rename from lib/IRremoteESP8266-2.7.2/tools/RawToGlobalCache.sh rename to lib/IRremoteESP8266-2.7.3/tools/RawToGlobalCache.sh diff --git a/lib/IRremoteESP8266-2.7.2/tools/auto_analyse_raw_data.py b/lib/IRremoteESP8266-2.7.3/tools/auto_analyse_raw_data.py similarity index 97% rename from lib/IRremoteESP8266-2.7.2/tools/auto_analyse_raw_data.py rename to lib/IRremoteESP8266-2.7.3/tools/auto_analyse_raw_data.py index d673d52d4..5bea3926a 100755 --- a/lib/IRremoteESP8266-2.7.2/tools/auto_analyse_raw_data.py +++ b/lib/IRremoteESP8266-2.7.3/tools/auto_analyse_raw_data.py @@ -65,6 +65,8 @@ class RawIRMessage(): def _usec_compare(self, seen, expected): """Compare two usec values and see if they match within a subtractive margin.""" + if expected is None: + return False return expected - self.margin < seen <= expected def _usec_compares(self, usecs, expecteds): @@ -214,19 +216,25 @@ class RawIRMessage(): if len(self.marks) > 2: # Possible leader mark? self.ldr_mark = self.marks[0] self.hdr_mark = self.marks[1] - else: + elif len(self.marks) > 1: # At least two marks # Largest mark is likely the kHdrMark self.hdr_mark = self.marks[0] + else: + # Probably no header mark. + self.hdr_mark = 0 - if self.is_space_encoded() and len(self.spaces) >= 3: + if self.is_space_encoded() and len(self.spaces) >= 2: if self.verbose and len(self.marks) > 2: self.output.write("DANGER: Unusual number of mark timings!") # We should have 3 space candidates at least. # They should be: zero_space (smallest), one_space, & hdr_space (largest) spaces = list(self.spaces) - self.zero_space = spaces.pop() - self.one_space = spaces.pop() - self.hdr_space = spaces.pop() + if spaces: + self.zero_space = spaces.pop() + if spaces: + self.one_space = spaces.pop() + if spaces: + self.hdr_space = spaces.pop() # Rest are probably message gaps self.gaps = spaces @@ -302,11 +310,15 @@ def convert_rawdata(data_str): def dump_constants(message, defines, name="", output=sys.stdout): """Dump the key constants and generate the C++ #defines.""" ldr_mark = None + hdr_mark = 0 + hdr_space = 0 if message.ldr_mark is not None: ldr_mark = avg_list(message.mark_buckets[message.ldr_mark]) - hdr_mark = avg_list(message.mark_buckets[message.hdr_mark]) + if message.hdr_mark != 0: + hdr_mark = avg_list(message.mark_buckets[message.hdr_mark]) bit_mark = avg_list(message.mark_buckets[message.bit_mark]) - hdr_space = avg_list(message.space_buckets[message.hdr_space]) + if message.hdr_space is not None: + hdr_space = avg_list(message.space_buckets[message.hdr_space]) one_space = avg_list(message.space_buckets[message.one_space]) zero_space = avg_list(message.space_buckets[message.zero_space]) diff --git a/lib/IRremoteESP8266-2.7.2/tools/auto_analyse_raw_data_test.py b/lib/IRremoteESP8266-2.7.3/tools/auto_analyse_raw_data_test.py similarity index 84% rename from lib/IRremoteESP8266-2.7.2/tools/auto_analyse_raw_data_test.py rename to lib/IRremoteESP8266-2.7.3/tools/auto_analyse_raw_data_test.py index c2fd7ba64..fa3a87933 100755 --- a/lib/IRremoteESP8266-2.7.2/tools/auto_analyse_raw_data_test.py +++ b/lib/IRremoteESP8266-2.7.3/tools/auto_analyse_raw_data_test.py @@ -1165,6 +1165,224 @@ class TestAutoAnalyseRawData(unittest.TestCase): '}\n' '#endif // DECODE_FOO\n') + def test_no_headers(self): + """Tests for no space or mark headers in parse_and_report() function.""" + + # Tests for mark or space headers. (Issue #1014) + output = StringIO() + input_str = """ + uint16_t rawData[257] = {472, 1016, 490, 536, 446, 1038, 464, 544, 490, + 516, 492, 1008, 418, 592, 462, 1042, 476, 532, 444, 1062, 474, 532, 470, + 1014, 492, 1010, 446, 562, 460, 1046, 474, 532, 472, 534, 416, 590, 458, + 548, 486, 520, 490, 516, 490, 534, 470, 534, 470, 534, 470, 536, 416, + 590, 460, 546, 488, 518, 490, 536, 468, 536, 470, 534, 470, 536, 442, + 564, 414, 1092, 470, 536, 468, 536, 416, 590, 414, 592, 486, 520, 490, + 536, 470, 534, 470, 534, 468, 536, 416, 590, 432, 574, 486, 520, 490, + 536, 470, 534, 468, 536, 468, 536, 468, 538, 420, 590, 454, 546, 488, + 518, 488, 536, 468, 536, 468, 536, 468, 536, 440, 566, 414, 592, 462, + 546, 490, 536, 468, 536, 468, 538, 468, 536, 468, 538, 414, 592, 460, + 546, 488, 518, 490, 536, 468, 536, 470, 536, 468, 536, 442, 564, 414, + 592, 462, 546, 490, 518, 488, 536, 470, 534, 470, 536, 470, 536, 416, + 590, 460, 548, 488, 518, 490, 536, 470, 534, 470, 534, 470, 536, 468, + 536, 414, 592, 462, 546, 490, 518, 488, 534, 470, 536, 468, 536, 468, + 536, 414, 590, 462, 546, 488, 518, 466, 560, 444, 560, 446, 560, 446, + 560, 444, 562, 416, 592, 462, 546, 464, 542, 464, 560, 444, 560, 446, + 560, 446, 560, 416, 590, 460, 546, 464, 544, 464, 562, 444, 560, 446, + 560, 446, 560, 444, 560, 416, 592, 462, 1042, 446, 560, 444, 560, 416, + 592, 462, 544, 488, 520, 466, 558, 446, 560, 446};""" + analyse.parse_and_report(input_str, 200, True, "", output) + self.assertEqual( + output.getvalue(), 'Found 257 timing entries.\n' + 'Potential Mark Candidates:\n' + '[492]\n' + 'Potential Space Candidates:\n' + '[1092, 592]\n' + '\n' + 'Guessing encoding type:\n' + 'Looks like it uses space encoding. Yay!\n' + '\n' + 'Guessing key value:\n' + 'kHdrMark = 0\n' + 'kHdrSpace = 0\n' + 'kBitMark = 460\n' + 'kOneSpace = 1037\n' + 'kZeroSpace = 547\n' + '\n' + 'Decoding protocol based on analysis so far:\n' + '\n' + 'kBitMark(UNEXPECTED)10100101010110100000000000000000010000000000000000' + '0000000000000000000000000000000000000000000000000000000000000000000000' + '10000000\n' + ' Bits: 128\n' + ' Hex: 0xA55A0000400000000000000000000080 (MSB first)\n' + ' 0x01000000000000000000000200005AA5 (LSB first)\n' + ' Dec: 219789926041586294144261994014272651392 (MSB first)\n' + ' 1329227995784915872903807068870302373 (LSB first)\n' + ' Bin: 0b101001010101101000000000000000000100000000000000000000000000' + '00000000000000000000000000000000000000000000000000000000000010000000' + ' (MSB first)\n' + ' 0b000000010000000000000000000000000000000000000000000000000000' + '00000000000000000000000000000000001000000000000000000101101010100101' + ' (LSB first)\n' + '\n' + 'Total Nr. of suspected bits: 128\n' + '\n' + 'Generating a VERY rough code outline:\n' + '\n' + '// Copyright 2019 David Conran (crankyoldgit)\n' + '// Support for TBD protocol\n' + '\n' + '#include "IRrecv.h"\n' + '#include "IRsend.h"\n' + '#include "IRutils.h"\n' + '\n' + "// WARNING: This probably isn't directly usable. It's a guide only.\n" + '\n' + '// See https://github.com/crankyoldgit/IRremoteESP8266/wiki/' + 'Adding-support-for-a-new-IR-protocol\n' + '// for details of how to include this in the library.\n' + 'const uint16_t kHdrMark = 0;\n' + 'const uint16_t kBitMark = 460;\n' + 'const uint16_t kHdrSpace = 0;\n' + 'const uint16_t kOneSpace = 1037;\n' + 'const uint16_t kZeroSpace = 547;\n' + 'const uint16_t kFreq = 38000; // Hz. (Guessing the most common' + ' frequency.)\n' + 'const uint16_t kBits = 128; // Move to IRremoteESP8266.h\n' + 'const uint16_t kStateLength = 16; // Move to IRremoteESP8266.h\n' + 'const uint16_t kOverhead = 1;\n' + "// DANGER: More than 64 bits detected. A uint64_t for 'data' won't" + ' work!\n' + '#if SEND_TBD\n' + '// Function should be safe up to 64 bits.\n' + 'void IRsend::sendTBD(const uint64_t data, const uint16_t nbits, const' + ' uint16_t repeat) {\n' + ' enableIROut(kFreq);\n' + ' for (uint16_t r = 0; r <= repeat; r++) {\n' + ' uint64_t send_data = data;\n' + ' // Data Section #1\n' + ' // e.g. data = 0xA55A0000400000000000000000000080, nbits = 128\n' + ' sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, send_data,' + ' 128, true);\n' + ' send_data >>= 128;\n' + ' // Footer\n' + ' mark(kBitMark);\n' + ' space(kDefaultMessageGap); // A 100% made up guess of the gap' + ' between messages.\n' + ' }\n' + '}\n' + '#endif // SEND_TBD\n' + '\n' + '#if SEND_TBD\n' + '// Alternative >64bit function to send TBD messages\n' + '// Where data is:\n' + '// uint8_t data[kStateLength] = {0xA5, 0x5A, 0x00, 0x00, 0x40, 0x00,' + ' 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80};\n' + '//\n' + '// Args:\n' + '// data: An array of bytes containing the IR command.\n' + '// It is assumed to be in MSB order for this code.\n' + '// nbytes: Nr. of bytes of data in the array. (>=kStateLength)\n' + '// repeat: Nr. of times the message is to be repeated.\n' + '//\n' + '// Status: ALPHA / Untested.\n' + 'void IRsend::sendTBD(const uint8_t data[], const uint16_t nbytes,' + ' const uint16_t repeat) {\n' + ' for (uint16_t r = 0; r <= repeat; r++) {\n' + ' uint16_t pos = 0;\n' + ' // Data Section #1\n' + ' // e.g.\n' + ' // bits = 128; bytes = 16;\n' + ' // *(data + pos) = {0xA5, 0x5A, 0x00, 0x00, 0x40, 0x00, 0x00,' + ' 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80};\n' + ' sendGeneric(0, 0,\n' + ' kBitMark, kOneSpace,\n' + ' kBitMark, kZeroSpace,\n' + ' kBitMark, kDefaultMessageGap,\n' + ' data + pos, 16, // Bytes\n' + ' kFreq, true, kNoRepeat, kDutyDefault);\n' + ' pos += 16; // Adjust by how many bytes of data we sent\n' + ' }\n' + '}\n' + '#endif // SEND_TBD\n' + '\n' + "// DANGER: More than 64 bits detected. A uint64_t for 'data' won't" + ' work!\n' + '#if DECODE_TBD\n' + '// Function should be safe up to 64 bits.\n' + 'bool IRrecv::decodeTBD(decode_results *results, const uint16_t nbits,' + ' const bool strict) {\n' + ' if (results->rawlen < 2 * nbits + kOverhead)\n' + ' return false; // Too short a message to match.\n' + ' if (strict && nbits != kBits)\n' + ' return false;\n' + '\n' + ' uint16_t offset = kStartOffset;\n' + ' uint64_t data = 0;\n' + ' match_result_t data_result;\n' + '\n' + ' // Data Section #1\n' + ' // e.g. data_result.data = 0xA55A0000400000000000000000000080, nbits' + ' = 128\n' + ' data_result = matchData(&(results->rawbuf[offset]), 128,\n' + ' kBitMark, kOneSpace,\n' + ' kBitMark, kZeroSpace);\n' + ' offset += data_result.used;\n' + ' if (data_result.success == false) return false; // Fail\n' + ' data <<= 128; // Make room for the new bits of data.\n' + ' data |= data_result.data;\n' + '\n' + ' // Footer\n' + ' if (!matchMark(results->rawbuf[offset++], kBitMark))\n' + ' return false;\n' + '\n' + ' // Success\n' + ' results->decode_type = decode_type_t::TBD;\n' + ' results->bits = nbits;\n' + ' results->value = data;\n' + ' results->command = 0;\n' + ' results->address = 0;\n' + ' return true;\n' + '}\n' + '#endif // DECODE_TBD\n' + '\n' + '// Note: This should be 64+ bit safe.\n' + '#if DECODE_TBD\n' + '// Function should be safe over 64 bits.\n' + 'bool IRrecv::decodeTBD(decode_results *results, const uint16_t nbits,' + ' const bool strict) {\n' + ' if (results->rawlen < 2 * nbits + kOverhead)\n' + ' return false; // Too short a message to match.\n' + ' if (strict && nbits != kBits)\n' + ' return false;\n' + '\n' + ' uint16_t offset = kStartOffset;\n' + ' uint16_t pos = 0;\n' + ' uint16_t used = 0;\n' + '\n' + ' // Data Section #1\n' + ' // e.g.\n' + ' // bits = 128; bytes = 16;\n' + ' // *(results->state + pos) = {0xA5, 0x5A, 0x00, 0x00, 0x40, 0x00,' + ' 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80};\n' + ' used = matchGeneric(results->rawbuf + offset, results->state + pos,' + '\n' + ' results->rawlen - offset, 128,\n' + ' 0, 0,\n' + ' kBitMark, kOneSpace,\n' + ' kBitMark, kZeroSpace,\n' + ' kBitMark, kDefaultMessageGap, true);\n' + ' if (used == 0) return false; // We failed to find any data.\n' + ' offset += used; // Adjust for how much of the message we read.\n' + ' pos += 16; // Adjust by how many bytes of data we read\n' + '\n' + ' // Success\n' + ' results->decode_type = decode_type_t::TBD;\n' + ' results->bits = nbits;\n' + ' return true;\n' + '}\n' + '#endif // DECODE_TBD\n') + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/lib/IRremoteESP8266-2.7.2/tools/gc_decode.cpp b/lib/IRremoteESP8266-2.7.3/tools/gc_decode.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/tools/gc_decode.cpp rename to lib/IRremoteESP8266-2.7.3/tools/gc_decode.cpp diff --git a/lib/IRremoteESP8266-2.7.2/tools/generate_irtext_h.sh b/lib/IRremoteESP8266-2.7.3/tools/generate_irtext_h.sh similarity index 100% rename from lib/IRremoteESP8266-2.7.2/tools/generate_irtext_h.sh rename to lib/IRremoteESP8266-2.7.3/tools/generate_irtext_h.sh diff --git a/lib/IRremoteESP8266-2.7.2/tools/mkkeywords b/lib/IRremoteESP8266-2.7.3/tools/mkkeywords similarity index 100% rename from lib/IRremoteESP8266-2.7.2/tools/mkkeywords rename to lib/IRremoteESP8266-2.7.3/tools/mkkeywords diff --git a/lib/IRremoteESP8266-2.7.2/tools/mode2_decode.cpp b/lib/IRremoteESP8266-2.7.3/tools/mode2_decode.cpp similarity index 100% rename from lib/IRremoteESP8266-2.7.2/tools/mode2_decode.cpp rename to lib/IRremoteESP8266-2.7.3/tools/mode2_decode.cpp diff --git a/lib/IRremoteESP8266-2.7.2/tools/scrape_supported_devices.py b/lib/IRremoteESP8266-2.7.3/tools/scrape_supported_devices.py similarity index 76% rename from lib/IRremoteESP8266-2.7.2/tools/scrape_supported_devices.py rename to lib/IRremoteESP8266-2.7.3/tools/scrape_supported_devices.py index a0efd0774..c859bbf06 100755 --- a/lib/IRremoteESP8266-2.7.2/tools/scrape_supported_devices.py +++ b/lib/IRremoteESP8266-2.7.3/tools/scrape_supported_devices.py @@ -9,14 +9,16 @@ import time CODE_URL = "https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/ir_" BRAND_MODEL = re.compile(r"Brand: *(?P.+), *Model: *(?P.+)") -ENUMS = re.compile(r"enum \w+ {(.+?)};", re.DOTALL) +ENUMS = re.compile(r"enum (\w+) {(.+?)};", re.DOTALL) ENUM_ENTRY = re.compile(r"^\s+(\w+)", re.MULTILINE) -DECODED_PROTOCOLS = re.compile(r".*results->decode_type *=.*?(\w+);") +DECODED_PROTOCOLS = re.compile(r".*(?:results->decode_type *=.*?|" + r"typeguess\s*=\s*decode_type_t::)(\w+);") AC_FN = re.compile(r"ir_(.+)\.h") - +AC_MODEL_ENUM_RE = re.compile(r"(.+)_ac_remote_model_t") +IRSEND_FN_RE = re.compile(r"IRsend\.h") ALL_FN = re.compile(r"ir_(.+)\.(h|cpp)") -EXCLUDED_PROTOCOLS = ["UNKNOWN", "UNUSED", "kLastDecodeType"] +EXCLUDED_PROTOCOLS = ["UNKNOWN", "UNUSED", "kLastDecodeType", "typeguess"] EXCLUDED_ACS = ["Magiquest", "NEC"] MARKDOWN_HEADER = """