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

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

?? ezusb_lib.c

?? WinDriver Cypress USB 偵錯(cuò)程式 for Wince 5.0
?? C
字號(hào):
/**************************************************************
 * File - ezusb_lib.c
 *
 * Library for accessing EZ-USB devices.
 * The library accesses the hardware via WinDriver functions.
 *
 * Copyright (c) 2003 - 2006 Jungo Ltd.  http://www.jungo.com
 **************************************************************/

#include <stdio.h>
#include "wdu_lib.h"
#include "status_strings.h"
#include "utils.h"
#include "ezusb_lib.h"
/* Implementation of the Firmware download starts here. */
#include "Vend_Ax.h"

#if !defined(ERR)
#define ERR printf
#endif
#if !defined(TRACE)
#define TRACE printf
#endif

#define MAX_FILE_SIZE 1024 * 8
#define TGT_IMG_SIZE 0x10000 /* 64KB (65,536 Byte) target image */
#define TGT_SEG_SIZE 16 /* 16 byte segments */
#define DEFAULT_TIMEOUT 10000

static BYTE BlkBuf[MAX_FILE_SIZE];
static BYTE VenBuf[MAX_FILE_SIZE];
static DWORD Offset, Len;
char sInfoString[4000];

typedef struct
{
    DWORD TAddr; /* Target Address */
    DWORD HAddr; /* Host Address */
    DWORD Size; /* block size */
    DWORD Stat; /* status */
    PCHAR pData; /* data bytes */
} MemSeg;

typedef struct
{
    CHAR data[TGT_IMG_SIZE]; /* target image store */
} TMemImg;

typedef struct
{
    TMemImg *pImg;
    int nSeg; /* segment count */
    MemSeg pSeg[TGT_IMG_SIZE/TGT_SEG_SIZE]; /* info about segments */
} TMemCache;

static int FileToString(TMemCache* pMemCache, CHAR *pHexFileName);
static BOOL DownloadIntelHex(HANDLE hDev, BOOL IsFx2);
static BOOL DownLoadBuf(HANDLE hDev, DWORD address, DWORD length, void *buffer,
    BYTE bRequest);
static DWORD ResetBit(HANDLE hDev, int DoReset, BOOL IsFx2);

BOOL DownloadFirmware(HANDLE hDev, PCHAR pHexFileName, BOOL IsFx2)
{
    BYTE *pbuf = BlkBuf;
    BYTE *pVenbuf = VenBuf;
    TMemCache *pMemCache;
    DWORD dwNumRead;
    BOOL rc = FALSE;
    int i;

    sInfoString[0] = '\0';

    pMemCache = (TMemCache *)malloc(sizeof(TMemCache));
    if (!pMemCache)
    {
        sprintf(sInfoString, "DownloadFirmware: Insufficient resources\n");
        goto Exit;
    }
    pMemCache->pImg = (TMemImg *)malloc(TGT_IMG_SIZE);
    if (!pMemCache->pImg)
    {
        sprintf(sInfoString, "DownloadFirmware: Insufficient resources\n");
        goto Exit;
    }

    dwNumRead = FileToString(pMemCache, pHexFileName);

    if (!dwNumRead)
        goto Exit;

    /* check for high mem first, load loader first if necessary */
    for (i=0; i<pMemCache->nSeg; i++)
    {
        if (pMemCache->pSeg[i].TAddr >= 0x2000)
        {
            if (!DownloadIntelHex(hDev, IsFx2))
                goto Exit;
            break;
        }
    }

    /* load all high mem first */
    for (i=0; i<pMemCache->nSeg; i++)
    {
        if (pMemCache->pSeg[i].TAddr >= 0x2000)
        {
            memcpy(pVenbuf, pMemCache->pSeg[i].pData, pMemCache->pSeg[i].Size);
            if (!DownLoadBuf(hDev, pMemCache->pSeg[i].TAddr,
                pMemCache->pSeg[i].Size, pVenbuf, 0xA3))
            {
                goto Exit;
            }
        }
    }

    ResetBit(hDev, 1, IsFx2);

    /* load all low mem last */
    for (i=0; i<pMemCache->nSeg; i++)
    {
        if (pMemCache->pSeg[i].TAddr < 0x2000)
        {
            memcpy(pbuf, pMemCache->pSeg[i].pData, pMemCache->pSeg[i].Size);
            Len = pMemCache->pSeg[i].Size;
            Offset = pMemCache->pSeg[i].TAddr;
            if (!DownLoadBuf(hDev, Offset, Len, pbuf, 0xA0))
                goto Exit;
        }
    }

    ResetBit(hDev, 0, IsFx2);

    rc = TRUE;
Exit:

    if (pMemCache)
    {
        if (pMemCache->pImg)
            free(pMemCache->pImg);
        free(pMemCache);
    }
    return rc;
}

