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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb.c

?? Texas Instruments的TUSB3410芯片接鍵盤輸入的固件程序源碼和驅(qū)動程序源碼。
?? C
?? 第 1 頁 / 共 4 頁
字號:
//    WORD wTemp;

    bFUNADR = 0x00;         // no device address
    bFunctionSuspended  = FALSE;    

    // if download firmware's checksum is wrong, reboot
//    bReboot = FALSE;

    // disconnect from USB
    bUSBCTL = 0x00;             

    // a flag the bootcode knows if it has loaded firmware from i2c
//    bLoadFirmwareFromI2C = FALSE;

    // copy descriptor to allocated address
    // copy device and configuration descriptor to external memory
/*    
    for(bTemp=0;bTemp<SIZEOF_DEVICE_DESCRIPTOR;bTemp++){
        abDeviceDescriptor[bTemp] = abromDeviceDescriptor[bTemp];
        RESET_WATCHDOG;
    }

    for(bTemp=0;bTemp<SIZEOF_BOOTCODE_CONFIG_DESC_GROUP;bTemp++){
        abConfigurationDescriptorGroup[bTemp] = abromConfigurationDescriptorGroup[bTemp];
        RESET_WATCHDOG;
    }

    for(bTemp=0;bTemp<SIZEOF_BOOTCODE_STRING_DESC_GROUP;bTemp++){
        abStringDescriptor[bTemp] = abromStringDescriptor[bTemp];
        RESET_WATCHDOG;
    }
*/
/*
    #ifdef UMPDBG   // test on UMP board        
    #else
    // check if DEVVID, DEVPID, SERNUM contain pre-define values.
    if((bDEVVIDH != 0xff) && (bDEVVIDL != 0xff) && (bDEVPIDH != 0xff) && (bDEVPIDL != 0xff)){
        // update VID and PID
        abDeviceDescriptor[8]  = bDEVVIDL;
        abDeviceDescriptor[9]  = bDEVVIDH;
        abDeviceDescriptor[10] = bDEVPIDL;
        abDeviceDescriptor[11] = bDEVPIDH;
        abDeviceDescriptor[12] = bDEVREVL;
        abDeviceDescriptor[13] = bDEVREVH;

        bTemp = abDeviceDescriptor[16];     // index number
        // if index number is zero, that means it does not support serial number
        if(bTemp != 0x00){
            wTemp = 0x0000;
            // try to find the string index
            while(bTemp != 0x00){
                wTemp += (WORD)abStringDescriptor[wTemp];
                bTemp--;
            }
        
            if(wTemp != 0x0000){
                wTemp +=2;          // point to first letter
                abStringDescriptor[wTemp] = GetBCD(bSERNUM7 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM7 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM6 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM6 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM5 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM5 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM4 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM4 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM3 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM3 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM2 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM2 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM1 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM1 & 0x0f);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM0 >> 4);
                wTemp+=2;
                abStringDescriptor[wTemp] = GetBCD(bSERNUM0 & 0x0f);
                wTemp+=2;
              }
        }
    }
    #endif

    #ifdef UMPDBG   // test on UMP board    
    #define bHUBCNF1    (* (char xdata *)0xFFF7)        // HUB Configuration-1 Register        
    #define bHUBCNF2    (* (char xdata *)0xFFF6)        // HUB Configuration-2 Register    
    #define bHUBPIDL    (* (char xdata *)0xFFF8)        // HUB PID Low-byte Register
    #define bHUBPIDH    (* (char xdata *)0xFFF9)        // HUB PID High-byte Register
    #define bHUBVIDL    (* (char xdata *)0xFFFA)        // HUB VID Low-byte Register
    #define bHUBVIDH    (* (char xdata *)0xFFFB)        // HUB VID High-byte Register

    // enable port 6 and keep power switch setting
    bHUBCNF1 = 0x55;
    bHUBCNF2 = 0x10;
    bHUBPIDL = 0x11;
    bHUBPIDH = 0x22;    
    bHUBVIDL = 0x33;
    bHUBVIDH = 0x44;
    P1 = 0x55;
    #endif
*/    

    // Disable endpoint 0 interrupt
    tEndPoint0DescriptorBlock.bIEPCNFG = 0x00;
    tEndPoint0DescriptorBlock.bOEPCNFG = 0x00;

    // Disable output endpoint 1 interrupt
    tOutputEndPointDescriptorBlock[0].bEPCNF   = 0x00;

    // reset 
