seader_worker.h 2.0 KB

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