20 #if defined(__AVR__) || defined(DOXYGEN) // AVR only
53 void *buf,
size_t nbytes, uint8_t option) {
54 uint8_t* p =
reinterpret_cast<uint8_t*
>(buf);
82 uint8_t* p =
reinterpret_cast<uint8_t*
>(buf);
84 for (
size_t i = 0; i < nbytes; i++) {
88 for (
size_t i = 0; i < nbytes; i++) {
116 SoftI2cMaster::SoftI2cMaster(uint8_t sclPin, uint8_t sdaPin) {
117 begin(sclPin, sdaPin);
131 _sclBit = digitalPinToBitMask(sclPin);
132 port = digitalPinToPort(sclPin);
133 _sclDDR = portModeRegister(port);
134 volatile uint8_t* sclOutReg = portOutputRegister(port);
137 _sdaBit = digitalPinToBitMask(sdaPin);
138 port = digitalPinToPort(sdaPin);
139 _sdaDDR = portModeRegister(port);
140 _sdaInReg = portInputRegister(port);
141 volatile uint8_t* sdaOutReg = portOutputRegister(port);
146 *sclOutReg &= ~_sclBit;
147 *sdaOutReg &= ~_sdaBit;
167 for (uint8_t i = 0; i < 8; i++) {
173 if (readSda()) b |= 1;
217 for (uint8_t m = 0X80; m != 0; m >>= 1) {
232 uint8_t rtn = readSda();
virtual uint8_t read(uint8_t last)=0
bool transfer(uint8_t addressRW, void *buf, size_t nbyte, uint8_t option=I2C_STOP)
const uint8_t STATE_TX_DATA_NACK
const uint8_t I2C_REP_START
uint8_t read(uint8_t last)
AVR Software I2C library.
const uint8_t STATE_TX_ADDR_NACK
const uint8_t STATE_RX_DATA
const uint8_t STATE_REP_START
bool transferContinue(void *buf, size_t nbyte, uint8_t option=I2C_STOP)
const uint8_t STATE_TX_DATA
const uint8_t I2C_CONTINUE
void begin(uint8_t sclPin, uint8_t sdaPin)
virtual bool write(uint8_t data)=0
const uint8_t STATE_RX_ADDR_NACK