//    UsbReset();
    
    // Enable the USB-specific Interrupts; SETUP, and RESET
    bUSBMSK =  USBMSK_SETUP | USBMSK_RSTR | USBMSK_SUSP | USBMSK_RESR | USBMSK_WAKEUP;
}

/*----------------------------------------------------------------------------+
| General Subroutines                                                         |
+----------------------------------------------------------------------------*/
//----------------------------------------------------------------------------
VOID usbStallEndpoint0(VOID)
{
    RESET_WATCHDOG;
    tEndPoint0DescriptorBlock.bIEPCNFG |= EPCNF_STALL;
    tEndPoint0DescriptorBlock.bOEPCNFG |= EPCNF_STALL;
}

//----------------------------------------------------------------------------
VOID usbClearOEP0ByteCount(VOID)
{
    RESET_WATCHDOG;
    tEndPoint0DescriptorBlock.bOEPBCNT = 0x00;
}

//----------------------------------------------------------------------------
/*
VOID usbClearIEP0ByteCount(VOID)
{
   tEndPoint0DescriptorBlock.bIEPBCNT = 0x00;
}
*/

//----------------------------------------------------------------------------
VOID usbStallOEP0(VOID)
{
    // in standard USB request, there is not control write request with data stage
    // control write, stall output endpoint 0
    // wLength should be 0 in all cases
    RESET_WATCHDOG;
    tEndPoint0DescriptorBlock.bOEPCNFG |= EPCNF_STALL;
}

//----------------------------------------------------------------------------
VOID usbSendNextPacketOnIEP0(VOID)
{
    BYTE bPacketSize,bIndex;

    // First check if there are bytes remaining to be transferred
    if(wBytesRemainingOnIEP0 != NO_MORE_DATA){
        if(wBytesRemainingOnIEP0 > EP0_PACKET_SIZE){
            // More bytes are remaining than will fit in one packet
            // there will be More IN Stage
            bPacketSize = EP0_PACKET_SIZE;
            wBytesRemainingOnIEP0 -= EP0_PACKET_SIZE;
            bStatusAction = STATUS_ACTION_DATA_IN;

        }else if (wBytesRemainingOnIEP0 < EP0_PACKET_SIZE){
            // The remaining data will fit in one packet.
            // This case will properly handle wBytesRemainingOnIEP0 == 0
            bPacketSize = (BYTE)wBytesRemainingOnIEP0;
            wBytesRemainingOnIEP0 = NO_MORE_DATA;        // No more data need to be Txed
            bStatusAction = STATUS_ACTION_NOTHING;

        }else{
            // wBytesRemainingOnIEP0 == EP0_PACKET_SIZE
            bPacketSize = EP0_PACKET_SIZE;
            if(bHostAskMoreDataThanAvailable == TRUE){
                wBytesRemainingOnIEP0 = 0;
                bStatusAction = STATUS_ACTION_DATA_IN;
            }else{ 
                wBytesRemainingOnIEP0 = NO_MORE_DATA;
                bStatusAction = STATUS_ACTION_NOTHING;
            }
        }
 
        RESET_WATCHDOG;
        for(bIndex=0; bIndex<bPacketSize; bIndex++) 
            abIEP0Buffer[bIndex] = *pbIEP0Buffer++;

        tEndPoint0DescriptorBlock.bIEPBCNT = bPacketSize;   // & EPBCT_BYTECNT_MASK;

    }else bStatusAction = STATUS_ACTION_NOTHING;
    RESET_WATCHDOG;
}

//----------------------------------------------------------------------------
VOID usbSendDataPacketOnEP0(PBYTE pbBuffer)
{
    WORD wTemp;

    pbIEP0Buffer = pbBuffer;

    wTemp = (WORD)(tSetupPacket.bLengthH << 8) | (WORD)tSetupPacket.bLengthL;

    // Limit transfer size to wLength if needed
    // this prevent USB device sending 'more than require' data back to host
    if(wBytesRemainingOnIEP0 >= wTemp){
        wBytesRemainingOnIEP0 = wTemp;
        bHostAskMoreDataThanAvailable = FALSE;
    }else bHostAskMoreDataThanAvailable = TRUE;

    usbSendNextPacketOnIEP0();
}

