uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity, uint32_t iaddress, uint8_t isize, uint8_t sendStop) { if (quantity > BUFFER_LENGTH) quantity = BUFFER_LENGTH; // perform blocking read into buffer int readed = 0; TWI_StartRead(twi, address, iaddress, isize); do { // Stop condition must be set during the reception of last byte if (readed + 1 == quantity) TWI_SendSTOPCondition( twi); if (TWI_WaitByteReceived(twi, RECV_TIMEOUT)) rxBuffer[readed++] = TWI_ReadByte(twi); else break; } while (readed < quantity); TWI_WaitTransferComplete(twi, RECV_TIMEOUT); // set rx buffer iterator vars rxBufferIndex = 0; rxBufferLength = readed; return readed; }
uint8_t TwoWire::requestFrom(uint8_t address, uint8_t quantity) { if (quantity > BUFFER_LENGTH) { quantity = BUFFER_LENGTH; } // perform blocking read into buffer int readed = 0; TWI_StartRead(twi, address, 0, 0); do { // Stop condition must be set during the reception of last byte if (readed + 1 == quantity) { TWI_SendSTOPCondition( twi); } TWI_WaitByteReceived(twi, RECV_TIMEOUT); rxBuffer[readed++] = twi_read_byte(twi); } while (readed < quantity); TWI_WaitTransferComplete(twi, RECV_TIMEOUT); // set rx buffer iterator vars rxBufferIndex = 0; rxBufferLength = readed; return readed; }