Skip to content

Commit b4e3565

Browse files
committed
Fixed modules os,time
1 parent 1530b88 commit b4e3565

File tree

6 files changed

+38
-89
lines changed

6 files changed

+38
-89
lines changed

frosted/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ ifeq ($(MICROPY_FORCE_32BIT),1)
119119
#CFLAGS_MOD += -DMICROPY_USE_READLINE=1
120120
#LIB_SRC_C_EXTRA += mp-readline/readline.c
121121
endif
122+
123+
CFLAGS_MOD += -DMICROPY_PY_OS=1
122124
ifeq ($(MICROPY_PY_TERMIOS),1)
123125
CFLAGS_MOD += -DMICROPY_PY_TERMIOS=1
124126
SRC_MOD += modtermios.c

frosted/modos.c

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
#include <stdlib.h>
3333
#include <string.h>
3434
#include <dirent.h>
35+
#include <fcntl.h>
36+
#include <unistd.h>
3537
#include "py/mpconfig.h"
3638

3739
#include "py/nlr.h"
@@ -211,6 +213,16 @@ STATIC mp_obj_t mod_os_ilistdir(size_t n_args, const mp_obj_t *args) {
211213
}
212214
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_os_ilistdir_obj, 0, 1, mod_os_ilistdir);
213215

216+
STATIC mp_obj_t os_getpid(void) {
217+
return mp_obj_new_int(getpid());
218+
}
219+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(os_getpid_obj, os_getpid);
220+
221+
STATIC mp_obj_t os_getppid(void) {
222+
return mp_obj_new_int(getppid());
223+
}
224+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(os_getppid_obj, os_getppid);
225+
214226
STATIC mp_obj_t mod_os_errno(size_t n_args, const mp_obj_t *args) {
215227
if (n_args == 0) {
216228
return MP_OBJ_NEW_SMALL_INT(errno);
@@ -221,6 +233,23 @@ STATIC mp_obj_t mod_os_errno(size_t n_args, const mp_obj_t *args) {
221233
}
222234
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_os_errno_obj, 0, 1, mod_os_errno);
223235

236+
STATIC mp_obj_t os_urandom(mp_obj_t num) {
237+
int rngfd;
238+
mp_int_t n = mp_obj_get_int(num);
239+
vstr_t vstr;
240+
vstr_init_len(&vstr, n);
241+
rngfd = open("/dev/random", O_RDONLY);
242+
if (rngfd < 0) {
243+
nlr_raise(mp_obj_new_exception_msg(&mp_type_BaseException, "no random device"));
244+
}
245+
if (read(rngfd, vstr.buf, n) != n) {
246+
close(rngfd);
247+
nlr_raise(mp_obj_new_exception_msg(&mp_type_BaseException, "Error retrieving random bytes"));
248+
}
249+
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
250+
}
251+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(os_urandom_obj, os_urandom);
252+
224253
STATIC const mp_rom_map_elem_t mp_module_os_globals_table[] = {
225254
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_uos) },
226255
{ MP_ROM_QSTR(MP_QSTR_errno), MP_ROM_PTR(&mod_os_errno_obj) },
@@ -233,17 +262,14 @@ STATIC const mp_rom_map_elem_t mp_module_os_globals_table[] = {
233262
{ MP_ROM_QSTR(MP_QSTR_getenv), MP_ROM_PTR(&mod_os_getenv_obj) },
234263
{ MP_ROM_QSTR(MP_QSTR_mkdir), MP_ROM_PTR(&mod_os_mkdir_obj) },
235264
{ MP_ROM_QSTR(MP_QSTR_ilistdir), MP_ROM_PTR(&mod_os_ilistdir_obj) },
265+
{ MP_ROM_QSTR(MP_QSTR_getpid), MP_ROM_PTR(&os_getpid_obj) },
266+
{ MP_ROM_QSTR(MP_QSTR_getppid), MP_ROM_PTR(&os_getppid_obj) },
267+
{ MP_OBJ_NEW_QSTR(MP_QSTR_urandom), (mp_obj_t)&os_urandom_obj },
236268
#if MICROPY_FSUSERMOUNT
237269
{ MP_ROM_QSTR(MP_QSTR_vfs_mount), MP_ROM_PTR(&fsuser_mount_obj) },
238270
{ MP_ROM_QSTR(MP_QSTR_vfs_umount), MP_ROM_PTR(&fsuser_umount_obj) },
239271
{ MP_ROM_QSTR(MP_QSTR_vfs_mkfs), MP_ROM_PTR(&fsuser_mkfs_obj) },
240272
#endif
241-
#if MICROPY_VFS_FAT
242-
{ MP_ROM_QSTR(MP_QSTR_VfsFat), MP_ROM_PTR(&mp_fat_vfs_type) },
243-
#endif
244-
#if MICROPY_PY_OS_DUPTERM
245-
{ MP_ROM_QSTR(MP_QSTR_dupterm), MP_ROM_PTR(&mp_uos_dupterm_obj) },
246-
#endif
247273
};
248274

