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; }
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; }