Просмотр исходного кода

Merge pull request #104 from SummerGGift/723

【添加】rtthread.list_device() 功能和 os.mkfs() 功能
朱天龙 (Armink) 6 лет назад
Родитель
Сommit
03f4c29944

+ 4 - 0
docs/code-completion/rtthread.py

@@ -13,3 +13,7 @@ def is_preempt_thread() -> None:
 def stacks_analyze() -> None:
     """返回当前系统线程和栈使用信息。"""
     ...
+	
+def list_device() -> None:
+    """列出当前板卡上可使用的设备信息,包括设备名和设备类型。"""
+    ...

+ 4 - 0
docs/code-completion/uos.py

@@ -37,3 +37,7 @@ def stat(path : str) -> None:
 def sync() -> None:
     """同步所有的文件系统。"""
     ...
+	
+def mkfs(fs_type : str, dev_name : str) -> None:
+    """在指定的设备上创建 fs_type 类型的文件系统。example: os.mkfs("elm", "fs")"""
+    ...

+ 1 - 0
port/genhdr/qstrdefs.generated.h

@@ -763,4 +763,5 @@ QDEF(MP_QSTR_PERIODIC, (const byte*)"\x0a\x08" "PERIODIC")
 QDEF(MP_QSTR_period, (const byte*)"\xa0\x06" "period")
 QDEF(MP_QSTR_set_color, (const byte*)"\x25\x09" "set_color")
 QDEF(MP_QSTR_file_crc32, (const byte*)"\x6f\x0a" "file_crc32")
+QDEF(MP_QSTR_list_device, (const byte*)"\x20\x0b" "list_device")
 // This file was automatically generated by makeqstrdata.py

+ 1 - 1
port/modpyb.c

@@ -97,7 +97,7 @@ STATIC const mp_rom_map_elem_t pyb_module_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR_elapsed_micros), MP_ROM_PTR(&pyb_elapsed_micros_obj) },
     { MP_ROM_QSTR(MP_QSTR_delay), MP_ROM_PTR(&mp_utime_sleep_ms_obj) },
     { MP_ROM_QSTR(MP_QSTR_udelay), MP_ROM_PTR(&mp_utime_sleep_us_obj) },
-    { MP_ROM_QSTR(MP_QSTR_mount), MP_ROM_PTR(&mp_os_mount_obj) },
+//    { MP_ROM_QSTR(MP_QSTR_mount), MP_ROM_PTR(&mp_os_mount_obj) },
 
 //    { MP_ROM_QSTR(MP_QSTR_Timer), MP_ROM_PTR(&pyb_timer_type) },
 

+ 27 - 5
port/modrtthread.c

@@ -28,6 +28,7 @@
 #if MICROPY_PY_RTTHREAD
 
 #include <rtthread.h>
+#include <string.h>
 
 #include "py/runtime.h"
 
@@ -61,18 +62,39 @@ STATIC mp_obj_t mod_stacks_analyze(void) {
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_stacks_analyze_obj, mod_stacks_analyze);
 
-STATIC mp_obj_t mp_os_mount(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
-    //TODO
-    MP_RTT_NOT_IMPL_PRINT;
-    return mp_const_none;
+STATIC mp_obj_t mod_list_device(void) {
+    struct rt_device *device;
+    struct rt_list_node *node;
+    rt_ubase_t level;
+
+    struct rt_object_information *info = rt_object_get_information(RT_Object_Class_Device);
+    struct rt_list_node *list = &info->object_list;
+    mp_obj_t mp_list = mp_obj_new_list(0, NULL);
+
+    rt_enter_critical();
+
+    for (node = list->next; node != list; node = node->next)
+    {
+        device = (struct rt_device *)(rt_list_entry(node, struct rt_object, list));
+
+        mp_obj_tuple_t *t = mp_obj_new_tuple(2, NULL);
+        t->items[0] = mp_obj_new_str(device->parent.name, strlen((char *)device->parent.name));
+        t->items[1] = MP_OBJ_NEW_SMALL_INT((device->type <= RT_Device_Class_Unknown) ? device->type : RT_Device_Class_Unknown);
+        mp_obj_list_append(mp_list, MP_OBJ_FROM_PTR(t));
+    }
+
+    rt_exit_critical();
+
+    return mp_list;
 }
-MP_DEFINE_CONST_FUN_OBJ_KW(mp_os_mount_obj, 2, mp_os_mount);
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_list_device_obj, mod_list_device);
 
 STATIC const mp_rom_map_elem_t mp_module_rtthread_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_rtthread) },
     { MP_ROM_QSTR(MP_QSTR_is_preempt_thread), MP_ROM_PTR(&mod_is_preempt_thread_obj) },
     { MP_ROM_QSTR(MP_QSTR_current_tid), MP_ROM_PTR(&mod_current_tid_obj) },
     { MP_ROM_QSTR(MP_QSTR_stacks_analyze), MP_ROM_PTR(&mod_stacks_analyze_obj) },
