uhf_data.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdbool.h>
  6. #define MAX_DATA_SIZE 128
  7. #define MAX_BANK_SIZE 64
  8. typedef unsigned int uint;
  9. typedef struct UHFData {
  10. uint8_t data[MAX_DATA_SIZE];
  11. size_t word_length;
  12. size_t length;
  13. bool start;
  14. bool end;
  15. struct UHFData* next;
  16. } UHFData;
  17. typedef struct UHFResponseData {
  18. UHFData* head;
  19. UHFData* tail;
  20. size_t size;
  21. } UHFResponseData;
  22. typedef struct UHFTag {
  23. // RESERVED BANK (RFU) (00)
  24. uint8_t kill_pwd[2]; // 0x00-0x10
  25. uint8_t access_pwd[2]; // 0x10-0x20
  26. // EPC Bank
  27. uint8_t crc[2]; // 0x00-0x10
  28. uint8_t pc[2]; // 0x10-0x20
  29. uint8_t epc[MAX_BANK_SIZE]; // 0x20-0x210
  30. size_t epc_length;
  31. uint8_t xpc[2]; // 0x210-0x21F
  32. size_t xpc_length;
  33. // TID Bank
  34. uint8_t tid[MAX_BANK_SIZE]; // 0x00-END
  35. size_t tid_length;
  36. // USER Bank
  37. uint8_t user[MAX_BANK_SIZE]; // 0x00-END
  38. size_t user_length;
  39. } UHFTag;
  40. UHFData* uhf_data_alloc();
  41. int uhf_data_append(UHFData* uhf_data, uint8_t data);
  42. void uhf_data_reset(UHFData* uhf_data);
  43. uint8_t uhf_data_calculate_checksum(UHFData* uhf_data);
  44. bool uhf_data_verfiy_checksum(UHFData* uhf_data);
  45. void uhf_data_free(UHFData* uhf_data);
  46. UHFResponseData* uhf_response_data_alloc();
  47. UHFData* uhf_response_data_add_new_uhf_data(UHFResponseData* uhf_response_data);
  48. UHFData* uhf_response_data_get_uhf_data(UHFResponseData* uhf_response_data, uint index);
  49. void uhf_response_data_reset(UHFResponseData* uhf_response_data);
  50. void uhf_response_data_free(UHFResponseData* uhf_response_data);
  51. UHFTag* uhf_tag_alloc();
  52. void uhf_tag_reset(UHFTag* uhf_tag);
  53. void uhf_tag_set_epc(UHFTag* uhf_tag, uint8_t* data, size_t length);
  54. void uhf_tag_set_tid(UHFTag* uhf_tag, uint8_t* data, size_t length);
  55. void uhf_tag_set_user(UHFTag* uhf_tag, uint8_t* data, size_t length);
  56. void uhf_tag_free(UHFTag* uhf_tag);