picopass_poller.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #pragma once
  2. #include <nfc/nfc.h>
  3. #include "picopass_protocol.h"
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. typedef enum {
  8. PicopassPollerEventTypeRequestMode,
  9. PicopassPollerEventTypeCardDetected,
  10. PicopassPollerEventTypeCardLost,
  11. PicopassPollerEventTypeRequestKey,
  12. PicopassPollerEventTypeRequestWriteBlock,
  13. PicopassPollerEventTypeRequestWriteKey,
  14. PicopassPollerEventTypeSuccess,
  15. PicopassPollerEventTypeFail,
  16. PicopassPollerEventTypeAuthFail,
  17. } PicopassPollerEventType;
  18. typedef enum {
  19. PicopassPollerModeRead,
  20. PicopassPollerModeWrite,
  21. PicopassPollerModeWriteKey,
  22. } PicopassPollerMode;
  23. typedef struct {
  24. PicopassPollerMode mode;
  25. } PicopassPollerEventDataRequestMode;
  26. typedef struct {
  27. uint8_t key[PICOPASS_KEY_LEN];
  28. bool is_key_provided;
  29. bool is_elite_key;
  30. } PicopassPollerEventDataRequestKey;
  31. typedef struct {
  32. bool perform_write;
  33. uint8_t block_num;
  34. const PicopassBlock* block;
  35. } PicopassPollerEventDataRequestWriteBlock;
  36. typedef struct {
  37. const PicopassDeviceData* data;
  38. uint8_t key[PICOPASS_KEY_LEN];
  39. bool is_elite_key;
  40. } PicopassPollerEventDataRequestWriteKey;
  41. typedef union {
  42. PicopassPollerEventDataRequestMode req_mode;
  43. PicopassPollerEventDataRequestKey req_key;
  44. PicopassPollerEventDataRequestWriteBlock req_write;
  45. PicopassPollerEventDataRequestWriteKey req_write_key;
  46. } PicopassPollerEventData;
  47. typedef struct {
  48. PicopassPollerEventType type;
  49. PicopassPollerEventData* data;
  50. } PicopassPollerEvent;
  51. typedef NfcCommand (*PicopassPollerCallback)(PicopassPollerEvent event, void* context);
  52. typedef struct PicopassPoller PicopassPoller;
  53. PicopassPoller* picopass_poller_alloc(Nfc* nfc);
  54. void picopass_poller_free(PicopassPoller* instance);
  55. void picopass_poller_start(
  56. PicopassPoller* instance,
  57. PicopassPollerCallback callback,
  58. void* context);
  59. void picopass_poller_stop(PicopassPoller* instance);
  60. const PicopassDeviceData* picopass_poller_get_data(PicopassPoller* instance);
  61. #ifdef __cplusplus
  62. }
  63. #endif