1.  
  2. #include <usb.h>
  3. #include <stdio.h>
  4.  
  5. #define VERSION "0.1.0"
  6. #define VENDOR_ID 0x0925
  7. #define PRODUCT_ID 0x7001
  8. #define INTERFACE 0
  9. const static int reqIntLen=;
  10. const static int endpoint_Int_in=0x81; /* endpoint 0x81 address for IN */
  11. const static int endpoint_Int_out=0x01; /* endpoint 1 address for OUT */
  12.  
  13. const static int timeout=; /* timeout in ms */
  14.  
  15. void bad(const char *why) {
  16. fprintf(stderr,"Fatal error> %s\n",why);
  17. exit();
  18. }
  19.  
  20. usb_dev_handle *find_lvr_hid();
  21.  
  22. usb_dev_handle* setup_libusb_access() {
  23. usb_dev_handle *lvr_hid;
  24. int retval;
  25. char dname[] = {};
  26. usb_set_debug();
  27. usb_init();
  28. usb_find_busses();
  29. usb_find_devices();
  30.  
  31. if(!(lvr_hid = find_lvr_hid())) {
  32. printf("Couldn't find the USB device, Exiting\n");
  33. return NULL;
  34. }
  35.  
  36. #ifdef LINUX
  37. retval = usb_get_driver_np(lvr_hid, , dname, );
  38. if (!retval)
  39. usb_detach_kernel_driver_np(lvr_hid, );
  40.  
  41. #endif
  42.  
  43. retval=usb_set_configuration(lvr_hid, );
  44. if ( retval < ) {
  45. printf("Could not set configuration 1 : %d\n", retval);
  46. return NULL;
  47. }
  48. retval = retval=usb_claim_interface(lvr_hid, INTERFACE);
  49. if ( retval < ) {
  50. printf("Could not claim interface: %d\n", retval);
  51. return NULL;
  52. }
  53.  
  54. return lvr_hid;
  55. }
  56.  
  57. usb_dev_handle *find_lvr_hid()
  58. {
  59. struct usb_bus *bus;
  60. struct usb_device *dev;
  61.  
  62. for (bus = usb_get_busses(); bus; bus = bus->next) {
  63. for (dev = bus->devices; dev; dev = dev->next) {
  64. if (dev->descriptor.idVendor == VENDOR_ID &&
  65. dev->descriptor.idProduct == PRODUCT_ID ) {
  66. usb_dev_handle *handle;
  67. printf("lvr_hid with Vendor Id: %x and Product Id: %x found.\n", VENDOR_ID, PRODUCT_ID);
  68. if (!(handle = usb_open(dev))) {
  69. printf("Could not open USB device\n");
  70. return NULL;
  71. }
  72.  
  73. return handle;
  74. }
  75.  
  76. }
  77. }
  78.  
  79. return NULL;
  80. }
  81.  
  82. /*
  83. void test_control_transfer(usb_dev_handle *dev)
  84. {
  85. // usb_set_altinterface(dev, 0);
  86. usb_release_interface(dev, 0);
  87. }
  88. */
  89. void test_interrupt_transfer(usb_dev_handle *dev)
  90. {
  91. int r,i;
  92. char answer[reqIntLen];
  93. char question[reqIntLen];
  94. for (i=;i<reqIntLen; i++) question[i]=i;
  95. r = usb_interrupt_write(dev, endpoint_Int_out, question, reqIntLen, timeout);
  96. if( r < )
  97. {
  98. perror("USB interrupt write"); bad("USB write failed");
  99. }
  100. r = usb_interrupt_read(dev, endpoint_Int_in, answer, reqIntLen, timeout);
  101. if( r != reqIntLen )
  102. {
  103. perror("USB interrupt read"); bad("USB read failed");
  104. }
  105. for (i=;i<reqIntLen; i++) printf("%i, %i, \n",question[i],answer[i]);
  106. // usb_set_altinterface(dev, 0);
  107. usb_release_interface(dev, );
  108. }
  109.  
  110. int main( int argc, char **argv)
  111. {
  112. usb_dev_handle *lvr_hid;
  113. if ((lvr_hid = setup_libusb_access()) == NULL) {
  114. exit(-);
  115. }
  116. // test_control_transfer(lvr_hid); //not implemented yet
  117. test_interrupt_transfer(lvr_hid);
  118. usb_close(lvr_hid);
  119.  
  120. return ;
  121. }

