mirror of https://github.com/arendst/Tasmota.git
Refactor ESP32 code
This commit is contained in:
parent
d384367f19
commit
19796a7f97
|
@ -22,80 +22,3 @@
|
|||
#include "esp8266toEsp32.h"
|
||||
|
||||
// ESP Stuff
|
||||
|
||||
String ESP32GetResetReason(uint32_t cpu_no)
|
||||
{
|
||||
// tools\sdk\include\esp32\rom\rtc.h
|
||||
switch (rtc_get_reset_reason( (RESET_REASON) cpu_no)) {
|
||||
case POWERON_RESET : return F("Vbat power on reset"); // 1
|
||||
case SW_RESET : return F("Software reset digital core"); // 3
|
||||
case OWDT_RESET : return F("Legacy watch dog reset digital core"); // 4
|
||||
case DEEPSLEEP_RESET : return F("Deep Sleep reset digital core"); // 5
|
||||
case SDIO_RESET : return F("Reset by SLC module, reset digital core"); // 6
|
||||
case TG0WDT_SYS_RESET : return F("Timer Group0 Watch dog reset digital core"); // 7
|
||||
case TG1WDT_SYS_RESET : return F("Timer Group1 Watch dog reset digital core"); // 8
|
||||
case RTCWDT_SYS_RESET : return F("RTC Watch dog Reset digital core"); // 9
|
||||
case INTRUSION_RESET : return F("Instrusion tested to reset CPU"); // 10
|
||||
case TGWDT_CPU_RESET : return F("Time Group reset CPU"); // 11
|
||||
case SW_CPU_RESET : return F("Software reset CPU"); // 12
|
||||
case RTCWDT_CPU_RESET : return F("RTC Watch dog Reset CPU"); // 13
|
||||
case EXT_CPU_RESET : return F("or APP CPU, reseted by PRO CPU"); // 14
|
||||
case RTCWDT_BROWN_OUT_RESET : return F("Reset when the vdd voltage is not stable"); // 15
|
||||
case RTCWDT_RTC_RESET : return F("RTC Watch dog reset digital core and rtc module"); // 16
|
||||
default : return F("NO_MEAN"); // 0
|
||||
}
|
||||
}
|
||||
|
||||
String ESP_getResetReason(void)
|
||||
{
|
||||
return ESP32GetResetReason(0); // CPU 0
|
||||
}
|
||||
|
||||
uint32_t ESP_ResetInfoReason(void)
|
||||
{
|
||||
RESET_REASON reason = rtc_get_reset_reason(0);
|
||||
if (POWERON_RESET == reason) { return REASON_DEFAULT_RST; }
|
||||
if (SW_CPU_RESET == reason) { return REASON_SOFT_RESTART; }
|
||||
if (DEEPSLEEP_RESET == reason) { return REASON_DEEP_SLEEP_AWAKE; }
|
||||
if (SW_RESET == reason) { return REASON_EXT_SYS_RST; }
|
||||
}
|
||||
|
||||
uint32_t ESP_getBootVersion(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
void ESP_reset()
|
||||
{
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
uint32_t ESP_getFlashChipId()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t ESP_getChipId()
|
||||
{
|
||||
uint32_t id = 0;
|
||||
for (uint32_t i = 0; i < 17; i = i +8) {
|
||||
id |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
String String_ESP_getChipId()
|
||||
{
|
||||
uint64_t mac = ESP.getEfuseMac();
|
||||
return String(uint32_t(mac >> 32)) + String(uint32_t(mac));
|
||||
}
|
||||
|
||||
uint32_t ESP_getSketchSize(void)
|
||||
{
|
||||
static uint32_t sketchsize = 0;
|
||||
|
||||
if (!sketchsize) {
|
||||
sketchsize = ESP.getSketchSize(); // This takes almost 2 seconds on an ESP32
|
||||
}
|
||||
return sketchsize;
|
||||
}
|
||||
|
|
|
@ -28,18 +28,6 @@
|
|||
|
||||
#include <Esp.h>
|
||||
|
||||
//
|
||||
// ESP32
|
||||
//
|
||||
String ESP_getResetReason(void);
|
||||
uint32_t ESP_ResetInfoReason(void);
|
||||
uint32_t ESP_getBootVersion(void);
|
||||
void ESP_reset();
|
||||
uint32_t ESP_getFlashChipId();
|
||||
uint32_t ESP_getChipId();
|
||||
String String_ESP_getChipId();
|
||||
uint32_t ESP_getSketchSize();
|
||||
|
||||
// Analog
|
||||
inline void analogWrite(uint8_t pin, int val)
|
||||
{
|
||||
|
|
|
@ -99,11 +99,7 @@ uint32_t ResetReason(void)
|
|||
REASON_DEEP_SLEEP_AWAKE = 5, // "Deep-Sleep Wake" wake up from deep-sleep
|
||||
REASON_EXT_SYS_RST = 6 // "External System" external system reset
|
||||
*/
|
||||
#ifdef ESP8266
|
||||
return resetInfo.reason;
|
||||
#else
|
||||
return ESP_ResetInfoReason();
|
||||
#endif
|
||||
}
|
||||
|
||||
String GetResetReason(void)
|
||||
|
|
|
@ -413,20 +413,34 @@ void CmndStatus(void)
|
|||
if ((0 == payload) || (1 == payload)) {
|
||||
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS1_PARAMETER "\":{\"" D_JSON_BAUDRATE "\":%d,\"" D_CMND_SERIALCONFIG "\":\"%s\",\"" D_CMND_GROUPTOPIC "\":\"%s\",\"" D_CMND_OTAURL "\":\"%s\",\""
|
||||
D_JSON_RESTARTREASON "\":\"%s\",\"" D_JSON_UPTIME "\":\"%s\",\"" D_JSON_STARTUPUTC "\":\"%s\",\"" D_CMND_SLEEP "\":%d,\""
|
||||
D_JSON_CONFIG_HOLDER "\":%d,\"" D_JSON_BOOTCOUNT "\":%d,\"BCResetTime\":\"%s\",\"" D_JSON_SAVECOUNT "\":%d,\"" D_JSON_SAVEADDRESS "\":\"%X\"}}"),
|
||||
D_JSON_CONFIG_HOLDER "\":%d,\"" D_JSON_BOOTCOUNT "\":%d,\"BCResetTime\":\"%s\",\"" D_JSON_SAVECOUNT "\":%d"
|
||||
#ifdef ESP8266
|
||||
",\"" D_JSON_SAVEADDRESS "\":\"%X\""
|
||||
#endif
|
||||
"}}"),
|
||||
Settings.baudrate * 300, GetSerialConfig().c_str(), SettingsText(SET_MQTT_GRP_TOPIC), SettingsText(SET_OTAURL),
|
||||
GetResetReason().c_str(), GetUptime().c_str(), GetDateAndTime(DT_RESTART).c_str(), Settings.sleep,
|
||||
Settings.cfg_holder, Settings.bootcount, GetDateAndTime(DT_BOOTCOUNT).c_str(), Settings.save_flag, GetSettingsAddress());
|
||||
Settings.cfg_holder, Settings.bootcount, GetDateAndTime(DT_BOOTCOUNT).c_str(), Settings.save_flag
|
||||
#ifdef ESP8266
|
||||
, GetSettingsAddress()
|
||||
#endif
|
||||
);
|
||||
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "1"));
|
||||
}
|
||||
|
||||
if ((0 == payload) || (2 == payload)) {
|
||||
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS2_FIRMWARE "\":{\"" D_JSON_VERSION "\":\"%s%s\",\"" D_JSON_BUILDDATETIME "\":\"%s\",\""
|
||||
D_JSON_BOOTVERSION "\":%d,\"" D_JSON_COREVERSION "\":\"" ARDUINO_CORE_RELEASE "\",\"" D_JSON_SDKVERSION "\":\"%s\","
|
||||
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS2_FIRMWARE "\":{\"" D_JSON_VERSION "\":\"%s%s\",\"" D_JSON_BUILDDATETIME "\":\"%s\""
|
||||
#ifdef ESP8266
|
||||
",\"" D_JSON_BOOTVERSION "\":%d"
|
||||
#endif
|
||||
",\"" D_JSON_COREVERSION "\":\"" ARDUINO_CORE_RELEASE "\",\"" D_JSON_SDKVERSION "\":\"%s\","
|
||||
"\"Hardware\":\"%s\""
|
||||
"%s}}"),
|
||||
my_version, my_image, GetBuildDateAndTime().c_str(),
|
||||
ESP_getBootVersion(), ESP.getSdkVersion(),
|
||||
my_version, my_image, GetBuildDateAndTime().c_str()
|
||||
#ifdef ESP8266
|
||||
, ESP.getBootVersion()
|
||||
#endif
|
||||
, ESP.getSdkVersion(),
|
||||
GetDeviceHardware().c_str(),
|
||||
GetStatistics().c_str());
|
||||
MqttPublishPrefixTopic_P(option, PSTR(D_CMND_STATUS "2"));
|
||||
|
@ -445,10 +459,18 @@ void CmndStatus(void)
|
|||
|
||||
if ((0 == payload) || (4 == payload)) {
|
||||
Response_P(PSTR("{\"" D_CMND_STATUS D_STATUS4_MEMORY "\":{\"" D_JSON_PROGRAMSIZE "\":%d,\"" D_JSON_FREEMEMORY "\":%d,\"" D_JSON_HEAPSIZE "\":%d,\""
|
||||
D_JSON_PROGRAMFLASHSIZE "\":%d,\"" D_JSON_FLASHSIZE "\":%d,\"" D_JSON_FLASHCHIPID "\":\"%06X\",\"" D_JSON_FLASHMODE "\":%d,\""
|
||||
D_JSON_PROGRAMFLASHSIZE "\":%d,\"" D_JSON_FLASHSIZE "\":%d"
|
||||
#ifdef ESP8266
|
||||
",\"" D_JSON_FLASHCHIPID "\":\"%06X\""
|
||||
#endif
|
||||
",\"" D_JSON_FLASHMODE "\":%d,\""
|
||||
D_JSON_FEATURES "\":[\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\"]"),
|
||||
ESP_getSketchSize()/1024, ESP.getFreeSketchSpace()/1024, ESP.getFreeHeap()/1024,
|
||||
ESP.getFlashChipSize()/1024, ESP.getFlashChipRealSize()/1024, ESP_getFlashChipId(), ESP.getFlashChipMode(),
|
||||
ESP.getFlashChipSize()/1024, ESP.getFlashChipRealSize()/1024
|
||||
#ifdef ESP8266
|
||||
, ESP.getFlashChipId()
|
||||
#endif
|
||||
, ESP.getFlashChipMode(),
|
||||
LANGUAGE_LCID, feature_drv1, feature_drv2, feature_sns1, feature_sns2, feature5, feature6);
|
||||
XsnsDriverState();
|
||||
ResponseAppend_P(PSTR(",\"Sensors\":"));
|
||||
|
|
|
@ -17,6 +17,48 @@
|
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*********************************************************************************************\
|
||||
* ESP8266 Support
|
||||
\*********************************************************************************************/
|
||||
|
||||
#ifdef ESP8266
|
||||
|
||||
extern "C" {
|
||||
extern struct rst_info resetInfo;
|
||||
}
|
||||
|
||||
uint32_t ESP_ResetInfoReason(void)
|
||||
{
|
||||
return resetInfo.reason;
|
||||
}
|
||||
|
||||
String ESP_getResetReason(void)
|
||||
{
|
||||
return ESP.getResetReason();
|
||||
}
|
||||
|
||||
uint32_t ESP_getChipId(void)
|
||||
{
|
||||
return ESP.getChipId();
|
||||
}
|
||||
|
||||
uint32_t ESP_getSketchSize(void)
|
||||
{
|
||||
return ESP.getSketchSize();
|
||||
}
|
||||
|
||||
void ESP_Restart(void)
|
||||
{
|
||||
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
||||
ESP.reset();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*********************************************************************************************\
|
||||
* ESP32 Support
|
||||
\*********************************************************************************************/
|
||||
|
||||
#ifdef ESP32
|
||||
|
||||
#include <nvs.h>
|
||||
|
@ -82,16 +124,6 @@ void SettingsWrite(const void *pSettings, unsigned nSettingsLen)
|
|||
NvmSave("main", "Settings", pSettings, nSettingsLen);
|
||||
}
|
||||
|
||||
void SettingsLoadUpg(void *pSettings, unsigned nSettingsLen)
|
||||
{
|
||||
NvmLoad("upg", "Settings", pSettings, nSettingsLen);
|
||||
}
|
||||
|
||||
void SettingsLoadUpgH(void *pSettings, unsigned nSettingsLen)
|
||||
{
|
||||
NvmLoad("upg", "SettingsH", pSettings, nSettingsLen);
|
||||
}
|
||||
|
||||
void QPCRead(void *pSettings, unsigned nSettingsLen)
|
||||
{
|
||||
NvmLoad("qpc", "pcreg", pSettings, nSettingsLen);
|
||||
|
@ -184,4 +216,69 @@ void DisableBrownout(void)
|
|||
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Disable brownout detector
|
||||
}
|
||||
|
||||
//
|
||||
// ESP32 Alternatives
|
||||
//
|
||||
|
||||
String ESP32GetResetReason(uint32_t cpu_no)
|
||||
{
|
||||
// tools\sdk\include\esp32\rom\rtc.h
|
||||
switch (rtc_get_reset_reason( (RESET_REASON) cpu_no)) {
|
||||
case POWERON_RESET : return F("Vbat power on reset"); // 1
|
||||
case SW_RESET : return F("Software reset digital core"); // 3
|
||||
case OWDT_RESET : return F("Legacy watch dog reset digital core"); // 4
|
||||
case DEEPSLEEP_RESET : return F("Deep Sleep reset digital core"); // 5
|
||||
case SDIO_RESET : return F("Reset by SLC module, reset digital core"); // 6
|
||||
case TG0WDT_SYS_RESET : return F("Timer Group0 Watch dog reset digital core"); // 7
|
||||
case TG1WDT_SYS_RESET : return F("Timer Group1 Watch dog reset digital core"); // 8
|
||||
case RTCWDT_SYS_RESET : return F("RTC Watch dog Reset digital core"); // 9
|
||||
case INTRUSION_RESET : return F("Instrusion tested to reset CPU"); // 10
|
||||
case TGWDT_CPU_RESET : return F("Time Group reset CPU"); // 11
|
||||
case SW_CPU_RESET : return F("Software reset CPU"); // 12
|
||||
case RTCWDT_CPU_RESET : return F("RTC Watch dog Reset CPU"); // 13
|
||||
case EXT_CPU_RESET : return F("or APP CPU, reseted by PRO CPU"); // 14
|
||||
case RTCWDT_BROWN_OUT_RESET : return F("Reset when the vdd voltage is not stable"); // 15
|
||||
case RTCWDT_RTC_RESET : return F("RTC Watch dog reset digital core and rtc module"); // 16
|
||||
default : return F("NO_MEAN"); // 0
|
||||
}
|
||||
}
|
||||
|
||||
String ESP_getResetReason(void)
|
||||
{
|
||||
return ESP32GetResetReason(0); // CPU 0
|
||||
}
|
||||
|
||||
uint32_t ESP_ResetInfoReason(void)
|
||||
{
|
||||
RESET_REASON reason = rtc_get_reset_reason(0);
|
||||
if (POWERON_RESET == reason) { return REASON_DEFAULT_RST; }
|
||||
if (SW_CPU_RESET == reason) { return REASON_SOFT_RESTART; }
|
||||
if (DEEPSLEEP_RESET == reason) { return REASON_DEEP_SLEEP_AWAKE; }
|
||||
if (SW_RESET == reason) { return REASON_EXT_SYS_RST; }
|
||||
}
|
||||
|
||||
uint32_t ESP_getChipId(void)
|
||||
{
|
||||
uint32_t id = 0;
|
||||
for (uint32_t i = 0; i < 17; i = i +8) {
|
||||
id |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
uint32_t ESP_getSketchSize(void)
|
||||
{
|
||||
static uint32_t sketchsize = 0;
|
||||
|
||||
if (!sketchsize) {
|
||||
sketchsize = ESP.getSketchSize(); // This takes almost 2 seconds on an ESP32
|
||||
}
|
||||
return sketchsize;
|
||||
}
|
||||
|
||||
void ESP_Restart(void)
|
||||
{
|
||||
ESP.restart();
|
||||
}
|
||||
|
||||
#endif // ESP32
|
||||
|
|
|
@ -708,8 +708,7 @@ void EspRestart(void)
|
|||
ResetPwm();
|
||||
WifiShutdown(true);
|
||||
CrashDumpClear(); // Clear the stack dump in RTC
|
||||
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
||||
ESP_reset();
|
||||
ESP_Restart();
|
||||
}
|
||||
|
||||
#ifndef ARDUINO_ESP8266_RELEASE_2_3_0
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#ifdef ESP32
|
||||
#include <esp8266toEsp32.h>
|
||||
#define PACKED __attribute((__packed__))
|
||||
// Modul
|
||||
#undef MODULE
|
||||
#define MODULE WEMOS // [Module] Select default model
|
||||
|
@ -10,13 +9,6 @@
|
|||
|
||||
#ifdef ESP8266
|
||||
// ESP8266
|
||||
#define PACKED
|
||||
#define ESP_getResetReason() ESP.getResetReason()
|
||||
#define ESP_reset() ESP.reset()
|
||||
#define ESP_getBootVersion() ESP.getBootVersion()
|
||||
#define ESP_getFlashChipId() ESP.getFlashChipId()
|
||||
#define ESP_getSketchSize() ESP.getSketchSize()
|
||||
#define ESP_getChipId() ESP.getChipId()
|
||||
//
|
||||
// UDP
|
||||
#define PortUdp_write(p,n) PortUdp.write(p, n)
|
||||
|
|
|
@ -2123,7 +2123,11 @@ void HandleInformation(void)
|
|||
WSContentSend_P(PSTR("}1" D_BUILD_DATE_AND_TIME "}2%s"), GetBuildDateAndTime().c_str());
|
||||
WSContentSend_P(PSTR("}1" D_CORE_AND_SDK_VERSION "}2" ARDUINO_CORE_RELEASE "/%s"), ESP.getSdkVersion());
|
||||
WSContentSend_P(PSTR("}1" D_UPTIME "}2%s"), GetUptime().c_str());
|
||||
#ifdef ESP8266
|
||||
WSContentSend_P(PSTR("}1" D_FLASH_WRITE_COUNT "}2%d at 0x%X"), Settings.save_flag, GetSettingsAddress());
|
||||
#else
|
||||
WSContentSend_P(PSTR("}1" D_FLASH_WRITE_COUNT "}2%d"), Settings.save_flag);
|
||||
#endif
|
||||
WSContentSend_P(PSTR("}1" D_BOOT_COUNT "}2%d"), Settings.bootcount);
|
||||
WSContentSend_P(PSTR("}1" D_RESTART_REASON "}2%s"), GetResetReason().c_str());
|
||||
uint32_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
||||
|
@ -2197,7 +2201,9 @@ void HandleInformation(void)
|
|||
|
||||
WSContentSend_P(PSTR("}1}2 ")); // Empty line
|
||||
WSContentSend_P(PSTR("}1" D_ESP_CHIP_ID "}2%d"), ESP_getChipId());
|
||||
WSContentSend_P(PSTR("}1" D_FLASH_CHIP_ID "}20x%06X"), ESP_getFlashChipId());
|
||||
#ifdef ESP8266
|
||||
WSContentSend_P(PSTR("}1" D_FLASH_CHIP_ID "}20x%06X"), ESP.getFlashChipId());
|
||||
#endif
|
||||
WSContentSend_P(PSTR("}1" D_FLASH_CHIP_SIZE "}2%dkB"), ESP.getFlashChipRealSize() / 1024);
|
||||
WSContentSend_P(PSTR("}1" D_PROGRAM_FLASH_SIZE "}2%dkB"), ESP.getFlashChipSize() / 1024);
|
||||
WSContentSend_P(PSTR("}1" D_PROGRAM_SIZE "}2%dkB"), ESP_getSketchSize() / 1024);
|
||||
|
|
Loading…
Reference in New Issue