249275
STATIC MP_DEFINE_CONST_DICT(mp_module_os_globals, mp_module_os_globals_table);

frosted/modtime.c

Lines changed: 1 addition & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
*/
2626

2727
#include "py/mpconfig.h"
28-
#if MICROPY_PY_UTIME
29-
3028
#include <unistd.h>
3129
#include <errno.h>
3230
#include <string.h>
@@ -39,90 +37,20 @@
3937
#include "py/mphal.h"
4038
#include "extmod/utime_mphal.h"
4139

42-
#ifdef _WIN32
4340
static inline int msec_sleep_tv(struct timeval *tv) {
44-
msec_sleep(tv->tv_sec * 1000.0 + tv->tv_usec / 1000.0);
41+
usleep(tv->tv_sec * 1000000 + tv->tv_usec);
4542
return 0;
4643
}
47-
#define sleep_select(a,b,c,d,e) msec_sleep_tv((e))
48-
#else
49-
#define sleep_select select
50-
#endif
51-
52-
// mingw32 defines CLOCKS_PER_SEC as ((clock_t)<somevalue>) but preprocessor does not handle casts
53-
#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
54-
#define MP_REMOVE_BRACKETSA(x)
55-
#define MP_REMOVE_BRACKETSB(x) MP_REMOVE_BRACKETSA x
56-
#define MP_REMOVE_BRACKETSC(x) MP_REMOVE_BRACKETSB x
57-
#define MP_CLOCKS_PER_SEC MP_REMOVE_BRACKETSC(CLOCKS_PER_SEC)
58-
#else
59-
#define MP_CLOCKS_PER_SEC CLOCKS_PER_SEC
60-
#endif
61-
62-
#if defined(MP_CLOCKS_PER_SEC)
63-
#define CLOCK_DIV (MP_CLOCKS_PER_SEC / 1000.0F)
64-
#else
65-
#error Unsupported clock() implementation
66-
#endif
6744

6845
STATIC mp_obj_t mod_time_time(void) {
69-
#if MICROPY_PY_BUILTINS_FLOAT
70-
struct timeval tv;
71-
gettimeofday(&tv, NULL);
72-
mp_float_t val = tv.tv_sec + (mp_float_t)tv.tv_usec / 1000000;
73-
return mp_obj_new_float(val);
74-
#else
7546
return mp_obj_new_int((mp_int_t)time(NULL));
76-
#endif
7747
}
7848
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_time_time_obj, mod_time_time);
7949

