summaryrefslogtreecommitdiff
path: root/firmware/include/openpcd.h
blob: cdfb7a79b5ab14e510f8ab3e4f80c4dd5db908d8 (plain)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef _OPENPCD_PROTO_H
#define _OPENPCD_PROTO_H

/* This header file describes the USB protocol of the OpenPCD RFID reader */

#include <sys/types.h>

struct openpcd_hdr {
	u_int8_t cmd;		/* command. high nibble: class,
				 *	     low nibble: cmd */
	u_int8_t flags;
	u_int8_t reg;		/* register */
	u_int8_t val;		/* value (in case of write *) */
	u_int8_t data[0];
} __attribute__ ((packed));

#define OPCD_REV_LEN	16
struct openpcd_compile_version {
	char svnrev[OPCD_REV_LEN];
	char by[OPCD_REV_LEN];
	char date[OPCD_REV_LEN];
} __attribute__ ((packed));

#define OPENPCD_FLAG_RESPOND	0x01	/* Response requested */
#define OPENPCD_FLAG_ERROR	0x80	/* An error occurred */

enum openpcd_cmd_class {
	OPENPCD_CMD_CLS_GENERIC		= 0x0,
	/* PCD (reader) side */
	OPENPCD_CMD_CLS_RC632		= 0x1,
	//OPENPCD_CMD_CLS_LED		= 0x2,
	OPENPCD_CMD_CLS_SSC		= 0x3,
	OPENPCD_CMD_CLS_PWM		= 0x4,
	OPENPCD_CMD_CLS_ADC		= 0x5,
	/* PICC (transponder) side */
	OPENPCD_CMD_CLS_PICC		= 0xe,

	OPENPCD_CMD_CLS_USBTEST		= 0xf,
};

#define OPENPCD_REG_MAX	0x3f

#define OPENPCD_CMD_CLS(x)	(x >> 4)
#define OPENPCD_CMD(x)		(x & 0xf)

#define OPENPCD_CLS2CMD(x)	(x << 4)

#define OPENPCD_CMD_GET_VERSION		(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))
#define OPENPCD_CMD_SET_LED		(0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_GENERIC))

/* CMD_CLS_RC632 */
#define OPENPCD_CMD_WRITE_REG		(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_WRITE_FIFO		(0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_WRITE_VFIFO		(0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_REG_BITS_CLEAR	(0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_REG_BITS_SET	(0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_READ_REG		(0x6|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_READ_FIFO		(0x7|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_READ_VFIFO		(0x8|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_DUMP_REGS		(0x9|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))
#define OPENPCD_CMD_IRQ			(0xa|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_RC632))

/* CMD_CLS_SSC */
#define OPENPCD_CMD_SSC_READ		(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_SSC))
#define OPENPCD_CMD_SSC_WRITE		(0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_SSC))

/* CMD_CLS_PWM */
#define OPENPCD_CMD_PWM_ENABLE		(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
#define OPENPCD_CMD_PWM_DUTY_SET	(0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
#define OPENPCD_CMD_PWM_DUTY_GET	(0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
#define OPENPCD_CMD_PWM_FREQ_SET	(0x4|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))
#define OPENPCD_CMD_PWM_FREQ_GET	(0x5|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PWM))

/* CMD_CLS_PICC */
#define OPENPCD_CMD_PICC_REG_WRITE	(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PICC))
#define OPENPCD_CMD_PICC_REG_READ	(0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_PICC))

/* CMD_CLS_ADC */
#define OPENPCD_CMD_ADC_READ		(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_ADC))

/* CMD_CLS_USBTEST */
#define OPENPCD_CMD_USBTEST_IN		(0x1|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))
#define OPENPCD_CMD_USBTEST_OUT		(0x2|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))

/* FIXME */
#define OPENPCD_CMD_PIO_IRQ		(0x3|OPENPCD_CLS2CMD(OPENPCD_CMD_CLS_USBTEST))


#define OPENPCD_VENDOR_ID	0x16c0
#define OPENPCD_PRODUCT_ID	0x076b
#define OPENPICC_PRODUCT_ID	0x076c
#define OPENPCD_OUT_EP		0x01
#define OPENPCD_IN_EP		0x82
#define OPENPCD_IRQ_EP		0x83

#endif
personal git repositories of Harald Welte. Your mileage may vary