uhf_module.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #pragma once
  2. #include <stdint.h>
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. #include "uhf_buffer.h"
  6. #include "uhf_tag.h"
  7. #include <furi_hal.h>
  8. #include "uhf_module_settings.h"
  9. #define FRAME_END 0x7E
  10. #define DEFAULT_BAUDRATE 115200
  11. typedef struct {
  12. char* hw_version;
  13. char* sw_version;
  14. char* manufacturer;
  15. } M100ModuleInfo;
  16. typedef enum {
  17. M100Success,
  18. M100ValidationFail,
  19. M100NoTagResponse,
  20. M100MemoryOverrun
  21. } M100ResponseType;
  22. typedef struct {
  23. M100ModuleInfo* info;
  24. uint32_t baudrate;
  25. WorkingArea area;
  26. WorkingChannel channel;
  27. uint16_t transmitting_power;
  28. bool freq_hopping;
  29. Buffer* buf;
  30. } M100Module;
  31. M100ModuleInfo* m100_module_info_alloc();
  32. void m100_module_info_free(M100ModuleInfo* module_info);
  33. M100Module* m100_module_alloc();
  34. void m100_module_free(M100Module* module);
  35. uint16_t crc16_genibus(const uint8_t* data, size_t length);
  36. uint8_t checksum(const uint8_t* data, size_t length);
  37. // Function prototypes
  38. char* m100_get_hardware_version(M100Module* module);
  39. char* m100_get_software_version(M100Module* module);
  40. char* m100_get_manufacturers(M100Module* module);
  41. void m100_set_baudrate(M100Module* module, uint32_t baudrate);
  42. bool m100_set_working_area(M100Module* module, WorkingArea area);
  43. bool m100_set_working_channel(M100Module* module, WorkingChannel channel);
  44. bool m100_set_transmitting_power(M100Module* module, uint16_t power);
  45. bool m100_set_freq_hopping(M100Module* module, bool hopping);
  46. bool m100_set_power(M100Module* module, uint8_t* power);
  47. // gen2 cmds
  48. M100ResponseType m100_send_single_poll(M100Module* module, UHFTag* uhf_tag);
  49. M100ResponseType m100_set_select(M100Module* module, UHFTag* uhf_tag);
  50. M100ResponseType m100_read_label_data_storage(
  51. M100Module* module,
  52. UHFTag* uhf_tag,
  53. BankType bank,
  54. uint32_t access_pwd,
  55. uint16_t word_count);
  56. M100ResponseType m100_write_label_data_storage(
  57. M100Module* module,
  58. UHFTag* saved_tag,
  59. UHFTag* selected_tag,
  60. BankType bank,
  61. uint16_t source_address,
  62. uint32_t access_pwd);
  63. uint32_t m100_get_baudrate(M100Module* module);