Skip to content
This repository was archived by the owner on Apr 25, 2021. It is now read-only.

Commit b444df3

Browse files
committed
OpenPie internal/opos 파이썬 모듈 업데이트 및 추가 API 지원
1 parent 1d7508e commit b444df3

File tree

8 files changed

+160
-61
lines changed

8 files changed

+160
-61
lines changed

src/eeprom.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33

44
def main():
55
globals().pop('main')
6-
from ucomponent import invoke, components
6+
from ucomponent import invoke, get_list as get_components
77
from ucomputer import crash, get_computer_address
88

99
def component(t):
10-
seq = components(t)
10+
seq = get_components(t)
1111
return seq[0] if seq else None
1212

1313
def check_bootable(filesystems, address):
1414
return address in filesystems and invoke(address, 'exists', '/init.py')
1515

1616
eeprom = __path__
17-
filesystems = components("filesystem")
17+
filesystems = get_components("filesystem")
1818

1919
address = invoke(eeprom, 'getData').decode()
2020
if not check_bootable(filesystems, address):

src/moducomponent.c

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
mp_obj_t wrap_result(int code);
66

77

8-
STATIC mp_obj_t ucomponent_components(size_t n_args, const mp_obj_t *args) {
8+
STATIC mp_obj_t ucomponent_get_list(size_t n_args, const mp_obj_t *args) {
99
if (n_args == 0) {
1010
return wrap_result(__syscall2(SYS_COMPONENT_LIST, 0, 0));
1111
} else {
@@ -15,25 +15,43 @@ STATIC mp_obj_t ucomponent_components(size_t n_args, const mp_obj_t *args) {
1515
}
1616
}
1717

18-
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ucomponent_components_obj, 0, 1, ucomponent_components);
18+
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ucomponent_get_list_obj, 0, 1, ucomponent_get_list);
1919

2020

