diff --git a/Documentation/pycardium/utime.rst b/Documentation/pycardium/utime.rst index 958c888cb39a36815d9ec552a68f4dd69b23b0ff..2d30d3d4d4ae4e3a65c34f25e245e684d2adc8c4 100644 --- a/Documentation/pycardium/utime.rst +++ b/Documentation/pycardium/utime.rst @@ -25,7 +25,18 @@ alarm. .. py:function:: utime.time() - Return the current timestamp in seconds since 2000-01-01 + Return the current timestamp in seconds since 2000-01-01 00:00. + +.. py:function:: utime.set_time(secs) + + Sets the time to ``secs`` seconds since 2000-01-01 00:00. + +.. py:function:: utime.set_unix_time(secs) + + Sets the time to ``secs`` seconds since 1970-01-01 00:00 UTC. + This corresponds a regular Unix timestamp which can be obtained + by running ``date +%s`` in a command line or ``int(time.time())`` + in Python. .. py:function:: utime.localtime([secs]) diff --git a/pycardium/modules/qstrdefs.h b/pycardium/modules/qstrdefs.h index 68b5a14e4c0cd715ced20573704e9c59826ec873..acf598f1b82c81e31722934c881d7d1a3217d9b3 100644 --- a/pycardium/modules/qstrdefs.h +++ b/pycardium/modules/qstrdefs.h @@ -47,6 +47,8 @@ Q(ticks_diff) Q(localtime) Q(mktime) Q(time) +Q(set_time) +Q(set_unix_time) /* vibra */ Q(vibra) diff --git a/pycardium/modules/utime.c b/pycardium/modules/utime.c index 15fa8167a1c5ab4f7886945fabacbd55cb83a8f9..13012d79d975a36e032c4f2f49985eba84b007ed 100644 --- a/pycardium/modules/utime.c +++ b/pycardium/modules/utime.c @@ -16,6 +16,23 @@ /* MicroPython has its epoch at 2000-01-01. Our RTC is in UTC */ #define EPOCH_OFFSET 946684800UL +static mp_obj_t time_set_time(mp_obj_t secs) +{ + uint64_t timestamp = + mp_obj_get_int(secs) * 1000ULL + EPOCH_OFFSET * 1000ULL; + epic_rtc_set_milliseconds(timestamp); + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_1(time_set_time_obj, time_set_time); + +static mp_obj_t time_set_unix_time(mp_obj_t secs) +{ + uint64_t timestamp = mp_obj_get_int(secs) * 1000ULL; + epic_rtc_set_milliseconds(timestamp); + return mp_const_none; +} +static MP_DEFINE_CONST_FUN_OBJ_1(time_set_unix_time_obj, time_set_unix_time); + static mp_obj_t time_time(void) { mp_int_t seconds; @@ -101,6 +118,9 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(time_alarm_obj, 1, 2, time_alarm); 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_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) }, { MP_ROM_QSTR(MP_QSTR_localtime), MP_ROM_PTR(&time_localtime_obj) }, { MP_ROM_QSTR(MP_QSTR_mktime), MP_ROM_PTR(&time_mktime_obj) }, { MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mp_utime_sleep_obj) },