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

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;
}
}

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
};

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":

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()

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"

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>