void PRNT_Device_ProcessControlRequest(USB_ClassInfo_PRNT_Device_t* const PRNTInterfaceInfo) { if (!(Endpoint_IsSETUPReceived())) return; if (USB_ControlRequest.wIndex != PRNTInterfaceInfo->Config.InterfaceNumber) return; switch (USB_ControlRequest.bRequest) { case PRNT_REQ_GetDeviceID: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } uint16_t IEEEStringLen = strlen(PRNTInterfaceInfo->Config.IEEE1284String); Endpoint_Write_16_BE(IEEEStringLen); Endpoint_Write_Control_Stream_LE(PRNTInterfaceInfo->Config.IEEE1284String, IEEEStringLen); Endpoint_ClearStatusStage(); } break; case PRNT_REQ_GetPortStatus: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } Endpoint_Write_8(PRNTInterfaceInfo->State.PortStatus); Endpoint_ClearStatusStage(); } break; case PRNT_REQ_SoftReset: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); PRNTInterfaceInfo->State.IsPrinterReset = true; EVENT_PRNT_Device_SoftReset(PRNTInterfaceInfo); } break; } }
void usbGetEZ3() { Endpoint_ClearSETUP();//ack setup packet u8 sendData = 0; while (sendData < 2) { while (!Endpoint_IsINReady()) { //wait until host is ready } u16 state = measureEZ3(ez3); Endpoint_Write_16_BE(state);//write as big endian sendData += 2; Endpoint_ClearIN(); } //while (!Endpoint_IsOUTReceived()) { //wait for host to send status } //Endpoint_ClearOUT();//send message //Endpoint_ClearStatusStage();//success :D }