X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=include%2Flibrfid%2Frfid_asic_rc632.h;h=d8adac7884a002299ca7983558a9c139af30e71a;hb=967687ffce29d0034a16be9a0babdc91bf3187cd;hp=3aebd1ff78e83e840359227efaeeea63d969d1c9;hpb=e76727a55961169ff14d799aaaf7f69f8ae8bfe9;p=librfid diff --git a/include/librfid/rfid_asic_rc632.h b/include/librfid/rfid_asic_rc632.h index 3aebd1f..d8adac7 100644 --- a/include/librfid/rfid_asic_rc632.h +++ b/include/librfid/rfid_asic_rc632.h @@ -5,6 +5,7 @@ struct rfid_asic_transport_handle; #include #include +#include struct rfid_asic_rc632_transport { struct { @@ -28,13 +29,13 @@ struct rfid_asic_handle; struct iso14443a_atqa; struct iso14443a_anticol_cmd; +struct iso15693_anticol_cmd; struct rfid_asic_rc632 { struct { - int (*power_up)(struct rfid_asic_handle *h); - int (*power_down)(struct rfid_asic_handle *h); - int (*turn_on_rf)(struct rfid_asic_handle *h); - int (*turn_off_rf)(struct rfid_asic_handle *h); + int (*power)(struct rfid_asic_handle *h, int on); + int (*rf_power)(struct rfid_asic_handle *h, int on); + int (*init)(struct rfid_asic_handle *h, enum rfid_layer2_id); int (*transceive)(struct rfid_asic_handle *h, enum rfid_frametype, const u_int8_t *tx_buf, @@ -44,7 +45,6 @@ struct rfid_asic_rc632 { u_int64_t timeout, unsigned int flags); struct { - int (*init)(struct rfid_asic_handle *h); int (*transceive_sf)(struct rfid_asic_handle *h, u_int8_t cmd, struct iso14443a_atqa *atqa); @@ -56,14 +56,17 @@ struct rfid_asic_rc632 { unsigned int speed); } iso14443a; struct { - int (*init)(struct rfid_asic_handle *h); - } iso14443b; - struct { - int (*init)(struct rfid_asic_handle *h); + int (*transceive_ac)(struct rfid_asic_handle *h, + const struct iso15693_anticol_cmd *acf, + unsigned int acf_len, + struct iso15693_anticol_resp *resp, + unsigned int *rx_len, char *bit_of_col); } iso15693; struct { int (*setkey)(struct rfid_asic_handle *h, const unsigned char *key); + int (*setkey_ee)(struct rfid_asic_handle *h, + const unsigned int addr); int (*auth)(struct rfid_asic_handle *h, u_int8_t cmd, u_int32_t serno, u_int8_t block); } mifare_classic; @@ -93,5 +96,69 @@ struct rfid_asic_rc632_impl { extern struct rfid_asic_handle * rc632_open(struct rfid_asic_transport_handle *th); extern void rc632_close(struct rfid_asic_handle *h); +extern int rc632_register_dump(struct rfid_asic_handle *handle, u_int8_t *buf); + + +/* register decoding inlines... */ +#define DEBUGP_ERROR_FLAG(value) do {DEBUGP("error_flag: 0x%0.2x",value); \ + if (value & RC632_ERR_FLAG_CRC_ERR ) \ + DEBUGPC(", CRC"); \ + if (value & RC632_ERR_FLAG_COL_ERR ) \ + DEBUGPC(", COL"); \ + if (value & RC632_ERR_FLAG_FRAMING_ERR ) \ + DEBUGPC(", FRAMING"); \ + if (value & RC632_ERR_FLAG_PARITY_ERR) \ + DEBUGPC(", PARITY"); \ + if (value & RC632_ERR_FLAG_KEY_ERR ) \ + DEBUGPC(", KEY"); \ + if (value & RC632_ERR_FLAG_ACCESS_ERR ) \ + DEBUGPC(", ACCESS"); \ + DEBUGPC("\n");} while (0); + +#define DEBUGP_STATUS_FLAG(foo) do {\ + DEBUGP("status_flag: 0x%0.2x",foo); \ + if (foo & RC632_STAT_ERR ) \ + DEBUGPC(", ERR"); \ + if (foo & RC632_STAT_HIALERT ) \ + DEBUGPC(", Hi"); \ + if (foo & RC632_STAT_IRQ ) \ + DEBUGPC(", IRQ"); \ + if (foo & RC632_STAT_LOALERT ) \ + DEBUGPC(", Lo"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_AWAITINGRX ) \ + DEBUGPC(", mAwaitingRX"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_GOTORX ) \ + DEBUGPC(", mGotoRX"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_IDLE ) \ + DEBUGPC(", mIdle"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_PREPARERX ) \ + DEBUGPC(", mPrepareRX"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_RECV ) \ + DEBUGPC(", mRX"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_TXDATA ) \ + DEBUGPC(", mTXData"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_TXEOF ) \ + DEBUGPC(", mTXeof"); \ + if ((foo & RC632_STAT_MODEM_MASK) == RC632_STAT_MODEM_TXSOF ) \ + DEBUGPC(", mTXsof"); \ + DEBUGPC("\n"); } while (0); + +#define DEBUGP_INTERRUPT_FLAG(foo) do {\ + DEBUGP("interrupt_flag: 0x%0.2x",foo); \ + if (foo & RC632_INT_HIALERT) \ + DEBUGPC(", HiA"); \ + if (foo & RC632_INT_LOALERT) \ + DEBUGPC(", LoA"); \ + if (foo & RC632_INT_IDLE) \ + DEBUGPC(", IDLE"); \ + if (foo & RC632_INT_RX) \ + DEBUGPC(", RX"); \ + if (foo & RC632_INT_TX) \ + DEBUGPC(", TX"); \ + if (foo & RC632_INT_TIMER) \ + DEBUGPC(", TIMER"); \ + if (foo & RC632_INT_SET) \ + DEBUGPC(", SET"); \ + DEBUGPC("\n"); } while (0); #endif