亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.c

?? Texas Instruments的TUSB3410芯片接鍵盤輸入的固件程序源碼和驅動程序源碼。
?? C
?? 第 1 頁 / 共 4 頁
字號:
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_VENDOR | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_DBUS,               // interface return dbus configurable parameters
    0x00,0x00,                      // wValue
    0x00,0x00,                      // interface number 0
    0x04,0x00,                      // 4 bytes data
    0xff,&usbVendorRequest,


    //    
    // the following listing are for standard USB requests
    //    
    
    // clear device feature
//    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE, 
//    USB_REQ_CLEAR_FEATURE, 
//    FEATURE_REMOTE_WAKEUP,0x00,
//    0x00,0x00,
//    0x00,0x00,
//    0xff,&usbStallEndpoint0,

    // clear interface feature
//    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
//    USB_REQ_CLEAR_FEATURE,
//    0xff,0x00,
//    0xff,0x00,
//    0x00,0x00,
//    0xe7,&usbStallEndpoint0,

    // clear device feature
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE, 
    USB_REQ_CLEAR_FEATURE, 
    FEATURE_REMOTE_WAKEUP,0x00,     // feature selector
    0x00,0x00,
    0x00,0x00,
    0xff,&usbClearDeviceFeature,

    // clear endpoint feature
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT,
    USB_REQ_CLEAR_FEATURE,
    FEATURE_ENDPOINT_STALL,0x00,
    0xff,0x00,
    0x00,0x00,
    0xf7,&usbClearEndpointFeature,

    // get configuration
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_GET_CONFIGURATION,
    0x00,0x00,
    0x00,0x00,
    0x01,0x00,
    0xff,&usbGetConfiguration,

    // get device descriptor
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_GET_DESCRIPTOR,
    0xff,DESC_TYPE_DEVICE,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0xff,0xff,
    0xd0,&usbGetDeviceDescriptor,

    // get configuration descriptor
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_GET_DESCRIPTOR,
    0xff,DESC_TYPE_CONFIG,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0xff,0xff,
    0xd0,&usbGetConfigurationDescriptor,

    // get string descriptor
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_GET_DESCRIPTOR,
    0xff,DESC_TYPE_STRING,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0xff,0xff,
    0xd0,&usbGetStringDescriptor,











    // GET HID DESCRIPTOR
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_DESCRIPTOR,
    0xff,DESC_TYPE_HID,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0xff,0xff,
    0xd0,&usbGetHIDDescriptor,

    // GET REPORT DESCRIPTOR
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_DESCRIPTOR,
    0xff,DESC_TYPE_REPORT,                 // bValueL is index and bValueH is type
    0xff,0xff,
    0xff,0xff,
    0xd0,&usbGetReportDescriptor,

    // SET REPORT
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
    USB_REQ_SET_REPORT,
    0xff,0xFF,                 // bValueL is index and bValueH is type
    0xff,0xff,
    0xff,0xff,
    0xC0,&usbSetReport,

    // SET IDLE
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
    USB_REQ_SET_IDLE,
    0xff,0xFF,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0x00,0x00,
    0xc3,&usbSetIdle,

    // SET PROTOCOL
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
    USB_REQ_SET_PROTOCOL,
    0xff,0xFF,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0x00,0x00,
    0xc3,&usbSetProtocol,

    // GET IDLE
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_IDLE,
    0xff,0xFF,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0x01,0x00,
    0xc3,&usbGetIdle,

    // GET PROTOCOL
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_PROTOCOL,
    0xff,0xFF,                  // bValueL is index and bValueH is type
    0xff,0xff,
    0x01,0x00,
    0xc3,&usbGetProtocol,
    
    // get interface
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_INTERFACE,
    0x00,0x00,
    0xff,0xff,
    0x01,0x00,
    0xf3,&usbGetInterface,

    // get device status
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_GET_STATUS,
    0x00,0x00,
    0x00,0x00,
    0x02,0x00,
    0xff,&usbGetDeviceStatus,

    // get interface status
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
    USB_REQ_GET_STATUS,
    0x00,0x00,
    0xff,0x00,
    0x02,0x00,
    0xf7,&usbGetInterfaceStatus,

    // get endpoint status
    USB_REQ_TYPE_INPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT,
    USB_REQ_GET_STATUS,
    0x00,0x00,
    0xff,0x00,
    0x02,0x00,
    0xf7,&usbGetEndpointStatus,

    // set address
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_SET_ADDRESS,
    0xff,0x00,
    0x00,0x00,
    0x00,0x00,
    0xdf,&usbSetAddress,

    // set configuration
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_SET_CONFIGURATION,
    0xff,0x00,
    0x00,0x00,
    0x00,0x00,
    0xdf,&usbSetConfiguration,

    // set descriptor (Bootcode stalls to this request)
