seader_worker.h 2.2 KB

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