mifare_ultralight.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <string.h>
  5. #define MF_UL_GET_VERSION_CMD (0x60)
  6. #define MF_UL_READ_CMD (0x30)
  7. #define MF_UL_FAST_READ_CMD (0x3A)
  8. typedef enum {
  9. MfUltralightTypeUnknown,
  10. MfUltralightTypeUL11,
  11. MfUltralightTypeUL21,
  12. MfUltralightTypeNTAG213,
  13. MfUltralightTypeNTAG215,
  14. MfUltralightTypeNTAG216,
  15. } MfUltralightType;
  16. typedef struct {
  17. uint8_t header;
  18. uint8_t vendor_id;
  19. uint8_t prod_type;
  20. uint8_t prod_subtype;
  21. uint8_t prod_ver_major;
  22. uint8_t prod_ver_minor;
  23. uint8_t storage_size;
  24. uint8_t protocol_type;
  25. } MfUltralightVersion;
  26. typedef struct {
  27. uint8_t sn0[3];
  28. uint8_t btBCC0;
  29. uint8_t sn1[4];
  30. uint8_t btBCC1;
  31. uint8_t internal;
  32. uint8_t lock[2];
  33. uint8_t otp[4];
  34. } MfUltralightManufacturerBlock;
  35. typedef struct {
  36. MfUltralightType type;
  37. uint8_t pages_to_read;
  38. uint8_t pages_readed;
  39. bool support_fast_read;
  40. uint8_t dump[255];
  41. } MfUltralightRead;
  42. bool mf_ul_check_card_type(uint8_t ATQA0, uint8_t ATQA1, uint8_t SAK);
  43. uint16_t mf_ul_prepare_get_version(uint8_t* dest);
  44. void mf_ul_parse_get_version_response(uint8_t* buff, MfUltralightRead* mf_ul_read);
  45. void mf_ul_set_default_version(MfUltralightRead* mf_ul_read);
  46. uint16_t mf_ul_prepare_read(uint8_t* dest, uint8_t start_page);
  47. uint16_t mf_ul_prepare_fast_read(uint8_t* dest, uint8_t start_page, uint8_t end_page);