uhf_cmd.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. typedef struct UHF_RFID_CMD {
  5. uint8_t* cmd;
  6. size_t length;
  7. } UHF_RFID_CMD;
  8. typedef enum { COMMAND_FRAME = 0x00, RESPONSE_FRAME, NOTIFICATION_FRAME } UHFFrameType;
  9. typedef enum { CHINA_900MHZ = 1, CHINA_800MHZ = 4, US = 2, EU = 3, KOREA = 6 } UHFWorkArea;
  10. #define DEFAULT_BAUD_RATE 115200
  11. #define FRAME_START 0xBB
  12. #define FRAME_END 0x7E
  13. #define ERROR 0x15
  14. const UHF_RFID_CMD CMD_HARDWARE_VERSION = {
  15. .cmd = (uint8_t[]){0xBB, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x7E},
  16. .length = 8};
  17. const UHF_RFID_CMD CMD_SOFTWARE_VERSION = {
  18. .cmd = (uint8_t[]){0xBB, 0x00, 0x03, 0x00, 0x01, 0x01, 0x05, 0x7E},
  19. .length = 8};
  20. const UHF_RFID_CMD CMD_MANUFACTURERS = {
  21. .cmd = (uint8_t[]){0xBB, 0x00, 0x03, 0x00, 0x01, 0x02, 0x06, 0x7E},
  22. .length = 8};
  23. const UHF_RFID_CMD CMD_SINGLE_POLLING = {
  24. .cmd = (uint8_t[]){0xBB, 0x00, 0x22, 0x00, 0x00, 0x22, 0x7E},
  25. .length = 7};
  26. const UHF_RFID_CMD CMD_MULTIPLE_POLLING = {
  27. .cmd = (uint8_t[]){0xBB, 0x00, 0x27, 0x00, 0x03, 0x22, 0x27, 0x10, 0x83, 0x7E},
  28. .length = 10};
  29. const UHF_RFID_CMD CMD_STOP_MULTIPLE_POLLING = {
  30. .cmd = (uint8_t[]){0xBB, 0x00, 0x28, 0x00, 0x00, 0x28, 0x7E},
  31. .length = 7};
  32. const UHF_RFID_CMD CMD_SET_SELECT_PARAMETER = {
  33. .cmd = (uint8_t[]){0xBB, 0x00, 0x0C, 0x00, 0x13, 0x01, 0x00, 0x00, 0x00,
  34. 0x20, 0x60, 0x00, 0x30, 0x75, 0x1F, 0xEB, 0x70, 0x5C,
  35. 0x59, 0x04, 0xE3, 0xD5, 0x0D, 0x70, 0xAD, 0x7E},
  36. .length = 27};
  37. const UHF_RFID_CMD CMD_GET_SELECT_PARAMETER = {
  38. .cmd = (uint8_t[]){0xBB, 0x00, 0x0B, 0x00, 0x00, 0x0B, 0x7E},
  39. .length = 7};
  40. const UHF_RFID_CMD CMD_SET_SELECT_MODE = {
  41. .cmd = (uint8_t[]){0xBB, 0x00, 0x12, 0x00, 0x01, 0x01, 0x14, 0x7E},
  42. .length = 8};
  43. const UHF_RFID_CMD CMD_READ_LABEL_DATA_STORAGE = {
  44. .cmd =
  45. (uint8_t[]){
  46. 0xBB,
  47. 0x00,
  48. 0x39,
  49. 0x00,
  50. 0x09,
  51. 0x00,
  52. 0x00,
  53. 0x00,
  54. 0x00,
  55. 0x03,
  56. 0x00,
  57. 0x00,
  58. 0x00,
  59. 0x08,
  60. 0x4D,
  61. 0x7E},
  62. .length = 17};
  63. const UHF_RFID_CMD CMD_WRITE_LABEL_DATA_STORAGE = {
  64. .cmd = (uint8_t[]){0xBB, 0x00, 0x49, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
  65. 0x00, 0x04, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x71, 0x7E},
  66. .length = 24};
  67. const UHF_RFID_CMD CMD_LOCK_LABEL_DATA_STORAGE = {
  68. .cmd =
  69. (uint8_t
  70. []){0xBB, 0x00, 0x82, 0x00, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0x02, 0x00, 0x80, 0x09, 0x7E},
  71. .length = 13};
  72. const UHF_RFID_CMD CMD_INACTIVATE_KILL_TAG = {
  73. .cmd = (uint8_t[]){0xBB, 0x00, 0x65, 0x00, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0x67, 0x7E},
  74. .length = 11};
  75. const UHF_RFID_CMD CMD_SET_COMMUNICATION_BAUD_RATE = {
  76. .cmd = (uint8_t[]){0xBB, 0x00, 0x11, 0x00, 0x02, 0x00, 0xC0, 0xD3, 0x7E},
  77. .length = 9};
  78. const UHF_RFID_CMD CMD_GET_QUERY_PARAMETERS = {
  79. .cmd = (uint8_t[]){0xBB, 0x00, 0x0D, 0x00, 0x00, 0x0D, 0x7E},
  80. .length = 7};
  81. const UHF_RFID_CMD CMD_SET_QUERY_PARAMETER = {
  82. .cmd = (uint8_t[]){0xBB, 0x00, 0x0E, 0x00, 0x02, 0x10, 0x20, 0x40, 0x7E},
  83. .length = 9};
  84. const UHF_RFID_CMD CMD_SETUP_WORK_AREA = {
  85. .cmd = (uint8_t[]){0xBB, 0x00, 0x07, 0x00, 0x01, 0x01, 0x09, 0x7E},
  86. .length = 8};
  87. const UHF_RFID_CMD CMD_ACQUIRE_WORK_LOCATIONS = {
  88. .cmd = (uint8_t[]){0xBB, 0x00, 0x08, 0x00, 0x00, 0x08, 0x7E},
  89. .length = 7};
  90. const UHF_RFID_CMD CMD_SETUP_WORKING_CHANNEL = {
  91. .cmd = (uint8_t[]){0xBB, 0x00, 0xAB, 0x00, 0x01, 0x01, 0xAC, 0x7E},
  92. .length = 8};
  93. const UHF_RFID_CMD CMD_GET_WORKING_CHANNEL = {
  94. .cmd = (uint8_t[]){0xBB, 0x00, 0xAA, 0x00, 0x00, 0xAA, 0x7E},
  95. .length = 7};
  96. const UHF_RFID_CMD CMD_SET_AUTO_FREQUENCY_HOPPING = {
  97. .cmd = (uint8_t[]){0xBB, 0x00, 0xAD, 0x00, 0x01, 0xFF, 0xAD, 0x7E},
  98. .length = 8};
  99. const UHF_RFID_CMD CMD_INSERT_WORKING_CHANNEL = {
  100. .cmd =
  101. (uint8_t[]){0xBB, 0x00, 0xA9, 0x00, 0x06, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, 0xC3, 0x7E},
  102. .length = 13};
  103. const UHF_RFID_CMD CMD_ACQUIRE_TRANSMITTING_POWER = {
  104. .cmd = (uint8_t[]){0xBB, 0x00, 0xB7, 0x00, 0x00, 0xB7, 0x7E},
  105. .length = 7};
  106. const UHF_RFID_CMD CMD_SET_TRANSMITTING_POWER = {
  107. .cmd = (uint8_t[]){0xBB, 0x00, 0xB6, 0x00, 0x02, 0x07, 0xD0, 0x8F, 0x7E},
  108. .length = 9};
  109. const UHF_RFID_CMD CMD_SET_CONTINUOUS_CARRIER = {
  110. .cmd = (uint8_t[]){0xBB, 0x00, 0xB0, 0x00, 0x01, 0xFF, 0xB0, 0x7E},
  111. .length = 8};
  112. const UHF_RFID_CMD CMD_GET_DEMODULATOR_PARAMETERS = {
  113. .cmd = (uint8_t[]){0xBB, 0x00, 0xF1, 0x00, 0x00, 0xF1, 0x7E},
  114. .length = 7};
  115. const UHF_RFID_CMD CMD_SET_DEMODULATOR_PARAMETERS = {
  116. .cmd = (uint8_t[]){0xBB, 0x00, 0xF0, 0x00, 0x04, 0x03, 0x06, 0x01, 0xB0, 0xAE, 0x7E},
  117. .length = 11};
  118. const UHF_RFID_CMD CMD_TEST_RF_INPUT_BLOCK_SIGNAL = {
  119. .cmd = (uint8_t[]){0xBB, 0x00, 0xF2, 0x00, 0x00, 0xF2, 0x7E},
  120. .length = 7};
  121. const UHF_RFID_CMD CMD_TEST_RSSI_SIGNAL = {
  122. .cmd = (uint8_t[]){0xBB, 0x00, 0xF3, 0x00, 0x00, 0xF3, 0x7E},
  123. .length = 7};
  124. const UHF_RFID_CMD CMD_MODULE_HIBERNATION = {
  125. .cmd = (uint8_t[]){0xBB, 0x00, 0x17, 0x00, 0x00, 0x17, 0x7E},
  126. .length = 7};
  127. const UHF_RFID_CMD CMD_IDLE_HIBERNATION_TIME = {
  128. .cmd = (uint8_t[]){0xBB, 0x00, 0x1D, 0x00, 0x01, 0x02, 0x20, 0x7E},
  129. .length = 8};
  130. const UHF_RFID_CMD CMD_IDLE_MODE = {
  131. .cmd = (uint8_t[]){0xBB, 0x00, 0x04, 0x00, 0x03, 0x01, 0x01, 0x03, 0x0C, 0x7E},
  132. .length = 10};
  133. const UHF_RFID_CMD CMD_NXP_READPROTECT = {
  134. .cmd = (uint8_t[]){0xBB, 0x00, 0xE1, 0x00, 0x05, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xE4, 0x7E},
  135. .length = 12};
  136. const UHF_RFID_CMD CMD_NXP_CHANGE_EAS = {
  137. .cmd = (uint8_t[]){0xBB, 0x00, 0xE3, 0x00, 0x05, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0xE7, 0x7E},
  138. .length = 12};
  139. const UHF_RFID_CMD CMD_NXP_EAS_ALARM = {
  140. .cmd = (uint8_t[]){0xBB, 0x00, 0xE4, 0x00, 0x00, 0xE4, 0x7E},
  141. .length = 7};
  142. const UHF_RFID_CMD CMD_NXP_CONFIG_WORD = {
  143. .cmd =
  144. (uint8_t[]){0xBB, 0x00, 0xE0, 0x00, 0x06, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xE4, 0x7E},
  145. .length = 13};
  146. const UHF_RFID_CMD CMD_IMPINJ_MONZA4_QT = {
  147. .cmd =
  148. (uint8_t[]){
  149. 0xBB,
  150. 0x00,
  151. 0xE5,
  152. 0x00,
  153. 0x08,
  154. 0x00,
  155. 0x00,
  156. 0xFF,
  157. 0xFF,
  158. 0x01,
  159. 0x01,
  160. 0x40,
  161. 0x00,
  162. 0x2D,
  163. 0x7E},
  164. .length = 15};
  165. const UHF_RFID_CMD CMD_BLOCK_PERMALOCK = {
  166. .cmd =
  167. (uint8_t[]){
  168. 0xBB,
  169. 0x00,
  170. 0xD3,
  171. 0x00,
  172. 0x0B,
  173. 0x00,
  174. 0x00,
  175. 0xFF,
  176. 0xFF,
  177. 0x01,
  178. 0x03,
  179. 0x00,
  180. 0x00,
  181. 0x01,
  182. 0x07,
  183. 0x00,
  184. 0xE8,
  185. 0x7E},
  186. .length = 18};
  187. uint8_t calculate_checksum(uint8_t* arr, size_t length);