ibutton_worker_i.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 <toolbox/protocols/protocol_dict.h>
  13. #include "protocols/ibutton_protocols.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. typedef struct {
  18. const uint32_t quant;
  19. void (*const start)(iButtonWorker* worker);
  20. void (*const tick)(iButtonWorker* worker);
  21. void (*const stop)(iButtonWorker* worker);
  22. } iButtonWorkerModeType;
  23. typedef enum {
  24. iButtonWorkerIdle = 0,
  25. iButtonWorkerRead = 1,
  26. iButtonWorkerWrite = 2,
  27. iButtonWorkerEmulate = 3,
  28. } iButtonWorkerMode;
  29. struct iButtonWorker {
  30. iButtonKey* key_p;
  31. uint8_t* key_data;
  32. OneWireHost* host;
  33. OneWireSlave* slave;
  34. OneWireDevice* device;
  35. iButtonWriter* writer;
  36. iButtonWorkerMode mode_index;
  37. FuriMessageQueue* messages;
  38. FuriThread* thread;
  39. iButtonWorkerReadCallback read_cb;
  40. iButtonWorkerWriteCallback write_cb;
  41. iButtonWorkerEmulateCallback emulate_cb;
  42. void* cb_ctx;
  43. ProtocolDict* protocols;
  44. iButtonProtocol protocol_to_encode;
  45. };
  46. extern const iButtonWorkerModeType ibutton_worker_modes[];
  47. void ibutton_worker_switch_mode(iButtonWorker* worker, iButtonWorkerMode mode);
  48. void ibutton_worker_notify_emulate(iButtonWorker* worker);
  49. #ifdef __cplusplus
  50. }
  51. #endif