seader_worker.h 1.9 KB

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