1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "aos/kernel.h"
5 #include "py/builtin.h"
6 #include "py/mperrno.h"
7 #include "py/obj.h"
8 #include "py/runtime.h"
9 #include "genhdr/mpversion.h"
10 #include "py/mpconfig.h"
11 #include "py/mphal.h"
12 #include "py/objstr.h"
13 #include "py/objtuple.h"
14 #include "ulog/ulog.h"
15
16 #include "aos_system.h"
17 #include "amp_utils.h"
18
19 #define LOG_TAG "MOD_SYSTEM"
20
21
22 STATIC const qstr os_uname_info_fields[] = { MP_QSTR_sysname, MP_QSTR_nodename,
23 MP_QSTR_release, MP_QSTR_version,
24 MP_QSTR_machine };
25 STATIC const MP_DEFINE_STR_OBJ(os_uname_info_sysname_obj,
26 MICROPY_PY_SYS_PLATFORM);
27 STATIC const MP_DEFINE_STR_OBJ(os_uname_info_nodename_obj, MICROPY_PY_SYS_NODE);
28 STATIC const MP_DEFINE_STR_OBJ(os_uname_info_release_obj,
29 MICROPY_VERSION_STRING);
30 STATIC const MP_DEFINE_STR_OBJ(os_uname_info_version_obj,
31 MICROPY_GIT_TAG " on " MICROPY_BUILD_DATE);
32 STATIC const MP_DEFINE_STR_OBJ(os_uname_info_machine_obj, MICROPY_HW_BOARD_NAME
33 " with " MICROPY_HW_MCU_NAME);
34
35 STATIC MP_DEFINE_ATTRTUPLE(os_uname_info_obj, os_uname_info_fields, 5,
36 (mp_obj_t)&os_uname_info_sysname_obj,
37 (mp_obj_t)&os_uname_info_nodename_obj,
38 (mp_obj_t)&os_uname_info_release_obj,
39 (mp_obj_t)&os_uname_info_version_obj,
40 (mp_obj_t)&os_uname_info_machine_obj);
41
obj_getInfo()42 STATIC mp_obj_t obj_getInfo()
43 {
44 return (mp_obj_t)&os_uname_info_obj;
45 }
46 MP_DEFINE_CONST_FUN_OBJ_0(native_get_system_info, obj_getInfo);
47
obj_sleep(void)48 STATIC mp_obj_t obj_sleep(void)
49 {
50 //aos_system_sleep();
51 return mp_const_none;
52 }
53 MP_DEFINE_CONST_FUN_OBJ_0(native_sleep_system, obj_sleep);
54
55
obj_reboot(void)56 STATIC mp_obj_t obj_reboot(void)
57 {
58 aos_reboot();
59 return mp_const_none;
60 }
61 MP_DEFINE_CONST_FUN_OBJ_0(native_reset_system, obj_reboot);
62
obj_getUptime()63 STATIC mp_obj_t obj_getUptime()
64 {
65 uint64_t begin_ms = aos_now_ms();
66 return MP_ROM_INT(begin_ms);
67 }
68 STATIC MP_DEFINE_CONST_FUN_OBJ_0(native_get_system_uptime, obj_getUptime);
69
obj_getMemory()70 STATIC mp_obj_t obj_getMemory()
71 {
72 int32_t ret = -1;
73 amp_heap_info_t heap_info;
74
75 ret = amp_heap_memory_info(&heap_info);
76 if (ret != 0) {
77 LOGE(LOG_TAG, "get heap memory failed");
78 return mp_const_none;
79 }
80 mp_obj_t dict = mp_obj_new_dict(3);
81 mp_obj_dict_store(dict, mp_obj_new_str("total",strlen("total")), mp_obj_new_int(heap_info.heap_total));
82 mp_obj_dict_store(dict, mp_obj_new_str("used",strlen("used")), mp_obj_new_int(heap_info.heap_used));
83 mp_obj_dict_store(dict, mp_obj_new_str("free",strlen("free")), mp_obj_new_int(heap_info.heap_free));
84 return dict;
85 }
86 STATIC MP_DEFINE_CONST_FUN_OBJ_0(native_get_memory_info,obj_getMemory);
87
88
89 STATIC const mp_rom_map_elem_t system_module_globals_table[] = {
90 { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_system) },
91 { MP_OBJ_NEW_QSTR(MP_QSTR_getInfo), MP_ROM_PTR(&native_get_system_info) },
92 { MP_OBJ_NEW_QSTR(MP_QSTR_sleep), MP_ROM_PTR(&native_sleep_system) },
93 { MP_OBJ_NEW_QSTR(MP_QSTR_reboot), MP_ROM_PTR(&native_reset_system) },
94 { MP_OBJ_NEW_QSTR(MP_QSTR_getUptime), MP_ROM_PTR(&native_get_system_uptime) },
95 { MP_OBJ_NEW_QSTR(MP_QSTR_getMemory), MP_ROM_PTR(&native_get_memory_info) },
96 };
97
98 STATIC MP_DEFINE_CONST_DICT(system_module_globals, system_module_globals_table);
99
100 const mp_obj_module_t system_module = {
101 .base = { &mp_type_module },
102 .globals = (mp_obj_dict_t *)&system_module_globals,
103 };