📄 d12hap.lst
字号:
224 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
225 2 {
226 3 // clear TX stall for IN on EPn.
227 3 D12_SetEndpointStatus(endp*2 + 1, 1);//设置输入端点禁止
228 3 }
229 2 else
230 2 {
231 3 // clear RX stall for OUT on EPn.
232 3 D12_SetEndpointStatus(endp*2, 1); //设置输出端点禁止
233 3 }
234 2 single_transmit(0, 0); //发送响应
235 2 } else
236 1 stall_ep0();
237 1 }
C51 COMPILER V7.01 D12HAP 11/14/2003 09:44:51 PAGE 5
238
239 void get_descriptor(void)
240 {
241 1
242 1 unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
243 1
244 1 if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
245 1 {
246 2 code_transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
247 2 }
248 1 else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE)
249 1 {
250 2 //if(ControlData.DeviceRequest.wLength>CONFIG_DESCRIPTOR_LENGTH)
251 2
252 2 //{
253 2 // ControlData.DeviceRequest.wLength = CONFIG_DESCRIPTOR_LENGTH;
254 2 // code_transmit((unsigned char code *)&ConfigDescr, ControlData.DeviceRequest.wLength);
255 2 // }
256 2 //else
257 2 code_transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
258 2
259 2 }
260 1 else
261 1
262 1 stall_ep0();
263 1 }
264 /*void set_descriptor(void)
265 {
266
267
268 }*/
269
270 void get_configuration(void)
271 {
272 1
273 1 unsigned char c = bEPPflags.bits.configuration;
274 1
275 1 single_transmit(&c, 1);
276 1 }
277 void set_configuration(void)
278 {
279 1
280 1 if (ControlData.DeviceRequest.wValue == 0)
281 1 {
282 2 //* put device in unconfigured state
283 2 single_transmit(0, 0);
284 2 DISABLE;
285 2 bEPPflags.bits.configuration = 0;
286 2 ENABLE;
287 2 init_unconfig();
288 2 }
289 1 else if (ControlData.DeviceRequest.wValue == 1)
290 1 {
291 2 // Configure device
292 2 single_transmit(0, 0);
293 2
294 2 init_unconfig();
295 2
296 2 init_config();
297 2
298 2 DISABLE;
299 2 bEPPflags.bits.configuration = 1;
C51 COMPILER V7.01 D12HAP 11/14/2003 09:44:51 PAGE 6
300 2 ENABLE;
301 2 }
302 1 else
303 1
304 1 stall_ep0();
305 1
306 1 }
307 void get_interface(void)
308 {
309 1 unsigned char txdat = 0; // Only/Current interface = 0
310 1
311 1 single_transmit(&txdat, 1);
312 1 }
313 void set_interface(void)
314 {
315 1 if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
316 1
317 1 single_transmit(0, 0);
318 1 else
319 1
320 1 stall_ep0();
321 1
322 1 }
323 /*void synchronous_frame(void)
324 {
325
326
327
328
329 }*/
330
331 void reserved(void)
332 {
333 1 stall_ep0();
334 1 }
335
336 void get_firmware_version()
337 {
338 1 unsigned char i;
339 1
340 1 i = 0x30; // firmware version number
341 1 single_transmit((unsigned char *)&i, 1);
342 1
343 1 }
344
345 void get_buffer_size()
346 {
347 1 unsigned char i[4];
348 1
349 1 if(bNoRAM == TRUE) {
350 2 i[0] = EP2_PACKET_SIZE;
351 2 i[1] = 0;
352 2 i[2] = 0;
353 2 i[3] = 0;
354 2 } else {
355 2 i[0] = 0;
356 2 i[1] = 1;
357 2 i[2] = 0;
358 2 i[3] = 0;
359 2 }
360 1 single_transmit(i, 4);
361 1
C51 COMPILER V7.01 D12HAP 11/14/2003 09:44:51 PAGE 7
362 1 }
363 /*void setup_dma_request()
364 {
365 memcpy((unsigned char *)&ioRequest + ControlData.DeviceRequest.wValue,
366 ControlData.dataBuffer,
367 ControlData.DeviceRequest.wLength);
368
369 ioRequest.uSize = SWAP(ioRequest.uSize);
370 ioRequest.uAddressL = SWAP(ioRequest.uAddressL);
371
372 if(ioRequest.uSize > DMA_BUFFER_SIZE) { // Unaccepted request
373 stall_ep0();
374 }
375 else if(bNoRAM == TRUE && ioRequest.uSize > EP2_PACKET_SIZE) {
376 stall_ep0();
377 }
378 else {
379 if(bEPPflags.bits.dma_state == DMA_IDLE) {
380 DISABLE;
381 bEPPflags.bits.setup_dma ++;
382 ENABLE;
383 }
384 else {
385 DISABLE;
386 bEPPflags.bits.dma_state = DMA_PENDING;
387 ENABLE;
388 }
389
390 } // else if accepted request
391 }*/
392
393 void read_write_register(void)
394 {
395 1 unsigned char i;
396 1
397 1 if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
398 2
399 2 if(bEPPflags.bits.verbose)
400 2 printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
401 2 ControlData.DeviceRequest.wValue,
402 2 ControlData.DeviceRequest.wLength,
403 2 ControlData.DeviceRequest.wIndex);
404 2
405 2 if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
406 2 ControlData.DeviceRequest.wValue == 0 &&
407 2 ControlData.DeviceRequest.wLength == 1)
408 2 get_firmware_version();
409 2 else
410 2 if(ControlData.DeviceRequest.wIndex == GET_BUFFER_SIZE &&
411 2 ControlData.DeviceRequest.wValue == 0 &&
412 2 ControlData.DeviceRequest.wLength == 4)
413 2 get_buffer_size();
414 2 else
415 2 stall_ep0();
416 2
417 2 } // if read register
418 1 else{
419 2 if(bEPPflags.bits.verbose) {
420 3
421 3 //printf("Write Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
422 3 // ControlData.DeviceRequest.wValue,
423 3 // ControlData.DeviceRequest.wLength,
C51 COMPILER V7.01 D12HAP 11/14/2003 09:44:51 PAGE 8
424 3 // ControlData.DeviceRequest.wIndex);
425 3
426 3 //printf("Data: ");
427 3 for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
428 3 printf("0x%bx, ", *((ControlData.dataBuffer)+i));
429 3 printf("\n");
430 3 }
431 2
432 2 //if(ControlData.DeviceRequest.wIndex == SETUP_DMA_REQUEST &&
433 2 //ControlData.DeviceRequest.wValue == 0 &&
434 2 //ControlData.DeviceRequest.wLength == 6)
435 2 //setup_dma_request();
436 2 //stall_ep0();
437 2 //else
438 2 stall_ep0();
439 2 } // if write register
440 1 }
441
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 769 ----
CONSTANT SIZE = 135 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 18
DATA SIZE = ---- ----
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 + -