uhf_tag.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. // Reserved Memory Bank
  6. typedef struct {
  7. uint8_t kill_password[2]; // 2 bytes (16 bits) for kill password
  8. uint8_t access_password[2]; // 2 bytes (16 bits) for access password
  9. } ReservedMemoryBank;
  10. // EPC Memory Bank
  11. typedef struct {
  12. size_t size; // Size of EPC memory data
  13. uint8_t data[18]; // 2 bytes for CRC16, 2 bytes for PC, and max 14 bytes for EPC
  14. } EPCMemoryBank;
  15. // TID Memory Bank
  16. typedef struct {
  17. size_t size; // Size of TID memory data
  18. uint8_t data[16]; // 4 bytes for Class ID and max 12 bytes for TID data
  19. } TIDMemoryBank;
  20. // User Memory Bank
  21. typedef struct {
  22. size_t size; // Size of user memory data
  23. uint8_t data[64]; // Assuming max 512 bits (64 bytes) for User Memory
  24. } UserMemoryBank;
  25. // EPC Gen 2 Tag containing all memory banks
  26. typedef struct {
  27. ReservedMemoryBank reserved;
  28. EPCMemoryBank epc;
  29. TIDMemoryBank tid;
  30. UserMemoryBank user;
  31. } UHFTag;
  32. UHFTag* uhf_tag_alloc();
  33. void uhf_tag_free(UHFTag* uhf_tag);
  34. void uhf_tag_set_kill_pwd(UHFTag* uhf_tag, uint8_t* data_in);
  35. void uhf_tag_set_access_pwd(UHFTag* uhf_tag, uint8_t* data_in);
  36. void uhf_tag_set_epc(UHFTag* uhf_tag, uint8_t* data_in, size_t size);
  37. void uhf_tag_set_tid(UHFTag* uhf_tag, uint8_t* data_in, size_t size);
  38. void uhf_tag_set_user(UHFTag* uhf_tag, uint8_t* data_in, size_t size);
  39. uint8_t* uhf_tag_get_kill_pwd(UHFTag* uhf_tag);
  40. uint8_t* uhf_tag_get_access_pwd(UHFTag* uhf_tag);
  41. uint8_t* uhf_tag_get_epc(UHFTag* uhf_tag);
  42. size_t uhf_tag_get_epc_size(UHFTag* uhf_tag);
  43. uint8_t* uhf_tag_get_tid(UHFTag* uhf_tag);
  44. size_t uhf_tag_get_tid_size(UHFTag* uhf_tag);
  45. uint8_t* uhf_tag_get_user(UHFTag* uhf_tag);
  46. size_t uhf_tag_get_user_size(UHFTag* uhf_tag);