update to new (four-byte, explicit response_request flag) revision of openpcd usb...
[librfid] / include / librfid / rfid_reader_openpcd.h
1 #ifndef _OPENPCD_PROTO_H
2 #define _OPENPCD_PROTO_H
3
4 /* This header file describes the USB protocol of the OpenPCD RFID reader */
5
6 #include <sys/types.h>
7
8 struct openpcd_hdr {
9         u_int8_t cmd;           /* command. high nibble: class,
10                                  *           low nibble: cmd */
11         u_int8_t flags;
12         u_int8_t reg;           /* register */
13         u_int8_t val;           /* value (in case of write *) */
14         u_int8_t data[0];
15 } __attribute__ ((packed));
16
17 #define OPCD_REV_LEN    16
18 struct openpcd_compile_version {
19         char svnrev[OPCD_REV_LEN];
20         char by[OPCD_REV_LEN];
21         char date[OPCD_REV_LEN];
22 } __attribute__ ((packed));
23
24 #define OPENPCD_FLAG_RESPOND    0x01    /* Response requested */
25 #define OPENPCD_FLAG_ERROR      0x80    /* An error occurred */
26
27 enum openpcd_cmd_class {
28         OPENPCD_CMD_CLS_GENERIC         = 0x0,
29         /* PCD (reader) side */
30         OPENPCD_CMD_CLS_RC632           = 0x1,
31         //OPENPCD_CMD_CLS_LED           = 0x2,
32         OPENPCD_CMD_CLS_SSC             = 0x3,
33         OPENPCD_CMD_CLS_PWM             = 0x4,
34         OPENPCD_CMD_CLS_ADC             = 0x5,
35         /* PICC (transponder) side */
36         OPENPCD_CMD_CLS_PICC            = 0xe,
37
38         OPENPCD_CMD_CLS_USBTEST         = 0xf,
39 };
40
41 #define OPENPCD_REG_MAX 0x3f
42
43 #define OPENPCD_CMD_CLS(x)      (x >> 4)
44 #define OPENPCD_CMD(x)          (x & 0xf)
45
46 #define OPENPCD_CLS2CMD(x)      (x << 4)
47
48 #define OPENPCD_CMD_GET_VERSION         (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
49 #define OPENPCD_CMD_SET_LED             (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
50
51 /* CMD_CLS_RC632 */
52 #define OPENPCD_CMD_WRITE_REG           (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
53 #define OPENPCD_CMD_WRITE_FIFO          (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
54 #define OPENPCD_CMD_WRITE_VFIFO         (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
55 #define OPENPCD_CMD_REG_BITS_CLEAR      (0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
56 #define OPENPCD_CMD_REG_BITS_SET        (0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
57 #define OPENPCD_CMD_READ_REG            (0x6|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
58 #define OPENPCD_CMD_READ_FIFO           (0x7|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
59 #define OPENPCD_CMD_READ_VFIFO          (0x8|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
60 #define OPENPCD_CMD_DUMP_REGS           (0x9|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
61 #define OPENPCD_CMD_IRQ                 (0xa|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
62
63 /* CMD_CLS_SSC */
64 #define OPENPCD_CMD_SSC_READ            (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_SSC))
65 #define OPENPCD_CMD_SSC_WRITE           (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_SSC))
66
67 /* CMD_CLS_PWM */
68 #define OPENPCD_CMD_PWM_ENABLE          (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
69 #define OPENPCD_CMD_PWM_DUTY_SET        (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
70 #define OPENPCD_CMD_PWM_DUTY_GET        (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
71 #define OPENPCD_CMD_PWM_FREQ_SET        (0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
72 #define OPENPCD_CMD_PWM_FREQ_GET        (0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
73
74 /* CMD_CLS_PICC */
75 #define OPENPCD_CMD_PICC_REG_WRITE      (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PICC))
76 #define OPENPCD_CMD_PICC_REG_READ       (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PICC))
77
78 /* CMD_CLS_ADC */
79 #define OPENPCD_CMD_ADC_READ            (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_ADC))
80
81 /* CMD_CLS_USBTEST */
82 #define OPENPCD_CMD_USBTEST_IN          (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
83 #define OPENPCD_CMD_USBTEST_OUT         (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
84
85 /* FIXME */
86 #define OPENPCD_CMD_PIO_IRQ             (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
87
88
89 #define OPENPCD_VENDOR_ID       0x2342
90 #define OPENPCD_PRODUCT_ID      0x0001
91 #define OPENPCD_OUT_EP          0x01
92 #define OPENPCD_IN_EP           0x82
93 #define OPENPCD_IRQ_EP          0x83
94
95 extern struct rfid_reader rfid_reader_openpcd;
96
97 #endif