21-
STATIC mp_obj_t ucomponent_methods(mp_obj_t address_obj) {
21+
STATIC mp_obj_t ucomponent_get_type(mp_obj_t address_obj) {
22+
mp_obj_t items[] = {address_obj};
23+
msgpack_result_t result = msgpack_args_dumps(1, items);
24+
return wrap_result(__syscall2(SYS_COMPONENT_TYPE, (int)result.data, (int)result.size));
25+
}
26+
27+
MP_DEFINE_CONST_FUN_OBJ_1(ucomponent_get_type_obj, ucomponent_get_type);
28+
29+
30+
STATIC mp_obj_t ucomponent_get_slot(mp_obj_t address_obj) {
31+
mp_obj_t items[] = {address_obj};
32+
msgpack_result_t result = msgpack_args_dumps(1, items);
33+
return wrap_result(__syscall2(SYS_COMPONENT_SLOT, (int)result.data, (int)result.size));
34+
}
35+
36+
MP_DEFINE_CONST_FUN_OBJ_1(ucomponent_get_slot_obj, ucomponent_get_slot);
37+
38+
39+
STATIC mp_obj_t ucomponent_get_methods(mp_obj_t address_obj) {
2240
mp_obj_t items[] = {address_obj};
2341
msgpack_result_t result = msgpack_args_dumps(1, items);
2442
return wrap_result(__syscall2(SYS_COMPONENT_METHODS, (int)result.data, (int)result.size));
2543
}
2644

27-
MP_DEFINE_CONST_FUN_OBJ_1(ucomponent_methods_obj, ucomponent_methods);
45+
MP_DEFINE_CONST_FUN_OBJ_1(ucomponent_get_methods_obj, ucomponent_get_methods);
2846

2947

30-
STATIC mp_obj_t ucomponent_doc(mp_obj_t address_obj, mp_obj_t method_obj) {
48+
STATIC mp_obj_t ucomponent_get_doc(mp_obj_t address_obj, mp_obj_t method_obj) {
3149
mp_obj_t items[] = {address_obj, method_obj};
3250
msgpack_result_t result = msgpack_args_dumps(2, items);
3351
return wrap_result(__syscall2(SYS_COMPONENT_DOC, (int)result.data, (int)result.size));
3452
}
3553

36-
MP_DEFINE_CONST_FUN_OBJ_2(ucomponent_doc_obj, ucomponent_doc);
54+
MP_DEFINE_CONST_FUN_OBJ_2(ucomponent_get_doc_obj, ucomponent_get_doc);
3755

3856

3957
STATIC mp_obj_t ucomponent_invoke(size_t n_args, const mp_obj_t *args) {
@@ -60,9 +78,11 @@ STATIC const mp_rom_map_elem_t ucomponent_module_globals_table[] = {
6078
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_ucomponent)},
6179

6280
// components
63-
{MP_ROM_QSTR(MP_QSTR_components), MP_ROM_PTR(&ucomponent_components_obj)},
64-
{MP_ROM_QSTR(MP_QSTR_methods), MP_ROM_PTR(&ucomponent_methods_obj)},
65-
{MP_ROM_QSTR(MP_QSTR_doc), MP_ROM_PTR(&ucomponent_doc_obj)},
81+
{MP_ROM_QSTR(MP_QSTR_get_list), MP_ROM_PTR(&ucomponent_get_list_obj)},
82+
{MP_ROM_QSTR(MP_QSTR_get_type), MP_ROM_PTR(&ucomponent_get_type_obj)},
83+
{MP_ROM_QSTR(MP_QSTR_get_slot), MP_ROM_PTR(&ucomponent_get_slot_obj)},
84+
{MP_ROM_QSTR(MP_QSTR_get_methods), MP_ROM_PTR(&ucomponent_get_methods_obj)},
85+
{MP_ROM_QSTR(MP_QSTR_get_doc), MP_ROM_PTR(&ucomponent_get_doc_obj)},
6686

6787
// invoke
6888
{MP_ROM_QSTR(MP_QSTR_invoke), MP_ROM_PTR(&ucomponent_invoke_obj)},

src/moducomputer.c

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,24 +43,17 @@ MP_DEFINE_CONST_FUN_OBJ_VAR(ucomputer_push_signal_obj, 1, ucomputer_push_signal)
4343

4444
STATIC mp_obj_t ucomputer_pop_signal(mp_obj_t ticks_obj) {
4545
mp_int_t ticks = mp_obj_get_int(ticks_obj);
46-
return wrap_result(__syscall1(SYS_SIGNAL_REQUEST, (int) ticks));
46+
return wrap_result(__syscall1(SYS_SIGNAL_POP, (int) ticks));
4747
}
4848

4949
MP_DEFINE_CONST_FUN_OBJ_1(ucomputer_pop_signal_obj, ucomputer_pop_signal);
5050

5151

52-
STATIC mp_obj_t ucomputer_get_cost_per_tick() {
53-
return wrap_result(__syscall0(SYS_COMPUTER_GET_COST_PER_TICK));
54-
}
55-
56-
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_cost_per_tick_obj, ucomputer_get_cost_per_tick);
57-
58-
59-
STATIC mp_obj_t ucomputer_last_error() {
52+
STATIC mp_obj_t ucomputer_get_last_error() {
6053
return wrap_result(__syscall0(SYS_COMPUTER_LAST_ERROR));
6154
}
6255

63-
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_last_error_obj, ucomputer_last_error);
56+
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_last_error_obj, ucomputer_get_last_error);
6457

6558

