SakuraIO

Fork of SakuraIO by SAKURA Internet

SakuraIO_I2C.cpp

Committer:
spiralray
Date:
2016-11-19
Revision:
0:8d34375d954c
Child:
1:20e1dfe45dab

File content as of revision 0:8d34375d954c:

#include "mbed.h"
#include "SakuraIO.h"
#include "SakuraIO/debug.h"

#define SAKURAIO_SLAVE_ADDR 0x4F

#define MODE_IDLE  0x00
#define MODE_WRITE 0x01
#define MODE_READ  0x02

void SakuraIO_I2C::begin(){
  mode = MODE_IDLE;
}

void SakuraIO_I2C::end(){
  switch(mode){
    case MODE_WRITE:
      i2c.stop();
      break;
    case MODE_READ:
      i2c.read(true);
      break;
  }

  mode = MODE_IDLE;
}

void SakuraIO_I2C::sendByte(uint8_t data){
  if(mode != MODE_WRITE){
    dbgln("beginTr");
    i2c.start();
    i2c.write(SAKURAIO_SLAVE_ADDR<<1);
    mode = MODE_WRITE;
  }
  dbg("Write=");
  dbgln(data);
  i2c.write(data);
}


uint8_t SakuraIO_I2C::startReceive(uint8_t length){
  dbgln("endTransmission");
  i2c.stop();
  dbg("requestForm=");
  dbgln(length);
  i2c.start();
  i2c.write(SAKURAIO_SLAVE_ADDR<<1 | 1);
  mode = MODE_READ;
}

uint8_t SakuraIO_I2C::receiveByte(){
  return i2c.read(true);
}

uint8_t SakuraIO_I2C::receiveByte(bool stop){
  uint8_t ret = 0;
  ret = i2c.read(!stop);
  dbg("Read=");
  dbgln(ret);
  return ret;
}

SakuraIO_I2C::SakuraIO_I2C(I2C &_i2c): i2c(_i2c){
  mode = MODE_IDLE;
}