usb.c 4.55 KB
#include "os_config.h"

#include "c_def.h"
#include "debug.h"
#include "oem.h"


#ifdef USB_HOST_ENABLE

#include "stdDespt.h"
//#include "AOAproto.h"

#include "IRP.h"
#include "usbmsc.h"
#include "message.h"
#include "usbd.h"

#include "usb.h"


//===========================================================================
//	USB host
//===========================================================================

int usb_hostStart(enum_USB_HOST_STACK_ATTR attr )
{
	usbmsc_startUSBhostEx(attr);
	return 1;
}

int usb_hostStop(void)
{
	usbmsc_stopUSBhost();
	return 1;
}


#if	0
//===========================================================================
//	for IAP2/lightning
//===========================================================================

#include "stdDespt.h"

//#ifdef APPLE_IAP2_STACK

//NOTE: keep consistent with IAP2_IDENTIFY_PARAM
#define	STR_MANUFACTURE_LENGTH		(2 + 5*2)
const U8 StringManufactureDescriptor[STR_MANUFACTURE_LENGTH] = {
	STR_MANUFACTURE_LENGTH,
	DESCRIPTOR_TYPE_STRING,
	'o',0,
	'p',0,
	't',0,
	'e',0,
	'k',0
};

#define	STR_PRODUCT_LENGTH			(2 + 9*2)
const U8 StringProductDescriptor[STR_PRODUCT_LENGTH] = {
	STR_PRODUCT_LENGTH,
	DESCRIPTOR_TYPE_STRING,
	'i',0,
	'A',0,
	'P',0,
	'2',0,
	' ',0,
	'd',0,
	'o',0,
	'c',0,
	'k',0
};

#define	STR_SERIAL_NUM_LENGTH	(2 + 11*2)
const U8 StringSerialNoDescriptor[STR_SERIAL_NUM_LENGTH] = {
	STR_SERIAL_NUM_LENGTH,
	DESCRIPTOR_TYPE_STRING,
	'0',0,
	'1',0,
	'2',0,
	'3',0,
	'4',0,
	'A',0,
	'B',0,
	'C',0,
	'D',0,
	'E',0,
	'F',0
};

int usb_devID_get(U16 *pVendorID, U16 *pProductID)
{
	*pVendorID = VENDOR_ID;
	*pProductID = PRODUCT_ID;

	return TRUE;
}

int usb_devAudioSampleRate_get(U32 *pSampleRate)
{
	*pSampleRate = USB_AUDIO_SAMPLE_FREQ;
	
	return TRUE;
}
#endif


#if 0

//===========================================================================
//		AOA string definition
//===========================================================================

const char aoaStrManufacture[]	=	"optek";		//AOA_STR_ID_MANUFACTURE
const char aooStrModel[]	=	"accTest";
const char aoaStrDescritpion[] = "AOA test";
const char aoaStrversion[]	=	"v0.1";
const char aoaStrURI[]	=	"testURI";
const char aoaSerialNum[]	=	"1234abcd";

int usb_AOAstringGet( int idx, const char **pstr, int *sz )
{
#ifdef AOA_USB_AUDIO
	int r = TRUE;

	*pstr = NULL;
	*sz = 0;
	
	switch( idx ) {
		
	//FIXME: check
#if	1
	//disable apps prompt
	case 	AOA_STR_ID_MANUFACTURE:
	case	AOA_STR_ID_MODEL:
		*pstr = NULL;
		*sz = 0;		
		break;
#else
	case 	AOA_STR_ID_MANUFACTURE:
		*pstr 	= 	aoaStrManufacture;
		*sz		=	sizeof(aoaStrManufacture);
		break;
	case	AOA_STR_ID_MODEL:
		*pstr 	= 	aooStrModel;
		*sz		=	sizeof(aooStrModel);
		break;
#endif

	case 	AOA_STR_ID_DESCRIPT	:
		*pstr 	= 	aoaStrDescritpion;
		*sz		=	sizeof(aoaStrDescritpion);
		break;
	case 	AOA_STR_ID_VERSION	:
		*pstr 	= 	aoaStrversion;
		*sz		=	sizeof(aoaStrversion);
		break;
	case 	AOA_STR_ID_URI		:
		*pstr 	= 	aoaStrURI;
		*sz		=	sizeof(aoaStrURI);
		break;
	case	AOA_STR_ID_SN		:
		*pstr 	= 	aoaSerialNum;
		*sz		=	sizeof(aoaSerialNum);
		break;
	default:
		r = FALSE;
		break;
	}

	return r;
#endif
}


static int usbIDcheck( const USBDEV_ID *pdevid, int num, U16 vid, U16 pid )
{
	int i;

	for( i = 0; i < num; i ++ ) {
		if( (pdevid->vid == vid) && (pdevid->pid == pid) )
			return TRUE;

		++pdevid;
	}

	return FALSE;
}


const USBDEV_ID AOAonlyDevIDs[]	=	{
//	{ 0xbb4,	0xf91	},	//htc one 1st time  - no difference
//	{ 0xbb4,	0xdea	}	//htc one 2nd time
//	{ 0xbb4,	0x01	}	//ShangZhai S4
};
int usb_callbk_isAOAonlyDev( U16 vid, U16 pid )
{
	int r;

	return FALSE;

	r = usbIDcheck( AOAonlyDevIDs, sizeof(AOAonlyDevIDs)/sizeof(USBDEV_ID),
		vid, pid );

	return r;
}


const USBDEV_ID noSupportDevIDs[]	=	{
	{ 0xbb4,	0xf91	},	//htc one 1st time 
	{ 0xbb4,	0xdea	}	//htc one 2nd time
};

int usb_callbk_isNonSupportDev( U16 vid, U16 pid )
{
#ifdef AOA_USB_AUDIO
	int r;

//	return FALSE;

	r = usbIDcheck( noSupportDevIDs, sizeof(noSupportDevIDs)/sizeof(USBDEV_ID),
		vid, pid );

	return r;
#endif
}

const USBDEV_ID AOAnoHidKeyDevIDs[]	=	{
	{ 0x471,	0x21b1	}
};

int usb_callbk_isAOAnoHidKeyDev( U16 vid, U16 pid )
{
#ifdef AOA_USB_AUDIO
	int r;

	r = usbIDcheck( AOAnoHidKeyDevIDs, sizeof(AOAnoHidKeyDevIDs)/sizeof(USBDEV_ID),
		vid, pid );

	return r;
#endif
}


const USBDEV_ID AOAmuteDevIDs[]	=	{
	{ 0x4e8,	0x6860	},		//samsung S4
	{ 0xfce,	0x19c	},		//sony Xperia (biggest)
};


int usb_callbk_isAOAdevMute( U16 vid, U16 pid )
{
#ifdef AOA_USB_AUDIO
	int r;

	r = usbIDcheck( AOAmuteDevIDs, sizeof(AOAmuteDevIDs)/sizeof(USBDEV_ID),
		vid, pid );

	return r;
#endif
}
#endif//AOA_USB_AUDIO

#endif //USB_HOST_ENABLE