Exemple #1
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.
   *
   */

  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;
}
Exemple #2
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;
}