10000 nrf/led: Expose public API for LED manipulation. · jimmo/micropython@226399b · GitHub
[go: up one dir, main page]

Skip to content

Commit 226399b

Browse files
rolandvsglennrub
authored andcommitted
nrf/led: Expose public API for LED manipulation.
Aligned implementation with the STM32 port. Added empty functions to be used when no LED is available.
1 parent cf38341 commit 226399b

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

ports/nrf/modules/board/led.c

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ static const board_led_obj_t board_led_obj[] = {
6565
#if MICROPY_HW_LED_TRICOLOR
6666

6767
{{&board_led_type}, BOARD_LED_RED, MICROPY_HW_LED_RED, 0, MICROPY_HW_LED_PULLUP},
68-
{{&board_led_type}, BOARD_LED_GREEN, MICROPY_HW_LED_GREEN,0, MICROPY_HW_LED_PULLUP},
69-
{{&board_led_type}, BOARD_LED_BLUE, MICROPY_HW_LED_BLUE,0, MICROPY_HW_LED_PULLUP},
68+
{{&board_led_type}, BOARD_LED_GREEN, MICROPY_HW_LED_GREEN, 0, MICROPY_HW_LED_PULLUP},
69+
{{&board_led_type}, BOARD_LED_BLUE, MICROPY_HW_LED_BLUE, 0, MICROPY_HW_LED_PULLUP},
7070
#endif
7171
#if (MICROPY_HW_LED_COUNT >= 1)
7272
{{&board_led_type}, BOARD_LED1, MICROPY_HW_LED1, 0,
@@ -115,17 +115,17 @@ void led_init(void) {
115115
}
116116
}
117117

118-
void led_state(board_led_obj_t * led_obj, int state) {
118+
void led_state(board_led_t led, int state) {
119119
if (state == 1) {
120-
led_on(led_obj);
120+
led_on((board_led_obj_t*)&board_led_obj[led-1]);
121121

122122
} else {
123-
led_off(led_obj);
123+
led_off((board_led_obj_t*)&board_led_obj[led-1]);
124124
}
125125
}
126126

127-
void led_toggle(board_led_obj_t * led_obj) {
128-
nrf_gpio_pin_toggle(led_obj->hw_pin);
127+
void led_toggle(board_led_t led) {
128+
nrf_gpio_pin_toggle(board_led_obj[led-1].hw_pin);
129129
}
130130

131131

@@ -162,23 +162,23 @@ STATIC mp_obj_t led_obj_make_new(const mp_obj_type_t *type, size_t n_args, size_
162162
/// Turn the LED on.
163163
mp_obj_t led_obj_on(mp_obj_t self_in) {
164164
board_led_obj_t *self = self_in;
165-
led_state(self, 1);
165+
led_state(self->led_id, 1);
166166
return mp_const_none;
167167
}
168168

169169
/// \method off()
170170
/// Turn the LED off.
171171
mp_obj_t led_obj_off(mp_obj_t self_in) {
172172
board_led_obj_t *self = self_in;
173-
led_state(self, 0);
173+
led_state(self->led_id, 0);
174174
return mp_const_none;
175175
}
176176

177177
/// \method toggle()
178178
/// Toggle the LED between on and off.
179179
mp_obj_t led_obj_toggle(mp_obj_t self_in) {
180180
board_led_obj_t *self = self_in;
181-
led_toggle(self);
181+
led_toggle(self->led_id);
182182
return mp_const_none;
183183
}
184184

@@ -202,4 +202,13 @@ const mp_obj_type_t board_led_type = {
202202
.locals_dict = (mp_obj_dict_t*)&led_locals_dict,
203203
};
204204

205+
#else
206+
// For boards with no LEDs, we leave an empty function here so that we don't
207+
// have to put conditionals everywhere.
208+
void led_init(void) {
209+
}
210+
void led_state(board_led_t led, int state) {
211+
}
212+
void led_toggle(board_led_t led) {
213+
}
205214
#endif // MICROPY_HW_HAS_LED

ports/nrf/modules/board/led.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ typedef enum {
5151
} board_led_t;
5252

5353
void led_init(void);
54+
void led_state(board_led_t, int);
55+
void led_toggle(board_led_t);
5456

5557
extern const mp_obj_type_t board_led_type;
5658

0 commit comments

Comments
 (0)
0