X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=include%2Flibrfid%2Frfid_layer2_iso15693.h;h=495eebbfd3c1d18cf910acf6409a42fc1f4a37b7;hb=a7c201deb99239d6d98a45b3cc642d8554231a22;hp=f84a6e190df878e04d8c259b0761a40f9d086e46;hpb=6d7eb8fc5c759ec2b69659e78fb3c0f0a0c0d6b0;p=librfid diff --git a/include/librfid/rfid_layer2_iso15693.h b/include/librfid/rfid_layer2_iso15693.h index f84a6e1..495eebb 100644 --- a/include/librfid/rfid_layer2_iso15693.h +++ b/include/librfid/rfid_layer2_iso15693.h @@ -4,49 +4,78 @@ #include /* -07h = TagIt -04h = I.CODE -05h = Infineon -02h = ST -*/ + * ISO15693 tag manufacturer codes as found at + * http://rfid-handbook.de/forum/read.php?5,437,580#msg-580 + * + * 01h = Motorola + * 02h = ST Microelectronics + * 03h = Hitachi + * 04h = Philips/NXP I.CODE + * 05h = Siemens/Infineon + * 06h = Cylinc + * 07h = Texas Instruments TagIt + * 08h = Fujitsu Limited + * 09h = Mashushita Electric Industrial + * 0Ah = NEC + * 0Bh = Oki Electric + * 0Ch = Toshiba + * 0Dh = Mishubishi Electric + * 0Eh = Samsung Electronics + * 0Fh = Hyundai Electronics + * 10h = LG Semiconductors + * 16h = EMarin Microelectronic + * + */ /* 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; + unsigned int vcd_ask100:1, + vicc_two_subc:1, + vicc_fast:1, + single_slot:1, + use_afi:1, + vcd_out256:1; + u_int8_t afi; /* appplication family identifier */ + u_int8_t dsfid; /* data storage format identifier */ }; -enum iso15693_state { +enum rfid_15693_state { ISO15693_STATE_ERROR, ISO15693_STATE_NONE, + ISO15693_STATE_ANTICOL_RUNNING, +}; + +enum rfid_15693_opt { + RFID_OPT_15693_MOD_DEPTH = 0x00010001, + RFID_OPT_15693_VCD_CODING = 0x00010002, + RFID_OPT_15693_VICC_SUBC = 0x00010003, + RFID_OPT_15693_VICC_SPEED = 0x00010004, + RFID_OPT_15693_VCD_SLOTS = 0x00010005, + RFID_OPT_15693_USE_AFI = 0x00010006, + RFID_OPT_15693_AFI = 0x00010007, + RFID_OPT_15693_DSFID = 0x00010008, +}; + +enum rfid_15693_opt_mod_depth { + RFID_15693_MOD_10ASK = 0x01, + RFID_15693_MOD_100ASK = 0x02, +}; + +enum rfid_15693_opt_vcd_coding { + RFID_15693_VCD_CODING_1OUT256 = 0x01, + RFID_15693_VCD_CODING_1OUT4 = 0x02, +}; + +enum rfid_15693_opt_vicc_subc { + RFID_15693_VICC_SUBC_SINGLE = 0x01, + RFID_15693_VICC_SUBC_DUAL = 0x02, +}; + +enum rfid_15693_opt_vicc_speed { + RFID_15693_VICC_SPEED_SLOW = 0x01, + RFID_15693_VICC_SPEED_FAST = 0x02, }; #ifdef __LIBRFID__ @@ -54,7 +83,7 @@ enum iso15693_state { #define ISO15693_UID_LEN 8 #define ISO15693_CRC_LEN 2 -/* ISO 15693-3, Ch. 7.2 Table 3*/ +/* ISO 15693-3, Ch. 7.2 Table 3 */ enum iso15693_request_flags { RFID_15693_F_SUBC_TWO = 0x01, RFID_15693_F_RATE_HIGH = 0x02, @@ -83,7 +112,11 @@ struct iso15693_request { u_int8_t data[0]; } __attribute__ ((packed)); - +/* ISO 15963-3, Ch. 7.2 Figure 5 */ +struct iso15693_response { + u_int8_t flags; + u_int8_t data[0]; +} __attribute__ ((packed)); /* ISO 15693, Ch. 7.3 Table 6 */ enum iso15693_response_flags { @@ -101,6 +134,7 @@ enum iso15693_response_errors { RFID_15693_ERR_BLOCK_LOCKED_CH = 0x12, RFID_15693_ERR_BLOCK_NOTPROG = 0x13, RFID_15693_ERR_BLOCK_NOTLOCK = 0x14, + /* 0xA0 .. 0xDF Custom Command error Codes */ }; /* ISO 15693, Ch. 7.4 */ @@ -129,11 +163,51 @@ enum iso15693_commands { ISO15693_CMD_WRITE_DSFID = 0x29, ISO15693_CMD_LOCK_DSFID = 0x2a, ISO15693_CMD_GET_SYSINFO = 0x2b, - ISO15693_CMD_GET_BLOCK_SECURITY = 0x2c + ISO15693_CMD_GET_BLOCK_SECURITY = 0x2c, /* Custom 0xa0 .. 0xdf */ + ICODE_CMD_INVENTORY_READ = 0xa0, + ICODE_CMD_FAST_INVENTORY_READ = 0xa1, + ICODE_CMD_EAS_SET = 0xa2, + ICODE_CMD_EAS_RESET = 0xa3, + ICODE_CMD_EAS_LOCK = 0xa4, + ICODE_CMD_EAS_ALARM = 0xa5, /* Proprietary 0xe0 .. 0xff */ }; +struct iso15693_anticol_cmd { + struct iso15693_request req; + unsigned char mask_len; + unsigned char mask_bits[ISO15693_UID_LEN]; + unsigned char current_slot; +} __attribute__((packed)); + +struct iso15693_anticol_cmd_afi { + struct iso15693_request req; + unsigned char afi; + unsigned char mask_len; + unsigned char mask_bits[ISO15693_UID_LEN]; +} __attribute__((packed)); + +/* Figure 11, Chapter 9.2.1 */ +struct iso15693_anticol_resp { + struct iso15693_response resp; + u_int8_t dsfid; + u_int8_t uuid[ISO15693_UID_LEN]; +} __attribute__((packed)); + + +#define ISO15693_T_SLOW 0 +#define ISO15693_T_FAST 1 +enum iso15693_t { + ISO15693_T1, + ISO15693_T2, + ISO15693_T3, + ISO15693_T4, + ISO15693_T4_WRITE, +}; + +/* in microseconds as per Chapter 8.4 table 8 */ +extern const unsigned int iso15693_timing[2][5]; #include extern const struct rfid_layer2 rfid_layer2_iso15693;