Giter Site home page Giter Site logo

bxparks / acetime Goto Github PK

View Code? Open in Web Editor NEW
77.0 6.0 15.0 60.85 MB

Date and time classes for Arduino supporting the IANA TZ Database time zones to convert epoch seconds to date and time components in different time zones.

License: MIT License

C 0.10% C++ 99.61% Makefile 0.29%

acetime's Issues

createForZoneName no longer working for "Europe/Amsterdam"

With the current AceTime release the .createForZoneName is no longer working for my default timezone, which is the Netherlands?

It had been a while since I updated your library to the latest and the greatest. And I use it to lookup user input to match with a TimeZone name. Now the default always works, which is "Europe/Amsterdam".

I have taken your Hello Timezone Manager example, and extended it with some entries:

  TimeZone londonTz = manager.createForZoneName("Europe/London");
  ZonedDateTime londonTime = losAngelesTime.convertToTimeZone(londonTz);
  londonTime.printTo(SERIAL_PORT_MONITOR);
  SERIAL_PORT_MONITOR.println();

  // Create Europe/Amsterdam timezone by ZoneName.
  TimeZone amsterdamTz = manager.createForZoneName("Europe/Amsterdam");
  ZonedDateTime amsterdamTime = losAngelesTime.convertToTimeZone(amsterdamTz);
  amsterdamTime.printTo(SERIAL_PORT_MONITOR);
  SERIAL_PORT_MONITOR.println();
  
  // Create Europe/Brussels timezone by ZoneName.
  TimeZone brusselsTZ = manager.createForZoneName("Europe/Brussels");
  ZonedDateTime brusselsTime= losAngelesTime.convertToTimeZone(brusselsTZ);
  brusselsTime.printTo(SERIAL_PORT_MONITOR);
  SERIAL_PORT_MONITOR.println();

Output:
2019-03-10T03:00:00-07:00[America/Los_Angeles]
2019-03-10T10:00:00+00:00[Europe/London]
<Invalid ZonedDateTime>
2019-03-10T11:00:00+01:00[Europe/Brussels]
2019-03-10T21:00:00+11:00[Australia/Sydney]


How to handle error in lookup

So I want to use your library to lookup Timezone by name.

auto myTz =  manager.createForZoneName(CSTR(settingNTPtimezone));
auto myTime = ZonedDateTime::forUnixSeconds(NtpLastSync, myTz);

It works great, but when you give a random string, you want to catch the error in lookup and have a default replace that TZname. For example: "Amsterdam" --> Error
But it works for "Europe/Amsterdam".

This way I can have a string field, but when it fails to set it correctly, it falls back to the default.

Now I have looked at the documentation, but it's not clear how to catch an error in lookup.

Your help is greatly appreciated.

Include order issue

Discussed in #76

Originally posted by rvdbreemen October 16, 2021
Well, interestingly enough I struggled with the order of the includes.

So I am using TimeLib.h next to AceTime.h. I do this to minimize code change... Historically I used ezTime and before that TimeLib. Anyway, there is lots of compile errors if I include AceTime later dan TimeLib.

So the order that worked for me is:
#include <AceTime.h>
#include <TimeLib.h>

There must be a namespace conflict or something, because if I do it the otherway around I won't even compile.

What could be the reason for that?

The reason why I included TimeLib.h again,is that AceTime does not support the normal now(), hour(), minute(), etc. API.

Would it be thinkable to support a "default Timezone" that you setup on the object, so that the "TimeLib" API would also work?

List timezone names

I'm trying to get a list of all timezone names, but struggling to understand the ZoneInfo name format:

for (uint16_t n = 0; n < ace_time::zonedb::kZoneRegistrySize; n++) {
    auto a = ace_time::zonedb::kZoneRegistry[n];
    Serial.println(a->name);
}

This prints part of the name, but without the prefix/fragment.

22:3:56.584 -> �Detroit
22:3:56.585 -> �Bogota
22:3:56.586 -> �Glace_Bay

How would I get to a list that contains full names like Europe/London ?

2.3.0 compile issues

Following the issue I raised last week in AceTimeClock (which is now resolved) I have updated AceTime to 2.2.3 AceTimeClock to 1.3.0 and AceCommon to 1.6.2. All is working. However if I move AceTime to 2.3.0 I get the compile errors below.

I am using the BasicZoneProcessor - which may be the issue and seems to be not recommended, but it does work in previous versions.

ld.exe: Sensor_MQTT_FrontDeck.cpp.o:(.literal._ZNK8ace_time5clock12EspSntpClock6getNowEv[_ZNK8ace_time5clock12EspSntpClock6getNowEv]+0x0): undefined reference to ace_time::Epoch::sDaysToCurrentEpochFromInternalEpoch

