picopass_poller_i.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. PicopassPollerStateAuth,
  19. PicopassPollerStateReadBlock,
  20. PicopassPollerStateWriteBlock,
  21. PicopassPollerStateWriteKey,
  22. PicopassPollerStateParseCredential,
  23. PicopassPollerStateParseWiegand,
  24. PicopassPollerStateSuccess,
  25. PicopassPollerStateFail,
  26. PicopassPollerStateNum,
  27. } PicopassPollerState;
  28. struct PicopassPoller {
  29. Nfc* nfc;
  30. PicopassPollerSessionState session_state;
  31. PicopassPollerState state;
  32. PicopassPollerMode mode;
  33. PicopassColResSerialNum col_res_serial_num;
  34. PicopassSerialNum serial_num;
  35. PicopassMac mac;
  36. uint8_t div_key[8];
  37. uint8_t current_block;
  38. uint8_t app_limit;
  39. PicopassDeviceData* data;
  40. BitBuffer* tx_buffer;
  41. BitBuffer* rx_buffer;
  42. BitBuffer* tmp_buffer;
  43. PicopassPollerEvent event;
  44. PicopassPollerEventData event_data;
  45. PicopassPollerCallback callback;
  46. void* context;
  47. };
  48. PicopassError picopass_poller_actall(PicopassPoller* instance);
  49. PicopassError
  50. picopass_poller_identify(PicopassPoller* instance, PicopassColResSerialNum* col_res_serial_num);
  51. PicopassError picopass_poller_select(
  52. PicopassPoller* instance,
  53. PicopassColResSerialNum* col_res_serial_num,
  54. PicopassSerialNum* serial_num);
  55. PicopassError
  56. picopass_poller_read_block(PicopassPoller* instance, uint8_t block_num, PicopassBlock* block);
  57. PicopassError
  58. picopass_poller_read_check(PicopassPoller* instance, PicopassReadCheckResp* read_check_resp);
  59. PicopassError picopass_poller_check(
  60. PicopassPoller* instance,
  61. PicopassMac* mac,
  62. PicopassCheckResp* check_resp);
  63. PicopassError picopass_poller_write_block(
  64. PicopassPoller* instance,
  65. uint8_t block_num,
  66. const PicopassBlock* block,
  67. const PicopassMac* mac);