picopass_poller_i.h 2.3 KB

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