//    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
//    USB_REQ_SET_DESCRIPTOR,
//    0xff,0xff,                      // descriptor type and descriptor index
//    0xff,0xff,                      // language ID
//    0xff,0xff,                      // desciprotr length
//    0xc0,&usbStallEndpoint0,

    // set device feature
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_DEVICE,
    USB_REQ_SET_FEATURE,
    0xff,0x00,                      // feature selector
    0x00,0x00,
    0x00,0x00,
    0xdf,&usbSetDeviceFeature,

    // set interface feature
//    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
//    USB_REQ_SET_FEATURE,
//    0xff,0x00,
//    0xff,0x00,
//    0x00,0x00,
//    0xd7,&usbStallEndpoint0,

    // set endpoint feature
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_ENDPOINT,
    USB_REQ_SET_FEATURE,
    0xff,0x00,                      // feature selector
    0xff,0x00,                      // endpoint number <= 127 
    0x00,0x00,
    0xd7,&usbSetEndpointFeature,

    // set interface
    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
    USB_REQ_SET_INTERFACE,
    0xff,0x00,                      // feature selector
    0xff,0x00,                      // interface number
    0x00,0x00,
    0xd7,&usbSetInterface,

    // synch frame (Bootcode stalls to this request)
//    USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE,
//    USB_REQ_SYNCH_FRAME,
//    0x00,0x00,
//    0xff,0x00,                      // endpoint number
//    0x02,0x00,
//    0xf7,&usbStallEndpoint0,

    //
    // end of usb descriptor -- this one will be matched to any USB request
    //                          since bCompareMask is 0x00.
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
    0x00,&usbInvalidRequest     // end of list
};


//----------------------------------------------------------------------------
// This routine decode the setup packet and call perper routine
//typedef struct _tDEVICE_REQUEST_COMPARE
//{
//    BYTE    bmRequestType;              // See bit definitions below
//    BYTE    bRequest;                   // See value definitions below
//    BYTE    bValueL;                    // Meaning varies with request type
//    BYTE    bValueH;                    // Meaning varies with request type
//    BYTE    bIndexL;                    // Meaning varies with request type
//    BYTE    bIndexH;                    // Meaning varies with request type
//    BYTE    bLengthL;                   // Number of bytes of data to transfer (LSByte)
//    BYTE    bLengthH;                   // Number of bytes of data to transfer (MSByte)
//    BYTE    bCompareMask;               // MSB is bRequest, if set 1, bRequest should be matched
//    VOID    (*pUsbFunction)(VOID);      // function pointer
//} tDEVICE_REQUEST_COMPARE, *ptDEVICE_REQUEST_COMPARE;
//

