/******************************************************************************* * Function Name : DFU_Reset. * Description : DFU reset routine * Input : None. * Output : None. * Return : None. *******************************************************************************/ void DFU_Reset(void) { /* Set DFU_DEVICE as not configured */ Device_Info.Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = DFU_ConfigDescriptor[7]; _SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ _SetEPType(ENDP0, EP_CONTROL); _SetEPTxStatus(ENDP0, EP_TX_NAK); _SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); _SetEPTxAddr(ENDP0, ENDP0_TXADDR); SetEPTxCount(ENDP0, Device_Property.MaxPacketSize); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Set this device to response on default address */ SetDeviceAddress(0); /* Set the new control state of the device to Attached */ bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : Virtual_Com_Port_Reset * Description : Virtual_Com_Port Mouse reset routine * Input : None. * Output : None. * Return : None. *******************************************************************************/ void Virtual_Com_Port_Reset(void) { /* Set Virtual_Com_Port DEVICE as not configured */ pInformation->Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7]; /* Set Virtual_Com_Port DEVICE with the default Interface*/ pInformation->Current_Interface = 0; #ifdef STM32F10X_CL /* EP0 is already configured by USB_SIL_Init() function */ /* Init EP1 IN as Bulk endpoint */ OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE); /* Init EP2 IN as Interrupt endpoint */ OTG_DEV_EP_Init(EP2_IN, OTG_DEV_EP_TYPE_INT, VIRTUAL_COM_PORT_INT_SIZE); /* Init EP3 OUT as Bulk endpoint */ OTG_DEV_EP_Init(EP3_OUT, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE); #else SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_DIS); /* Set this device to response on default address */ SetDeviceAddress(0); #endif /* STM32F10X_CL */ bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : DFU_Reset. * Description : DFU reset routine * Input : None. * Output : None. * Return : None. *******************************************************************************/ void DFU_Reset(void) { /* Set DFU_DEVICE as not configured */ Device_Info.Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = DFU_ConfigDescriptor[7]; #ifdef STM32F10X_CL /* EP0 is already configured in DFU_Init by OTG_DEV_Init() function No Other endpoints needed for this firmware */ #else _SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ _SetEPType(ENDP0, EP_CONTROL); _SetEPTxStatus(ENDP0, EP_TX_NAK); _SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); _SetEPTxAddr(ENDP0, ENDP0_TXADDR); SetEPTxCount(ENDP0, Device_Property.MaxPacketSize); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Set this device to response on default address */ SetDeviceAddress(0); #endif /* STM32F10X_CL */ /* Set the new control state of the device to Attached */ bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : DFU_Reset * Description : * Input : None * Output : None * Return : None *******************************************************************************/ void DFU_Reset(void) { /* Set DFU_DEVICE as not configured */ Device_Info.Current_Configuration = 0; _SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ _SetEPType(ENDP0, EP_CONTROL); _SetEPTxStatus(ENDP0, EP_TX_NAK); _SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); _SetEPTxAddr(ENDP0, ENDP0_TXADDR); SetEPTxCount(ENDP0, Device_Property.MaxPacketSize); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Set this device to response on default address */ SetDeviceAddress(0); /* if(!DFU_Button_Read()) { DeviceState=STATE_dfuIDLE; DeviceStatus[4]=DeviceState; DeviceStatus[1]=0; DeviceStatus[2]=0; DeviceStatus[3]=0; }*/ } /* DFU_Reset() */
/************************************************************************************//** ** \brief USB device reset routine. ** \return none. ** ****************************************************************************************/ void Bulk_Reset(void) { /* set device as not configured */ pInformation->Current_Configuration = 0; /* current feature initialization */ pInformation->Current_Feature = Bulk_ConfigDescriptor[7]; /* set device's the default Interface*/ pInformation->Current_Interface = 0; /* set based address in USB RAM */ SetBTABLE(BTABLE_ADDRESS); /* initialize endpoint 0 CONTROL (mandatory) */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* initialize endpoint 1 IN + OUT */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPRxAddr(ENDP1, ENDP1_RXADDR); SetEPTxCount(ENDP1, BULK_DATA_SIZE); SetEPRxCount(ENDP1, BULK_DATA_SIZE); SetEPRxStatus(ENDP1, EP_RX_VALID); SetEPTxStatus(ENDP1, EP_TX_NAK); /* set this device to respond on default address */ SetDeviceAddress(0); /* update device state */ bDeviceState = ATTACHED; } /*** end of Bulk_Reset ***/
/******************************************************************************* * Function Name : In0_Process * Description : Process the IN token on all default endpoint. * Input : None. * Output : None. * Return : Post0_Process. *******************************************************************************/ uint8_t In0_Process(void) { uint32_t ControlState = pInformation->ControlState; if((ControlState == IN_DATA) || (ControlState == LAST_IN_DATA)) { DataStageIn(); /* ControlState may be changed outside the function */ ControlState = pInformation->ControlState; } else if(ControlState == WAIT_STATUS_IN) { if((pInformation->USBbRequest == SET_ADDRESS) && (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))) { SetDeviceAddress(pInformation->USBwValue0); pUser_Standard_Requests->User_SetDeviceAddress(); } (*pProperty->Process_Status_IN)(); ControlState = STALLED; } else { ControlState = STALLED; } pInformation->ControlState = ControlState; return Post0_Process(); }
/******************************************************************************* MASS_Reset: Mass Storage reset routine. *******************************************************************************/ void MASS_Reset() { Device_Info.Current_Configuration = 0; // Set the device as not configured pInformation->Current_Feature = MASS_ConfigDescriptor[7]; // Current Feature initialization SetBTABLE(BTABLE_ADDRESS); // Initialize Endpoint 0 SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_NAK); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); //Initialize Endpoint 1 SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); // Initialize Endpoint 2 SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, Device_Property.MaxPacketSize); SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); // Set the device to response on default address SetDeviceAddress(0); bDeviceState = ATTACHED; CBW.dSignature = BOT_CBW_SIGNATURE; Bot_State = BOT_IDLE; }
/******************************************************************************* * Function Name : Joystick_Reset. * Description : Joystick Mouse reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void Joystick_Reset(void) { /* Set Joystick_DEVICE as not configured */ pInformation->Current_Configuration = 0; pInformation->Current_Interface = 0;/*the default Interface*/ /* Current Feature initialization */ pInformation->Current_Feature = Joystick_ConfigDescriptor[7]; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_INTERRUPT); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxCount(ENDP1, 4); SetEPRxStatus(ENDP1, EP_RX_DIS); SetEPTxStatus(ENDP1, EP_TX_NAK); bDeviceState = ATTACHED; /* Set this device to response on default address */ SetDeviceAddress(0); }
// Ресет USB void SomeDev_Reset() { // Установка девайса в несконфигурированное состояние Device_Info.Current_Configuration = 0; // Инициализация CurrentFeature pInformation->Current_Feature = SomeDev_ConfigDescriptor[7]; #ifdef STM32F10X_CL // EP0 уже сконфигурирован в USB_SIL_Init() // $USBCONFIG - инициализация ендпойнтов // EP1 IN - Bulk endpoint OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, BULK_MAX_PACKET_SIZE); // EP2 OUT - Bulk endpoint OTG_DEV_EP_Init(EP2_OUT, OTG_DEV_EP_TYPE_BULK, BULK_MAX_PACKET_SIZE); #else // $USBCONFIG - инициализация ендпойнтов SetBTABLE(BTABLE_ADDRESS); // Инициализация Endpoint 0 SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_NAK); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); // Инициализация Endpoint 1 SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); // Инициализация Endpoint 2 SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, Device_Property.MaxPacketSize); SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); // Установка дефолтного адреса SetDeviceAddress(0); #endif /} bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : MASS_Reset * Description : Mass Storage reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void MASS_Reset() { /* Set the device as not configured */ Device_Info.Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = MASS_ConfigDescriptor[7]; #ifdef STM32F10X_CL /* EP0 is already configured by USB_SIL_Init() function */ /* Init EP1 IN as Bulk endpoint */ OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, BULK_MAX_PACKET_SIZE); /* Init EP2 OUT as Bulk endpoint */ OTG_DEV_EP_Init(EP2_OUT, OTG_DEV_EP_TYPE_BULK, BULK_MAX_PACKET_SIZE); #else SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_NAK); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, Device_Property.MaxPacketSize); SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Set the device to response on default address */ SetDeviceAddress(0); #endif /* STM32F10X_CL */ bDeviceState = ATTACHED; CBW.dSignature = BOT_CBW_SIGNATURE; Bot_State = BOT_IDLE; //USB_NotConfigured_LED(); }
void usbReset(void) { pInformation->Current_Configuration = 0; /* current feature is current bmAttributes */ pInformation->Current_Feature = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELF_POWERED); _SetBTABLE(USB_BTABLE_ADDRESS); /* setup control endpoint 0 */ _SetEPType(ENDP0, EP_CONTROL); _SetEPTxStatus(ENDP0, EP_TX_STALL); _SetEPRxAddr(ENDP0,VCOM_CTRL_RX_ADDR); _SetEPTxAddr(ENDP0,VCOM_CTRL_TX_ADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, pProperty->MaxPacketSize); SetEPRxValid(ENDP0); /* setup management endpoint 1 */ SetEPType (VCOM_NOTIFICATION_ENDP, EP_INTERRUPT); SetEPTxAddr (VCOM_NOTIFICATION_ENDP, VCOM_NOTIFICATION_ADDR); SetEPTxStatus (VCOM_NOTIFICATION_ENDP, EP_TX_NAK); SetEPRxStatus (VCOM_NOTIFICATION_ENDP, EP_RX_DIS); /* setup data endpoint OUT (rx) */ /* SetEPType (VCOM_RX_ENDP, EP_BULK); */ /* SetEPRxAddr (VCOM_RX_ENDP, VCOM_RX_ADDR); */ /* SetEPRxCount (VCOM_RX_ENDP, VCOM_RX_EPSIZE); */ /* // SetEPTxStatus (VCOM_RX_ENDP, EP_TX_DIS); */ /* SetEPRxStatus (VCOM_RX_ENDP, EP_RX_VALID); */ SetEPType (3, EP_BULK); SetEPRxAddr (3, 0x110); SetEPRxCount (3,64); // SetEPTxStatus (VCOM_RX_ENDP, EP_TX_DIS); SetEPRxStatus (3, EP_RX_VALID); /* setup data endpoint IN (tx) */ SetEPType (VCOM_TX_ENDP, EP_BULK); SetEPTxAddr (VCOM_TX_ENDP, VCOM_TX_ADDR); SetEPTxStatus (VCOM_TX_ENDP, EP_TX_NAK); SetEPRxStatus (VCOM_TX_ENDP, EP_RX_DIS); bDeviceState = ATTACHED; SetDeviceAddress(0); /* reset the rx fifo */ recvBufIn = 0; recvBufOut = 0; maxNewBytes = VCOM_RX_EPSIZE; countTx = 0; }
/******************************************************************************* * Function Name : CustomHID_Reset. * Description : Custom HID reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ static void composite_cdc_hid_Reset(void) { /* Set CustomHID_DEVICE as not configured */ pInformation->Current_Configuration = 0; pInformation->Current_Interface = 0;/*the default Interface*/ /* Current Feature initialization */ pInformation->Current_Feature = Composite_ConfigDescriptor[7]; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPRxAddr(ENDP1, ENDP1_RXADDR); SetEPTxCount(ENDP1, 0x40); SetEPRxCount(ENDP1, 0x40); SetEPRxStatus(ENDP1, EP_RX_VALID); SetEPTxStatus(ENDP1, EP_TX_NAK); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_INTERRUPT); SetEPTxAddr(ENDP3, ENDP3_TXADDR); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPTxCount(ENDP3, 16); SetEPRxCount(ENDP3, 16); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_NAK); /* Set this device to response on default address */ SetDeviceAddress(0); bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : Virtual_Com_Port_Reset * Description : Virtual_Com_Port Mouse reset routine * Input : None. * Output : None. * Return : None. *******************************************************************************/ void Virtual_Com_Port_Reset(void) { /* Set Virtual_Com_Port DEVICE as not configured */ pInformation->Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7]; /* Set Virtual_Com_Port DEVICE with the default Interface*/ pInformation->Current_Interface = 0; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_DIS); /* Set this device to response on default address */ SetDeviceAddress(0); bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : Speaker_Reset. * Description : Speaker reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void Speaker_Reset() { /* Set Speaker device as not configured state */ pInformation->Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = Speaker_ConfigDescriptor[7]; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_NAK); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_ISOCHRONOUS); SetEPDoubleBuff(ENDP4); SetEPDblBuffAddr(ENDP1, ENDP1_BUF0Addr, ENDP1_BUF1Addr); SetEPDblBuffCount(ENDP1, EP_DBUF_IN, PACKET_SIZE); ClearDTOG_RX(ENDP1); ClearDTOG_TX(ENDP1); SetEPRxStatus(ENDP1, EP_RX_DIS); SetEPTxStatus(ENDP1, EP_TX_VALID); SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPTxCount(ENDP2, 0x40); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); SetEPType(ENDP3, EP_INTERRUPT); SetEPTxAddr(ENDP3, ENDP3_TXADDR); SetEPTxCount(ENDP3, 0x40); SetEPRxStatus(ENDP3, EP_RX_DIS); SetEPTxStatus(ENDP3, EP_TX_NAK); SetEPRxValid(ENDP0); /* Set this device to response on default address */ SetDeviceAddress(0); bDeviceState = ATTACHED; }
/******************************************************************************* Function Name : USBdev_Reset. Description : USB device reset routine. Input : None. Output : None. Return : None. *******************************************************************************/ void USBdev_Reset() { // Set DEVICE as not configured pInformation->Current_Configuration = 0; // Current Feature initialization pInformation->Current_Feature = VCOM_ConfigDescriptor[7]; // Set DEVICE with the default Interface pInformation->Current_Interface = 0; // BTABLE_ADDRESS = 0 USB->BTABLE = BTABLE_ADDRESS; // Initialize Endpoint 0 SetEPType(ENDP0,EP_CONTROL); SetEPTxStatus(ENDP0,EP_TX_STALL); SetEPRxAddr(ENDP0,ENDP0_RXADDR); SetEPTxAddr(ENDP0,ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0,Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); // Initialize Endpoint 1 SetEPType(ENDP1,EP_BULK); SetEPTxAddr(ENDP1,ENDP1_TXADDR); SetEPTxStatus(ENDP1,EP_TX_NAK); SetEPRxStatus(ENDP1,EP_RX_DIS); // Initialize Endpoint 2 SetEPType(ENDP2,EP_INTERRUPT); SetEPTxAddr(ENDP2,ENDP2_TXADDR); SetEPRxStatus(ENDP2,EP_RX_DIS); SetEPTxStatus(ENDP2,EP_TX_NAK); // Initialize Endpoint 3 SetEPType(ENDP3,EP_BULK); SetEPRxAddr(ENDP3,ENDP3_RXADDR); SetEPRxCount(ENDP3,VCOM_INT_SIZE); SetEPRxStatus(ENDP3,EP_RX_VALID); SetEPTxStatus(ENDP3,EP_TX_DIS); // Set this device to response on default address SetDeviceAddress(0); bDeviceState = ATTACHED; }
void Device_Reset(void) { /* Set the device as not configured */ pInformation->Current_Configuration = 0; /* Current feature initialization */ pInformation->Current_Feature = ConfigDescriptor[7]; /* Set the device with the default Interface*/ pInformation->Current_Interface = 0; SetBTABLE(0x00); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPRxCount(ENDP3, VCP_DATA_SIZE); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_DIS); /* Set this device to response on default address */ SetDeviceAddress(0); /* Device attached */ led_off(); }
/******************************************************************************* * Function Name : PIOS_HID_Reset. * Description : Custom HID reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void PIOS_HID_Reset(void) { /* Set Joystick_DEVICE as not configured */ pInformation->Current_Configuration = 0; pInformation->Current_Interface = 0;/*the default Interface*/ /* Current Feature initialization */ pInformation->Current_Feature = PIOS_HID_ConfigDescriptor[7]; #ifdef STM32F10X_CL /* EP0 is already configured in DFU_Init() by USB_SIL_Init() function */ /* Init EP1 IN as Interrupt endpoint */ OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_INT, 2); /* Init EP1 OUT as Interrupt endpoint */ OTG_DEV_EP_Init(EP1_OUT, OTG_DEV_EP_TYPE_INT, 2); #else SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_INTERRUPT); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPRxAddr(ENDP1, ENDP1_RXADDR); SetEPTxCount(ENDP1, PIOS_USB_HID_DATA_LENGTH+2); /* add two for indicating report id and valid data length */ SetEPRxCount(ENDP1, PIOS_USB_HID_DATA_LENGTH+2); SetEPRxStatus(ENDP1, EP_RX_VALID); SetEPTxStatus(ENDP1, EP_TX_NAK); /* Set this device to response on default address */ SetDeviceAddress(0); #endif /* STM32F10X_CL */ bDeviceState = ATTACHED; }
static void usbReset(void) { pInformation->Current_Configuration = 0; /* current feature is current bmAttributes */ pInformation->Current_Feature = (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELF_POWERED); USB_BASE->BTABLE = BTABLE_ADDRESS; /* setup control endpoint 0 */ usb_set_ep_type(USB_EP0, USB_EP_EP_TYPE_CONTROL); usb_set_ep_tx_stat(USB_EP0, USB_EP_STAT_TX_STALL); usb_set_ep_rx_addr(USB_EP0, USB_MIDI_CTRL_RX_ADDR); usb_set_ep_tx_addr(USB_EP0, USB_MIDI_CTRL_TX_ADDR); usb_clear_status_out(USB_EP0); usb_set_ep_rx_count(USB_EP0, pProperty->MaxPacketSize); usb_set_ep_rx_stat(USB_EP0, USB_EP_STAT_RX_VALID); /* TODO figure out differences in style between RX/TX EP setup */ /* set up data endpoint OUT (RX) */ usb_set_ep_type(USB_MIDI_RX_ENDP, USB_EP_EP_TYPE_BULK); usb_set_ep_rx_addr(USB_MIDI_RX_ENDP, USB_MIDI_RX_ADDR); usb_set_ep_rx_count(USB_MIDI_RX_ENDP, USB_MIDI_RX_EPSIZE); usb_set_ep_rx_stat(USB_MIDI_RX_ENDP, USB_EP_STAT_RX_VALID); /* set up data endpoint IN (TX) */ usb_set_ep_type(USB_MIDI_TX_ENDP, USB_EP_EP_TYPE_BULK); usb_set_ep_tx_addr(USB_MIDI_TX_ENDP, USB_MIDI_TX_ADDR); usb_set_ep_tx_stat(USB_MIDI_TX_ENDP, USB_EP_STAT_TX_NAK); usb_set_ep_rx_stat(USB_MIDI_TX_ENDP, USB_EP_STAT_RX_DISABLED); USBLIB->state = USB_ATTACHED; SetDeviceAddress(0); /* Reset the RX/TX state */ n_unread_packets = 0; n_unsent_packets = 0; rx_offset = 0; tx_offset = 0; transmitting = 0; }
/******************************************************************************* * Function Name : Microphone_Reset. * Description : Microphone reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void Microphone_Reset() { /* Set Microphone device as not configured state */ pInformation->Current_Configuration = 0; /* Current Feature initialization */ pInformation->Current_Feature = Microphone_ConfigDescriptor[7]; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_NAK); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_ISOCHRONOUS); SetEPDblBuffAddr(ENDP1, ENDP1_BUF0Addr, ENDP1_BUF1Addr); //SetEPDblBuffCount(ENDP1, EP_DBUF_IN, 0x40); SetEPDblBuffCount(ENDP1, EP_DBUF_IN, 0x60); ClearDTOG_RX(ENDP1); ClearDTOG_TX(ENDP1); ToggleDTOG_TX(ENDP1); SetEPRxStatus(ENDP1, EP_RX_DIS); SetEPTxStatus(ENDP1, EP_TX_VALID); SetEPRxValid(ENDP0); /* Set this device to response on default address */ SetDeviceAddress(0); bDeviceState = ATTACHED; //In_Data_Offset = 0; //Out_Data_Offset = 0; }
/******************************************************************************* Function Name : Speaker_Reset. Description : Speaker reset routine. Input : None. Output : None. Return : None. *******************************************************************************/ void Speaker_Reset() { // Set Speaker device as not configured state pInformation->Current_Configuration = 0; // Current Feature initialization pInformation->Current_Feature = Speaker_ConfigDescriptor[7]; // *BTABLE = BTABLE_ADDRESS & 0xFFF8; *BTABLE = BTABLE_ADDRESS; // BTABLE_ADDRESS = 0 // Initialize Endpoint 0 SetEPType(ENDP0,EP_CONTROL); SetEPTxStatus(ENDP0,EP_TX_NAK); SetEPRxAddr(ENDP0,ENDP0_RXADDR); SetEPRxCount(ENDP0,Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0,ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); // Initialize Endpoint 1 SetEPType(ENDP1,EP_ISOCHRONOUS); SetEPDblBuffAddr(ENDP1,ENDP1_BUF0Addr,ENDP1_BUF1Addr); SetEPDblBuffCount(ENDP1,EP_DBUF_OUT,0x40); ClearDTOG_RX(ENDP1); ClearDTOG_TX(ENDP1); ToggleDTOG_TX(ENDP1); SetEPRxStatus(ENDP1,EP_RX_VALID); SetEPTxStatus(ENDP1,EP_TX_DIS); SetEPRxValid(ENDP0); // Set this device to response on default address SetDeviceAddress(0); bDeviceState = ATTACHED; In_Data_Offset = 0; Out_Data_Offset = 0; }
/******************************************************************************* * Function Name : CustomHID_Reset. * Description : Custom HID reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void CustomHID_Reset(void) { /* Set Joystick_DEVICE as not configured */ pInformation->Current_Configuration = 0; pInformation->Current_Interface = 0;/*the default Interface*/ /* Current Feature initialization */ pInformation->Current_Feature = CustomHID_ConfigDescriptor[7]; *(volatile unsigned *)(0x40005C50L)=(0x00&0xFFF8);//设置USB分组缓冲区描述表起始地址:0 /* Initialize Endpoint 0 */ //设置EP0控制端点 ENDP0 ((u8)0) EP_CONTROL (0x0200) *(((volatile unsigned *)(0x40005C00L)) + ENDP0)=((_GetENDPOINT(ENDP0) & 0x898f) | EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); //设置EP0端点发送延迟 SetEPRxAddr(ENDP0, ENDP0_RXADDR); //设置EP0的接受地址 ENDP0_RXADDR (0x18) SetEPTxAddr(ENDP0, ENDP0_TXADDR); //设置EP0的发送地址 ENDP0_TXADDR (0x58) _ClearEP_KIND(ENDP0); //设置端点EP0的类型DBL_BUF 双缓冲端点 SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); //设置EP0的计数器的值 _SetEPRxStatus(ENDP0, EP_RX_VALID); //设置端点接受有效 EP_RX_VALID=0x3000 /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_INTERRUPT); SetEPRxAddr(ENDP1, ENDP1_RXADDR); //ADDR内部寄存器被用作当前缓冲区的指针 ENDP1_RXADDR=(0x98) SetEPRxCount(ENDP1, 22); //COUNT寄存器用于记录剩下未传输的字节数 SetEPRxStatus(ENDP1, EP_RX_VALID); //设置端点接受有效 EP_RX_VALID=0x3000 /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPTxCount(ENDP2, 22); SetEPTxStatus(ENDP2, EP_TX_NAK);//设置端点发送不应答 EP_TX_NAK=(0x0020) bDeviceState = ATTACHED; //ATTACHED=1 /* Set this device to response on default address */ SetDeviceAddress(0); }
/******************************************************************************* * Function Name : MASS_Reset * Description : Mass Storage reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void MASS_Reset() { /* Set the device as not configured */ Device_Info.Current_Configuration = 0; SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_NAK); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxValid(ENDP0); /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, Device_Property.MaxPacketSize); SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /* Set the device to response on default address */ SetDeviceAddress(0); CBW.dSignature = BOT_CBW_SIGNATURE; Bot_State = BOT_IDLE; }
void usbReset(void) { dfuUpdateByReset(); pInformation->Current_Configuration = 0; pInformation->Current_Feature = usbConfigDescriptorDFU.Descriptor[7]; _SetBTABLE(BTABLE_ADDRESS); /* setup the ctrl endpoint */ _SetEPType(ENDP0, EP_CONTROL); _SetEPTxStatus(ENDP0, EP_TX_STALL); _SetEPRxAddr(ENDP0, ENDP0_RXADDR); _SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, pProperty->MaxPacketSize); // SetEPTxCount(ENDP0, pProperty->MaxPacketSize); SetEPRxValid(ENDP0); bDeviceState = ATTACHED; SetDeviceAddress(0); /* different than usbSetDeviceAddr! comes from usb_core */ }
/******************************************************************************* * Function Name : Virtual_Com_Port_Reset * Description : Virtual_Com_Port Mouse reset routine * Input : None. * Output : None. * Return : None. *******************************************************************************/ void Virtual_Com_Port_Reset(void) { /* Set Virtual_Com_Port_DEVICE as not configured */ pInformation->Current_Configuration = 0; pInformation->Current_Interface = 0;/*the default Interface*/ SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); //GS 0x40 64 SetEPTxAddr(ENDP0, ENDP0_TXADDR); //GS 0x80 128 Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); /*-------------------------------------------------------------*/ /* -------------- Buffer Description Table -----------------*/ /*-------------------------------------------------------------*/ //#define VIRTUAL_COM_PORT_DATA_SIZE 64 /* EP0 */ /* rx/tx buffer base address */ //#define ENDP0_RXADDR (0x40) //#define ENDP0_TXADDR (0x80) /* EP1 */ /* tx buffer base address */ //#define ENDP1_BUFF0_ADDR (0xC0) //#define ENDP1_BUFF1_ADDR (0x100) //#define ENDP2_BUFF0_ADDR (0x1C0) //#define ENDP2_BUFF1_ADDR (0x1D0) // Initialize Endpoint 1 SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_BUFF_ADDR); SetEPRxCount(ENDP1,64); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); // Initialize Endpoint 2 SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_BUFF_ADDR); SetEPRxCount(ENDP2, 64); SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); // Initialize Endpoint 3 // IN cmd SetEPType(ENDP3, EP_BULK); SetEPTxAddr(ENDP3, ENDP3_BUFF_ADDR); SetEPRxCount(ENDP3, 64); SetEPTxStatus(ENDP3, EP_TX_NAK); SetEPRxStatus(ENDP3, EP_RX_DIS); // Initialize Endpoint 4 // OUT cmd SetEPType(ENDP4, EP_BULK); SetEPRxAddr(ENDP4, ENDP4_BUFF_ADDR); SetEPRxCount(ENDP4, 64); SetEPRxStatus(ENDP4, EP_RX_VALID); SetEPTxStatus(ENDP4, EP_TX_DIS); /* Set this device to respsonse on default address */ SetDeviceAddress(0); }
/******************************************************************************* * Function Name : USB_Reset * Description : USB reset routine * Input : None. * Output : None. * Return : None. *******************************************************************************/ void USB_Reset(void) { /* Set USB DEVICE as not configured */ pInformation->Current_Configuration = 0; /* Set USB DEVICE with the default Interface*/ pInformation->Current_Interface = 0; #ifdef USB_CDC_ENABLE /* Current Feature initialization */ pInformation->Current_Feature = CDC_ConfigDescriptor[7]; #endif #ifdef USB_HID_ENABLE /* Current Feature initialization */ pInformation->Current_Feature = HID_ConfigDescriptor[7]; #endif SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); #ifdef USB_CDC_ENABLE /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPRxCount(ENDP3, CDC_DATA_SIZE); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_DIS); #endif #ifdef USB_HID_ENABLE /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_INTERRUPT); SetEPTxAddr(ENDP1, ENDP1_TXADDR); #if defined (SPARK_USB_MOUSE) SetEPTxCount(ENDP1, 4); #elif defined (SPARK_USB_KEYBOARD) SetEPTxCount(ENDP1, 8); #endif SetEPRxStatus(ENDP1, EP_RX_DIS); SetEPTxStatus(ENDP1, EP_TX_NAK); #endif /* Set this device to response on default address */ SetDeviceAddress(0); bDeviceState = ATTACHED; }
/******************************************************************************* * Function Name : Joystick_Reset. * Description : Joystick Mouse reset routine. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void USB_APP_Reset(void) { /* Set Joystick_DEVICE as not configured */ pInformation->Current_Configuration = 0; /* Current Feature initialization */ #if(USB_DEVICE_CONFIG & _USE_USB_VIRTUAL_COMM_DEVICE) if (g_usb_type == USB_VIRTUAL_PORT) { pInformation->Current_Interface = 0; pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7]; } else #endif #if(USB_DEVICE_CONFIG & _USE_USB_KEYBOARD_DEVICE) if(g_usb_type == USB_KEYBOARD) { pInformation->Current_Interface = 0; pInformation->Current_Feature = Keyboard_ConfigDescriptor[7]; } else #endif #if(USB_DEVICE_CONFIG & _USE_USB_MASS_STOARGE_DEVICE) { pInformation->Current_Feature = MASS_ConfigDescriptor[7]; } #endif #if(USB_DEVICE_CONFIG & _USE_USB_PRINTER_DEVICE) { pInformation->Current_Interface = 0; pInformation->Current_Feature = Printer_ConfigDescriptor[7]; } #endif SetBTABLE(BTABLE_ADDRESS); /* Initialize Endpoint 0 */ SetEPType(ENDP0, EP_CONTROL); SetEPTxStatus(ENDP0, EP_TX_STALL); SetEPRxAddr(ENDP0, ENDP0_RXADDR); SetEPTxAddr(ENDP0, ENDP0_TXADDR); Clear_Status_Out(ENDP0); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); #if(USB_DEVICE_CONFIG & _USE_USB_VIRTUAL_COMM_DEVICE) if (g_usb_type == USB_VIRTUAL_PORT) { /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_INTERRUPT); SetEPTxAddr(ENDP2, ENDP2_TXADDR); SetEPRxStatus(ENDP2, EP_RX_DIS); SetEPTxStatus(ENDP2, EP_TX_NAK); /* Initialize Endpoint 3 */ SetEPType(ENDP3, EP_BULK); SetEPRxAddr(ENDP3, ENDP3_RXADDR); SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE); SetEPRxStatus(ENDP3, EP_RX_VALID); SetEPTxStatus(ENDP3, EP_TX_DIS); } else #endif #if(USB_DEVICE_CONFIG & _USE_USB_KEYBOARD_DEVICE) if(g_usb_type == USB_KEYBOARD) { /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_INTERRUPT); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxCount(ENDP1, 1); SetEPRxStatus(ENDP1, EP_RX_DIS); SetEPTxStatus(ENDP1, EP_TX_NAK); } else #endif #if(USB_DEVICE_CONFIG & _USE_USB_MASS_STOARGE_DEVICE) { /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, Device_Property.MaxPacketSize); //SetEPRxCount(ENDP2, 0x40); //joe ÐÞ¸Ä SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); SetEPRxValid(ENDP0); CBW.dSignature = BOT_CBW_SIGNATURE; Bot_State = BOT_IDLE; } #endif #if(USB_DEVICE_CONFIG & _USE_USB_PRINTER_DEVICE) { /* Initialize Endpoint 1 */ SetEPType(ENDP1, EP_BULK); SetEPTxAddr(ENDP1, ENDP1_TXADDR); SetEPTxStatus(ENDP1, EP_TX_NAK); SetEPRxStatus(ENDP1, EP_RX_DIS); /* Initialize Endpoint 2 */ SetEPType(ENDP2, EP_BULK); SetEPRxAddr(ENDP2, ENDP2_RXADDR); SetEPRxCount(ENDP2, Device_Property.MaxPacketSize); //SetEPRxCount(ENDP2, 0x40); //joe ÐÞ¸Ä SetEPRxStatus(ENDP2, EP_RX_VALID); SetEPTxStatus(ENDP2, EP_TX_DIS); } #endif bDeviceState = ATTACHED; /* Set this device to response on default address */ SetDeviceAddress(0); }
/******************************************************************************* * Function Name : NoData_Setup0. * Description : Proceed the processing of setup request without data stage. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void NoData_Setup0(void) { RESULT Result = USB_UNSUPPORT; uint32_t RequestNo = pInformation->USBbRequest; uint32_t ControlState; if(Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) { /* Device Request*/ /* SET_CONFIGURATION*/ if(RequestNo == SET_CONFIGURATION) { Result = Standard_SetConfiguration(); } /*SET ADDRESS*/ else if(RequestNo == SET_ADDRESS) { if((pInformation->USBwValue0 > 127) || (pInformation->USBwValue1 != 0) || (pInformation->USBwIndex != 0) || (pInformation->Current_Configuration != 0)) /* Device Address should be 127 or less*/ { ControlState = STALLED; goto exit_NoData_Setup0; } else { Result = USB_SUCCESS; #ifdef STM32F10X_CL SetDeviceAddress(pInformation->USBwValue0); #endif /* STM32F10X_CL */ } } /*SET FEATURE for Device*/ else if(RequestNo == SET_FEATURE) { if((pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP) && (pInformation->USBwIndex == 0)) { Result = Standard_SetDeviceFeature(); } else { Result = USB_UNSUPPORT; } } /*Clear FEATURE for Device */ else if(RequestNo == CLEAR_FEATURE) { if(pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP && pInformation->USBwIndex == 0 && ValBit(pInformation->Current_Feature, 5)) { Result = Standard_ClearFeature(); } else { Result = USB_UNSUPPORT; } } } /* Interface Request*/ else if(Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) { /*SET INTERFACE*/ if(RequestNo == SET_INTERFACE) { Result = Standard_SetInterface(); } } /* EndPoint Request*/ else if(Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) { /*CLEAR FEATURE for EndPoint*/ if(RequestNo == CLEAR_FEATURE) { Result = Standard_ClearFeature(); } /* SET FEATURE for EndPoint*/ else if(RequestNo == SET_FEATURE) { Result = Standard_SetEndPointFeature(); } } else { Result = USB_UNSUPPORT; } if(Result != USB_SUCCESS) { Result = (*pProperty->Class_NoData_Setup)(RequestNo); if(Result == USB_NOT_READY) { ControlState = PAUSE; goto exit_NoData_Setup0; } } if(Result != USB_SUCCESS) { ControlState = STALLED; goto exit_NoData_Setup0; } ControlState = WAIT_STATUS_IN; /* After no data stage SETUP */ USB_StatusIn(); exit_NoData_Setup0: pInformation->ControlState = ControlState; return; }