uhf_worker.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. // Main worker states
  11. UHFWorkerStateDetect,
  12. UHFWorkerStateWrite,
  13. UHFWorkerStateWriteKey,
  14. // Transition
  15. UHFWorkerStateStop,
  16. } UHFWorkerState;
  17. typedef enum {
  18. UHFWorkerEventSuccess,
  19. UHFWorkerEventFail,
  20. UHFWorkerEventNoTagDetected,
  21. UHFWorkerEventAborted,
  22. UHFWorkerEventCardDetected,
  23. } UHFWorkerEvent;
  24. typedef void (*UHFWorkerCallback)(UHFWorkerEvent event, void* ctx);
  25. typedef struct UHFWorker {
  26. FuriThread* thread;
  27. UHFResponseData* data;
  28. UHFWorkerCallback callback;
  29. UHFWorkerState state;
  30. void* ctx;
  31. } UHFWorker;
  32. int32_t uhf_worker_task(void* ctx);
  33. UHFWorker* uhf_worker_alloc();
  34. void uhf_worker_change_state(UHFWorker* worker, UHFWorkerState state);
  35. void uhf_worker_start(
  36. UHFWorker* uhf_worker,
  37. UHFWorkerState state,
  38. UHFWorkerCallback callback,
  39. void* ctx);
  40. void uhf_worker_stop(UHFWorker* uhf_worker);
  41. void uhf_worker_free(UHFWorker* uhf_worker);