VOID usbDecodeAndProcessUsbRequest(VOID)
{
    BYTE bMask,bResult,bTemp;
    BYTE *pbUsbRequestList,abSetupPacketBuffer[8];
    BYTE bRequestType,bRequest;

// the following routine takes very long time in simulation    
//    pbUsbRequestList = (PBYTE)&tUsbRequestList[0];
//    while(1){
//        bResult = 0x00;
//        bMask   = 0x80;
//        // compare all the fields first
//        for(bTemp = 0; bTemp < 8; bTemp++){
//            if(*(pbEP0_SETUP_ADDRESS+bTemp) == *(pbUsbRequestList+bTemp)) bResult |= bMask;
//           bMask = bMask >> 1;
//        }
//        // now we have the result
//        if((*(pbUsbRequestList+bTemp) & bResult) == *(pbUsbRequestList+bTemp)) break;
//        // advance to next one
//        pbUsbRequestList += sizeof(tDEVICE_REQUEST_COMPARE);
//    }

    // copy setup packet to idata to speed up decoding
    for(bTemp = 0; bTemp < 8; bTemp++)
        abSetupPacketBuffer[bTemp] = *(pbEP0_SETUP_ADDRESS+bTemp);

    // point to beginning of the matrix        
    pbUsbRequestList = (PBYTE)&tUsbRequestList[0];

    while(1){
        bRequestType = *pbUsbRequestList++;
        bRequest     = *pbUsbRequestList++;
        RESET_WATCHDOG;

        if(((bRequestType == 0xff) && (bRequest == 0xff)) ||
            (abSetupPacketBuffer[0] == (USB_REQ_TYPE_INPUT | USB_REQ_TYPE_VENDOR | USB_REQ_TYPE_DEVICE)) ||
            (abSetupPacketBuffer[0] == (USB_REQ_TYPE_OUTPUT | USB_REQ_TYPE_VENDOR | USB_REQ_TYPE_DEVICE)) ){
            pbUsbRequestList -= 2;
            break;
        }

        if((bRequestType == abSetupPacketBuffer[0]) && (bRequest == abSetupPacketBuffer[1])){
        
            // compare the first two
            bResult = 0xc0;
            bMask   = 0x20;
            // first two bytes matched, compare the rest
            for(bTemp = 2; bTemp < 8; bTemp++){
                if(abSetupPacketBuffer[bTemp] == *pbUsbRequestList++) bResult |= bMask;
                bMask = bMask >> 1;
            }
            // now we have the result
            if((*pbUsbRequestList & bResult) == *pbUsbRequestList){
                pbUsbRequestList -= 8;
                break;
            }else pbUsbRequestList += (sizeof(tDEVICE_REQUEST_COMPARE)-8);
        }else pbUsbRequestList += (sizeof(tDEVICE_REQUEST_COMPARE)-2);
    }

    // if another setup packet comes before we have the chance to process current
    // setup request, we return here without processing the request
    // this check is not necessary but still kept here to reduce response(or simulation) time
    if((bUSBSTA & USBSTA_STPOW) != 0x00) return;
    
    // now we found the match and jump to the function accordingly.
    ((ptDEVICE_REQUEST_COMPARE)pbUsbRequestList)->pUsbFunction();
    
}

/*----------------------------------------------------------------------------+
| Interrupt Sub-routines                                                      |
+----------------------------------------------------------------------------*/
//----------------------------------------------------------------------------
VOID SetupPacketInterruptHandler(VOID)
{
    BYTE bTemp;

    // NAK both input and output endpoints
    tEndPoint0DescriptorBlock.bIEPBCNT = EPBCT_NAK;
    tEndPoint0DescriptorBlock.bOEPBCNT = EPBCT_NAK;

    usbProcessNewSetupPacket:

    bUSBCTL |= USBCTL_SIR;
    
    // copy the MSB of bmRequestType to DIR bit of USBCTL
    if((tSetupPacket.bmRequestType & USB_REQ_TYPE_INPUT) == USB_REQ_TYPE_INPUT)
        bUSBCTL |= USBCTL_DIR;
    else bUSBCTL &= ~USBCTL_DIR;

    bStatusAction = STATUS_ACTION_NOTHING;

    // clear out return data buffer
    for(bTemp=0;bTemp<USB_RETURN_DATA_LENGTH;bTemp++) abUsbRequestReturnData[bTemp] = 0x00;

    // decode and process the request
    usbDecodeAndProcessUsbRequest();
    
    // check if there is another setup packet pending
    // if it is, abadon current one by NAKing both data endpoint 0
    if((bUSBSTA & USBSTA_STPOW) != 0x00){
        bUSBSTA = USBSTA_STPOW;
        goto usbProcessNewSetupPacket;
    }
}

