picopass_poller.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. } PicopassPollerEventType;
  17. typedef enum {
  18. PicopassPollerModeRead,
  19. PicopassPollerModeWrite,
  20. PicopassPollerModeWriteKey,
  21. } PicopassPollerMode;
  22. typedef struct {
  23. PicopassPollerMode mode;
  24. } PicopassPollerEventDataRequestMode;
  25. typedef struct {
  26. uint8_t key[PICOPASS_KEY_LEN];
  27. bool is_key_provided;
  28. bool is_elite_key;
  29. } PicopassPollerEventDataRequestKey;
  30. typedef struct {
  31. bool perform_write;
  32. uint8_t block_num;
  33. const PicopassBlock* block;
  34. } PicopassPollerEventDataRequestWriteBlock;
  35. typedef struct {
  36. const PicopassDeviceData* data;
  37. uint8_t key[PICOPASS_KEY_LEN];
  38. bool is_elite_key;
  39. } PicopassPollerEventDataRequestWriteKey;
  40. typedef union {
  41. PicopassPollerEventDataRequestMode req_mode;
  42. PicopassPollerEventDataRequestKey req_key;
  43. PicopassPollerEventDataRequestWriteBlock req_write;
  44. PicopassPollerEventDataRequestWriteKey req_write_key;
  45. } PicopassPollerEventData;
  46. typedef struct {
  47. PicopassPollerEventType type;
  48. PicopassPollerEventData* data;
  49. } PicopassPollerEvent;
  50. typedef NfcCommand (*PicopassPollerCallback)(PicopassPollerEvent event, void* context);
  51. typedef struct PicopassPoller PicopassPoller;
  52. PicopassPoller* picopass_poller_alloc(Nfc* nfc);
  53. void picopass_poller_free(PicopassPoller* instance);
  54. void picopass_poller_start(
  55. PicopassPoller* instance,
  56. PicopassPollerCallback callback,
  57. void* context);
  58. void picopass_poller_stop(PicopassPoller* instance);
  59. const PicopassDeviceData* picopass_poller_get_data(PicopassPoller* instance);
  60. #ifdef __cplusplus
  61. }
  62. #endif