seader_worker.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. SeaderWorkerStateReadPicopass,
  15. SeaderWorkerStateRead14a,
  16. // Transition
  17. SeaderWorkerStateStop,
  18. } SeaderWorkerState;
  19. typedef enum {
  20. // Reserve first 50 events for application events
  21. SeaderWorkerEventReserved = 50,
  22. // Seader worker common events
  23. SeaderWorkerEventSuccess,
  24. SeaderWorkerEventFail,
  25. SeaderWorkerEventSamPresent,
  26. SeaderWorkerEventSamWrong,
  27. SeaderWorkerEventSamMissing,
  28. SeaderWorkerEventNoCardDetected,
  29. SeaderWorkerEventStartReading,
  30. } SeaderWorkerEvent;
  31. typedef void (*SeaderWorkerCallback)(SeaderWorkerEvent event, void* context);
  32. SeaderWorker* seader_worker_alloc();
  33. SeaderWorkerState seader_worker_get_state(SeaderWorker* seader_worker);
  34. void seader_worker_free(SeaderWorker* seader_worker);
  35. void seader_worker_start(
  36. SeaderWorker* seader_worker,
  37. SeaderWorkerState state,
  38. SeaderUartBridge* uart,
  39. SeaderCredential* credential,
  40. SeaderWorkerCallback callback,
  41. void* context);
  42. void seader_worker_stop(SeaderWorker* seader_worker);
  43. void seader_worker_process_sam_message(Seader* seader, CCID_Message* message);
  44. void seader_worker_send_version(SeaderWorker* seader_worker);
  45. NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void* context);
  46. NfcCommand seader_worker_poller_callback_picopass(PicopassPollerEvent event, void* context);