Add get_info

This commit is contained in:
fvanroie 2021-05-01 19:28:16 +02:00
parent 6a34490d4e
commit 2342746720
3 changed files with 115 additions and 6 deletions

View File

@ -18,6 +18,8 @@
#include "Windows.h"
#endif
#include "ArduinoJson.h"
namespace dev {
class BaseDevice {
@ -86,6 +88,8 @@ class BaseDevice {
{
return 0;
}
virtual void get_info(JsonDocument& doc)
{}
virtual bool is_system_pin(uint8_t pin)
{
return false;

View File

@ -7,21 +7,94 @@
#include <Esp.h>
#include <WiFi.h>
#include "esp_system.h"
#include "hasp_conf.h"
#include "../device.h"
#include "esp32.h"
#include <rom/rtc.h> // needed to get the ResetInfo
#include "driver/adc.h"
#include "esp_adc_cal.h"
#include "hasp_conf.h"
#include "../device.h"
#include "esp32.h"
#include "hasp_debug.h"
#define BACKLIGHT_CHANNEL 0
namespace dev {
static String esp32ResetReason(uint8_t cpuid)
{
if(cpuid > 1) {
return F("Invalid CPU id");
}
RESET_REASON reason = rtc_get_reset_reason(cpuid);
String resetReason((char*)0);
resetReason.reserve(128);
resetReason += F("CPU");
resetReason += cpuid;
resetReason += F(": ");
switch(reason) {
case 1:
resetReason += F("POWERON");
break; /**<1, Vbat power on reset*/
case 3:
resetReason += F("SW");
break; /**<3, Software reset digital core*/
case 4:
resetReason += F("OWDT");
break; /**<4, Legacy watch dog reset digital core*/
case 5:
resetReason += F("DEEPSLEEP");
break; /**<5, Deep Sleep reset digital core*/
case 6:
resetReason += F("SDIO");
break; /**<6, Reset by SLC module, reset digital core*/
case 7:
resetReason += F("TG0WDT_SYS");
break; /**<7, Timer Group0 Watch dog reset digital core*/
case 8:
resetReason += F("TG1WDT_SYS");
break; /**<8, Timer Group1 Watch dog reset digital core*/
case 9:
resetReason += F("RTCWDT_SYS");
break; /**<9, RTC Watch dog Reset digital core*/
case 10:
resetReason += F("INTRUSION");
break; /**<10, Instrusion tested to reset CPU*/
case 11:
resetReason += F("TGWDT_CPU");
break; /**<11, Time Group reset CPU*/
case 12:
resetReason += F("SW_CPU");
break; /**<12, Software reset CPU*/
case 13:
resetReason += F("RTCWDT_CPU");
break; /**<13, RTC Watch dog Reset CPU*/
case 14:
resetReason += F("EXT_CPU");
break; /**<14, for APP CPU, reseted by PRO CPU*/
case 15:
resetReason += F("RTCWDT_BROWN_OUT");
break; /**<15, Reset when the vdd voltage is not stable*/
case 16:
resetReason += F("RTCWDT_RTC");
break; /**<16, RTC Watch dog reset digital core and rtc module*/
default:
resetReason += F("NO_MEAN");
return resetReason;
}
resetReason += F("_RESET");
return resetReason;
}
static void halGetResetInfo(String& resetReason)
{
resetReason = String(esp32ResetReason(0));
resetReason += F(" / ");
resetReason += String(esp32ResetReason(1));
}
Esp32Device::Esp32Device()
{
_hostname = MQTT_NODENAME;
@ -38,6 +111,8 @@ Esp32Device::Esp32Device()
if(mac[i] < 0x10) _hardware_id += "0";
_hardware_id += String(mac[i], HEX).c_str();
}
_sketch_size = ESP.getSketchSize(); // slow: takes ~1 second
}
void Esp32Device::reboot()
@ -178,6 +253,34 @@ bool Esp32Device::is_system_pin(uint8_t pin)
return false;
}
void Esp32Device::get_info(JsonDocument& doc)
{
char size_buf[64];
String buffer((char*)0);
buffer.reserve(64);
JsonObject info = doc.createNestedObject(F(D_INFO_MODULE));
/* ESP Stats */
buffer = String(get_cpu_frequency());
buffer += F("MHz");
info[F(D_INFO_MODULE)] = get_chip_model(); // 10ms
info[F(D_INFO_FREQUENCY)] = buffer;
info[F(D_INFO_CORE_VERSION)] = get_core_version();
halGetResetInfo(buffer);
info[F(D_INFO_RESET_REASON)] = buffer;
Parser::format_bytes(ESP.getFlashChipSize(), size_buf, sizeof(size_buf)); // 25ms
info[F(D_INFO_FLASH_SIZE)] = size_buf;
Parser::format_bytes(_sketch_size, size_buf, sizeof(size_buf));
info[F(D_INFO_SKETCH_USED)] = size_buf;
Parser::format_bytes(ESP.getFreeSketchSpace(), size_buf, sizeof(size_buf));
info[F(D_INFO_SKETCH_FREE)] = size_buf;
}
} // namespace dev
#if defined(LANBONL8)

View File

@ -35,12 +35,14 @@ class Esp32Device : public BaseDevice {
size_t get_free_heap() override;
uint8_t get_heap_fragmentation() override;
uint16_t get_cpu_frequency() override;
void get_info(JsonDocument& doc) override;
bool is_system_pin(uint8_t pin) override;
private:
std::string _hostname;
std::string _hardware_id;
uint32_t _sketch_size; // cached because function is slow
uint8_t _backlight_pin;
uint8_t _backlight_level;