#define MAXSTR 256 /* Maximum length of Intel Hex file string */
/* 4K Control EP0 transfer limit imposed by OS */
#define MAX_EP0_XFER_SIZE (1024*4)

static int FileToString(TMemCache* pMemCache, CHAR *pHexFileName)
{
    FILE *fp;
    int i, curSeg, recType, cnt;
    int CNTFIELD, ADDRFIELD, RECFIELD, DATAFIELD;
    CHAR str[MAXSTR];
    DWORD byte, addr, totalRead;
    PCHAR ptr;

    fp = fopen(pHexFileName, "rb");
    if (!fp)
    {
        sprintf(sInfoString, "Can't open %s file.\n"
            "Please make sure that the file exists in the specified location\n",
            pHexFileName);
        return 0;
    }

    /* offsets of fields within record -- may change later due to "spaces" 
     * setting */
    CNTFIELD = 1;
    ADDRFIELD = 3;
    RECFIELD = 7;
    DATAFIELD = 9;

    addr = 0;
    curSeg = 0;
    totalRead = 0;
    pMemCache->nSeg = 0;

    while (fgets(str, MAXSTR, fp))
    {
        if (str[0]!=':')
            return 0;

        if (str[1]==' ') /* get the record type */
        {
            CNTFIELD = 1 + 1;
            ADDRFIELD = 3 + 2;
            RECFIELD = 7 + 3;
            DATAFIELD = 9 + 4;
        }

        sscanf(str+RECFIELD, "%2x", &recType);

        ptr = (PCHAR)pMemCache->pImg;
        switch(recType)
        {
            case 2: /* seg record */
                sscanf(str+DATAFIELD, "%4x", &curSeg);
                curSeg *= 0x10;
                break;

            case 0: /* data record */
                sscanf(str+CNTFIELD, "%2x", &cnt);
                sscanf(str+ADDRFIELD, "%4lx", &addr);
                if (addr>=TGT_IMG_SIZE)
                {
                    sprintf(sInfoString, "Error loading file: address out of "
                        "range\n");
                    return 0;
                }
                ptr += addr; /* get pointer to location in image */

                if (pMemCache->nSeg &&
                   (pMemCache->pSeg[pMemCache->nSeg-1].TAddr ==
                        addr - pMemCache->pSeg[pMemCache->nSeg-1].Size) &&
                   (pMemCache->pSeg[pMemCache->nSeg-1].Size + cnt <=
                        MAX_EP0_XFER_SIZE))
                {
                    /* if the segment is contiguous to the last segment, 
                     * and it's not too big yet append to previous segment */
                    pMemCache->pSeg[pMemCache->nSeg-1].Size += cnt;
                }
                else
                {
                    /* start a new segment */
                    pMemCache->pSeg[pMemCache->nSeg].TAddr = addr;
                    pMemCache->pSeg[pMemCache->nSeg].Size = cnt;
                    pMemCache->pSeg[pMemCache->nSeg].pData = ptr;
                    pMemCache->nSeg++;
                }

                for (i=0; i<cnt; i++)
                {
                    sscanf(str+DATAFIELD+i*2, "%2lx", &byte);
                    *(ptr + i) = (CHAR)byte;
                    totalRead++;
                }
                break;

            case 1: /* end record */
                fclose(fp);
                return totalRead;
            default:
                break;
        }
    }

    if (fp)
        fclose(fp);

    return 0; /* missing end record */
}

