mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-28 13:46:36 +00:00
Add get_info
This commit is contained in:
parent
6a34490d4e
commit
2342746720
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user