Merge remote-tracking branch 'origin/small-changes' into mdev

This commit is contained in:
Frank
2022-10-13 19:41:37 +02:00
5 changed files with 177 additions and 21 deletions

View File

@@ -11,6 +11,9 @@
* detailed license conditions: https://github.com/Jason2866/ESP32_Show_Info/blob/main/LICENSE
*/
#include <Arduino.h>
#ifdef ARDUINO_ARCH_ESP32
#include "soc/spi_reg.h"
#include <soc/efuse_reg.h>
@@ -370,16 +373,38 @@ static void my_show_chip_info(void) {
#include <rom/rtc.h>
#endif
#if 0
// ESP8266 does this a bit differently
//
// include <user_interface.h>
//
// struct rst_info * rst_info;
// system_rtc_mem_read(0, &rst_info, sizeof(rst_info));
// reason = rst_info->reason;
// or
// reason = ESP.getResetInfoPtr()->reason;
//
// REASON_DEFAULT_RST = 0, /* normal startup by power on */
// REASON_WDT_RST = 1, /* hardware watch dog reset */
// REASON_EXCEPTION_RST = 2, /* exception reset, GPIO status wont change */
// REASON_SOFT_WDT_RST = 3, /* software watch dog reset, GPIO status wont change */
// REASON_SOFT_RESTART = 4, /* software restart ,system_restart , GPIO status wont change */
// REASON_DEEP_SLEEP_AWAKE = 5, /* wake up from deep-sleep */
// REASON_EXT_SYS_RST = 6 /* external system reset */
// reason > 6 = user-defined reason codes
#endif
void my_print_reset_reason(int reason)
{
Serial.print(reason);
switch (reason)
{
case 0 : Serial.print (" NA"); break;
case 0 : Serial.print (" NO_MEAN"); break;
case 1 : Serial.print (" POWERON_RESET");break; /**<1, Vbat power on reset*/
case 2 : Serial.print (" unknown exception"); break; /**<2, this code is not defined on ESP32 */
case 3 : Serial.print (" SW_RESET");break; /**<3, Software reset digital core*/
case 4 : Serial.print (" OWDT_RESET");break; /**<4, Legacy watch dog reset digital core*/
case 5 : Serial.print (" DEEPSLEEP_RESET");break; /**<5, Deep Sleep reset digital core*/
case 5 : Serial.print (" DEEPSLEEP_RESET");break; /**<5, Deep Sleep wakeup reset digital core*/
case 6 : Serial.print (" SDIO_RESET");break; /**<6, Reset by SLC module, reset digital core*/
case 7 : Serial.print (" TG0WDT_SYS_RESET");break; /**<7, Timer Group0 Watch dog reset digital core*/
case 8 : Serial.print (" TG1WDT_SYS_RESET");break; /**<8, Timer Group1 Watch dog reset digital core*/
@@ -391,13 +416,13 @@ void my_print_reset_reason(int reason)
case 14 : Serial.print(" EXT_CPU_RESET");break; /**<14, for APP CPU, reseted by PRO CPU*/
case 15 : Serial.print(" RTCWDT_BROWN_OUT_RESET");break; /**<15, Reset when the vdd voltage is not stable*/
case 16 : Serial.print(" RTCWDT_RTC_RESET");break; /**<16, RTC Watch dog reset digital core and rtc module*/
case 17 : Serial.print (" TG1WDT_CPU_RESET");break; /**<17, Time Group1 reset CPU*/
case 18 : Serial.print (" SUPER_WDT_RESET");break; /**<18, super watchdog reset digital core and rtc module*/
case 19 : Serial.print (" GLITCH_RTC_RESET");break; /**<19, glitch reset digital core and rtc module*/
case 20 : Serial.print (" EFUSE_RESET");break; /**<20, efuse reset digital core*/
case 21 : Serial.print (" USB_UART_CHIP_RESET");break; /**<21, usb uart reset digital core */
case 22 : Serial.print (" USB_JTAG_CHIP_RESET");break; /**<22, usb jtag reset digital core */
case 23 : Serial.print (" POWER_GLITCH_RESET");break; /**<23, power glitch reset digital core and rtc module*/
case 17 : Serial.print(" TG1WDT_CPU_RESET");break; /**<17, Time Group1 reset CPU*/
case 18 : Serial.print(" SUPER_WDT_RESET");break; /**<18, super watchdog reset digital core and rtc module*/
case 19 : Serial.print(" GLITCH_RTC_RESET");break; /**<19, glitch reset digital core and rtc module*/
case 20 : Serial.print(" EFUSE_RESET");break; /**<20, efuse reset digital core*/
case 21 : Serial.print(" USB_UART_CHIP_RESET");break; /**<21, usb uart reset digital core */
case 22 : Serial.print(" USB_JTAG_CHIP_RESET");break; /**<22, usb jtag reset digital core */
case 23 : Serial.print(" POWER_GLITCH_RESET");break; /**<23, power glitch reset digital core and rtc module*/
default : Serial.print (" NO_MEAN");
}
}
@@ -556,3 +581,8 @@ void showRealSpeed() {
Serial.println(F("====================================\n"));
Serial.flush();
}
#else
#error this tool only supports ESP32 chips
#endif

View File

@@ -0,0 +1,6 @@
# Name, Type, SubType, Offsaet, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x200000,
app1, app, ota_1, 0x210000, 0x200000,
spiffs, data, spiffs, 0x410000, 0x7f0000,
1 # Name Type SubType Offsaet Size Flags
2 nvs data nvs 0x9000 0x5000
3 otadata data ota 0xe000 0x2000
4 app0 app ota_0 0x10000 0x200000
5 app1 app ota_1 0x210000 0x200000
6 spiffs data spiffs 0x410000 0x7f0000

View File

@@ -1083,7 +1083,7 @@ uint16_t mode_running_random(void) {
uint8_t z = it % zoneSize;
bool nzone = (!z && it != SEGENV.aux1);
for (int i=SEGLEN-1; i > 0; i--) {
for (int i=SEGLEN-1; i >= 0; i--) { // WLEDSR bugfix
if (nzone || z >= zoneSize) {
uint8_t lastrand = PRNG16 >> 8;
int16_t diff = 0;
@@ -1724,7 +1724,7 @@ uint16_t mode_random_chase(void)
uint32_t color = SEGENV.step;
random16_set_seed(SEGENV.aux0);
for (int i = SEGLEN -1; i > 0; i--) {
for (int i = SEGLEN -1; i >= 0; i--) { // WLEDSR bugfix
uint8_t r = random8(6) != 0 ? (color >> 16 & 0xFF) : random8();
uint8_t g = random8(6) != 0 ? (color >> 8 & 0xFF) : random8();
uint8_t b = random8(6) != 0 ? (color & 0xFF) : random8();
@@ -2831,7 +2831,7 @@ uint16_t mode_bouncing_balls(void) {
balls[i].lastBounceTime = time;
if (balls[i].impactVelocity < 0.015f) {
float impactVelocityStart = sqrt(-2 * gravity) * random8(5,11)/10.0f; // randomize impact velocity
float impactVelocityStart = sqrtf(-2 * gravity) * random8(5,11)/10.0f; // randomize impact velocity
balls[i].impactVelocity = impactVelocityStart;
}
} else if (balls[i].height > 1.0f) {
@@ -2973,7 +2973,7 @@ uint16_t mode_popcorn(void) {
uint16_t peakHeight = 128 + random8(128); //0-255
peakHeight = (peakHeight * (SEGLEN -1)) >> 8;
popcorn[i].vel = sqrt(-2.0 * gravity * peakHeight);
popcorn[i].vel = sqrtf(-2.0 * gravity * peakHeight);
if (SEGMENT.palette)
{
@@ -3273,7 +3273,7 @@ uint16_t mode_exploding_fireworks(void)
flare->posX = strip.isMatrix ? random16(2,cols-1) : (SEGMENT.intensity > random8()); // will enable random firing side on 1D
uint16_t peakHeight = 75 + random8(180); //0-255
peakHeight = (peakHeight * (rows -1)) >> 8;
flare->vel = sqrt(-2.0f * gravity * peakHeight);
flare->vel = sqrtf(-2.0f * gravity * peakHeight);
flare->velX = strip.isMatrix ? (random8(8)-4)/32.f : 0; // no X velocity on 1D
flare->col = 255; //brightness
SEGENV.aux0 = 1;
@@ -5332,7 +5332,7 @@ uint16_t mode_2DPolarLights(void) { // By: Kostyantyn Matviyevskyy https
SEGMENT.setPixelColorXY(x, y, ColorFromPalette(auroraPalette,
qsub8(
inoise8((SEGENV.step%2) + x * _scale, y * 16 + SEGENV.step % 16, SEGENV.step / _speed),
fabs((float)rows / 2 - (float)y) * adjustHeight)));
fabsf((float)rows / 2 - (float)y) * adjustHeight)));
}
}
@@ -5784,13 +5784,13 @@ uint16_t mode_2Dfloatingblobs(void) {
// change radius if needed
if (blob->grow[i]) {
// enlarge radius until it is >= 4
blob->r[i] += (fabs(blob->sX[i]) > fabs(blob->sY[i]) ? fabs(blob->sX[i]) : fabs(blob->sY[i])) * 0.05f;
blob->r[i] += (fabsf(blob->sX[i]) > fabsf(blob->sY[i]) ? fabsf(blob->sX[i]) : fabsf(blob->sY[i])) * 0.05f;
if (blob->r[i] >= MIN(cols/4.f,2.f)) {
blob->grow[i] = false;
}
} else {
// reduce radius until it is < 1
blob->r[i] -= (fabs(blob->sX[i]) > fabs(blob->sY[i]) ? fabs(blob->sX[i]) : fabs(blob->sY[i])) * 0.05f;
blob->r[i] -= (fabsf(blob->sX[i]) > fabsf(blob->sY[i]) ? fabsf(blob->sX[i]) : fabsf(blob->sY[i])) * 0.05f;
if (blob->r[i] < 1.f) {
blob->grow[i] = true;
}
@@ -7020,7 +7020,7 @@ uint16_t mode_rocktaves(void) { // Rocktaves. Same note from eac
}
frTemp -=132; // This should give us a base musical note of C3
frTemp = fabs(frTemp * 2.1); // Fudge factors to compress octave range starting at 0 and going to 255;
frTemp = fabsf(frTemp * 2.1); // Fudge factors to compress octave range starting at 0 and going to 255;
uint16_t i = map(beatsin8(8+octCount*4, 0, 255, 0, octCount*8), 0, 255, 0, SEGLEN-1);
i = constrain(i, 0, SEGLEN-1);

View File

@@ -670,12 +670,19 @@ ${inforow("Uptime",getRuntimeStr(i.uptime))}
${inforow("Total heap",theap," kB")}
${inforow("Free heap",heap," kB")}
${i.tpram?inforow("Total PSRAM",(i.tpram/1024).toFixed(1)," kB"):""}
${i.psram?inforow("Free PSRAM",(i.psram/1024).toFixed(1)," kB"):""}
${i.psram?inforow("Used PSRAM",(i.tpram-i.psram)," B"):""}
${inforow("Estimated current",pwru)}
${inforow("Average FPS",i.leds.fps)}
${inforow("MAC address",i.mac)}
${inforow("Filesystem",i.fs.u + "/" + i.fs.t + " kB (" +Math.round(i.fs.u*100/i.fs.t) + "%)")}
${inforow("Environment",i.arch + " " + i.core + " (" + i.lwip + ")")}
<!-- WLEDSR begin-->
<tr><td colspan=2><hr style="height:1px;border-width:0;color:SeaGreen;background-color:SeaGreen"></td></tr>
${i.e32model?inforow(i.e32model,i.e32cores +" core(s)"," "+i.e32speed+" Mhz"):""}
${i.e32flash?inforow("Flash "+i.e32flash+" MB"+", mode "+i.e32flashmode+i.e32flashtext,i.e32flashspeed," Mhz"):""}
${i.e32core0code?inforow("Core0 bootcode", i.e32core0code, " "+i.e32core0text):""}
${i.e32core1code?inforow("Core1 bootcode",i.e32core1code, " "+i.e32core1text):""}
<!-- WLEDSR end-->
</table>`;
gId('kv').innerHTML = cn;
// update all sliders in Info

View File

@@ -2,6 +2,29 @@
#include "palettes.h"
// begin WLEDSR
#ifdef ARDUINO_ARCH_ESP32
#include <Esp.h>
// get the right RTC.H for each MCU
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 0, 0)
#if CONFIG_IDF_TARGET_ESP32S2
#include <esp32s2/rom/rtc.h>
#elif CONFIG_IDF_TARGET_ESP32C3
#include <esp32c3/rom/rtc.h>
#elif CONFIG_IDF_TARGET_ESP32S3
#include <esp32s3/rom/rtc.h>
#elif CONFIG_IDF_TARGET_ESP32 // ESP32/PICO-D4
#include <esp32/rom/rtc.h>
#endif
#else // ESP32 Before IDF 4.0
#include <rom/rtc.h>
#endif
#else // for 8266
#include <Esp.h>
#include <user_interface.h>
#endif
// end WLEDSR
/*
* JSON API (De)serialization
*/
@@ -552,6 +575,63 @@ void serializeState(JsonObject root, bool forPreset, bool includeBri, bool segme
}
}
// begin WLEDSR
#ifdef ARDUINO_ARCH_ESP32
static String resetCode2Info(int reason) {
switch(reason) {
case 1 : // 1 = Vbat power on reset
return F("power-on"); break;
case 2 : // 2 = this code is not defined on ESP32
return F("exception"); break;
case 3 : // 3 = Software reset digital core
case 12: //12 = Software reset CPU
return F("SW reboot"); break;
case 5 : // 5 = Deep Sleep wakeup reset digital core
return F("wakeup"); break;
case 14: //14 = for APP CPU, reset by PRO CPU
return F("restart"); break;
case 15: //15 = Reset when the vdd voltage is not stable (brownout)
return F("brown-out"); break;
// watchdog resets
case 4 : // 4 = Legacy watch dog reset digital core
case 6 : // 6 = Reset by SLC module, reset digital core
case 7 : // 7 = Timer Group0 Watch dog reset digital core
case 8 : // 8 = Timer Group1 Watch dog reset digital core
case 9 : // 9 = RTC Watch dog Reset digital core
case 11: //11 = Time Group watchdog reset CPU
case 13: //13 = RTC Watch dog Reset CPU
case 16: //16 = RTC Watch dog reset digital core and rtc module
case 17: //17 = Time Group1 reset CPU
return F("watchdog"); break;
case 18: //18 = super watchdog reset digital core and rtc module
return F("super watchdog"); break;
// misc
case 10: // 10 = Instrusion tested to reset CPU
return F("intrusion"); break;
case 19: //19 = glitch reset digital core and rtc module
return F("glitch"); break;
case 20: //20 = efuse reset digital core
return F("EFUSE reset"); break;
case 21: //21 = usb uart reset digital core
return F("USB UART reset"); break;
case 22: //22 = usb jtag reset digital core
return F("JTAG reset"); break;
case 23: //23 = power glitch reset digital core and rtc module
return F("power glitch"); break;
// unknown reason code
case 0:
return F(""); break;
default:
return F("unknown"); break;
}
}
#endif
// end WLEDSR
void serializeInfo(JsonObject root)
{
root[F("ver")] = versionString;
@@ -670,9 +750,11 @@ void serializeInfo(JsonObject root)
//root[F("maxalloc")] = ESP.getMaxAllocHeap();
#ifdef WLED_DEBUG
root[F("resetReason0")] = (int)rtc_get_reset_reason(0);
root[F("resetReason1")] = (int)rtc_get_reset_reason(1);
if(ESP.getChipCores() > 1) // WLEDSR
root[F("resetReason1")] = (int)rtc_get_reset_reason(1);
#endif
root[F("lwip")] = 0; //deprecated
root[F("totalheap")] = ESP.getHeapSize(); //WLEDSR
#else
root[F("arch")] = "esp8266";
root[F("core")] = ESP.getCoreVersion();
@@ -683,12 +765,43 @@ void serializeInfo(JsonObject root)
root[F("lwip")] = LWIP_VERSION_MAJOR;
#endif
root[F("totalheap")] = ESP.getHeapSize(); //WLEDSR
root[F("freeheap")] = ESP.getFreeHeap();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLED_USE_PSRAM)
if (psramFound()) root[F("tpram")] = ESP.getPsramSize(); //WLEDSR
if (psramFound()) root[F("psram")] = ESP.getFreePsram();
#endif
// begin WLEDSR
#ifdef ARDUINO_ARCH_ESP32
root[F("e32core0code")] = (int)rtc_get_reset_reason(0);
root[F("e32core0text")] = resetCode2Info(rtc_get_reset_reason(0));
if(ESP.getChipCores() > 1) {
root[F("e32core1code")] = (int)rtc_get_reset_reason(1);
root[F("e32core1text")] = resetCode2Info(rtc_get_reset_reason(1));
}
static char msgbuf[32];
snprintf(msgbuf, sizeof(msgbuf)-1, "%s rev.%d", ESP.getChipModel(), ESP.getChipRevision());
root[F("e32model")] = msgbuf;
root[F("e32cores")] = ESP.getChipCores();
root[F("e32speed")] = ESP.getCpuFreqMHz();
root[F("e32flash")] = int((ESP.getFlashChipSize()/1024)/1024);
root[F("e32flashspeed")] = int(ESP.getFlashChipSpeed()/1000000);
root[F("e32flashmode")] = int(ESP.getFlashChipMode());
switch (ESP.getFlashChipMode()) {
// missing: Octal modes
case FM_QIO: root[F("e32flashtext")] = F(" (QIO)"); break;
case FM_QOUT: root[F("e32flashtext")] = F(" (QOUT)");break;
case FM_DIO: root[F("e32flashtext")] = F(" (DIO)"); break;
case FM_DOUT: root[F("e32flashtext")] = F(" (DOUT or other)");break;
default: root[F("e32flashtext")] = F(" (other)"); break;
}
#else // for 8266
root[F("e32core0code")] = (int)ESP.getResetInfoPtr()->reason;
root[F("e32core0text")] = F("");
#endif
// end WLEDSR
root[F("uptime")] = millis()/1000 + rolloverMillis*4294967;
usermods.addToJsonInfo(root);