static BOOL DownloadIntelHex(HANDLE hDev, BOOL IsFx2)
{
    BYTE* pbuf = BlkBuf;
    BYTE* ptmp = NULL;
    PINTEL_HEX_RECORD ptr = IsFx2 ? Vend_Ax_Fx2 : Vend_Ax;

    ResetBit(hDev, 1, IsFx2);

    while (ptr->Type==0)  /* load low mem */
    {
        if (ptmp &&   /* continue a segment */
            Offset+Len==(DWORD)ptr->Address &&
            Len+ptr->Length<=MAX_EP0_XFER_SIZE)
        {
            memcpy(ptmp, ptr->Data, ptr->Length);
            Len += ptr->Length;
            ptmp += ptr->Length;
        }
        else  /* start a new segment */
        {
            if (ptmp)  /* send previous segment first */
            {
                if (!DownLoadBuf(hDev, Offset, Len, pbuf, 0xA0))
                    return FALSE;
            }
            ptmp = pbuf;
            memcpy(ptmp, ptr->Data, ptr->Length);
            Len = ptr->Length;
            Offset = ptr->Address;
            ptmp += ptr->Length;
        }
        ptr++;
    }

    if (ptmp) /* send final segment */
    {
        if (!DownLoadBuf(hDev, Offset, Len, pbuf, 0xA0))
            return FALSE;
    }

    ResetBit(hDev, 0, IsFx2);
    return TRUE;
}

/* The download will be split into CHUNK_SIZE pieces and downloaded with 
 * multiple setup transfers. CHUNK_SIZE should not exceed 64 bytes, as larger
 * transfers can result in data corruption when other USB devices are 
 * present. */
#define CHUNK_SIZE 64

static BOOL DownLoadBuf(HANDLE hDev, DWORD address, DWORD length, void *buffer,
    BYTE bRequest)
{
    BYTE SetupPacket[8];
    DWORD dwBytesTransferred, i, size, chunkCount;
    DWORD dwStatus = 0, dwOptions = 0;
    void  *cur;

    chunkCount = (length + CHUNK_SIZE - 1) / CHUNK_SIZE;
    for (i=0; i<chunkCount; i++)
    {
        if (i==chunkCount-1 && length % CHUNK_SIZE)
            size = length % CHUNK_SIZE;
        else
            size = CHUNK_SIZE;

        SetupPacket[0] = 0x40;
        SetupPacket[1] = bRequest;
        SetupPacket[2] = (BYTE)((address + i*CHUNK_SIZE) & 0xFF);
        SetupPacket[3] = (BYTE)(((address + i*CHUNK_SIZE) & 0xFF00) >> 8);
        SetupPacket[4] = 0;
        SetupPacket[5] = 0;
        SetupPacket[6] = (BYTE) size & 0xFF;
        SetupPacket[7] = (BYTE) ((size & 0xFF00) >> 8);
        cur = (PVOID)((DWORD)buffer + i*CHUNK_SIZE);
        dwStatus = WDU_TransferDefaultPipe(hDev, FALSE, dwOptions, cur, size,
            &dwBytesTransferred, SetupPacket, DEFAULT_TIMEOUT);
    }
    if (dwStatus)
    {
        sprintf(sInfoString, "DownLoadBuf: WDU_TransferDefaultPipe failed with status 0x%lx - %s\n",
            dwStatus, Stat2Str(dwStatus));
        return FALSE;
    }
    return TRUE;
}

