Releases: bxparks/AceTime
Releases · bxparks/AceTime
v1.9.0 - allow sorting of zones by name or offset-name; reduce flash by 1100-1300 bytes on AVR
- 1.9.0 (2021-12-02, TZDB 2021e)
- Add
ZoneSorterByName
andZoneSorterByOffsetAndName
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.- See the Zone Sorting section in the
USER_GUIDE.md
. - Adds a new dependency to
AceSorting library.
- See the Zone Sorting section in the
- 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.
- AceTime seems to be about 90X faster for converting date-time
- Add
MaxBufSize
comment field intozonedb[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()
togetAllocSize()
. This now returns the
maximum number of transitions that has been allocated so far, which
happens to begetHighWater() + 1
. - Rename
resetHighWater()
toresetAllocSize()
. - 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
.
- Rename
- Breaking Change: Extract
BasicZoneProcessorCache
and
ExtendedZoneProcessorCache
out ofBasicZoneManager
and
ExtendedZoneManager
. Remove all purevirtual
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 fromLinkManager
,
analogous to their removal fromZoneManager
.- Saves 68 bytes of flash on AVR processors.
- See Migrating to v1.9 for
migration info.
- Add
v1.8.2 - upgrade to TZDB 2021e
- 1.8.2 (2021-10-28, TZDB 2021e)
- Update to TZDB 2021e.
- https://mm.icann.org/pipermail/tz-announce/2021-October/000069.html
- Palestine will fall back 10-29 (not 10-30) at 01:00.
- Update to TZDB 2021e.
v1.8.1 - upgrade to TZDB 2021d
- 1.8.1 (2021-10-18, TZDB 2021d)
- Add
make -C examples/MemoryBenchmark epoxy
to GitHub actions. - Upgrade to TZDB 2021d.
- Add
v1.8.0 - extract Clocks to AceTimeClock; replace Wire.h with AceWire.h; extract thin links to LinkManagers
- 1.8.0 (2021-10-15, TZDB 2021c)
- Breaking Change: Move clock classes under
ace_time::clock
and
implementation classes underace_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 ifWire
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.
- Just including the
- Breaking Change: Extract thin link functionality from
BasicZoneManager
andExtendedZoneManager
into newBasicLinkManager
andExtendedLinkManager
.- 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
toUSER_GUIDE.md
. - Remove
docs/clock_system_clock.md
after migrating it to
the AceTimeClock project. - Merge
docs/comparisons.md
into README.md.
- Merge
- Breaking Change: Move clock classes under
v1.7.5 - upgrade to TZDB 2021c; fix edge case bug when Transition occurs at ZoneEra transition
- 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 differentZoneEra
.- 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
tozone_processor.py
in theAceTimePython
library. - Seems to affect only
Europe/Lisbon
in 1992, which is not a part of
the predefinedzonedb
orzonedbx
database, which normally include
only 2000 until 2050.
- They are now considered to happen at the same time if any of the 'w'
- 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 byExtendedZoneProcessor
and the
buffer size calculated by AceTimeTools usingzone_processor.py
of
AceTimePython
library. - Create
examples/DebugZoneProcessor
for debugging the internal logic
ofExtendedZoneProcessor
.
- Create AceTimePython
- 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.
- Upgrade ESP8266 Core from 2.7.4 to 3.0.2.
- 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
- TZDB 2021b is skipped because of controversial changes which were
- Bug Fix: Update
v1.7.4 - move tools and validation tests into separate projects
- 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
.
- Update
- This is a maintenance release. No changes to the core library code.
- Move
1.7.3 - fix broken documentation links; maintenance release before major refactoring
- 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 usesAceWire
library. - This is a maintenance release before some major refactoring. No changes to
core library code.
- Fix numerous broken links in documents moved to
v1.7.2 - add ZoneDateTime::normalize(); upgrade to AceRoutine v1.3.1; make clockMillis() non-virtual
v1.7.2 - add ZoneDateTime::normalize(); upgrade to AceRoutine v1.3.1; make clockMillis() non-virtual
- 1.7.2 (2021-06-02)
- Bug Fix: Add
ZonedDateTime::normalize()
, which must be called by
the client code after calling aZonedDateTime
mutation function.- See ZonedDateTime Normalization.
- Increases flash usage by 222 bytes by making this single call on an
AVR unfortunately.
- 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 fromSystemClockTemplate
, which
allowsSystemClock::clockMillis()
to also become non-virtual. Saves
20-40 bytes of flash. No discernible changes in CPU time.
- Bug Fix: Add
v1.7.1 - simplify SystemClock getSeconds{Since,To}SyncAttempt() methods
- 1.7.1 (2021-04-02)
- Simplify calculation of
SystemClock::getSecondsSinceSyncAttempt()
andSystemClock::getSecondsToSyncAttempt()
, which substantially
simplifies the implementation ofSystemClockLoop
and
SystemClockCoroutine
. - Update
tests/auniter.ini
to be consistent with my other libraries. Add
entries forenv:teensy32
(which had been supported for a while) and
env:mkr1000
(which I just received).
- Simplify calculation of
v1.7 - refactor USER_GUIDE.md; get SystemClock sync status; add Stm32F1Clock
- 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 tocompare_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
- Add
ace_time::clock::Stm32F1Clock
andace_time::hw::Stm32F1Rtc
- Specialized classes for the STM32F1 chip, particularly the Blue Pill
board, using theLSE_CLOCK
(low speed external clock).- Blue Pill already includes the external 32.768 kHz
crystal on pins C14 and C15.
- Blue Pill already includes the external 32.768 kHz
- Alternative to the
ace_time::clock::StmRtcClock
class, which uses
the genericSTM32RTC
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.
- Specialized classes for the STM32F1 chip, particularly the Blue Pill
- Massive refactoring of
USER_GUIDE.md
andREADME.md
for clarity- Extract subsections of
USER_GUIDE.md
into separate docs,
makingUSER_GUIDE.md
shorter and hopefully more digestable. - Rename most of
USER_GUIDE.md
intodocs/date_time_timezone.md
. - Extract
Clock
classes intodocs/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
andStm32F1Clock
.
- Extract subsections of
- 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.
- Saves 618 bytes of flash on 8-bit AVR processors, 328 bytes on SAMD21,
- Finish a working implementation of
acetz.py
.- Includes support for
fold
. - Create
BasicAcetzTest
andExtendedAcetzTest
and verify all zones
validate.
- Includes support for
- Time zone short names are printed with spaces instead of underscore.
- Various
printShortNameTo()
andprintShortTo()
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.
- Various
SystemClock
- Fix
SystemClock::forceSync()
that crashes if the referenceClock is
null.- Used mostly for debugging and testing, so I doubt anyone ran into
this.
- Used mostly for debugging and testing, so I doubt anyone ran into
- 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
andSystemClockCoroutine
toprivate
.- 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.
- Examples
- Fix
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.
- Add warning that calling
- AceTime now has a