X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=src%2Frfid_reader.c;h=39a4a073e99efdff2a6bcb4b937b84d8ddfc484a;hb=79e204d323cd6c465e1a3a53598a655304be1d7a;hp=9486caea786251ac39fb425a67ae200403473ce1;hpb=1fcc35aad699f3d40ca786b99c7255cf8aa55892;p=librfid diff --git a/src/rfid_reader.c b/src/rfid_reader.c index 9486cae..39a4a07 100644 --- a/src/rfid_reader.c +++ b/src/rfid_reader.c @@ -1,5 +1,5 @@ /* librfid - core reader handling - * (C) 2005 by Harald Welte + * (C) 2005-2006 by Harald Welte */ /* @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include @@ -22,30 +22,47 @@ #include #include +#include +#include +#include -static struct rfid_reader *rfid_reader_list; +static const struct rfid_reader *rfid_readers[] = { +#ifdef HAVE_LIBUSB +#ifdef ENABLE_CM5121 + [RFID_READER_CM5121] = &rfid_reader_cm5121, +#endif + [RFID_READER_OPENPCD] = &rfid_reader_openpcd, +#endif +#ifdef ENABLE_SPIDEV + [RFID_READER_SPIDEV] = &rfid_reader_spidev, +#endif +}; struct rfid_reader_handle * rfid_reader_open(void *data, unsigned int id) { - struct rfid_reader *p; + const struct rfid_reader *p; - for (p = rfid_reader_list; p; p = p->next) - if (p->id == id) - return p->open(data); + if (id >= ARRAY_SIZE(rfid_readers)) { + DEBUGP("unable to find matching reader\n"); + return NULL; + } - DEBUGP("unable to find matching reader\n"); - return NULL; + p = rfid_readers[id]; + if (!p) + return NULL; + + return p->open(data); } int -rfid_reader_transcieve(struct rfid_reader_handle *rh, +rfid_reader_transceive(struct rfid_reader_handle *rh, enum rfid_frametype frametype, const unsigned char *tx_buf, unsigned int len, unsigned char *rx_buf, unsigned int *rx_len, u_int64_t timeout, unsigned int flags) { - return rh->reader->transcieve(rh, frametype, tx_buf, len, rx_buf, + return rh->reader->transceive(rh, frametype, tx_buf, len, rx_buf, rx_len, timeout, flags); } @@ -54,12 +71,3 @@ rfid_reader_close(struct rfid_reader_handle *rh) { rh->reader->close(rh); } - -int -rfid_reader_register(struct rfid_reader *r) -{ - r->next = rfid_reader_list; - rfid_reader_list = r; - - return 0; -}