Error linking for board MH ET LIVE ESP32MiniKit (esp32_mhetesp32minikit)
Build failed for project 'Sensor_MQTT_FrontDeck'
ld.exe: Sensor_MQTT_FrontDeck.cpp.o:(.literal._ZNK8ace_time26BasicZoneProcessorTemplateINS_11zoneinfolow13ZoneInfoStoreINS1_11ZoneContextINS_5basic5BasicEEENS1_8ZoneInfoIS5_S6_EENS1_7ZoneEraIS5_EENS1_10ZonePolicyIS5_EENS1_8ZoneRuleIS5_EEEENS1_14ZoneInfoBrokerIS6_S8_SA_SC_SE_EENS1_13ZoneEraBrokerIS6_SA_SC_SE_EENS1_16ZonePolicyBrokerIS6_SC_SE_EENS1_14ZoneRuleBrokerIS6_SE_EEE16printShortNameToER5Print[_ZNK8ace_time26BasicZoneProcessorTemplateINS_11zoneinfolow13ZoneInfoStoreINS1_11ZoneContextINS_5basic5BasicEEENS1_8ZoneInfoIS5_S6_EENS1_7ZoneEraIS5_EENS1_10ZonePolicyIS5_EENS1_8ZoneRuleIS5_EEEENS1_14ZoneInfoBrokerIS6_S8_SA_SC_SE_EENS1_13ZoneEraBrokerIS6_SA_SC_SE_EENS1_16ZonePolicyBrokerIS6_SC_SE_EENS1_14ZoneRuleBrokerIS6_SE_EEE16printShortNameToER5Print]+0x0): undefined reference to ace_time::zoneinfo::findShortName(__FlashStringHelper const*)
ld.exe: Sensor_MQTT_FrontDeck.cpp.o:(.literal._ZNK8ace_time26BasicZoneProcessorTemplateINS_11zoneinfolow13ZoneInfoStoreINS1_11ZoneContextINS_5basic5BasicEEENS1_8ZoneInfoIS5_S6_EENS1_7ZoneEraIS5_EENS1_10ZonePolicyIS5_EENS1_8ZoneRuleIS5_EEEENS1_14ZoneInfoBrokerIS6_S8_SA_SC_SE_EENS1_13ZoneEraBrokerIS6_SA_SC_SE_EENS1_16ZonePolicyBrokerIS6_SC_SE_EENS1_14ZoneRuleBrokerIS6_SE_EEE16initForLocalDateERKNS_9LocalDateE[_ZNK8ace_time26BasicZoneProcessorTemplateINS_11zoneinfolow13ZoneInfoStoreINS1_11ZoneContextINS_5basic5BasicEEENS1_8ZoneInfoIS5_S6_EENS1_7ZoneEraIS5_EENS1_10ZonePolicyIS5_EENS1_8ZoneRuleIS5_EEEENS1_14ZoneInfoBrokerIS6_S8_SA_SC_SE_EENS1_13ZoneEraBrokerIS6_SA_SC_SE_EENS1_16ZonePolicyBrokerIS6_SC_SE_EENS1_14ZoneRuleBrokerIS6_SE_EEE16initForLocalDateERKNS_9LocalDateE]+0x8): undefined reference to ace_time::internal::createAbbreviation(char*, unsigned char, char const*, unsigned int, char const*)
 
ld.exe: Sensor_MQTT_FrontDeck.cpp.o: in function ace_time::zoneinfolow::ZoneInfoBroker<ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneInfo<ace_time::basic::Basic, ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZoneEra<ace_time::basic::Basic>, ace_time::zoneinfolow::ZonePolicy<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneRule<ace_time::basic::Basic> >::printShortNameTo(Print&) const
BrokersLow.h:464: undefined reference to ace_time  zoneinfo  findShortName(__FlashStringHelper const*)
 
ld.exe: Sensor_MQTT_FrontDeck.cpp.o: in function ace_time::BasicZoneProcessorTemplate<ace_time::zoneinfolow::ZoneInfoStore<ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneInfo<ace_time::basic::Basic, ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZoneEra<ace_time::basic::Basic>, ace_time::zoneinfolow::ZonePolicy<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneRule<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZoneInfoBroker<ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneInfo<ace_time::basic::Basic, ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZoneEra<ace_time::basic::Basic>, ace_time::zoneinfolow::ZonePolicy<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneRule<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZoneEraBroker<ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneEra<ace_time::basic::Basic>, ace_time::zoneinfolow::ZonePolicy<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneRule<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZonePolicyBroker<ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic>, ace_time::zoneinfolow::ZonePolicy<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneRule<ace_time::basic::Basic> >, ace_time::zoneinfolow::ZoneRuleBroker<ace_time::zoneinfolow::ZoneContext<ace_time::basic::Basic>, ace_time::zoneinfolow::ZoneRule<ace_time::basic::Basic> > >::calcAbbreviations() const
BasicZoneProcessor.h:888: undefined reference to ace_time  internal  createAbbreviation(char*, unsigned char, char const*, unsigned int, char const*)
 
collect2.exe*: error: ld returned 1 exit status

In OLED clock manual mode, can't set the clock

I fixed this in controller.h by adding a manual config in setup. The code is below. I'm not an expert on git and don't have the time right now to do a pull request. Once some time is set, the manual clock change buttons, etc will work. But without this, it stays stuck at "Error". The new code is below setupClockInfo();

