diff options
author | Dave Hylands <dhylands@gmail.com> | 2014-01-06 00:20:11 -0800 |
---|---|---|
committer | Dave Hylands <dhylands@gmail.com> | 2014-01-06 00:20:11 -0800 |
commit | 297446e7af472f8869ecca67f37ed159d02b1024 (patch) | |
tree | 80d279810f02335dee457fab68c42f5e4e365c81 /teensy/led.c | |
parent | e03c0533fe467439bae1addd6d2a2ee57a9370e4 (diff) | |
download | micropython-297446e7af472f8869ecca67f37ed159d02b1024.tar.gz micropython-297446e7af472f8869ecca67f37ed159d02b1024.zip |
Initial support for Teensy 3.1
Diffstat (limited to 'teensy/led.c')
-rw-r--r-- | teensy/led.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/teensy/led.c b/teensy/led.c new file mode 100644 index 0000000000..1aad2a365e --- /dev/null +++ b/teensy/led.c @@ -0,0 +1,86 @@ +#include <stdio.h> + +#include "misc.h" +#include "mpconfig.h" +#include "obj.h" +#include "led.h" + +#include "Arduino.h" + +void led_init(void) { +} + +void led_state(pyb_led_t led, int state) { + uint8_t pin; + + if (led == 0) { + pin = LED_BUILTIN; + } else { + return; + } + digitalWrite(pin, state); +} + +void led_toggle(pyb_led_t led) { + uint8_t pin; + + if (led == 0) { + pin = LED_BUILTIN; + } else { + return; + } + + digitalWrite(pin, !digitalRead(pin)); +} + +/******************************************************************************/ +/* Micro Python bindings */ + +typedef struct _pyb_led_obj_t { + mp_obj_base_t base; + uint led_id; +} pyb_led_obj_t; + +void led_obj_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in) { + pyb_led_obj_t *self = self_in; + print(env, "<LED %lu>", self->led_id); +} + +mp_obj_t led_obj_on(mp_obj_t self_in) { + pyb_led_obj_t *self = self_in; + led_state(self->led_id, 1); + return mp_const_none; +} + +mp_obj_t led_obj_off(mp_obj_t self_in) { + pyb_led_obj_t *self = self_in; + led_state(self->led_id, 0); + return mp_const_none; +} + +static MP_DEFINE_CONST_FUN_OBJ_1(led_obj_on_obj, led_obj_on); +static MP_DEFINE_CONST_FUN_OBJ_1(led_obj_off_obj, led_obj_off); + +static const mp_obj_type_t led_obj_type = { + { &mp_const_type }, + "Led", + led_obj_print, // print + NULL, // make_new + NULL, // call_n + NULL, // unary_op + NULL, // binary_op + NULL, // getiter + NULL, // iternext + { // method list + { "on", &led_obj_on_obj }, + { "off", &led_obj_off_obj }, + { NULL, NULL }, + } +}; + +mp_obj_t pyb_Led(mp_obj_t led_id) { + pyb_led_obj_t *o = m_new_obj(pyb_led_obj_t); + o->base.type = &led_obj_type; + o->led_id = mp_obj_get_int(led_id); + return o; +} |