void EP4_Handler(void) { /* INT IN transfer */ if (gu8IsDeviceReady) { RDR_to_PC_NotifySlotChange(); USBD_MemCopy((uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP4)), pu8IntInBuf, 2); USBD_SET_PAYLOAD_LEN(EP4, 2); gu8IsDeviceReady = 0; } if (!gu8IsBulkOutReady) USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE); }
/** * @brief CCID_IntMessage * Send the Interrupt-IN data to the host * @param pdev: device instance * @retval None */ void CCID_IntMessage(USB_CORE_HANDLE *pdev) { /* Check if there us change in Smartcard Slot status */ if ( CCID_IsSlotStatusChange() && CCID_IsIntrTransferComplete() ) { /* Check Slot Status is changed. Card is Removed/ Fitted */ RDR_to_PC_NotifySlotChange(); CCID_SetIntrTransferStatus(0); /* Reset the Status */ CCID_UpdSlotChange(0); /* Reset the Status of Slot Change */ DCD_EP_Tx (pdev, CCID_INTR_IN_EP, UsbIntMessageBuffer, 2); } }
/** * @brief USBD Endpoint Config. * @param None. * @retval None. */ void CCID_Init(void) { /* Init setup packet buffer */ /* Buffer for setup packet -> [0 ~ 0x7] */ USBD->BUFSEG = SETUP_BUF_BASE; /*****************************************************/ /* EP0 ==> control IN endpoint, address 0 */ USBD_CONFIG_EP(EP0, USBD_CFG_CSTALL | USBD_CFG_EPMODE_IN | 0); /* Buffer range for EP0 */ USBD_SET_EP_BUF_ADDR(EP0, EP0_BUF_BASE); /* EP1 ==> control OUT endpoint, address 0 */ USBD_CONFIG_EP(EP1, USBD_CFG_CSTALL | USBD_CFG_EPMODE_OUT | 0); /* Buffer range for EP1 */ USBD_SET_EP_BUF_ADDR(EP1, EP1_BUF_BASE); /*****************************************************/ /* EP2 ==> Bulk IN endpoint, address 2 */ USBD_CONFIG_EP(EP2, USBD_CFG_EPMODE_IN | BULK_IN_EP_NUM); /* Buffer offset for EP2 */ USBD_SET_EP_BUF_ADDR(EP2, EP2_BUF_BASE); /* EP3 ==> Bulk Out endpoint, address 2 */ USBD_CONFIG_EP(EP3, USBD_CFG_EPMODE_OUT | BULK_OUT_EP_NUM); /* Buffer offset for EP3 */ USBD_SET_EP_BUF_ADDR(EP3, EP3_BUF_BASE); /* trigger receive OUT data */ USBD_SET_PAYLOAD_LEN(EP3, EP3_MAX_PKT_SIZE); /* EP4 ==> Interrupt IN endpoint, address 3 */ USBD_CONFIG_EP(EP4, USBD_CFG_EPMODE_IN | INT_IN_EP_NUM); /* Buffer offset for EP4 -> */ USBD_SET_EP_BUF_ADDR(EP4, EP4_BUF_BASE); /* check card state */ gu8IsDeviceReady = 1; pu8IntInBuf = &UsbIntMessageBuffer[0]; pUsbMessageBuffer = &UsbMessageBuffer[0]; RDR_to_PC_NotifySlotChange(); USBD_MemCopy((uint8_t *)(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP4)), pu8IntInBuf, 2); USBD_SET_PAYLOAD_LEN(EP4, 2); }