usbdev.h 5.22 KB
#ifndef __USBDEV_H__
#define __USBDEV_H__


//#define USB_SPEAKER_DONGLE
#ifndef USB_SPEAKER_DONGLE
//#define USB_SPEAKER_AUTO_DETECT
#endif


#if 1
#define	VENDOR_ID    0x0475
#define	PRODUCT_ID   0x1630
#else
#define	VENDOR_ID    0x0000
#define	PRODUCT_ID   0x0005
#endif


/* Allow USB AUDIO_SUB_FRAME_SIZE=3, AUDIO_BIT_RESOLUTION=24 */
//#define AudioData24BIT


//JJ+ for USB audio class 2.0
//#define ADC20


#define HIDFUNC

#ifdef HIDFUNC
	//for HID Consumer device! 
	//#define HIDKEY
#endif

//2nd ISO In endp3In (#define	ENDP_NUM_ISO_INFB	3) for USB Audio Device Async !
//#define USBDEV_ISOIN_ASYNC

//JJ!!!+ for USB duplex both downwards and upwards pipe
//only for intf, ep config
//obsolete #define USB_DEVICE_IN_OUT_CFG


//Test only function of USB Speaker
//#undef ONLYSpeakerCFG
//#define ONLYSpeakerCFG

//Test only function of USB Microphone
//#define ONLYMicCFG

//JJ+ for DFU
//#define DFUFUNC

//Enable USB SOF Interrupt
#define SOFINTEN

//Window XP/7 can support only up to 44.1, 48Khz and 16bits !!!
//#define USB_AUDIO_SRC_44100
#define USB_AUDIO_SRC_48000
//#define USB_AUDIO_SRC_88200
//#define USB_AUDIO_SRC_96000
//#define USB_AUDIO_SRC_176400
//#define USB_AUDIO_SRC_192000



/* second USB Audio Out should be mandatory ! */
#if 1//ndef ADC20

#define	AUDIO_CHANNELS          2
#define	AUDIO_SUB_FRAME_SIZE    2    //pcm16
#define	AUDIO_BIT_RESOLUTION    16		

#if 1
#define AUDIOIN_CHANNELS        1    /*for Audio In*/
#else
#define AUDIOIN_CHANNELS        1    /*for Audio In*/
#endif
#define AUDIOIN_SUB_FRAME_SIZE  2    //pcm16, Force MIC audio IN to 16bits !!!
#define AUDIOIN_BIT_RESOLUTION  16

//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_44100
#define	AUDIO_SAMPLE_FREQ       44100
//for USB Audio In MIC.
#define	AUDIOIN_SAMPLE_FREQ     44100

//for second USB Audio Out.
#define	AUDIO_SAMPLE_FREQ2      44100
#endif

//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_48000
//for first USB Audio Out.
#define AUDIO_SAMPLE_FREQ       48000
//#define AUDIO_SAMPLE_FREQ       96000
//for USB Audio In MIC.
#if 1
#define AUDIOIN_SAMPLE_FREQ     48000
#else
/* !!! Note xiaomi6 cannot support 24KHz !!! */
#define AUDIOIN_SAMPLE_FREQ     24000	
#endif

//#define AUDIOIN_SAMPLE_FREQ     16000

//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2     48000

//#define AUDIO_SAMPLE_RATE_HALF
#endif

//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_88200
//for first USB Audio Out.
#define	AUDIO_SAMPLE_FREQ      88200
//for USB Audio In MIC.
#define	AUDIOIN_SAMPLE_FREQ    88200

//for second USB Audio Out.
#define	AUDIO_SAMPLE_FREQ2     44100
#endif

//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_96000
//for first USB Audio Out.
#define	AUDIO_SAMPLE_FREQ      96000
//for USB Audio In MIC.
#define	AUDIOIN_SAMPLE_FREQ    48000

//for second USB Audio Out.
#define	AUDIO_SAMPLE_FREQ2     48000
#endif

//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_176400
//for first USB Audio Out.
#define	AUDIO_SAMPLE_FREQ     176400
//for USB Audio In MIC.
#define	AUDIOIN_SAMPLE_FREQ   176400

//for second USB Audio Out.
#define	AUDIO_SAMPLE_FREQ2    44100
#endif

//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_192000
//for first USB Audio Out.
#define	AUDIO_SAMPLE_FREQ     192000
//for USB Audio In MIC.
#define	AUDIOIN_SAMPLE_FREQ   192000

//for second USB Audio Out.
#define	AUDIO_SAMPLE_FREQ2    48000
#endif
#endif


#if 1//for new usb device lib
typedef struct {
	BOOL	USBOutEnable;		//USB Speaker
	BOOL	USBInEnable;		//USB Mic, ONLYMicCFG, USB_DEVICE_IN_OUT_CFG
	BOOL	USBOutMixInEnable;	//Mix USB Out with other data then USB In.

	BOOL	SOFINTEnable;		//Enable SOF Interrupt

	BOOL	ADC20Enable;		//ADC20
	
	BOOL	ISOIN_ASYNCEnable;	//USBDEV_ISOIN_ASYNC

	BOOL	HIDFuncEnable;		//HIDFUNC
	BOOL 	HIDKEYEnable;		//HIDKEY

	BOOL 	USBAUDIOdata_BITs;	//USBAUDIO_BITs 0: 16bits, 1: 24bits

	BOOL 	SECOND_OUTEPEnable;	//SECOND_OUTEP, 2nd Ep for USB Audio Out.

	//-------- Audio Out/In formats --------
	U32		usb_AUDIO_SAMPLE_FREQ;		//AUDIO_SAMPLE_FREQ		48000, for first USB Audio Out.
	U32		usb_AUDIO_SAMPLE_FREQ2;		//AUDIO_SAMPLE_FREQ		44100, for second USB Audio Out.

	U8		usb_AUDIO_CHANNELS;			//AUDIO_CHANNELS			2
	U8		usb_AUDIO_SUB_FRAME_SIZE;	//AUDIO_SUB_FRAME_SIZE		2		//pcm16
	U8 		usb_AUDIO_BIT_RESOLUTION;	//AUDIO_BIT_RESOLUTION		16		

	U32		usb_AUDIOIN_SAMPLE_FREQ;	//AUDIOIN_SAMPLE_FREQ	48000, for USB Audio In MIC.

	U8		usb_AUDIOIN_CHANNELS;		//AUDIOIN_CHANNELS			2		/*for Audio In*/
	U8		usb_AUDIOIN_SUB_FRAME_SIZE;	//AUDIOIN_SUB_FRAME_SIZE	2		//pcm16, Force MIC audio IN to 16bits !!!
	U8		usb_AUDIOIN_BIT_RESOLUTION;	//AUDIOIN_BIT_RESOLUTION	16

} USB_DEV_FEATURE_CONF;

extern USB_DEV_FEATURE_CONF usbdev_featureconf;
#endif

/*
	device
*/

#define	VOLUME_MASTER_CHAN_ONLY


typedef enum {
	enUSB_DEV_STACK_ATTR_NULL	=	0,
	enUSB_DEV_STACK_ATTR_PC_SPEAKER,
	enUSB_DEV_STACK_ATTR_APPLE_LIGHTNING,
	enUSB_DEV_STACK_ATTR_USB_MICROPHONE
}	enum_USB_DEVICE_STACK_ATTR;

int usb_devStart(enum_USB_DEVICE_STACK_ATTR attr);
int usb_devStop(void);

int usb_devID_get(U16 *pVendorID, U16 *pProductID);
int usb_devAudioSampleRate_get(U32 *pSampleRate);

void daudio_SetFBSamplerateCorrection(int value);

#endif