comparison usb.h @ 23:845934a4e7fe

Add code to talk to a Phillips PDIUSBB12.
author darius
date Mon, 12 Dec 2005 23:32:59 +1030
parents
children 4e417d84365e
comparison
equal deleted inserted replaced
22:bd792ebf813d 23:845934a4e7fe
1 /*
2 * Copyright (c) 2003 Bernd Walter
3 * All rights reserved.
4 */
5
6 /* Example Source Code for USB Enumeration using a PDIUSBD11 connected to a PIC16F87x
7 * Copyright 2001 Craig Peacock, Craig.Peacock@beyondlogic.org
8 * 31th December 2001 http://www.beyondlogic.org
9 */
10
11 typedef struct {
12 uint8_t bmRequestType;
13 uint8_t bRequest;
14 uint16_t wValue;
15 uint16_t wIndex;
16 uint16_t wLength;
17 } USB_SETUP_REQUEST;
18
19 typedef struct {
20 uint8_t bLength;
21 uint8_t bDescriptorType;
22 uint16_t bcdUSB;
23 uint8_t bDeviceClass;
24 uint8_t bDeviceSubClass;
25 uint8_t bDeviceProtocol;
26 uint8_t bMaxPacketSize0;
27 uint16_t idVendor;
28 uint16_t idProduct;
29 uint16_t bcdDevice;
30 uint8_t iManufacturer;
31 uint8_t iProduct;
32 uint8_t iSerialNumber;
33 uint8_t bNumConfigurations;
34 } USB_DEVICE_DESCRIPTOR;
35
36 typedef struct {
37 uint8_t bLength;
38 uint8_t bDescriptorType;
39 uint8_t bEndpointAddress;
40 uint8_t bmAttributes;
41 uint16_t wMaxPacketSize;
42 uint8_t bInterval;
43 } USB_ENDPOINT_DESCRIPTOR;
44
45 typedef struct {
46 uint8_t bLength;
47 uint8_t bDescriptorType;
48 uint16_t wTotalLength;
49 uint8_t bNumInterfaces;
50 uint8_t bConfigurationValue;
51 uint8_t iConfiguration;
52 uint8_t bmAttributes;
53 uint8_t MaxPower;
54 } USB_CONFIGURATION_DESCRIPTOR;
55
56 typedef struct {
57 uint8_t bLength;
58 uint8_t bDescriptorType;
59 uint8_t bInterfaceNumber;
60 uint8_t bAlternateSetting;
61 uint8_t bNumEndpoints;
62 uint8_t bInterfaceClass;
63 uint8_t bInterfaceSubClass;
64 uint8_t bInterfaceProtocol;
65 uint8_t iInterface;
66 } USB_INTERFACE_DESCRIPTOR;
67
68 typedef struct {
69 uint8_t bLength;
70 uint8_t bDescriptorType;
71 uint16_t wHIDClassSpecComp;
72 uint8_t bCountry;
73 uint8_t bNumDescriptors;
74 uint8_t b1stDescType;
75 uint16_t w1stDescLength;
76 } USB_HID_DESCRIPTOR;
77
78 typedef struct {
79 USB_CONFIGURATION_DESCRIPTOR ConfigDescriptor;
80 USB_INTERFACE_DESCRIPTOR InterfaceDescriptor0;
81 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor00;
82 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor01;
83 USB_INTERFACE_DESCRIPTOR InterfaceDescriptor1;
84 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor10;
85 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor11;
86 } USB_CONFIG_DATA;
87
88 typedef struct {
89 uint8_t bLength;
90 uint8_t bDescriptorType;
91 char bString[];
92 } STRING_DESCRIPTOR;
93
94 typedef struct {
95 uint8_t bLength;
96 uint8_t bDescriptorType;
97 uint16_t wLANGID0;
98 } LANGID_DESCRIPTOR;
99
100 #define D12_SET_ADDRESS_ENABLE 0xD0
101 #define D12_SET_ENDPOINT_ENABLE 0xD8
102 #define D12_SET_MODE 0xF3
103 #define D12_SET_DMA 0xFB
104 #define D12_READ_INTERRUPT_REGISTER 0xF4
105 #define D12_READ_BUFFER 0xF0
106 #define D12_WRITE_BUFFER 0xF0
107 #define D12_ACK_SETUP 0xF1
108 #define D12_CLEAR_BUFFER 0xF2
109 #define D12_VALIDATE_BUFFER 0xFA
110 #define D12_READ_LAST_TRANSACTION 0x40
111 #define D12_SET_ENDPOINT_STATUS 0x40
112 #define D12_READ_ENDPOINT_STATUS 0x80
113
114 #define D12_ENDPOINT_EP0_OUT 0x00
115 #define D12_ENDPOINT_EP0_IN 0x01
116 #define D12_ENDPOINT_EP1_OUT 0x02
117 #define D12_ENDPOINT_EP1_IN 0x03
118 #define D12_ENDPOINT_EP2_OUT 0x04
119 #define D12_ENDPOINT_EP2_IN 0x05
120
121 #define D12_INT_EP0_OUT 0x01
122 #define D12_INT_EP0_IN 0x02
123 #define D12_INT_EP1_OUT 0x04
124 #define D12_INT_EP1_IN 0x08
125 #define D12_INT_EP2_OUT 0x10
126 #define D12_INT_EP2_IN 0x20
127 #define D12_INT_BUS_RESET 0x40
128 #define D12_INT_SUSPEND 0x80
129
130 #define D12_LAST_TRAN_SETUP 0x20
131
132 #define STANDARD_DEVICE_REQUEST 0x00
133 #define STANDARD_INTERFACE_REQUEST 0x01
134 #define STANDARD_ENDPOINT_REQUEST 0x02
135 #define VENDOR_DEVICE_REQUEST 0x40
136 #define VENDOR_INTERFACE_REQUEST 0x41
137 #define VENDOR_ENDPOINT_REQUEST 0x42
138
139 #define GET_STATUS 0
140 #define CLEAR_FEATURE 1
141 #define SET_FEATURE 3
142 #define SET_ADDRESS 5
143 #define GET_DESCRIPTOR 6
144 #define SET_DESCRIPTOR 7
145 #define GET_CONFIGURATION 8
146 #define SET_CONFIGURATION 9
147 #define GET_INTERFACE 10
148 #define SET_INTERFACE 11
149 #define SYNCH_FRAME 12
150
151 #define VENDOR_UPDATE 126
152 #define VENDOR_RESET 127
153
154 #define ENDPOINT_HALT 0
155
156 #define TYPE_DEVICE_DESCRIPTOR 1
157 #define TYPE_CONFIGURATION_DESCRIPTOR 2
158 #define TYPE_STRING_DESCRIPTOR 3
159 #define TYPE_INTERFACE_DESCRIPTOR 4
160 #define TYPE_ENDPOINT_DESCRIPTOR 5
161 #define TYPE_HID_DESCRIPTOR 0x21
162
163 #define USB_ENDPOINT_TYPE_CONTROL 0x00
164 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01
165 #define USB_ENDPOINT_TYPE_BULK 0x02
166 #define USB_ENDPOINT_TYPE_INTERRUPT 0x03
167
168 /* Function prototypes */
169 uint8_t d12_get_data(void);
170 void d12_set_data(uint8_t data);
171 void d12_set_cmd(uint8_t cmd);
172 void d12_write_cmd(uint8_t command, const uint8_t *buffer, uint8_t count);
173 void d12_read_cmd(uint8_t command, uint8_t *buffer, uint8_t count);
174 uint8_t d12_read_endpt(uint8_t endpt, uint8_t *buffer);
175
176 void d12_ep0_irq(void);
177 void d12_getdescriptor(USB_SETUP_REQUEST *SetupPacket);
178 void d12_stallctrlendpt(void);
179 uint8_t d12_read_endpt(uint8_t endpt, uint8_t *buffer);
180 void d12_write_endpt(uint8_t endpt, const uint8_t *buffer, uint8_t bytes);
181 void d12_write_buffer_ep0(void);
182 void d12_send_data_ep2(void);
183 void d12_receive_data_ep2(void);
184
185 static void reset(void);
186
187 void usb_init(void);
188 void usb_intr(void);
189 void usb_gendata(void);