#define CPUCS_REG_EZUSB    0x7F92
#define CPUCS_REG_FX2      0xE600

static DWORD ResetBit(HANDLE hDev, int DoReset, BOOL IsFx2)
{
    BYTE reset = (BYTE)DoReset;
    BYTE SetupPacket[8];
    DWORD dwBytesTransferred;
    DWORD dwCpucs = IsFx2 ? CPUCS_REG_FX2 : CPUCS_REG_EZUSB;
    sInfoString[0] = '\0';

    SetupPacket[0] = 0x40;
    SetupPacket[1] = 0xA0;
    SetupPacket[2] = (BYTE)(dwCpucs & 0xFF);
    SetupPacket[3] = (BYTE)((dwCpucs & 0xFF00) >> 8);
    SetupPacket[4] = 0;
    SetupPacket[5] = 0;
    SetupPacket[6] = 1;
    SetupPacket[7] = 0;

    return WDU_TransferDefaultPipe(hDev, FALSE, 0, &reset, 1,
        &dwBytesTransferred, SetupPacket, DEFAULT_TIMEOUT);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码日产精品bd| 樱花草国产18久久久久| 色综合色综合色综合色综合色综合 | 亚洲午夜日本在线观看| 久久麻豆一区二区| 91成人在线免费观看| 国产精品18久久久久久久久 | 91丨porny丨在线| 国内国产精品久久| 天天av天天翘天天综合网色鬼国产| 久久久久久电影| 欧美一区二区三区婷婷月色| 日本丶国产丶欧美色综合| 国产麻豆91精品| 麻豆精品一区二区综合av| 一区二区日韩电影| 亚洲啪啪综合av一区二区三区| 久久综合中文字幕| 欧美一级夜夜爽| 欧美另类高清zo欧美| 欧美性高清videossexo| 91在线视频播放地址| 成人一级黄色片| 国产精品88av| 国产成人精品网址| 国产精品综合一区二区| 国内不卡的二区三区中文字幕 | 中文字幕欧美区| 精品少妇一区二区三区| 日韩一本二本av| 欧美精品乱码久久久久久按摩| 91丨porny丨中文| 色香蕉久久蜜桃| 色天使色偷偷av一区二区| 色综合久久久网| 日本丶国产丶欧美色综合| 色综合一个色综合| 欧美一区二区三区成人| 欧美在线观看一二区| 欧美在线免费观看视频| 在线观看91视频| 欧美伊人久久久久久午夜久久久久| 91丝袜国产在线播放| 91污在线观看| 日本韩国欧美国产| 欧美日韩专区在线| 69av一区二区三区| 日韩亚洲欧美综合| 国产亚洲精品中文字幕| 国产精品无码永久免费888| 国产精品美女久久久久aⅴ| 国产精品久久久久久久久晋中 | 亚洲色图都市小说| 亚洲成人动漫av| 欧美aaaaa成人免费观看视频| 日韩精品欧美成人高清一区二区| 日韩和欧美一区二区三区| 另类欧美日韩国产在线| 国产毛片精品一区| 一本大道久久a久久综合婷婷| 色婷婷精品久久二区二区蜜臀av| 91精品福利视频| 日韩视频在线一区二区| 久久久久久久久久电影| 亚洲欧美成人一区二区三区| 亚洲成人动漫av| 国产在线视频一区二区三区| 成人免费高清视频在线观看| 欧美亚洲图片小说| 欧美成人性福生活免费看| 国产精品嫩草99a| 亚洲国产欧美在线| 国产一区二区精品在线观看| 色悠久久久久综合欧美99| 正在播放一区二区| 中文字幕精品一区二区精品绿巨人 | 亚洲精品在线电影| 亚洲视频中文字幕| 天堂蜜桃一区二区三区| 国产成人精品免费看| 91电影在线观看| 久久久五月婷婷| 亚洲人成精品久久久久久| 天天综合网天天综合色| 成人久久视频在线观看| 911精品国产一区二区在线| 日本一区二区三区在线观看| 天天操天天色综合| 97se亚洲国产综合自在线观| 日韩女同互慰一区二区| 亚洲精品精品亚洲| 久久99国产精品久久| 在线观看日韩电影| 国产亚洲短视频| 天堂va蜜桃一区二区三区漫画版| 国产成人啪午夜精品网站男同| 欧美日韩久久久久久| 亚洲天堂精品视频| 国产乱一区二区| 日韩一区二区高清| 亚洲综合视频在线| aaa国产一区| 国产日韩欧美亚洲| 久久99精品一区二区三区| 欧美日韩在线综合| 亚洲欧美日韩国产另类专区| 国产在线乱码一区二区三区| 欧美美女喷水视频| 夜夜嗨av一区二区三区| 成人黄色软件下载| 久久人人超碰精品| 欧美a一区二区| 欧美久久一二区| 亚洲另类春色国产| zzijzzij亚洲日本少妇熟睡| 久久久国际精品| 九九九久久久精品| 91精品国产高清一区二区三区 | 亚洲国产精品久久一线不卡| 北条麻妃一区二区三区| 久久久精品免费网站| 久久99热这里只有精品| 日韩三区在线观看| 蜜臀国产一区二区三区在线播放| 欧美日韩色一区| 玉米视频成人免费看| 色噜噜夜夜夜综合网| 亚洲欧美激情插| 色婷婷精品大在线视频 | 五月天亚洲婷婷| 欧美色倩网站大全免费| 午夜精品在线视频一区| 欧美性猛交xxxx乱大交退制版| 亚洲一区二区在线视频| 91福利在线看| 亚洲成人av一区| 欧美日韩一区中文字幕| 婷婷综合五月天| 日韩欧美在线网站| 极品美女销魂一区二区三区| 91精品国产综合久久精品性色| 视频一区欧美精品| 欧美一区二区三区视频在线| 日本美女一区二区三区| 欧美大胆人体bbbb| 韩国女主播一区| 欧美激情一区二区三区蜜桃视频 | 久久99国产精品久久99果冻传媒| 日韩精品一区二区三区四区| 另类小说视频一区二区| 久久午夜羞羞影院免费观看| 大胆欧美人体老妇| 亚洲精品国久久99热| 欧美日韩精品一区二区天天拍小说| 亚洲成人tv网| 精品久久久久久久久久久久包黑料| 国产一区二区剧情av在线| 国产日韩欧美亚洲| 色婷婷av一区二区三区大白胸 | 日韩一区二区三区电影在线观看| 九九精品视频在线看| 国产精品国产三级国产普通话三级| 91色.com| 蜜桃在线一区二区三区| 日本一区二区久久| 欧美在线三级电影| 国产一区二区三区高清播放| 国产精品免费丝袜| 欧美疯狂做受xxxx富婆| 韩国女主播一区| 一区二区三区中文免费| 国产精品萝li| 在线播放亚洲一区| 成人福利视频网站| 日韩高清在线一区| 中国色在线观看另类| 欧美性高清videossexo| 国产麻豆午夜三级精品| 一区二区三区免费看视频| 久久人人97超碰com| 欧美性生活影院| 国产成人激情av| 亚洲国产成人tv| 日本一区二区在线不卡| 欧美一区二区啪啪| 91视视频在线观看入口直接观看www| 日韩成人av影视| 亚洲天堂免费在线观看视频| 精品免费视频.| 欧美视频一区在线| 不卡一区在线观看| 精品在线亚洲视频| 午夜一区二区三区视频| 中文字幕精品在线不卡| 欧美电影免费观看高清完整版| 91视频国产资源| 风间由美性色一区二区三区| 日本午夜一区二区| 一区二区国产视频| 国产精品免费视频网站|