seader_worker.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include <lib/nfc/protocols/iso14443_4a/iso14443_4a_poller.h>
  3. #include "seader_credential.h"
  4. #include "seader_bridge.h"
  5. typedef struct SeaderWorker SeaderWorker;
  6. typedef struct CCID_Message CCID_Message;
  7. typedef enum {
  8. // Init states
  9. SeaderWorkerStateNone,
  10. SeaderWorkerStateBroken,
  11. SeaderWorkerStateReady,
  12. // Main worker states
  13. SeaderWorkerStateCheckSam,
  14. // Transition
  15. SeaderWorkerStateStop,
  16. } SeaderWorkerState;
  17. typedef enum {
  18. // Reserve first 50 events for application events
  19. SeaderWorkerEventReserved = 50,
  20. // Seader worker common events
  21. SeaderWorkerEventSuccess,
  22. SeaderWorkerEventFail,
  23. SeaderWorkerEventSamPresent,
  24. SeaderWorkerEventSamWrong,
  25. SeaderWorkerEventSamMissing,
  26. SeaderWorkerEventNoCardDetected,
  27. SeaderWorkerEventStartReading,
  28. } SeaderWorkerEvent;
  29. typedef void (*SeaderWorkerCallback)(SeaderWorkerEvent event, void* context);
  30. SeaderWorker* seader_worker_alloc();
  31. SeaderWorkerState seader_worker_get_state(SeaderWorker* seader_worker);
  32. void seader_worker_free(SeaderWorker* seader_worker);
  33. void seader_worker_start(
  34. SeaderWorker* seader_worker,
  35. SeaderWorkerState state,
  36. SeaderUartBridge* uart,
  37. SeaderWorkerCallback callback,
  38. void* context);
  39. void seader_worker_stop(SeaderWorker* seader_worker);
  40. void seader_worker_process_sam_message(Seader* seader, CCID_Message* message);
  41. void seader_worker_send_version(SeaderWorker* seader_worker);
  42. NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void* context);
  43. NfcCommand seader_worker_poller_callback_picopass(PicopassPollerEvent event, void* context);