mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-22 02:06:31 +00:00
Change ESP32 freeHeap to MaxAllocHeap
This commit is contained in:
parent
d013fbbab8
commit
be1fb3756c
@ -47,7 +47,7 @@ uint16_t SendMail(char *buffer) {
|
|||||||
|
|
||||||
|
|
||||||
// return if not enough memory
|
// return if not enough memory
|
||||||
uint16_t mem=ESP.getFreeHeap();
|
uint16_t mem=ESP_getFreeHeap();
|
||||||
if (mem<SEND_MAIL_MINRAM) {
|
if (mem<SEND_MAIL_MINRAM) {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ void OsWatchTicker(void)
|
|||||||
|
|
||||||
#ifdef DEBUG_THEO
|
#ifdef DEBUG_THEO
|
||||||
int32_t rssi = WiFi.RSSI();
|
int32_t rssi = WiFi.RSSI();
|
||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_OSWATCH " FreeRam %d, rssi %d %% (%d dBm), last_run %d"), ESP.getFreeHeap(), WifiGetRssiAsQuality(rssi), rssi, last_run);
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_OSWATCH " FreeRam %d, rssi %d %% (%d dBm), last_run %d"), ESP_getFreeHeap(), WifiGetRssiAsQuality(rssi), rssi, last_run);
|
||||||
#endif // DEBUG_THEO
|
#endif // DEBUG_THEO
|
||||||
if (last_run >= (OSWATCH_RESET_TIME * 1000)) {
|
if (last_run >= (OSWATCH_RESET_TIME * 1000)) {
|
||||||
// AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_OSWATCH " " D_BLOCKED_LOOP ". " D_RESTARTING)); // Save iram space
|
// AddLog_P(LOG_LEVEL_INFO, PSTR(D_LOG_APPLICATION D_OSWATCH " " D_BLOCKED_LOOP ". " D_RESTARTING)); // Save iram space
|
||||||
|
@ -465,7 +465,7 @@ void CmndStatus(void)
|
|||||||
#endif
|
#endif
|
||||||
",\"" D_JSON_FLASHMODE "\":%d,\""
|
",\"" D_JSON_FLASHMODE "\":%d,\""
|
||||||
D_JSON_FEATURES "\":[\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\"]"),
|
D_JSON_FEATURES "\":[\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\",\"%08X\"]"),
|
||||||
ESP_getSketchSize()/1024, ESP.getFreeSketchSpace()/1024, ESP.getFreeHeap()/1024,
|
ESP_getSketchSize()/1024, ESP.getFreeSketchSpace()/1024, ESP_getFreeHeap()/1024,
|
||||||
ESP.getFlashChipSize()/1024, ESP.getFlashChipRealSize()/1024
|
ESP.getFlashChipSize()/1024, ESP.getFlashChipRealSize()/1024
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
, ESP.getFlashChipId()
|
, ESP.getFlashChipId()
|
||||||
|
@ -27,28 +27,27 @@ extern "C" {
|
|||||||
extern struct rst_info resetInfo;
|
extern struct rst_info resetInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ESP_ResetInfoReason(void)
|
uint32_t ESP_ResetInfoReason(void) {
|
||||||
{
|
|
||||||
return resetInfo.reason;
|
return resetInfo.reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
String ESP_getResetReason(void)
|
String ESP_getResetReason(void) {
|
||||||
{
|
|
||||||
return ESP.getResetReason();
|
return ESP.getResetReason();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ESP_getChipId(void)
|
uint32_t ESP_getChipId(void) {
|
||||||
{
|
|
||||||
return ESP.getChipId();
|
return ESP.getChipId();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ESP_getSketchSize(void)
|
uint32_t ESP_getSketchSize(void) {
|
||||||
{
|
|
||||||
return ESP.getSketchSize();
|
return ESP.getSketchSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESP_Restart(void)
|
uint32_t ESP_getFreeHeap(void) {
|
||||||
{
|
return ESP.getFreeHeap();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESP_Restart(void) {
|
||||||
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
// ESP.restart(); // This results in exception 3 on restarts on core 2.3.0
|
||||||
ESP.reset();
|
ESP.reset();
|
||||||
}
|
}
|
||||||
@ -64,8 +63,7 @@ void ESP_Restart(void)
|
|||||||
#include <nvs.h>
|
#include <nvs.h>
|
||||||
#include <rom/rtc.h>
|
#include <rom/rtc.h>
|
||||||
|
|
||||||
void NvmLoad(const char *sNvsName, const char *sName, void *pSettings, unsigned nSettingsLen)
|
void NvmLoad(const char *sNvsName, const char *sName, void *pSettings, unsigned nSettingsLen) {
|
||||||
{
|
|
||||||
nvs_handle handle;
|
nvs_handle handle;
|
||||||
noInterrupts();
|
noInterrupts();
|
||||||
nvs_open(sNvsName, NVS_READONLY, &handle);
|
nvs_open(sNvsName, NVS_READONLY, &handle);
|
||||||
@ -75,8 +73,7 @@ void NvmLoad(const char *sNvsName, const char *sName, void *pSettings, unsigned
|
|||||||
interrupts();
|
interrupts();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NvmSave(const char *sNvsName, const char *sName, const void *pSettings, unsigned nSettingsLen)
|
void NvmSave(const char *sNvsName, const char *sName, const void *pSettings, unsigned nSettingsLen) {
|
||||||
{
|
|
||||||
nvs_handle handle;
|
nvs_handle handle;
|
||||||
noInterrupts();
|
noInterrupts();
|
||||||
nvs_open(sNvsName, NVS_READWRITE, &handle);
|
nvs_open(sNvsName, NVS_READWRITE, &handle);
|
||||||
@ -86,8 +83,7 @@ void NvmSave(const char *sNvsName, const char *sName, const void *pSettings, uns
|
|||||||
interrupts();
|
interrupts();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NvmErase(const char *sNvsName)
|
void NvmErase(const char *sNvsName) {
|
||||||
{
|
|
||||||
nvs_handle handle;
|
nvs_handle handle;
|
||||||
noInterrupts();
|
noInterrupts();
|
||||||
nvs_open(sNvsName, NVS_READWRITE, &handle);
|
nvs_open(sNvsName, NVS_READWRITE, &handle);
|
||||||
@ -97,16 +93,10 @@ void NvmErase(const char *sNvsName)
|
|||||||
interrupts();
|
interrupts();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsErase(uint8_t type)
|
void SettingsErase(uint8_t type) {
|
||||||
{
|
if (1 == type) { // SDK parameter area
|
||||||
if (1 == type) // SDK parameter area
|
} else if (2 == type) { // Tasmota parameter area (0x0F3xxx - 0x0FBFFF)
|
||||||
{
|
} else if (3 == type) { // Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF)
|
||||||
}
|
|
||||||
else if (2 == type) // Tasmota parameter area (0x0F3xxx - 0x0FBFFF)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
else if (3 == type) // Tasmota and SDK parameter area (0x0F3xxx - 0x0FFFFF)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NvmErase("main");
|
NvmErase("main");
|
||||||
@ -114,23 +104,19 @@ void SettingsErase(uint8_t type)
|
|||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " t=%d"), type);
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_ERASE " t=%d"), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsRead(void *data, size_t size)
|
void SettingsRead(void *data, size_t size) {
|
||||||
{
|
|
||||||
NvmLoad("main", "Settings", data, size);
|
NvmLoad("main", "Settings", data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsWrite(const void *pSettings, unsigned nSettingsLen)
|
void SettingsWrite(const void *pSettings, unsigned nSettingsLen) {
|
||||||
{
|
|
||||||
NvmSave("main", "Settings", pSettings, nSettingsLen);
|
NvmSave("main", "Settings", pSettings, nSettingsLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QPCRead(void *pSettings, unsigned nSettingsLen)
|
void QPCRead(void *pSettings, unsigned nSettingsLen) {
|
||||||
{
|
|
||||||
NvmLoad("qpc", "pcreg", pSettings, nSettingsLen);
|
NvmLoad("qpc", "pcreg", pSettings, nSettingsLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QPCWrite(const void *pSettings, unsigned nSettingsLen)
|
void QPCWrite(const void *pSettings, unsigned nSettingsLen) {
|
||||||
{
|
|
||||||
NvmSave("qpc", "pcreg", pSettings, nSettingsLen);
|
NvmSave("qpc", "pcreg", pSettings, nSettingsLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,13 +125,11 @@ void QPCWrite(const void *pSettings, unsigned nSettingsLen)
|
|||||||
//
|
//
|
||||||
static bool bNetIsTimeSync = false;
|
static bool bNetIsTimeSync = false;
|
||||||
//
|
//
|
||||||
void SntpInit()
|
void SntpInit() {
|
||||||
{
|
|
||||||
bNetIsTimeSync = true;
|
bNetIsTimeSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t SntpGetCurrentTimestamp(void)
|
uint32_t SntpGetCurrentTimestamp(void) {
|
||||||
{
|
|
||||||
time_t now = 0;
|
time_t now = 0;
|
||||||
if (bNetIsTimeSync || ntp_force_sync)
|
if (bNetIsTimeSync || ntp_force_sync)
|
||||||
{
|
{
|
||||||
@ -163,20 +147,17 @@ uint32_t SntpGetCurrentTimestamp(void)
|
|||||||
// Crash stuff
|
// Crash stuff
|
||||||
//
|
//
|
||||||
|
|
||||||
void CrashDump(void)
|
void CrashDump(void) {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CrashFlag(void)
|
bool CrashFlag(void) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CrashDumpClear(void)
|
void CrashDumpClear(void) {
|
||||||
{
|
|
||||||
}
|
}
|
||||||
void CmndCrash(void)
|
|
||||||
{
|
void CmndCrash(void) {
|
||||||
/*
|
/*
|
||||||
volatile uint32_t dummy;
|
volatile uint32_t dummy;
|
||||||
dummy = *((uint32_t*) 0x00000000);
|
dummy = *((uint32_t*) 0x00000000);
|
||||||
@ -184,8 +165,7 @@ void CmndCrash(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do an infinite loop to trigger WDT watchdog
|
// Do an infinite loop to trigger WDT watchdog
|
||||||
void CmndWDT(void)
|
void CmndWDT(void) {
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
volatile uint32_t dummy = 0;
|
volatile uint32_t dummy = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -194,8 +174,7 @@ void CmndWDT(void)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
// This will trigger the os watch after OSWATCH_RESET_TIME (=120) seconds
|
// This will trigger the os watch after OSWATCH_RESET_TIME (=120) seconds
|
||||||
void CmndBlockedLoop(void)
|
void CmndBlockedLoop(void) {
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
while (1) {
|
while (1) {
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@ -210,8 +189,7 @@ void CmndBlockedLoop(void)
|
|||||||
#include "soc/soc.h"
|
#include "soc/soc.h"
|
||||||
#include "soc/rtc_cntl_reg.h"
|
#include "soc/rtc_cntl_reg.h"
|
||||||
|
|
||||||
void DisableBrownout(void)
|
void DisableBrownout(void) {
|
||||||
{
|
|
||||||
// https://github.com/espressif/arduino-esp32/issues/863#issuecomment-347179737
|
// https://github.com/espressif/arduino-esp32/issues/863#issuecomment-347179737
|
||||||
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Disable brownout detector
|
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); // Disable brownout detector
|
||||||
}
|
}
|
||||||
@ -220,8 +198,7 @@ void DisableBrownout(void)
|
|||||||
// ESP32 Alternatives
|
// ESP32 Alternatives
|
||||||
//
|
//
|
||||||
|
|
||||||
String ESP32GetResetReason(uint32_t cpu_no)
|
String ESP32GetResetReason(uint32_t cpu_no) {
|
||||||
{
|
|
||||||
// tools\sdk\include\esp32\rom\rtc.h
|
// tools\sdk\include\esp32\rom\rtc.h
|
||||||
switch (rtc_get_reset_reason( (RESET_REASON) cpu_no)) {
|
switch (rtc_get_reset_reason( (RESET_REASON) cpu_no)) {
|
||||||
case POWERON_RESET : return F("Vbat power on reset"); // 1
|
case POWERON_RESET : return F("Vbat power on reset"); // 1
|
||||||
@ -243,13 +220,11 @@ String ESP32GetResetReason(uint32_t cpu_no)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String ESP_getResetReason(void)
|
String ESP_getResetReason(void) {
|
||||||
{
|
|
||||||
return ESP32GetResetReason(0); // CPU 0
|
return ESP32GetResetReason(0); // CPU 0
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ESP_ResetInfoReason(void)
|
uint32_t ESP_ResetInfoReason(void) {
|
||||||
{
|
|
||||||
RESET_REASON reason = rtc_get_reset_reason(0);
|
RESET_REASON reason = rtc_get_reset_reason(0);
|
||||||
if (POWERON_RESET == reason) { return REASON_DEFAULT_RST; }
|
if (POWERON_RESET == reason) { return REASON_DEFAULT_RST; }
|
||||||
if (SW_CPU_RESET == reason) { return REASON_SOFT_RESTART; }
|
if (SW_CPU_RESET == reason) { return REASON_SOFT_RESTART; }
|
||||||
@ -257,8 +232,7 @@ uint32_t ESP_ResetInfoReason(void)
|
|||||||
if (SW_RESET == reason) { return REASON_EXT_SYS_RST; }
|
if (SW_RESET == reason) { return REASON_EXT_SYS_RST; }
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ESP_getChipId(void)
|
uint32_t ESP_getChipId(void) {
|
||||||
{
|
|
||||||
uint32_t id = 0;
|
uint32_t id = 0;
|
||||||
for (uint32_t i = 0; i < 17; i = i +8) {
|
for (uint32_t i = 0; i < 17; i = i +8) {
|
||||||
id |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
|
id |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
|
||||||
@ -266,8 +240,7 @@ uint32_t ESP_getChipId(void)
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t ESP_getSketchSize(void)
|
uint32_t ESP_getSketchSize(void) {
|
||||||
{
|
|
||||||
static uint32_t sketchsize = 0;
|
static uint32_t sketchsize = 0;
|
||||||
|
|
||||||
if (!sketchsize) {
|
if (!sketchsize) {
|
||||||
@ -276,8 +249,12 @@ uint32_t ESP_getSketchSize(void)
|
|||||||
return sketchsize;
|
return sketchsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESP_Restart(void)
|
uint32_t ESP_getFreeHeap(void) {
|
||||||
{
|
// return ESP.getFreeHeap();
|
||||||
|
return ESP.getMaxAllocHeap();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESP_Restart(void) {
|
||||||
ESP.restart();
|
ESP.restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,7 +629,7 @@ void MqttShowState(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
ResponseAppend_P(PSTR(",\"" D_JSON_HEAPSIZE "\":%d,\"SleepMode\":\"%s\",\"Sleep\":%u,\"LoadAvg\":%u,\"MqttCount\":%u"),
|
ResponseAppend_P(PSTR(",\"" D_JSON_HEAPSIZE "\":%d,\"SleepMode\":\"%s\",\"Sleep\":%u,\"LoadAvg\":%u,\"MqttCount\":%u"),
|
||||||
ESP.getFreeHeap()/1024, GetTextIndexed(stemp1, sizeof(stemp1), Settings.flag3.sleep_normal, kSleepMode), // SetOption60 - Enable normal sleep instead of dynamic sleep
|
ESP_getFreeHeap()/1024, GetTextIndexed(stemp1, sizeof(stemp1), Settings.flag3.sleep_normal, kSleepMode), // SetOption60 - Enable normal sleep instead of dynamic sleep
|
||||||
ssleep, loop_load_avg, MqttConnectCount());
|
ssleep, loop_load_avg, MqttConnectCount());
|
||||||
|
|
||||||
for (uint32_t i = 1; i <= devices_present; i++) {
|
for (uint32_t i = 1; i <= devices_present; i++) {
|
||||||
|
@ -2110,7 +2110,7 @@ void HandleInformation(void)
|
|||||||
|
|
||||||
char stopic[TOPSZ];
|
char stopic[TOPSZ];
|
||||||
|
|
||||||
int freeMem = ESP.getFreeHeap();
|
int freeMem = ESP_getFreeHeap();
|
||||||
|
|
||||||
WSContentStart_P(S_INFORMATION);
|
WSContentStart_P(S_INFORMATION);
|
||||||
// Save 1k of code space replacing table html with javascript replace codes
|
// Save 1k of code space replacing table html with javascript replace codes
|
||||||
|
@ -1415,7 +1415,7 @@ chknext:
|
|||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (!strncmp(vname,"heap",4)) {
|
if (!strncmp(vname,"heap",4)) {
|
||||||
fvar=ESP.getFreeHeap();
|
fvar=ESP_getFreeHeap();
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
if (!strncmp(vname,"hn(",3)) {
|
if (!strncmp(vname,"hn(",3)) {
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
// str - Manuf (null terminated C string, 32 chars max)
|
// str - Manuf (null terminated C string, 32 chars max)
|
||||||
// str - FriendlyName (null terminated C string, 32 chars max)
|
// str - FriendlyName (null terminated C string, 32 chars max)
|
||||||
// reserved for extensions
|
// reserved for extensions
|
||||||
// -- V2 --
|
// -- V2 --
|
||||||
// int8_t - bulbtype
|
// int8_t - bulbtype
|
||||||
|
|
||||||
// Memory footprint
|
// Memory footprint
|
||||||
@ -61,7 +61,7 @@ public:
|
|||||||
uint32_t name; // simple 4 letters name. Currently 'skey', 'crt ', 'crt1', 'crt2'
|
uint32_t name; // simple 4 letters name. Currently 'skey', 'crt ', 'crt1', 'crt2'
|
||||||
uint16_t len; // len of object
|
uint16_t len; // len of object
|
||||||
uint16_t reserved; // align on 4 bytes boundary
|
uint16_t reserved; // align on 4 bytes boundary
|
||||||
};
|
};
|
||||||
|
|
||||||
const static uint32_t ZIGB_NAME = 0x3167697A; // 'zig1' little endian
|
const static uint32_t ZIGB_NAME = 0x3167697A; // 'zig1' little endian
|
||||||
const static size_t Z_MAX_FLASH = z_block_len - sizeof(z_flashdata_t); // 2040
|
const static size_t Z_MAX_FLASH = z_block_len - sizeof(z_flashdata_t); // 2040
|
||||||
@ -202,8 +202,8 @@ void hydrateDevices(const SBuffer &buf) {
|
|||||||
for (uint32_t i = 0; (i < num_devices) && (k < buf_len); i++) {
|
for (uint32_t i = 0; (i < num_devices) && (k < buf_len); i++) {
|
||||||
uint32_t dev_record_len = buf.get8(k);
|
uint32_t dev_record_len = buf.get8(k);
|
||||||
|
|
||||||
// AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "Device %d Before Memory = %d // DIFF %d // record_len %d"), i, ESP.getFreeHeap(), before - ESP.getFreeHeap(), dev_record_len);
|
// AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "Device %d Before Memory = %d // DIFF %d // record_len %d"), i, ESP_getFreeHeap(), before - ESP_getFreeHeap(), dev_record_len);
|
||||||
// before = ESP.getFreeHeap();
|
// before = ESP_getFreeHeap();
|
||||||
|
|
||||||
SBuffer buf_d = buf.subBuffer(k, dev_record_len);
|
SBuffer buf_d = buf.subBuffer(k, dev_record_len);
|
||||||
|
|
||||||
@ -238,7 +238,7 @@ void hydrateDevices(const SBuffer &buf) {
|
|||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "Device 0x%04X Memory3.shrink = %d"), shortaddr, ESP.getFreeHeap());
|
//AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "Device 0x%04X Memory3.shrink = %d"), shortaddr, ESP_getFreeHeap());
|
||||||
|
|
||||||
// parse 3 strings
|
// parse 3 strings
|
||||||
char empty[] = "";
|
char empty[] = "";
|
||||||
@ -269,14 +269,14 @@ void hydrateDevices(const SBuffer &buf) {
|
|||||||
|
|
||||||
// next iteration
|
// next iteration
|
||||||
k += dev_record_len;
|
k += dev_record_len;
|
||||||
//AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "Device %d After Memory = %d"), i, ESP.getFreeHeap());
|
//AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "Device %d After Memory = %d"), i, ESP_getFreeHeap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadZigbeeDevices(void) {
|
void loadZigbeeDevices(void) {
|
||||||
z_flashdata_t flashdata;
|
z_flashdata_t flashdata;
|
||||||
memcpy_P(&flashdata, z_dev_start, sizeof(z_flashdata_t));
|
memcpy_P(&flashdata, z_dev_start, sizeof(z_flashdata_t));
|
||||||
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "Memory %d"), ESP.getFreeHeap());
|
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "Memory %d"), ESP_getFreeHeap());
|
||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "Zigbee signature in Flash: %08X - %d"), flashdata.name, flashdata.len);
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "Zigbee signature in Flash: %08X - %d"), flashdata.name, flashdata.len);
|
||||||
|
|
||||||
// Check the signature
|
// Check the signature
|
||||||
@ -291,7 +291,7 @@ void loadZigbeeDevices(void) {
|
|||||||
} else {
|
} else {
|
||||||
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "No zigbee devices data in Flash"));
|
AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_ZIGBEE "No zigbee devices data in Flash"));
|
||||||
}
|
}
|
||||||
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "Memory %d"), ESP.getFreeHeap());
|
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_ZIGBEE "Memory %d"), ESP_getFreeHeap());
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveZigbeeDevices(void) {
|
void saveZigbeeDevices(void) {
|
||||||
@ -341,7 +341,7 @@ void eraseZigbeeDevices(void) {
|
|||||||
|
|
||||||
// Fill the Zigbee area with 0xFF
|
// Fill the Zigbee area with 0xFF
|
||||||
memset(spi_buffer + z_block_offset, 0xFF, z_block_len);
|
memset(spi_buffer + z_block_offset, 0xFF, z_block_len);
|
||||||
|
|
||||||
// buffer is now ready, write it back
|
// buffer is now ready, write it back
|
||||||
if (ESP.flashEraseSector(z_spi_start_sector)) {
|
if (ESP.flashEraseSector(z_spi_start_sector)) {
|
||||||
ESP.flashWrite(z_spi_start_sector * SPI_FLASH_SEC_SIZE, (uint32_t*) spi_buffer, SPI_FLASH_SEC_SIZE);
|
ESP.flashWrite(z_spi_start_sector * SPI_FLASH_SEC_SIZE, (uint32_t*) spi_buffer, SPI_FLASH_SEC_SIZE);
|
||||||
|
@ -160,7 +160,7 @@ void ZigbeeInit(void)
|
|||||||
// update commands with the current settings
|
// update commands with the current settings
|
||||||
Z_UpdateConfig(Settings.zb_channel, Settings.zb_pan_id, Settings.zb_ext_panid, Settings.zb_precfgkey_l, Settings.zb_precfgkey_h);
|
Z_UpdateConfig(Settings.zb_channel, Settings.zb_pan_id, Settings.zb_ext_panid, Settings.zb_precfgkey_l, Settings.zb_precfgkey_h);
|
||||||
|
|
||||||
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem1 = %d"), ESP.getFreeHeap());
|
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem1 = %d"), ESP_getFreeHeap());
|
||||||
zigbee.active = false;
|
zigbee.active = false;
|
||||||
if ((pin[GPIO_ZIGBEE_RX] < 99) && (pin[GPIO_ZIGBEE_TX] < 99)) {
|
if ((pin[GPIO_ZIGBEE_RX] < 99) && (pin[GPIO_ZIGBEE_TX] < 99)) {
|
||||||
AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_ZIGBEE "GPIOs Rx:%d Tx:%d"), pin[GPIO_ZIGBEE_RX], pin[GPIO_ZIGBEE_TX]);
|
AddLog_P2(LOG_LEVEL_DEBUG_MORE, PSTR(D_LOG_ZIGBEE "GPIOs Rx:%d Tx:%d"), pin[GPIO_ZIGBEE_RX], pin[GPIO_ZIGBEE_TX]);
|
||||||
@ -172,16 +172,16 @@ void ZigbeeInit(void)
|
|||||||
uint32_t aligned_buffer = ((uint32_t)serial_in_buffer + 3) & ~3;
|
uint32_t aligned_buffer = ((uint32_t)serial_in_buffer + 3) & ~3;
|
||||||
zigbee_buffer = new PreAllocatedSBuffer(sizeof(serial_in_buffer) - 3, (char*) aligned_buffer);
|
zigbee_buffer = new PreAllocatedSBuffer(sizeof(serial_in_buffer) - 3, (char*) aligned_buffer);
|
||||||
} else {
|
} else {
|
||||||
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem2 = %d"), ESP.getFreeHeap());
|
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem2 = %d"), ESP_getFreeHeap());
|
||||||
zigbee_buffer = new SBuffer(ZIGBEE_BUFFER_SIZE);
|
zigbee_buffer = new SBuffer(ZIGBEE_BUFFER_SIZE);
|
||||||
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem3 = %d"), ESP.getFreeHeap());
|
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem3 = %d"), ESP_getFreeHeap());
|
||||||
}
|
}
|
||||||
zigbee.active = true;
|
zigbee.active = true;
|
||||||
zigbee.init_phase = true; // start the state machine
|
zigbee.init_phase = true; // start the state machine
|
||||||
zigbee.state_machine = true; // start the state machine
|
zigbee.state_machine = true; // start the state machine
|
||||||
ZigbeeSerial->flush();
|
ZigbeeSerial->flush();
|
||||||
}
|
}
|
||||||
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem9 = %d"), ESP.getFreeHeap());
|
// AddLog_P2(LOG_LEVEL_INFO, PSTR("ZigbeeInit Mem9 = %d"), ESP_getFreeHeap());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
@ -310,7 +310,7 @@ void ZigbeeZNPSend(const uint8_t *msg, size_t len) {
|
|||||||
// Returns: None
|
// Returns: None
|
||||||
//
|
//
|
||||||
void ZigbeeZCLSend_Raw(uint16_t shortaddr, uint16_t groupaddr, uint16_t clusterId, uint8_t endpoint, uint8_t cmdId, bool clusterSpecific, uint16_t manuf, const uint8_t *msg, size_t len, bool needResponse, uint8_t transacId) {
|
void ZigbeeZCLSend_Raw(uint16_t shortaddr, uint16_t groupaddr, uint16_t clusterId, uint8_t endpoint, uint8_t cmdId, bool clusterSpecific, uint16_t manuf, const uint8_t *msg, size_t len, bool needResponse, uint8_t transacId) {
|
||||||
|
|
||||||
SBuffer buf(32+len);
|
SBuffer buf(32+len);
|
||||||
buf.add8(Z_SREQ | Z_AF); // 24
|
buf.add8(Z_SREQ | Z_AF); // 24
|
||||||
buf.add8(AF_DATA_REQUEST_EXT); // 02
|
buf.add8(AF_DATA_REQUEST_EXT); // 02
|
||||||
@ -345,7 +345,7 @@ void ZigbeeZCLSend_Raw(uint16_t shortaddr, uint16_t groupaddr, uint16_t clusterI
|
|||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************/
|
/********************************************************************************************/
|
||||||
//
|
//
|
||||||
// High-level function
|
// High-level function
|
||||||
// Send a command specified as an HEX string for the workload.
|
// Send a command specified as an HEX string for the workload.
|
||||||
// The target endpoint is computed if zero, i.e. sent to the first known endpoint of the device.
|
// The target endpoint is computed if zero, i.e. sent to the first known endpoint of the device.
|
||||||
@ -1016,7 +1016,7 @@ void CmndZbStatus(void) {
|
|||||||
if (XdrvMailbox.payload > 0) {
|
if (XdrvMailbox.payload > 0) {
|
||||||
if (0x0000 == shortaddr) { ResponseCmndChar_P(PSTR("Unknown device")); return; }
|
if (0x0000 == shortaddr) { ResponseCmndChar_P(PSTR("Unknown device")); return; }
|
||||||
}
|
}
|
||||||
|
|
||||||
String dump = zigbee_devices.dump(XdrvMailbox.index, shortaddr);
|
String dump = zigbee_devices.dump(XdrvMailbox.index, shortaddr);
|
||||||
Response_P(PSTR("{\"%s%d\":%s}"), XdrvMailbox.command, XdrvMailbox.index, dump.c_str());
|
Response_P(PSTR("{\"%s%d\":%s}"), XdrvMailbox.command, XdrvMailbox.index, dump.c_str());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user