diff options
author | Damien George <damien.p.george@gmail.com> | 2014-01-06 14:32:56 -0800 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-01-06 14:32:56 -0800 |
commit | 880ce2d7fabc127b4bca7b6f2ea8b82d0977045f (patch) | |
tree | feb4fc084bbba429cd4dd52a690577d80c6b4de6 /teensy/led.c | |
parent | ff07bb3adb50481d6b7be94755e07df893f374dc (diff) | |
parent | 297446e7af472f8869ecca67f37ed159d02b1024 (diff) | |
download | micropython-880ce2d7fabc127b4bca7b6f2ea8b82d0977045f.tar.gz micropython-880ce2d7fabc127b4bca7b6f2ea8b82d0977045f.zip |
Merge pull request #97 from dhylands/teensy-3.1
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; +} |