diff options
author | laforge <laforge@e0336214-984f-0b4b-a45f-81c69e1f0ede> | 2006-10-14 12:34:38 +0000 |
---|---|---|
committer | laforge <laforge@e0336214-984f-0b4b-a45f-81c69e1f0ede> | 2006-10-14 12:34:38 +0000 |
commit | e404cccecd20a2418c2429cd182c18218e54bd28 (patch) | |
tree | 5a15b5ca51874f0f8e96ccc4ee0457a66de3cec7 /src/rfid_layer2.c | |
parent | 6e87a007525b313dcf2da194977bb1abdf62026f (diff) |
Prepare RFID compilation in firmware mode
- switch from linked lists to static arrays
- remove all non-handle dynamic allocations (at the expense of stack)
- declare all proto/reader/asic/layer2 structures as const
- wrap all handle allocations in macros that expand to references to
static structures in case of firmware mode
- update copyright notices
- add skeleton code for openpcd-inside-firmware driver
- update TODO with remaining TODO for firmware mode
git-svn-id: https://svn.gnumonks.org/trunk/librfid@1903 e0336214-984f-0b4b-a45f-81c69e1f0ede
Diffstat (limited to 'src/rfid_layer2.c')
-rw-r--r-- | src/rfid_layer2.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/rfid_layer2.c b/src/rfid_layer2.c index a6ee43f..ff6d2b0 100644 --- a/src/rfid_layer2.c +++ b/src/rfid_layer2.c @@ -24,19 +24,24 @@ #include <librfid/rfid.h> #include <librfid/rfid_layer2.h> -static struct rfid_layer2 *rfid_layer2_list; +static const struct rfid_layer2 *rfid_layer2s[] = { + [RFID_LAYER2_ISO14443A] = &rfid_layer2_iso14443a, + [RFID_LAYER2_ISO14443B] = &rfid_layer2_iso14443b, + [RFID_LAYER2_ISO15693] = &rfid_layer2_iso15693, +}; struct rfid_layer2_handle * rfid_layer2_init(struct rfid_reader_handle *rh, unsigned int id) { struct rfid_layer2 *p; - for (p = rfid_layer2_list; p; p = p->next) - if (p->id == id) - return p->fn.init(rh); + if (id >= ARRAY_SIZE(rfid_layer2s)) { + DEBUGP("unable to find matching layer2 protocol\n"); + return NULL; + } - DEBUGP("unable to find matching layer2 protocol\n"); - return NULL; + p = rfid_layer2s[id]; + return p->fn.init(rh); } int @@ -80,15 +85,6 @@ rfid_layer2_close(struct rfid_layer2_handle *ph) } int -rfid_layer2_register(struct rfid_layer2 *p) -{ - p->next = rfid_layer2_list; - rfid_layer2_list = p; - - return 0; -} - -int rfid_layer2_getopt(struct rfid_layer2_handle *ph, int optname, void *optval, unsigned int *optlen) { |