uhf_worker.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include "uhf_module.h"
  5. typedef enum {
  6. // Init states
  7. UHFWorkerStateNone,
  8. UHFWorkerStateBroken,
  9. UHFWorkerStateReady,
  10. UHFWorkerStateVerify,
  11. // Main worker states
  12. UHFWorkerStateDetectSingle,
  13. UHFWorkerStateWriteSingle,
  14. UHFWorkerStateWriteKey,
  15. // Transition
  16. UHFWorkerStateStop,
  17. } UHFWorkerState;
  18. typedef enum {
  19. UHFWorkerEventSuccess,
  20. UHFWorkerEventFail,
  21. UHFWorkerEventNoTagDetected,
  22. UHFWorkerEventAborted,
  23. UHFWorkerEventCardDetected,
  24. } UHFWorkerEvent;
  25. typedef void (*UHFWorkerCallback)(UHFWorkerEvent event, void* ctx);
  26. typedef struct UHFWorker {
  27. FuriThread* thread;
  28. M100Module* module;
  29. UHFWorkerCallback callback;
  30. UHFWorkerState state;
  31. UHFTagWrapper* uhf_tag_wrapper;
  32. void* ctx;
  33. } UHFWorker;
  34. int32_t uhf_worker_task(void* ctx);
  35. UHFWorker* uhf_worker_alloc();
  36. void uhf_worker_change_state(UHFWorker* worker, UHFWorkerState state);
  37. void uhf_worker_start(
  38. UHFWorker* uhf_worker,
  39. UHFWorkerState state,
  40. UHFWorkerCallback callback,
  41. void* ctx);
  42. void uhf_worker_stop(UHFWorker* uhf_worker);
  43. void uhf_worker_free(UHFWorker* uhf_worker);