seader_worker.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma once
  2. #include "seader_credential.h"
  3. #include "sub.h"
  4. typedef struct SeaderWorker SeaderWorker;
  5. typedef struct CCID_Message CCID_Message;
  6. typedef enum {
  7. // Init states
  8. SeaderWorkerStateNone,
  9. SeaderWorkerStateBroken,
  10. SeaderWorkerStateReady,
  11. // Main worker states
  12. SeaderWorkerStateCheckSam,
  13. SeaderWorkerStateReadPicopass,
  14. SeaderWorkerStateRead14a,
  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. SeaderWorkerEventSamMissing,
  26. SeaderWorkerEventNoCardDetected,
  27. SeaderWorkerEventStartReading,
  28. } SeaderWorkerEvent;
  29. typedef void (*SeaderWorkerCallback)(SeaderWorkerEvent event, void* context);
  30. SeaderWorker* seader_worker_alloc();
  31. SeaderWorkerState seader_worker_get_state(SeaderWorker* seader_worker);
  32. void seader_worker_free(SeaderWorker* seader_worker);
  33. void seader_worker_start(
  34. SeaderWorker* seader_worker,
  35. SeaderWorkerState state,
  36. SeaderUartBridge* uart,
  37. SeaderCredential* credential,
  38. SeaderWorkerCallback callback,
  39. void* context);
  40. void seader_worker_stop(SeaderWorker* seader_worker);
  41. void seader_worker_process_message(SeaderWorker* seader_worker, CCID_Message *message);