mbed I/F binding for mruby
Dependents: mruby_mbed_web mirb_mbed
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 }
Generated on Tue Jul 12 2022 18:00:34 by 1.7.2