uint8_t DFTwoWire::requestFrom(uint8_t address, uint8_t quantity, uint8_t sendStop) { if (quantity > BUFFER_LENGTH) quantity = BUFFER_LENGTH; /* Set slave address via ioctl */ i2c_setslave(i2c_fd, address); if(i2c_transfer) { /* Need to perform a combined read/write operation */ i2c_transfer = 0; if (sendStop == false) return 0; i2c_add_to_buf(address, 1, rxBuffer, quantity); if (!i2c_readwrite(i2c_fd)) { rxBufferIndex = 0; rxBufferLength = quantity; i2c_transfer = 0; return quantity; } else return 0; } if (i2c_readbytes(i2c_fd, rxBuffer, quantity) < 0) return 0; // set rx buffer iterator vars rxBufferIndex = 0; rxBufferLength = quantity; return quantity; }
I2CError i2c_tx(int bus, int iicaddr, void* buffer, int len) { I2C[bus].address = iicaddr; I2C[bus].is_write = TRUE; I2C[bus].registers = ((uint8_t*) buffer); I2C[bus].buffer = ((uint8_t*) (buffer))+1; I2C[bus].bufferLen = len-1; return i2c_readwrite(&I2C[bus]); }
I2CError i2c_rx(int bus, int iicaddr, const uint8_t* registers, int num_regs, void* buffer, int len) { if (num_regs != 1) return 1; I2C[bus].address = iicaddr; I2C[bus].is_write = FALSE; I2C[bus].registers = registers; I2C[bus].bufferLen = len; I2C[bus].buffer = (uint8_t*) buffer; return i2c_readwrite(&I2C[bus]); }
int i2c_write(unsigned bus, unsigned chip, unsigned addr, unsigned alen, const uint8_t *buf, unsigned len) { return i2c_readwrite(bus, chip, addr, alen, (void *)buf, len, 0); }
int i2c_read(unsigned bus, unsigned chip, unsigned addr, unsigned alen, uint8_t *buf, unsigned len) { return i2c_readwrite(bus, chip, addr, alen, buf, len, 1); }