From e0691c6d8dd4a80fe2a91ae90550fe0de3a4e3e2 Mon Sep 17 00:00:00 2001
From: Ferdinand Bachmann <theferdi265@gmail.com>
Date: Sat, 31 Aug 2019 00:36:53 +0200
Subject: [PATCH] pycardium/modules/utime.c: add bindings for monotonic time

---
 pycardium/modules/qstrdefs.h |  2 ++
 pycardium/modules/utime.c    | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h
index 68c40810e..ebb88ef35 100644
--- a/pycardium/modules/qstrdefs.h
+++ b/pycardium/modules/qstrdefs.h
@@ -47,6 +47,8 @@ Q(ticks_add)
 Q(ticks_diff)
 Q(localtime)
 Q(mktime)
+Q(monotonic)
+Q(monotonic_ms)
 Q(time)
 Q(time_ms)
 Q(set_time)
diff --git a/pycardium/modules/utime.c b/pycardium/modules/utime.c
index 88fe86b9a..e9dad9373 100644
--- a/pycardium/modules/utime.c
+++ b/pycardium/modules/utime.c
@@ -51,6 +51,22 @@ static mp_obj_t time_time_ms(void)
 }
 MP_DEFINE_CONST_FUN_OBJ_0(time_time_ms_obj, time_time_ms);
 
+static mp_obj_t time_monotonic(void)
+{
+	mp_int_t seconds;
+	seconds = epic_rtc_get_monotonic_seconds();
+	return mp_obj_new_int(seconds);
+}
+MP_DEFINE_CONST_FUN_OBJ_0(time_monotonic_obj, time_monotonic);
+
+static mp_obj_t time_monotonic_ms(void)
+{
+	uint64_t milliseconds;
+	milliseconds = epic_rtc_get_monotonic_milliseconds();
+	return mp_obj_new_int_from_ull(milliseconds);
+}
+MP_DEFINE_CONST_FUN_OBJ_0(time_monotonic_ms_obj, time_monotonic_ms);
+
 static mp_obj_t time_localtime(size_t n_args, const mp_obj_t *args)
 {
 	mp_int_t seconds;
@@ -130,6 +146,8 @@ static const mp_rom_map_elem_t time_module_globals_table[] = {
 	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_utime) },
 	{ MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&time_time_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_time_ms), MP_ROM_PTR(&time_time_ms_obj) },
+	{ MP_ROM_QSTR(MP_QSTR_monotonic), MP_ROM_PTR(&time_monotonic_obj) },
+	{ MP_ROM_QSTR(MP_QSTR_monotonic_ms), MP_ROM_PTR(&time_monotonic_ms_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_set_time), MP_ROM_PTR(&time_set_time_obj) },
 	{ MP_ROM_QSTR(MP_QSTR_set_unix_time),
 	  MP_ROM_PTR(&time_set_unix_time_obj) },
-- 
GitLab