summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--extmod/modos.c15
-rw-r--r--ports/nrf/Makefile1
-rw-r--r--ports/nrf/modules/os/modos.c169
-rw-r--r--ports/nrf/mpconfigport.h17
4 files changed, 42 insertions, 160 deletions
diff --git a/extmod/modos.c b/extmod/modos.c
index 6df49d7f84..da14fd81f8 100644
--- a/extmod/modos.c
+++ b/extmod/modos.c
@@ -48,6 +48,13 @@
#include "extmod/vfs_posix.h"
#endif
+#if MICROPY_MBFS
+#if MICROPY_VFS
+#error "MICROPY_MBFS requires MICROPY_VFS to be disabled"
+#endif
+#include "ports/nrf/modules/os/microbitfs.h"
+#endif
+
#if MICROPY_PY_OS_UNAME
#include "genhdr/mpversion.h"
#endif
@@ -187,6 +194,14 @@ STATIC const mp_rom_map_elem_t os_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_VfsPosix), MP_ROM_PTR(&mp_type_vfs_posix) },
#endif
#endif
+
+ #if MICROPY_MBFS
+ // For special micro:bit filesystem only.
+ { MP_ROM_QSTR(MP_QSTR_listdir), MP_ROM_PTR(&os_mbfs_listdir_obj) },
+ { MP_ROM_QSTR(MP_QSTR_ilistdir), MP_ROM_PTR(&os_mbfs_ilistdir_obj) },
+ { MP_ROM_QSTR(MP_QSTR_stat), MP_ROM_PTR(&os_mbfs_stat_obj) },
+ { MP_ROM_QSTR(MP_QSTR_remove), MP_ROM_PTR(&os_mbfs_remove_obj) },
+ #endif
};
STATIC MP_DEFINE_CONST_DICT(os_module_globals, os_module_globals_table);
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 0a57471849..45e44aed5a 100644
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -324,7 +324,6 @@ DRIVERS_SRC_C += $(addprefix modules/,\
machine/timer.c \
machine/rtcounter.c \
machine/temp.c \
- os/modos.c \
os/microbitfs.c \
board/modboard.c \
board/led.c \
diff --git a/ports/nrf/modules/os/modos.c b/ports/nrf/modules/os/modos.c
index 6ff7200a12..31bf1b2920 100644
--- a/ports/nrf/modules/os/modos.c
+++ b/ports/nrf/modules/os/modos.c
@@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2013, 2014 Damien P. George
+ * Copyright (c) 2013-2023 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,84 +24,16 @@
* THE SOFTWARE.
*/
-#include <stdint.h>
-#include <string.h>
+// This file is never compiled standalone, it's included directly from
+// extmod/modos.c via MICROPY_PY_OS_INCLUDEFILE.
-#include "py/mpstate.h"
#include "py/runtime.h"
-#include "py/objtuple.h"
-#include "py/objstr.h"
-#include "lib/oofatfs/ff.h"
-#include "lib/oofatfs/diskio.h"
-#include "modules/os/microbitfs.h"
#include "extmod/modmachine.h"
-#include "extmod/vfs.h"
-#include "extmod/vfs_fat.h"
-#include "extmod/vfs_lfs.h"
-#include "genhdr/mpversion.h"
-
-#if MICROPY_HW_ENABLE_RNG
#include "drivers/rng.h"
-#endif // MICROPY_HW_ENABLE_RNG
-
-/// \module os - basic "operating system" services
-///
-/// The `os` module contains functions for filesystem access and `urandom`.
-///
-/// The filesystem has `/` as the root directory, and the available physical
-/// drives are accessible from here. They are currently:
-///
-/// /flash -- the internal flash filesystem
-/// /sd -- the SD card (if it exists)
-///
-/// On boot up, the current directory is `/flash` if no SD card is inserted,
-/// otherwise it is `/sd`.
-
-STATIC const qstr os_uname_info_fields[] = {
- MP_QSTR_sysname, MP_QSTR_nodename,
- MP_QSTR_release, MP_QSTR_version, MP_QSTR_machine
-};
-STATIC const MP_DEFINE_STR_OBJ(os_uname_info_sysname_obj, "pyboard");
-STATIC const MP_DEFINE_STR_OBJ(os_uname_info_nodename_obj, "pyboard");
-STATIC const MP_DEFINE_STR_OBJ(os_uname_info_release_obj, MICROPY_VERSION_STRING);
-STATIC const MP_DEFINE_STR_OBJ(os_uname_info_version_obj, MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE);
-STATIC const MP_DEFINE_STR_OBJ(os_uname_info_machine_obj, MICROPY_HW_BOARD_NAME " with " MICROPY_HW_MCU_NAME);
-STATIC MP_DEFINE_ATTRTUPLE(
- os_uname_info_obj,
- os_uname_info_fields,
- 5,
- (mp_obj_t)&os_uname_info_sysname_obj,
- (mp_obj_t)&os_uname_info_nodename_obj,
- (mp_obj_t)&os_uname_info_release_obj,
- (mp_obj_t)&os_uname_info_version_obj,
- (mp_obj_t)&os_uname_info_machine_obj
-);
-
-STATIC mp_obj_t os_uname(void) {
- return (mp_obj_t)&os_uname_info_obj;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_0(os_uname_obj, os_uname);
-
-#if MICROPY_VFS
-/// \function sync()
-/// Sync all filesystems.
-STATIC mp_obj_t os_sync(void) {
- #if MICROPY_VFS_FAT
- for (mp_vfs_mount_t *vfs = MP_STATE_VM(vfs_mount_table); vfs != NULL; vfs = vfs->next) {
- // this assumes that vfs->obj is fs_user_mount_t with block device functions
- disk_ioctl(MP_OBJ_TO_PTR(vfs->obj), CTRL_SYNC, NULL);
- }
- #endif
- return mp_const_none;
-}
-MP_DEFINE_CONST_FUN_OBJ_0(mod_os_sync_obj, os_sync);
-#endif
-#if MICROPY_HW_ENABLE_RNG
-/// \function urandom(n)
-/// Return a bytes object with n random bytes, generated by the hardware
-/// random number generator.
-STATIC mp_obj_t os_urandom(mp_obj_t num) {
+#if MICROPY_PY_OS_URANDOM
+// Return a bytes object with n random bytes, generated by the hardware random number generator.
+STATIC mp_obj_t mp_os_urandom(mp_obj_t num) {
mp_int_t n = mp_obj_get_int(num);
vstr_t vstr;
vstr_init_len(&vstr, n);
@@ -110,91 +42,14 @@ STATIC mp_obj_t os_urandom(mp_obj_t num) {
}
return mp_obj_new_bytes_from_vstr(&vstr);
}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(os_urandom_obj, os_urandom);
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_os_urandom_obj, mp_os_urandom);
#endif
-#if MICROPY_PY_MACHINE_UART
-// Get or set the UART object that the REPL is repeated on.
+#if MICROPY_PY_OS_DUPTERM
// TODO should accept any object with read/write methods.
-STATIC mp_obj_t os_dupterm(mp_uint_t n_args, const mp_obj_t *args) {
- if (n_args == 0) {
- if (MP_STATE_VM(dupterm_objs[0]) == MP_OBJ_NULL) {
- return mp_const_none;
- } else {
- return MP_STATE_VM(dupterm_objs[0]);
- }
- } else {
- if (args[0] == mp_const_none) {
- MP_STATE_VM(dupterm_objs[0]) = MP_OBJ_NULL;
- } else if (mp_obj_get_type(args[0]) == &machine_uart_type) {
- MP_STATE_VM(dupterm_objs[0]) = args[0];
- } else {
- mp_raise_ValueError(MP_ERROR_TEXT("need a UART object"));
- }
- return mp_const_none;
+void mp_os_dupterm_stream_detached_attached(mp_obj_t stream_detached, mp_obj_t stream_attached) {
+ if (!(stream_attached == mp_const_none || mp_obj_get_type(stream_attached) == &machine_uart_type)) {
+ mp_raise_ValueError(MP_ERROR_TEXT("need a UART object"));
}
}
-MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_os_dupterm_obj, 0, 1, os_dupterm);
-#endif // MICROPY_PY_MACHINE_UART
-
-STATIC const mp_rom_map_elem_t os_module_globals_table[] = {
- { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_os) },
-
- { MP_ROM_QSTR(MP_QSTR_uname), MP_ROM_PTR(&os_uname_obj) },
-
-#if MICROPY_VFS
- { MP_ROM_QSTR(MP_QSTR_chdir), MP_ROM_PTR(&mp_vfs_chdir_obj) },
- { MP_ROM_QSTR(MP_QSTR_getcwd), MP_ROM_PTR(&mp_vfs_getcwd_obj) },
- { MP_ROM_QSTR(MP_QSTR_ilistdir), MP_ROM_PTR(&mp_vfs_ilistdir_obj) },
- { MP_ROM_QSTR(MP_QSTR_listdir), MP_ROM_PTR(&mp_vfs_listdir_obj) },
- { MP_ROM_QSTR(MP_QSTR_mkdir), MP_ROM_PTR(&mp_vfs_mkdir_obj) },
- { MP_ROM_QSTR(MP_QSTR_remove), MP_ROM_PTR(&mp_vfs_remove_obj) },
- { MP_ROM_QSTR(MP_QSTR_rename), MP_ROM_PTR(&mp_vfs_rename_obj) },
- { MP_ROM_QSTR(MP_QSTR_rmdir), MP_ROM_PTR(&mp_vfs_rmdir_obj) },
- { MP_ROM_QSTR(MP_QSTR_stat), MP_ROM_PTR(&mp_vfs_stat_obj) },
- { MP_ROM_QSTR(MP_QSTR_statvfs), MP_ROM_PTR(&mp_vfs_statvfs_obj) },
- { MP_ROM_QSTR(MP_QSTR_unlink), MP_ROM_PTR(&mp_vfs_remove_obj) }, // unlink aliases to remove
-
- { MP_ROM_QSTR(MP_QSTR_sync), MP_ROM_PTR(&mod_os_sync_obj) },
-
-#elif MICROPY_MBFS
- { MP_ROM_QSTR(MP_QSTR_listdir), MP_ROM_PTR(&os_mbfs_listdir_obj) },
- { MP_ROM_QSTR(MP_QSTR_ilistdir), MP_ROM_PTR(&os_mbfs_ilistdir_obj) }, // uses ~136 bytes
- { MP_ROM_QSTR(MP_QSTR_stat), MP_ROM_PTR(&os_mbfs_stat_obj) }, // uses ~228 bytes
- { MP_ROM_QSTR(MP_QSTR_remove), MP_ROM_PTR(&os_mbfs_remove_obj) },
-#endif
-
- /// \constant sep - separation character used in paths
- { MP_ROM_QSTR(MP_QSTR_sep), MP_ROM_QSTR(MP_QSTR__slash_) },
-
-#if MICROPY_HW_ENABLE_RNG
- { MP_ROM_QSTR(MP_QSTR_urandom), MP_ROM_PTR(&os_urandom_obj) },
-#endif
-
- // these are MicroPython extensions
-#if MICROPY_PY_MACHINE_UART
- { MP_ROM_QSTR(MP_QSTR_dupterm), MP_ROM_PTR(&mod_os_dupterm_obj) },
-#endif
-#if MICROPY_VFS
- { MP_ROM_QSTR(MP_QSTR_mount), MP_ROM_PTR(&mp_vfs_mount_obj) },
- { MP_ROM_QSTR(MP_QSTR_umount), MP_ROM_PTR(&mp_vfs_umount_obj) },
- #if MICROPY_VFS_FAT
- { MP_ROM_QSTR(MP_QSTR_VfsFat), MP_ROM_PTR(&mp_fat_vfs_type) },
- #endif
- #if MICROPY_VFS_LFS1
- { MP_ROM_QSTR(MP_QSTR_VfsLfs1), MP_ROM_PTR(&mp_type_vfs_lfs1) },
- #endif
- #if MICROPY_VFS_LFS2
- { MP_ROM_QSTR(MP_QSTR_VfsLfs2), MP_ROM_PTR(&mp_type_vfs_lfs2) },
- #endif
-#endif
-};
-
-STATIC MP_DEFINE_CONST_DICT(os_module_globals, os_module_globals_table);
-
-const mp_obj_module_t mp_module_os = {
- .base = { &mp_type_module },
- .globals = (mp_obj_dict_t*)&os_module_globals,
-};
-
-MP_REGISTER_EXTENSIBLE_MODULE(MP_QSTR_os, mp_module_os);
+#endif // MICROPY_PY_OS_DUPTERM
diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h
index 85db263648..3ab1e0814f 100644
--- a/ports/nrf/mpconfigport.h
+++ b/ports/nrf/mpconfigport.h
@@ -76,6 +76,10 @@
#define MICROPY_PY_ARRAY_SLICE_ASSIGN (CORE_FEAT)
#endif
+#ifndef MICROPY_PY_SYS_PLATFORM
+#define MICROPY_PY_SYS_PLATFORM "nrf"
+#endif
+
#ifndef MICROPY_PY_SYS_STDFILES
#define MICROPY_PY_SYS_STDFILES (CORE_FEAT)
#endif
@@ -92,6 +96,10 @@
#define MICROPY_HW_ENABLE_INTERNAL_FLASH_STORAGE (CORE_FEAT)
#endif
+#ifndef MICROPY_HW_ENABLE_RNG
+#define MICROPY_HW_ENABLE_RNG (0)
+#endif
+
#ifndef MICROPY_EMIT_THUMB
#define MICROPY_EMIT_THUMB (EXTRA_FEAT)
#endif
@@ -133,9 +141,14 @@
#define MICROPY_FATFS_MAX_SS (4096)
#endif
-// Use port specific os module rather than extmod variant.
-#define MICROPY_PY_OS (0)
+#define MICROPY_PY_OS (1)
+#define MICROPY_PY_OS_INCLUDEFILE "ports/nrf/modules/os/modos.c"
#define MICROPY_PY_OS_DUPTERM (1)
+#define MICROPY_PY_OS_DUPTERM_STREAM_DETACHED_ATTACHED (1)
+#define MICROPY_PY_OS_SEP (1)
+#define MICROPY_PY_OS_SYNC (MICROPY_VFS)
+#define MICROPY_PY_OS_UNAME (1)
+#define MICROPY_PY_OS_URANDOM (MICROPY_HW_ENABLE_RNG)
#define MICROPY_STREAMS_NON_BLOCK (1)
#define MICROPY_CAN_OVERRIDE_BUILTINS (1)