seader_worker.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. // 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 enum {
  32. SeaderPollerEventTypeCardDetect,
  33. SeaderPollerEventTypeConversation,
  34. SeaderPollerEventTypeComplete,
  35. SeaderPollerEventTypeSuccess,
  36. SeaderPollerEventTypeFail,
  37. } SeaderPollerEventType;
  38. typedef void (*SeaderWorkerCallback)(SeaderWorkerEvent event, void* context);
  39. SeaderWorker* seader_worker_alloc();
  40. SeaderWorkerState seader_worker_get_state(SeaderWorker* seader_worker);
  41. void seader_worker_free(SeaderWorker* seader_worker);
  42. void seader_worker_start(
  43. SeaderWorker* seader_worker,
  44. SeaderWorkerState state,
  45. SeaderUartBridge* uart,
  46. SeaderWorkerCallback callback,
  47. void* context);
  48. void seader_worker_stop(SeaderWorker* seader_worker);
  49. bool seader_worker_process_sam_message(Seader* seader, CCID_Message* message);
  50. void seader_worker_send_version(SeaderWorker* seader_worker);
  51. NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void* context);
  52. NfcCommand seader_worker_poller_callback_picopass(PicopassPollerEvent event, void* context);