Add espchrono and tickchrono implementations
This commit is contained in:
@ -7,6 +7,7 @@ set(headers
|
|||||||
src/lockingqueue.h
|
src/lockingqueue.h
|
||||||
src/recursivelockhelper.h
|
src/recursivelockhelper.h
|
||||||
src/taskutils.h
|
src/taskutils.h
|
||||||
|
src/tickchrono.h
|
||||||
src/wrappers/binary_semaphore.h
|
src/wrappers/binary_semaphore.h
|
||||||
src/wrappers/counting_semaphore.h
|
src/wrappers/counting_semaphore.h
|
||||||
src/wrappers/event_group.h
|
src/wrappers/event_group.h
|
||||||
@ -19,7 +20,8 @@ set(headers
|
|||||||
|
|
||||||
set(sources
|
set(sources
|
||||||
src/asyncudplistener.cpp
|
src/asyncudplistener.cpp
|
||||||
|
src/espchrono_impl.cpp
|
||||||
src/taskutils.cpp
|
src/taskutils.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
idf_component_register(INCLUDE_DIRS src SRCS ${headers} ${sources} REQUIRES freertos esp_system esp_http_client esp_websocket_client cpputils lwip)
|
idf_component_register(INCLUDE_DIRS src SRCS ${headers} ${sources} REQUIRES freertos esp_system esp_http_client esp_websocket_client lwip cpputils espchrono)
|
||||||
|
25
src/espchrono_impl.cpp
Normal file
25
src/espchrono_impl.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// local includes
|
||||||
|
#include "espchrono.h"
|
||||||
|
|
||||||
|
// system includes
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
// esp-idf inlcludes
|
||||||
|
#include <esp_timer.h>
|
||||||
|
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
|
// actual implementations used on the ESP32
|
||||||
|
|
||||||
|
auto espchrono::utc_clock::now() noexcept -> time_point
|
||||||
|
{
|
||||||
|
timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
seconds32 seconds{tv.tv_sec};
|
||||||
|
return time_point{seconds};
|
||||||
|
}
|
||||||
|
|
||||||
|
auto espchrono::millis_clock::now() noexcept -> time_point
|
||||||
|
{
|
||||||
|
return time_point{std::chrono::floor<duration>(std::chrono::microseconds{esp_timer_get_time()})};
|
||||||
|
}
|
20
src/tickchrono.h
Normal file
20
src/tickchrono.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// system includes
|
||||||
|
#include <chrono>
|
||||||
|
#include <ratio>
|
||||||
|
|
||||||
|
// esp-idf includes
|
||||||
|
#include <freertos/FreeRTOS.h>
|
||||||
|
#include <freertos/projdefs.h>
|
||||||
|
|
||||||
|
namespace espcpputils {
|
||||||
|
|
||||||
|
using ticks = std::chrono::duration<TickType_t, std::ratio<1, configTICK_RATE_HZ>>;
|
||||||
|
|
||||||
|
static_assert(pdMS_TO_TICKS(1000) == ticks(std::chrono::seconds(1)).count());
|
||||||
|
static_assert(pdMS_TO_TICKS(100) == std::chrono::floor<ticks>(std::chrono::milliseconds(100)).count());
|
||||||
|
static_assert(pdMS_TO_TICKS(10) == std::chrono::floor<ticks>(std::chrono::milliseconds(10)).count());
|
||||||
|
|
||||||
|
} // namespace espcpputils
|
||||||
|
|
Reference in New Issue
Block a user