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

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

?? linux.c

?? usb user mode lib
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Linux USB support * * Copyright (c) 2000-2003 Johannes Erdfelt <johannes@erdfelt.com> * * This library is covered by the LGPL, read LICENSE for details. */#include <stdlib.h>	/* getenv, etc */#include <unistd.h>#include <string.h>#include <stdio.h>#include <fcntl.h>#include <errno.h>#include <sys/time.h>#include <dirent.h>#include "linux.h"#include "usbi.h"static char usb_path[PATH_MAX + 1] = "";int usb_os_open(usb_dev_handle *dev){  char filename[PATH_MAX + 1];  snprintf(filename, sizeof(filename) - 1, "%s/%s/%s",    usb_path, dev->bus->dirname, dev->device->filename);  dev->fd = open(filename, O_RDWR);  if (dev->fd < 0) {    dev->fd = open(filename, O_RDONLY);    if (dev->fd < 0)      USB_ERROR_STR(-errno, "failed to open %s: %s",	filename, strerror(errno));  }  return 0;}int usb_os_close(usb_dev_handle *dev){  if (dev->fd < 0)    return 0;  if (close(dev->fd) == -1)    /* Failing trying to close a file really isn't an error, so return 0 */    USB_ERROR_STR(0, "tried to close device fd %d: %s", dev->fd,	strerror(errno));  return 0;}int usb_set_configuration(usb_dev_handle *dev, int configuration){  int ret;  ret = ioctl(dev->fd, IOCTL_USB_SETCONFIG, &configuration);  if (ret < 0)    USB_ERROR_STR(-errno, "could not set config %d: %s", configuration,	strerror(errno));  dev->config = configuration;  return 0;}int usb_claim_interface(usb_dev_handle *dev, int interface){  int ret;  ret = ioctl(dev->fd, IOCTL_USB_CLAIMINTF, &interface);  if (ret < 0) {    if (errno == EBUSY && usb_debug > 0)      fprintf(stderr, "Check that you have permissions to write to %s/%s and, if you don't, that you set up hotplug (http://linux-hotplug.sourceforge.net/) correctly.\n", dev->bus->dirname, dev->device->filename);    USB_ERROR_STR(-errno, "could not claim interface %d: %s", interface,	strerror(errno));  }  dev->interface = interface;  return 0;}int usb_release_interface(usb_dev_handle *dev, int interface){  int ret;  ret = ioctl(dev->fd, IOCTL_USB_RELEASEINTF, &interface);  if (ret < 0)    USB_ERROR_STR(-errno, "could not release intf %d: %s", interface,    	strerror(errno));  dev->interface = -1;  return 0;}int usb_set_altinterface(usb_dev_handle *dev, int alternate){  int ret;  struct usb_setinterface setintf;  if (dev->interface < 0)    USB_ERROR(-EINVAL);  setintf.interface = dev->interface;  setintf.altsetting = alternate;  ret = ioctl(dev->fd, IOCTL_USB_SETINTF, &setintf);  if (ret < 0)    USB_ERROR_STR(-errno, "could not set alt intf %d/%d: %s",	dev->interface, alternate, strerror(errno));  dev->altsetting = alternate;  return 0;}/* Linux usbdevfs has a limit of one page size per read/write. 4096 is *//* the most portable maximum we can do for now */#define MAX_READ_WRITE	4096int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int length,	int timeout){  struct usb_bulktransfer bulk;  int ret, sent = 0;  /* Ensure the endpoint address is correct */  ep &= ~USB_ENDPOINT_IN;  do {    bulk.ep = ep;    bulk.len = length - sent;    if (bulk.len > MAX_READ_WRITE)      bulk.len = MAX_READ_WRITE;    bulk.timeout = timeout;    bulk.data = (unsigned char *)bytes + sent;    ret = ioctl(dev->fd, IOCTL_USB_BULK, &bulk);    if (ret < 0)      USB_ERROR_STR(-errno, "error writing to bulk endpoint %d: %s",	ep, strerror(errno));    sent += ret;  } while (ret > 0 && sent < length);  return sent;}int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,	int timeout){  struct usb_bulktransfer bulk;  int ret, retrieved = 0, requested;  /* Ensure the endpoint address is correct */  ep |= USB_ENDPOINT_IN;  do {    bulk.ep = ep;    requested = size - retrieved;    if (requested > MAX_READ_WRITE)      requested = MAX_READ_WRITE;    bulk.len = requested;    bulk.timeout = timeout;    bulk.data = (unsigned char *)bytes + retrieved;    ret = ioctl(dev->fd, IOCTL_USB_BULK, &bulk);    if (ret < 0)      USB_ERROR_STR(-errno, "error reading from bulk endpoint 0x%x: %s",	ep, strerror(errno));    retrieved += ret;  } while (ret > 0 && retrieved < size && ret == requested);  return retrieved;}int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,	int value, int index, char *bytes, int size, int timeout){  struct usb_ctrltransfer ctrl;  int ret;  ctrl.bRequestType = requesttype;  ctrl.bRequest = request;  ctrl.wValue = value;  ctrl.wIndex = index;  ctrl.wLength = size;  ctrl.data = bytes;  ctrl.timeout = timeout;  ret = ioctl(dev->fd, IOCTL_USB_CONTROL, &ctrl);  if (ret < 0)    USB_ERROR_STR(-errno, "error sending control message: %s", strerror(errno));  return ret;}/* Reading and writing are the same except for the endpoint */static int usb_interrupt_transfer(usb_dev_handle *dev, int ep, char *bytes,	int size, int timeout){  struct usb_urb int_urb;  void *context;  int ret;  unsigned int bytesdone = 0, requested;  struct timeval tv, tv_ref, tv_now;  int waiting;  /*   * FIXME: Packetize large buffers here. 2.4 HCDs (atleast, haven't checked   * 2.5 HCDs yet) don't handle multi-packet Interrupt transfers. So we need   * to lookup the endpoint packet size and packetize appropriately here.   */  /* get actual time, and add the timeout value. The result is the absolute   * time where we have to quit waiting for an interrupt message.   */  gettimeofday(&tv_ref, NULL);  tv_ref.tv_sec = tv_ref.tv_sec + timeout / 1000;  tv_ref.tv_usec = tv_ref.tv_usec + (timeout % 1000) * 1000;  if (tv_ref.tv_usec > 1e6) {    tv_ref.tv_usec -= 1e6;    tv_ref.tv_sec++;  }  do {    requested = size - bytesdone;    if (requested > MAX_READ_WRITE)      requested = MAX_READ_WRITE;    int_urb.type = USB_URB_TYPE_INTERRUPT;    int_urb.endpoint = ep;    int_urb.flags = 0;    int_urb.buffer = bytes + bytesdone;    int_urb.buffer_length = requested;    int_urb.usercontext = (void *)ep;    int_urb.signr = 0;    int_urb.actual_length = 0;    ret = ioctl(dev->fd, IOCTL_USB_SUBMITURB, &int_urb);    if (ret < 0) {      USB_ERROR_STR(-errno, "error submitting URB: %s", strerror(errno));      return ret;    }    waiting = 1;    while (((ret = ioctl(dev->fd, IOCTL_USB_REAPURBNDELAY, &context)) == -1) && waiting) {      tv.tv_sec = 0;      tv.tv_usec = 1000; // 1 msec      select(0, NULL, NULL, NULL, &tv); //sub second wait      /* compare with actual time, as the select timeout is not that precise */      gettimeofday(&tv_now, NULL);      if ((tv_now.tv_sec >= tv_ref.tv_sec) && (tv_now.tv_usec >= tv_ref.tv_usec))        waiting = 0;    }    /*     * If there was an error, that wasn't EAGAIN (no completion), then     * something happened during the reaping and we should return that     * error now     */    if (ret < 0 && errno != EAGAIN)      USB_ERROR_STR(-errno, "error reaping interrupt URB: %s", strerror(errno));    bytesdone += int_urb.actual_length;  } while (ret > 0 && bytesdone < size && ret == requested);  /* If the URB didn't complete in success or error, then let's unlink it */  if (ret < 0) {    int rc;    if (!waiting)      rc = -ETIMEDOUT;    else      rc = int_urb.status;    ret = ioctl(dev->fd, IOCTL_USB_DISCARDURB, &int_urb);    if (ret < 0 && errno != EINVAL && usb_debug >= 1)      fprintf(stderr, "error discarding interrupt URB: %s", strerror(errno));    return rc;  }  return bytesdone;}int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size,	int timeout){  /* Ensure the endpoint address is correct */  return usb_interrupt_transfer(dev, ep & ~USB_ENDPOINT_IN, bytes, size,		timeout);}int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,	int timeout){  /* Ensure the endpoint address is correct */  return usb_interrupt_transfer(dev, ep | USB_ENDPOINT_IN, bytes, size,		timeout);}int usb_os_find_busses(struct usb_bus **busses){  struct usb_bus *fbus = NULL;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品影视网| 亚洲第一激情av| 国产丶欧美丶日本不卡视频| 久久亚洲私人国产精品va媚药| 紧缚奴在线一区二区三区| 精品对白一区国产伦| 国产精品一级二级三级| 国产精品久久久久永久免费观看 | 亚洲一区二区三区免费视频| 欧美午夜片在线看| 免费成人结看片| 国产亚洲一区二区三区四区| 不卡视频一二三四| 亚洲午夜成aⅴ人片| 欧美成人一区二区三区片免费| 激情综合色综合久久综合| 国产精品网曝门| 欧美在线小视频| 久久精品国产久精国产爱| 2023国产精品自拍| 97aⅴ精品视频一二三区| 亚洲成a人片在线观看中文| 日韩精品中午字幕| 成人免费高清在线| 午夜欧美在线一二页| 精品久久一区二区三区| 97精品久久久久中文字幕| 午夜精品一区二区三区免费视频| 精品国产伦理网| 99精品桃花视频在线观看| 日韩高清一区二区| 中文字幕乱码日本亚洲一区二区 | 韩国在线一区二区| 亚洲欧美一区二区不卡| 777久久久精品| 成人精品电影在线观看| 日韩avvvv在线播放| 中文字幕亚洲视频| 欧美成人一级视频| 在线观看免费亚洲| 国产成人自拍网| 偷窥国产亚洲免费视频| 国产精品久久久久久亚洲毛片 | 婷婷夜色潮精品综合在线| 26uuu欧美日本| 日本韩国欧美国产| 丁香桃色午夜亚洲一区二区三区| 亚洲成av人片一区二区三区| 国产精品国产成人国产三级| 精品免费视频.| 欧美三级电影精品| 成人av影院在线| 国产一区二区三区在线观看精品 | 国产自产2019最新不卡| 偷拍一区二区三区| 亚洲精品成人精品456| 国产偷国产偷精品高清尤物| 欧美一区二区三区小说| 在线视频中文字幕一区二区| 国产成人精品影视| 精品一区二区综合| 日韩国产在线观看一区| 亚洲精品乱码久久久久久日本蜜臀| 久久婷婷久久一区二区三区| 欧美一区二区三区免费在线看| 欧美视频一区在线观看| 日本伦理一区二区| 91在线免费视频观看| 国产成人鲁色资源国产91色综| 美国十次综合导航| 日韩激情中文字幕| 粉嫩aⅴ一区二区三区四区| 久草精品在线观看| 美女性感视频久久| 久久国产婷婷国产香蕉| 美女脱光内衣内裤视频久久网站| 婷婷一区二区三区| 日韩不卡在线观看日韩不卡视频| 亚洲国产精品一区二区www在线 | 一区二区三区中文字幕精品精品 | 91麻豆免费看片| 成人va在线观看| 99riav久久精品riav| 91影视在线播放| 日本韩国欧美在线| 欧美伦理视频网站| 91精品国产综合久久精品图片 | 热久久国产精品| 免费成人av在线| 美日韩一区二区| 韩国精品一区二区| 成人免费av网站| 色综合亚洲欧洲| 欧美久久婷婷综合色| 91精品国产免费久久综合| 欧美一二三区在线观看| 精品国产区一区| 日本一区二区三区电影| 自拍偷拍国产精品| 天天色天天操综合| 国产米奇在线777精品观看| 成人综合在线网站| 欧美在线观看你懂的| 91精品国产欧美一区二区| 久久久蜜桃精品| 亚洲日穴在线视频| 免费美女久久99| 懂色av一区二区三区免费观看| 色狠狠色噜噜噜综合网| 欧美日韩国产123区| 久久久一区二区| 亚洲一区欧美一区| 精品在线免费观看| 91在线观看美女| 69av一区二区三区| 国产精品福利av| 琪琪久久久久日韩精品| 成人美女视频在线看| 欧美日韩精品一区二区三区蜜桃 | 精品国产乱码久久久久久牛牛| 欧美国产精品久久| 亚洲成av人片在线观看| 国产成人鲁色资源国产91色综| 欧美无砖砖区免费| 国产亚洲一区二区三区在线观看| 亚洲黄色尤物视频| 国产精品综合一区二区| 欧美日韩一区国产| 国产精品女同一区二区三区| 亚洲国产中文字幕在线视频综合| 精彩视频一区二区三区 | 欧美日韩久久不卡| 国产精品美女一区二区在线观看| 日日夜夜免费精品视频| 成人午夜在线视频| 欧美videossexotv100| 一二三四区精品视频| 国产99久久久精品| 9191久久久久久久久久久| 成人欧美一区二区三区小说| 美女www一区二区| 欧美日韩久久一区二区| 中文字幕一区二区视频| 精品写真视频在线观看| 制服丝袜亚洲播放| 亚洲一区二区三区中文字幕在线| 成人综合在线观看| 久久久99精品久久| 久久精品国产色蜜蜜麻豆| 欧美视频一二三区| 亚洲欧美偷拍卡通变态| 大白屁股一区二区视频| 欧美mv和日韩mv的网站| 日产精品久久久久久久性色| 欧美伊人久久大香线蕉综合69| 中文字幕不卡在线| 精品亚洲成a人| 日韩一级视频免费观看在线| 亚洲成人一区二区| 欧美性色黄大片手机版| 亚洲伦理在线免费看| 北岛玲一区二区三区四区| 日本一区二区免费在线| 国产成人免费9x9x人网站视频| 2021国产精品久久精品| 狠狠色2019综合网| 久久亚洲综合色| 国产资源精品在线观看| 国产午夜三级一区二区三| 国产综合色视频| 久久久91精品国产一区二区三区| 国内精品伊人久久久久av一坑 | 国产亚洲美州欧州综合国| 黄色日韩三级电影| 国产日韩欧美精品一区| 国产盗摄视频一区二区三区| 日本一区二区综合亚洲| 成人性生交大片免费看视频在线| 中文字幕第一区二区| 99国产一区二区三精品乱码| 亚洲黄色小说网站| 欧美日本高清视频在线观看| 日本不卡视频在线| 精品国产sm最大网站| 国产美女一区二区| 国产精品污网站| 色88888久久久久久影院按摩| 亚州成人在线电影| 欧美一级黄色录像| 国产精品白丝jk黑袜喷水| 中文字幕在线观看不卡| 91福利社在线观看| 麻豆国产精品一区二区三区| 久久精品视频一区二区| 91小视频在线免费看| 日韩综合小视频| 久久久久国产免费免费| 91免费视频网址| 美女脱光内衣内裤视频久久网站 | 亚洲五月六月丁香激情|