void setup() {
  // Restore from EEPROM to retrieve time zone.
  StoredInfo storedInfo;
  bool isValid = mPersistentStore.readStoredInfo(storedInfo);
#if FORCE_INITIALIZE
  setupClockInfo();
#else
  if (isValid) {
    restoreClockInfo(mClockInfo, storedInfo);
  } else {
    setupClockInfo();
    auto pacificTz = mZoneManager.createForZoneIndex(mZoneIndex);
    // Set the SystemClock using these components.
    auto pacificTime = ZonedDateTime::forComponents(
    2020, 2, 5, 4, 30, 0, pacificTz);
    mClock.setNow(pacificTime.toEpochSeconds());
  }
#endif

  // Retrieve current time from Clock and set the current clockInfo.
  updateDateTime();
}

Looking up by shortname? or TZ name? or CountryCode?

In my situation, I want to give a flexible way to just enter common TZ references as a text field.

So instead of looking up just by the long name: Europe/Amsterdam
Would it also be possible to lookup by, just the short name: Amsterdam
Or the common TZ name: CET / CEDT
Or the country code: NL

A user can be pointed to the long name, but in most cases, the short name, Country Code or short name is enough too.

support megaAVR boards (e.g. Nano Every)

AceTime does not work on megaAVR boards because:

  1. It uses the new Arduino API,
  2. Its F() macro returns the wrong type.

I don't have the time to work on this, and I don't have any megaAVR boards that I can test on. I am explicitly blacklisting the megaAVR in AceTime.h for now, so that the user gets a useful error message, instead of pages of compiler errors.

