Add tasmota magic bits, Tasmota compat check (#1152)

This commit is contained in:
Otto Winter
2020-07-15 15:29:41 +02:00
committed by GitHub
parent 4752096520
commit 0cc3902ffc
3 changed files with 28 additions and 0 deletions
+16
View File
@@ -271,6 +271,22 @@ ISRInternalGPIOPin *GPIOPin::to_isr() const {
this->gpio_read_, this->gpio_mask_, this->inverted_);
}
void force_link_symbols() {
#ifdef ARDUINO_ARCH_ESP8266
// Tasmota uses magic bytes in the binary to check if an OTA firmware is compatible
// with their settings - ESPHome uses a different settings system (that can also survive
// erases). So set magic bytes indicating all tasmota versions are supported.
// This only adds 12 bytes of binary size, which is an acceptable price to pay for easier support
// for Tasmota.
// https://github.com/arendst/Tasmota/blob/b05301b1497942167a015a6113b7f424e42942cd/tasmota/settings.ino#L346-L380
// https://github.com/arendst/Tasmota/blob/b05301b1497942167a015a6113b7f424e42942cd/tasmota/i18n.h#L652-L654
const static uint32_t TASMOTA_MAGIC_BYTES[] PROGMEM = {0x5AA55AA5, 0xFFFFFFFF, 0xA55AA55A};
// Force link symbol by using a volatile integer (GCC attribute used does not work because of LTO)
volatile int x = 0;
x = TASMOTA_MAGIC_BYTES[x];
#endif
}
} // namespace esphome
#ifdef ARDUINO_ESP8266_RELEASE_2_3_0