00001
00002
00003
00004
00005
00006
00007
00008
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _CSL_CDCAUX_H_
00024 #define _CSL_CDCAUX_H_
00025
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029
00030 #include "csl_usbAux.h"
00031 #include "csl_cdc.h"
00032
00033 #include <stdio.h>
00034
00091 static inline
00092 CSL_CdcRequestRet CDC_reqSetAddress(CSL_UsbDevNum devNum,
00093 CSL_UsbSetupStruct *usbSetup,
00094 pUsbEpHandle hInEp,
00095 pUsbEpHandle hOutEp,
00096 void *pCdc)
00097 {
00098 USB_setDevAddr(devNum, (Uint16)(usbSetup->wValue));
00099
00100 return(CSL_CDC_REQUEST_DONE);
00101 }
00102
00157 static inline
00158 CSL_CdcRequestRet CDC_reqSetConfiguration(CSL_UsbDevNum devNum,
00159 CSL_UsbSetupStruct *usbSetup,
00160 pUsbEpHandle hInEp,
00161 pUsbEpHandle hOutEp,
00162 void *pCdc)
00163 {
00164 CSL_CdcRequestRet retStat;
00165
00166 pCdcClassHandle pCdcClassHdl;
00167 CSL_CdcCtrlObject *pCtrlHandle;
00168
00169 pCdcClassHdl = (pCdcClassHandle)(pCdc);
00170 pCtrlHandle = &pCdcClassHdl->ctrlHandle;
00171
00172 if((usbSetup->wValue == FALSE) || (usbSetup->wValue == TRUE))
00173 {
00174 pCtrlHandle->curConfigStat = usbSetup->wValue;
00175
00176 USB_setConfiguration(devNum,usbSetup->wValue);
00177
00178 retStat = CSL_CDC_REQUEST_SEND_ACK;
00179 }
00180 else
00181 {
00182
00183 retStat = CSL_CDC_REQUEST_STALL;
00184 }
00185
00186 return(retStat);
00187 }
00188
00243 static inline
00244 CSL_CdcRequestRet CDC_reqClearFeature(CSL_UsbDevNum devNum,
00245 CSL_UsbSetupStruct *usbSetup,
00246 pUsbEpHandle hInEp,
00247 pUsbEpHandle hOutEp,
00248 void *pCdc)
00249 {
00250 CSL_CdcRequestRet retStat;
00251 pUsbEpHandle hEPx;
00252 Uint16 endpt;
00253
00254 retStat = CSL_CDC_REQUEST_SEND_ACK;
00255
00256 switch(usbSetup->wValue)
00257 {
00258 case CSL_USB_FEATURE_ENDPOINT_STALL:
00259 endpt = (usbSetup->wIndex) & CSL_CDC_8BIT_MASK;
00260 hEPx = USB_epNumToHandle(devNum, endpt);
00261 USB_clearEndptStall(hEPx);
00262 break;
00263
00264 case CSL_USB_FEATURE_REMOTE_WAKEUP:
00265 USB_setRemoteWakeup(devNum, (CSL_UsbBoolean)FALSE);
00266 break;
00267
00268 default:
00269
00270 retStat = CSL_CDC_REQUEST_STALL;
00271 break;
00272 }
00273
00274 return(retStat);
00275 }
00276
00331 static inline
00332 CSL_CdcRequestRet CDC_reqGetStatus(CSL_UsbDevNum devNum,
00333 CSL_UsbSetupStruct *usbSetup,
00334 pUsbEpHandle hInEp,
00335 pUsbEpHandle hOutEp,
00336 void *pCdc)
00337 {
00338 CSL_CdcRequestRet retStat;
00339 pCdcClassHandle pCdcClassHdl;
00340 CSL_CdcCtrlObject *pCtrlHandle;
00341 pUsbEpHandle hEPx;
00342 CSL_Status status;
00343 Uint16 endpt;
00344
00345 pCdcClassHdl = (pCdcClassHandle)(pCdc);
00346 pCtrlHandle = &pCdcClassHdl->ctrlHandle;
00347 retStat = CSL_CDC_REQUEST_GET_ACK;
00348
00349 switch(usbSetup->bmRequestType - CSL_CDC_REQUEST_TYPE_BASE)
00350 {
00351
00352 case CSL_CDC_REQUEST_TYPE_DEVICE_STATUS:
00353 pCtrlHandle->ctrlBuffer[0] =
00354 (((Uint16)USB_getRemoteWakeupStat(devNum))<<1) |
00355 CSL_CDC_CURRDEV_STAT;
00356 USB_postTransaction(hInEp, 2, &pCtrlHandle->ctrlBuffer,
00357 CSL_USB_IOFLAG_NONE);
00358 break;
00359
00360
00361 case CSL_CDC_REQUEST_TYPE_INTERFACE_STATUS:
00362 pCtrlHandle->ctrlBuffer[0] = CSL_CDC_CURRDEV_STAT;
00363 USB_postTransaction(hInEp, 2, &pCtrlHandle->ctrlBuffer,
00364 CSL_USB_IOFLAG_NONE);
00365 break;
00366
00367
00368 case CSL_CDC_REQUEST_TYPE_EP_STATUS:
00369
00370 endpt = usbSetup->wIndex & 0xFF;
00371 hEPx = USB_epNumToHandle(devNum, endpt);
00372 pCtrlHandle->ctrlBuffer[0] = (Uint16)USB_getEndptStall(hEPx,
00373 &status);
00374 USB_postTransaction(hInEp, 2, &pCtrlHandle->ctrlBuffer,
00375 CSL_USB_IOFLAG_NONE);
00376 break;
00377
00378 default:
00379
00380 retStat = CSL_CDC_REQUEST_STALL;
00381 break;
00382 }
00383
00384 return(retStat);
00385 }
00386
00441 static inline
00442 CSL_CdcRequestRet CDC_reqSetFeature(CSL_UsbDevNum devNum,
00443 CSL_UsbSetupStruct *usbSetup,
00444 pUsbEpHandle hInEp,
00445 pUsbEpHandle hOutEp,
00446 void *pCdc)
00447 {
00448 CSL_CdcRequestRet retStat;
00449 pUsbEpHandle hEPx;
00450 Uint16 endpt;
00451
00452 retStat = CSL_CDC_REQUEST_SEND_ACK;
00453
00454 switch(usbSetup->wValue)
00455 {
00456 case CSL_USB_FEATURE_ENDPOINT_STALL:
00457
00458 endpt = (usbSetup->wIndex) & CSL_CDC_8BIT_MASK;
00459 hEPx = USB_epNumToHandle(devNum, endpt);
00460 USB_stallEndpt(hEPx);
00461 break;
00462
00463 case CSL_USB_FEATURE_REMOTE_WAKEUP:
00464 USB_setRemoteWakeup(devNum, (CSL_UsbBoolean)TRUE);
00465 break;
00466
00467 default:
00468
00469 retStat = CSL_CDC_REQUEST_STALL;
00470 break;
00471 }
00472
00473 return(retStat);
00474 }
00475
00529 static inline
00530 CSL_CdcRequestRet CDC_reqGetConfiguration(CSL_UsbDevNum devNum,
00531 CSL_UsbSetupStruct *usbSetup,
00532 pUsbEpHandle hInEp,
00533 pUsbEpHandle hOutEp,
00534 void *pCdc)
00535 {
00536 pCdcClassHandle pCdcClassHdl;
00537 CSL_CdcCtrlObject* pCtrlHandle;
00538
00539 pCdcClassHdl = (pCdcClassHandle)(pCdc);
00540 pCtrlHandle = &pCdcClassHdl->ctrlHandle;
00541
00542
00543 pCtrlHandle->ctrlBuffer[1] = pCtrlHandle->curConfigStat;
00544 USB_postTransaction(hInEp, 1, (void*)&pCtrlHandle->ctrlBuffer,
00545 CSL_USB_IOFLAG_NONE | CSL_USB_IOFLAG_NOSHORT);
00546
00547 return(CSL_CDC_REQUEST_GET_ACK);
00548 }
00549
00550
00606 static inline
00607 CSL_CdcRequestRet CDC_reqGetMaxLUN(CSL_UsbDevNum devNum,
00608 CSL_UsbSetupStruct *usbSetup,
00609 pUsbEpHandle hInEp,
00610 pUsbEpHandle hOutEp,
00611 void *pCdc)
00612 {
00613 pCdcClassHandle pCdcClassHdl;
00614 CSL_CdcCtrlObject* pCtrlHandle;
00615 CSL_CdcRequestRet retStat;
00616
00617 pCdcClassHdl = (pCdcClassHandle)(pCdc);
00618 pCtrlHandle = &pCdcClassHdl->ctrlHandle;
00619 pCtrlHandle->ctrlBuffer[1] = pCdcClassHdl->cdcHandle.noOfPort;
00620
00621
00622
00623
00624
00625
00626
00627 if ((usbSetup->wIndex == 0) &&
00628 (usbSetup->wLength == 1) &&
00629 (usbSetup->wValue == 0))
00630 {
00631 USB_postTransaction(hInEp, 1, &pCtrlHandle->ctrlBuffer[0],
00632 CSL_USB_IOFLAG_NONE);
00633
00634
00635 retStat = CSL_CDC_REQUEST_GET_ACK;
00636 }
00637 else
00638 {
00639 retStat = CSL_CDC_REQUEST_STALL;
00640 }
00641
00642 return (retStat);
00643 }
00644
00700 static inline
00701 CSL_CdcRequestRet CDC_reqGetInterface(CSL_UsbDevNum devNum,
00702 CSL_UsbSetupStruct *usbSetup,
00703 pUsbEpHandle hInEp,
00704 pUsbEpHandle hOutEp,
00705 void *pCdc)
00706 {
00707 pCdcClassHandle pCdcClassHdl;
00708 CSL_CdcCtrlObject *pCtrlHandle;
00709 CSL_CdcRequestRet retStat;
00710
00711 pCdcClassHdl = (pCdcClassHandle)(pCdc);
00712 pCtrlHandle = &pCdcClassHdl->ctrlHandle;
00713 retStat = CSL_CDC_REQUEST_GET_ACK;
00714
00715
00716 if(usbSetup->wIndex == 0)
00717 {
00718
00719 pCtrlHandle->ctrlBuffer[1] = 0;
00720 USB_postTransaction(hInEp, 1, &pCtrlHandle->ctrlBuffer[0],
00721 CSL_USB_IOFLAG_NONE);
00722 }
00723 else
00724 {
00725
00726 retStat = CSL_CDC_REQUEST_STALL;
00727 }
00728
00729 return retStat;
00730 }
00731
00787 static inline
00788 CSL_CdcRequestRet CDC_reqSetInterface(CSL_UsbDevNum devNum,
00789 CSL_UsbSetupStruct *usbSetup,
00790 pUsbEpHandle hInEp,
00791 pUsbEpHandle hOutEp,
00792 void *pCdc)
00793 {
00794 CSL_CdcRequestRet retStat;
00795
00796 if(usbSetup->wIndex == 0)
00797 {
00798 if (usbSetup->wValue == 0)
00799 {
00800 USB_setConfiguration(devNum,usbSetup->wValue);
00801 retStat = CSL_CDC_REQUEST_SEND_ACK;
00802 }
00803 }
00804 else
00805 {
00806
00807 retStat = CSL_CDC_REQUEST_STALL;
00808 }
00809
00810 return(retStat);
00811 }
00812
00813
00817 #ifdef __cplusplus
00818 }
00819 #endif
00820
00821 #endif // _CSL_CDCAUX_H_
00822