📄 obj_usbdesc.c
字号:
else pUsbDesc->GetStatus(recipient, pSetup->wIndex, pUsbDesc->pPrivateStandardData); } /* =================== Default state ================= */ else /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);}/* ************************************ *//* AT91F_UsbDescSetAddress *//* *//* Arguments: *//* pSetup: pointer to setup datas *//* Return: *//* Nothing *//* Description: *//* This request sets the device *//* address for all device accesses *//* ************************************ */void AT91F_UsbDescSetAddress( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbSetup pSetup) /* USB setup data Cf USB spec rev 1.1 */{ u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp); /* Check request arguments */ if ((pSetup->wValue >= 127) || pSetup->wIndex != 0 || pSetup->wLength != 0) /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* ================ Configured state ================= */ else if ( (usbState & UDP_CONFG) ) /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* ============ Address or Default state ============= */ else { /* Enter the address state if the value != 0 */ //AT91F_UdpEpEow(pUsbDesc->pUdp, pUsbDesc->epId); // Wait for TX Complete if (pUsbDesc->SetAddress) pUsbDesc->SetAddress(pSetup->wValue, pUsbDesc->pPrivateStandardData); }}/* ************************************ *//* AT91F_UsbDescSetConfiguration *//* *//* Arguments: *//* pSetup: pointer to setup datas *//* Return: *//* Nothing *//* Description: *//* This request sets the device *//* configuration *//* ************************************ */void AT91F_UsbDescSetConfiguration( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbSetup pSetup) /* USB setup data Cf USB spec rev 1.1 */{ u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp); /* Check request arguments */ if ((pSetup->wValue & 0xFF00) || pSetup->wIndex != 0 || pSetup->wLength != 0) /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* ================ Configured state ================= */ else if ( (usbState & UDP_CONFG) ) { if (pSetup->wValue == 0) { /* Device enters Address State */ AT91F_UdpSetState(pUsbDesc->pUdp, UDP_FADDEN); AT91F_UdpEpEow(pUsbDesc->pUdp, pUsbDesc->epId); } else { if (pUsbDesc->SetConfiguration) pUsbDesc->SetConfiguration(pSetup->wValue, pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } } /* =================== Address state ================= */ else if ( (usbState & UDP_FADDEN) ) { if (pSetup->wValue == 0) /* Device remains in Address State */ AT91F_UdpEpEow(pUsbDesc->pUdp, pUsbDesc->epId); else { if (pUsbDesc->SetConfiguration) pUsbDesc->SetConfiguration(pSetup->wValue, pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } } /* =================== Default state ================= */ else /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);}/* ************************************ *//* AT91F_UsbDescSetDescriptor *//* *//* Arguments: *//* pSetup: pointer to setup datas *//* Return: *//* Nothing *//* Description: *//* This request may be used to *//* update existing descripotrs or *//* new descriptors may be added *//* ************************************ */void AT91F_UsbDescSetDescriptor( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbSetup pSetup) /* USB setup data Cf USB spec rev 1.1 */{ u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp); /* ================ Configured or Address state ================= */ if ( ((usbState & UDP_CONFG) || (usbState & UDP_FADDEN))) { if (pUsbDesc->SetDescriptor) pUsbDesc->SetDescriptor ( (pSetup->wValue >> 8), /* Descriptor type */ (pSetup->wValue & 0xFF), /* Descriptor index */ pSetup->wIndex, /* Language ID */ pSetup->wLength, /* Desriptor length */ pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } /* =================== Default state ================= */ else /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);}/* ************************************ *//* AT91F_UsbDescSetFeature *//* *//* Arguments: *//* pSetup: pointer to setup datas *//* Return: *//* Nothing *//* Description: *//* This request is used to set or *//* enable a specific feature *//* ************************************ */void AT91F_UsbDescSetFeature( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbSetup pSetup) /* USB setup data Cf USB spec rev 1.1 */{ u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp); u_int recipient = (pSetup->bmRequestType & 0x1F); /* Check request arguments */ if (recipient > 2 || pSetup->wLength != 0) /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* ================ Configured state ================= */ else if ( (usbState & UDP_CONFG) ) { if (pUsbDesc->SetFeature) pUsbDesc->SetFeature (recipient, pSetup->wIndex, pSetup->wValue, pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } /* =================== Address state ================= */ else if ( (usbState & UDP_FADDEN) ) { /* This request is valid in Address State only when reference endpoint 0 */ if (recipient != 2 || pSetup->wIndex != 0) AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); else { if (pUsbDesc->SetFeature) pUsbDesc->SetFeature (recipient, pSetup->wIndex, pSetup->wValue, pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } } /* =================== Default state ================= */ else /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);}/* ************************************ *//* AT91F_UsbDescSetInterface *//* *//* Arguments: *//* pSetup: pointer to setup datas *//* Return: *//* Nothing *//* Description: *//* This request allows the host to *//* select an alternate setting for *//* the specified interface *//* ************************************ */void AT91F_UsbDescSetInterface( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbSetup pSetup) /* USB setup data Cf USB spec rev 1.1 */{ u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp); /* Check request arguments */ if (pSetup->wLength != 0) /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* ================ Configured state ================= */ else if ( (usbState & UDP_CONFG) ) { if (pUsbDesc->SetInterface) pUsbDesc->SetInterface (pSetup->wIndex, pSetup->wValue, pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } /* =================== Address state ================= */ else if ( (usbState & UDP_FADDEN) ) AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* =================== Default state ================= */ else /* Device behavior not specified */ AT91F_UdpEpEow(pUsbDesc->pUdp, pUsbDesc->epId);}/* ************************************ *//* AT91F_UsbDescSynchFrame *//* *//* Arguments: *//* pSetup: pointer to setup datas *//* Return: *//* Nothing *//* Description: *//* This request is used to set and *//* then report an ep's synch.frame. *//* ************************************ */void AT91F_UsbDescSynchFrame( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbSetup pSetup) /* USB setup data Cf USB spec rev 1.1 */{ u_int usbState = AT91F_UdpGetState(pUsbDesc->pUdp); /* Check request arguments */ if (pSetup->wValue != 0 || pSetup->wLength != 2) /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* ================ Configured state ================= */ else if ( (usbState & UDP_CONFG) ) { if (pUsbDesc->SynchFrame) pUsbDesc->SynchFrame (pSetup->wIndex, pUsbDesc->pPrivateStandardData); else AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); } /* =================== Address state ================= */ else if ( (usbState & UDP_FADDEN) ) AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId); /* =================== Default state ================= */ else /* Device behavior not specified */ AT91F_UdpEpStall(pUsbDesc->pUdp, pUsbDesc->epId);}/* ************************************ *//* AT91F_UdpConfigure *//* *//* Arguments: *//* pEp: pointer to endpoint *//* standard USB descriptor *//* Return: *//* Nothing *//* Description: *//* Configure USB endpoints according*//* to the endpoint descriptor *//* ************************************ */void AT91F_UdpConfigure( AT91PS_UsbDesc const pUsbDesc, /* pointer to a AT91S_UsbDesc structure */ AT91PS_UsbEndpoint const pEp){ if (pEp->bEndpointAddress & (1 << 7)) { /* IN endpoint */ switch (pEp->bmAttributes & 0x03) { case 0: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_CONTROL); break; case 1: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_ISOCHRONOUS_IN); break; case 2: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_BULK_IN); break; default: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_INTERRUPT_IN); break; } } else { /* OUT endpoint */ switch (pEp->bmAttributes & 0x03) { case 0: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_CONTROL); break; case 1: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_ISOCHRONOUS_OUT); break; case 2: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_BULK_OUT); break; default: AT91F_UdpEpConfigure(pUsbDesc->pUdp, pUsbDesc->epId, UDP_EPDS | UDP_INTERRUPT_OUT); break; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -