Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

171 lines
3.4 KiB

/*
SYSTEM MODULE
Copyright (C) 2019 by Xose Pérez <xose dot perez at gmail dot com>
*/
#pragma once
#include <Arduino.h>
#include <chrono>
#include <cstdint>
extern "C" {
#include "user_interface.h"
extern struct rst_info resetInfo;
}
struct HeapStats {
uint32_t available;
uint16_t usable;
uint8_t frag_pct;
};
enum class CustomResetReason : uint8_t {
None,
Button,
Factory,
Hardware,
Mqtt,
Ota,
Rpc,
Rule,
Scheduler,
Terminal,
Web
};
namespace heartbeat {
using Mask = int32_t;
using Callback = bool(*)(Mask);
using Seconds = std::chrono::duration<unsigned long>;
using Milliseconds = std::chrono::duration<unsigned long, std::milli>;
enum class Mode {
None,
Once,
Repeat
};
enum class Report : Mask {
Status = 1 << 1,
Ssid = 1 << 2,
Ip = 1 << 3,
Mac = 1 << 4,
Rssi = 1 << 5,
Uptime = 1 << 6,
Datetime = 1 << 7,
Freeheap = 1 << 8,
Vcc = 1 << 9,
Relay = 1 << 10,
Light = 1 << 11,
Hostname = 1 << 12,
App = 1 << 13,
Version = 1 << 14,
Board = 1 << 15,
Loadavg = 1 << 16,
Interval = 1 << 17,
Description = 1 << 18,
Range = 1 << 19,
RemoteTemp = 1 << 20,
Bssid = 1 << 21
};
constexpr Mask operator*(Report lhs, Mask rhs) {
return static_cast<Mask>(lhs) * rhs;
}
constexpr Mask operator*(Mask lhs, Report rhs) {
return lhs * static_cast<Mask>(rhs);
}
constexpr Mask operator|(Report lhs, Report rhs) {
return static_cast<Mask>(lhs) | static_cast<Mask>(rhs);
}
constexpr Mask operator|(Report lhs, Mask rhs) {
return static_cast<Mask>(lhs) | rhs;
}
constexpr Mask operator|(Mask lhs, Report rhs) {
return lhs | static_cast<Mask>(rhs);
}
constexpr Mask operator&(Report lhs, Mask rhs) {
return static_cast<Mask>(lhs) & rhs;
}
constexpr Mask operator&(Mask lhs, Report rhs) {
return lhs & static_cast<Mask>(rhs);
}
constexpr Mask operator&(Report lhs, Report rhs) {
return static_cast<Mask>(lhs) & static_cast<Mask>(rhs);
}
Seconds currentInterval();
Milliseconds currentIntervalMs();
Mask currentValue();
Mode currentMode();
} // namespace heartbeat
namespace settings {
namespace internal {
template <>
heartbeat::Mode convert(const String& value);
template <>
heartbeat::Milliseconds convert(const String& value);
template <>
heartbeat::Seconds convert(const String& value);
} // namespace internal
} // namespace settings
unsigned long systemFreeStack();
HeapStats systemHeapStats();
void systemHeapStats(HeapStats&);
unsigned long systemFreeHeap();
unsigned long systemInitialFreeHeap();
bool eraseSDKConfig();
void factoryReset();
uint32_t systemResetReason();
uint8_t systemStabilityCounter();
void systemStabilityCounter(uint8_t count);
bool systemCheck();
void customResetReason(CustomResetReason reason);
CustomResetReason customResetReason();
String customResetReasonToPayload(CustomResetReason reason);
void deferredReset(unsigned long delay, CustomResetReason reason);
bool checkNeedsReset();
unsigned char systemLoadAverage();
heartbeat::Seconds systemHeartbeatInterval();
void systemScheduleHeartbeat();
void systemStopHeartbeat(heartbeat::Callback);
void systemHeartbeat(heartbeat::Callback, heartbeat::Mode, heartbeat::Seconds interval);
void systemHeartbeat(heartbeat::Callback, heartbeat::Mode);
void systemHeartbeat(heartbeat::Callback);
bool systemHeartbeat();
unsigned long systemUptime();
void systemSetup();