rfal_picopass.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <furi_hal_nfc.h>
  3. #define RFAL_PICOPASS_UID_LEN 8
  4. #define RFAL_PICOPASS_MAX_BLOCK_LEN 8
  5. enum {
  6. RFAL_PICOPASS_CMD_ACTALL = 0x0A,
  7. RFAL_PICOPASS_CMD_IDENTIFY = 0x0C,
  8. RFAL_PICOPASS_CMD_SELECT = 0x81,
  9. RFAL_PICOPASS_CMD_READCHECK = 0x88,
  10. RFAL_PICOPASS_CMD_CHECK = 0x05,
  11. RFAL_PICOPASS_CMD_READ = 0x0C,
  12. RFAL_PICOPASS_CMD_WRITE = 0x87,
  13. };
  14. typedef struct {
  15. uint8_t CSN[RFAL_PICOPASS_UID_LEN]; // Anti-collision CSN
  16. uint8_t crc[2];
  17. } rfalPicoPassIdentifyRes;
  18. typedef struct {
  19. uint8_t CSN[RFAL_PICOPASS_UID_LEN]; // Real CSN
  20. uint8_t crc[2];
  21. } rfalPicoPassSelectRes;
  22. typedef struct {
  23. uint8_t CCNR[8];
  24. } rfalPicoPassReadCheckRes;
  25. typedef struct {
  26. uint8_t mac[4];
  27. } rfalPicoPassCheckRes;
  28. typedef struct {
  29. uint8_t data[RFAL_PICOPASS_MAX_BLOCK_LEN];
  30. uint8_t crc[2];
  31. } rfalPicoPassReadBlockRes;
  32. FuriHalNfcReturn rfalPicoPassPollerInitialize(void);
  33. FuriHalNfcReturn rfalPicoPassPollerCheckPresence(void);
  34. FuriHalNfcReturn rfalPicoPassPollerIdentify(rfalPicoPassIdentifyRes* idRes);
  35. FuriHalNfcReturn rfalPicoPassPollerSelect(uint8_t* csn, rfalPicoPassSelectRes* selRes);
  36. FuriHalNfcReturn rfalPicoPassPollerReadCheck(rfalPicoPassReadCheckRes* rcRes);
  37. FuriHalNfcReturn rfalPicoPassPollerCheck(uint8_t* mac, rfalPicoPassCheckRes* chkRes);
  38. FuriHalNfcReturn rfalPicoPassPollerReadBlock(uint8_t blockNum, rfalPicoPassReadBlockRes* readRes);
  39. FuriHalNfcReturn rfalPicoPassPollerWriteBlock(uint8_t blockNum, uint8_t data[8], uint8_t mac[4]);