/****************************************************************************** * Function: void USBCheckHIDRequest(void) * * PreCondition: None * * Input: None * * Output: None * * Side Effects: None * * Overview: This routine checks the setup data packet to see if it * knows how to handle it * * Note: None *****************************************************************************/ void USBCheckHIDRequest(void) { if(SetupPkt.Recipient != RCPT_INTF) return; if(SetupPkt.bIntfID != HID_INTF_ID) return; /* * There are two standard requests that hid.c may support. * 1. GET_DSC(DSC_HID,DSC_RPT,DSC_PHY); * 2. SET_DSC(DSC_HID,DSC_RPT,DSC_PHY); */ if(SetupPkt.bRequest == GET_DSC) { switch(SetupPkt.bDscType) { case DSC_HID: ctrl_trf_session_owner = MUID_HID; pSrc.bRom = &CFG01[18]; //18 is a magic number (offset from start of configuration descriptor, to the start of the HID descriptor) wCount.Val = sizeof(USB_HID_DSC); break; case DSC_RPT: ctrl_trf_session_owner = MUID_HID; mUSBGetHIDRptDscAdr(pSrc.bRom); // See usb_config.h mUSBGetHIDRptDscSize(wCount.Val); // See usb_config.h break; case DSC_PHY: // ctrl_trf_session_owner = MUID_HID; break; }//end switch(SetupPkt.bDscType) usb_stat.ctrl_trf_mem = _ROM; }//end if(SetupPkt.bRequest == GET_DSC) if(SetupPkt.RequestType != CLASS) return; switch(SetupPkt.bRequest) { case GET_REPORT: HIDGetReportHandler(); break; case SET_REPORT: HIDSetReportHandler(); break; case GET_IDLE: ctrl_trf_session_owner = MUID_HID; pSrc.bRam = (uint8_t*)&idle_rate; // Set source usb_stat.ctrl_trf_mem = _RAM; // Set memory type wCount.v[0] = 1; // Set data count break; case SET_IDLE: ctrl_trf_session_owner = MUID_HID; //idle_rate = MSB(SetupPkt.W_Value); idle_rate = SetupPkt.W_Value.v[1]; break; case GET_PROTOCOL: ctrl_trf_session_owner = MUID_HID; pSrc.bRam = (uint8_t*)&active_protocol;// Set source usb_stat.ctrl_trf_mem = _RAM; // Set memory type wCount.v[0] = 1; // Set data count break; case SET_PROTOCOL: ctrl_trf_session_owner = MUID_HID; //active_protocol = LSB(SetupPkt.W_Value); active_protocol = SetupPkt.W_Value.v[0]; break; }//end switch(SetupPkt.bRequest) }//end USBCheckHIDRequest
/****************************************************************************** * Function: void USBCheckHIDRequest(void) * * PreCondition: None * * Input: None * * Output: None * * Side Effects: None * * Overview: This routine checks the setup data packet to see if it * knows how to handle it * * Note: None *****************************************************************************/ void USBCheckHIDRequest(void) { if(SetupPkt.Recipient != RCPT_INTF) return; if(SetupPkt.bIntfID != HID_INTF_ID) return; /* * There are two standard requests that hid.c may support. * 1. GET_DSC(DSC_HID,DSC_RPT,DSC_PHY); * 2. SET_DSC(DSC_HID,DSC_RPT,DSC_PHY); */ if(SetupPkt.bRequest == GET_DSC) { switch(SetupPkt.bDscType) { case DSC_HID: ctrl_trf_session_owner = MUID_HID; mUSBGetHIDDscAdr(pSrc.bRom); // See usbcfg.h wCount._word = sizeof(USB_HID_DSC); break; case DSC_RPT: ctrl_trf_session_owner = MUID_HID; mUSBGetHIDRptDscAdr(pSrc.bRom); // See usbcfg.h mUSBGetHIDRptDscSize(wCount._word); // See usbcfg.h break; case DSC_PHY: // ctrl_trf_session_owner = MUID_HID; break; }//end switch(SetupPkt.bDscType) usb_stat.ctrl_trf_mem = _ROM; }//end if(SetupPkt.bRequest == GET_DSC) if(SetupPkt.RequestType != CLASS) return; switch(SetupPkt.bRequest) { case GET_REPORT: HIDGetReportHandler(); break; case SET_REPORT: HIDSetReportHandler(); break; case GET_IDLE: ctrl_trf_session_owner = MUID_HID; pSrc.bRam = (byte*)&idle_rate; // Set source usb_stat.ctrl_trf_mem = _RAM; // Set memory type LSB(wCount) = 1; // Set data count break; case SET_IDLE: ctrl_trf_session_owner = MUID_HID; idle_rate = MSB(SetupPkt.W_Value); break; case GET_PROTOCOL: ctrl_trf_session_owner = MUID_HID; pSrc.bRam = (byte*)&active_protocol;// Set source usb_stat.ctrl_trf_mem = _RAM; // Set memory type LSB(wCount) = 1; // Set data count break; case SET_PROTOCOL: ctrl_trf_session_owner = MUID_HID; active_protocol = LSB(SetupPkt.W_Value); break; }//end switch(SetupPkt.bRequest) }//end USBCheckHIDRequest