Skip to content

Releases: bxparks/AceTime

v1.9.0 - allow sorting of zones by name or offset-name; reduce flash by 1100-1300 bytes on AVR

03 Dec 02:47
02ff26c
Compare
Choose a tag to compare
  • 1.9.0 (2021-12-02, TZDB 2021e)
    • Add ZoneSorterByName and ZoneSorterByOffsetAndName classes
      to sort zone indexes, ids, or names according to 2 pre-defined sorting
      criteria: (1) by name, or (2) by UTC offset and then by name.
    • Add examples/CompareAceTimeToHinnantDate to compare the performance of
      AceTime compared to Hinnant date library.
      • AceTime seems to be about 90X faster for converting date-time
        components to epoch seconds.
    • Add MaxBufSize comment field into zonedb[x]/zone_infos.h which is the
      maximum over all zones in that file. Must be less than or equal to
      ExtendedZoneProcessor::kMaxTransitions.
    • Potential Breaking Change: class TransitionStorage
      • Rename getHighWater() to getAllocSize(). This now returns the
        maximum number of transitions that has been allocated so far, which
        happens to be getHighWater() + 1.
      • Rename resetHighWater() to resetAllocSize().
      • Rename ExtendedZoneProcessor::resetTransitionHighWater() to
        resetTransitionAllocSize().
      • All of these methods were intended for internal debugging so these
        changes are not considered to be an API change.
      • The semantics of these methods are now closer to the algorithm in
        AceTimePython/zone_processor.ZoneProcessor.
    • Breaking Change: Extract BasicZoneProcessorCache and
      ExtendedZoneProcessorCache out of BasicZoneManager and
      ExtendedZoneManager. Remove all pure virtual methods from
      ZoneManager, making the class hierarchy non-polymorphic.
      • Saves 1100-1300 bytes of flash on AVR processors.
      • See Migrating to v1.9 for
        migration info.
    • Breaking Change: Remove pure virtual methods from LinkManager,
      analogous to their removal from ZoneManager.
      • Saves 68 bytes of flash on AVR processors.
      • See Migrating to v1.9 for
        migration info.

v1.8.2 - upgrade to TZDB 2021e

29 Oct 01:13
a5601c4
Compare
Choose a tag to compare

v1.8.1 - upgrade to TZDB 2021d

18 Oct 21:58
49183f6
Compare
Choose a tag to compare
  • 1.8.1 (2021-10-18, TZDB 2021d)
    • Add make -C examples/MemoryBenchmark epoxy to GitHub actions.
    • Upgrade to TZDB 2021d.

v1.8.0 - extract Clocks to AceTimeClock; replace Wire.h with AceWire.h; extract thin links to LinkManagers

15 Oct 16:09
7511ff9
Compare
Choose a tag to compare
  • 1.8.0 (2021-10-15, TZDB 2021c)
    • Breaking Change: Move clock classes under ace_time::clock and
      implementation classes under ace_time::hw to the new
      AceTimeClock repo.
      • Classes remain in the same C++ namespace.
      • Client code needs to add #include <AceTimeClock.h>.
      • See Migrating to v1.8 for
        migration info.
    • Breaking Change: Convert DS3231.h into a template class with an
      indirect dependency to <AceWire.h>, replacing direct dependency on
      <Wire.h>.
      • Just including the <Wire.h> header causes flash memory to be
        consumed, even if Wire object is never used.
      • Saves 1000-1500 bytes of flash on AVR, and up to 4000 bytes on STM32.
      • See Migrating to v1.8 for
        migration info.
    • Breaking Change: Extract thin link functionality from
      BasicZoneManager and ExtendedZoneManager into new BasicLinkManager
      and ExtendedLinkManager.
      • Saves 200-500 bytes of flash memory if the feature is not used.
      • Client application can determine whether to pay for this
        functionality, instead of automatically being included into the
        ZoneManager.
      • See the Thin Links section in the User
        Guide and Migrating to v1.8 for
        migration info.
    • Simplify documentation
      • Merge docs/installation.md into README.md.
      • Move docs/date_time_timezone.md to USER_GUIDE.md.
      • Remove docs/clock_system_clock.md after migrating it to
        the AceTimeClock project.
      • Merge docs/comparisons.md into README.md.

v1.7.5 - upgrade to TZDB 2021c; fix edge case bug when Transition occurs at ZoneEra transition

