Fixes for esp-idf

This commit is contained in:
2021-05-31 19:46:53 +02:00
parent 410aee4fda
commit a2b883c276
4 changed files with 105 additions and 69 deletions

35
CMakeLists.txt Normal file
View File

@ -0,0 +1,35 @@
set(headers
Time.h
TimeLib.h
)
set(sources
DateStrings.cpp
Time.cpp
)
set(dependencies
esp_timer
)
idf_component_register(
INCLUDE_DIRS
.
SRCS
${headers}
${sources}
REQUIRES
${dependencies}
)
target_compile_options(${COMPONENT_TARGET}
PUBLIC
-DUSE_FACADE=true
PRIVATE
-fstack-reuse=all
-fstack-protector-all
-Wno-unused-function
-Wno-deprecated-declarations
-Wno-missing-field-initializers
-Wno-parentheses
)

View File

@ -9,15 +9,7 @@
*
*/
#include <Arduino.h>
// Arduino.h should properly define PROGMEM, PGM_P, strcpy_P, pgm_read_byte, pgm_read_ptr
// But not all platforms define these as they should. If you find a platform needing these
// defined, or if any this becomes unnecessary as platforms improve, please send a pull req.
#if defined(ESP8266)
#undef PROGMEM
#define PROGMEM
#endif
//#include <Arduino.h>
#include "TimeLib.h"
@ -25,73 +17,73 @@
// the short strings for each day or month must be exactly dt_SHORT_STR_LEN
#define dt_SHORT_STR_LEN 3 // the length of short strings
static char buffer[dt_MAX_STRING_LEN+1]; // must be big enough for longest string and the terminating null
//static char buffer[dt_MAX_STRING_LEN+1]; // must be big enough for longest string and the terminating null
const char monthStr0[] PROGMEM = "";
const char monthStr1[] PROGMEM = "January";
const char monthStr2[] PROGMEM = "February";
const char monthStr3[] PROGMEM = "March";
const char monthStr4[] PROGMEM = "April";
const char monthStr5[] PROGMEM = "May";
const char monthStr6[] PROGMEM = "June";
const char monthStr7[] PROGMEM = "July";
const char monthStr8[] PROGMEM = "August";
const char monthStr9[] PROGMEM = "September";
const char monthStr10[] PROGMEM = "October";
const char monthStr11[] PROGMEM = "November";
const char monthStr12[] PROGMEM = "December";
const char monthStr0[] = "";
const char monthStr1[] = "January";
const char monthStr2[] = "February";
const char monthStr3[] = "March";
const char monthStr4[] = "April";
const char monthStr5[] = "May";
const char monthStr6[] = "June";
const char monthStr7[] = "July";
const char monthStr8[] = "August";
const char monthStr9[] = "September";
const char monthStr10[] = "October";
const char monthStr11[] = "November";
const char monthStr12[] = "December";
const PROGMEM char * const PROGMEM monthNames_P[] =
const char * const monthNames_P[] =
{
monthStr0,monthStr1,monthStr2,monthStr3,monthStr4,monthStr5,monthStr6,
monthStr7,monthStr8,monthStr9,monthStr10,monthStr11,monthStr12
};
const char monthShortNames_P[] PROGMEM = "ErrJanFebMarAprMayJunJulAugSepOctNovDec";
const char monthShortNames_P[] = "ErrJanFebMarAprMayJunJulAugSepOctNovDec";
const char dayStr0[] PROGMEM = "Err";
const char dayStr1[] PROGMEM = "Sunday";
const char dayStr2[] PROGMEM = "Monday";
const char dayStr3[] PROGMEM = "Tuesday";
const char dayStr4[] PROGMEM = "Wednesday";
const char dayStr5[] PROGMEM = "Thursday";
const char dayStr6[] PROGMEM = "Friday";
const char dayStr7[] PROGMEM = "Saturday";
const char dayStr0[] = "Err";
const char dayStr1[] = "Sunday";
const char dayStr2[] = "Monday";
const char dayStr3[] = "Tuesday";
const char dayStr4[] = "Wednesday";
const char dayStr5[] = "Thursday";
const char dayStr6[] = "Friday";
const char dayStr7[] = "Saturday";
const PROGMEM char * const PROGMEM dayNames_P[] =
const char * const dayNames_P[] =
{
dayStr0,dayStr1,dayStr2,dayStr3,dayStr4,dayStr5,dayStr6,dayStr7
};
const char dayShortNames_P[] PROGMEM = "ErrSunMonTueWedThuFriSat";
const char dayShortNames_P[] = "ErrSunMonTueWedThuFriSat";
/* functions to return date strings */
char* monthStr(uint8_t month)
{
strcpy_P(buffer, (PGM_P)pgm_read_ptr(&(monthNames_P[month])));
return buffer;
}
//char* monthStr(uint8_t month)
//{
// strcpy_P(buffer, (PGM_P)pgm_read_ptr(&(monthNames_P[month])));
// return buffer;
//}
char* monthShortStr(uint8_t month)
{
for (int i=0; i < dt_SHORT_STR_LEN; i++)
buffer[i] = pgm_read_byte(&(monthShortNames_P[i+ (month*dt_SHORT_STR_LEN)]));
buffer[dt_SHORT_STR_LEN] = 0;
return buffer;
}
//char* monthShortStr(uint8_t month)
//{
// for (int i=0; i < dt_SHORT_STR_LEN; i++)
// buffer[i] = pgm_read_byte(&(monthShortNames_P[i+ (month*dt_SHORT_STR_LEN)]));
// buffer[dt_SHORT_STR_LEN] = 0;
// return buffer;
//}
char* dayStr(uint8_t day)
{
strcpy_P(buffer, (PGM_P)pgm_read_ptr(&(dayNames_P[day])));
return buffer;
}
//char* dayStr(uint8_t day)
//{
// strcpy_P(buffer, (PGM_P)pgm_read_ptr(&(dayNames_P[day])));
// return buffer;
//}
char* dayShortStr(uint8_t day)
{
uint8_t index = day*dt_SHORT_STR_LEN;
for (int i=0; i < dt_SHORT_STR_LEN; i++)
buffer[i] = pgm_read_byte(&(dayShortNames_P[index + i]));
buffer[dt_SHORT_STR_LEN] = 0;
return buffer;
}
//char* dayShortStr(uint8_t day)
//{
// uint8_t index = day*dt_SHORT_STR_LEN;
// for (int i=0; i < dt_SHORT_STR_LEN; i++)
// buffer[i] = pgm_read_byte(&(dayShortNames_P[index + i]));
// buffer[dt_SHORT_STR_LEN] = 0;
// return buffer;
//}

