picopass_poller_i.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #pragma once
  2. #include "picopass_poller.h"
  3. #include "picopass_protocol.h"
  4. #include <nfc/helpers/iso13239_crc.h>
  5. #define PICOPASS_POLLER_BUFFER_SIZE (255)
  6. #define PICOPASS_CRC_SIZE (2)
  7. typedef enum {
  8. PicopassPollerSessionStateIdle,
  9. PicopassPollerSessionStateActive,
  10. PicopassPollerSessionStateStopRequest,
  11. } PicopassPollerSessionState;
  12. typedef enum {
  13. PicopassPollerStateRequestMode,
  14. PicopassPollerStateDetect,
  15. PicopassPollerStateSelect,
  16. PicopassPollerStatePreAuth,
  17. PicopassPollerStateCheckSecurity,
  18. PicopassPollerStateNrMacAuth,
  19. PicopassPollerStateAuth,
  20. PicopassPollerStateReadBlock,
  21. PicopassPollerStateWriteBlock,
  22. PicopassPollerStateWriteKey,
  23. PicopassPollerStateParseCredential,
  24. PicopassPollerStateParseWiegand,
  25. PicopassPollerStateSuccess,
  26. PicopassPollerStateFail,
  27. PicopassPollerStateNum,
  28. } PicopassPollerState;
  29. struct PicopassPoller {
  30. Nfc* nfc;
  31. PicopassPollerSessionState session_state;
  32. PicopassPollerState state;
  33. PicopassPollerMode mode;
  34. PicopassColResSerialNum col_res_serial_num;
  35. PicopassSerialNum serial_num;
  36. PicopassMac mac;
  37. uint8_t div_key[8];
  38. uint8_t current_block;
  39. uint8_t app_limit;
  40. PicopassDeviceData* data;
  41. BitBuffer* tx_buffer;
  42. BitBuffer* rx_buffer;
  43. BitBuffer* tmp_buffer;
  44. PicopassPollerEvent event;
  45. PicopassPollerEventData event_data;
  46. PicopassPollerCallback callback;
  47. void* context;
  48. };
  49. PicopassError picopass_poller_actall(PicopassPoller* instance);
  50. PicopassError
  51. picopass_poller_identify(PicopassPoller* instance, PicopassColResSerialNum* col_res_serial_num);
  52. PicopassError picopass_poller_select(
  53. PicopassPoller* instance,
  54. PicopassColResSerialNum* col_res_serial_num,
  55. PicopassSerialNum* serial_num);
  56. PicopassError
  57. picopass_poller_read_block(PicopassPoller* instance, uint8_t block_num, PicopassBlock* block);
  58. PicopassError
  59. picopass_poller_read_check(PicopassPoller* instance, PicopassReadCheckResp* read_check_resp);
  60. PicopassError picopass_poller_check(
  61. PicopassPoller* instance,
  62. uint8_t* nr,
  63. PicopassMac* mac,
  64. PicopassCheckResp* check_resp);
  65. PicopassError picopass_poller_write_block(
  66. PicopassPoller* instance,
  67. uint8_t block_num,
  68. const PicopassBlock* block,
  69. const PicopassMac* mac);