int FTDIDevice_ReadByteSync(FTDIDevice *dev, FTDIInterface interface, uint8_t *byte) { /* * This is a simplified synchronous read, intended for bit-banging mode. * Ignores the modem/buffer status bytes, returns just the data. * */ uint8_t packet[3]; int transferred, err; err = libusb_bulk_transfer(dev->handle, FTDI_EP_IN(interface), packet, sizeof packet, &transferred, FTDI_COMMAND_TIMEOUT); if (err < 0) { return err; } if (transferred != sizeof packet) { return -1; } if (byte) { *byte = packet[sizeof packet - 1]; } return 0; }
int FTDIDevice_ReadByteSync(FTDIDevice *dev, FTDIInterface interface, uint8_t *byte) { /* * This is a simplified synchronous read, intended for bit-banging mode. * Ignores the modem/buffer status bytes, returns just the data. * * To make sure we have fresh data (and not the last state that was * hanging out in the chip's read buffer) we'll read many packets * and discard all but the last read. */ uint8_t packet[FTDI_PACKET_SIZE * 16]; int transferred, err; err = libusb_bulk_transfer(dev->handle, FTDI_EP_IN(interface), packet, sizeof packet, &transferred, FTDI_COMMAND_TIMEOUT); if (err < 0) { return err; } if (transferred != sizeof packet) { return -1; } if (byte) { *byte = packet[sizeof packet - 1]; } return 0; }