30
30
#include <string.h>
31
31
#include <sys/time.h>
32
32
33
+ #include "py/runtime.h"
34
+ #include "lib/timeutils/timeutils.h"
33
35
#include "extmod/utime_mphal.h"
34
36
37
+ STATIC mp_obj_t time_localtime (size_t n_args , const mp_obj_t * args ) {
38
+ timeutils_struct_time_t tm ;
39
+ mp_int_t seconds ;
40
+ if (n_args == 0 || args [0 ] == mp_const_none ) {
41
+ struct timeval tv ;
42
+ gettimeofday (& tv , NULL );
43
+ seconds = tv .tv_sec ;
44
+ } else {
45
+ seconds = mp_obj_get_int (args [0 ]);
46
+ }
47
+ timeutils_seconds_since_2000_to_struct_time (seconds , & tm );
48
+ mp_obj_t tuple [8 ] = {
49
+ tuple [0 ] = mp_obj_new_int (tm .tm_year ),
50
+ tuple [1 ] = mp_obj_new_int (tm .tm_mon ),
51
+ tuple [2 ] = mp_obj_new_int (tm .tm_mday ),
52
+ tuple [3 ] = mp_obj_new_int (tm .tm_hour ),
53
+ tuple [4 ] = mp_obj_new_int (tm .tm_min ),
54
+ tuple [5 ] = mp_obj_new_int (tm .tm_sec ),
55
+ tuple [6 ] = mp_obj_new_int (tm .tm_wday ),
56
+ tuple [7 ] = mp_obj_new_int (tm .tm_yday ),
57
+ };
58
+ return mp_obj_new_tuple (8 , tuple );
59
+ }
60
+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (time_localtime_obj , 0 , 1 , time_localtime );
61
+
62
+ STATIC mp_obj_t time_mktime (mp_obj_t tuple ) {
63
+ size_t len ;
64
+ mp_obj_t * elem ;
65
+ mp_obj_get_array (tuple , & len , & elem );
66
+
67
+ // localtime generates a tuple of len 8. CPython uses 9, so we accept both.
68
+ if (len < 8 || len > 9 ) {
69
+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_TypeError , "mktime needs a tuple of length 8 or 9 (%d given)" , len ));
70
+ }
71
+
72
+ return mp_obj_new_int_from_uint (timeutils_mktime (mp_obj_get_int (elem [0 ]),
73
+ mp_obj_get_int (elem [1 ]), mp_obj_get_int (elem [2 ]), mp_obj_get_int (elem [3 ]),
74
+ mp_obj_get_int (elem [4 ]), mp_obj_get_int (elem [5 ])));
75
+ }
76
+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (time_mktime_obj , time_mktime );
77
+
35
78
STATIC mp_obj_t time_time (void ) {
36
79
struct timeval tv ;
37
80
gettimeofday (& tv , NULL );
@@ -42,6 +85,8 @@ MP_DEFINE_CONST_FUN_OBJ_0(time_time_obj, time_time);
42
85
STATIC const mp_rom_map_elem_t time_module_globals_table [] = {
43
86
{ MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_utime ) },
44
87
88
+ { MP_ROM_QSTR (MP_QSTR_localtime ), MP_ROM_PTR (& time_localtime_obj ) },
89
+ { MP_ROM_QSTR (MP_QSTR_mktime ), MP_ROM_PTR (& time_mktime_obj ) },
45
90
{ MP_ROM_QSTR (MP_QSTR_time ), MP_ROM_PTR (& time_time_obj ) },
46
91
{ MP_ROM_QSTR (MP_QSTR_sleep ), MP_ROM_PTR (& mp_utime_sleep_obj ) },
47
92
{ MP_ROM_QSTR (MP_QSTR_sleep_ms ), MP_ROM_PTR (& mp_utime_sleep_ms_obj ) },
0 commit comments