leds.c 1.13 KB
Newer Older
Rahix's avatar
Rahix committed
1
#include "py/obj.h"
2
3
4
#include "py/objlist.h"
#include "py/runtime.h"

Rahix's avatar
Rahix committed
5
6
#include "epicardium.h"

7
static mp_obj_t mp_leds_set(mp_obj_t led_in, mp_obj_t color_in)
Rahix's avatar
Rahix committed
8
{
9
10
	int led = mp_obj_get_int(led_in);

11
12
13
14
15
	if (!mp_obj_is_type(color_in, &mp_type_list)) {
		mp_raise_TypeError("color must be a list");
	}
	mp_obj_list_t*color = MP_OBJ_TO_PTR(color_in);

16
17
18
	if (color->len < 3) {
		mp_raise_ValueError("color list must have 3 elements");
	}
Rahix's avatar
Rahix committed
19

20
21
22
23
24
25
	epic_leds_set(
		led,
		mp_obj_get_int(color->items[0]),
		mp_obj_get_int(color->items[1]),
		mp_obj_get_int(color->items[2])
	);
Rahix's avatar
Rahix committed
26
27
28

	return mp_const_none;
}
29
static MP_DEFINE_CONST_FUN_OBJ_2(leds_set_obj, mp_leds_set);
Rahix's avatar
Rahix committed
30
31

static const mp_rom_map_elem_t leds_module_globals_table[] = {
32
33
	{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_leds) },
	{ MP_ROM_QSTR(MP_QSTR_set), MP_ROM_PTR(&leds_set_obj) },
Rahix's avatar
Rahix committed
34
35
36
37
38
39
40
41
42
43
};
static MP_DEFINE_CONST_DICT(leds_module_globals, leds_module_globals_table);

const mp_obj_module_t leds_module = {
	.base = { &mp_type_module },
	.globals = (mp_obj_dict_t*)&leds_module_globals,
};

/* Register the module to make it available in Python */
MP_REGISTER_MODULE(MP_QSTR_leds, leds_module, MODULE_LEDS_ENABLED);