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

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

?? hiddata.c

?? AVR_usb_ISP
?? C
字號:
/* Name: hiddata.c * Author: Christian Starkjohann * Creation Date: 2008-04-11 * Tabsize: 4 * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) * This Revision: $Id: hiddata.c 692 2008-11-07 15:07:40Z cs $ */#include <stdio.h>#include "hiddata.h"/* ######################################################################## */#if defined(WIN32) /* ##################################################### *//* ######################################################################## */#include <windows.h>#include <setupapi.h>#include "hidsdi.h"#include <ddk/hidpi.h>#ifdef DEBUG#define DEBUG_PRINT(arg)    printf arg#else#define DEBUG_PRINT(arg)#endif/* ------------------------------------------------------------------------ */static void convertUniToAscii(char *buffer){unsigned short  *uni = (void *)buffer;char            *ascii = buffer;    while(*uni != 0){        if(*uni >= 256){            *ascii++ = '?';        }else{            *ascii++ = *uni++;        }    }    *ascii++ = 0;}int usbhidOpenDevice(usbDevice_t **device, int vendor, char *vendorName, int product, char *productName, int usesReportIDs){GUID                                hidGuid;        /* GUID for HID driver */HDEVINFO                            deviceInfoList;SP_DEVICE_INTERFACE_DATA            deviceInfo;SP_DEVICE_INTERFACE_DETAIL_DATA     *deviceDetails = NULL;DWORD                               size;int                                 i, openFlag = 0;  /* may be FILE_FLAG_OVERLAPPED */int                                 errorCode = USBOPEN_ERR_NOTFOUND;HANDLE                              handle = INVALID_HANDLE_VALUE;HIDD_ATTRIBUTES                     deviceAttributes;				    HidD_GetHidGuid(&hidGuid);    deviceInfoList = SetupDiGetClassDevs(&hidGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);    deviceInfo.cbSize = sizeof(deviceInfo);    for(i=0;;i++){        if(handle != INVALID_HANDLE_VALUE){            CloseHandle(handle);            handle = INVALID_HANDLE_VALUE;        }        if(!SetupDiEnumDeviceInterfaces(deviceInfoList, 0, &hidGuid, i, &deviceInfo))            break;  /* no more entries */        /* first do a dummy call just to determine the actual size required */        SetupDiGetDeviceInterfaceDetail(deviceInfoList, &deviceInfo, NULL, 0, &size, NULL);        if(deviceDetails != NULL)            free(deviceDetails);        deviceDetails = malloc(size);        deviceDetails->cbSize = sizeof(*deviceDetails);        /* this call is for real: */        SetupDiGetDeviceInterfaceDetail(deviceInfoList, &deviceInfo, deviceDetails, size, &size, NULL);        DEBUG_PRINT(("checking HID path \"%s\"\n", deviceDetails->DevicePath));        /* attempt opening for R/W -- we don't care about devices which can't be accessed */        handle = CreateFile(deviceDetails->DevicePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, openFlag, NULL);        if(handle == INVALID_HANDLE_VALUE){            DEBUG_PRINT(("opening failed: %d\n", (int)GetLastError()));            /* errorCode = USBOPEN_ERR_ACCESS; opening will always fail for mouse -- ignore */            continue;        }        deviceAttributes.Size = sizeof(deviceAttributes);        HidD_GetAttributes(handle, &deviceAttributes);        DEBUG_PRINT(("device attributes: vid=%d pid=%d\n", deviceAttributes.VendorID, deviceAttributes.ProductID));        if(deviceAttributes.VendorID != vendor || deviceAttributes.ProductID != product)            continue;   /* ignore this device */        errorCode = USBOPEN_ERR_NOTFOUND;        if(vendorName != NULL && productName != NULL){            char    buffer[512];            if(!HidD_GetManufacturerString(handle, buffer, sizeof(buffer))){                DEBUG_PRINT(("error obtaining vendor name\n"));                errorCode = USBOPEN_ERR_IO;                continue;            }            convertUniToAscii(buffer);            DEBUG_PRINT(("vendorName = \"%s\"\n", buffer));            if(strcmp(vendorName, buffer) != 0)                continue;            if(!HidD_GetProductString(handle, buffer, sizeof(buffer))){                DEBUG_PRINT(("error obtaining product name\n"));                errorCode = USBOPEN_ERR_IO;                continue;            }            convertUniToAscii(buffer);            DEBUG_PRINT(("productName = \"%s\"\n", buffer));            if(strcmp(productName, buffer) != 0)                continue;        }        break;  /* we have found the device we are looking for! */    }    SetupDiDestroyDeviceInfoList(deviceInfoList);    if(deviceDetails != NULL)        free(deviceDetails);    if(handle != INVALID_HANDLE_VALUE){        *device = (usbDevice_t *)handle;        errorCode = 0;    }    return errorCode;}/* ------------------------------------------------------------------------ */void    usbhidCloseDevice(usbDevice_t *device){    CloseHandle((HANDLE)device);}/* ------------------------------------------------------------------------ */int usbhidSetReport(usbDevice_t *device, char *buffer, int len){BOOLEAN rval;    rval = HidD_SetFeature((HANDLE)device, buffer, len);    return rval == 0 ? USBOPEN_ERR_IO : 0;}/* ------------------------------------------------------------------------ */int usbhidGetReport(usbDevice_t *device, int reportNumber, char *buffer, int *len){BOOLEAN rval = 0;    buffer[0] = reportNumber;    rval = HidD_GetFeature((HANDLE)device, buffer, *len);    return rval == 0 ? USBOPEN_ERR_IO : 0;}/* ------------------------------------------------------------------------ *//* ######################################################################## */#else /* defined WIN32 #################################################### *//* ######################################################################## */#include <string.h>#include <usb.h>#define usbDevice   usb_dev_handle  /* use libusb's device structure *//* ------------------------------------------------------------------------- */#define USBRQ_HID_GET_REPORT    0x01#define USBRQ_HID_SET_REPORT    0x09#define USB_HID_REPORT_TYPE_FEATURE 3static int  usesReportIDs;/* ------------------------------------------------------------------------- */static int usbhidGetStringAscii(usb_dev_handle *dev, int index, char *buf, int buflen){char    buffer[256];int     rval, i;    if((rval = usb_get_string_simple(dev, index, buf, buflen)) >= 0) /* use libusb version if it works */        return rval;    if((rval = usb_control_msg(dev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + index, 0x0409, buffer, sizeof(buffer), 5000)) < 0)        return rval;    if(buffer[1] != USB_DT_STRING){        *buf = 0;        return 0;    }    if((unsigned char)buffer[0] < rval)        rval = (unsigned char)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;}int usbhidOpenDevice(usbDevice_t **device, int vendor, char *vendorName, int product, char *productName, int _usesReportIDs){struct usb_bus      *bus;struct usb_device   *dev;usb_dev_handle      *handle = NULL;int                 errorCode = USBOPEN_ERR_NOTFOUND;static int          didUsbInit = 0;    if(!didUsbInit){        usb_init();        didUsbInit = 1;    }    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 = USBOPEN_ERR_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 = usbhidGetStringAscii(handle, dev->descriptor.iManufacturer, string, sizeof(string));                if(len < 0){                    errorCode = USBOPEN_ERR_IO;                    fprintf(stderr, "Warning: cannot query manufacturer for device: %s\n", usb_strerror());                }else{                    errorCode = USBOPEN_ERR_NOTFOUND;                    /* fprintf(stderr, "seen device from vendor ->%s<-\n", string); */                    if(strcmp(string, vendorName) == 0){                        len = usbhidGetStringAscii(handle, dev->descriptor.iProduct, string, sizeof(string));                        if(len < 0){                            errorCode = USBOPEN_ERR_IO;                            fprintf(stderr, "Warning: cannot query product for device: %s\n", usb_strerror());                        }else{                            errorCode = USBOPEN_ERR_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 = (void *)handle;        usesReportIDs = _usesReportIDs;    }    return errorCode;}/* ------------------------------------------------------------------------- */void    usbhidCloseDevice(usbDevice_t *device){    if(device != NULL)        usb_close((void *)device);}/* ------------------------------------------------------------------------- */int usbhidSetReport(usbDevice_t *device, char *buffer, int len){int bytesSent;    if(!usesReportIDs){        buffer++;   /* skip dummy report ID */        len--;    }    bytesSent = usb_control_msg((void *)device, USB_TYPE_CLASS | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, USBRQ_HID_SET_REPORT, USB_HID_REPORT_TYPE_FEATURE << 8 | (buffer[0] & 0xff), 0, buffer, len, 5000);    if(bytesSent != len){        if(bytesSent < 0)            fprintf(stderr, "Error sending message: %s\n", usb_strerror());        return USBOPEN_ERR_IO;    }    return 0;}/* ------------------------------------------------------------------------- */int usbhidGetReport(usbDevice_t *device, int reportNumber, char *buffer, int *len){int bytesReceived, maxLen = *len;    if(!usesReportIDs){        buffer++;   /* make room for dummy report ID */        maxLen--;    }    bytesReceived = usb_control_msg((void *)device, USB_TYPE_CLASS | USB_RECIP_DEVICE | USB_ENDPOINT_IN, USBRQ_HID_GET_REPORT, USB_HID_REPORT_TYPE_FEATURE << 8 | reportNumber, 0, buffer, maxLen, 5000);    if(bytesReceived < 0){        fprintf(stderr, "Error sending message: %s\n", usb_strerror());        return USBOPEN_ERR_IO;    }    *len = bytesReceived;    if(!usesReportIDs){        buffer[-1] = reportNumber;  /* add dummy report ID */        (*len)++;    }    return 0;}/* ######################################################################## */#endif /* defined WIN32 ################################################### *//* ######################################################################## */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三级| 亚洲精品久久久久久国产精华液| 日韩一区二区在线观看视频播放| 欧美视频一区二区在线观看| 日本大香伊一区二区三区| av亚洲精华国产精华| 成人免费毛片高清视频| 国产91对白在线观看九色| 国产91综合一区在线观看| 国产成人小视频| 成人av网站在线观看免费| 成人aa视频在线观看| 97成人超碰视| 欧美亚洲动漫另类| 777欧美精品| 日韩欧美在线123| 久久免费午夜影院| 国产精品久久免费看| 亚洲欧美日韩电影| 亚洲国产精品麻豆| 美国欧美日韩国产在线播放| 国内精品伊人久久久久av影院| 国产真实精品久久二三区| 国产乱码精品一区二区三区av | 成人av电影在线播放| 99re热视频精品| 欧美日韩国产综合一区二区三区 | 在线观看一区日韩| 69成人精品免费视频| 亚洲精品一区二区精华| 中文字幕 久热精品 视频在线| 亚洲日本韩国一区| 午夜电影网一区| 九九视频精品免费| av一区二区久久| 欧美精品v日韩精品v韩国精品v| 精品国产一区二区三区av性色| 日本一区二区三区久久久久久久久不| 中文字幕一区二区三| 亚洲电影一区二区三区| 精品一区二区日韩| 91视频在线看| 日韩精品综合一本久道在线视频| 欧美经典一区二区三区| 洋洋成人永久网站入口| 久草精品在线观看| 色一情一乱一乱一91av| 日韩欧美一区电影| 亚洲视频免费在线观看| 蜜桃av一区二区三区电影| 99久久精品国产导航| 正在播放一区二区| 国产精品久久久久国产精品日日| 爽好久久久欧美精品| 成人黄色av电影| 欧美一区二区三级| 亚洲人成影院在线观看| 狠狠色丁香久久婷婷综| 欧美图片一区二区三区| 久久人人97超碰com| 亚洲va在线va天堂| 成人免费看的视频| 日韩一区国产二区欧美三区| 26uuuu精品一区二区| 国产欧美日韩在线| 日本在线不卡一区| 99国产精品视频免费观看| 日韩精品一区二区在线| 亚洲一区在线看| 成人网男人的天堂| 亚洲精品在线三区| 视频在线在亚洲| 91在线观看污| 日本一区二区三区国色天香| 蜜臀va亚洲va欧美va天堂| 91成人免费电影| 国产精品久久久久久亚洲伦| 久久激情五月激情| 在线播放欧美女士性生活| 亚洲色图一区二区三区| 国产精品亚洲视频| 欧美大尺度电影在线| 午夜视频在线观看一区二区| 97se亚洲国产综合在线| 亚洲国产成人自拍| 国产精品一二三在| 欧美精品一区二区三| 免费在线观看日韩欧美| 欧美日韩一区二区在线观看| 亚洲精品伦理在线| 不卡一区在线观看| 国产精品久久久久久久裸模| 国产一区久久久| 精品久久免费看| 久草中文综合在线| 26uuu国产在线精品一区二区| 日韩电影一区二区三区四区| 欧美日本在线播放| 午夜伦欧美伦电影理论片| 欧美午夜精品免费| 亚洲午夜精品久久久久久久久| 在线视频你懂得一区| 一区二区三区自拍| 欧美性色黄大片| 亚洲图片欧美综合| 欧美美女一区二区在线观看| 亚洲香肠在线观看| 欧美乱妇一区二区三区不卡视频| 亚洲大片精品永久免费| 欧美日韩一区不卡| 日韩精品成人一区二区三区 | 椎名由奈av一区二区三区| 国产iv一区二区三区| 国产精品人成在线观看免费| 成人av网在线| 亚洲乱码中文字幕综合| 欧美日韩在线免费视频| 日本成人超碰在线观看| 精品日产卡一卡二卡麻豆| 精东粉嫩av免费一区二区三区| 久久网站热最新地址| 国产91在线看| 一区二区三区中文免费| 欧美日韩精品三区| 开心九九激情九九欧美日韩精美视频电影| 欧美成人福利视频| 国产精品99久| 亚洲欧美日韩国产成人精品影院| 欧美视频一区二区三区在线观看| 天堂av在线一区| 精品动漫一区二区三区在线观看| 国产成人日日夜夜| 一区二区三区在线免费播放| 欧美疯狂做受xxxx富婆| 精品一区二区综合| 欧美国产乱子伦| 欧美丝袜自拍制服另类| 久久99精品久久久久婷婷| 亚洲国产精品激情在线观看| 在线观看三级视频欧美| 麻豆成人免费电影| 中文字幕亚洲在| 欧美一区二区人人喊爽| 国产91丝袜在线播放| 亚洲综合激情小说| 久久奇米777| 欧美主播一区二区三区美女| 精品一区二区免费在线观看| 亚洲欧美一区二区视频| 欧美一区二区女人| av不卡免费在线观看| 日本怡春院一区二区| 亚洲欧洲日本在线| 日韩欧美一区二区视频| 91婷婷韩国欧美一区二区| 久久成人免费日本黄色| 成人欧美一区二区三区1314| 欧美一区二区视频在线观看| av中文一区二区三区| 麻豆成人av在线| 椎名由奈av一区二区三区| 精品久久久久久久久久久久包黑料 | 亚洲国产一区在线观看| 久久综合成人精品亚洲另类欧美 | 欧美日本一区二区在线观看| 国产成人欧美日韩在线电影| 丝袜美腿高跟呻吟高潮一区| 国产精品理论在线观看| 欧美成人一区二区| 欧美日韩精品一区二区三区四区| 国产91精品久久久久久久网曝门 | 国产美女视频一区| 香蕉久久夜色精品国产使用方法| 国产精品网曝门| 欧美va日韩va| 欧美日韩一区二区在线观看视频 | 日韩一区二区三区在线观看| 色婷婷av一区二区| 成人在线视频首页| 久久国产精品99精品国产| 亚洲bt欧美bt精品777| 亚洲欧美另类久久久精品2019| 国产亚洲精品bt天堂精选| 日韩三级在线观看| 欧美精品自拍偷拍| 91国在线观看| 91丨porny丨户外露出| 高清不卡一区二区在线| 国产一区二区在线影院| 另类的小说在线视频另类成人小视频在线| 一级做a爱片久久| 亚洲日本在线天堂| 中文字幕在线视频一区| 欧美国产一区在线| 国产清纯白嫩初高生在线观看91 | 一本色道综合亚洲| www.一区二区| av中文一区二区三区| 成人av网站大全| a级高清视频欧美日韩|