6659
STATIC mp_obj_t ucomputer_beep(size_t n_args, const mp_obj_t *args) {
@@ -87,11 +80,11 @@ STATIC mp_obj_t ucomputer_beep(size_t n_args, const mp_obj_t *args) {
8780
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(ucomputer_beep_obj, 1, 2, ucomputer_beep);
8881

8982

90-
STATIC mp_obj_t ucomputer_users() {
83+
STATIC mp_obj_t ucomputer_get_users() {
9184
return wrap_result(__syscall0(SYS_COMPUTER_USERS));
9285
}
9386

94-
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_users_obj, ucomputer_users);
87+
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_users_obj, ucomputer_get_users);
9588

9689

9790
STATIC mp_obj_t ucomputer_add_user(mp_obj_t user_obj) {
@@ -128,6 +121,44 @@ STATIC mp_obj_t ucomputer_get_tmp_address() {
128121
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_tmp_address_obj, ucomputer_get_tmp_address);
129122

130123

124+
STATIC mp_obj_t ucomputer_get_energy() {
125+
return wrap_result(__syscall0(SYS_COMPUTER_ENERGY));
126+
}
127+
128+
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_energy_obj, ucomputer_get_energy);
129+
130+
131+
STATIC mp_obj_t ucomputer_get_max_energy() {
132+
return wrap_result(__syscall0(SYS_COMPUTER_MAX_ENERGY));
133+
}
134+
135+
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_max_energy_obj, ucomputer_get_max_energy);
136+
137+
138+
STATIC mp_obj_t ucomputer_get_architectures() {
139+
return wrap_result(__syscall0(SYS_COMPUTER_GET_ARCHITECTURES));
140+
}
141+
142+
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_architectures_obj, ucomputer_get_architectures);
143+
144+
145+
STATIC mp_obj_t ucomputer_get_architecture() {
146+
return wrap_result(__syscall0(SYS_COMPUTER_GET_ARCHITECTURE));
147+
}
148+
149+
MP_DEFINE_CONST_FUN_OBJ_0(ucomputer_get_architecture_obj, ucomputer_get_architecture);
150+
151+
152+
STATIC mp_obj_t ucomputer_set_architecture(mp_obj_t name_obj) {
153+
size_t len = 0;
154+
const char *buf = mp_obj_str_get_data(name_obj, &len);
155+
156+
return wrap_result(__syscall2(SYS_COMPUTER_SET_ARCHITECTURE, (int) buf, (int) len));
157+
}
158+
159+
MP_DEFINE_CONST_FUN_OBJ_1(ucomputer_set_architecture_obj, ucomputer_set_architecture);
160+
161+
131162
STATIC const mp_rom_map_elem_t ucomputer_module_globals_table[] = {
132163
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_ucomputer)},
133164

@@ -141,20 +172,28 @@ STATIC const mp_rom_map_elem_t ucomputer_module_globals_table[] = {
141172
{MP_ROM_QSTR(MP_QSTR_pop_signal), MP_ROM_PTR(&ucomputer_pop_signal_obj)},
142173

143174
// machine
144-
{MP_ROM_QSTR(MP_QSTR_get_cost_per_tick), MP_ROM_PTR(&ucomputer_get_cost_per_tick_obj)},
145-
{MP_ROM_QSTR(MP_QSTR_last_error), MP_ROM_PTR(&ucomputer_last_error_obj)},
175+
{MP_ROM_QSTR(MP_QSTR_get_last_error), MP_ROM_PTR(&ucomputer_get_last_error_obj)},
146176

147177
// beep
148178
{MP_ROM_QSTR(MP_QSTR_beep), MP_ROM_PTR(&ucomputer_beep_obj)},
149179

150180
// users
151-
{MP_ROM_QSTR(MP_QSTR_users), MP_ROM_PTR(&ucomputer_users_obj)},
181+
{MP_ROM_QSTR(MP_QSTR_get_users), MP_ROM_PTR(&ucomputer_get_users_obj)},
152182
{MP_ROM_QSTR(MP_QSTR_add_user), MP_ROM_PTR(&ucomputer_add_user_obj)},
153183
{MP_ROM_QSTR(MP_QSTR_remove_user), MP_ROM_PTR(&ucomputer_remove_user_obj)},
154184

155185
// address
156186
{MP_ROM_QSTR(MP_QSTR_get_computer_address), MP_ROM_PTR(&ucomputer_get_computer_address_obj)},
157187
{MP_ROM_QSTR(MP_QSTR_get_tmp_address), MP_ROM_PTR(&ucomputer_get_tmp_address_obj)},
188+
189+
// energy
190+
{MP_ROM_QSTR(MP_QSTR_get_energy), MP_ROM_PTR(&ucomputer_get_energy_obj)},
191+
{MP_ROM_QSTR(MP_QSTR_get_max_energy), MP_ROM_PTR(&ucomputer_get_max_energy_obj)},
192+
193+
// architecture
194+
{MP_ROM_QSTR(MP_QSTR_get_architectures), MP_ROM_PTR(&ucomputer_get_architectures_obj)},
195+
{MP_ROM_QSTR(MP_QSTR_get_architecture), MP_ROM_PTR(&ucomputer_get_architecture_obj)},
196+
{MP_ROM_QSTR(MP_QSTR_set_architecture), MP_ROM_PTR(&ucomputer_set_architecture_obj)},
158197
};
159198

160199
STATIC MP_DEFINE_CONST_DICT(ucomputer_module_globals, ucomputer_module_globals_table);

src/modules/bios.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ def bios():
22
globals().pop('bios')
33

