From 2dce8a1343cc4fb7a8cedeb5dbc781333b2d9520 Mon Sep 17 00:00:00 2001 From: M4x1m3 Date: Tue, 21 Jul 2020 20:50:37 +0200 Subject: [PATCH] [mpy/os] uname --- python/Makefile | 3 ++- python/port/genhdr/qstrdefs.in.h | 7 +++++ python/port/mod/os/modos.cpp | 40 +++++++++++++++++++++++++++++ python/port/mod/os/modos.h | 6 +++++ python/port/mod/os/modos_table.c | 8 ++++++ python/port/mod/os/uname_result.cpp | 18 +++++++++++++ python/port/mod/os/uname_result.h | 0 7 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 python/port/mod/os/uname_result.cpp create mode 100644 python/port/mod/os/uname_result.h diff --git a/python/Makefile b/python/Makefile index 2792fc9dc..6957ed586 100644 --- a/python/Makefile +++ b/python/Makefile @@ -1,6 +1,7 @@ SFLAGS += -Ipython/src SFLAGS += -Ipython/port SFLAGS += -I$(BUILD_DIR)/python/port +SFLAGS += -DEPSILON_VERSION="$(EPSILON_VERSION)" -DOMEGA_VERSION="$(OMEGA_VERSION)" # How to maintain this Makefile # - Copy PY_CORE_O_BASENAME from py.mk into py_src @@ -148,7 +149,7 @@ port_src += $(addprefix python/port/,\ mod/matplotlib/pyplot/plot_view.cpp \ mod/time/modtime.c \ mod/time/modtime_table.c \ - mod/os/modos.c \ + mod/os/modos.cpp \ mod/os/modos_table.c \ mod/turtle/modturtle.cpp \ mod/turtle/modturtle_table.c \ diff --git a/python/port/genhdr/qstrdefs.in.h b/python/port/genhdr/qstrdefs.in.h index 1c438a66c..42a97091b 100644 --- a/python/port/genhdr/qstrdefs.in.h +++ b/python/port/genhdr/qstrdefs.in.h @@ -526,5 +526,12 @@ Q(SEEK_SET) Q(SEEK_CUR) Q(SEEK_END) +// os QSTRs Q(os) +Q(uname) +Q(sysname) +Q(nodename) +Q(release) +Q(version) +Q(machine) diff --git a/python/port/mod/os/modos.cpp b/python/port/mod/os/modos.cpp index 9ef8d03d1..687de5e86 100644 --- a/python/port/mod/os/modos.cpp +++ b/python/port/mod/os/modos.cpp @@ -1,3 +1,43 @@ extern "C" { #include "modos.h" +#include +#include } + +#ifndef OMEGA_VERSION +#error This file expects OMEGA_VERSION to be defined +#endif + +#ifndef EPSILON_VERSION +#error This file expects EPSILON_VERSION to be defined +#endif + + +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_sysname_obj, "NumWorks"); +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_nodename_obj, ""); + +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_release_obj, "O" MP_STRINGIFY(OMEGA_VERSION) "E-" MP_STRINGIFY(EPSILON_VERSION)); +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_version_obj, MICROPY_VERSION_STRING); + +#if defined(DEVICE_N0110) +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_machine_obj, "NumWorks N0110"); +#elif defined(DEVICE_N0100) +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_machine_obj, "NumWorks N0100"); +#else +STATIC const MP_DEFINE_STR_OBJ(modos_uname_info_machine_obj, "NumWorks Simulator"); +#endif + +STATIC const mp_rom_map_elem_t modos_uname_info_table[] = { + { MP_ROM_QSTR(MP_QSTR_sysname), &modos_uname_info_sysname_obj }, + { MP_ROM_QSTR(MP_QSTR_nodename), &modos_uname_info_nodename_obj }, + { MP_ROM_QSTR(MP_QSTR_release), &modos_uname_info_release_obj }, + { MP_ROM_QSTR(MP_QSTR_version), &modos_uname_info_version_obj }, + { MP_ROM_QSTR(MP_QSTR_machine), &modos_uname_info_machine_obj }, +}; + +STATIC MP_DEFINE_CONST_DICT(modos_uname_info_obj, modos_uname_info_table); + +mp_obj_t modos_uname(void) { + return (mp_obj_t)&modos_uname_info_obj; +} + diff --git a/python/port/mod/os/modos.h b/python/port/mod/os/modos.h index 023ac9eaa..0005f561d 100644 --- a/python/port/mod/os/modos.h +++ b/python/port/mod/os/modos.h @@ -1 +1,7 @@ #include +/* +mp_obj_t modos_sleep(mp_obj_t seconds_o); +mp_obj_t modos_monotonic(); +*/ + +mp_obj_t modos_uname(); diff --git a/python/port/mod/os/modos_table.c b/python/port/mod/os/modos_table.c index 1bbe09b4f..c9f1a8ed7 100644 --- a/python/port/mod/os/modos_table.c +++ b/python/port/mod/os/modos_table.c @@ -1,7 +1,15 @@ #include "modos.h" +/* +MP_DEFINE_CONST_FUN_OBJ_1(modos_sleep_obj, modos_sleep); +MP_DEFINE_CONST_FUN_OBJ_0(modos_monotonic_obj, modos_monotonic); +*/ + +MP_DEFINE_CONST_FUN_OBJ_0(modos_uname_obj, modos_uname); + STATIC const mp_rom_map_elem_t modos_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_os) }, + { MP_ROM_QSTR(MP_QSTR_uname), &modos_uname_obj}, }; STATIC MP_DEFINE_CONST_DICT(modos_module_globals, modos_module_globals_table); diff --git a/python/port/mod/os/uname_result.cpp b/python/port/mod/os/uname_result.cpp new file mode 100644 index 000000000..616f5dacc --- /dev/null +++ b/python/port/mod/os/uname_result.cpp @@ -0,0 +1,18 @@ +extern "C" { +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "uname_result.h" +} + +STATIC void uname_result_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind); +STATIC mp_obj_t uname_result_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args); +STATIC void uname_result_attr(mp_obj_t self_in, qstr attribute, mp_obj_t *destination); + + diff --git a/python/port/mod/os/uname_result.h b/python/port/mod/os/uname_result.h new file mode 100644 index 000000000..e69de29bb