uhf_tag.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. // storage enum
  6. typedef enum { ReservedBank, EPCBank, TIDBank, UserBank } BankType;
  7. // Reserved Memory Bank
  8. typedef struct {
  9. uint8_t kill_password[2]; // 2 bytes (16 bits) for kill password
  10. uint8_t access_password[2]; // 2 bytes (16 bits) for access password
  11. } ReservedMemoryBank;
  12. // EPC Memory Bank
  13. typedef struct {
  14. size_t size; // Size of EPC memory data
  15. uint8_t data[18]; // 2 bytes for CRC16, 2 bytes for PC, and max 14 bytes for EPC
  16. uint16_t pc;
  17. uint16_t crc;
  18. } EPCMemoryBank;
  19. // TID Memory Bank
  20. typedef struct {
  21. size_t size; // Size of TID memory data
  22. uint8_t data[16]; // 4 bytes for Class ID and max 12 bytes for TID data
  23. } TIDMemoryBank;
  24. // User Memory Bank
  25. typedef struct {
  26. size_t size; // Size of user memory data
  27. uint8_t data[64]; // Assuming max 512 bits (64 bytes) for User Memory
  28. } UserMemoryBank;
  29. // EPC Gen 2 Tag containing all memory banks
  30. typedef struct {
  31. ReservedMemoryBank* reserved;
  32. EPCMemoryBank* epc;
  33. TIDMemoryBank* tid;
  34. UserMemoryBank* user;
  35. } UHFTag;
  36. typedef struct UHFTagWrapper {
  37. UHFTag* uhf_tag;
  38. } UHFTagWrapper;
  39. UHFTagWrapper* uhf_tag_wrapper_alloc();
  40. void uhf_tag_wrapper_set_tag(UHFTagWrapper* uhf_tag_wrapper, UHFTag* uhf_tag);
  41. void uhf_tag_wrapper_free(UHFTagWrapper* uhf_tag_wrapper);
  42. UHFTag* uhf_tag_alloc();
  43. void uhf_tag_reset(UHFTag* uhf_tag);
  44. void uhf_tag_free(UHFTag* uhf_tag);
  45. void uhf_tag_set_kill_pwd(UHFTag* uhf_tag, uint8_t* data_in);
  46. void uhf_tag_set_access_pwd(UHFTag* uhf_tag, uint8_t* data_in);
  47. void uhf_tag_set_epc_pc(UHFTag* uhf_tag, uint16_t pc);
  48. void uhf_tag_set_epc_crc(UHFTag* uhf_tag, uint16_t crc);
  49. void uhf_tag_set_epc(UHFTag* uhf_tag, uint8_t* data_in, size_t size);
  50. void uhf_tag_set_tid(UHFTag* uhf_tag, uint8_t* data_in, size_t size);
  51. void uhf_tag_set_user(UHFTag* uhf_tag, uint8_t* data_in, size_t size);
  52. uint8_t* uhf_tag_get_kill_pwd(UHFTag* uhf_tag);
  53. uint8_t* uhf_tag_get_access_pwd(UHFTag* uhf_tag);
  54. uint8_t* uhf_tag_get_epc(UHFTag* uhf_tag);
  55. size_t uhf_tag_get_epc_size(UHFTag* uhf_tag);
  56. uint8_t* uhf_tag_get_tid(UHFTag* uhf_tag);
  57. size_t uhf_tag_get_tid_size(UHFTag* uhf_tag);
  58. uint8_t* uhf_tag_get_user(UHFTag* uhf_tag);
  59. size_t uhf_tag_get_user_size(UHFTag* uhf_tag);
  60. // debug
  61. char* uhf_tag_get_cstr(UHFTag* uhf_tag);