Skip to content

Commit b1c7089

Browse files
committed
added asi_hwio_mod.c and dummy_hwioc.c to micropython
1 parent ec2f195 commit b1c7089

2 files changed

Lines changed: 327 additions & 0 deletions

File tree

ports/unix/Makefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,17 @@ CFLAGS_MOD += -I/usr/lib/jvm/java-7-openjdk-amd64/include -DMICROPY_PY_JNI=1
218218
SRC_MOD += modjni.c
219219
endif
220220

221+
# Path for ASI module
222+
ASI2900_ROOT = ../../../..
223+
HWIO = $(realpath ${ASI2900_ROOT}/audio_protocols/dante/hwio)
224+
ASI2900_LIBS = $(ASI2900_ROOT)/subrepos
225+
CFLAGS_MOD += -I$(ASI2900_ROOT)/audio_protocols/dante
226+
SRC_MOD += asi_hwio_mod.c
227+
228+
# Path to dummy implementation
229+
CFLAGS_MOD += -I$(ASI2900_LIBS) -I$(ASI2900_ROOT)
230+
SRC_MOD += $(HWIO)/dummy_hwioc.c
231+
221232
# source files
222233
SRC_C += \
223234
main.c \

ports/unix/asi_hwio_mod.c

Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
2+
#include <hwio/hwioc.h>
3+
#include "extmod/misc.h"
4+
5+
6+
STATIC mp_obj_t mod_iyo_hwio_init(mp_obj_t loglevel) {
7+
int r = hwioc_init(mp_obj_get_int(loglevel));
8+
9+
if (r < 0) {
10+
mp_raise_OSError(-r);
11+
}
12+
13+
return mp_const_none;
14+
}
15+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_init_obj, mod_iyo_hwio_init);
16+
17+
18+
STATIC mp_obj_t mod_iyo_hwio_shutdown(void) {
19+
hwioc_shutdown();
20+
21+
return mp_const_none;
22+
}
23+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_iyo_hwio_shutdown_obj, mod_iyo_hwio_shutdown);
24+
25+
26+
STATIC mp_obj_t mod_iyo_hwio_set_trim_level(mp_obj_t index, mp_obj_t is_input, mp_obj_t level) {
27+
int r = hwioc_set_trim_level(mp_obj_get_int(index), !!mp_obj_get_int(is_input), mp_obj_get_int(level));
28+
29+
if (r < 0) {
30+
mp_raise_OSError(-r);
31+
}
32+
33+
return mp_const_none;
34+
}
35+
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_iyo_hwio_set_trim_level_obj, mod_iyo_hwio_set_trim_level);
36+
37+
38+
STATIC mp_obj_t mod_iyo_hwio_set_input_phantom_power(mp_obj_t index, mp_obj_t enable) {
39+
int r = hwioc_set_input_phantom_power(mp_obj_get_int(index), !!mp_obj_get_int(enable));
40+
41+
if (r < 0) {
42+
mp_raise_OSError(-r);
43+
}
44+
45+
return mp_const_none;
46+
}
47+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_input_phantom_power_obj, mod_iyo_hwio_set_input_phantom_power);
48+
49+
STATIC mp_obj_t mod_iyo_hwio_set_gpo(mp_obj_t index, mp_obj_t bits) {
50+
int r = hwioc_set_gpo(mp_obj_get_int(index), mp_obj_get_int(bits));
51+
52+
if (r < 0) {
53+
mp_raise_OSError(-r);
54+
}
55+
56+
return mp_const_none;
57+
}
58+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_gpo_obj, mod_iyo_hwio_set_gpo);
59+
60+
STATIC mp_obj_t mod_iyo_hwio_set_input_mute(mp_obj_t index, mp_obj_t enable) {
61+
int r = hwioc_set_input_mute(mp_obj_get_int(index), !!mp_obj_get_int(enable));
62+
63+
if (r < 0) {
64+
mp_raise_OSError(-r);
65+
}
66+
67+
return mp_const_none;
68+
}
69+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_input_mute_obj, mod_iyo_hwio_set_input_mute);
70+
71+
STATIC mp_obj_t mod_iyo_hwio_set_output_mute(mp_obj_t index, mp_obj_t enable) {
72+
int r = hwioc_set_output_mute(mp_obj_get_int(index), !!mp_obj_get_int(enable));
73+
74+
if (r < 0) {
75+
mp_raise_OSError(-r);
76+
}
77+
78+
return mp_const_none;
79+
}
80+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_output_mute_obj, mod_iyo_hwio_set_output_mute);
81+
82+
STATIC mp_obj_t mod_iyo_hwio_set_led_diagnostic(mp_obj_t enable, mp_obj_t rgb_pwm) {
83+
int r = hwioc_set_led_diagnostic(!!mp_obj_get_int(enable), mp_obj_get_int(rgb_pwm));
84+
85+
if (r < 0) {
86+
mp_raise_OSError(-r);
87+
}
88+
89+
return mp_const_none;
90+
}
91+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_led_diagnostic_obj, mod_iyo_hwio_set_led_diagnostic);
92+
93+
STATIC mp_obj_t mod_iyo_hwio_add_aes67_transmit_flow(mp_obj_t ip, mp_obj_t base_ch_idx, mp_obj_t channel_count) {
94+
int r = hwioc_add_aes67_transmit_flow(mp_obj_str_get_str(ip), mp_obj_get_int(base_ch_idx), mp_obj_get_int(channel_count));
95+
96+
if (r < 0) {
97+
mp_raise_OSError(-r);
98+
}
99+
100+
return mp_const_none;
101+
}
102+
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_iyo_hwio_add_aes67_transmit_flow_obj, mod_iyo_hwio_add_aes67_transmit_flow);
103+
104+
STATIC mp_obj_t mod_iyo_hwio_delete_aes67_transmit_flow(mp_obj_t base_ch_idx, mp_obj_t channel_count) {
105+
int r = hwioc_delete_aes67_transmit_flow(mp_obj_get_int(base_ch_idx), mp_obj_get_int(channel_count));
106+
107+
if (r < 0) {
108+
mp_raise_OSError(-r);
109+
}
110+
111+
return mp_const_none;
112+
}
113+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_delete_aes67_transmit_flow_obj, mod_iyo_hwio_delete_aes67_transmit_flow);
114+
115+
STATIC mp_obj_t mod_iyo_hwio_add_aes67_receive_flow(mp_obj_t rx_sub_ip, mp_obj_t base_ch_idx, mp_obj_t channel_count) {
116+
int r = hwioc_add_aes67_receive_flow(mp_obj_str_get_str(rx_sub_ip), mp_obj_get_int(base_ch_idx), mp_obj_get_int(channel_count));
117+
118+
if (r < 0) {
119+
mp_raise_OSError(-r);
120+
}
121+
122+
return mp_const_none;
123+
}
124+
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_iyo_hwio_add_aes67_receive_flow_obj, mod_iyo_hwio_add_aes67_receive_flow);
125+
126+
STATIC mp_obj_t mod_iyo_hwio_delete_aes67_receive_flow(mp_obj_t rx_sub_ip) {
127+
int r = hwioc_delete_aes67_receive_flow(mp_obj_str_get_str(rx_sub_ip));
128+
129+
if (r < 0) {
130+
mp_raise_OSError(-r);
131+
}
132+
133+
return mp_const_none;
134+
}
135+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_delete_aes67_receive_flow_obj, mod_iyo_hwio_delete_aes67_receive_flow);
136+
137+
STATIC mp_obj_t mod_iyo_hwio_set_save_pending_flag(mp_obj_t pending) {
138+
int r = hwioc_set_save_pending_flag(!!mp_obj_get_int(pending));
139+
140+
if (r < 0) {
141+
mp_raise_OSError(-r);
142+
}
143+
144+
return mp_const_none;
145+
}
146+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_set_save_pending_flag_obj, mod_iyo_hwio_set_save_pending_flag);
147+
148+
STATIC mp_obj_t mod_iyo_hwio_notify_switch_found(mp_obj_t found) {
149+
int r = hwioc_notify_switch_found(!!mp_obj_get_int(found));
150+
151+
if (r < 0) {
152+
mp_raise_OSError(-r);
153+
}
154+
155+
return mp_const_none;
156+
}
157+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_notify_switch_found_obj, mod_iyo_hwio_notify_switch_found);
158+
159+
STATIC mp_obj_t mod_iyo_hwio_send_reboot_cmd(void) {
160+
int r = hwioc_send_device_reboot_cmd();
161+
162+
if (r < 0) {
163+
mp_raise_OSError(-r);
164+
}
165+
166+
return mp_const_none;
167+
}
168+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_iyo_hwio_send_reboot_cmd_obj, mod_iyo_hwio_send_reboot_cmd);
169+
170+
STATIC mp_obj_t mod_iyo_hwio_signal_objects_restore_done(void) {
171+
int r = hwioc_signal_objects_restore_done();
172+
173+
if (r < 0) {
174+
mp_raise_OSError(-r);
175+
}
176+
177+
return mp_const_none;
178+
}
179+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_iyo_hwio_signal_objects_restore_done_obj, mod_iyo_hwio_signal_objects_restore_done);
180+
181+
STATIC mp_obj_t mod_iyo_hwio_send_identify_cmd(mp_obj_t enable) {
182+
int r = hwioc_send_device_identify_cmd(!!mp_obj_get_int(enable));
183+
184+
if (r < 0) {
185+
mp_raise_OSError(-r);
186+
}
187+
188+
return mp_const_none;
189+
}
190+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_send_identify_cmd_obj, mod_iyo_hwio_send_identify_cmd);
191+
192+
STATIC mp_obj_t mod_iyo_hwio_set_user_data_label(mp_obj_t label) {
193+
int r = hwioc_set_dante_device_name(mp_obj_str_get_str(label));
194+
195+
if (r < 0) {
196+
mp_raise_OSError(-r);
197+
}
198+
199+
return mp_const_none;
200+
}
201+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_set_user_data_label_obj, mod_iyo_hwio_set_user_data_label);
202+
203+
STATIC mp_obj_t mod_iyo_hwio_set_txchannel_name(mp_obj_t ch_idx, mp_obj_t label) {
204+
int r = hwioc_set_txchannel_name(mp_obj_get_int(ch_idx), mp_obj_str_get_str(label));
205+
206+
if (r < 0) {
207+
mp_raise_OSError(-r);
208+
}
209+
210+
return mp_const_none;
211+
}
212+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_txchannel_name_obj, mod_iyo_hwio_set_txchannel_name);
213+
214+
STATIC mp_obj_t mod_iyo_hwio_set_rxchannel_name(mp_obj_t ch_idx, mp_obj_t label) {
215+
int r = hwioc_set_rxchannel_name(mp_obj_get_int(ch_idx), mp_obj_str_get_str(label));
216+
217+
if (r < 0) {
218+
mp_raise_OSError(-r);
219+
}
220+
221+
return mp_const_none;
222+
}
223+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_iyo_hwio_set_rxchannel_name_obj, mod_iyo_hwio_set_rxchannel_name);
224+
225+
STATIC mp_obj_t mod_iyo_hwio_get_fds(void) {
226+
int m_fd = hwioc_meter_update_fd();
227+
int c_fd = hwioc_conmon_to_py_fd();
228+
int a_fd = hwioc_conmon_aes67_to_py_fd();
229+
int cs_fd = hwioc_conmon_str_to_py_fd();
230+
int x_fd = hwioc_xmos_to_py_fd();
231+
int xs_fd = hwioc_xmos_str_to_py_fd();
232+
233+
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(mp_obj_new_tuple(6, NULL));
234+
t->items[0] = mp_obj_new_int(m_fd);
235+
t->items[1] = mp_obj_new_int(c_fd);
236+
t->items[2] = mp_obj_new_int(a_fd);
237+
t->items[3] = mp_obj_new_int(cs_fd);
238+
t->items[4] = mp_obj_new_int(x_fd);
239+
t->items[5] = mp_obj_new_int(xs_fd);
240+
241+
return MP_OBJ_FROM_PTR(t);
242+
}
243+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_iyo_hwio_get_fds_obj, mod_iyo_hwio_get_fds);
244+
245+
STATIC mp_obj_t mod_iyo_hwio_set_front_panel_brightness(mp_obj_t brightness) {
246+
int r = hwioc_set_front_panel_brightness(mp_obj_get_int(brightness));
247+
if (r < 0) {
248+
mp_raise_OSError(-r);
249+
}
250+
251+
return mp_const_none;
252+
}
253+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_set_front_panel_brightness_obj, mod_iyo_hwio_set_front_panel_brightness);
254+
255+
STATIC mp_obj_t mod_iyo_hwio_set_front_panel_phantom_power_indication(mp_obj_t enable) {
256+
int r = hwioc_set_front_panel_phantom_power_indication(!!mp_obj_get_int(enable));
257+
if (r < 0) {
258+
mp_raise_OSError(-r);
259+
}
260+
261+
return mp_const_none;
262+
}
263+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_iyo_hwio_set_front_panel_phantom_power_indication_obj, mod_iyo_hwio_set_front_panel_phantom_power_indication);
264+
265+
STATIC const mp_rom_map_elem_t mp_module_iyo_hwio_globals_table[] = {
266+
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_iyo_hwio) },
267+
{ MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&mod_iyo_hwio_init_obj) },
268+
{ MP_ROM_QSTR(MP_QSTR_shutdown), MP_ROM_PTR(&mod_iyo_hwio_shutdown_obj) },
269+
270+
{ MP_ROM_QSTR(MP_QSTR_set_trim_level), MP_ROM_PTR(&mod_iyo_hwio_set_trim_level_obj) },
271+
{ MP_ROM_QSTR(MP_QSTR_set_input_phantom_power), MP_ROM_PTR(&mod_iyo_hwio_set_input_phantom_power_obj) },
272+
273+
{ MP_ROM_QSTR(MP_QSTR_set_gpo), MP_ROM_PTR(&mod_iyo_hwio_set_gpo_obj) },
274+
275+
{ MP_ROM_QSTR(MP_QSTR_set_input_mute), MP_ROM_PTR(&mod_iyo_hwio_set_input_mute_obj) },
276+
277+
{ MP_ROM_QSTR(MP_QSTR_set_output_mute), MP_ROM_PTR(&mod_iyo_hwio_set_output_mute_obj) },
278+
279+
{ MP_ROM_QSTR(MP_QSTR_set_led_diagnostic), MP_ROM_PTR(&mod_iyo_hwio_set_led_diagnostic_obj) },
280+
281+
{ MP_ROM_QSTR(MP_QSTR_set_save_pending_flag), MP_ROM_PTR(&mod_iyo_hwio_set_save_pending_flag_obj) },
282+
283+
{ MP_ROM_QSTR(MP_QSTR_notify_switch_found), MP_ROM_PTR(&mod_iyo_hwio_notify_switch_found_obj) },
284+
285+
{ MP_ROM_QSTR(MP_QSTR_send_reboot_cmd), MP_ROM_PTR(&mod_iyo_hwio_send_reboot_cmd_obj) },
286+
287+
{ MP_ROM_QSTR(MP_QSTR_signal_objects_restore_done), MP_ROM_PTR(&mod_iyo_hwio_signal_objects_restore_done_obj) },
288+
289+
{ MP_ROM_QSTR(MP_QSTR_send_identify_cmd), MP_ROM_PTR(&mod_iyo_hwio_send_identify_cmd_obj) },
290+
291+
{ MP_ROM_QSTR(MP_QSTR_set_user_data_label), MP_ROM_PTR(&mod_iyo_hwio_set_user_data_label_obj) },
292+
293+
{ MP_ROM_QSTR(MP_QSTR_set_txchannel_name), MP_ROM_PTR(&mod_iyo_hwio_set_txchannel_name_obj) },
294+
295+
{ MP_ROM_QSTR(MP_QSTR_set_rxchannel_name), MP_ROM_PTR(&mod_iyo_hwio_set_rxchannel_name_obj) },
296+
297+
{ MP_ROM_QSTR(MP_QSTR_get_fds), MP_ROM_PTR(&mod_iyo_hwio_get_fds_obj) },
298+
299+
{ MP_ROM_QSTR(MP_QSTR_add_aes67_transmit_flow), MP_ROM_PTR(&mod_iyo_hwio_add_aes67_transmit_flow_obj) },
300+
301+
{ MP_ROM_QSTR(MP_QSTR_delete_aes67_transmit_flow), MP_ROM_PTR(&mod_iyo_hwio_delete_aes67_transmit_flow_obj) },
302+
303+
{ MP_ROM_QSTR(MP_QSTR_add_aes67_receive_flow), MP_ROM_PTR(&mod_iyo_hwio_add_aes67_receive_flow_obj) },
304+
305+
{ MP_ROM_QSTR(MP_QSTR_delete_aes67_receive_flow), MP_ROM_PTR(&mod_iyo_hwio_delete_aes67_receive_flow_obj) },
306+
307+
{ MP_ROM_QSTR(MP_QSTR_set_front_panel_brightness), MP_ROM_PTR(&mod_iyo_hwio_set_front_panel_brightness_obj) },
308+
309+
{ MP_ROM_QSTR(MP_QSTR_set_front_panel_phantom_power_indication), MP_ROM_PTR(&mod_iyo_hwio_set_front_panel_phantom_power_indication_obj) },
310+
};
311+
STATIC MP_DEFINE_CONST_DICT(mp_module_iyo_hwio_globals, mp_module_iyo_hwio_globals_table);
312+
313+
const mp_obj_module_t mp_module_iyo_hwio = {
314+
.base = { &mp_type_module },
315+
.globals = (mp_obj_dict_t*)&mp_module_iyo_hwio_globals,
316+
};

0 commit comments

Comments
 (0)