-
-
Notifications
You must be signed in to change notification settings - Fork 130
/
Copy pathMillisFake.cpp
65 lines (51 loc) · 1.78 KB
/
MillisFake.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
* Copyright (c) 2020 Arduino. All rights reserved.
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
/**************************************************************************************
* INCLUDE
**************************************************************************************/
#include <MillisFake.h>
#include <chrono>
/**************************************************************************************
* TYPEDEF
**************************************************************************************/
enum class MillisFakeMode
{
Auto, Manual
};
/**************************************************************************************
* GLOBAL VARIABLES
**************************************************************************************/
static unsigned long millis_val = 0;
static MillisFakeMode millis_fake_mode = MillisFakeMode::Auto;
static std::chrono::steady_clock::time_point const millis_begin = std::chrono::steady_clock::now();
/**************************************************************************************
* FUNCTION DEFINITION
**************************************************************************************/
void millis_autoOn()
{
millis_fake_mode = MillisFakeMode::Auto;
}
void millis_autoOff()
{
millis_fake_mode = MillisFakeMode::Manual;
}
void set_millis(unsigned long const val)
{
millis_autoOff();
millis_val = val;
}
unsigned long millis()
{
if (millis_fake_mode == MillisFakeMode::Manual)
return millis_val;
if (millis_fake_mode == MillisFakeMode::Auto)
{
std::chrono::steady_clock::time_point millis_now = std::chrono::steady_clock::now();
auto millis = std::chrono::duration_cast<std::chrono::microseconds>(millis_now - millis_begin).count();
return static_cast<unsigned long>(millis);
}
return 0;
}