Beispiel #1
0
ReturnCode reader_connect(struct reader *reader,
			  int beep) {
  ReturnCode rc;

  if(reader->ftdic == NULL || reader->dev == NULL) {
    printf("reader entry null\n");
    return RC_NULL_ERROR;
  }

  if(ftdi_usb_open_dev(reader->ftdic, reader->dev) < 0){
    printf("ftdi usb open dev failed\n");
    return RC_IO_ERROR;
  }

  if((rc = reader_reset(reader)) != RC_SUCCESS){
    printf("reset failed\n");
    ftdi_usb_close(reader->ftdic);
    return rc;
  }

  if((rc = reader_purge(reader)) != RC_SUCCESS){
    printf("purge failed\n");
    ftdi_usb_close(reader->ftdic);
    return rc;
  }

  if(ftdi_set_baudrate(reader->ftdic, RFID1_BAUDRATE) < 0){
    printf("setbaudrate failed\n");
    ftdi_usb_close(reader->ftdic);
    return RC_IO_ERROR;
  }

  usleep(10000);


  if((rc = reader_ping(reader)) != RC_SUCCESS){
    ftdi_usb_close(reader->ftdic);
    return rc;
  }

  reader->connected = 1;

  if(beep) {
    reader_pass_beep(reader);
  }


  return RC_SUCCESS;
}
Beispiel #2
0
int reader_read(RingReader *reader, unsigned char *buf) {
  if (reader->read_index == reader->ring->write_index) {
    return 0;
  }
  CHECK_OVERFLOW;
  unsigned int size;
  ring_raw_read(reader->ring, (unsigned char*) &size, reader->read_index, sizeof(int));
  CHECK_OVERFLOW;
  ring_raw_read(reader->ring, buf, reader->read_index + sizeof(int), size);
  CHECK_OVERFLOW;
  reader->read_index += sizeof(int) + size;
  return size;
 overflow:
  reader_reset(reader);
  return READ_OVERFLOW;
}