Skip to content

Commit 8d446b2

Browse files
iabdalkaderdpgeorge
authored andcommitted
mimxrt/led: Add support for up to four LEDs.
Signed-off-by: iabdalkader <[email protected]>
1 parent 0f0dcec commit 8d446b2

File tree

5 files changed

+36
-25
lines changed

5 files changed

+36
-25
lines changed

ports/mimxrt/led.c

+15-13
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,23 @@
3131
#include "py/mphal.h"
3232
#include "led.h"
3333

34-
#if NUM_LEDS
35-
36-
const machine_led_obj_t machine_led_obj[NUM_LEDS] = {
37-
{
38-
.base = {&machine_led_type},
39-
.led_id = 1U,
40-
.led_pin = &MICROPY_HW_LED1_PIN,
41-
}
34+
#if defined(MICROPY_HW_LED1_PIN)
35+
36+
const machine_led_obj_t machine_led_obj[] = {
37+
{ .base = {&machine_led_type}, .led_id = 1U, .led_pin = &MICROPY_HW_LED1_PIN, },
38+
#if defined(MICROPY_HW_LED2_PIN)
39+
{ .base = {&machine_led_type}, .led_id = 2U, .led_pin = &MICROPY_HW_LED2_PIN, },
40+
#if defined(MICROPY_HW_LED3_PIN)
41+
{ .base = {&machine_led_type}, .led_id = 3U, .led_pin = &MICROPY_HW_LED3_PIN, },
42+
#if defined(MICROPY_HW_LED4_PIN)
43+
{ .base = {&machine_led_type}, .led_id = 4U, .led_pin = &MICROPY_HW_LED4_PIN, },
44+
#endif
45+
#endif
46+
#endif
4247
};
4348

49+
#define NUM_LEDS MP_ARRAY_SIZE(machine_led_obj)
50+
4451
void led_init(void) {
4552
// Turn off LEDs and initialize
4653
for (mp_int_t led = 0; led < NUM_LEDS; led++) {
@@ -94,9 +101,4 @@ void led_debug(int value, int delay) {
94101
mp_hal_delay_ms(delay);
95102
}
96103

97-
#else
98-
99-
void led_init(void) {
100-
}
101-
102104
#endif

ports/mimxrt/led.h

+14-8
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,20 @@
2929

3030
#include "pin.h"
3131

32-
#if defined(MICROPY_HW_LED1_PIN)
33-
#define NUM_LEDS (1)
34-
#else
35-
#define NUM_LEDS (0)
36-
#endif
37-
3832
typedef enum {
39-
MACHINE_BOARD_LED = 1,
33+
#if defined(MICROPY_HW_LED1_PIN)
34+
MACHINE_BOARD_LED1 = 1,
35+
#if defined(MICROPY_HW_LED2_PIN)
36+
MACHINE_BOARD_LED2 = 2,
37+
#if defined(MICROPY_HW_LED3_PIN)
38+
MACHINE_BOARD_LED3 = 3,
39+
#if defined(MICROPY_HW_LED4_PIN)
40+
MACHINE_BOARD_LED4 = 4,
41+
#endif
42+
#endif
43+
#endif
44+
#endif
45+
MICROPY_HW_LED_MAX
4046
} machine_led_t;
4147

4248
typedef struct _machine_led_obj_t {
@@ -51,6 +57,6 @@ void led_toggle(machine_led_t led);
5157
void led_debug(int value, int delay);
5258

5359
extern const mp_obj_type_t machine_led_type;
54-
extern const machine_led_obj_t machine_led_obj[NUM_LEDS];
60+
extern const machine_led_obj_t machine_led_obj[];
5561

5662
#endif // MICROPY_INCLUDED_MIMXRT_LED_H

ports/mimxrt/machine_led.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#include "py/mphal.h"
2929
#include "led.h"
3030

31-
#if NUM_LEDS
31+
#if defined(MICROPY_HW_LED1_PIN)
3232

3333
STATIC void led_obj_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
3434
(void)kind;
@@ -43,7 +43,7 @@ STATIC mp_obj_t led_obj_make_new(const mp_obj_type_t *type, size_t n_args, size_
4343
mp_int_t led_id = mp_obj_get_int(args[0]);
4444

4545
// Check led id is in range
46-
if (!(1 <= led_id && led_id <= NUM_LEDS)) {
46+
if (!(1 <= led_id && led_id < MICROPY_HW_LED_MAX)) {
4747
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("LED(%d) doesn't exist"), led_id);
4848
}
4949

ports/mimxrt/main.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ int main(void) {
5555
board_init();
5656
ticks_init();
5757
tusb_init();
58-
led_init();
5958
pendsv_init();
6059

6160
#if MICROPY_PY_LWIP
@@ -71,6 +70,10 @@ int main(void) {
7170
#endif
7271

7372
for (;;) {
73+
#if defined(MICROPY_HW_LED1)
74+
led_init();
75+
#endif
76+
7477
mp_stack_set_top(&_estack);
7578
mp_stack_set_limit(&_estack - &_sstack - 1024);
7679

ports/mimxrt/modmachine.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
139139
{ MP_ROM_QSTR(MP_QSTR_mem8), MP_ROM_PTR(&machine_mem8_obj) },
140140
{ MP_ROM_QSTR(MP_QSTR_mem16), MP_ROM_PTR(&machine_mem16_obj) },
141141
{ MP_ROM_QSTR(MP_QSTR_mem32), MP_ROM_PTR(&machine_mem32_obj) },
142-
#if NUM_LEDS
142+
#if defined(MICROPY_HW_LED1_PIN)
143143
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&machine_led_type) },
144144
#endif
145145
{ MP_ROM_QSTR(MP_QSTR_Pin), MP_ROM_PTR(&machine_pin_type) },

0 commit comments

Comments
 (0)