2021-06-30 18:39:29 +02:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
|
2022-10-11 16:31:57 +02:00
|
|
|
*
|
2021-06-30 18:39:29 +02:00
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <queue>
|
|
|
|
#include <mutex>
|
|
|
|
#include <condition_variable>
|
|
|
|
#include <memory>
|
|
|
|
#include <thread>
|
|
|
|
#include <atomic>
|
|
|
|
|
|
|
|
typedef void (*cb_t)(void *arg);
|
|
|
|
|
|
|
|
class TimerTaskMock {
|
|
|
|
public:
|
2023-01-13 20:32:07 +01:00
|
|
|
TimerTaskMock(cb_t cb): cb(cb), active(false), ms(INT32_MAX) {}
|
2021-06-30 18:39:29 +02:00
|
|
|
~TimerTaskMock(void)
|
|
|
|
{
|
|
|
|
active = false;
|
|
|
|
t.join();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetTimeout(uint32_t m)
|
|
|
|
{
|
|
|
|
ms = m;
|
|
|
|
active = true;
|
2023-01-13 20:32:07 +01:00
|
|
|
t = std::thread(run_static, this);
|
2021-06-30 18:39:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
static void run_static(TimerTaskMock *timer)
|
|
|
|
{
|
|
|
|
timer->run();
|
|
|
|
}
|
|
|
|
|
|
|
|
void run(void)
|
|
|
|
{
|
|
|
|
while (!active.load()) {
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
|
|
|
}
|
|
|
|
|
|
|
|
while (active.load()) {
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(ms));
|
|
|
|
cb(nullptr);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
cb_t cb;
|
|
|
|
std::thread t;
|
|
|
|
std::atomic<bool> active;
|
|
|
|
uint32_t ms;
|
|
|
|
|
|
|
|
};
|