?? chap_9.lst
字號:
C51 COMPILER V7.06 CHAP_9 08/06/2006 09:11:05 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CHAP_9
OBJECT MODULE PLACED IN CHAP_9.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE CHAP_9.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 //*************************************************************************
3 //
4 // P H I L I P S P R O P R I E T A R Y
5 //
6 // COPYRIGHT (c) 1997 BY PHILIPS SINGAPORE.
7 // -- ALL RIGHTS RESERVED --
8 //
9 // File Name: CHAP_9.C
10 // Author: Wenkai Du
11 // Created: 19 Dec 97
12 // Modified:
13 // Revision: 3.0
14 //
15 //*************************************************************************
16 */
17
18 #include <stdio.h>
19 #include <string.h>
20
21 #include <reg51.h> /* special function register declarations */
22
23 #include "epphal.h"
24 #include "d12ci.h"
25 #include "mainloop.h"
26 #include "usb100.h"
27 #include "chap_9.h"
28
29 #define NUM_ENDPOINTS 4
30
31 #define CONFIG_DESCRIPTOR_LENGTH sizeof(USB_CONFIGURATION_DESCRIPTOR) \
32 + sizeof(USB_INTERFACE_DESCRIPTOR) \
33 + (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
34
35 extern CONTROL_XFER ControlData;
36 extern IO_REQUEST idata ioRequest;
37 extern EPPFLAGS bEPPflags;
38
39 code USB_DEVICE_DESCRIPTOR DeviceDescr =
40 {
41 sizeof(USB_DEVICE_DESCRIPTOR),
42 USB_DEVICE_DESCRIPTOR_TYPE,
43 SWAP(0x0100),
44 USB_CLASS_CODE_TEST_CLASS_DEVICE,
45 0, 0,
46 EP0_PACKET_SIZE,
47 SWAP(0x0471),
48 SWAP(0x0666),
49 SWAP(0x0100),
50 0, 0, 0,
51 25
52 };
53
54 code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
55 {
C51 COMPILER V7.06 CHAP_9 08/06/2006 09:11:05 PAGE 2
56 sizeof(USB_CONFIGURATION_DESCRIPTOR),
57 USB_CONFIGURATION_DESCRIPTOR_TYPE,
58 SWAP(CONFIG_DESCRIPTOR_LENGTH),
59 1,
60 1,
61 0,
62 0x60,
63 0x1
64 };
65
66 code USB_INTERFACE_DESCRIPTOR InterfaceDescr =
67 {
68 sizeof(USB_INTERFACE_DESCRIPTOR),
69 USB_INTERFACE_DESCRIPTOR_TYPE,
70 0,
71 0,
72 NUM_ENDPOINTS,
73 USB_CLASS_CODE_TEST_CLASS_DEVICE,
74 USB_SUBCLASS_CODE_TEST_CLASS_D12,
75 USB_PROTOCOL_CODE_TEST_CLASS_D12,
76 0
77 };
78
79 code USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
80 {
81 sizeof(USB_ENDPOINT_DESCRIPTOR),
82 USB_ENDPOINT_DESCRIPTOR_TYPE,
83 0x81,
84 USB_ENDPOINT_TYPE_INTERRUPT,
85 SWAP(EP1_PACKET_SIZE),
86 10
87 };
88
89 code USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
90 {
91 sizeof(USB_ENDPOINT_DESCRIPTOR),
92 USB_ENDPOINT_DESCRIPTOR_TYPE,
93 0x1,
94 USB_ENDPOINT_TYPE_INTERRUPT,
95 SWAP(EP1_PACKET_SIZE),
96 10
97 };
98
99 code USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
100 {
101 sizeof(USB_ENDPOINT_DESCRIPTOR),
102 USB_ENDPOINT_DESCRIPTOR_TYPE,
103 0x82,
104 USB_ENDPOINT_TYPE_BULK,
105 SWAP(EP2_PACKET_SIZE),
106 10
107 };
108
109 code USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
110 {
111 sizeof(USB_ENDPOINT_DESCRIPTOR),
112 USB_ENDPOINT_DESCRIPTOR_TYPE,
113 0x2,
114 USB_ENDPOINT_TYPE_BULK,
115 SWAP(EP2_PACKET_SIZE),
116 10
117 };
C51 COMPILER V7.06 CHAP_9 08/06/2006 09:11:05 PAGE 3
118
119 /*
120 //*************************************************************************
121 // USB Protocol Layer
122 //*************************************************************************
123 */
124
125 void reserved(void)
126 {
127 1 stall_ep0();
128 1 }
129
130 /*
131 //*************************************************************************
132 // USB standard device requests
133 //*************************************************************************
134 */
135
136 void get_status(void)
137 {
138 1 unsigned char endp, txdat[2];
139 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
140 1 unsigned char c;
141 1
142 1 if (bRecipient == USB_RECIPIENT_DEVICE) {
143 2 if(bEPPflags.bits.remote_wakeup == 1)
144 2 txdat[0] = 3;
145 2 else
146 2 txdat[0] = 1;
147 2 txdat[1]=0;
148 2 single_transmit(txdat, 2);
149 2 } else if (bRecipient == USB_RECIPIENT_INTERFACE) {
150 2 txdat[0]=0;
151 2 txdat[1]=0;
152 2 single_transmit(txdat, 2);
153 2 } else if (bRecipient == USB_RECIPIENT_ENDPOINT) {
154 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
155 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
156 2 c = D12_SelectEndpoint(endp*2 + 1); /* Control-in */
157 2 else
158 2 c = D12_SelectEndpoint(endp*2); /* Control-out */
159 2 if(c & D12_STALL)
160 2 txdat[0] = 1;
161 2 else
162 2 txdat[0] = 0;
163 2 txdat[1] = 0;
164 2 single_transmit(txdat, 2);
165 2 } else
166 1 stall_ep0();
167 1 }
168
169 void clear_feature(void)
170 {
171 1 unsigned char endp;
172 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
173 1
174 1 if (bRecipient == USB_RECIPIENT_DEVICE
175 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
176 2 DISABLE;
177 2 bEPPflags.bits.remote_wakeup = 0;
178 2 ENABLE;
179 2 single_transmit(0, 0);
C51 COMPILER V7.06 CHAP_9 08/06/2006 09:11:05 PAGE 4
180 2 }
181 1 else if (bRecipient == USB_RECIPIENT_ENDPOINT
182 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
183 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
184 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
185 2 /* clear TX stall for IN on EPn. */
186 2 D12_SetEndpointStatus(endp*2 + 1, 0);
187 2 else
188 2 /* clear RX stall for OUT on EPn. */
189 2 D12_SetEndpointStatus(endp*2, 0);
190 2 single_transmit(0, 0);
191 2 } else
192 1 stall_ep0();
193 1 }
194
195 void set_feature(void)
196 {
197 1 unsigned char endp;
198 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
199 1
200 1 if (bRecipient == USB_RECIPIENT_DEVICE
201 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
202 2 DISABLE;
203 2 bEPPflags.bits.remote_wakeup = 1;
204 2 ENABLE;
205 2 single_transmit(0, 0);
206 2 }
207 1 else if (bRecipient == USB_RECIPIENT_ENDPOINT
208 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
209 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
210 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
211 2 /* clear TX stall for IN on EPn. */
212 2 D12_SetEndpointStatus(endp*2 + 1, 1);
213 2 else
214 2 /* clear RX stall for OUT on EPn. */
215 2 D12_SetEndpointStatus(endp*2, 1);
216 2 single_transmit(0, 0);
217 2 } else
218 1 stall_ep0();
219 1 }
220
221 void set_address(void)
222 {
223 1 D12_SetAddressEnable((unsigned char)(ControlData.DeviceRequest.wValue &
224 1 DEVICE_ADDRESS_MASK), 1);
225 1 single_transmit(0, 0);
226 1 }
227
228 void get_descriptor(void)
229 {
230 1 unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
231 1
232 1 if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE) {
233 2 code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
234 2 } else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) {
235 2 code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
236 2 } else
237 1 stall_ep0();
238 1 }
239
240 void get_configuration(void)
241 {
C51 COMPILER V7.06 CHAP_9 08/06/2006 09:11:05 PAGE 5
242 1 unsigned char c = bEPPflags.bits.configuration;
243 1
244 1 single_transmit(&c, 1);
245 1 }
246
247 void set_configuration(void)
248 {
249 1 if (ControlData.DeviceRequest.wValue == 0) {
250 2 /* put device in unconfigured state */
251 2 single_transmit(0, 0);
252 2 DISABLE;
253 2 bEPPflags.bits.configuration = 0;
254 2 ENABLE;
255 2 init_unconfig();
256 2 } else if (ControlData.DeviceRequest.wValue == 1) {
257 2 /* Configure device */
258 2 single_transmit(0, 0);
259 2
260 2 init_unconfig();
261 2 init_config();
262 2
263 2 DISABLE;
264 2 bEPPflags.bits.configuration = 1;
265 2 ENABLE;
266 2 } else
267 1 stall_ep0();
268 1 }
269
270 void get_interface(void)
271 {
272 1 unsigned char txdat = 0; /* Only/Current interface = 0 */
273 1 single_transmit(&txdat, 1);
274 1 }
275
276 void set_interface(void)
277 {
278 1 if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
279 1 single_transmit(0, 0);
280 1 else
281 1 stall_ep0();
282 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 448 ----
CONSTANT SIZE = 64 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -