* implement rfid_reader_{get,set}opt()
[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 #define OPENPCD_CMD_GET_SERIAL          (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
51 #define OPENPCD_CMD_GET_API_VERSION     (0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
52 #define OPENPCD_CMD_GET_ENVIRONMENT     (0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
53 #define OPENPCD_CMD_SET_ENVIRONMENT     (0x6|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
54 #define OPENPCD_CMD_RESET               (0x7|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
55
56 /* CMD_CLS_RC632 */
57 #define OPENPCD_CMD_WRITE_REG           (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
58 #define OPENPCD_CMD_WRITE_FIFO          (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
59 #define OPENPCD_CMD_WRITE_VFIFO         (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
60 #define OPENPCD_CMD_REG_BITS_CLEAR      (0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
61 #define OPENPCD_CMD_REG_BITS_SET        (0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
62 #define OPENPCD_CMD_READ_REG            (0x6|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
63 #define OPENPCD_CMD_READ_FIFO           (0x7|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
64 #define OPENPCD_CMD_READ_VFIFO          (0x8|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
65 #define OPENPCD_CMD_DUMP_REGS           (0x9|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
66 #define OPENPCD_CMD_IRQ                 (0xa|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
67
68 /* CMD_CLS_SSC */
69 #define OPENPCD_CMD_SSC_READ            (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_SSC))
70 #define OPENPCD_CMD_SSC_WRITE           (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_SSC))
71
72 /* CMD_CLS_PWM */
73 #define OPENPCD_CMD_PWM_ENABLE          (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
74 #define OPENPCD_CMD_PWM_DUTY_SET        (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
75 #define OPENPCD_CMD_PWM_DUTY_GET        (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
76 #define OPENPCD_CMD_PWM_FREQ_SET        (0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
77 #define OPENPCD_CMD_PWM_FREQ_GET        (0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
78
79 /* CMD_CLS_PICC */
80 #define OPENPCD_CMD_PICC_REG_WRITE      (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PICC))
81 #define OPENPCD_CMD_PICC_REG_READ       (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PICC))
82
83 /* CMD_CLS_ADC */
84 #define OPENPCD_CMD_ADC_READ            (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_ADC))
85
86 /* CMD_CLS_USBTEST */
87 #define OPENPCD_CMD_USBTEST_IN          (0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
88 #define OPENPCD_CMD_USBTEST_OUT         (0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
89
90 /* FIXME */
91 #define OPENPCD_CMD_PIO_IRQ             (0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
92
93
94 #define OPENPCD_VENDOR_ID       0x2342
95 #define OPENPCD_PRODUCT_ID      0x0001
96 #define OPENPCD_OUT_EP          0x01
97 #define OPENPCD_IN_EP           0x82
98 #define OPENPCD_IRQ_EP          0x83
99
100 extern const struct rfid_reader rfid_reader_openpcd;
101
102 /* 0...0xffff = global options, 0x10000...0x1ffff = private options */
103 enum rfid_reader_openpcd_opt {
104         RFID_OPT_RDR_ENVIRONMENT        = 0x10001,
105 };
106
107 #endif