Skip to content

Commit fbe1cd0

Browse files
committed
Augmenting the MillisFake module with an automatic mode where real system time is in play
1 parent abee6d1 commit fbe1cd0

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

test/include/MillisFake.h

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
extern "C" {
2020
#endif
2121

22+
void millis_autoOn();
23+
void millis_autoOff();
2224
void set_millis(unsigned long const val);
2325

2426
#ifdef __cplusplus

test/src/MillisFake.cpp

+35-1
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,56 @@
88

99
#include <MillisFake.h>
1010

11+
#include <chrono>
12+
13+
/**************************************************************************************
14+
* TYPEDEF
15+
**************************************************************************************/
16+
17+
enum class MillisFakeMode
18+
{
19+
Auto, Manual
20+
};
21+
1122
/**************************************************************************************
1223
* GLOBAL VARIABLES
1324
**************************************************************************************/
1425

1526
static unsigned long millis_val = 0;
27+
static MillisFakeMode millis_fake_mode = MillisFakeMode::Auto;
28+
static std::chrono::steady_clock::time_point const millis_begin = std::chrono::steady_clock::now();
1629

1730
/**************************************************************************************
1831
* FUNCTION DEFINITION
1932
**************************************************************************************/
2033

34+
void millis_autoOn()
35+
{
36+
millis_fake_mode = MillisFakeMode::Auto;
37+
}
38+
39+
void millis_autoOff()
40+
{
41+
millis_fake_mode = MillisFakeMode::Manual;
42+
}
43+
2144
void set_millis(unsigned long const val)
2245
{
46+
millis_autoOff();
2347
millis_val = val;
2448
}
2549

2650
unsigned long millis()
2751
{
28-
return millis_val;
52+
if (millis_fake_mode == MillisFakeMode::Manual)
53+
return millis_val;
54+
55+
if (millis_fake_mode == MillisFakeMode::Auto)
56+
{
57+
std::chrono::steady_clock::time_point millis_now = std::chrono::steady_clock::now();
58+
auto millis = std::chrono::duration_cast<std::chrono::microseconds>(millis_now - millis_begin).count();
59+
return static_cast<unsigned long>(millis);
60+
}
61+
62+
return 0;
2963
}

0 commit comments

Comments
 (0)