07 Oct 04:17
a40b87d
Compare
Choose a tag to compare
  • 1.7.5 (2021-10-06, TZDB 2021c)
    • Bug Fix: Update ExtendedZoneProcessor.h to implement better
      detection of Transitions that occur at the exact same time as the switch
      to a different ZoneEra.
      • They are now considered to happen at the same time if any of the 'w'
        time, 's' time, or 'u' time are equal.
      • The behavior of ExtendedZoneProcessor.h should now be identical
        to zone_processor.py in the AceTimePython library.
      • Seems to affect only Europe/Lisbon in 1992, which is not a part of
        the predefined zonedb or zonedbx database, which normally include
        only 2000 until 2050.
    • Testing
      • Create AceTimePython
        library extracted from the previously split
        AceTimeTools project.
      • Update ace_time/testing/ExtendedTransitionTest.h to validate
        the exact equality between the observed maximum buffer size of
        TransitionStorage as observed by ExtendedZoneProcessor and the
        buffer size calculated by AceTimeTools using zone_processor.py of
        AceTimePython library.
      • Create examples/DebugZoneProcessor for debugging the internal logic
        of ExtendedZoneProcessor.
    • Tool Chain
      • Upgrade ESP8266 Core from 2.7.4 to 3.0.2.
        • Flash consumption increases by 3-5 kB across the boad.
      • Upgrade Arduino CLI from 0.19.1 to 0.19.2.
      • Upgrade Arduino IDE from 1.8.13 to 1.8.16.
      • Upgrade Teensyduino from 1.54 to 1.55.
      • Upgrade SparkFun SAMD Core from 1.8.3 to 1.8.4.
    • TZDB Upgrade TZDB from 2021a to 2021c.
      • TZDB 2021b is skipped because of controversial changes which were
        reverted in 2021c.
      • 2021c announcement:
        https://mm.icann.org/pipermail/tz-announce/2021-October/000067.html
      • 2021b announcement:
        https://mm.icann.org/pipermail/tz-announce/2021-September/000066.html
      • Jordan now starts DST on February's last Thursday.
      • Samoa no longer observes DST.
      • 10 Zones from 2021a were converted to Links:
        • Africa/Accra -> Africa/Abidjan
        • America/Atikokan -> America/Panama
        • America/Blanc-Sablon -> America/Puerto_Rico
        • America/Creston -> America/Phoenix
        • America/Curacao -> America/Puerto_Rico
        • America/Nassau -> America/Toronto
        • America/Port_of_Spain -> America/Puerto_Rico
        • Antarctica/DumontDUrville -> Pacific/Port_Moresby
        • Antarctica/Syowa -> Asia/Riyadh
        • Pacific/Enderbury -> Pacific/Kanton
      • 1 new Zone was created:
        • Pacific/Kanton
      • BasicZoneManager now supports 258 Zones and 193 Links using the
        zonedb database
      • ExtendedZoneManager now supports 377 Zones and 217 Links using the
        zonedbx database

v1.7.4 - move tools and validation tests into separate projects

26 Aug 22:05
3720cc5
Compare
Choose a tag to compare
  • 1.7.4 (2021-08-26)
    • Move ./tools directory into new
      AceTimeTool repo.
    • Move ./tests/validation directory into new
      AceTimeValidation repo.
      • Update .github/workflows/validation.yml to use AceTimeValidation
        instead of ./tests/validation.
    • This is a maintenance release. No changes to the core library code.

1.7.3 - fix broken documentation links; maintenance release before major refactoring