//----------------------------------------------------------------------------
VOID IEP0InterruptHandler(VOID)
{
    tEndPoint0DescriptorBlock.bOEPBCNT = 0x00;     // will be set by the hardware      

    if(bStatusAction == STATUS_ACTION_DATA_IN) usbSendNextPacketOnIEP0();
    else tEndPoint0DescriptorBlock.bIEPCNFG |= EPCNF_STALL; // no more data
}

//----------------------------------------------------------------------------
VOID OEP0InterruptHandler(VOID)
{
    tEndPoint0DescriptorBlock.bIEPBCNT = 0x00;     // will be set by the hardware      

    if(bStatusAction == STATUS_ACTION_DATA_OUT) usbReceiveNextPacketOnOEP0();
    else tEndPoint0DescriptorBlock.bOEPCNFG |= EPCNF_STALL; // no more data
}

/*----------------------------------------------------------------------------+
| Main Routine                                                                |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| End of source file                                                          |
+----------------------------------------------------------------------------*/
/*------------------------ Nothing Below This Line --------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜亚洲另类欧美| 国产sm精品调教视频网站| 激情文学综合网| 一本到三区不卡视频| 欧美日本韩国一区| 亚洲日本免费电影| 国产一区二区三区观看| 欧美日韩精品一区二区天天拍小说 | 欧美三区在线视频| 国产欧美日韩精品一区| 日韩电影一区二区三区四区| 色偷偷久久人人79超碰人人澡| 久久先锋影音av鲁色资源| 天天操天天色综合| 欧洲在线/亚洲| 中文字幕日韩一区二区| 激情国产一区二区| 日韩欧美国产综合一区| 午夜日韩在线观看| 欧美日韩在线免费视频| 一区二区三区在线视频观看58| 国产不卡视频在线观看| 久久久噜噜噜久久人人看| 捆绑调教一区二区三区| 日韩三级在线观看| 香蕉久久一区二区不卡无毒影院| 91九色最新地址| 亚洲欧美一区二区三区极速播放 | 欧美电影免费观看高清完整版在线 | 婷婷夜色潮精品综合在线| 在线亚洲+欧美+日本专区| 亚洲欧洲av一区二区三区久久| 国产精品一区二区在线播放| 精品成人一区二区三区四区| 美女视频第一区二区三区免费观看网站| 欧美人牲a欧美精品| 婷婷综合另类小说色区| 欧美一区二区免费观在线| 三级影片在线观看欧美日韩一区二区| 精品视频色一区| 日本色综合中文字幕| 欧美精品久久一区二区三区| 亚洲五码中文字幕| 欧美视频你懂的| 亚洲bt欧美bt精品777| 欧美一级二级三级蜜桃| 日韩精品电影一区亚洲| 日韩视频免费观看高清完整版在线观看| 日韩精品成人一区二区在线| 精品国产免费一区二区三区香蕉| 国产精品一区二区久久精品爱涩| 国产日本欧美一区二区| 色婷婷综合视频在线观看| 亚洲一二三四区| 日韩欧美国产小视频| 国产一区不卡视频| 最好看的中文字幕久久| 在线成人av网站| 久久9热精品视频| 日韩一区在线播放| 欧美日韩极品在线观看一区| 久久99国产精品久久| 国产精品传媒视频| 3atv在线一区二区三区| 国产乱妇无码大片在线观看| 亚洲日本一区二区| 日韩三级免费观看| www.欧美色图| 日韩精品福利网| 国产精品电影院| 91精品国产综合久久久久久漫画| 国产精品 欧美精品| 亚洲天堂精品在线观看| 日韩精品专区在线| 91视视频在线观看入口直接观看www| 日韩在线播放一区二区| 国产精品视频一区二区三区不卡| 欧美在线你懂得| 国产专区欧美精品| 日韩经典中文字幕一区| 国产精品美女久久久久aⅴ| 欧美日韩国产在线播放网站| 成人avav影音| 久草这里只有精品视频| 亚洲国产日日夜夜| 国产精品色婷婷久久58| 日韩亚洲欧美一区| 欧美日韩视频在线一区二区| 99久久综合精品| 精品一区二区三区免费播放| 亚洲无线码一区二区三区| 亚洲欧洲在线观看av| 久久人人97超碰com| 777奇米成人网| 欧美性视频一区二区三区| 成人精品视频一区二区三区 | 欧美一区二区三区视频免费播放| 91免费国产视频网站| 国产成人精品免费在线| 紧缚奴在线一区二区三区| 五月天国产精品| 亚洲精品免费在线播放| 最新久久zyz资源站| 欧美经典一区二区| 国产亚洲一区二区三区| 精品国产凹凸成av人网站| 欧美精品自拍偷拍动漫精品| 欧美日本在线视频| 欧美妇女性影城| 欧美精品日韩精品| 这里是久久伊人| 欧美男女性生活在线直播观看| 欧美亚洲图片小说| 欧美精品 日韩| 91精品国产高清一区二区三区| 欧美精品v日韩精品v韩国精品v| 欧美三级乱人伦电影| 欧美色爱综合网| 69成人精品免费视频| 这里是久久伊人| 精品福利一区二区三区免费视频| 日韩精品在线一区| 久久影院视频免费| 国产精品理论在线观看| 中文字幕中文字幕一区| 玉米视频成人免费看| 亚洲一区精品在线| 另类专区欧美蜜桃臀第一页| 国产一区二区三区| www.亚洲色图| 欧美在线你懂的| 日韩欧美一区二区视频| 国产亚洲成av人在线观看导航| 国产精品国产三级国产专播品爱网 | 99精品偷自拍| 97精品国产露脸对白| 欧美午夜精品久久久久久孕妇| 69av一区二区三区| 欧美tickling网站挠脚心| 国产欧美日韩亚州综合| 一区二区三区久久久| 日本免费在线视频不卡一不卡二| 国内国产精品久久| 色视频成人在线观看免| 日韩午夜电影av| 自拍偷拍欧美精品| 麻豆成人av在线| 91亚洲精华国产精华精华液| 欧美一区二区三区白人| 国产精品久久久一区麻豆最新章节| 亚洲最大色网站| 国产精品亚洲第一区在线暖暖韩国| 91免费观看在线| 久久综合视频网| 亚洲二区在线视频| 国产在线视频不卡二| 欧美探花视频资源| 欧美国产一区视频在线观看| 日韩精品亚洲一区二区三区免费| 国产激情偷乱视频一区二区三区| 95精品视频在线| 久久亚区不卡日本| 亚洲成人久久影院| 成人激情视频网站| 日韩欧美久久久| 亚洲国产中文字幕| 成人黄色av电影| 日韩精品一区二区三区老鸭窝 | 欧美在线观看18| 国产精品视频免费| 看电视剧不卡顿的网站| 色婷婷激情一区二区三区| 久久婷婷综合激情| 日韩高清一级片| 91高清在线观看| 亚洲国产精品传媒在线观看| 麻豆成人av在线| 91精品国产综合久久福利| 亚洲欧美成人一区二区三区| 成人高清视频免费观看| 久久久久久9999| 国产一区二区中文字幕| 精品女同一区二区| 日韩中文字幕1| 91麻豆精品国产91久久久使用方法 | 亚洲国产成人av好男人在线观看| 成人免费黄色在线| 国产亚洲欧美激情| 韩国av一区二区三区在线观看| 欧美高清www午色夜在线视频| 一区二区三区精品视频在线| 99精品热视频| 国产精品大尺度| 91丝袜美腿高跟国产极品老师 | 亚洲一区二区在线播放相泽| 91在线观看一区二区| 中文字幕一区在线观看| av亚洲产国偷v产偷v自拍| 国产三级精品视频| 懂色av一区二区在线播放|