00001
00002
00003
00004
00005
00006
00007
00008
00016
00017
00018
00019
00020
00021
00022
00023
00040 #ifndef _CSL_AUDIOCLASS_H_
00041 #define _CSL_AUDIOCLASS_H_
00042
00043 #ifdef __cplusplus
00044 extern "C" {
00045 #endif
00046
00047 #include <cslr.h>
00048 #include <csl_error.h>
00049 #include <csl_types.h>
00050 #include <cslr_usb.h>
00051 #include <csl_usb.h>
00052 #include <soc.h>
00053 #include <csl_general.h>
00054
00055
00074
00075
00076
00083 #define CSL_AC_DEVICE_DESCRIPTOR_TYPE (0x01)
00084
00085 #define CSL_AC_CONFIGURATION_DESCRIPTOR_TYPE (0x02)
00086
00087 #define CSL_AC_STRING_DESCRIPTOR_TYPE (0x03)
00088
00089 #define CSL_AC_INTERFACE_DESCRIPTOR_TYPE (0x04)
00090
00091 #define CSL_AC_ENDPOINT_DESCRIPTOR_TYPE (0x05)
00092
00093 #define CSL_AC_POWER_DESCRIPTOR_TYPE (0x06)
00094
00095 #define CSL_AC_HID_DESCRIPTOR_TYPE (0x21)
00096
00099 #define CSL_AC_FEATURE_ENDPOINT_STALL (0x0000)
00100
00101 #define CSL_AC_FEATURE_REMOTE_WAKEUP (0x0001)
00102
00104 #define CSL_AC_DEVICE_DESCR_MAX_LEN (20)
00105
00106 #define CSL_AC_DEV_QUAL_DESCR_MAX_LEN (12)
00107
00108 #define CSL_AC_CONFIG_DESCR_MAX_LEN (124)
00109
00110 #define CSL_AC_INTER_DESCR_MAX_LEN (12)
00111
00112 #define CSL_AC_STRING_DESCR_LANGID_MAX_LEN (12)
00113
00114 #define CSL_AC_AUDIO_TYPE_MONO (0x01)
00115
00116 #define CSL_AC_AUDIO_TYPE_STEREO (0x02)
00117
00120 #define CSL_AC_VERIFY_PASSED (0x0)
00121
00122 #define CSL_AC_VERIFY_FAILED (0x1)
00123
00124 #define CSL_AC_UNIT_REMOVEABLE (0x1)
00125
00126 #define CSL_AC_CURRDEV_STAT (0x01)
00127
00128 #define CSL_AC_CURRINTRF_STAT (0x00)
00129
00130 #define CSL_AC_NO_ENDPTOBJECT (5)
00131
00132 #define CSL_AC_DEVDESC_LEN (10)
00133
00134 #define CSL_AC_CONFDESC_LEN (6)
00135
00136 #define CSL_AC_MS_INTDESC_LEN (6)
00137
00138 #define CSL_AC_MS_ISOOUT_ENDPTDESC_LEN (5)
00139
00140 #define CSL_AC_MS_ISOIN_ENDPTDESC_LEN (5)
00141
00142 #define CSL_AC_STRDESC_LANGID_LEN (4)
00143
00144 #define CSL_AC_SCSI_INQUIRY_LEN (50)
00145
00146 #define CSL_AC_SENSEDATA_LEN (15)
00147
00148 #define CSL_AC_LUN_MAX (4)
00149
00150 #define CSL_AC_CBWSIZE (17)
00151
00152 #define CSL_AC_CSWSIZE (8)
00153
00154 #define CSL_AC_READCAP (6)
00155
00156 #define CSL_AC_CTRLBUFF_LEN (5)
00157
00158 #define CSL_AC_SCSI_INQUIRY_CONF_LEN (24)
00159
00160 #define CSL_AC_DEVICE_CLASS_STORAGE (0x08)
00161
00162 #define CSL_AC_SCSI_DATA_PROTECT (0x0007)
00163
00164 #define CSL_AC_REQUEST_AUDIO_CLASS (0x20)
00165
00166 #define CSL_AC_GET_BUF_LEN (0x04)
00167
00170 #define CSL_AC_REQUEST_GET_STATUS (0x8000)
00171
00172 #define CSL_AC_REQUEST_CLEAR_FEATURE (0x0001)
00173
00174 #define CSL_AC_REQUEST_SET_CUR (0x2001)
00175
00176 #define CSL_AC_REQUEST_GET_CUR (0xA081)
00177
00178 #define CSL_AC_REQUEST_SET_MIN (0x2002)
00179
00180 #define CSL_AC_REQUEST_GET_MIN (0xA082)
00181
00182 #define CSL_AC_REQUEST_SET_MAX (0x2003)
00183
00184 #define CSL_AC_REQUEST_GET_MAX (0xA083)
00185
00186 #define CSL_AC_REQUEST_SET_RES (0x2004)
00187
00188 #define CSL_AC_REQUEST_GET_RES (0xA084)
00189
00190 #define CSL_AC_VOLUME_CTRL_BUF_LEN (6)
00191
00192 #define USB_AC_FEATURE_UNIT_MUTE_CTRL (0x01)
00193
00194 #define USB_AC_FEATURE_UNIT_VOLUME_CTRL (0x02)
00195
00196 #define USB_AC_FEATURE_UNIT_LEFT_RIGHT_VOLUME (0x00)
00197
00198 #define USB_AC_FEATURE_UNIT_LEFT_VOLUME (0x01)
00199
00200 #define USB_AC_FEATURE_UNIT_RIGHT_VOLUME (0x02)
00201
00203 #define CSL_AC_REQUEST_SET_FEATURE (0x0003)
00204
00205 #define CSL_AC_REQUEST_SET_ADDRESS (0x0005)
00206
00207 #define CSL_AC_REQUEST_GET_DESCRIPTOR (0x8006)
00208
00209 #define CSL_AC_REQUEST_SET_DESCRIPTOR (0x0007)
00210
00211 #define CSL_AC_REQUEST_GET_CONFIGURATION (0x8008)
00212
00213 #define CSL_AC_REQUEST_SET_CONFIGURATION (0x0009)
00214
00215 #define CSL_AC_REQUEST_GET_INTERFACE (0x800A)
00216
00217 #define CSL_AC_REQUEST_SET_INTERFACE (0x000B)
00218
00219 #define CSL_AC_REQUEST_SYNC_FRAME (0x800C)
00220
00221 #define CSL_AC_REQUEST_ISO_ONLY_RESET (0x20FF)
00222
00223 #define CSL_AC_REQUEST_GET_MAX_LUN (0xA0FE)
00224
00225 #define CSL_AC_REQUEST_TYPE_BASE (0x80)
00226
00227 #define CSL_AC_REQUEST_TYPE_DEVICE_STATUS (0x0)
00228
00229 #define CSL_AC_REQUEST_TYPE_INTERFACE_STATUS (0x1)
00230
00231 #define CSL_AC_REQUEST_TYPE_EP_STATUS (0x2)
00232
00235 #define CSL_AC_DEVICE_SUSPENDED (0x01)
00236
00237 #define CSL_AC_DEVICE_NOT_SUSPENDED (0x0)
00238
00239 #define CSL_AC_LUN_LOCKED (0x01)
00240
00241 #define CSL_AC_LUN_NOT_LOCKED (0x0)
00242
00243 #define CSL_AC_ACTIVITY_PRESENT (0x01)
00244
00245 #define CSL_AC_ACTIVITY_NOT_PRESENT (0x0)
00246
00248 #define CSL_AC_16BIT_MASK (0xFFFF)
00249
00250 #define CSL_AC_16BIT_SHIFT (16)
00251
00253 #define CSL_AC_24BIT_SHIFT (24)
00254
00256 #define CSL_AC_8BIT_MASK (0xFF)
00257
00258 #define CSL_AC_8BIT_HIGH_MASK (0xFF00)
00259
00260 #define CSL_AC_8BIT_SHIFT (8)
00261
00262 #define CSL_AC_UNICODE_SIZE (66)
00263
00265 #define CSL_AC_SENSE_DATA0_DEFVAL (26)
00266
00267 #define CSL_AC_SENSE_DATA1_DEFVAL (0)
00268
00269 #define CSL_AC_SENSE_DATA2_DEFVAL (0x0070)
00270
00271 #define CSL_AC_SENSE_DATA3_DEFVAL (0x0000)
00272
00273 #define CSL_AC_SENSE_DATA4_DEFVAL (0x0000)
00274
00275 #define CSL_AC_SENSE_DATA5_DEFVAL ((11<<8) | 0)
00276
00278 #define CSL_AC_READ_CAPACITY0_DEFVAL (8)
00279
00281 #define CSL_AC_CSW0_DEFVAL (0)
00282
00283 #define CSL_AC_CSW1_DEFVAL (0x5355)
00284
00285 #define CSL_AC_CSW2_DEFVAL (0x5342)
00286
00288 #define CSL_AC_ERROR_BASE (CSL_EUSB_FIRST)
00289
00290 #define CSL_AC_INVALID_REQUEST_HANDLER (CSL_AC_ERROR_BASE - 1)
00291
00293 #define CSL_AC_REQUEST_ARGS CSL_UsbDevNum devNum, \
00294 CSL_UsbSetupStruct *usbSetup, \
00295 pUsbEpHandle hInEp, \
00296 pUsbEpHandle hOutEp, \
00297 void *pAcObj
00298
00303
00304
00305
00306
00313 typedef enum {
00314
00315 CSL_AC_REQUEST_DONE = 0,
00316
00317 CSL_AC_REQUEST_STALL,
00318
00319 CSL_AC_REQUEST_SEND_ACK,
00320
00321 CSL_AC_REQUEST_GET_ACK,
00322
00323 CSL_AC_REQUEST_DATA_IN,
00324
00325 CSL_AC_REQUEST_DATA_OUT
00326 } CSL_AcRequestRet;
00327
00331 typedef enum {
00333 CSL_AC_MEDIACCESS_OVERFLOW,
00335 CSL_AC_MEDIACCESS_SUCCESS,
00337 CSL_AC_MEDIACCESS_NOTPRESENT,
00339 CSL_AC_MEDIACCESS_WRITEPROTECT,
00341 CSL_AC_MEDIACCESS_BADMEDIA
00342 } CSL_AcMediaStatus;
00343
00347 typedef enum {
00349 CSL_AC_UNLOCK = 0,
00351 CSL_AC_LOCK
00352 } CSL_AcMediaLockStatus;
00353
00357 typedef enum {
00359 CSL_AC_DEVICE_DESCR = 0,
00361 CSL_AC_DEVICE_QUAL_DESCR,
00363 CSL_AC_CONFIG_DESCR,
00365 CSL_AC_INTERFACE_DESCR,
00367 CSL_AC_STRING_LANGID_DESC
00368 } CSL_AcDescrId;
00369
00373
00374
00375
00376
00387 typedef struct CSL_AcRequestStruct {
00389 WORD request;
00391 CSL_AcRequestRet (*fpRequestHandler)(CSL_AC_REQUEST_ARGS);
00392 } CSL_AcRequestStruct;
00393
00400 typedef struct CSL_AcInitStructApp {
00402 void *pAcObj;
00404 Uint16 pId;
00406 Uint16 vId;
00408 Uint16 numLun;
00410 Uint16 txPktSize;
00412 Uint16 rxPktSize;
00414 char **strDescrApp;
00417 Uint16 *lbaBufferApp;
00419 CSL_AcRequestStruct *acReqTableApp;
00422 void (*isoHandler)();
00425 void (*ctrlHandler)();
00427 CSL_AcMediaStatus (*playAudioApp)(Uint16 , Uint16* , Uint16*, void*);
00429 CSL_AcMediaStatus (*stopAudioApp)(Uint16 , void* );
00431 CSL_AcMediaStatus (*recordAudioApp)(Uint16 , Uint16* , Uint16*, void*);
00433 CSL_AcMediaStatus (*mediaGetPresentStateApp)(Uint16);
00435 CSL_AcMediaStatus (*mediaInitApp)(Uint16);
00437 CSL_AcMediaStatus (*mediaEjectApp)(Uint16);
00439 CSL_AcMediaStatus (*mediaLockUnitApp)(Uint16,CSL_AcMediaLockStatus);
00441 Uint32 (*getMediaSizeApp)(Uint16);
00442 } CSL_AcInitStructApp;
00443
00445 typedef CSL_AcInitStructApp *pAcAppClassHandle;
00446
00453 typedef struct CSL_AcLunAttribApp {
00455 Uint32 lbaSizeApp;
00457 Uint32 mediaSizeApp;
00459 Uint16 removeableApp;
00461 Uint16 scsiInquiryConfData [CSL_AC_SCSI_INQUIRY_CONF_LEN];
00463 Uint16 mediaStateApp;
00465 Uint16 readwriteApp;
00466 } CSL_AcLunAttribApp;
00467
00469 typedef CSL_AcLunAttribApp *pAcAppLunAttribHandle;
00470
00472 typedef CSL_AcRequestRet (*fpAC_REQ_HANDLER)(CSL_AC_REQUEST_ARGS);
00473
00481 typedef struct CSL_AcLogicalUnit {
00483 Uint16 scsiInquiryData[CSL_AC_SCSI_INQUIRY_LEN];
00486 Uint32 mediaSize;
00488 Uint32 currLba;
00490 Uint32 lbaSize;
00492 Uint16 removeable;
00494 Uint16 mediaState;
00496 Uint16 readwrite;
00498 Uint16 lbaCnt;
00500 Uint16 verifyFlag;
00501 } CSL_AcLogicalUnit;
00502
00508 typedef struct CSL_AcObject {
00510 CSL_AcMediaStatus (*recordAudio)(Uint16 , Uint16* , Uint16*, void*);
00512 CSL_AcMediaStatus (*playAudio)(Uint16 , Uint16* , Uint16*, void*);
00514 CSL_AcMediaStatus (*stopAudio)(Uint16 , void*);
00516 CSL_AcMediaStatus (*mediaGetPresentState)(Uint16 );
00518 CSL_AcMediaStatus (*mediaInit)(Uint16 );
00520 CSL_AcMediaStatus (*mediaEject)(Uint16 );
00522 CSL_AcMediaStatus (*mediaLockUnit)(Uint16,CSL_AcMediaLockStatus);
00524 Uint32 (*getMediaSize)(Uint16 );
00526 Uint16 *lbaBuffer;
00528 Uint32 cbwDataTransferLength;
00530 CSL_AcLogicalUnit lun[CSL_AC_LUN_MAX];
00532 Uint16 senseData[CSL_AC_SENSEDATA_LEN];
00534 Uint16 activityPresentFlag;
00536 Uint16 csw[CSL_AC_CSWSIZE];
00538 Uint16 readCapacity[CSL_AC_READCAP];
00540 Uint16 cbw[CSL_AC_CBWSIZE];
00542 CSL_UsbEpObj isoInEpObj;
00544 CSL_UsbEpObj isoOutEpObj;
00546 Uint16 noOfLun;
00548 Uint16 mediaState;
00550 Uint16 playBackActive;
00552 Uint16 mediaInitDone;
00554 Uint16 tempBuffer[4];
00555 } CSL_AcObject;
00556
00562 typedef struct CSL_AcCtrlObject {
00564 CSL_UsbEpObj ctrlInEpObj;
00566 CSL_UsbDevNum devNum;
00568 CSL_UsbEpObj ctrlOutEpObj;
00570 Uint16 suspendFlag;
00572 pUsbEpHandle hEpObjArray[CSL_AC_NO_ENDPTOBJECT];
00574 CSL_UsbSetupStruct usbSetup;
00576 Uint16 leftVolBuf[CSL_AC_VOLUME_CTRL_BUF_LEN];
00578 Uint16 rightVolBuf[CSL_AC_VOLUME_CTRL_BUF_LEN];
00580 Uint16 leftRightVolBuf[2*CSL_AC_VOLUME_CTRL_BUF_LEN];
00582 Uint16 muteCtrlBuf[CSL_AC_VOLUME_CTRL_BUF_LEN];
00584 Uint16 getMinBuffer[CSL_AC_GET_BUF_LEN];
00586 Uint16 getMaxBuffer[CSL_AC_GET_BUF_LEN];
00588 Uint16 getResBuffer[CSL_AC_GET_BUF_LEN];
00590 Uint16 dummydesc[63];
00592 Uint16 deviceQualifierDescr[CSL_AC_DEV_QUAL_DESCR_MAX_LEN];
00594 Uint16 deviceDescr[CSL_AC_DEVICE_DESCR_MAX_LEN];
00596 Uint16 confDescr[CSL_AC_CONFIG_DESCR_MAX_LEN];
00598 Uint16 audioClassIntDescr[CSL_AC_INTER_DESCR_MAX_LEN];
00600 Uint16 audioClassIsoOutEndptDescr[CSL_AC_MS_ISOOUT_ENDPTDESC_LEN];
00602 CSL_UsbDataStruct audioClassInterfcLnk;
00604 Uint16 audioClassIsoInEndptDescr[CSL_AC_MS_ISOIN_ENDPTDESC_LEN];
00606 CSL_UsbDataStruct audioClassIsoOutEndptLnk;
00608 Uint16 stringDescrLangid[CSL_AC_STRING_DESCR_LANGID_MAX_LEN];
00610 Uint16 curConfigStat;
00612 CSL_UsbDataStruct audioClassIsoInEndptLnk;
00614 Uint16 ctrlBuffer[CSL_AC_CTRLBUFF_LEN];
00616 CSL_UsbDataStruct configDescrLnk;
00618 char **strDescr;
00620 CSL_AcRequestStruct *acReqTable;
00622 CSL_AcRequestRet (*fpRequestHandler)(CSL_AC_REQUEST_ARGS);
00623 } CSL_AcCtrlObject;
00624
00630 typedef struct CSL_AcClassStruct {
00632 CSL_AcCtrlObject ctrlHandle;
00634 CSL_AcObject acHandle;
00635 } CSL_AcClassStruct;
00636
00638 typedef CSL_AcClassStruct *pAcClassHandle;
00639
00643
00644
00645
00646
00694 CSL_Status AC_Open(pAcAppClassHandle pAppClassHandle);
00695
00740 CSL_Status AC_Close(pAcAppClassHandle pAppClassHandle);
00741
00789 CSL_Status AC_Ctrl(void *pAcObj);
00790
00838 CSL_Status AC_Iso(void *pAcObj);
00839
00885 Uint16 AC_GetactivityFlagStatus(void *pAcObj);
00886
00932 Uint16 AC_GetsuspendFlagStatus(void *pAcObj);
00933
00979 CSL_Status AC_initDescriptors(void *pAcObj,
00980 Uint16 *descBuf,
00981 CSL_AcDescrId descrId,
00982 Uint16 descrLen);
00983
01018 static CSL_Status AC_initAcVal(CSL_AcObject *pAcHandle);
01019
01070 CSL_AcRequestRet AC_reqGetDescriptor(CSL_UsbDevNum devNum,
01071 CSL_UsbSetupStruct *usbSetup,
01072 pUsbEpHandle hInEp,
01073 pUsbEpHandle hOutEp,
01074 void *pAcObj);
01075
01130 CSL_AcRequestRet AC_reqSetCurrent(CSL_UsbDevNum devNum,
01131 CSL_UsbSetupStruct *usbSetup,
01132 pUsbEpHandle hInEp,
01133 pUsbEpHandle hOutEp,
01134 void *pAcObj);
01135
01190 CSL_AcRequestRet AC_reqGetCurrent(CSL_UsbDevNum devNum,
01191 CSL_UsbSetupStruct *usbSetup,
01192 pUsbEpHandle hInEp,
01193 pUsbEpHandle hOutEp,
01194 void *pAcObj);
01195
01250 CSL_AcRequestRet AC_reqGetMinimum(CSL_UsbDevNum devNum,
01251 CSL_UsbSetupStruct *usbSetup,
01252 pUsbEpHandle hInEp,
01253 pUsbEpHandle hOutEp,
01254 void *pAcObj);
01255
01310 CSL_AcRequestRet AC_reqGetMaximum(CSL_UsbDevNum devNum,
01311 CSL_UsbSetupStruct *usbSetup,
01312 pUsbEpHandle hInEp,
01313 pUsbEpHandle hOutEp,
01314 void *pAcObj);
01315
01370 CSL_AcRequestRet AC_reqGetResolution(CSL_UsbDevNum devNum,
01371 CSL_UsbSetupStruct *usbSetup,
01372 pUsbEpHandle hInEp,
01373 pUsbEpHandle hOutEp,
01374 void *pAcObj);
01375
01431 CSL_AcRequestRet AC_reqSetInterface(CSL_UsbDevNum devNum,
01432 CSL_UsbSetupStruct *usbSetup,
01433 pUsbEpHandle hInEp,
01434 pUsbEpHandle hOutEp,
01435 void *pAcObj);
01436
01442 #ifdef __cplusplus
01443 }
01444 #endif
01445
01446 #endif // _CSL_AUDIOCLASS_H_
01447