ibutton_worker_i.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /**
  2. * @file ibutton_worker_i.h
  3. *
  4. * iButton worker, internal definitions
  5. */
  6. #pragma once
  7. #include "ibutton_worker.h"
  8. #include "ibutton_writer.h"
  9. #include "../one_wire_host.h"
  10. #include "../one_wire_slave.h"
  11. #include "../one_wire_device.h"
  12. #include "../pulse_protocols/pulse_decoder.h"
  13. #include "pulse_protocols/protocol_cyfral.h"
  14. #include "pulse_protocols/protocol_metakom.h"
  15. #include "encoder/encoder_cyfral.h"
  16. #include "encoder/encoder_metakom.h"
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. typedef enum {
  21. PulseProtocolCyfral,
  22. PulseProtocolMetakom,
  23. } PulseProtocols;
  24. typedef struct {
  25. const uint32_t quant;
  26. void (*const start)(iButtonWorker* worker);
  27. void (*const tick)(iButtonWorker* worker);
  28. void (*const stop)(iButtonWorker* worker);
  29. } iButtonWorkerModeType;
  30. typedef enum {
  31. iButtonWorkerIdle = 0,
  32. iButtonWorkerRead = 1,
  33. iButtonWorkerWrite = 2,
  34. iButtonWorkerEmulate = 3,
  35. } iButtonWorkerMode;
  36. typedef enum {
  37. iButtonEmulateModeCyfral,
  38. iButtonEmulateModeMetakom,
  39. } iButtonEmulateMode;
  40. struct iButtonWorker {
  41. iButtonKey* key_p;
  42. uint8_t* key_data;
  43. OneWireHost* host;
  44. OneWireSlave* slave;
  45. OneWireDevice* device;
  46. iButtonWriter* writer;
  47. iButtonWorkerMode mode_index;
  48. FuriMessageQueue* messages;
  49. FuriThread* thread;
  50. PulseDecoder* pulse_decoder;
  51. ProtocolCyfral* protocol_cyfral;
  52. ProtocolMetakom* protocol_metakom;
  53. uint32_t last_dwt_value;
  54. iButtonWorkerReadCallback read_cb;
  55. iButtonWorkerWriteCallback write_cb;
  56. iButtonWorkerEmulateCallback emulate_cb;
  57. void* cb_ctx;
  58. EncoderCyfral* encoder_cyfral;
  59. EncoderMetakom* encoder_metakom;
  60. iButtonEmulateMode emulate_mode;
  61. };
  62. extern const iButtonWorkerModeType ibutton_worker_modes[];
  63. void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode);
  64. void ibutton_worker_notify_emulate(iButtonWorker* worker);
  65. #ifdef __cplusplus
  66. }
  67. #endif