Blame view

PN532/PN532Interface.h 1.75 KB
1a2e5ee4   henyxia   Big revision
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  
  
  #ifndef __PN532_INTERFACE_H__
  #define __PN532_INTERFACE_H__
  
  #include <stdint.h>
  
  #define PN532_PREAMBLE                (0x00)
  #define PN532_STARTCODE1              (0x00)
  #define PN532_STARTCODE2              (0xFF)
  #define PN532_POSTAMBLE               (0x00)
  
  #define PN532_HOSTTOPN532             (0xD4)
  #define PN532_PN532TOHOST             (0xD5)
  
  #define PN532_ACK_WAIT_TIME           (10)  // ms, timeout of waiting for ACK
  
  #define PN532_INVALID_ACK             (-1)
  #define PN532_TIMEOUT                 (-2)
  #define PN532_INVALID_FRAME           (-3)
  #define PN532_NO_SPACE                (-4)
  
  #define REVERSE_BITS_ORDER(b)         b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; \
                                        b = (b & 0xCC) >> 2 | (b & 0x33) << 2; \
                                        b = (b & 0xAA) >> 1 | (b & 0x55) << 1
  
  class PN532Interface
  {
  public:
      virtual void begin() = 0;
      virtual void wakeup() = 0;
  
      /**
      * @brief    write a command and check ack
      * @param    header  packet header
      * @param    hlen    length of header
      * @param    body    packet body
      * @param    blen    length of body
      * @return   0       success
      *           not 0   failed
      */
      virtual int8_t writeCommand(const uint8_t *header, uint8_t hlen, const uint8_t *body = 0, uint8_t blen = 0) = 0;
  
      /**
      * @brief    read the response of a command, strip prefix and suffix
      * @param    buf     to contain the response data
      * @param    len     lenght to read
      * @param    timeout max time to wait, 0 means no timeout
      * @return   >=0     length of response without prefix and suffix
      *           <0      failed to read response
      */
      virtual int16_t readResponse(uint8_t buf[], uint8_t len, uint16_t timeout = 1000) = 0;
  };
  
  #endif