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

📄 usbd_protenum.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
	}

	ModuleStatus.sAPIFlag.bit.wSendRemoteWakeupA = 0;

	return STATUS_SUCCESS;
}


/*======================================================================
// Function_Name: USBD_ProtEnumResetEvent
//
// description	: Callback function which is registered to lower module
//
//				  Be called when Reset has been done
//
// argument 	: lParam0 					Not used
//				  lParam1 					Not used
//				  *pParam			 		Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
========================================================================*/
LONG USBD_ProtEnumResetEvent( ULONG lParam0, ULONG lParam1, void *pParam )
{
	/******************************************/
	/* Notify event to Module Manager */
	/******************************************/
	ModuleStatus.sAPIFlag.bit.wCBRResetEvent = 1;

	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: USBD_ProtEnumSuspendEvent
//
// description	: Callback function which is registered to lower module
//
//				  Be called when Suspend has been done
//
// argument 	: lParam0 					Not used
//				  lParam1 					Not used
//				  *pParam			 		Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
========================================================================*/
LONG USBD_ProtEnumSuspendEvent( ULONG lParam0, ULONG lParam1, void *pParam )
{
	/******************************************/
	/* Notify event to Module Manager */
	/******************************************/
	ModuleStatus.sAPIFlag.bit.wCBRSuspendEvent = 1;

	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: USBD_ProtEnumResumeEvent
//
// description	: Callback function which is registered to lower module
//
//				  Be called when Resume has been done
//
// argument 	: lParam0 					Not used
//				  lParam1 					Not used
//				  *pParam			 		Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
========================================================================*/
LONG USBD_ProtEnumResumeEvent( ULONG lParam0, ULONG lParam1, void *pParam )
{
	/******************************************/
	/* Notify event to Module Manager */
	/******************************************/
	ModuleStatus.sAPIFlag.bit.wCBRResumeEvent = 1;

	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: USBD_ProtEnumChangeUSBAddress
//
// description	: Callback function which is registered to lower module
//
//				  Be called when change of USB Address has completed
//
// argument 	: lResult 					Result of process
//						STATUS_SUCCESS			Finished normally
//						STATUS_UNSUCCESSFUL		Error
//				  lParam1 					Not used
//				  *pParam 					Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
========================================================================*/
LONG USBD_ProtEnumChangeUSBAddress( ULONG lResult, ULONG lParam1, void *pParam )
{
	LONG	dwAPIStatus;


	/*****************************************************************************/
	/* When change of USB Address has completed, process the change of USB State by value of USB Address */
	/*****************************************************************************/
	if( lResult == STATUS_SUCCESS ){
		/* Change of USB Address has completed */

		dwAPIStatus = USBD_FuncGetUSBAddress(&(ModuleStatus.sUSBStatus.bUSBAddress));
		if( dwAPIStatus != STATUS_SUCCESS ){
			/* Unable to get USB address */

			return STATUS_UNSUCCESSFUL;
		}

		if( ModuleStatus.sUSBStatus.bUSBAddress == 0 ){
			/* Transit to Default State */

			ModuleStatus.sUSBStatus.bUSBState = DEFAULT_STATE;
		} else {
			/* Transit to Addressed State */

			ModuleStatus.sUSBStatus.bUSBState = ADDRESSED_STATE;
		}
	}
	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: USBD_ProtEnumRcvRequest
//
// description	: Callback function which is registered to lower module
//
//				  Be called when device request has been received
//
// argument 	: lReqData					Request data
//					bit7-0:bRequest
//					bit15-8:bmRequestType
//					bit31-16:Reserved
//				  lParam1 					Not used
//				  *pParam			 		Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
// 				  STATUS_NOT_IMPLEMENTED	Not implemented
========================================================================*/
LONG USBD_ProtEnumRcvRequest( ULONG lReqData, ULONG lParam1, void *pParam )
{
	UCHAR	bmRequest, bRequest;

	/**************************************************/
	/* Check if it is a request supported by the module */
	/**************************************************/
	bRequest = LOBYTE(LOWORD(lReqData));
	bmRequest = HIBYTE(LOWORD(lReqData));

	if( (bmRequest & BMREQ_TYPE_MASK) != TYPE_STANDARD ){
		/* Besides standard request */

		return STATUS_NOT_IMPLEMENTED;
	}


	switch( bRequest ){
		case SREQ_GET_STATUS:
			break;
		case SREQ_CLEAR_FEATURE:
			break;
		case SREQ_SET_FEATURE:
			break;
		case SREQ_SET_ADDRESS:
			break;
		case SREQ_GET_DESCRIPTOR:
			break;
		case SREQ_GET_CONFIGURATION:
			break;
		case SREQ_SET_CONFIGURATION:
			break;
		case SREQ_GET_INTERFACE:
			break;
		case SREQ_SET_INTERFACE:
			break;
		default:
			return STATUS_NOT_IMPLEMENTED;
	}

	/******************************************/
	/* Notify event to Module Manager */
	/******************************************/
	ModuleStatus.sAPIFlag.bit.wCBRRcvRequest = 1;

	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: USBD_ProtEnumDataStageEnd
//
// description	: Callback function which is registered to lower module
//
//				  Be called when data stage of Control transfer has completed
//
// argument 	: lEPNum					Endpoint number
//				  lActualXferSize 			Number actually transferred
//				  *pParam			 		Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
// 				  STATUS_NOT_IMPLEMENTED	Not implemented
========================================================================*/
LONG USBD_ProtEnumDataStageEnd( ULONG lEPNum, ULONG lActualXferSize, void *pParam )
{
	/******************************************/
	/* Notify event to Module Manager */
	/******************************************/
	ModuleStatus.sAPIFlag.bit.wCBRDataStageEnd = 1;
	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: USBD_ProtEnumStatusStageEnd
//
// description	: Callback function which is registered to lower module
//
//				  Be called when status stage of Control transfer has completed
//
// argument 	: lResult 					Result of process
//						STATUS_SUCCESS			Finished normally
//						STATUS_UNSUCCESSFUL		Error
//				  lParam1					Not used
//				  *pParam			 		Not used
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
// 				  STATUS_NOT_IMPLEMENTED	Not implemented
========================================================================*/
LONG USBD_ProtEnumStatusStageEnd( ULONG lResult, ULONG lParam1, void *pParam )
{
	/******************************************/
	/* Notify event to Module Manager */
	/******************************************/

	if( lResult == STATUS_SUCCESS ){
		if( ModuleStatus.sAPIFlag.bit.wSetInterface == 1 ){
			ModuleStatus.sAPIFlag.bit.wAltenateSettingChanged = 1;
		}
	}
	return STATUS_SUCCESS;
}

/*======================================================================
// Function_Name: ModuleManager
//
// description	: Manage the module
//
//				  Check the notification of event from callback function registered in lower module and do appropriate process
//
// argument 	: None
//
// return		: STATUS_SUCCESS			Success
//				  STATUS_UNSUCCESSFUL		Error
========================================================================*/
LONG ModuleManager( void )
{
//	USBD_FUNC_SWFEATURE sSWFeature;
	APIFLG	sAPIFlag;
	ULONG	dwStatusData;
	LONG	dwAPIStatus;
	DEVICE_REQUEST	*psDeviceRequest;

	sAPIFlag = ModuleStatus.sAPIFlag;
	if( sAPIFlag.bit.wSetInterface == 1 ){
		ModuleStatus.sAPIFlag.wData = 0;
		ModuleStatus.sAPIFlag.bit.wSetInterface = 1;
	} else {
		ModuleStatus.sAPIFlag.wData = 0;
	}

	if( sAPIFlag.bit.wCBRResetEvent == 1 ){
		/* Reset event occurred */

		/**********************/
		/* Return to state of Reset */
		/**********************/
		ModuleStatus.sUSBStatus.bEnableRemoteWakeup = 0;
		ModuleStatus.sUSBStatus.bUSBAddress = 0;
		ModuleStatus.sUSBStatus.bUSBState = DEFAULT_STATE;

		memset(ModuleStatus.sUSBStatus.pbAlternateSetting,DEFAULT_ALTERNATE_SETTING,NUM_INTERFACE);
		dwAPIStatus = USBD_FuncGetStatus(ModuleStatus.wAllocatedID, USBD_FUNC_BUS_STATUS, &dwStatusData);
		if( (dwStatusData & USBD_FUNC_BS_HSMODE) != 0 ){
			/* HS mode */

			ModuleStatus.wOPStatus = USBD_PROT_ENUM_OP_HS_CONNECTED;
			ModuleStatus.sUSBStatus.bHSMode = 1;
		} else {
			/* FS mode */

			ModuleStatus.wOPStatus = USBD_PROT_ENUM_OP_FS_CONNECTED;
			ModuleStatus.sUSBStatus.bHSMode = 0;
		}

		ModuleStatus.wEventStatus |= EVENT_STS_DETECT_RESET;
		/**********************************************/
		/* Call the callback function if it has been registered */
		/**********************************************/
		if( ModuleStatus.pfnCallbackTable[CBR_RESET_EVENT] != NULL ){
			(ModuleStatus.pfnCallbackTable[CBR_RESET_EVENT])(0,0,NULL);
		}
	}

	if( sAPIFlag.bit.wCBRSuspendEvent == 1 ){
		/* Suspend event occurred */

		if(ModuleStatus.sUSBStatus.bEnableRemoteWakeup == 1 && ModuleStatus.sControlFlag.bit.wEnableAutoWakeup == 1 ){
			/*
			 * If Auto Remote Wakeup function is enabled,
			 * Send Remote Wakeup signal after 500ms from occurrence of USB Suspend
			 */
			OS_DlyTsk(TMOUT_AUTO_REMOTEWAKEUP);
			dwAPIStatus = USBD_ProtEnumWakeupA();
		}
		ModuleStatus.wEventStatus |= EVENT_STS_DETECT_SUSPEND;

		/**********************************************/
		/* Call the callback function if it has been registered */
		/**********************************************/
		if( ModuleStatus.pfnCallbackTable[CBR_SUSPEND_EVENT] != NULL ){
			(ModuleStatus.pfnCallbackTable[CBR_SUSPEND_EVENT])(0,0,NULL);
		}
	}

	if( sAPIFlag.bit.wConfigured == 1 ){
		/* Configured event occurred */

		ModuleStatus.wEventStatus |= EVENT_STS_CONFIGURED;
		/**********************************************/
		/* Call the callback function if it has been registered */
		/**********************************************/
		if( ModuleStatus.pfnCallbackTable[CBR_CONFIGURED_EVENT] != NULL ){
			(ModuleStatus.pfnCallbackTable[CBR_CONFIGURED_EVENT])(0,0,NULL);
		}
	}

	if( sAPIFlag.bit.wDeconfigured == 1 ){
		/* Deconfigured event occurred */

		ModuleStatus.wEventStatus |= EVENT_STS_DECONFIGURED;
		/**********************************************/
		/* Call the callback function if it has been registered */
		/**********************************************/
		if( ModuleStatus.pfnCallbackTable[CBR_DECONFIGURED_EVENT] != NULL ){
			(ModuleStatus.pfnCallbackTable[CBR_DECONFIGURED_EVENT])(0,0,NULL);
		}
	}

	if( sAPIFlag.bit.wCBRResumeEvent == 1 ){
		/* Resume  event occurred */

		ModuleStatus.wEventStatus |= EVENT_STS_DETECT_RESUME;
		/**********************************************/
		/* Call the callback function if it has been registered */
		/**********************************************/
		if( ModuleStatus.pfnCallbackTable[CBR_RESUME_EVENT] != NULL ){
			(ModuleStatus.pfnCallbackTable[CBR_RESUME_EVENT])(0,0,NULL);
		}
	}

	if( sAPIFlag.bit.wAltenateSettingChanged == 1 ){
		/* AlternateSetting Changed event occurred */

		ModuleStatus.wEventStatus |= EVENT_STS_ALTERNATE_CHANGED;
		/**********************************************/
		/* Call the callback function if it has been registered */
		/**********************************************/
		if( ModuleStatus.pfnCallbackTable[CBR_ALTERNATE_CHANGED_EVENT] != NULL ){
			psDeviceRequest = &ModuleStatus.sUSBStatus.sDeviceRequest;
			(ModuleStatus.pfnCallbackTable[CBR_ALTERNATE_CHANGED_EVENT])(psDeviceRequest->wIndexL,ModuleStatus.sUSBStatus.pbAlternateSetting[psDeviceRequest->wIndexL],NULL);
		}
	}

	if( sAPIFlag.bit.wCBRRcvRequest == 1 ){
		/* Receive request */
		if( (dwAPIStatus = USBD_FuncReserveControlTransfer()) != STATUS_SUCCESS ){
			/* Reserved for other module!! */

			PANIC();
		}

		ModuleStatus.sAPIFlag.bit.wSetInterface = 0;
		ModuleStatus.sAPIFlag.bit.wGoReplyDescriptorA = 0;
		ModuleStatus.sAPIFlag.bit.wEPxPIOSimpleTransferA = 0;
		dwAPIStatus = StandardRequest();
	}

	if( sAPIFlag.bit.wCBRDataStageEnd == 1 ){
		/* Data stage of Control transfer has completed */
		if( (dwAPIStatus = RequestSuccess()) != STATUS_SUCCESS ){
			/* Error occurred in lower module */

			return dwAPIStatus;
		}
	}

	sAPIFlag.wData = 0;

	return STATUS_SUCCESS;
}

⌨️ 快捷键说明

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