//----------------------------------------------------------------------------
VOID usbReceiveNextPacketOnOEP0(VOID)
{
        usbStallOEP0();
// bootcode does not use this.
/*    BYTE bIndex,bByte;

    bByte = tEndPoint0DescriptorBlock.bOEPBCNT & EPBCT_BYTECNT_MASK;

    if(wBytesRemainingOnOEP0 >= (WORD)bByte){
        for(bIndex=0;bIndex<bByte;bIndex++)
            *pbOEP0Buffer++ = abOEP0Buffer[bIndex];

        wBytesRemainingOnOEP0 -= (WORD)bByte;

        // clear the NAK bit for next packet
        if(wBytesRemainingOnOEP0 > 0){
            usbClearOEP0ByteCount();        
            bStatusAction = STATUS_ACTION_DATA_OUT;
        }else{
            usbStallOEP0();
            bStatusAction = STATUS_ACTION_NOTHING;        
        }
    }else{
        usbStallOEP0();
        bStatusAction = STATUS_ACTION_NOTHING;
    }
*/
}

//----------------------------------------------------------------------------

VOID usbReceiveDataPacketOnEP0(PBYTE pbBuffer)
{

    pbOEP0Buffer = pbBuffer;

    wBytesRemainingOnOEP0 = 
        (WORD)(tSetupPacket.bLengthH << 8) | (WORD)tSetupPacket.bLengthL;
    bStatusAction = STATUS_ACTION_DATA_OUT;

    usbClearOEP0ByteCount();            

}

//----------------------------------------------------------------------------
VOID usbSendZeroLengthPacketOnIEP0(VOID)
{
    RESET_WATCHDOG;
    wBytesRemainingOnIEP0 = NO_MORE_DATA;
    bStatusAction = STATUS_ACTION_NOTHING;
    tEndPoint0DescriptorBlock.bIEPBCNT = 0x00;
}

//----------------------------------------------------------------------------
VOID usbClearEndpointFeature(VOID)
{
    BYTE bEndpointNumber;
    
    PUTS("CL");

    // EP is from EP1 to EP7 while C language start from 0    
    bEndpointNumber = (tSetupPacket.bIndexL & EP_DESC_ADDR_EP_NUM);
    if(bEndpointNumber == 0x00) usbSendZeroLengthPacketOnIEP0();
    else{
        bEndpointNumber--;    
        #ifdef BOOTCODE
        // check if it is output endpoint 1
        // if other endpoints, ignore
        if((bEndpointNumber == 0) && ((tSetupPacket.bIndexL & EP_DESC_ADDR_DIR_IN) == 0x00)){
            // output endpoint
            tOutputEndPointDescriptorBlock[0].bEPCNF &= ~(EPCNF_STALL | EPCNF_TOGLE);
            usbSendZeroLengthPacketOnIEP0();
        }
        #else
        if(bEndpointNumber < MAX_ENDPOINT_NUMBER){
            if((tSetupPacket.bIndexL & EP_DESC_ADDR_DIR_IN) == EP_DESC_ADDR_DIR_IN){
                // input endpoint
                tInputEndPointDescriptorBlock[bEndpointNumber].bEPCNF &= ~(EPCNF_STALL | EPCNF_TOGLE);
            }else{
                // output endpoint
                tOutputEndPointDescriptorBlock[bEndpointNumber].bEPCNF &= ~(EPCNF_STALL | EPCNF_TOGLE);
            }
            usbSendZeroLengthPacketOnIEP0();
        }
        #endif        
    }        
    RESET_WATCHDOG;
}

//----------------------------------------------------------------------------
VOID usbGetConfiguration(VOID)
{
    usbClearOEP0ByteCount();                    // for status stage

    wBytesRemainingOnIEP0 = 1;
    usbSendDataPacketOnEP0((PBYTE)&bConfigurationNumber);
}


//----------------------------------------------------------------------------
//VOID usbSendDeviceDescriptor(VOID)
//{
//    wBytesRemainingOnIEP0 = SIZEOF_DEVICE_DESCRIPTOR;
//    usbClearOEP0ByteCount();                    // for status stage        
//    usbSendDataPacketOnEP0((PBYTE)&abDeviceDescriptor);
//
//}
//----------------------------------------------------------------------------
//VOID usbGetDeviceDescriptor(VOID)
//{
/*
    // this prevent that correct firmware is downloaded and get more than 
    // two setups from host
    if((bLoadFirmwareFromI2C == FALSE) && (bCurrentDataType == DATA_TYPE_HEADER_BINARY_FIRMWARE)){
        bLoadFirmwareFromI2C = TRUE;
        if(LoadBinaryFirmwareFromI2c() == NO_ERROR) bExecuteFirmware = TRUE;
        else usbSendDeviceDescriptor();
    }else if(bExecuteFirmware != TRUE) usbSendDeviceDescriptor();  // for request at second time
*/    
//    usbSendDeviceDescriptor();
//}

