在项目开发当中,我们需要一个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

 /* It is a simple testing */

 #include </usr/local/include/libusb-1.0/libusb.h>  // libusb head file
#include <stdio.h>
#include <sys/types.h>
#include <string.h> #define VID 0x16c0 // get of lsusb
#define PID 0x05df // get of lsusb struct libusb_device_handle *devh = NULL; //unsigned char openstr[] = {0xa1, 0x01, 0x00, 0x03, 0x00, 0x00, 0x08, 0x00}; int main()
{
/* usb init before libusb_open* */
int ret = libusb_init(NULL);
if (ret < ) {
perror("libusb_init");
return ret;
}
/* end */ /* open device with vid and pid, must after libusb_init */
devh = libusb_open_device_with_vid_pid(NULL, VID, PID);
if (!devh) {
perror("libusb_open_device_with_pid_vid");
libusb_exit(NULL);
}
/* end */ /* claim interface */
ret = libusb_claim_interface(devh, );
if (ret < ) {
perror("libusb_claim_interface");
devh = NULL;
libusb_close(devh);
return ret;
}
/* end */ /* open device data */
unsigned char open_data[];
memset(open_data, , sizeof(open_data));
if ( > libusb_control_transfer(devh, 0xa1, 0x01, 0x3000, 0x00, open_data, 0x08, )) {
perror("libusb_control_transfer");
}
printf("receive data: %s\n", open_data);
int i = ;
for(i = ; i < ; i++) {
printf("%02x\t", open_data[i]);
}
putchar();
/* end */ /* lock relay */
unsigned char lock_data[] = {0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
if ( > libusb_control_transfer(devh, 0x21, 0x09, 0x0000, 0x00, lock_data, 0x08, )) {
perror("libusb_control_transfer");
}
/* end */ /* delay */
sleep(); /* unlock relay */
unsigned char unlock_data[] = {0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
if ( > libusb_control_transfer(devh, 0x21, 0x09, 0x3000, 0x00, unlock_data, 0x08, )) {
perror("libusb_control_transfer");
}
/* end */ /* release claim interface */
libusb_release_interface(devh, );
/* end */ /* close device */
libusb_close(devh); return ;
}

后记:

  哈哈,开心啊,终于实现了控制Relay设备。

  一句话:没有解决不了的问题!致自己,致大家,希望在挣扎中和大家一起进步。

截取usb数据包,控制usb设备----Relay设备的更多相关文章

  1. USB2.0协议学习笔记---USB数据包结构

    USB包类型和传输过程  USB是一种串行总线,因此数据都是一位一位传输的,如同串口那样,但是USB在真实物理电路上却不是TTL电平,而是一种差分信号采用NRZI编码,就是用变化表示0,不变表示1,同 ...

  2. CentOS 7下Wireshark捕获USB数据包

    1. 软件准备 安装Wireshark # yum install wireshark wireshark-gnome .csharpcode, .csharpcode pre { font-size ...

  3. 深入理解USB流量数据包的抓取与分析

    0x01 问题提出 在一次演练中,我们通过wireshark抓取了一个如下的数据包,我们如何对其进行分析? 0x02 问题分析 流量包是如何捕获的? 首先我们从上面的数据包分析可以知道,这是个USB的 ...

  4. 2--STM32+USB移植+HID 与AUDIO类MIDI设备组成的复合设备(原创)

      前期准备: 一.硬件资源:STM32F103,USB-FS固件库. 链接: STM32 之 标准外设版USB驱动库详解(架构+文件+函数+使用说明+示例程序) https://blog.csdn. ...

  5. ubuntu下usb抓包方法步骤--usbmon

    开发或者调试USB设备相关的工具或者驱动,一个调试的利器就是usbmon抓包. 在ubuntu下使用步骤如下: 1 运行命令  sudo  mount -t debugfs none  /sys/ke ...

  6. Fiddler:在PC和移动设备上抓取HTTPS数据包

    Fiddler是一个免费的Web调试代理,支持任何浏览器.系统以及平台.这个工具是进行Web和App网络开发的必备工具,戳此处下载. 根据Fiddler官网的描述,具有以下六大特点: Web调试 性能 ...

  7. winPcap_5_打开适配器并捕获数据包

    知道如何获取适配器的信息了,那我们就开始一项更具意义的工作,打开适配器并捕获数据包.编写一个程序,将每一个通过适配器的数据包打印出来. 打开设备的函数是 pcap_open(). (Open a ge ...

  8. Linux 中的网络数据包捕获

    Linux 中的网络数据包捕获 Ashish Chaurasia, 工程师 简介: 本教程介绍了捕获和操纵数据包的不同机制.安全应用程序,如 VPN.防火墙和嗅探器,以及网络应用程序,如路由程序,都依 ...

  9. Winpcap笔记3之打开适配器并捕获数据包

    上一讲中知道了如何获取适配的信息,这一将我们讲写一个程序蒋每一个通过适配器的数据包打印出来. 打开设备的函数是pcap_open().函数原型是 pcap_t* pcap_open(const cha ...

随机推荐

  1. TCL随记(1)

    string 函数: string compare [-nocase] [-length int] str1 str2 把字符串str1和str2进行比较,返回值为-1/0/1,分别对应str1小于/ ...

  2. 【数据结构】通用的最小堆(最大堆)D-ary Heap

    听说有一种最小(大)堆,不限于是完全二叉树,而是完全D叉树,名为D-ary Heap(http://en.wikipedia.org/wiki/D-ary_heap).D可以是1,2,3,4,100, ...

  3. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  4. 用PHP对数据库数据进行删除

    显示页面: <body> <table width="100%" border="1" cellpadding="0" c ...

  5. 我的这10年——从机械绘图 到 炼油 到 微软MVP 的华丽转身

    年底了,各种总结计划满天飞,有空的时候我也一直在思考这么多年,是怎么过来的.也曾经很迷茫,希望经验和经历能给大家一点带来一点正能量的东西.10年很长,10年前说实话我没有思考过现在的样子,但10年前的 ...

  6. IE6下div遮盖select的最优解决方案

    a.本节精选html5/css频道里一款IE6下div遮盖select的最优解决方案 原理:利用iframe来遮挡select,再用div来遮挡iframe,就这么简单. 1)首先,建一个div层和i ...

  7. Sqli-labs less 26

    Less-26 TIPS:本关可能有的朋友在windows下无法使用一些特殊的字符代替空格,此处是因为apache的解析的问题,这里请更换到linux平台下. 本关结合25关,将空格,or,and,/ ...

  8. Chapter 6面向对象

    1.Python中预定义的函数在定义的时候有一种很特别的形式,即是函数名是小写,并且函数名前后分别有两个下划线.同样的,在对象中也有预定义的方法,例如所有对象的基类object中的__new__(), ...

  9. CSS 加载新方式

    Chrome 浏览器有意改变<link rel="stylesheet">的加载方式,当其出现在<body>中时,这一变化将更加明显.笔者决定在本文中进行详 ...

  10. UVA 562 Dividing coins (01背包)

    题意:给你n个硬币,和n个硬币的面值.要求尽可能地平均分配成A,B两份,使得A,B之间的差最小,输出其绝对值.思路:将n个硬币的总价值累加得到sum,   A,B其中必有一人获得的钱小于等于sum/2 ...