+    { MP_ROM_QSTR(MP_QSTR_list_device), MP_ROM_PTR(&mod_list_device_obj) },
 };
 
 STATIC MP_DEFINE_CONST_DICT(mp_module_rtthread_globals, mp_module_rtthread_globals_table);

+ 1 - 0
port/moduos.c

@@ -124,6 +124,7 @@ STATIC const mp_rom_map_elem_t os_module_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR_dupterm), MP_ROM_PTR(&mp_uos_dupterm_obj) },
     { MP_ROM_QSTR(MP_QSTR_mount), MP_ROM_PTR(&mp_posix_mount_obj) },
     { MP_ROM_QSTR(MP_QSTR_umount), MP_ROM_PTR(&mp_posix_umount_obj) },
+    { MP_ROM_QSTR(MP_QSTR_mkfs), MP_ROM_PTR(&mp_posix_mkfs_obj) },
     //{ MP_ROM_QSTR(MP_QSTR_VfsFat), MP_ROM_PTR(&mp_fat_vfs_type) },
 };
 

+ 23 - 0
port/moduos_file.c

@@ -48,6 +48,29 @@ mp_obj_t mp_posix_umount(mp_obj_t mnt_in) {
 }
 MP_DEFINE_CONST_FUN_OBJ_1(mp_posix_umount_obj, mp_posix_umount);
 
+mp_obj_t mp_posix_mkfs(size_t n_args, const mp_obj_t *args)  {
+
+    int result = RT_EOK;
+    char *type = "elm"; /* use the default file system type as 'fatfs' */
+
+    if (n_args == 1)
+    {
+        result = dfs_mkfs(type, mp_obj_str_get_str(args[0]));
+    }else if (n_args == 2)
+    {
+        type = (char *)mp_obj_str_get_str(args[0]);
+        result = dfs_mkfs(type, mp_obj_str_get_str(args[1]));
+    }
+
+    if (result != RT_EOK)
+    {
+        mp_raise_ValueError("mkfs failed, please check filesystem type and device name.");
+    }
+
+    return mp_const_none;
+}
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_posix_mkfs_obj, 1, 2, mp_posix_mkfs);
+
 mp_obj_t mp_posix_chdir(mp_obj_t path_in) {
     const char *changepath = mp_obj_str_get_str(path_in);
     if (chdir(changepath) != 0) {

+ 2 - 1
port/moduos_file.h

@@ -53,6 +53,7 @@ mp_obj_t mp_posix_rmdir(uint n_args, const mp_obj_t *arg);
 mp_obj_t mp_posix_stat(mp_obj_t path_in);
 mp_obj_t mp_posix_statvfs(mp_obj_t path_in);
 mp_obj_t mp_posix_file_crc32(mp_obj_t path_in);
+mp_obj_t mp_posix_mkfs(size_t n_args, const mp_obj_t *args);
 
 MP_DECLARE_CONST_FUN_OBJ_KW(mp_posix_mount_obj);
 MP_DECLARE_CONST_FUN_OBJ_1(mp_posix_umount_obj);
@@ -67,5 +68,5 @@ MP_DECLARE_CONST_FUN_OBJ_VAR(mp_posix_rmdir_obj);
 MP_DECLARE_CONST_FUN_OBJ_1(mp_posix_stat_obj);
 MP_DECLARE_CONST_FUN_OBJ_1(mp_posix_statvfs_obj);
 MP_DECLARE_CONST_FUN_OBJ_1(mp_posix_file_crc32_obj);
-
+MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_posix_mkfs_obj);
 #endif // MICROPY_INCLUDED_PY_MODUOS_FILE_H