📄 usbh_usbd_api.c
字号:
{
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 + -