rfal_picopass.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include <furi_hal_nfc.h>
  3. #define RFAL_PICOPASS_UID_LEN 8
  4. #define PICOPASS_BLOCK_LEN 8
  5. enum {
  6. // PicoPass command bytes:
  7. // Low nibble used for command
  8. // High nibble used for options and checksum (MSB)
  9. // The only option we care about in 15693 mode is the key
  10. // which is only used by READCHECK, so for simplicity we
  11. // don't bother breaking down the command and flags into parts
  12. // READ: ADDRESS(1) CRC16(2) -> DATA(8) CRC16(2)
  13. // IDENTIFY: No args -> ASNB(8) CRC16(2)
  14. RFAL_PICOPASS_CMD_READ_OR_IDENTIFY = 0x0C,
  15. // ADDRESS(1) CRC16(2) -> DATA(32) CRC16(2)
  16. RFAL_PICOPASS_CMD_READ4 = 0x06,
  17. // ADDRESS(1) DATA(8) SIGN(4)|CRC16(2) -> DATA(8) CRC16(2)
  18. RFAL_PICOPASS_CMD_UPDATE = 0x87,
  19. // ADDRESS(1) -> DATA(8)
  20. RFAL_PICOPASS_CMD_READCHECK_KD = 0x88,
  21. // ADDRESS(1) -> DATA(8)
  22. RFAL_PICOPASS_CMD_READCHECK_KC = 0x18,
  23. // CHALLENGE(4) READERSIGNATURE(4) -> CHIPRESPONSE(4)
  24. RFAL_PICOPASS_CMD_CHECK = 0x05,
  25. // No args -> SOF
  26. RFAL_PICOPASS_CMD_ACTALL = 0x0A,
  27. // No args -> SOF
  28. RFAL_PICOPASS_CMD_ACT = 0x8E,
  29. // ASNB(8)|SERIALNB(8) -> SERIALNB(8) CRC16(2)
  30. RFAL_PICOPASS_CMD_SELECT = 0x81,
  31. // No args -> SERIALNB(8) CRC16(2)
  32. RFAL_PICOPASS_CMD_DETECT = 0x0F,
  33. // No args -> SOF
  34. RFAL_PICOPASS_CMD_HALT = 0x00,
  35. // PAGE(1) CRC16(2) -> BLOCK1(8) CRC16(2)
  36. RFAL_PICOPASS_CMD_PAGESEL = 0x84,
  37. };
  38. typedef struct {
  39. uint8_t CSN[RFAL_PICOPASS_UID_LEN]; // Anti-collision CSN
  40. uint8_t crc[2];
  41. } rfalPicoPassIdentifyRes;
  42. typedef struct {
  43. uint8_t CSN[RFAL_PICOPASS_UID_LEN]; // Real CSN
  44. uint8_t crc[2];
  45. } rfalPicoPassSelectRes;
  46. typedef struct {
  47. uint8_t CCNR[8];
  48. } rfalPicoPassReadCheckRes;
  49. typedef struct {
  50. uint8_t mac[4];
  51. } rfalPicoPassCheckRes;
  52. typedef struct {
  53. uint8_t data[PICOPASS_BLOCK_LEN];
  54. uint8_t crc[2];
  55. } rfalPicoPassReadBlockRes;