uhf_worker.h 1.2 KB

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