(This issue is identical to bxparks/AUnit#56).

gcc 11.3 compiler warning

I recently upgraded the toolchain I am using to build from gcc 5.4.1 to 11.3.1.

The compiler now emits this warning that looks valid although probably innocuous seeing that the code explicitly null terminates the string immediately after the strncpy call
In static member function 'static void ace_time::ExtendedZoneProcessorTemplate<BF, ZIB, ZEB, ZPB, ZRB>::createAbbreviation(char*, uint8_t, const char*, uint16_t, const char*) [with BF = ace_time::extended::BrokerFactory; ZIB = ace_time::extended::ZoneInfoBroker; ZEB = ace_time::extended::ZoneEraBroker; ZPB = ace_time::extended::ZonePolicyBroker; ZRB = ace_time::extended::ZoneRuleBroker]', inlined from 'static void ace_time::ExtendedZoneProcessorTemplate<BF, ZIB, ZEB, ZPB, ZRB>::createAbbreviation(char*, uint8_t, const char*, uint16_t, const char*) [with BF = ace_time::extended::BrokerFactory; ZIB = ace_time::extended::ZoneInfoBroker; ZEB = ace_time::extended::ZoneEraBroker; ZPB = ace_time::extended::ZonePolicyBroker; ZRB = ace_time::extended::ZoneRuleBroker]' at .pio/libdeps/teensy41/AceTime/src/ace_time/ExtendedZoneProcessor.h:2115:17, inlined from 'static void ace_time::ExtendedZoneProcessorTemplate<BF, ZIB, ZEB, ZPB, ZRB>::calcAbbreviations(ace_time::ExtendedZoneProcessorTemplate<BF, ZIB, ZEB, ZPB, ZRB>::Transition**, ace_time::ExtendedZoneProcessorTemplate<BF, ZIB, ZEB, ZPB, ZRB>::Transition**) [with BF = ace_time::extended::BrokerFactory; ZIB = ace_time::extended::ZoneInfoBroker; ZEB = ace_time::extended::ZoneEraBroker; ZPB = ace_time::extended::ZonePolicyBroker; ZRB = ace_time::extended::ZoneRuleBroker]' at .pio/libdeps/teensy41/AceTime/src/ace_time/ExtendedZoneProcessor.h:2098:27: .pio/libdeps/teensy41/AceTime/src/ace_time/ExtendedZoneProcessor.h:2149:18: warning: 'char* strncpy(char*, const char*, size_t)' specified bound 7 equals destination size [-Wstringop-truncation] 2149 | strncpy(dest, format, destSize); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Perhaps the final argument should be changed to destSize-1 like line #2126?

Construct NtpClock assuming network is available

I have difficulty understanding the choice to constuct NtpClock with Wi-Fi parameters. In a project which already uses Wi-Fi for other reason (e.g., running a web server), is there a way to create an NTP clock without running a Wi-Fi setup?

Thanks.

Prevent incorrect initialization

Hello,

I found that if I create ZoneManager like this:

ace_time::CompleteZoneManager zoneManager(
  ace_time::zonedbc::kZoneRegistrySize, // note incorrect size passed, should be kZoneAndLinkRegistrySize
  ace_time::zonedbc::kZoneAndLinkRegistry,
  zoneProcessorCache);

the code hangs up while trying to enumerate them later:

  // here we pass the correct size
  zoneSorter.fillIndexes(indexes, ace_time::zonedbc::kZoneAndLinkRegistrySize);
  zoneSorter.sortIndexes(indexes, ace_time::zonedbc::kZoneAndLinkRegistrySize);

  // later...
  auto zone = zoneManager.getZoneForIndex(indexes[0]); // hangs up here

I understand it's technically not a bug within the library, but maybe there's a way to prevent incorrect size passing? The size of array ace_time::zonedbc::kZoneAndLinkRegistry is known at compile-time, so maybe it's possible to avoid passing its size directly?

improve STDOFF and DST offsets to handle one minute resolution

Currently (v0.7.2), the AT and UNTIL times are handled with one-minute resolution. But the STDOFF and DST offsets (in RULES column with 'hh:mm' and SAVE column) are handled using a 15-minute resolution. The 15-minute resolution is sufficient for all timezones after the year 2000, but if we want to support historical DST shifts before year 2000, then we need to support one-minute resolution.

An example is Pacific/Kiritimati which used a UTC offset of -10:40 from 1901 to 1979:

# Zone  NAME            STDOFF  RULES   FORMAT  [UNTIL]
Zone Pacific/Kiritimati -10:29:20 -     LMT     1901
                        -10:40  -       -1040   1979 Oct                        
                        -10:00  -       -10 

If we go very far back, there are a number of timezones which have UTC offsets in one-second resolution. Because I want to keep the zoneinfo files as small as possible, I don't think these will be supported. For curiosity, here is the output from tzcompiler.py if we ask it to truncate the offsets to 1-minute resolution, for the years 1935 - 2050:

// Africa/El_Aaiun (STDOFF '-0:52:48' truncated to '-00:52')
// Africa/Johannesburg (RULES not fixed but FORMAT is missing '%' or '/')
// Africa/Monrovia (STDOFF '-0:44:30' truncated to '-00:44')
// America/Goose_Bay (STDOFF '-3:30:52' truncated to '-03:30')
// America/Managua (STDOFF '-5:45:12' truncated to '-05:45')
// America/Paramaribo (STDOFF '-3:40:36' truncated to '-03:40', STDOFF '-3:40:52' truncated to '-03:40')
// America/St_Johns (STDOFF '-3:30:52' truncated to '-03:30')
// Asia/Dhaka (STDOFF '5:53:20' truncated to '05:53')
// Asia/Riyadh (STDOFF '3:06:52' truncated to '03:06')
// Asia/Tehran (STDOFF '3:25:44' truncated to '03:25')
// Asia/Thimphu (STDOFF '5:58:36' truncated to '05:58')
// Atlantic/Azores (RULES not fixed but FORMAT is missing '%' or '/')
// Atlantic/Madeira (RULES not fixed but FORMAT is missing '%' or '/')          
// Europe/Amsterdam (STDOFF '0:19:32' truncated to '00:19')

correctly handle Fri<=1 expressions in TZ database

TZ Database version 2019b is the first version (in my short experience with the database) that contains the '<=' operator in 'dayOfWeek<=dayOfMonth' expression:

Rule    Zion    2005    2012    -       Apr     Fri<=1  2:00    1:00    D

I added support for this in BasicZoneProcessor::calcStartDayOfMonth() (and used by ExtendedZoneProcessor as well). But it looks like I still have some bugs in the various Python scripts such as transformer.py. The script needs to:

  • print a warning if the <= or >= shift causes a change into the previous or following month (for curiosity)
  • exclude Zones or Rules if the shift would cause a change into the previous or following year, since this is not (yet) supported in calcStartDayOfMonth()
  • fix a Python exception when creating the Anchor rule in _get_anchor_rule(), triggered when generating zonedbx/ files between 1940 to 2050, since it then causes Rule Zion to need an anchor rule, and the _get_anchor_rule() barfs on the Fri<=1

Constructor for NtpClock::setup() missing

In v. 0.8.1 there is no constructor for ace_time::clock::NtpClock::setup(void). As mentioned in the documentation, this should be the constructor to use when there is already an existing WLAN connection.
There is only a constructor for NtpClock::setup(const char* ssid, const char* password).
Otherwise, this library is a wonderful thing! Thanks!

The code to add to NtpClock.h would be:

   void setup(void) {
      mUdp.begin(mLocalPort);

    #if ACE_TIME_NTP_CLOCK_DEBUG == 1
      #if defined(ESP8266)
        SERIAL_PORT_MONITOR.print(F("Local port: "));
        SERIAL_PORT_MONITOR.println(mUdp.localPort());
      #endif
    #endif

      mIsSetUp = true;
    }

Add support for other HW RTCs

Hello,

I've seen your project has DS3231 support.

I want to suggest to add DS3232 support. It uses same control registers so you can use same files or simply add a note about supporting this RTC.

Also you can add DS1307 support; works the same as DS3232 but you may need to change addresses a little.

I've developed a minimal RTC library where you can see how they work, and there I have the three RTCs datasheets: https://github.com/Naguissa/uRTCLib/tree/master/extras

Cheers!

support arduino:samd Core >= 1.8.10

The arduino::samd core converted to using a new Arduino API for versions >= 1.8.10. (The SparkFun::samd core is fine). I don't have time to work on this right now, so I will explicitly blacklist these boards in AceTime.h so that the user gets a useful error message, instead of pages of compiler errors.

(This issue is identical to bxparks/AUnit#66).

Question: Does Acetime support standalone determination of timezone using GPS module?

The question assumes no internet access by the design, with everything needed to determine the Timezone based on the GPS provided coordinates. The design would need to incorporate a database for position comparison. Not sure how AceTime works and if it provides this database, how it does the position comparison to the database, etc.

Thanks,

Is AceTime working with ESP32

Hi,

i used your great library with an ESP8266 which works perfect.
But when compiling for ESP32 i get a lot of error messages ;-(
Is there a way to get AceTime running with an ESP32?

This is the error code pasted from Arduino IDE (sorry for that much text ;-(
There are also some other error messages in between but the most are related to acetime.
Would be great if you could help me running that library again

Arduino: 1.8.16 (Linux), Board: "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"

Arduino: 1.8.16 (Linux), Board: "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"



In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:29:0,
                 from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:146,
                 from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:7:
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h: In static member function 'static const char* ace_time::DateStrings::getStringAt(const char* const*, uint8_t)':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h:73:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&strings[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h:73:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&strings[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h:73:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&strings[i]);
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const ace_time::basic::ZoneRuleBroker ace_time::basic::ZonePolicyBroker::rule(uint8_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:157:29: note: in expansion of macro 'pgm_read_ptr'
           (const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
                             ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:157:29: note: in expansion of macro 'pgm_read_ptr'
           (const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
                             ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:157:29: note: in expansion of macro 'pgm_read_ptr'
           (const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
                             ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const char* ace_time::basic::ZonePolicyBroker::letter(uint8_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:167:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZonePolicy->letters);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:167:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZonePolicy->letters);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:167:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZonePolicy->letters);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:168:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&letters[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:168:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&letters[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:168:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&letters[i]);
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const ace_time::basic::ZonePolicyBroker ace_time::basic::ZoneEraBroker::zonePolicy() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:215:31: note: in expansion of macro 'pgm_read_ptr'
           (const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
                               ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:215:31: note: in expansion of macro 'pgm_read_ptr'
           (const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
                               ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:215:31: note: in expansion of macro 'pgm_read_ptr'
           (const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
                               ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const char* ace_time::basic::ZoneEraBroker::format() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:227:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&mZoneEra->format);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:227:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&mZoneEra->format);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:227:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&mZoneEra->format);
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const ace_time::internal::ZoneContext* ace_time::basic::ZoneInfoBroker::zoneContext() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:309:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZoneInfo->zoneContext);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:309:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZoneInfo->zoneContext);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:309:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZoneInfo->zoneContext);
           ^
In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:146:0,
                 from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:7:
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const __FlashStringHelper* ace_time::basic::ZoneInfoBroker::name() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:39:76: note: in definition of macro 'FPSTR'
 #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
                                                                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:313:20: note: in expansion of macro 'pgm_read_ptr'
       return FPSTR(pgm_read_ptr(&mZoneInfo->name));
                    ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:39:76: note: in definition of macro 'FPSTR'
 #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
                                                                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:313:20: note: in expansion of macro 'pgm_read_ptr'
       return FPSTR(pgm_read_ptr(&mZoneInfo->name));
                    ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:39:76: note: in definition of macro 'FPSTR'
 #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
                                                                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:313:20: note: in expansion of macro 'pgm_read_ptr'
       return FPSTR(pgm_read_ptr(&mZoneInfo->name));
                    ^
In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:29:0,
                 from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:146,
                 from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:7:
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'uint32_t ace_time::basic::ZoneInfoBroker::zoneId() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:44:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:317:14: note: in expansion of macro 'pgm_read_dword'
       return pgm_read_dword(&mZoneInfo->zoneId);
              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:45:28: error: '_addr' was not declared in this scope
   *(const unsigned long *)(_addr); \
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:317:14: note: in expansion of macro 'pgm_read_dword'
       return pgm_read_dword(&mZoneInfo->zoneId);
              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:46:2: error: void value not ignored as it ought to be
 })
  ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:317:14: note: in expansion of macro 'pgm_read_dword'
       return pgm_read_dword(&mZoneInfo->zoneId);
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const ace_time::basic::ZoneEraBroker ace_time::basic::ZoneInfoBroker::era(uint8_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:325:46: note: in expansion of macro 'pgm_read_ptr'
       const ZoneEra* eras = (const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
                                              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:325:46: note: in expansion of macro 'pgm_read_ptr'
       const ZoneEra* eras = (const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
                                              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:325:46: note: in expansion of macro 'pgm_read_ptr'
       const ZoneEra* eras = (const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
                                              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'const ace_time::basic::ZoneInfo* ace_time::basic::ZoneRegistryBroker::zoneInfo(uint16_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:375:32: note: in expansion of macro 'pgm_read_ptr'
       return (const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
                                ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:375:32: note: in expansion of macro 'pgm_read_ptr'
       return (const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
                                ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:375:32: note: in expansion of macro 'pgm_read_ptr'
       return (const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
                                ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'uint32_t ace_time::basic::LinkEntryBroker::zoneId() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:44:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:405:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t zoneId() const { return pgm_read_dword(&mLinkEntry->zoneId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:45:28: error: '_addr' was not declared in this scope
   *(const unsigned long *)(_addr); \
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:405:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t zoneId() const { return pgm_read_dword(&mLinkEntry->zoneId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:46:2: error: void value not ignored as it ought to be
 })
  ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:405:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t zoneId() const { return pgm_read_dword(&mLinkEntry->zoneId); }
                                      ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h: In member function 'uint32_t ace_time::basic::LinkEntryBroker::linkId() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:44:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:406:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t linkId() const { return pgm_read_dword(&mLinkEntry->linkId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:45:28: error: '_addr' was not declared in this scope
   *(const unsigned long *)(_addr); \
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:406:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t linkId() const { return pgm_read_dword(&mLinkEntry->linkId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:46:2: error: void value not ignored as it ought to be
 })
  ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/BasicBrokers.h:406:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t linkId() const { return pgm_read_dword(&mLinkEntry->linkId); }
                                      ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const ace_time::extended::ZoneRuleBroker ace_time::extended::ZonePolicyBroker::rule(uint8_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:181:29: note: in expansion of macro 'pgm_read_ptr'
           (const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
                             ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:181:29: note: in expansion of macro 'pgm_read_ptr'
           (const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
                             ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:181:29: note: in expansion of macro 'pgm_read_ptr'
           (const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
                             ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const char* ace_time::extended::ZonePolicyBroker::letter(uint8_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:191:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZonePolicy->letters);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:191:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZonePolicy->letters);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:191:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZonePolicy->letters);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:192:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&letters[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:192:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&letters[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:192:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&letters[i]);
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const ace_time::extended::ZonePolicyBroker ace_time::extended::ZoneEraBroker::zonePolicy() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:241:31: note: in expansion of macro 'pgm_read_ptr'
           (const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
                               ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:241:31: note: in expansion of macro 'pgm_read_ptr'
           (const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
                               ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:241:31: note: in expansion of macro 'pgm_read_ptr'
           (const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
                               ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const char* ace_time::extended::ZoneEraBroker::format() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:255:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&mZoneEra->format);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:255:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&mZoneEra->format);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:255:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&mZoneEra->format);
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const ace_time::internal::ZoneContext* ace_time::extended::ZoneInfoBroker::zoneContext() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:341:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZoneInfo->zoneContext);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:341:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZoneInfo->zoneContext);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:341:11: note: in expansion of macro 'pgm_read_ptr'
           pgm_read_ptr(&mZoneInfo->zoneContext);
           ^
In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:146:0,
                 from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:7:
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const __FlashStringHelper* ace_time::extended::ZoneInfoBroker::name() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:39:76: note: in definition of macro 'FPSTR'
 #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
                                                                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:345:20: note: in expansion of macro 'pgm_read_ptr'
       return FPSTR(pgm_read_ptr(&mZoneInfo->name));
                    ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:39:76: note: in definition of macro 'FPSTR'
 #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
                                                                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:345:20: note: in expansion of macro 'pgm_read_ptr'
       return FPSTR(pgm_read_ptr(&mZoneInfo->name));
                    ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:39:76: note: in definition of macro 'FPSTR'
 #define FPSTR(pstr_pointer) (reinterpret_cast<const __FlashStringHelper *>(pstr_pointer))
                                                                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:345:20: note: in expansion of macro 'pgm_read_ptr'
       return FPSTR(pgm_read_ptr(&mZoneInfo->name));
                    ^
In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:29:0,
                 from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:146,
                 from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:7:
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'uint32_t ace_time::extended::ZoneInfoBroker::zoneId() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:44:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:349:14: note: in expansion of macro 'pgm_read_dword'
       return pgm_read_dword(&mZoneInfo->zoneId);
              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:45:28: error: '_addr' was not declared in this scope
   *(const unsigned long *)(_addr); \
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:349:14: note: in expansion of macro 'pgm_read_dword'
       return pgm_read_dword(&mZoneInfo->zoneId);
              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:46:2: error: void value not ignored as it ought to be
 })
  ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:349:14: note: in expansion of macro 'pgm_read_dword'
       return pgm_read_dword(&mZoneInfo->zoneId);
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const ace_time::extended::ZoneEraBroker ace_time::extended::ZoneInfoBroker::era(uint8_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:357:46: note: in expansion of macro 'pgm_read_ptr'
       const ZoneEra* eras = (const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
                                              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:357:46: note: in expansion of macro 'pgm_read_ptr'
       const ZoneEra* eras = (const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
                                              ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:357:46: note: in expansion of macro 'pgm_read_ptr'
       const ZoneEra* eras = (const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
                                              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'const ace_time::extended::ZoneInfo* ace_time::extended::ZoneRegistryBroker::zoneInfo(uint16_t) const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:407:32: note: in expansion of macro 'pgm_read_ptr'
       return (const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
                                ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:407:32: note: in expansion of macro 'pgm_read_ptr'
       return (const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
                                ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:407:32: note: in expansion of macro 'pgm_read_ptr'
       return (const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
                                ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'uint32_t ace_time::extended::LinkEntryBroker::zoneId() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:44:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:437:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t zoneId() const { return pgm_read_dword(&mLinkEntry->zoneId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:45:28: error: '_addr' was not declared in this scope
   *(const unsigned long *)(_addr); \
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:437:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t zoneId() const { return pgm_read_dword(&mLinkEntry->zoneId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:46:2: error: void value not ignored as it ought to be
 })
  ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:437:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t zoneId() const { return pgm_read_dword(&mLinkEntry->zoneId); }
                                      ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h: In member function 'uint32_t ace_time::extended::LinkEntryBroker::linkId() const':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:44:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:438:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t linkId() const { return pgm_read_dword(&mLinkEntry->linkId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:45:28: error: '_addr' was not declared in this scope
   *(const unsigned long *)(_addr); \
                            ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:438:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t linkId() const { return pgm_read_dword(&mLinkEntry->linkId); }
                                      ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:46:2: error: void value not ignored as it ought to be
 })
  ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/internal/ExtendedBrokers.h:438:38: note: in expansion of macro 'pgm_read_dword'
     uint32_t linkId() const { return pgm_read_dword(&mLinkEntry->linkId); }
                                      ^
/media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino: In function 'void setup()':
mytestsketch:372:34: error: invalid conversion from 'const char*' to 'long int' [-fpermissive]
   configTime(MY_TZ, MY_NTP_SERVER); // Wird für die Abfrage der Uhrzeit online benötigt (nur falls eine WLAN-Verbindung besteht und nur für das erste Mal einschalten...
                                  ^
mytestsketch:372:34: error: invalid conversion from 'const char*' to 'int' [-fpermissive]
mytestsketch:372:34: error: too few arguments to function 'void configTime(long int, int, const char*, const char*, const char*)'
In file included from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:7:0:
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:173:17: note: declared here
 extern "C" void configTime(long gmtOffset_sec, int daylightOffset_sec,
                 ^
/media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino: In lambda function:
mytestsketch:605:37: error: 'firmwareUpdate' was not declared in this scope
       server.send(200, "text/html", firmwareUpdate);
                                     ^
/media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino: In function 'void setup()':
mytestsketch:645:61: error: no matching function for call to 'WiFiUDP::beginMulticast(IPAddress, IPAddress&, const uint16_t&)'
   if (!Udp.beginMulticast(WiFi.softAPIP(), multicastIP, PORT)) {
                                                             ^
In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/WiFi/src/WiFi.h:39:0,
                 from /home/basementmedia/Arduino/libraries/AceTime/src/ace_time/clock/NtpClock.h:15,
                 from /home/basementmedia/Arduino/libraries/AceTime/src/AceTime.h:68,
                 from /media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino:69:
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/WiFi/src/WiFiUdp.h:57:11: note: candidate: virtual uint8_t WiFiUDP::beginMulticast(IPAddress, uint16_t)
   uint8_t beginMulticast(IPAddress a, uint16_t p);
           ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/libraries/WiFi/src/WiFiUdp.h:57:11: note:   candidate expects 2 arguments, 3 provided
/media/daten/Arduino/mytestsketch/Code/mytestsketch/mytestsketch.ino: In function 'void AP_conn()':
mytestsketch:656:25: error: 'class EspClass' has no member named 'getChipId'
   uint32_t chipid = ESP.getChipId();
                         ^

       ^
exit status 1
invalid conversion from 'const char*' to 'long int' [-fpermissive]

support '/' in FORMAT where RULES is a fixed offset

Asia/Dushanbe in 1991 has an entry where the FORMAT column contains a '/' but the RULES column contains a 1:00.

# Zone  NAME            STDOFF  RULES   FORMAT  [UNTIL]                         
Zone    Asia/Dushanbe   4:35:12 -       LMT     1924 May  2                     
                        5:00    -       +05     1930 Jun 21                     
                        6:00 RussiaAsia +06/+07 1991 Mar 31  2:00s              
                        5:00    1:00    +05/+06 1991 Sep  9  2:00s              
                        5:00    -       +05  

This probably indicates that the abbreviation should be "+06". Currently, BasicZoneProcessor does not handle this case, and will be excluded by transformer.py, and the entry is moot because the zonedb files are generated only for year 2000 and later. It should be relatively easy to fix BasicZoneProcessor to handle this.

ESP32 support

Hi Brian,

just wanted to use your great library with an ESP32 Board and got a bunch of error messages after sketch upload.

If i just include the library by

#include <AceTime.h>

i get a huge fault message starting like this (just a few lines, complete message is very long):

In file included from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/WString.h:29:0,
                 from /home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/Arduino.h:146,
                 from sketch/waterbot_v44_esp32_v2.ino.cpp:1:
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h: In static member function 'static const char* ace_time::DateStrings::getStringAt(const char* const*, uint8_t)':
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:52:14: error: 'typeof_' was not declared in this scope
   typeof(addr) _addr = (addr); \
              ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h:73:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&strings[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:21: error: '_addr' was not declared in this scope
   *(void * const *)(_addr); \
                     ^
/home/basementmedia/Arduino/libraries/AceTime/src/ace_time/common/DateStrings.h:73:28: note: in expansion of macro 'pgm_read_ptr'
       return (const char*) pgm_read_ptr(&strings[i]);
                            ^
/home/basementmedia/.arduino15/packages/esp32/hardware/esp32/1.0.6/cores/esp32/pgmspace.h:53:27: error: void value not ignored as it ought to be
   *(void * const *)(_addr); \
                           ^

Is this library not compatible to the ESP32?

Best wishes

Daniel

Broken SAMD core testing because of AceTime

Compiling sketch: /home/runner/Arduino/libraries/AceTime/examples/HelloDateTime
  In file included from /home/runner/.arduino15/packages/arduino/hardware/samd/1.8.11/cores/arduino/api/ArduinoAPI.h:31:0,
                   from /home/runner/.arduino15/packages/arduino/hardware/samd/1.8.11/cores/arduino/Arduino.h:23,
                   from /home/runner/Arduino/libraries/AceTime/src/ace_time/LocalDateTime.h:12,
                   from /home/runner/Arduino/libraries/AceTime/src/ace_time/OffsetDateTime.h:11,
                   from /home/runner/Arduino/libraries/AceTime/src/ace_time/ZonedDateTime.h:11,
                   from /home/runner/Arduino/libraries/AceTime/src/ace_time/ZonedDateTime.cpp:7:
  /home/runner/.arduino15/packages/arduino/hardware/samd/1.8.11/cores/arduino/api/Print.h:96:16: error: 'Print' is already declared in this scope
   using arduino::Print;
                  ^~~~~
  
  Error during build: exit status 1
  
Error: Compilation failed

Q: AceTime with external database?

Hi,
Not an issue, but rather a question:
Is it possible to run AceTime with an external tz db?
For instance, on esp32 chips? There is a flash filesystem that could be updated OTA without recompiling the code.
For other MCUs - the DB could be on SD card.
Is it possible? Is it doable given current architecture even if it needs to be changed?

Need to support other WiFi platforms like the Nano 33 IOT, Maker Wifi ,etc

I am trying to use this library on a Nano 33 IOT device which has built-in Wifi support and I have successfully run the example programs. It would be cleanest to use your NtpClock but it appears I have to develop my own because the current implementation requires an ESP8266, and I don't want to mess with the standard libraries to fix it. In general I am building a sophisticated system that has many users of the wifi, and it's best to just make yours assume that wifi is somehow provided and not only by an 8266.

Getting this error compiling for ESP32

Library Version: 2.2.3 in Platform.io for ESP32

In file included from .pio\libdeps\esp32doit-devkit-v1\AceCommon\src/AceCommon.h:54:0,
                 from .pio\libdeps\esp32doit-devkit-v1\AceTime\src/zoneinfo/ZoneRegistrar.h:10,
                 from .pio\libdeps\esp32doit-devkit-v1\AceTime\src/AceTime.h:31,
                 from include/hardware_drivers.h:13,
                 from src\hardware_drivers.cpp:1:
.pio\libdeps\esp32doit-devkit-v1\AceCommon\src/print_str/PrintStr.h:127:10: error: 'void ace_common::PrintStrBase::flush()' marked 'override', but does not override
     void flush() override {
          ^
Compiling .pio\build\esp32doit-devkit-v1\lib313\TinyGPSPlus\TinyGPS++.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\lib97d\AceCommon\backslash_x_encoding\backslash_x_encoding.cpp.o
In file included from .pio\libdeps\esp32doit-devkit-v1\AceCommon\src/AceCommon.h:54:0,
                 from .pio\libdeps\esp32doit-devkit-v1\AceTime\src/zoneinfo/ZoneRegistrar.h:10,
                 from .pio\libdeps\esp32doit-devkit-v1\AceTime\src/AceTime.h:31,
                 from include/hardware_drivers.h:13,
                 from src\main.cpp:2:
.pio\libdeps\esp32doit-devkit-v1\AceCommon\src/print_str/PrintStr.h:127:10: error: 'void ace_common::PrintStrBase::flush()' marked 'override', but does not override
     void flush() override {
          ^
Compiling .pio\build\esp32doit-devkit-v1\lib97d\AceCommon\cstrings\copyReplace.cpp.o
*** [.pio\build\esp32doit-devkit-v1\src\hardware_drivers.cpp.o] Error 1
*** [.pio\build\esp32doit-devkit-v1\src\main.cpp.o] Error 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.