View File

@ -27,18 +27,27 @@
1.4 5 Sep 2014 - compatibility with Arduino 1.5.7
*/
#if ARDUINO >= 100
#include <Arduino.h>
#else
#include <WProgram.h>
#endif
//#if ARDUINO >= 100
//#include <Arduino.h>
//#else
//#include <WProgram.h>
//#endif
#include "TimeLib.h"
#include <esp_timer.h>
static tmElements_t tm; // a cache of time elements
static time_t cacheTime; // the time the cache was updated
static uint32_t syncInterval = 300; // time sync will be attempted after this many seconds
namespace {
unsigned long millis()
{
return esp_timer_get_time() / 1000;
}
}
void refreshCache(time_t t) {
if (t != cacheTime) {
breakTime(t, tm);

View File

@ -124,10 +124,10 @@ void adjustTime(long adjustment);
/* date strings */
#define dt_MAX_STRING_LEN 9 // length of longest date string (excluding terminating null)
char* monthStr(uint8_t month);
char* dayStr(uint8_t day);
char* monthShortStr(uint8_t month);
char* dayShortStr(uint8_t day);
//char* monthStr(uint8_t month);
//char* dayStr(uint8_t day);
//char* monthShortStr(uint8_t month);
//char* dayShortStr(uint8_t day);
/* time sync functions */
timeStatus_t timeStatus(); // indicates if time has been set and recently synchronized