void usbGetDeviceDescriptor(void)
{
BYTE bTemp;

    // Copy the DEVICE DESCRIPTOR from program "ROM" to XRAM
    for(bTemp=0;bTemp<SIZEOF_DEVICE_DESCRIPTOR;bTemp++)
        abDescriptor[bTemp] = abromDeviceDescriptor[bTemp];

    usbClearOEP0ByteCount();
    wBytesRemainingOnIEP0 = SIZEOF_DEVICE_DESCRIPTOR;
    usbSendDataPacketOnEP0((PBYTE)&abDescriptor);
}

/*
//----------------------------------------------------------------------------
VOID usbGetConfigurationDescriptor(VOID)
{
    usbClearOEP0ByteCount();                    // for status stage

    wBytesRemainingOnIEP0 = SIZEOF_BOOTCODE_CONFIG_DESC_GROUP;

    usbSendDataPacketOnEP0((PBYTE)&abConfigurationDescriptorGroup);
}

//----------------------------------------------------------------------------
VOID usbGetStringDescriptor(VOID)
{
    WORD bIndex;

    usbClearOEP0ByteCount();                    // for status stage 

    bIndex = 0x00;
    while(tSetupPacket.bValueL-- >  0x00) bIndex += abStringDescriptor[bIndex];
    wBytesRemainingOnIEP0 = abStringDescriptor[bIndex];
    usbSendDataPacketOnEP0((PBYTE)&abStringDescriptor[bIndex]);

}
*/

