uhf_worker.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include "uhf_data.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. UHFResponseData* response_data;
  29. UHFWorkerCallback callback;
  30. UHFWorkerState state;
  31. void* ctx;
  32. } UHFWorker;
  33. int32_t uhf_worker_task(void* ctx);
  34. UHFWorker* uhf_worker_alloc();
  35. void uhf_worker_change_state(UHFWorker* worker, UHFWorkerState state);
  36. void uhf_worker_start(
  37. UHFWorker* uhf_worker,
  38. UHFWorkerState state,
  39. UHFWorkerCallback callback,
  40. void* ctx);
  41. void uhf_worker_stop(UHFWorker* uhf_worker);
  42. void uhf_worker_free(UHFWorker* uhf_worker);