void Chap9_SetConfiguration(void) { if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE) { if(ControlData.DeviceRequest.wIndex == 0 && ControlData.DeviceRequest.wLength == 0) { if (ControlData.DeviceRequest.wValue == 0) { /* put device in unconfigured state */ bD13flags.bits.configuration = 0; bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 1; Chap9_SingleTransmitEP0(0, 0); } else if (ControlData.DeviceRequest.wValue == 1) { printf("configured \n"); /* Configure device */ bD13flags.bits.configuration = 1; bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0; bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 1; Chap9_SingleTransmitEP0(0, 0); } else Chap9_StallEP0InControlWrite(); } } else { if (ControlData.DeviceRequest.wValue == 0) { /* put device in unconfigured state */ bD13flags.bits.configuration = 0; bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 1; bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 0; Chap9_SingleTransmitEP0(0, 0); } else if (ControlData.DeviceRequest.wValue == 1) { /* Configure device */ bD13flags.bits.configuration = 1; bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0; bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 1; Chap9_SingleTransmitEP0(0, 0); } else Chap9_StallEP0InControlWrite(); } }
void Chap9_SetInterface(void) { UCHAR dir = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_DIR_MASK; if(dir) Chap9_StallEP0InControlRead(); if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE) Chap9_StallEP0InControlRead(); else { if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0) { ALTERNATIVE_SETTING = 0; Chap9_SingleTransmitEP0(0,0); } else if (ControlData.DeviceRequest.wValue == 1 && ControlData.DeviceRequest.wIndex == 0) { ALTERNATIVE_SETTING = 1; Chap9_SingleTransmitEP0(0,0); } else { Chap9_StallEP0InControlWrite(); } } }
void Chap9_SetFeature(void) { UCHAR endp = 0; UCHAR bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT; USHORT wFeature = ControlData.DeviceRequest.wValue; if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE) { switch(bRecipient) { case USB_RECIPIENT_DEVICE: if(wFeature == USB_FEATURE_REMOTE_WAKEUP) { bD13flags.bits.remote_wakeup = 1; Chap9_SingleTransmitEP0(0, 0); } else { Chap9_StallEP0InControlWrite(); } break; case USB_RECIPIENT_ENDPOINT: if( wFeature == USB_FEATURE_ENDPOINT_STALL) { if( ControlData.DeviceRequest.wIndex == 0x00 ) endp = -1; Hal4D13_SetEndpointStatus(endp+1, D13REG_EPSTS_STALL); Chap9_SingleTransmitEP0(0, 0); } else Chap9_StallEP0InControlWrite(); break; default: Chap9_StallEP0InControlWrite(); break; } } else { if( ControlData.DeviceRequest.wLength == 0 ) { switch(bRecipient) { case USB_RECIPIENT_DEVICE: if(wFeature == USB_FEATURE_REMOTE_WAKEUP) { bD13flags.bits.remote_wakeup = 1; Chap9_SingleTransmitEP0(0, 0); } else { Chap9_StallEP0InControlWrite(); } break; case USB_RECIPIENT_ENDPOINT: if( wFeature == USB_FEATURE_ENDPOINT_STALL) { if( ControlData.DeviceRequest.wIndex == 0x00 ) endp = -1; else endp = (UCHAR)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS); Hal4D13_SetEndpointStatus(endp+1, D13REG_EPSTS_STALL); Chap9_SingleTransmitEP0(0, 0); } else { Hal4D13_SetEndpointStatus(endp+1, 0); Chap9_SingleTransmitEP0(0, 0); } break; default: Chap9_StallEP0InControlWrite(); break; } } } }