80-
// Note: this is deprecated since CPy3.3, but pystone still uses it.
81-
STATIC mp_obj_t mod_time_clock(void) {
82-
#if MICROPY_PY_BUILTINS_FLOAT
83-
// float cannot represent full range of int32 precisely, so we pre-divide
84-
// int to reduce resolution, and then actually do float division hoping
85-
// to preserve integer part resolution.
86-
return mp_obj_new_float((float)(clock() / 1000) / CLOCK_DIV);
87-
#else
88-
return mp_obj_new_int((mp_int_t)clock());
89-
#endif
90-
}
91-
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_time_clock_obj, mod_time_clock);
92-
9350
STATIC mp_obj_t mod_time_sleep(mp_obj_t arg) {
94-
#if MICROPY_PY_BUILTINS_FLOAT
95-
struct timeval tv;
96-
mp_float_t val = mp_obj_get_float(arg);
97-
double ipart;
98-
tv.tv_usec = round(modf(val, &ipart) * 1000000);
99-
tv.tv_sec = ipart;
100-
int res;
101-
while (1) {
102-
MP_THREAD_GIL_EXIT();
103-
res = sleep_select(0, NULL, NULL, NULL, &tv);
104-
MP_THREAD_GIL_ENTER();
105-
#if MICROPY_SELECT_REMAINING_TIME
106-
// TODO: This assumes Linux behavior of modifying tv to the remaining
107-
// time.
108-
if (res != -1 || errno != EINTR) {
109-
break;
110-
}
111-
if (MP_STATE_VM(mp_pending_exception) != MP_OBJ_NULL) {
112-
return mp_const_none;
113-
}
114-
//printf("select: EINTR: %ld:%ld\n", tv.tv_sec, tv.tv_usec);
115-
#else
116-
break;
117-
#endif
118-
}
119-
RAISE_ERRNO(res, errno);
120-
#else
121-
// TODO: Handle EINTR
12251
MP_THREAD_GIL_EXIT();
12352
sleep(mp_obj_get_int(arg));
12453
MP_THREAD_GIL_ENTER();
125-
#endif
12654
return mp_const_none;
12755
}
12856
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_time_sleep_obj, mod_time_sleep);
@@ -145,16 +73,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_time_strftime_obj, 1, 2, mod_time
14573

14674
STATIC const mp_rom_map_elem_t mp_module_time_globals_table[] = {
14775
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_utime) },
148-
{ MP_ROM_QSTR(MP_QSTR_clock), MP_ROM_PTR(&mod_time_clock_obj) },
14976
{ MP_ROM_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&mod_time_sleep_obj) },
150-
{ MP_ROM_QSTR(MP_QSTR_sleep_ms), MP_ROM_PTR(&mp_utime_sleep_ms_obj) },
151-
{ MP_ROM_QSTR(MP_QSTR_sleep_us), MP_ROM_PTR(&mp_utime_sleep_us_obj) },
15277
{ MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&mod_time_time_obj) },
153-
{ MP_ROM_QSTR(MP_QSTR_ticks_ms), MP_ROM_PTR(&mp_utime_ticks_ms_obj) },
154-
{ MP_ROM_QSTR(MP_QSTR_ticks_us), MP_ROM_PTR(&mp_utime_ticks_us_obj) },
155-
{ MP_ROM_QSTR(MP_QSTR_ticks_cpu), MP_ROM_PTR(&mp_utime_ticks_cpu_obj) },
156-
{ MP_ROM_QSTR(MP_QSTR_ticks_add), MP_ROM_PTR(&mp_utime_ticks_add_obj) },
157-
{ MP_ROM_QSTR(MP_QSTR_ticks_diff), MP_ROM_PTR(&mp_utime_ticks_diff_obj) },
15878
{ MP_ROM_QSTR(MP_QSTR_strftime), MP_ROM_PTR(&mod_time_strftime_obj) },
15979
};
16080

@@ -165,4 +85,3 @@ const mp_obj_module_t mp_module_time = {
16585
.globals = (mp_obj_dict_t*)&mp_module_time_globals,
16686
};
16787

168-
#endif // MICROPY_PY_UTIME

frosted/mpconfigport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
#define MICROPY_PY_SYS_MAXSIZE (0)
8383
#define MICROPY_PY_SYS_STDFILES (0)
8484
#define MICROPY_PY_CMATH (0)
85-
#define MICROPY_PY_UTIME (0)
85+
#define MICROPY_PY_UTIME (1)
8686
#define MICROPY_PY_UERRNO (1)
8787
#define MICROPY_PY_UCTYPES (1)
8888
#define MICROPY_PY_UZLIB (0)

frosted/scripts/os.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from uos import *

frosted/scripts/time.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from utime import *

0 commit comments

Comments
 (0)