#include "arduino_i2c.h" #include extern "C" { extern uint8_t * make_output_buffer(mrb_vm *vm, mrb_value v[], int argc, int start_idx, int *ret_bufsiz); #if !MRBC_USE_STRING extern mrbc_value mrbc_array_new_alloc(mrbc_vm *vm, const uint8_t *c_array, int size); #endif void c_i2c_new(mrb_vm *vm, mrb_value *v, int argc){ Wire.begin(); } void c_i2c_write(mrb_vm *vm, mrb_value *v, int argc){ uint8_t *buf = 0; int bufsiz = 0; if( argc>0 ){ uint8_t adrs = GET_INT_ARG(1); Wire.beginTransmission(adrs); if(argc>2){ buf = make_output_buffer( vm, v, argc, 2, &bufsiz ); Wire.write(buf,bufsiz); mrbc_free( vm, buf ); } Wire.endTransmission(); } SET_RETURN( mrbc_integer_value(bufsiz) ); } void c_i2c_read(mrb_vm *vm, mrb_value *v, int argc){ uint8_t *buf = 0; int bufsiz = 0; mrbc_value ret = mrbc_nil_value(); if( argc >1 ){ int adrs = GET_INT_ARG(1); int size = GET_INT_ARG(2); if( argc > 2 ) { buf = make_output_buffer( vm, v, argc, 3, &bufsiz ); Wire.beginTransmission(adrs); Wire.write(buf,bufsiz); Wire.endTransmission(false); mrbc_free( vm, buf ); } buf = (uint8_t*) mrbc_alloc(vm, size); Wire.requestFrom(adrs, size); int i; for(i=0;i