uhf_module.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #pragma once
  2. #include <furi_hal.h>
  3. #include <stddef.h>
  4. #include <stdint.h>
  5. #include <stdbool.h>
  6. #include "uhf_uart.h"
  7. #include "uhf_tag.h"
  8. #include "uhf_buffer.h"
  9. #include "uhf_module_settings.h"
  10. #define FRAME_START 0xBB
  11. #define FRAME_END 0x7E
  12. #define DEFAULT_BAUDRATE BAUD_RATES[BAUD_RATES_COUNT - 1]
  13. #define DEFAULT_TRANSMITTING_POWER POWER_DBM[POWER_DBM_COUNT - 1]
  14. #define DEFAULT_WORKING_REGION WR_US
  15. typedef struct {
  16. char* hw_version;
  17. char* sw_version;
  18. char* manufacturer;
  19. } M100ModuleInfo;
  20. typedef enum {
  21. M100SuccessResponse,
  22. M100ValidationFail,
  23. M100NoTagResponse,
  24. M100MemoryOverrun,
  25. M100EmptyResponse,
  26. M100ChecksumFail
  27. } M100ResponseType;
  28. typedef enum {
  29. WRITE_EPC = 1 << 0,
  30. WRITE_TID = 1 << 1,
  31. WRITE_USER = 1 << 2,
  32. WRITE_RFU = 1 << 3
  33. } WriteMask;
  34. typedef struct {
  35. M100ModuleInfo* info;
  36. WorkingRegion region;
  37. uint16_t region_frequency;
  38. uint16_t transmitting_power;
  39. uint16_t max_transmitting_power;
  40. uint16_t write_mask;
  41. bool freq_hopping;
  42. UHFUart* uart;
  43. } M100Module;
  44. M100ModuleInfo* m100_module_info_alloc();
  45. void m100_module_info_free(M100ModuleInfo* module_info);
  46. M100Module* m100_module_alloc();
  47. void m100_module_free(M100Module* module);
  48. uint16_t crc16_genibus(const uint8_t* data, size_t length);
  49. uint8_t checksum(const uint8_t* data, size_t length);
  50. uint8_t get_baudrate_count();
  51. // Function prototypes
  52. char* m100_get_hardware_version(M100Module* module);
  53. char* m100_get_software_version(M100Module* module);
  54. char* m100_get_manufacturers(M100Module* module);
  55. void m100_set_baudrate(M100Module* module, uint32_t baudrate);
  56. bool m100_set_working_region(M100Module* module, WorkingRegion region);
  57. bool m100_set_transmitting_power(M100Module* module, uint16_t power);
  58. bool m100_set_freq_hopping(M100Module* module, bool hopping);
  59. bool m100_set_power(M100Module* module, uint8_t* power);
  60. // gen2 cmds
  61. M100ResponseType m100_single_poll(M100Module* module, UHFTag* uhf_tag);
  62. M100ResponseType m100_set_select(M100Module* module, UHFTag* uhf_tag);
  63. M100ResponseType m100_read_label_data_storage(
  64. M100Module* module,
  65. UHFTag* uhf_tag,
  66. BankType bank,
  67. uint32_t access_pwd,
  68. uint16_t word_count);
  69. M100ResponseType m100_write_label_data_storage(
  70. M100Module* module,
  71. UHFTag* saved_tag,
  72. UHFTag* selected_tag,
  73. BankType bank,
  74. uint16_t source_address,
  75. uint32_t access_pwd);
  76. uint32_t m100_get_baudrate(M100Module* module);
  77. void m100_enable_write_mask(M100Module* module, WriteMask mask);
  78. void m100_disable_write_mask(M100Module* module, WriteMask mask);
  79. bool m100_is_write_mask_enabled(M100Module* module, WriteMask mask);