Exemple #1
0
int
serialReadChunk (
  SerialDevice *serial,
  void *buffer, size_t *offset, size_t count,
  int initialTimeout, int subsequentTimeout
) {
  unsigned char *byte = buffer;
  const unsigned char *const first = byte;
  const unsigned char *const end = first + count;
  int timeout = *offset? subsequentTimeout: initialTimeout;

  if (!serialFlushAttributes(serial)) return 0;
  byte += *offset;

  while (byte < end) {
    ssize_t result = serialGetData(serial, byte, 1, timeout, subsequentTimeout);

    if (!result) {
      result = -1;
      errno = EAGAIN;
    }

    if (result == -1) {
      if (errno == EINTR) continue;
      return 0;
    }

    byte += 1;
    *offset += 1;
    timeout = subsequentTimeout;
  }

  return 1;
}
Exemple #2
0
ssize_t
serialReadData (
  SerialDevice *serial,
  void *buffer, size_t size,
  int initialTimeout, int subsequentTimeout
) {
  if (!serialFlushAttributes(serial)) return -1;
  return serialGetData(serial, buffer, size, initialTimeout, subsequentTimeout);
}
Exemple #3
0
uint8_t *serialCommand(void *driverVoid, uint16_t transactions, uint32_t *buffer)
{
    driver_t *driver = (driver_t *)driverVoid;
    serial_port_t *port = (serial_port_t *)driver->driverContext;
    
    uint8_t *returnBuffer = (uint8_t *)malloc(transactions);
    if (returnBuffer == NULL) {
        return NULL;
    }
    
    // Send the transaction data to the serial port
    serialPutData(port, transactions * 4, (uint8_t *)buffer);
    serialGetData(port, transactions, returnBuffer);
    
    return returnBuffer;
}