📄 sl811.lst
字号:
253 4 } // through the hub
254 3 }
255 2
256 2 //-----------------------STALL----------------------------
257 2 if (result & EP0_STALL) // STALL detected
258 2 return TRUE; // for unsupported request.
259 2
260 2 //----------------------OVEFLOW---------------------------
261 2 if (result & EP0_OVERFLOW) // OVERFLOW detected
262 2 //result=result;
263 2 break;
264 2 //-----------------------ERROR----------------------------
265 2 if (result & EP0_ERROR) // ERROR detected
266 2 //result=result;
267 2 break;
268 2 } // end of While(1)
269 1
270 1 if (result & EP0_ACK) // on ACK transmission
271 1 return TRUE; // return OK
272 1
273 1 return FALSE; // fail transmission
274 1
275 1 }
276 //*****************************************************************************************
277 // Control Endpoint 0's USB Data Xfer
278 // ep0Xfer, endpoint 0 data transfer
279 //*****************************************************************************************
280 unsigned char ep0Xfer(void)
281 {
282 1 //unsigned char wLen;
283 1
284 1 //wLen=usbstack.wLen;
285 1 usbstack.endpoint=0;
286 1 //----------------------------------------------------
287 1 // SETUP token with 8-byte request on endpoint 0
288 1 //----------------------------------------------------
289 1 usbstack.pid=PID_SETUP;
290 1 usbstack.wLen=8;
291 1 //usbstack.buffer=&usbstack.setup;
292 1 if (!usbXfer())
293 1 return FALSE;
294 1 //DelayMs(10);
295 1 usbstack.pid = PID_IN;
296 1 //----------------------------------------------------
297 1 // IN or OUT data stage on endpoint 0
298 1 //----------------------------------------------------
299 1 usbstack.wLen=usbstack.setup.wLength;
300 1 if (usbstack.wLen) // if there are data for transfer
301 1 {
302 2 if (usbstack.setup.bmRequest & 0x80) // host-to-device : IN token
303 2 {
304 3 usbstack.pid = PID_IN;
305 3
306 3 if(!usbXfer())
307 3 return FALSE;
308 3 //usbstack.wPayload = 0;
309 3 usbstack.pid = PID_OUT;
310 3 }
311 2 else // device-to-host : OUT token
312 2 {
C51 COMPILER V7.20 SL811 12/13/2005 15:28:02 PAGE 8
313 3 usbstack.pid = PID_OUT;
314 3
315 3 if(!usbXfer())
316 3 return FALSE;
317 3 usbstack.pid = PID_IN;
318 3 }
319 2 }
320 1 //DelayMs(10);
321 1 //----------------------------------------------------
322 1 // Status stage IN or OUT zero-length data packet
323 1 //----------------------------------------------------
324 1 usbstack.wLen=0;
325 1 if(!usbXfer())
326 1 return FALSE;
327 1
328 1 return TRUE;
329 1
330 1 }
331
332
333 unsigned char epBulkSend(unsigned char *pBuffer,unsigned int len)
334 {
335 1 usbstack.usbaddr=0x1;
336 1 usbstack.endpoint=usbstack.epbulkout;
337 1 usbstack.pid=PID_OUT;
338 1 usbstack.wPayload=64;
339 1 usbstack.wLen=len;
340 1 usbstack.buffer=pBuffer;
341 1 while(len>0)
342 1 {
343 2 if (len > usbstack.wPayload)
344 2 usbstack.wLen = usbstack.wPayload;
345 2 else
346 2 usbstack.wLen = len;
347 2 if(!usbXfer())
348 2 return FALSE;
349 2 len-=usbstack.wLen;
350 2 usbstack.buffer=usbstack.buffer+usbstack.wLen;
351 2 //DelayUs(10);
352 2 }
353 1 return TRUE;
354 1 }
355
356 unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len)
357 {
358 1 usbstack.usbaddr=0x1;
359 1 usbstack.endpoint=usbstack.epbulkin;
360 1 usbstack.pid=PID_IN;
361 1 usbstack.wPayload=64;
362 1 usbstack.wLen=len;
363 1 usbstack.buffer=pBuffer;
364 1 if(usbstack.wLen)
365 1 {
366 2 if(!usbXfer())
367 2 return FALSE;
368 2 }
369 1 return TRUE;
370 1 }
371 //*****************************************************************************************
372 // Control endpoint
373 //*****************************************************************************************
374 //void VendorCmd(void)
C51 COMPILER V7.20 SL811 12/13/2005 15:28:02 PAGE 9
375 //{
376 // ep0Xfer();
377 //}
378
379 //*****************************************************************************************
380 // Set Device Address :
381 //*****************************************************************************************
382 unsigned char SetAddress(unsigned char addr)
383 {
384 1 usbstack.usbaddr=0;
385 1 usbstack.setup.bmRequest=0;
386 1 usbstack.setup.bRequest=SET_ADDRESS;
387 1 usbstack.setup.wValue=addr;
388 1 usbstack.setup.wIndex=0;
389 1 usbstack.setup.wLength=0;
390 1 //usbstack.buffer=&usbstack.setup;
391 1 return ep0Xfer();
392 1
393 1 }
394
395 //*****************************************************************************************
396 // Set Device Configuration :
397 //*****************************************************************************************
398 unsigned char Set_Configuration(void)
399 {
400 1 //usbstack.usbaddr=usbaddr;
401 1 //usbstack.
402 1 usbstack.setup.bmRequest=0;
403 1 usbstack.setup.bRequest=SET_CONFIG;
404 1 //usbstack.setup.wValue=wVal;
405 1 usbstack.setup.wIndex=0;
406 1 usbstack.setup.wLength=0;
407 1 usbstack.buffer=NULL;
408 1 return ep0Xfer();
409 1
410 1 }
411
412 //*****************************************************************************************
413 // Get Device Descriptor : Device, Configuration, String
414 //*****************************************************************************************
415 unsigned char GetDesc(void)
416 {
417 1
418 1 usbstack.setup.bmRequest=0x80;
419 1 usbstack.setup.bRequest=GET_DESCRIPTOR;
420 1 usbstack.setup.wValue=WordSwap(usbstack.setup.wValue);
421 1
422 1 usbstack.wPayload=uDev.wPayLoad[0];
423 1 //usbstack.buffer=&usbstack.setup;
424 1 return ep0Xfer();
425 1 }
426
427 //*****************************************************************************************
428 // USB Data Endpoint Read/Write
429 // wLen is in low byte first format
430 //*****************************************************************************************
431 /*
432 unsigned char DataRW(BYTE epaddr)
433 {
434 //xdata BYTE pid = PID_OUT;
435
436 usbstack.pid=PID_OUT;
C51 COMPILER V7.20 SL811 12/13/2005 15:28:02 PAGE 10
437 usbstack.endpoint=epaddr&0x0F;
438
439 if(epaddr & 0x80) // get direction of transfer
440 usbstack.pid = PID_IN;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -