mbed I/F binding for mruby

Dependents:   mruby_mbed_web mirb_mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers mrbSPI.cpp Source File

mrbSPI.cpp

00001 #include "mbed.h"
00002 #include "mrbSPI.h"
00003 
00004 static struct mrb_data_type mbed_spi_type = {
00005     "SPI", mrb_mbed_spi_free
00006 };
00007 
00008 mrb_value
00009 mrb_mbed_spi_init(mrb_state *mrb, mrb_value self)
00010 {
00011     mrb_int mosi, miso, sclk;
00012 
00013     mrb_get_args(mrb, "iii", &mosi, &miso, &sclk);
00014     PinName pin_mosi = static_cast<PinName>(mosi);
00015     PinName pin_miso = static_cast<PinName>(miso);
00016     PinName pin_sclk = static_cast<PinName>(sclk);
00017 
00018     DATA_TYPE(self) = &mbed_spi_type;
00019     DATA_PTR(self) = new SPI(pin_mosi, pin_miso, pin_sclk);
00020 
00021     return self;
00022 }
00023 
00024 void
00025 mrb_mbed_spi_free(mrb_state *mrb, void *ptr)
00026 {
00027     SPI *obj = static_cast<SPI*>(ptr);
00028     delete obj;
00029 }
00030 
00031 mrb_value
00032 mrb_mbed_spi_freq(mrb_state *mrb, mrb_value self)
00033 {
00034     SPI *obj = static_cast<SPI*>(DATA_PTR(self));
00035 
00036     mrb_int freq;
00037     if (mrb_get_args(mrb, "|i", &freq) == 0) {
00038         obj->frequency();
00039     } else {
00040         obj->frequency(freq);
00041     }
00042 
00043     return self;
00044 }
00045 
00046 mrb_value
00047 mrb_mbed_spi_format(mrb_state *mrb, mrb_value self)
00048 {
00049     SPI *obj = static_cast<SPI*>(DATA_PTR(self));
00050 
00051     mrb_int bits, mode;
00052     if (mrb_get_args(mrb, "i|i", &bits, &mode) == 1) {
00053         obj->format(bits);
00054     } else {
00055         obj->format(bits, mode);    
00056     }
00057 
00058     return self;
00059 }
00060 
00061 mrb_value
00062 mrb_mbed_spi_write(mrb_state *mrb, mrb_value self)
00063 {
00064     SPI *obj = static_cast<SPI*>(DATA_PTR(self));
00065 
00066     mrb_int value;
00067     mrb_get_args(mrb, "i", &value);
00068     obj->write(value);
00069 
00070     return self;
00071 }