25 Aug 23:21
0fab5b8
Compare
Choose a tag to compare
  • 1.7.3 (2021-08-25)
    • Fix numerous broken links in documents moved to docs/*.md in an earlier
      refactoring.
    • Add experimental DS3231Module class that uses AceWire library.
    • This is a maintenance release before some major refactoring. No changes to
      core library code.

v1.7.2 - add ZoneDateTime::normalize(); upgrade to AceRoutine v1.3.1; make clockMillis() non-virtual

02 Jun 22:37
27a4053
Compare
Choose a tag to compare
  • 1.7.2 (2021-06-02)
    • Bug Fix: Add ZonedDateTime::normalize(), which must be called by
      the client code after calling a ZonedDateTime mutation function.
    • Migrate PrintStr::getCstr() in AceCommon <=1.4.4 to the shorter
      PrintStr::cstr() in AceCommon >= 1.4.5.
    • Migrate to AceRoutine v1.3.1, which changes
      AceRoutine::coroutineMillis() into non-virtual.
    • Change SystemClock to instantiate from SystemClockTemplate, which
      allows SystemClock::clockMillis() to also become non-virtual. Saves
      20-40 bytes of flash. No discernible changes in CPU time.

v1.7.1 - simplify SystemClock getSeconds{Since,To}SyncAttempt() methods

02 Apr 21:00
1f8bddc
Compare
Choose a tag to compare
  • 1.7.1 (2021-04-02)
    • Simplify calculation of SystemClock::getSecondsSinceSyncAttempt()
      and SystemClock::getSecondsToSyncAttempt(), which substantially
      simplifies the implementation of SystemClockLoop and
      SystemClockCoroutine.
    • Update tests/auniter.ini to be consistent with my other libraries. Add
      entries for env:teensy32 (which had been supported for a while) and
      env:mkr1000 (which I just received).

v1.7 - refactor USER_GUIDE.md; get SystemClock sync status; add Stm32F1Clock

24 Mar 18:03
7dba9cc
Compare
Choose a tag to compare
  • 1.7 (2021-03-24, TZ DB version 2021a)
    • AceTime now has a
      GitHub Discussion.
      • Use that for general questions and discussions.
      • Reserve GitHub Issues
        for bugs and feature requests.
    • Add tools/compare_noda to compare Noda Time against AceTime.
      • Add --nzd_file flag to compare_noda to allow custom NodaZoneData
        files.
      • Run the Noda Time TzdbCompiler manually to generate custom
        tzdata$(TZ_VERSION).nzd for the specific TZDB version specified in
        the Makefile.
      • Add tests/validation/BasicNodaTest which matches AceTime completely
        from year 2000 until 2050.
      • Add tests/validation/ExtendedNodaTest which maches AceTime
        completely from year 1974 until 2050.
      • Identical results to BasicHinnantDateTest and
        ExtendedHinnantDateTest.
    • Add ace_time::clock::Stm32F1Clock and ace_time::hw::Stm32F1Rtc
      • Specialized classes for the STM32F1 chip, particularly the Blue Pill
        board, using the LSE_CLOCK (low speed external clock).
        • Blue Pill already includes the external 32.768 kHz
          crystal on pins C14 and C15.
      • Alternative to the ace_time::clock::StmRtcClock class, which uses
        the generic STM32RTC library, which does not fully work on the
        STM32F1.
        • STM32RTC forgets the date fields upon power reset, preserving
          only the time fields.
      • These classes write directly into the 32-bit RTC register on the F1,
        allowing AceTime to preserve both date fields and time fields.
    • Massive refactoring of USER_GUIDE.md and README.md for clarity
      • Extract subsections of USER_GUIDE.md into separate docs,
        making USER_GUIDE.md shorter and hopefully more digestable.
      • Rename most of USER_GUIDE.md into docs/date_time_timezone.md.
      • Extract Clock classes into docs/clock_system_clock.md
      • Extract Installation into docs/installation.md.
      • Extract Validation and Testing into docs/validation.md.
      • Extract Comparisons into docs/comparisons.md.
      • Add documentation for StmRtcClock and Stm32F1Clock.
    • Remove virtual destructor from ace_time::clock::Clock class.
      • Saves 618 bytes of flash on 8-bit AVR processors, 328 bytes on SAMD21,
        but only 50-60 bytes on other 32-bit processors.
    • Finish a working implementation of acetz.py.
      • Includes support for fold.
      • Create BasicAcetzTest and ExtendedAcetzTest and verify all zones
        validate.
    • Time zone short names are printed with spaces instead of underscore.
      • Various printShortNameTo() and printShortTo() methods now print
        the short names with the underscore replaced with a space. Example,
        instead of "Los_Angeles", it is now "Los Angeles".
      • It seems to be more reasonable for most time zones.
      • The time zone full name continues to print the entire canonical
        timezone identifier, e.g. "America/Los_Angeles".
      • Applications that need finer control will have to provide their own
        rendering logic.
    • SystemClock
      • Fix SystemClock::forceSync() that crashes if the referenceClock is
        null.
        • Used mostly for debugging and testing, so I doubt anyone ran into
          this.
      • Add methods to retrieve the sync status of SystemClock.
        • getSecondsSinceSyncAttempt()
        • getSecondsToSyncAttempt()
        • `getClockSlew()
        • getSyncStatusCode()
        • See System Clock
          Status

          for details.
      • Potentially Breaking: Move various internal constants in
        SystemClockLoop and SystemClockCoroutine to private.
        • Examples kStatusReady, kStatusSent, kStatusOk`k
        • These were all related to the internal finite state machine which
          should not have been exposed publically.
        • The sync status of SystemClock is now exposed through
          documented public methods described above.
    • NtpClock
      • Add warning that calling analogRead() too often (e.g. using buttons
        on a resistor ladder using AceButton library) on ESP8266 causes the
        WiFi connection to drop after 5-10 seconds.