Beispiel #1
0
/******************************************************************************
 * 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
Beispiel #2
0
/******************************************************************************
 * 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