首页 > 代码库 > 截取usb数据包,控制usb设备----Relay设备
截取usb数据包,控制usb设备----Relay设备
在项目开发当中,我们需要一个usb转继电器的设备当开关控制无线发射设备,采购部采购时并未详细了解Relay设备的运行环境就买了一批设备,之后发现设备厂家只提供了windows库,而我们是要在linux中开发。无语中。。。。。。
Relay设备虽然是无驱的,可我并不知道它的协议,怎么办呢? I have no choice ,but I have bus hound,LOL.
厂家提供了windows的管理工具,可以实现Relay的开断,因此我通过Bus Hound截取usb数据包,得到通信协议。 LOL 可以编程咯。。。。。。
Bus Hound截取的数据包如下:
open device:
lock relay:
unlock relay:
Codes如下,只是个简单的测试程序,并未讲究编程中的那些xxxxxxxx
1 /* It is a simple testing */ 2 3 #include </usr/local/include/libusb-1.0/libusb.h> // libusb head file 4 #include <stdio.h> 5 #include <sys/types.h> 6 #include <string.h> 7 8 #define VID 0x16c0 // get of lsusb 9 #define PID 0x05df // get of lsusb10 11 struct libusb_device_handle *devh = NULL;12 13 //unsigned char openstr[] = {0xa1, 0x01, 0x00, 0x03, 0x00, 0x00, 0x08, 0x00};14 15 int main()16 {17 /* usb init before libusb_open* */18 int ret = libusb_init(NULL);19 if (ret < 0) {20 perror("libusb_init");21 return ret;22 }23 /* end */24 25 /* open device with vid and pid, must after libusb_init */26 devh = libusb_open_device_with_vid_pid(NULL, VID, PID);27 if (!devh) {28 perror("libusb_open_device_with_pid_vid");29 libusb_exit(NULL);30 }31 /* end */32 33 /* claim interface */34 ret = libusb_claim_interface(devh, 0);35 if (ret < 0) {36 perror("libusb_claim_interface");37 devh = NULL;38 libusb_close(devh);39 return ret;40 }41 /* end */42 43 /* open device data */44 unsigned char open_data[8];45 memset(open_data, 0, sizeof(open_data));46 if ( 0 > libusb_control_transfer(devh, 0xa1, 0x01, 0x3000, 0x00, open_data, 0x08, 1000)) {47 perror("libusb_control_transfer");48 }49 printf("receive data: %s\n", open_data);50 int i = 0;51 for(i = 0; i < 8; i++) {52 printf("%02x\t", open_data[i]);53 }54 putchar(10);55 /* end */56 57 /* lock relay */58 unsigned char lock_data[] = {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};59 if (0 > libusb_control_transfer(devh, 0x21, 0x09, 0x0000, 0x00, lock_data, 0x08, 1000)) {60 perror("libusb_control_transfer");61 }62 /* end */63 64 /* delay */65 sleep(2);66 67 /* unlock relay */68 unsigned char unlock_data[] = {0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};69 if (0 > libusb_control_transfer(devh, 0x21, 0x09, 0x3000, 0x00, unlock_data, 0x08, 1000)) {70 perror("libusb_control_transfer");71 }72 /* end */73 74 /* release claim interface */75 libusb_release_interface(devh, 0);76 /* end */77 78 /* close device */79 libusb_close(devh);80 81 return 0;82 }
后记:
哈哈,开心啊,终于实现了控制Relay设备。
一句话:没有解决不了的问题!致自己,致大家,希望在挣扎中和大家一起进步。
截取usb数据包,控制usb设备----Relay设备
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。