44
from ucomputer import crash
5-
from ucomponent import invoke, components
5+
from ucomponent import invoke, get_list
66

7-
eeproms = components("eeprom")
7+
eeproms = get_list("eeprom")
88
if not eeproms:
99
crash("no bios found; install a configured EEPROM with Python")
1010

src/modutime.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@
66
mp_obj_t wrap_result(int code);
77

88

9+
STATIC mp_obj_t utime_time_real() {
10+
return wrap_result(__syscall0(SYS_TIMER_REAL_TIME));
11+
}
12+
13+
MP_DEFINE_CONST_FUN_OBJ_0(utime_time_real_obj, utime_time_real);
14+
15+
916
STATIC mp_obj_t utime_time_world() {
1017
return wrap_result(__syscall0(SYS_TIMER_WORLD_TIME));
1118
}
@@ -41,6 +48,8 @@ STATIC const mp_rom_map_elem_t time_module_globals_table[] = {
4148
{MP_ROM_QSTR(MP_QSTR_ticks_diff), MP_ROM_PTR(&mp_utime_ticks_diff_obj)},
4249

4350
// OpenComputers
51+
{MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&utime_time_real_obj)}, // alias
52+
{MP_ROM_QSTR(MP_QSTR_time_real), MP_ROM_PTR(&utime_time_real_obj)},
4453
{MP_ROM_QSTR(MP_QSTR_time_world), MP_ROM_PTR(&utime_time_world_obj)},
4554
{MP_ROM_QSTR(MP_QSTR_time_up), MP_ROM_PTR(&utime_time_up_obj)},
4655
{MP_ROM_QSTR(MP_QSTR_time_cpu), MP_ROM_PTR(&utime_time_cpu_obj)},

src/syscall_table.h

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,41 @@
1111
#define SYS_CONTROL_INIT_ZERO (SYS_CONTROL | 17)
1212

1313
#define SYS_SIGNAL (0x030000)
14-
#define SYS_SIGNAL_REQUEST (SYS_SIGNAL | 1)
15-
#define SYS_SIGNAL_PENDING (SYS_SIGNAL | 2)
14+
#define SYS_SIGNAL_POP (SYS_SIGNAL | 1)
15+
#define SYS_SIGNAL_POP_WAKEUP (SYS_SIGNAL | 2)
1616
#define SYS_SIGNAL_PUSH (SYS_SIGNAL | 3)
1717

1818
#define SYS_COMPONENT (0x040000)
19-
#define SYS_COMPONENT_INVOKE (SYS_COMPONENT | 0)
20-
#define SYS_COMPONENT_LIST (SYS_COMPONENT | 16)
21-
#define SYS_COMPONENT_METHODS (SYS_COMPONENT | 19)
22-
#define SYS_COMPONENT_DOC (SYS_COMPONENT | 20)
19+
#define SYS_COMPONENT_INVOKE (SYS_COMPONENT | 1)
20+
#define SYS_COMPONENT_LIST (SYS_COMPONENT | 8)
21+
#define SYS_COMPONENT_TYPE (SYS_COMPONENT | 9)
22+
#define SYS_COMPONENT_SLOT (SYS_COMPONENT | 10)
23+
#define SYS_COMPONENT_METHODS (SYS_COMPONENT | 11)
24+
#define SYS_COMPONENT_DOC (SYS_COMPONENT | 12)
2325

2426
#define SYS_VALUE (0x050000)
2527
#define SYS_VALUE_INVOKE (SYS_VALUE | 1)
2628
#define SYS_VALUE_CALL (SYS_VALUE | 2)
2729
#define SYS_VALUE_APPLY (SYS_VALUE | 3)
2830
#define SYS_VALUE_UNAPPLY (SYS_VALUE | 4)
2931
#define SYS_VALUE_DISPOSE (SYS_VALUE | 5)
30-
#define SYS_VALUE_METHODS (SYS_VALUE | 19)
31-
#define SYS_VALUE_DOC (SYS_VALUE | 20)
32+
#define SYS_VALUE_METHODS (SYS_VALUE | 11)
33+
#define SYS_VALUE_DOC (SYS_VALUE | 12)
3234

