Adds a helper function for legibility to SystemClock to invoke
std::chrono::ceil for us where the return type is fixed to a
SystemClock::duration type.
Also migrates the existing uses of std::chrono::ceil to this.
Change-Id: I1234ab3dfaf1d3ec22b0daa9d7666f66e0ce3310
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/37321
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Ewout van Bekkum <ewout@google.com>
Changes the SystemClock C Api to:
1) Use a pw_chrono_SystemClock_Duration struct instead of aliasing
an int64_t under pw_chrono_SystemClock_TickCount which could
accidentally permit direct tick usage.
2) Add PW_SYSTEM_CLOCK_{MS,S,MIN,H} and
PW_SYSTEM_CLOCK_{MS,S,MIN,H}_CEIL to permit C API users to
create durations which round up to the nearest tick for deadlines
and timeouts, mirroring std::chrono::ceil.
3) Add PW_SYSTEM_CLOCK_{MS,S,MIN,H}_FLOOR to permit C API users to
create durations which round down to the nearest tick for oddball
corner cases, mirroring std::chrono::floor.
4) In order to enable said macros, the system_clock_config.h backend
config was changed to require the clock period as a preprocessor
defines instead of a std::ratio<>.
5) Renames pw_chrono_SystemClock_TimeDelta to
pw_chrono_SystemClock_TimeElapsed to make the argument ordering
make more sense.
6) Changes existing std::chrono::duration_cast usage to
std::chrono::ceil and std::chrono:floor to set a good example
to be explicit on rounding.
7) Renames pw_chrono_SystemClock_TickCountsToNsTruncate accordingly to
pw_chrono_SystemClock_DurationToNsFloor.
Requires: pigweed-internal:9340
Change-Id: Ia628dceac53f964eda7c4aacd3d790b8b0e92207
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/31280
Commit-Queue: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>
Adds a std::this_thread like API through the pw_thread facades, that
is:
1) this_thread::yield
2) this_thread::sleep_{for,until}
3) this_thread::get_id
This module is split into many different facades in order to let users
decide what functionality they want to use as they may not always
be available, for example when using opaque SDKs.
In addition this provides an initial set of backends based on using
the STL's std::this_thread directly and selects them for the host
target.
Change-Id: I0ee8e4390ba988b2b13e9ee59f976f2333715f1f
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/30040
Commit-Queue: Ewout van Bekkum <ewout@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
Reviewed-by: Wyatt Hepler <hepler@google.com>