|
|
@ -68,217 +68,6 @@ void hardwareLoop() { |
|
|
|
// BOOTING
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
unsigned int sectors(size_t size) { |
|
|
|
return (int) (size + SPI_FLASH_SEC_SIZE - 1) / SPI_FLASH_SEC_SIZE; |
|
|
|
} |
|
|
|
|
|
|
|
void welcome() { |
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("\n\n")); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] %s %s\n"), (char *) APP_NAME, (char *) APP_VERSION); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] %s\n"), (char *) APP_AUTHOR); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] %s\n\n"), (char *) APP_WEBSITE); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] CPU chip ID: 0x%06X\n"), ESP.getChipId()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] CPU frequency: %u MHz\n"), ESP.getCpuFreqMHz()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] SDK version: %s\n"), ESP.getSdkVersion()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Core version: %s\n"), getCoreVersion().c_str()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Core revision: %s\n"), getCoreRevision().c_str()); |
|
|
|
DEBUG_MSG_P(PSTR("\n")); |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
|
|
|
|
FlashMode_t mode = ESP.getFlashChipMode(); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Flash chip ID: 0x%06X\n"), ESP.getFlashChipId()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Flash speed: %u Hz\n"), ESP.getFlashChipSpeed()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Flash mode: %s\n"), mode == FM_QIO ? "QIO" : mode == FM_QOUT ? "QOUT" : mode == FM_DIO ? "DIO" : mode == FM_DOUT ? "DOUT" : "UNKNOWN"); |
|
|
|
DEBUG_MSG_P(PSTR("\n")); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Flash sector size: %8u bytes\n"), SPI_FLASH_SEC_SIZE); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Flash size (CHIP): %8u bytes\n"), ESP.getFlashChipRealSize()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Flash size (SDK): %8u bytes / %4d sectors\n"), ESP.getFlashChipSize(), sectors(ESP.getFlashChipSize())); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Firmware size: %8u bytes / %4d sectors\n"), ESP.getSketchSize(), sectors(ESP.getSketchSize())); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] OTA size: %8u bytes / %4d sectors\n"), ESP.getFreeSketchSpace(), sectors(ESP.getFreeSketchSpace())); |
|
|
|
#if SPIFFS_SUPPORT
|
|
|
|
FSInfo fs_info; |
|
|
|
bool fs = SPIFFS.info(fs_info); |
|
|
|
if (fs) { |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] SPIFFS size: %8u bytes / %4d sectors\n"), fs_info.totalBytes, sectors(fs_info.totalBytes)); |
|
|
|
} |
|
|
|
#else
|
|
|
|
DEBUG_MSG_P(PSTR("[INIT] SPIFFS size: %8u bytes / %4d sectors\n"), 0, 0); |
|
|
|
#endif
|
|
|
|
DEBUG_MSG_P(PSTR("[INIT] EEPROM size: %8u bytes / %4d sectors\n"), settingsMaxSize(), sectors(settingsMaxSize())); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Empty space: %8u bytes / 4 sectors\n"), 4 * SPI_FLASH_SEC_SIZE); |
|
|
|
DEBUG_MSG_P(PSTR("\n")); |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#if SPIFFS_SUPPORT
|
|
|
|
if (fs) { |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] SPIFFS total size: %8u bytes\n"), fs_info.totalBytes); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] used size: %8u bytes\n"), fs_info.usedBytes); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] block size: %8u bytes\n"), fs_info.blockSize); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] page size: %8u bytes\n"), fs_info.pageSize); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] max files: %8u\n"), fs_info.maxOpenFiles); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] max length: %8u\n"), fs_info.maxPathLength); |
|
|
|
} else { |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] No SPIFFS partition\n")); |
|
|
|
} |
|
|
|
DEBUG_MSG_P(PSTR("\n")); |
|
|
|
#endif
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("[INIT] BOARD: %s\n"), getBoardName().c_str()); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] SUPPORT:")); |
|
|
|
|
|
|
|
#if ALEXA_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" ALEXA")); |
|
|
|
#endif
|
|
|
|
#if DEBUG_SERIAL_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DEBUG_SERIAL")); |
|
|
|
#endif
|
|
|
|
#if DEBUG_TELNET_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DEBUG_TELNET")); |
|
|
|
#endif
|
|
|
|
#if DEBUG_UDP_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DEBUG_UDP")); |
|
|
|
#endif
|
|
|
|
#if DOMOTICZ_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DOMOTICZ")); |
|
|
|
#endif
|
|
|
|
#if HOMEASSISTANT_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" HOMEASSISTANT")); |
|
|
|
#endif
|
|
|
|
#if I2C_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" I2C")); |
|
|
|
#endif
|
|
|
|
#if INFLUXDB_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" INFLUXDB")); |
|
|
|
#endif
|
|
|
|
#if LLMNR_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" LLMNR")); |
|
|
|
#endif
|
|
|
|
#if MDNS_SERVER_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" MDNS")); |
|
|
|
#endif
|
|
|
|
#if NETBIOS_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" NETBIOS")); |
|
|
|
#endif
|
|
|
|
#if NOFUSS_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" NOFUSS")); |
|
|
|
#endif
|
|
|
|
#if NTP_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" NTP")); |
|
|
|
#endif
|
|
|
|
#if RF_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" RF")); |
|
|
|
#endif
|
|
|
|
#if SCHEDULER_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" SCHEDULER")); |
|
|
|
#endif
|
|
|
|
#if SENSOR_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" SENSOR")); |
|
|
|
#endif
|
|
|
|
#if SPIFFS_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" SPIFFS")); |
|
|
|
#endif
|
|
|
|
#if SSDP_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" SSDP")); |
|
|
|
#endif
|
|
|
|
#if TELNET_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" TELNET")); |
|
|
|
#endif
|
|
|
|
#if TERMINAL_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" TERMINAL")); |
|
|
|
#endif
|
|
|
|
#if THINGSPEAK_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" THINGSPEAK")); |
|
|
|
#endif
|
|
|
|
#if WEB_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" WEB")); |
|
|
|
#endif
|
|
|
|
|
|
|
|
#if SENSOR_SUPPORT
|
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("\n[INIT] SENSORS:")); |
|
|
|
|
|
|
|
#if ANALOG_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" ANALOG")); |
|
|
|
#endif
|
|
|
|
#if BMX280_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" BMX280")); |
|
|
|
#endif
|
|
|
|
#if DALLAS_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DALLAS")); |
|
|
|
#endif
|
|
|
|
#if DHT_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DHTXX")); |
|
|
|
#endif
|
|
|
|
#if DIGITAL_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" DIGITAL")); |
|
|
|
#endif
|
|
|
|
#if ECH1560_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" ECH1560")); |
|
|
|
#endif
|
|
|
|
#if EMON_ADC121_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" EMON_ADC121")); |
|
|
|
#endif
|
|
|
|
#if EMON_ADS1X15_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" EMON_ADX1X15")); |
|
|
|
#endif
|
|
|
|
#if EMON_ANALOG_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" EMON_ANALOG")); |
|
|
|
#endif
|
|
|
|
#if EVENTS_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" EVENTS")); |
|
|
|
#endif
|
|
|
|
#if HLW8012_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" HLW8012")); |
|
|
|
#endif
|
|
|
|
#if MHZ19_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" MHZ19")); |
|
|
|
#endif
|
|
|
|
#if PMSX003_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" PMSX003")); |
|
|
|
#endif
|
|
|
|
#if SHT3X_I2C_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" SHT3X_I2C")); |
|
|
|
#endif
|
|
|
|
#if SI7021_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" SI7021")); |
|
|
|
#endif
|
|
|
|
#if V9261F_SUPPORT
|
|
|
|
DEBUG_MSG_P(PSTR(" V9261F")); |
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif // SENSOR_SUPPORT
|
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("\n\n")); |
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
|
|
|
|
unsigned char reason = resetReason(); |
|
|
|
if (reason > 0) { |
|
|
|
char buffer[32]; |
|
|
|
strcpy_P(buffer, custom_reset_string[reason-1]); |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Last reset reason: %s\n"), buffer); |
|
|
|
} else { |
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Last reset reason: %s\n"), (char *) ESP.getResetReason().c_str()); |
|
|
|
} |
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Free heap: %u bytes\n"), getFreeHeap()); |
|
|
|
#if ADC_VCC_ENABLED
|
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Power: %u mV\n"), ESP.getVcc()); |
|
|
|
#endif
|
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("[INIT] Power saving delay value: %lu ms\n"), _loopDelay); |
|
|
|
|
|
|
|
if (!systemCheck()) DEBUG_MSG_P(PSTR("\n[INIT] Device is in SAFE MODE\n")); |
|
|
|
|
|
|
|
DEBUG_MSG_P(PSTR("\n")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
void setup() { |
|
|
|
|
|
|
|
// Init EEPROM, Serial and SPIFFS
|
|
|
@ -300,7 +89,7 @@ void setup() { |
|
|
|
_loopDelay = atol(getSetting("loopDelay", LOOP_DELAY_TIME).c_str()); |
|
|
|
|
|
|
|
// Show welcome message and system configuration
|
|
|
|
welcome(); |
|
|
|
info(); |
|
|
|
|
|
|
|
// Basic modules, will always run
|
|
|
|
wifiSetup(); |
|
|
|