seader_worker.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 struct SeaderAPDU SeaderAPDU;
  8. typedef enum {
  9. // Init states
  10. SeaderWorkerStateNone,
  11. SeaderWorkerStateBroken,
  12. SeaderWorkerStateReady,
  13. // Main worker states
  14. SeaderWorkerStateCheckSam,
  15. // Transition
  16. SeaderWorkerStateStop,
  17. } SeaderWorkerState;
  18. typedef enum {
  19. // Reserve first 50 events for application events
  20. SeaderWorkerEventReserved = 50,
  21. // Seader worker common events
  22. SeaderWorkerEventSuccess,
  23. SeaderWorkerEventFail,
  24. SeaderWorkerEventSamPresent,
  25. SeaderWorkerEventSamWrong,
  26. SeaderWorkerEventSamMissing,
  27. SeaderWorkerEventNoCardDetected,
  28. SeaderWorkerEventStartReading,
  29. } SeaderWorkerEvent;
  30. typedef enum {
  31. SeaderPollerEventTypeCardDetect,
  32. SeaderPollerEventTypeConversation,
  33. SeaderPollerEventTypeComplete,
  34. SeaderPollerEventTypeSuccess,
  35. SeaderPollerEventTypeFail,
  36. } SeaderPollerEventType;
  37. typedef void (*SeaderWorkerCallback)(SeaderWorkerEvent event, void* context);
  38. SeaderWorker* seader_worker_alloc();
  39. SeaderWorkerState seader_worker_get_state(SeaderWorker* seader_worker);
  40. void seader_worker_free(SeaderWorker* seader_worker);
  41. void seader_worker_start(
  42. SeaderWorker* seader_worker,
  43. SeaderWorkerState state,
  44. SeaderUartBridge* uart,
  45. SeaderWorkerCallback callback,
  46. void* context);
  47. void seader_worker_stop(SeaderWorker* seader_worker);
  48. void seader_worker_process_sam_message(Seader* seader, CCID_Message* message);
  49. void seader_worker_send_version(SeaderWorker* seader_worker);
  50. NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void* context);
  51. NfcCommand seader_worker_poller_callback_picopass(PicopassPollerEvent event, void* context);