3335
#define SYS_COMPUTER (0x060000)
34-
#define SYS_COMPUTER_GET_COST_PER_TICK (SYS_COMPUTER | 16)
35-
#define SYS_COMPUTER_LAST_ERROR (SYS_COMPUTER | 17)
36-
#define SYS_COMPUTER_BEEP_1 (SYS_COMPUTER | 32)
37-
#define SYS_COMPUTER_BEEP_2 (SYS_COMPUTER | 33)
38-
#define SYS_COMPUTER_USERS (SYS_COMPUTER | 48)
39-
#define SYS_COMPUTER_ADD_USER (SYS_COMPUTER | 49)
40-
#define SYS_COMPUTER_REMOVE_USER (SYS_COMPUTER | 50)
41-
#define SYS_COMPUTER_COMPUTER_ADDRESS (SYS_COMPUTER | 64)
42-
#define SYS_COMPUTER_TMP_ADDRESS (SYS_COMPUTER | 65)
36+
#define SYS_COMPUTER_BEEP_1 (SYS_COMPUTER | 1)
37+
#define SYS_COMPUTER_BEEP_2 (SYS_COMPUTER | 2)
38+
#define SYS_COMPUTER_LAST_ERROR (SYS_COMPUTER | 8)
39+
#define SYS_COMPUTER_USERS (SYS_COMPUTER | 16)
40+
#define SYS_COMPUTER_ADD_USER (SYS_COMPUTER | 17)
41+
#define SYS_COMPUTER_REMOVE_USER (SYS_COMPUTER | 18)
42+
#define SYS_COMPUTER_COMPUTER_ADDRESS (SYS_COMPUTER | 24)
43+
#define SYS_COMPUTER_TMP_ADDRESS (SYS_COMPUTER | 25)
44+
#define SYS_COMPUTER_ENERGY (SYS_COMPUTER | 32)
45+
#define SYS_COMPUTER_MAX_ENERGY (SYS_COMPUTER | 33)
46+
#define SYS_COMPUTER_GET_ARCHITECTURES (SYS_COMPUTER | 40)
47+
#define SYS_COMPUTER_GET_ARCHITECTURE (SYS_COMPUTER | 41)
48+
#define SYS_COMPUTER_SET_ARCHITECTURE (SYS_COMPUTER | 42)
4349

4450
#define SYS_INFO (0x070000)
4551
#define SYS_INFO_VERSION (SYS_INFO | 1)
@@ -49,9 +55,10 @@
4955
#define SYS_TIMER_TICKS_MS (SYS_TIMER | 1)
5056
#define SYS_TIMER_TICKS_US (SYS_TIMER | 2)
5157
#define SYS_TIMER_TICKS_CPU (SYS_TIMER | 3)
52-
#define SYS_TIMER_WORLD_TIME (SYS_TIMER | 16)
53-
#define SYS_TIMER_UP_TIME (SYS_TIMER | 17)
54-
#define SYS_TIMER_CPU_TIME (SYS_TIMER | 18)
58+
#define SYS_TIMER_REAL_TIME (SYS_TIMER | 8)
59+
#define SYS_TIMER_WORLD_TIME (SYS_TIMER | 9)
60+
#define SYS_TIMER_UP_TIME (SYS_TIMER | 10)
61+
#define SYS_TIMER_CPU_TIME (SYS_TIMER | 11)
5562

5663
#define SYS_VFS (0x090000)
5764
#define SYS_VFS_OPEN (SYS_VFS | 1)

src/umodules/ucomponent.pyi

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
11
# ucomponent
22
"functions related to the components"
3-
from typing import Dict, List, Any, Union, overload, Tuple
3+
from typing import Dict, List, Any, Union, overload, Tuple, Optional
44

55

66
@overload
7-
def components() -> Dict[str, str]:
7+
def get_list() -> Dict[str, str]:
88
pass
99

1010

1111
@overload
12-
def components(device: str) -> List[str]:
12+
def get_list(device: str) -> List[str]:
1313
pass
1414

1515

16-
def methods(address: str) -> List[str]:
16+
def get_type(address: str) -> Optional[str]:
1717
pass
1818

1919

20-
def doc(address: str, method: str) -> str:
20+
def get_slot(address: str) -> Optional[str]:
21+
pass
22+
23+
24+
def get_methods(address: str) -> List[str]:
25+
pass
26+
27+
28+
def get_doc(address: str, method: str) -> Optional[str]:
2129
pass
2230

2331

0 commit comments

Comments
 (0)