libusb 示例的更多相关文章

  1. libusb示例

    #include <stdio.h> #include <libusb-1.0/libusb.h> #include <stdint.h> #include < ...

  2. 基于libUSB的USB设备固件更新程序(下载数据)(转)

    源:基于libUSB的USB设备固件更新程序(下载数据) 本文紧接上一篇日志:基于libUSB-Win32的USB设备固件更新程序(前言),相关背景以及起因等,此处不再赘述,如感兴趣请移步. libU ...

  3. libusb: android上集成libusb库

    1. 下载libusb库. 可以到libusb库的官网(https://libusb.info/)或者是其官方的github仓库(https://github.com/libusb/libusb/re ...

  4. Ubuntu15下Qt+libusb开发

    下载和安装libusb-1.0 在Ubuntu15中可以从软件仓库安装libusb,当前的libusb版本为1.0.可以使用如下命令安装libusb的全部内容. $sudo apt-get insta ...

  5. 树莓派Zero 2 W(ubuntu-22.04)通过.NET6和libusb操作USB读写

    有这个想法的初衷 喜欢电子和DIY硬件的朋友对稚晖君应该都不陌生,他定期都会分享一些自己做的好玩的硬件,他之前做了一个ElectronBot桌面机器人我就很感兴趣,所以就自己也做了一个. 起初我只是自 ...

  6. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  7. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  8. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  9. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

随机推荐

  1. Kubernetes-Service Account

    kube-apiserver 配置文件:/etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0 ...

  2. python基础之多线程

    概念 进程:进程就是一个程序在一个数据集上的一次动态执行过程 程序:代码 数据集:程序执行过程中需要的资源 进程控制块:完成状态保存的单元 线程:线程是寄托在进程之上,为了提高系统的并发性 线程是进程 ...

  3. Druid时序数据库升级流程

    目前Druid集群版本为0.11.0,新版本0.12.1已支持Druid SQL和Redis,考虑到Druid新特性以及性能的提升,因此需要将Druid从0.11.0版本升级到0.12.1版本,下面将 ...

  4. [Hbase]hbase命令行基本操作

    -进入hbase shell hbase shell - 帮助help help - 查看hbase versionversion - 查看hbase 状态 status - 创建表create 't ...

  5. DDoS 攻击与防御:从原理到实践(下)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. DDoS 攻击与防护实践 DDoS 攻击的实现方式主要有如下两种: 自建 DDoS 平台 现在有开源的 DDoS 平台源代码,只要有足够机器和带宽资 ...

  6. jmeter结合autoit操作windows程序

    需求: 模拟操作下图软件的控件,如拨号和挂机. 1. 下载安装好autoit后,打开finder tool,使用查找工具定位到要模拟操作的控件上,如图: 2.在finder tool中的control ...

  7. 把python脚本打包成win可执行文件

    前几天有个朋友找我写一点小东西,写好后把代码发他帮他搞了半天,结果愣是没听懂,就找到了这个办法. 1.导入pyinstaller包, pip install pyinstaller 2.进入到你需要打 ...

  8. MySQL☞order by与distinct

    asc(升序,默认值)/desc(降序) 1.根据某一列的列值进行升序或者降序操作. select  列名 别名 from 表名 order by 列名 asc/desc 2.根据多个列值进行排序 s ...

  9. Python网络编程(基础总结、 入门经典)

    Linux下文件类型:     bcd -lsp          b(块.设备文件)          c(字符设备文件)          d(目录)          -(普通文件)       ...

  10. Mysql性能优化四:分库,分区,分表,你们如何做?

    分库分区分表概念 分区 就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的 分表 就是把一张数据量很大的表按一定的规则分解成N个具有独立存储空间的实体表.系统读写时 ...