diff options
| author | laforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2006-09-12 17:35:30 +0000 | 
|---|---|---|
| committer | laforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2006-09-12 17:35:30 +0000 | 
| commit | d256545b2fd62d78910efcc6273c3b70abd3aa13 (patch) | |
| tree | a05e17ec752cfbcc0b79fdbfba81fb949545a112 /firmware/include/librfid | |
| parent | 04e0441914eeb25e042189679b55c9577fc96d2a (diff) | |
move to new directory
git-svn-id: https://svn.openpcd.org:2342/trunk@191 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
Diffstat (limited to 'firmware/include/librfid')
| -rw-r--r-- | firmware/include/librfid/rfid.h | 24 | ||||
| -rw-r--r-- | firmware/include/librfid/rfid_layer2.h | 76 | ||||
| -rw-r--r-- | firmware/include/librfid/rfid_layer2_iso14443a.h | 87 | ||||
| -rw-r--r-- | firmware/include/librfid/rfid_layer2_iso14443b.h | 85 | ||||
| -rw-r--r-- | firmware/include/librfid/rfid_layer2_iso15693.h | 55 | ||||
| -rw-r--r-- | firmware/include/librfid/rfid_protocol_mifare_classic.h | 28 | 
6 files changed, 355 insertions, 0 deletions
diff --git a/firmware/include/librfid/rfid.h b/firmware/include/librfid/rfid.h new file mode 100644 index 0000000..308f46e --- /dev/null +++ b/firmware/include/librfid/rfid.h @@ -0,0 +1,24 @@ +#ifndef _RFID_H +#define _RFID_H + +#include <os/dbgu.h> + +#define rfid_hexdump hexdump + +enum rfid_frametype { +	RFID_14443A_FRAME_REGULAR, +	RFID_14443B_FRAME_REGULAR, +	RFID_MIFARE_FRAME, +}; + +struct rfid_asic_handle { +}; + +struct rfid_asic { +}; + +#define RAH NULL + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +#endif diff --git a/firmware/include/librfid/rfid_layer2.h b/firmware/include/librfid/rfid_layer2.h new file mode 100644 index 0000000..3dd54a2 --- /dev/null +++ b/firmware/include/librfid/rfid_layer2.h @@ -0,0 +1,76 @@ +#ifndef _RFID_LAYER2_H +#define _RFID_LAYER2_H + +#include <sys/types.h> +#include <librfid/rfid.h> + +struct rfid_layer2_handle; +struct rfid_reader_handle; + +enum rfid_layer2_id { +	RFID_LAYER2_NONE, +	RFID_LAYER2_ISO14443A, +	RFID_LAYER2_ISO14443B, +	RFID_LAYER2_ISO15693, +}; + +struct rfid_layer2_handle *rfid_layer2_init(struct rfid_reader_handle *rh, +					    unsigned int id); +int rfid_layer2_open(struct rfid_layer2_handle *l2h); +int rfid_layer2_transceive(struct rfid_layer2_handle *l2h, +			   enum rfid_frametype frametype, +			   const unsigned char *tx_buf, unsigned int tx_len, +			   unsigned char *rx_buf, unsigned int *rx_len, +			   u_int64_t timeout, unsigned int flags); +int rfid_layer2_close(struct rfid_layer2_handle *l2h); +int rfid_layer2_fini(struct rfid_layer2_handle *l2h); +int rfid_layer2_getopt(struct rfid_layer2_handle *ph, int optname, +			void *optval, unsigned int *optlen); +int rfid_layer2_setopt(struct rfid_layer2_handle *ph, int optname, +			const void *optval, unsigned int optlen); + +#ifdef __LIBRFID__ + +#include <librfid/rfid_layer2_iso14443a.h> +#include <librfid/rfid_layer2_iso14443b.h> +#include <librfid/rfid_layer2_iso15693.h> + +struct rfid_layer2 { +	unsigned int id; +	char *name; + +	struct { +		struct rfid_layer2_handle *(*init)(struct rfid_reader_handle *h); +		int (*open)(struct rfid_layer2_handle *h); +		int (*transceive)(struct rfid_layer2_handle *h, +				  enum rfid_frametype frametype, +				  const unsigned char *tx_buf,  +				  unsigned int tx_len, unsigned char *rx_buf,  +				  unsigned int *rx_len, u_int64_t timeout, +				  unsigned int flags); +		int (*close)(struct rfid_layer2_handle *h); +		int (*fini)(struct rfid_layer2_handle *h); +		int (*getopt)(struct rfid_layer2_handle *h, +			      int optname, void *optval, unsigned int *optlen); +		int (*setopt)(struct rfid_layer2_handle *h, +			      int optname, const void *optval, +			      unsigned int optlen); +	} fn; +	struct rfid_layer2 *next; +}; + +struct rfid_layer2_handle { +	struct rfid_reader_handle *rh; +	unsigned char uid[10];	/* triple size 14443a id is 10 bytes */ +	unsigned int uid_len; +	union { +		struct iso14443a_handle iso14443a; +		struct iso14443b_handle iso14443b; +		struct iso15693_handle iso15693; +	} priv; +	struct rfid_layer2 *l2; +}; + +#endif /* __LIBRFID__ */ + +#endif diff --git a/firmware/include/librfid/rfid_layer2_iso14443a.h b/firmware/include/librfid/rfid_layer2_iso14443a.h new file mode 100644 index 0000000..e1ecd36 --- /dev/null +++ b/firmware/include/librfid/rfid_layer2_iso14443a.h @@ -0,0 +1,87 @@ +#ifndef _RFID_ISO14443A_H +#define _RFID_ISO14443A_H + + +enum rfid_14443a_opt { +	RFID_OPT_14443A_SPEED_RX	= 0x00000001, +	RFID_OPT_14443A_SPEED_TX	= 0x00000002, +}; + +enum rfid_14443_opt_speed { +	RFID_14443A_SPEED_106K	= 0x01, +	RFID_14443A_SPEED_212K	= 0x02, +	RFID_14443A_SPEED_424K  = 0x04, +	RFID_14443A_SPEED_848K  = 0x08, +}; + +#include <sys/types.h> + +/* protocol definitions */ + +/* ISO 14443-3, Chapter 6.3.1 */ +enum iso14443a_sf_cmd { +	ISO14443A_SF_CMD_REQA		= 0x26, +	ISO14443A_SF_CMD_WUPA		= 0x52, +	ISO14443A_SF_CMD_OPT_TIMESLOT	= 0x35,		/* Annex C */ +	/* 40 to 4f and 78 to 7f: proprietary */ +}; + +struct iso14443a_atqa { +	u_int8_t bf_anticol:5, +		 rfu1:1, +		 uid_size:2; +	u_int8_t proprietary:4, +		 rfu2:4; +} __attribute__ ((packed)); + +#define ISO14443A_HLTA		0x5000 + +/* ISO 14443-3, Chapter 6.3.2 */ +struct iso14443a_anticol_cmd { +	unsigned char		sel_code; +	unsigned char		nvb; +	unsigned char		uid_bits[5]; +} __attribute__ ((packed)); + +enum iso14443a_anticol_sel_code { +	ISO14443A_AC_SEL_CODE_CL1	= 0x93, +	ISO14443A_AC_SEL_CODE_CL2	= 0x95, +	ISO14443A_AC_SEL_CODE_CL3	= 0x97, +}; + +#define ISO14443A_BITOFCOL_NONE         0xffffffff + +struct iso14443a_handle { +	unsigned int state; +	unsigned int level; +	unsigned int tcl_capable; +}; + +enum iso14443a_level { +	ISO14443A_LEVEL_NONE, +	ISO14443A_LEVEL_CL1, +	ISO14443A_LEVEL_CL2, +	ISO14443A_LEVEL_CL3, +}; + +enum iso14443a_state { +	ISO14443A_STATE_ERROR, +	ISO14443A_STATE_NONE, +	ISO14443A_STATE_REQA_SENT, +	ISO14443A_STATE_ATQA_RCVD, +	ISO14443A_STATE_NO_BITFRAME_ANTICOL, +	ISO14443A_STATE_ANTICOL_RUNNING, +	ISO14443A_STATE_SELECTED, +}; + +/* Section 6.1.2 values in usec, rounded up to next usec */ +#define ISO14443A_FDT_ANTICOL_LAST1	92	/* 1236 / fc = 91.15 usec */ +#define ISO14443A_FDT_ANTICOL_LAST0	87	/* 1172 / fc = 86.43 usec */ + +#define ISO14443_CARRIER_FREQ	13560000 +#define ISO14443A_FDT_OTHER_LAST1(n)	(((n*128+84)*1000000)/ISO14443_CARRIER_FREQ) + +#include <librfid/rfid_layer2.h> +struct rfid_layer2 rfid_layer2_iso14443a; + +#endif /* _ISO14443A_H */ diff --git a/firmware/include/librfid/rfid_layer2_iso14443b.h b/firmware/include/librfid/rfid_layer2_iso14443b.h new file mode 100644 index 0000000..037c117 --- /dev/null +++ b/firmware/include/librfid/rfid_layer2_iso14443b.h @@ -0,0 +1,85 @@ +#ifndef _RFID_LAYER2_ISO14443B_H +#define _RFID_LAYER2_ISO14443B_H + +#ifdef __LIBRFID__ + +struct iso14443b_atqb { +	unsigned char fifty; +	unsigned char pupi[4]; +	unsigned char app_data[4]; +	struct { +		unsigned char bit_rate_capability; +		unsigned char protocol_type:4, +			      max_frame_size:4; +		unsigned char fo:2, +			      adc:2, +			      fwi:4; +	} protocol_info; +} __attribute__((packed)); + +struct iso14443b_attrib_hdr { +	unsigned char one_d; +	unsigned char identifier[4]; +	struct { +		unsigned char rfu:2, +			      sof:1, +			      eof:1, +			      min_tr1:2, +			      min_tr0:2; +	} param1; +	struct { +		unsigned char fsdi:4, +			      spd_out:2, +			      spd_in:2; +	} param2; +	struct { +		unsigned char protocol_type:4, +			      rfu:4; +	} param3; +	struct { +		unsigned char cid:4, +			      rfu:4; +	} param4; +} __attribute__((packed)); + +struct iso14443b_handle { +	unsigned int tcl_capable; /* do we support T=CL */ + +	unsigned int cid;	/* Card ID */ + +	unsigned int fsc;	/* max. frame size card */ +	unsigned int fsd;	/* max. frame size reader */ + +	unsigned int fwt;	/* frame waiting time (in usec) */ + +	unsigned int mbl;	/* maximum buffer length */ + +	unsigned int tr0;	/* pcd-eof to picc-subcarrier-on */ +	unsigned int tr1;	/* picc-subcarrier-on to picc-sof */ + +	unsigned int flags; +	unsigned int state; +}; + +enum { +	ISO14443B_CID_SUPPORTED = 0x01, +	ISO14443B_NAD_SUPPORTED = 0x02, +}; + +enum { +	ISO14443B_STATE_ERROR, +	ISO14443B_STATE_NONE, +	ISO14443B_STATE_REQB_SENT, +	ISO14443B_STATE_ATQB_RCVD, +	ISO14443B_STATE_ATTRIB_SENT, +	ISO14443B_STATE_SELECTED, +	ISO14443B_STATE_HLTB_SENT, +	ISO14443B_STATE_HALTED, +}; + +#include <librfid/rfid_layer2.h> +struct rfid_layer2 rfid_layer2_iso14443b; + +#endif /* __LIBRFID__ */ + +#endif diff --git a/firmware/include/librfid/rfid_layer2_iso15693.h b/firmware/include/librfid/rfid_layer2_iso15693.h new file mode 100644 index 0000000..d91b4ec --- /dev/null +++ b/firmware/include/librfid/rfid_layer2_iso15693.h @@ -0,0 +1,55 @@ +#ifndef _RFID_ISO15693_H +#define _RFID_ISO15693_H + +#include <sys/types.h> + +/* +07h = TagIt +04h = I.CODE +05h = Infineon +02h = ST +*/ + +/* protocol definitions */ + +struct iso15693_handle; + +struct iso15693_transport { +	unsigned char	*name; + +	struct { +		int (*init)(struct iso15693_handle *handle); +		int (*fini)(struct iso15693_handle *handle); + +#if 0 +		int (*transceive_sf)(struct iso14443a_handle *handle, +				     unsigned char cmd, +				     struct iso14443a_atqa *atqa); +		int (*transceive_acf)(struct iso14443a_handle *handle, +				      struct iso14443a_anticol_cmd *acf, +				      unsigned int *bit_of_col); +#endif +		int (*transceive)(struct iso15693_handle *handle, +				  const unsigned char *tx_buf, +				  unsigned int tx_len, +				  unsigned char *rx_buf, +				  unsigned int *rx_len); +	} fn; + +	union { +	} priv; +}; + +struct iso15693_handle { +	unsigned int state; +}; + +enum iso15693_state { +	ISO15693_STATE_ERROR, +	ISO15693_STATE_NONE, +}; + +#include <librfid/rfid_layer2.h> +extern struct rfid_layer2 rfid_layer2_iso15693; + +#endif /* _ISO15693_H */ diff --git a/firmware/include/librfid/rfid_protocol_mifare_classic.h b/firmware/include/librfid/rfid_protocol_mifare_classic.h new file mode 100644 index 0000000..e6b2400 --- /dev/null +++ b/firmware/include/librfid/rfid_protocol_mifare_classic.h @@ -0,0 +1,28 @@ +#ifndef _MIFARE_CLASSIC_H + +#define MIFARE_CL_KEYA_DEFAULT	"\xa0\xa1\xa2\xa3\xa4\xa5" +#define MIFARE_CL_KEYB_DEFAULT	"\xb0\xb1\xb2\xb3\xb4\xb5" + +#define MIFARE_CL_KEYA_DEFAULT_INFINEON	"\xff\xff\xff\xff\xff\xff" +#define MIFARE_CL_KEYB_DEFAULT_INFINEON MIFARE_CL_KEYA_DEFAULT_INFINEON + +#define MIFARE_CL_PAGE_MAX	0xff + +#define RFID_CMD_MIFARE_AUTH1A	0x60 +#define RFID_CMD_MIFARE_AUTH1B	0x61 + +#ifdef __LIBRFID__ + +extern struct rfid_protocol rfid_protocol_mfcl; + + +#define MIFARE_CL_CMD_WRITE16	0xA0 +#define MIFARE_CL_CMD_READ	0x30 + +#define MIFARE_CL_RESP_ACK	0x0a +#define MIFARE_CL_RESP_NAK	0x00 + + +#endif /* __LIBRFID__ */ + +#endif /* _MIFARE_CLASSIC_H */  | 
