首页 > 代码库 > 截取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设备