⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbh_usbd_api.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
{
	long			retValue;
	MSG_USBH_USBD	tmp;


	if((USBH_USBD_CALLBACK)pfnCallback == NULL) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(classid == NULL) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else {
		memset(&tmp, 0, sizeof(MSG_USBH_USBD));
		tmp.classno = classno;
		tmp.psClassid = classid;
		tmp.pfnCallback = pfnCallback;
		tmp.pfnEventCallback = pfnEventCallback;

		/* Send message to USB task */
		USBH_USBD_SendMessage( MSG_USBH_USBD_ENTRYCLASS, sizeof(MSG_USBH_USBD), &tmp );
		retValue = USBH_USBD_STATUS_SUCCESS;
	}
	return retValue;
}

/*=============================================================================================
// Function_Name:USBH_USBD_SetConfiguration
//
// description	: Register pipe based on specified device, carry out configuration.
//
// argument 	: classid							Class ID ( in )
//				: devaddr							Device address ( in )
//				: pfnCallback						Pointer to call back function to notify completion ( in )
//
// return		: USBH_USBD_STATUS_SUCCESS			Registration finish normally
===============================================================================================*/
long USBH_USBD_SetConfiguration( unsigned char	classid, unsigned char	devaddr, USBH_USBD_CALLBACK pfnCallback )
{
	long			retValue;
	MSG_USBH_USBD	tmp;


	if((USBH_USBD_CALLBACK)pfnCallback == NULL) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(classid > USBH_USBD_CLASSDRIVERNUM) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(devaddr >= USBH_USBD_DEVICE_MAX || devaddr <= FUNC_ADDR_MIN) {/* Wrong value because device address 1 = root hub */
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else {
		tmp.devaddr = devaddr;
		tmp.classid = classid;
		tmp.pfnCallback = pfnCallback;

		/* Send message to USB task */
		USBH_USBD_SendMessage( MSG_USBH_USBD_SETCONFIGURATION, sizeof(tmp), &tmp );
		retValue = USBH_USBD_STATUS_SUCCESS;
	}
	return retValue;
}

/*=============================================================================================
// Function_Name:USBH_USBD_Reset
//
// description	: Reset specified device.
//
// argument 	: classid							Class ID ( in )
//				: devaddr							Device address ( in )
//				: pfnCallback						Pointer to call back function to notify completion ( in )
//
// return		: USBH_USBD_STATUS_SUCCESS			Registration finish normally
//				  USBH_USBD_STATUS_INVALID_PARAMETER There were some errors in passed parameter
//				  USBH_USBD_STATUS_UNSUCCESSFUL		 Host Controller on suspension
===============================================================================================*/
long USBH_USBD_Reset( unsigned char  classid, unsigned char  devaddr, USBH_USBD_CALLBACK pfnCallback )
{
	long			retValue;
	MSG_USBH_USBD	tmp;


	if((USBH_USBD_CALLBACK)pfnCallback == NULL) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(classid > USBH_USBD_CLASSDRIVERNUM) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(devaddr >= USBH_USBD_DEVICE_MAX || devaddr <= FUNC_ADDR_MIN) {/* Wrong value because device address 1 = root hub */
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else {
		tmp.classid = classid;
		tmp.devaddr = devaddr;
		tmp.pfnCallback = pfnCallback;

		/* Send message to USB task */
		USBH_USBD_SendMessage( MSG_USBH_USBD_RESET, sizeof(tmp), &tmp );
		retValue = USBH_USBD_STATUS_SUCCESS;
	}
	return retValue;
}

/*=============================================================================================
// Function_Name:USBH_USBD_PortSuspend
//
// description	: Suspend specified device.
//
// argument 	: classid							Class ID ( in )
//				: devaddr							Device address ( in )
//				: *pfnCallback						Pointer to call back function to notify completion ( in )
//				: message							Setting result ( out )
//				: 										USBH_USBD_MSG_PORTSUSPEND_CMP ( Success )
//
// return		: USBH_USBD_STATUS_SUCCESS			Registration finish normally
//				  USBH_USBD_STATUS_INVALID_PARAMETER There were some errors in passed parameter
//				  USBH_USBD_STATUS_UNSUCCESSFUL		 Host Controller on suspension
===============================================================================================*/
long USBH_USBD_PortSuspend( unsigned char  classid, unsigned char  devaddr, USBH_USBD_CALLBACK pfnCallback )
{
	long			retValue;
	MSG_USBH_USBD	tmp;


	if((USBH_USBD_CALLBACK)pfnCallback == NULL) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(classid > USBH_USBD_CLASSDRIVERNUM) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(devaddr >= USBH_USBD_DEVICE_MAX || devaddr <= FUNC_ADDR_MIN) {/* Wrong value because device address 1 = root hub */
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else {
		tmp.classid = classid;
		tmp.devaddr = devaddr;
		tmp.pfnCallback = pfnCallback;

		/* Send message to USB task */
		USBH_USBD_SendMessage( MSG_USBH_USBD_PORTSUSPEND, sizeof(tmp), &tmp );
		retValue = USBH_USBD_STATUS_SUCCESS;
	}
	return retValue;
}

/*=============================================================================================
// Function_Name:USBH_USBD_PortResume
//
// description	: Resume specified device.
//
// argument 	: classid							Class ID ( in )
//				: devaddr							Device address ( in )
//				: *pfnCallback						Pointer to call back function to notify completion ( in )
//				: message							Setting result ( out )
//				: 										USBH_USBD_MSG_PORTRESUME_CMP ( Success )
//
// return		: USBH_USBD_STATUS_SUCCESS			Registration finish normally
//				  USBH_USBD_STATUS_INVALID_PARAMETER There were some errors in passed parameter
//				  USBH_USBD_STATUS_UNSUCCESSFUL		 Host Controller is not on suspension
===============================================================================================*/
long USBH_USBD_PortResume( unsigned char  classid, unsigned char  devaddr, USBH_USBD_CALLBACK pfnCallback )
{
	long			retValue;
	MSG_USBH_USBD	tmp;


	if((USBH_USBD_CALLBACK)pfnCallback == NULL) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(classid > USBH_USBD_CLASSDRIVERNUM) {
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else if(devaddr >= USBH_USBD_DEVICE_MAX || devaddr <= FUNC_ADDR_MIN) {/* Wrong value because device address 1 = root hub */
		retValue = USBH_USBD_STATUS_INVALID_PARAMETER;
	} else {
		tmp.classid = classid;
		tmp.devaddr = devaddr;
		tmp.pfnCallback = pfnCallback;

		/* Send message to USB task */
		USBH_USBD_SendMessage( MSG_USBH_USBD_PORTRESUME, sizeof(tmp), &tmp );
		retValue = USBH_USBD_STATUS_SUCCESS;
	}
	return retValue;
}

/*=============================================================================================
// Function_Name: USBH_USBD_SendMessage
//
// description	: Refer to [ Figure 3-4 basic flow when event transmitting ] of page 10 of V03 software basic design specification
//
// argument		: USHORT msgCode					Message ( in )
//				: USHORT size						Transmitting data size ( in )
//				: const VOID* buffer				Transmitting data ( in )
// return		: none
//=============================================================================================*/
Inline void USBH_USBD_SendMessage ( USHORT msgCode, USHORT size, const VOID* buffer )
{
	USBH_SAMPLE_MSG* pMsg;
	OS_ID mbxId;
	volatile OS_ER ercode;

	mbxId = MBXID_USBH_USBD;
	ercode = OS_GetMpf( MPFID_USBH_USBD_MSG, (VP *)&pMsg );			// Get message buffer

	//========================================================================
	// Initialization of message header part
	//========================================================================
	pMsg->msgHead.msgSndTskId = TSKID_USBH_SAMPLE;
	pMsg->msgHead.useMpfId = MPFID_USBH_USBD_MSG;
	pMsg->msgHead.msgNo = msgCode;
	pMsg->msgHead.msgLength = size;
	memcpy( pMsg->msgData, buffer, size );

	ercode = OS_SndMbx( mbxId, (OS_T_MSG *)pMsg );			// Message transmitting.


	ercode = OS_SetFlg( FLGID_USBH_USBD, FLG_EVENT_MSG_USBH_USBD );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -