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

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

?? avrdebug.c

?? 老外做的 AVR-Doper 很強大
?? C
字號:
/* Name: avrdebug.c * Project: AVR Programmer * Author: Christian Starkjohann * Creation Date: 2006-07-10 * Tabsize: 4 * Copyright: (c) 2006 by OBJECTIVE DEVELOPMENT Software GmbH * License: GNU GPL v2 (see License.txt) or proprietary (CommercialLicense.txt) * This Revision: $Id: avrdebug.c 493 2008-02-05 18:29:04Z cs $ *//*General Descripotion:This program connects the the programmer via libusb and uses vendor specificrequests to read data from the programmer's UART. Since the UART RxD isconnected to the programming socket, this is a way to display debug informationfrom the target.Sending information to the target is currently not implemented in this tool.Sinnce we use Vendor class requests which can be sent to the default Controlendpoint, we don't need to claim an interface or set a configuration. We cantherefore run although the device is opened by another application such as e.g.the CDC-ACM driver or the HID driver.*//* Disable the following define if you have problems compiling the Unix * specific non-blocking I/O for keyboard input. This may be necessary on * Windows. */#define HAVE_KEYBOARD_INPUT 1#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <usb.h>    /* this is libusb, see http://libusb.sourceforge.net/ */#if HAVE_KEYBOARD_INPUT#   ifdef WIN32#       include <conio.h>#       include <windows.h>#       define  usleep(t)   Sleep((t)/1000) /* Sleep() is in ms */#   else#       include <sys/time.h>#       include <fcntl.h>#       include <sys/file.h>#       include <termios.h>#   endif  /* _WINDOWS */#endif  /* HAVE_KEYBOARD_INPUT */#define USBDEV_SHARED_VENDOR    0x16c0  /* VOTI */#define USBDEV_SHARED_CDCPID    0x05e1  /* Obdev's free shared PID for CDC-ACM devices */#define USBDEV_SHARED_HIDPID    0x05df  /* Obdev's free shared PID for HID devices *//* Use obdev's generic shared VID/PID pair and follow the rules outlined * in firmware/usbdrv/USBID-License.txt. */#define USB_VENDOR_STRING       "obdev.at"#define USB_PRODUCT_STRING      "AVR-Doper"#define USB_VENDOR_RQ_WRITE     1#define USB_VENDOR_RQ_READ      2#ifndef uchar#define uchar unsigned char#endif/* ------------------------------------------------------------------------- */static int  usbGetStringAscii(usb_dev_handle *dev, int index, int langid, char *buf, int buflen){char    buffer[256];int     rval, i;    if((rval = usb_control_msg(dev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + index, langid, buffer, sizeof(buffer), 1000)) < 0)        return rval;    if(buffer[1] != USB_DT_STRING)        return 0;    if((uchar)buffer[0] < rval)        rval = (uchar)buffer[0];    rval /= 2;    /* lossy conversion to ISO Latin1 */    for(i=1;i<rval;i++){        if(i > buflen)  /* destination buffer overflow */            break;        buf[i-1] = buffer[2 * i];        if(buffer[2 * i + 1] != 0)  /* outside of ISO Latin1 range */            buf[i-1] = '?';    }    buf[i-1] = 0;    return i-1;}#define USB_ERROR_NOTFOUND  1#define USB_ERROR_ACCESS    2#define USB_ERROR_IO        3int usbOpenDevice(usb_dev_handle **device, int vendor, char *vendorName, int product, char *productName){struct usb_bus      *bus;struct usb_device   *dev;usb_dev_handle      *handle = NULL;int                 errorCode = USB_ERROR_NOTFOUND;static int          didUsbInit = 0;    if(!didUsbInit){        didUsbInit = 1;        usb_init();    }    usb_find_busses();    usb_find_devices();    for(bus=usb_get_busses(); bus; bus=bus->next){        for(dev=bus->devices; dev; dev=dev->next){            if(dev->descriptor.idVendor == vendor && dev->descriptor.idProduct == product){                char    string[256];                int     len;                handle = usb_open(dev); /* we need to open the device in order to query strings */                if(!handle){                    errorCode = USB_ERROR_ACCESS;                    fprintf(stderr, "Warning: cannot open USB device: %s\n", usb_strerror());                    continue;                }                if(vendorName == NULL && productName == NULL){  /* name does not matter */                    break;                }                /* now check whether the names match: */                len = usbGetStringAscii(handle, dev->descriptor.iManufacturer, 0x0409, string, sizeof(string));                if(len < 0){                    errorCode = USB_ERROR_IO;                    fprintf(stderr, "Warning: cannot query manufacturer for device: %s\n", usb_strerror());                }else{                    errorCode = USB_ERROR_NOTFOUND;                    /* fprintf(stderr, "seen device from vendor ->%s<-\n", string); */                    if(strcmp(string, vendorName) == 0){                        len = usbGetStringAscii(handle, dev->descriptor.iProduct, 0x0409, string, sizeof(string));                        if(len < 0){                            errorCode = USB_ERROR_IO;                            fprintf(stderr, "Warning: cannot query product for device: %s\n", usb_strerror());                        }else{                            errorCode = USB_ERROR_NOTFOUND;                            /* fprintf(stderr, "seen product ->%s<-\n", string); */                            if(strcmp(string, productName) == 0)                                break;                        }                    }                }                usb_close(handle);                handle = NULL;            }        }        if(handle)            break;    }    if(handle != NULL){        errorCode = 0;        *device = handle;    }    return errorCode;}/* ------------------------------------------------------------------------- */int openAvrDoper(usb_dev_handle **device){    if(usbOpenDevice(device, USBDEV_SHARED_VENDOR, USB_VENDOR_STRING, USBDEV_SHARED_CDCPID, USB_PRODUCT_STRING) == 0)        return 0;    return usbOpenDevice(device, USBDEV_SHARED_VENDOR, USB_VENDOR_STRING, USBDEV_SHARED_HIDPID, USB_PRODUCT_STRING);}void    avrDoperReconnect(usb_dev_handle **device){    fprintf(stderr, "\nUSB error: %s\nTrying to reconnect...\n", usb_strerror());    usb_close(*device);    while(openAvrDoper(device) != 0){        usleep(1000 * 1000);  /* 1 second */    }    fprintf(stderr, "Reconnected.\n\n");}/* ------------------------------------------------------------------------- *//* <c> <LF> <c>         -> <c> LF <c> * <c> CR LF <c>        -> <c> LF <c> * <c> LF CR <c>        -> <c> LF <c> * <c> CR <c>           -> <c> LF <c> * <c> CR CR <c>        -> <c> LF LF <c> * <c> CR LF CR LF <c>  -> <c> LF LF <c> */static int isCrOrLf(uchar c){    return c == '\r' || c == '\n';}static void printChar(uchar c, int needFlush){static char     isStartOfLine = 1;static uchar    lastChar = 0;uchar           c1;    c1 = lastChar;    lastChar = c;    if(isCrOrLf(c)){        if(isCrOrLf(c1)){            if(c != c1)     /* must be second char of CR LF or LF CR */                return;        }        c = '\n';           /* map all newline chars to LF */    }#ifndef WIN32   /* anybody wants to port this functionality to Windows? */    if(isStartOfLine){        struct timeval  now;        struct timezone tz[1];        struct tm       *tm;        gettimeofday(&now, tz);        tm = localtime(&now.tv_sec);        printf("%02d:%02d:%02d.%03d: ", tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000);    }#endif    putc(c, stdout);    isStartOfLine = c == '\n';    if(needFlush && c != '\n'){        fflush(stdout);    }}static void normalizeAndPrintString(uchar *s, int len){int i;    for(i = 0; i < len; i++){        printChar(s[i], (i + 1) >= len);    }}/* ------------------------------------------------------------------------- *//* ------------------------ handling keyboard input ------------------------ *//* ------------------------------------------------------------------------- *//* Thanks to V. Bosch for the keyboard input routines! */#if HAVE_KEYBOARD_INPUT#ifdef WIN32#define inputInit()#define inputExit()/* Thanks to Kai Morich for this routine! */static int inputPoll(usb_dev_handle **device){int nBytes, c;    while(_kbhit()){        c = getch();        if(c == '\r')            c='\n';        putch(c);        if(c == 'X' - 'A' + 1)            return 1;        nBytes = usb_control_msg(*device, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, USB_VENDOR_RQ_WRITE, c, 0, NULL, 0, 100);        if(nBytes < 0)            avrDoperReconnect(device);    }    return 0;}#else /* WIN32 */static struct termios savedStdinTermios;static void inputInit(void){struct termios  t;    fcntl(STDIN_FILENO, F_SETFL, FNDELAY);    tcgetattr(STDIN_FILENO, &savedStdinTermios);    t = savedStdinTermios;    t.c_iflag = t.c_lflag = 0;    t.c_cc[VMIN]  = 0;    /* Minimum number of characters for non-canonical read */    t.c_cc[VTIME] = 0;    /* Timeout in deciseconds for non-canonical read */    tcsetattr(STDIN_FILENO, TCSANOW, &t);}static void inputExit(void){    tcsetattr(STDIN_FILENO, TCSANOW, &savedStdinTermios);}static int inputPoll(usb_dev_handle **device){int             nBytes, cnt, i;unsigned char   buffer[16];    cnt = read(STDIN_FILENO, buffer, sizeof(buffer));  /* non-blocking read */    if(cnt > 0){        if(memchr(buffer, 'X' - 'A' + 1, cnt))            return 1;        for(i = 0; i < cnt; i++){            nBytes = usb_control_msg(*device, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, USB_VENDOR_RQ_WRITE, buffer[i], 0, NULL, 0, 100);            if(nBytes < 0){                avrDoperReconnect(device);            }        }    }    return 0;}#endif /* WIN32 */#else /* HAVE_KEYBOARD_INPUT */#define inputInit()#define inputExit()#define inputPoll(handle) 0#endif /* HAVE_KEYBOARD_INPUT *//* ------------------------------------------------------------------------- */int main(int argc, char **argv){usb_dev_handle      *handle = NULL;unsigned char       buffer[254];int                 nBytes;    if(openAvrDoper(&handle) != 0){        fprintf(stderr, "Could not find USB device \"%s\" with vid=0x%x pid=0x%x or 0x%x\n", USB_PRODUCT_STRING, USBDEV_SHARED_VENDOR, USBDEV_SHARED_CDCPID, USBDEV_SHARED_HIDPID);        exit(1);    }    /* We need not set a configuration and claim an interface to use endpoint 0 */    inputInit();    /* The following loop does busy polling with 100ms sleeps when no data was     * received. We can't use an interrupt endpoint because the CDC device class     * has already consumed them all.     */    for(;;){        nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USB_VENDOR_RQ_READ, 0, 0, (char *)buffer, sizeof(buffer), 5000);        if(nBytes < 0){            avrDoperReconnect(&handle);            continue;        }        if(nBytes > 0){            normalizeAndPrintString(buffer, nBytes);        }else{            usleep(50000); /* 50ms */        }        if(inputPoll(&handle))            break;    }    usb_close(handle);    inputExit();    return 0;}/* ------------------------------------------------------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品欧美激情| 不卡在线观看av| 成人av免费在线观看| 6080亚洲精品一区二区| 国产精品美女视频| 另类的小说在线视频另类成人小视频在线| 成人午夜av在线| 欧美电影精品一区二区| 亚洲成人三级小说| 色综合天天综合色综合av| wwwwxxxxx欧美| 日韩激情av在线| 欧美日韩成人综合天天影院| 成人免费在线观看入口| 国产91精品精华液一区二区三区| 日韩欧美一区二区不卡| 青青草原综合久久大伊人精品 | 欧美在线制服丝袜| 亚洲国产精华液网站w| 久久超碰97人人做人人爱| 3d动漫精品啪啪1区2区免费 | 欧美国产1区2区| 激情小说亚洲一区| 欧美大胆一级视频| 久久国产精品色| 日韩精品一区二区三区在线观看| 亚洲一二三区不卡| 欧美午夜精品一区二区蜜桃| 椎名由奈av一区二区三区| 99re视频精品| 亚洲精品五月天| 欧美三级一区二区| 日韩在线一二三区| 欧美一区二区三区人| 日韩高清一区在线| 欧美一级欧美一级在线播放| 麻豆精品一区二区| 欧美成人免费网站| 国产一区二区三区免费在线观看| 久久久久久久久伊人| 成人性生交大片免费看中文 | 欧美激情综合五月色丁香| 国产激情精品久久久第一区二区 | 久久久国产午夜精品| 国产福利91精品一区| 中文字幕高清一区| 一本色道久久综合亚洲91| 一区二区三区高清不卡| 91.com在线观看| 久久精品久久99精品久久| 久久影院视频免费| youjizz国产精品| 伊人夜夜躁av伊人久久| 欧美日韩视频在线观看一区二区三区| 午夜久久久久久| 欧美刺激午夜性久久久久久久| 精品亚洲成a人| 国产精品成人一区二区三区夜夜夜| 91伊人久久大香线蕉| 午夜影视日本亚洲欧洲精品| 日韩一级片在线播放| 成人在线视频一区| 亚洲成av人综合在线观看| 精品国产凹凸成av人导航| youjizz久久| 免费视频一区二区| 国产精品美日韩| 91精品综合久久久久久| 国产精品一区在线| 亚洲愉拍自拍另类高清精品| 日韩免费观看高清完整版| 波多野结衣中文字幕一区二区三区| 亚洲一区二区三区四区中文字幕| 欧美成人综合网站| 欧美性大战xxxxx久久久| 国产激情偷乱视频一区二区三区| 亚洲国产精品一区二区尤物区| 精品国产91乱码一区二区三区 | 国产高清不卡一区二区| 夜夜嗨av一区二区三区中文字幕 | 国产一区二区三区四区在线观看| 一区二区三区四区国产精品| 欧美刺激午夜性久久久久久久| 99久久久无码国产精品| 韩日欧美一区二区三区| 午夜av电影一区| 樱花草国产18久久久久| 中文字幕免费一区| 精品国产一区二区三区av性色| 欧美天天综合网| bt欧美亚洲午夜电影天堂| 韩国午夜理伦三级不卡影院| 亚洲不卡在线观看| 亚洲自拍偷拍网站| 亚洲日本在线看| 国产精品视频看| 国产性天天综合网| 精品奇米国产一区二区三区| 91精品国产综合久久精品麻豆| 91亚洲精品一区二区乱码| 国产精品原创巨作av| 蜜桃在线一区二区三区| 午夜视频一区二区| 亚洲一二三区在线观看| 亚洲精选视频免费看| 国产精品久久久久久久久久久免费看 | 欧美成人一区二区三区在线观看| 成人综合婷婷国产精品久久免费| 国产揄拍国内精品对白| 蜜桃视频一区二区三区在线观看| 香蕉久久一区二区不卡无毒影院| 一区二区三区 在线观看视频| 18成人在线观看| 国产精品福利一区| 亚洲人成在线观看一区二区| 国产精品蜜臀在线观看| 亚洲同性gay激情无套| 中文字幕中文字幕一区| 国产精品灌醉下药二区| 亚洲欧美日韩国产中文在线| 一区二区三区四区不卡在线| 亚洲人快播电影网| 亚洲国产精品久久艾草纯爱| 亚洲成av人影院| 麻豆国产91在线播放| 国内成人自拍视频| 国产资源精品在线观看| 成人激情午夜影院| 91久久精品一区二区三| 欧美日韩在线直播| 日韩午夜av电影| 国产三级欧美三级| 亚洲精品久久久久久国产精华液| 亚洲成人av资源| 国模一区二区三区白浆| av亚洲产国偷v产偷v自拍| 在线观看av不卡| 精品国产乱码久久久久久蜜臀 | 日韩av电影免费观看高清完整版 | 天涯成人国产亚洲精品一区av| 日韩电影免费一区| 国产福利精品一区二区| 91黄色免费看| 日韩一区二区三区电影在线观看| 国产日韩欧美电影| 亚洲综合999| 国产真实乱子伦精品视频| bt7086福利一区国产| 9191国产精品| 久久久99精品久久| 亚洲综合在线视频| 国产毛片精品国产一区二区三区| 97精品久久久午夜一区二区三区| 91精品国产欧美一区二区18| 国产网站一区二区| 亚瑟在线精品视频| www.日本不卡| 2019国产精品| 视频一区二区三区在线| 高清免费成人av| 91精品国产一区二区三区香蕉| 国产精品久久久久久久久免费丝袜| 日韩精品福利网| 97aⅴ精品视频一二三区| 精品久久久久久最新网址| 亚洲高清视频中文字幕| 成人午夜在线免费| 亚洲精品在线免费播放| 亚洲国产成人av好男人在线观看| 国产精品69久久久久水密桃| 欧美一区二区三区爱爱| 一区二区久久久久久| 国产精品1024| 精品三级在线看| 日韩高清一区二区| 欧美天堂一区二区三区| 亚洲视频在线观看一区| 国产二区国产一区在线观看| 日韩欧美国产三级电影视频| 亚洲一区二区综合| 91视频com| 综合自拍亚洲综合图不卡区| 懂色av中文字幕一区二区三区| 日韩视频一区二区三区在线播放| 亚洲一区二区精品视频| 色综合久久天天综合网| 亚洲国产精品精华液ab| 国产美女在线精品| 久久婷婷久久一区二区三区| 美洲天堂一区二卡三卡四卡视频| 欧美二区在线观看| 五月天丁香久久| 在线播放一区二区三区| 亚洲国产日产av| 欧美日本高清视频在线观看| 亚洲成人一二三| 88在线观看91蜜桃国自产| 亚洲成人www| 91精品国产91综合久久蜜臀| 五月婷婷综合网|