void usbGetConfigurationDescriptor(void)
{
    BYTE bTemp;
    WORD wTemp;

    // Copy the DEVICE DESCRIPTOR from program "ROM" to XRAM
    for(bTemp=0;bTemp<sizeof(abromConfigurationDescriptorGroup);bTemp++)
        abDescriptor[bTemp] = abromConfigurationDescriptorGroup[bTemp];
    

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久综合| 中文字幕一区二区三区不卡| 国产成人免费9x9x人网站视频| 亚洲视频一区在线观看| 欧美大胆人体bbbb| 欧美亚洲国产怡红院影院| 国产精品影视在线观看| 五月综合激情网| 亚洲免费观看高清在线观看| xnxx国产精品| 欧美成人一区二区三区在线观看 | 91免费版在线看| 精品无人区卡一卡二卡三乱码免费卡| 亚洲精品视频一区| 国产欧美日韩在线观看| 日韩欧美在线123| 欧美日韩一区二区三区四区| 99精品偷自拍| 丰满少妇在线播放bd日韩电影| 日本色综合中文字幕| 亚洲一区二区免费视频| 亚洲欧美另类综合偷拍| 中文字幕视频一区二区三区久| 久久久久久9999| 久久久久久97三级| 久久久精品综合| 欧美变态tickling挠脚心| 69成人精品免费视频| 欧美色视频一区| 欧美日韩日本视频| 欧美最猛黑人xxxxx猛交| 97精品电影院| 91美女片黄在线观看91美女| 99久久综合99久久综合网站| zzijzzij亚洲日本少妇熟睡| 成人av网站在线观看| 国产精品一品二品| 高清久久久久久| 成人看片黄a免费看在线| 国产.精品.日韩.另类.中文.在线.播放| 国产一区日韩二区欧美三区| 国产一区二区久久| 国产精品18久久久久| 国产精品18久久久久久久网站| 国产电影精品久久禁18| 成年人网站91| 在线精品视频免费观看| 欧美三级电影在线看| 欧美日韩日日骚| 日韩天堂在线观看| 久久久久久久久蜜桃| 国产精品久久久久久久久晋中| 日韩理论片中文av| 亚洲国产成人av好男人在线观看| 亚洲成人久久影院| 久久99精品久久久久久久久久久久 | 欧美午夜精品久久久| 欧美人妇做爰xxxⅹ性高电影| 日韩一区二区免费视频| 欧美v国产在线一区二区三区| 久久嫩草精品久久久久| 国产欧美一区二区三区鸳鸯浴| 国产精品久久久久久亚洲毛片| 一区二区三区中文字幕| 婷婷综合另类小说色区| 国产专区欧美精品| 91蜜桃网址入口| 欧美一区二区日韩| 欧美高清在线视频| 性做久久久久久久免费看| 久久精品999| 成人激情文学综合网| 欧美最猛黑人xxxxx猛交| 欧美成人一区二区三区| 中文字幕在线观看不卡| 日韩va亚洲va欧美va久久| 国产精品一区专区| 欧美性猛交xxxx黑人交| 久久蜜桃av一区二区天堂| 亚洲免费资源在线播放| 免费视频一区二区| 91在线国产观看| 精品日韩在线观看| 亚洲欧美一区二区三区久本道91 | 欧美日韩的一区二区| 久久综合网色—综合色88| 亚洲精品免费播放| 国产一区二区h| 欧美乱妇一区二区三区不卡视频| 久久精品视频在线免费观看| 亚洲一区二区美女| 成人蜜臀av电影| 精品国产一区二区在线观看| 亚洲精选免费视频| 国产精品综合在线视频| 精品视频一区二区三区免费| 日本一区二区三区久久久久久久久不| 亚洲午夜视频在线观看| 成人丝袜18视频在线观看| 欧美精品自拍偷拍动漫精品| 中文字幕一区二| 国内不卡的二区三区中文字幕 | 国产精品天天摸av网| 日韩电影在线看| 91小视频免费看| 国产偷国产偷精品高清尤物| 首页国产欧美日韩丝袜| 日本高清不卡aⅴ免费网站| 欧美激情中文字幕一区二区| 奇米影视在线99精品| 欧美日韩亚洲高清一区二区| 中文字幕在线不卡一区二区三区| 国产一区二区三区日韩| 日韩欧美三级在线| 日韩成人伦理电影在线观看| 欧美中文字幕一区| 亚洲精品视频自拍| 99国产欧美另类久久久精品| 国产日产欧美一区二区三区| 久久99久久99精品免视看婷婷 | 国产视频亚洲色图| 韩国视频一区二区| 精品理论电影在线| 麻豆一区二区三区| 日韩视频一区二区三区在线播放| 亚洲妇女屁股眼交7| 欧美日韩一区二区欧美激情| 亚洲一区电影777| 精品视频一区二区三区免费| 亚洲一区二区三区自拍| 欧美午夜宅男影院| 性欧美疯狂xxxxbbbb| 欧美日韩免费一区二区三区| 亚洲成人免费影院| 91精品午夜视频| 另类综合日韩欧美亚洲| 欧美大片一区二区三区| 国产一区二区精品在线观看| 日本一区二区高清| 成人av网址在线| 一区二区三区四区亚洲| 欧美日韩一区二区不卡| 天堂在线一区二区| 日韩欧美一级在线播放| 国产一区视频网站| 国产精品久久久久久亚洲毛片| 99re热这里只有精品免费视频 | 奇米色一区二区三区四区| 欧美成人一区二区三区片免费 | 欧美亚州韩日在线看免费版国语版| 亚洲丝袜自拍清纯另类| 欧美视频第二页| 男人的天堂亚洲一区| 久久蜜桃一区二区| av在线不卡免费看| 亚洲综合视频网| 日韩视频免费直播| 国产精品1区二区.| 亚洲精品美腿丝袜| 日韩亚洲欧美在线观看| 国产91丝袜在线18| 亚洲愉拍自拍另类高清精品| 制服丝袜一区二区三区| 国产伦精品一区二区三区视频青涩 | 粉嫩蜜臀av国产精品网站| 亚洲色图欧美激情| 51久久夜色精品国产麻豆| 精品一区二区三区免费视频| 国产精品理论在线观看| 欧美日韩高清一区二区| 国产一区二区三区黄视频 | 欧美草草影院在线视频| 成人国产精品免费观看动漫| 亚洲图片自拍偷拍| 精品国产污污免费网站入口 | 久久综合色婷婷| 成人av在线网站| 日韩在线卡一卡二| 国产精品国产三级国产| 欧美日韩成人一区二区| 粉嫩aⅴ一区二区三区四区| 亚洲国产精品麻豆| 久久蜜桃av一区二区天堂| 欧美天堂亚洲电影院在线播放| 久久精品久久99精品久久| 中文成人综合网| 日韩区在线观看| 色悠久久久久综合欧美99| 精品一区免费av| 亚洲一区二区三区三| 久久亚洲春色中文字幕久久久| 色视频成人在线观看免| 国产在线不卡一区| 亚洲午夜在线观看视频在线| 国产欧美一二三区| 日韩欧美不卡在线观看视频| 欧美专区在线观看一区| av在线免费不卡| 国产很黄免费观看久久| 麻豆成人91精品二区三区|