clean up some things (tested)

This commit is contained in:
2026-01-17 23:30:27 +01:00
parent 35d5e6ecb5
commit 181bed4346
13 changed files with 80 additions and 419 deletions
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+2 -301
View File
@@ -32,63 +32,6 @@ RTC_DATA_ATTR static bool overflow;
static bool overflow;
#endif
/*!
@brief Constructor for ESP32Time
*/
ESP32Time::ESP32Time(){
}
/*!
@brief Constructor for ESP32Time
@param offest
gmt offset in seconds
*/
ESP32Time::ESP32Time(long offset){
this->offset = offset;
}
/*!
@brief set the internal RTC time
@param sc
second (0-59)
@param mn
minute (0-59)
@param hr
hour of day (0-23)
@param dy
day of month (1-31)
@param mt
month (1-12)
@param yr
year ie 2021
@param ms
microseconds (optional)
*/
void ESP32Time::setTime(int sc, int mn, int hr, int dy, int mt, int yr, int ms) const {
// seconds, minute, hour, day, month, year $ microseconds(optional)
// ie setTime(20, 34, 8, 1, 4, 2021) = 8:34:20 1/4/2021
struct tm t = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // Initalize to all 0's
t.tm_year = yr - 1900; // This is year-1900, so 121 = 2021
t.tm_mon = mt - 1;
t.tm_mday = dy;
t.tm_hour = hr;
t.tm_min = mn;
t.tm_sec = sc;
time_t timeSinceEpoch = mktime(&t);
setTime(timeSinceEpoch, ms);
}
/*!
@brief set time from struct
@param tm
time struct
*/
void ESP32Time::setTimeStruct(tm t) const {
time_t timeSinceEpoch = mktime(&t);
setTime(timeSinceEpoch, 0);
}
/*!
@brief set the internal RTC time
@param epoch
@@ -119,14 +62,7 @@ tm ESP32Time::getTimeStruct() const {
localtime_r(&now, &timeinfo);
time_t tt = mktime (&timeinfo);
if (overflow){
tt += 63071999;
}
if (offset > 0){
tt += (unsigned long) offset;
} else {
tt -= (unsigned long) (offset * -1);
}
if (overflow) tt += 63071999;
struct tm * tn = localtime(&tt);
if (overflow){
tn->tm_year += 64;
@@ -134,245 +70,10 @@ tm ESP32Time::getTimeStruct() const {
return *tn;
}
/*!
@brief get the time and date as an Arduino String object
@param mode
true = Long date format
false = Short date format
*/
String ESP32Time::getDateTime(bool mode) const {
struct tm timeinfo = getTimeStruct();
char s[51];
if (mode)
{
strftime(s, 50, "%A, %B %d %Y %H:%M:%S", &timeinfo);
}
else
{
strftime(s, 50, "%a, %b %d %Y %H:%M:%S", &timeinfo);
}
return String(s);
}
/*!
@brief get the time and date as an Arduino String object
@param mode
true = Long date format
false = Short date format
*/
String ESP32Time::getTimeDate(bool mode) const {
struct tm timeinfo = getTimeStruct();
char s[51];
if (mode)
{
strftime(s, 50, "%H:%M:%S %A, %B %d %Y", &timeinfo);
}
else
{
strftime(s, 50, "%H:%M:%S %a, %b %d %Y", &timeinfo);
}
return String(s);
}
/*!
@brief get the time as an Arduino String object
*/
String ESP32Time::getTime() const {
struct tm timeinfo = getTimeStruct();
char s[51];
strftime(s, 50, "%H:%M:%S", &timeinfo);
return String(s);
}
/*!
@brief get the time as an Arduino String object with the specified format
@param format
time format
http://www.cplusplus.com/reference/ctime/strftime/
*/
String ESP32Time::getTime(String format) const {
struct tm timeinfo = getTimeStruct();
char s[128];
char c[128];
format.toCharArray(c, 127);
strftime(s, 127, c, &timeinfo);
return String(s);
}
/*!
@brief get the date as an Arduino String object
@param mode
true = Long date format
false = Short date format
*/
String ESP32Time::getDate(bool mode) const {
struct tm timeinfo = getTimeStruct();
char s[51];
if (mode)
{
strftime(s, 50, "%A, %B %d %Y", &timeinfo);
}
else
{
strftime(s, 50, "%a, %b %d %Y", &timeinfo);
}
return String(s);
}
/*!
@brief get the current milliseconds as unsigned long
*/
unsigned long ESP32Time::getMillis() const {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_usec/1000;
}
/*!
@brief get the current microseconds as unsigned long
*/
unsigned long ESP32Time::getMicros() const {
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_usec;
}
/*!
@brief get the current epoch seconds as unsigned long
*/
unsigned long ESP32Time::getEpoch() const {
struct tm timeinfo = getTimeStruct();
return mktime(&timeinfo);
}
/*!
@brief get the current epoch seconds as unsigned long from the rtc without offset
*/
unsigned long ESP32Time::getLocalEpoch() const {
struct timeval tv;
gettimeofday(&tv, NULL);
unsigned long epoch = tv.tv_sec;
if (overflow){
epoch += 63071999 + 2019686400;
}
return epoch;
}
/*!
@brief get the current seconds as int
*/
int ESP32Time::getSecond() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_sec;
}
/*!
@brief get the current minutes as int
*/
int ESP32Time::getMinute() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_min;
}
/*!
@brief get the current hour as int
@param mode
true = 24 hour mode (0-23)
false = 12 hour mode (1-12)
*/
int ESP32Time::getHour(bool mode) const {
struct tm timeinfo = getTimeStruct();
if (mode)
{
return timeinfo.tm_hour;
}
else
{
int hour = timeinfo.tm_hour;
if (hour > 12)
{
return timeinfo.tm_hour-12;
}
else if (hour == 0)
{
return 12; // 12 am
}
else
{
return timeinfo.tm_hour;
}
}
}
/*!
@brief return current hour am or pm
@param lowercase
true = lowercase
false = uppercase
*/
String ESP32Time::getAmPm(bool lowercase) const {
struct tm timeinfo = getTimeStruct();
if (timeinfo.tm_hour >= 12)
{
if (lowercase)
{
return "pm";
}
else
{
return "PM";
}
}
else
{
if (lowercase)
{
return "am";
}
else
{
return "AM";
}
}
}
/*!
@brief get the current day as int (1-31)
*/
int ESP32Time::getDay() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_mday;
}
/*!
@brief get the current day of week as int (0-6)
*/
int ESP32Time::getDayofWeek() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_wday;
}
/*!
@brief get the current day of year as int (0-365)
*/
int ESP32Time::getDayofYear() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_yday;
}
/*!
@brief get the current month as int (0-11)
*/
int ESP32Time::getMonth() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_mon;
}
/*!
@brief get the current year as int
*/
int ESP32Time::getYear() const {
struct tm timeinfo = getTimeStruct();
return timeinfo.tm_year+1900;
}
}
+5 -36
View File
@@ -22,46 +22,15 @@
SOFTWARE.
*/
#ifndef ESP32TIME_H
#define ESP32TIME_H
#pragma once
#include <Arduino.h>
class ESP32Time {
public:
ESP32Time();
ESP32Time(long offset);
void setTime(unsigned long epoch = 1609459200, int ms = 0) const; // default (1609459200) = 1st Jan 2021
void setTime(int sc, int mn, int hr, int dy, int mt, int yr, int ms = 0) const;
void setTimeStruct(tm t) const;
void setTime(unsigned long epoch, int ms = 0) const;
tm getTimeStruct() const;
String getTime(String format) const;
String getTime() const;
String getDateTime(bool mode = false) const;
String getTimeDate(bool mode = false) const;
String getDate(bool mode = false) const;
String getAmPm(bool lowercase = false) const;
unsigned long getEpoch() const;
unsigned long getMillis() const;
unsigned long getMicros() const;
int getSecond() const;
int getMinute() const;
int getHour(bool mode = false) const;
int getDay() const;
int getDayofWeek() const;
int getDayofYear() const;
int getMonth() const;
int getYear() const;
long offset = 0;
unsigned long getLocalEpoch() const;
};
#endif
};
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "ESP32Time",
"version": "2.0.6",
"version": "2.0.6l",
"keywords": "Arduino, ESP32, Time, Internal RTC",
"description": "An Arduino library for setting and retrieving internal RTC time on ESP32 boards",
"repository":
+63 -63
View File
@@ -7,10 +7,10 @@ SPIClass spi = SPIClass(VSPI);
spi_device_handle_t dmaHAL;
spi_host_device_t spi_host = VSPI_HOST;
volatile uint32_t* _spi_cmd = (volatile uint32_t*)(SPI_CMD_REG(SPI_PORT));
volatile uint32_t* _spi_user = (volatile uint32_t*)(SPI_USER_REG(SPI_PORT));
volatile uint32_t* _spi_mosi_dlen = (volatile uint32_t*)(SPI_MOSI_DLEN_REG(SPI_PORT));
volatile uint32_t* _spi_w = (volatile uint32_t*)(SPI_W0_REG(SPI_PORT));
volatile uint32_t* _spi_cmd = (volatile uint32_t*)(SPI_CMD_REG(VSPI));
volatile uint32_t* _spi_user = (volatile uint32_t*)(SPI_USER_REG(VSPI));
volatile uint32_t* _spi_mosi_dlen = (volatile uint32_t*)(SPI_MOSI_DLEN_REG(VSPI));
volatile uint32_t* _spi_w = (volatile uint32_t*)(SPI_W0_REG(VSPI));
void TFT_eSPI::pushBlock(uint16_t color, uint32_t len) {
@@ -45,31 +45,31 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len) {
uint32_t color[16];
if (len > 31) {
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), 511);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(VSPI), 511);
while(len>31) {
uint32_t i = 0;
while(i<16) {
color[i++] = DAT8TO32(data);
data+=4;
}
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
WRITE_PERI_REG(SPI_W0_REG(SPI_PORT), color[0]);
WRITE_PERI_REG(SPI_W1_REG(SPI_PORT), color[1]);
WRITE_PERI_REG(SPI_W2_REG(SPI_PORT), color[2]);
WRITE_PERI_REG(SPI_W3_REG(SPI_PORT), color[3]);
WRITE_PERI_REG(SPI_W4_REG(SPI_PORT), color[4]);
WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), color[5]);
WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), color[6]);
WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), color[7]);
WRITE_PERI_REG(SPI_W8_REG(SPI_PORT), color[8]);
WRITE_PERI_REG(SPI_W9_REG(SPI_PORT), color[9]);
WRITE_PERI_REG(SPI_W10_REG(SPI_PORT), color[10]);
WRITE_PERI_REG(SPI_W11_REG(SPI_PORT), color[11]);
WRITE_PERI_REG(SPI_W12_REG(SPI_PORT), color[12]);
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), color[13]);
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), color[14]);
WRITE_PERI_REG(SPI_W15_REG(SPI_PORT), color[15]);
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
WRITE_PERI_REG(SPI_W0_REG(VSPI), color[0]);
WRITE_PERI_REG(SPI_W1_REG(VSPI), color[1]);
WRITE_PERI_REG(SPI_W2_REG(VSPI), color[2]);
WRITE_PERI_REG(SPI_W3_REG(VSPI), color[3]);
WRITE_PERI_REG(SPI_W4_REG(VSPI), color[4]);
WRITE_PERI_REG(SPI_W5_REG(VSPI), color[5]);
WRITE_PERI_REG(SPI_W6_REG(VSPI), color[6]);
WRITE_PERI_REG(SPI_W7_REG(VSPI), color[7]);
WRITE_PERI_REG(SPI_W8_REG(VSPI), color[8]);
WRITE_PERI_REG(SPI_W9_REG(VSPI), color[9]);
WRITE_PERI_REG(SPI_W10_REG(VSPI), color[10]);
WRITE_PERI_REG(SPI_W11_REG(VSPI), color[11]);
WRITE_PERI_REG(SPI_W12_REG(VSPI), color[12]);
WRITE_PERI_REG(SPI_W13_REG(VSPI), color[13]);
WRITE_PERI_REG(SPI_W14_REG(VSPI), color[14]);
WRITE_PERI_REG(SPI_W15_REG(VSPI), color[15]);
SET_PERI_REG_MASK(SPI_CMD_REG(VSPI), SPI_USR);
len -= 32;
}
}
@@ -82,30 +82,30 @@ void TFT_eSPI::pushSwapBytePixels(const void* data_in, uint32_t len) {
color[i++] = DAT8TO32(data);
data+=4;
}
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), 255);
WRITE_PERI_REG(SPI_W0_REG(SPI_PORT), color[0]);
WRITE_PERI_REG(SPI_W1_REG(SPI_PORT), color[1]);
WRITE_PERI_REG(SPI_W2_REG(SPI_PORT), color[2]);
WRITE_PERI_REG(SPI_W3_REG(SPI_PORT), color[3]);
WRITE_PERI_REG(SPI_W4_REG(SPI_PORT), color[4]);
WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), color[5]);
WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), color[6]);
WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), color[7]);
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(VSPI), 255);
WRITE_PERI_REG(SPI_W0_REG(VSPI), color[0]);
WRITE_PERI_REG(SPI_W1_REG(VSPI), color[1]);
WRITE_PERI_REG(SPI_W2_REG(VSPI), color[2]);
WRITE_PERI_REG(SPI_W3_REG(VSPI), color[3]);
WRITE_PERI_REG(SPI_W4_REG(VSPI), color[4]);
WRITE_PERI_REG(SPI_W5_REG(VSPI), color[5]);
WRITE_PERI_REG(SPI_W6_REG(VSPI), color[6]);
WRITE_PERI_REG(SPI_W7_REG(VSPI), color[7]);
SET_PERI_REG_MASK(SPI_CMD_REG(VSPI), SPI_USR);
len -= 16;
}
if (len)
{
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), (len << 4) - 1);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(VSPI), (len << 4) - 1);
for (uint32_t i=0; i <= (len<<1); i+=4) {
WRITE_PERI_REG(SPI_W0_REG(SPI_PORT)+i, DAT8TO32(data)); data+=4;
WRITE_PERI_REG(SPI_W0_REG(VSPI)+i, DAT8TO32(data)); data+=4;
}
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
SET_PERI_REG_MASK(SPI_CMD_REG(VSPI), SPI_USR);
}
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
}
@@ -119,37 +119,37 @@ void TFT_eSPI::pushPixels(const void* data_in, uint32_t len){
uint32_t *data = (uint32_t*)data_in;
if (len > 31) {
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), 511);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(VSPI), 511);
while(len>31) {
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
WRITE_PERI_REG(SPI_W0_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W1_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W2_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W3_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W4_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W5_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W6_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W7_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W8_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W9_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W10_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W11_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W12_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W13_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W14_REG(SPI_PORT), *data++);
WRITE_PERI_REG(SPI_W15_REG(SPI_PORT), *data++);
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
WRITE_PERI_REG(SPI_W0_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W1_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W2_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W3_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W4_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W5_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W6_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W7_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W8_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W9_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W10_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W11_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W12_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W13_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W14_REG(VSPI), *data++);
WRITE_PERI_REG(SPI_W15_REG(VSPI), *data++);
SET_PERI_REG_MASK(SPI_CMD_REG(VSPI), SPI_USR);
len -= 32;
}
}
if (len) {
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(SPI_PORT), (len << 4) - 1);
for (uint32_t i=0; i <= (len<<1); i+=4) WRITE_PERI_REG((SPI_W0_REG(SPI_PORT) + i), *data++);
SET_PERI_REG_MASK(SPI_CMD_REG(SPI_PORT), SPI_USR);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
WRITE_PERI_REG(SPI_MOSI_DLEN_REG(VSPI), (len << 4) - 1);
for (uint32_t i=0; i <= (len<<1); i+=4) WRITE_PERI_REG((SPI_W0_REG(VSPI) + i), *data++);
SET_PERI_REG_MASK(SPI_CMD_REG(VSPI), SPI_USR);
}
while (READ_PERI_REG(SPI_CMD_REG(SPI_PORT))&SPI_USR);
while (READ_PERI_REG(SPI_CMD_REG(VSPI))&SPI_USR);
}
void TFT_eSPI::dmaWait()
+8 -2
View File
@@ -3,11 +3,17 @@
#include <Arduino.h>
#include <SPI.h>
#include <User_Setup_Select.h>
#define SPI_FREQUENCY 7500000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
#include <ILI9341_Defines.h>
#include <pgmspace.h>
#define SPI_PORT VSPI
#include "soc/spi_reg.h"
#include "driver/spi_master.h"
#include "hal/gpio_ll.h"
-10
View File
@@ -1,10 +0,0 @@
#pragma once
#define SPI_FREQUENCY 7500000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
#include <ILI9341_Defines.h>
-5
View File
@@ -21,11 +21,6 @@ using fs::FS;
#include "nonvolatile.h"
#include "utils.h"
#include "system_console.h"
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <esp_task_wdt.h>
#include "esp_pm.h"
#include "rtc_wdt.h"
#pragma endregion
Console console(&tft);
+1 -1
View File
@@ -5,7 +5,7 @@
bool rtcset;
bool NTPupdated;
ESP32Time rtc(0);
ESP32Time rtc;
bool rx_rtc_avail = false;
inline int16_t readFromModule(byte address) {