当前位置: 首页 > news >正文

个人站长做什么网站好珠海网站网站建设

个人站长做什么网站好,珠海网站网站建设,dw怎么用模板做网页,不用代码做交互式网站文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试 1、声明 本文是在学习韦东山《驱动大全》USB子系统时#xff0c;为梳理知识点和自己回看而记录#xff0c;全部内容高度复制粘贴。 韦老师的《驱动大全》#xff1a;商品详情 … 文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试 1、声明 本文是在学习韦东山《驱动大全》USB子系统时为梳理知识点和自己回看而记录全部内容高度复制粘贴。 韦老师的《驱动大全》商品详情 其对应的讲义资料https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git libusb apihttps://libusb.sourceforge.io/api-1.0/libusb_api.html 2、HID协议 HIDHuman Interface Devices, 人类用来跟计算机交互的设备。就是鼠标、键盘、游戏手柄等设备。对于USB接口的HID设备有一套协议。 2.1、描述符 HID设备有如下描述符 HID设备的设备描述符并无实际意义没有使用设备描述符来表示自己是HID设备。HID设备只有一个配置所以只有一个配置描述符。接口描述符 bInterfaceClass为3表示它是HID设备。bInterfaceSubClass是0或11表示它支持Boot Interface(表示PC的BIOS能识别、使用它)0表示必须等操作系统启动后通过驱动程序来使用它。bInterfaceProtocol0-None, 1-键盘, 2-鼠标。 端点描述符HID设备有一个控制端点、一个中断端点。 对于鼠标HOST可以通过中断端点读到数据。 2.2、鼠标数据格式 通过中断传输可以读到鼠标数据它是8字节的数据格式如下 偏移大小描述01字节11字节按键状态22字节X位移42字节Y位移61字节或2字节滚轮 按键状态里每一位对应鼠标的一个按键等1时表示对应按键被点击了格式如下 位长度描述01鼠标的左键11鼠标的右键21鼠标的中间键35保留设备自己定义bit3: 鼠标的侧边按键bit4: X位移、Y位移都是8位的有符号数。对于X位移负数表示鼠标向左移动正数表示鼠标向右移动移动的幅度就使用这个8位数据表示。对于Y位移负数表示鼠标向上移动正数表示鼠标向下移动移动的幅度就使用这个8位数据表示。 3、应用程序 本次应用程序是使用同步接口读取鼠标数据。 #include errno.h #include signal.h #include stdio.h #include stdlib.h #include string.h#include libusb-1.0/libusb.hint main(int argc, char **argv) {int err;libusb_device *dev, **devs;int num_devices;int endpoint;int interface_num;int transferred;int count 0;unsigned char buffer[8];struct libusb_config_descriptor *config_desc;struct libusb_device_handle *dev_handle NULL;int found 0;/* libusb init */err libusb_init(NULL);if (err 0) {fprintf(stderr, failed to initialise libusb %d - %s\n, err, libusb_strerror(err));exit(1);}/* get device list */if ((num_devices libusb_get_device_list(NULL, devs)) 0) // 获取设备描述符列表函数返回设备描述符数量{fprintf(stderr, libusb_get_device_list() failed\n);libusb_exit(NULL);exit(1);} fprintf(stdout, libusb_get_device_list() ok\n);/* for each device, get config descriptor */for (int i 0; i num_devices; i){dev devs[i];err libusb_get_config_descriptor(dev, 0, config_desc); // 获取配置描述符if (err) {fprintf(stderr, could not get configuration descriptor\n);continue;}fprintf(stdout, libusb_get_config_descriptor() ok\n);/* parse interface descriptor, find usb mouse */for (int interface 0; interface config_desc-bNumInterfaces; interface) // 枚举所有接口描述符{const struct libusb_interface_descriptor *intf_desc config_desc-interface[interface].altsetting[0]; // 获取配置描述符里的第一个接口描述符interface_num intf_desc-bInterfaceNumber; // 记录该接口描述符的编号编号是从0开始if (intf_desc-bInterfaceClass ! 3 || intf_desc-bInterfaceProtocol ! 2) // 判断是否是HID设备和是否是鼠标协议continue;/* 找到了USB鼠标 */fprintf(stdout, find usb mouse ok\n);for (int ep 0; ep intf_desc-bNumEndpoints; ep) // 枚举所有端点描述符{// 判断是否是中断传输是否是输入端点输入输出都是以USB Host来讨论所以该端点是USB Device输出到USB Hostif ((intf_desc-endpoint[ep].bmAttributes 3) LIBUSB_TRANSFER_TYPE_INTERRUPT || (intf_desc-endpoint[ep].bEndpointAddress 0x80) LIBUSB_ENDPOINT_IN){/* 找到了输入的中断端点 */fprintf(stdout, find in int endpoint\n);endpoint intf_desc-endpoint[ep].bEndpointAddress;found 1;break;}}if (found)break;}libusb_free_config_descriptor(config_desc);if (found)break; }if (!found){/* free device list */libusb_free_device_list(devs, 1);libusb_exit(NULL);exit(1);}/* libusb open */if (found){err libusb_open(dev, dev_handle);if (err){fprintf(stderr, failed to open usb mouse\n);exit(1);}fprintf(stdout, libusb_open ok\n);}/* free device list */libusb_free_device_list(devs, 1);/* claim interface */libusb_set_auto_detach_kernel_driver(dev_handle, 1); err libusb_claim_interface(dev_handle, interface_num);if (err){fprintf(stderr, failed to libusb_claim_interface\n);exit(1);}fprintf(stdout, libusb_claim_interface ok\n);/* libusb interrupt transfer */while (1){err libusb_interrupt_transfer(dev_handle, endpoint, buffer, 8, transferred, 5000); // 发起中断传输阻塞等待5s超时时间if (!err) {/* parser data */printf(%04d datas: , count);printf(recv datas len %d\n, transferred);for (int i 0; i transferred; i){printf(%02x , buffer[i]);}printf(\n);} else if (err LIBUSB_ERROR_TIMEOUT){fprintf(stderr, libusb_interrupt_transfer timout\n);} else {const char *errname libusb_error_name(err);fprintf(stderr, libusb_interrupt_transfer err : %d, %s\n, err, errname);//exit(1);}}/* libusb close */libusb_release_interface(dev_handle, interface_num);libusb_close(dev_handle);libusb_exit(NULL); }4、编译应用程序 假设你的开发板是ubuntu系统 # 安装libusb库 $ sudo apt install libusb-1.0-0-dev# 编译程序 $ gcc -o readmouse readmouse.c -lusb-1.05、测试 将usb鼠标插入开发板 执行程序 $ sudo ./readmouse移动鼠标 滚轮滑动 按键状态 另外每个鼠标的数据格式是不一样的。以上测试结果只是我使用的鼠标。
http://www.hkea.cn/news/14439750/

相关文章:

  • 百度网站建设需要钱照片书那个网站做的好
  • 网站的建设的含义学做网网站论坛
  • 保定网站制作计划怎么做外汇返佣的网站
  • 福州网站建设专业公司h5做怎么做微网站
  • Wordpress微支付谷歌外贸网站seo怎么做
  • 哪些是 joomla做的网站电商网站的付款功能
  • 北京seo网站创建外卖平台
  • 凯里网站建设哪家专业wordpress多用户图库
  • wordpress页面不留边潍坊seo推广
  • 做网站选哪家江苏建筑培训网
  • 门户网站建设工作流程网站开发用到的编程
  • 建网站空间的详细说明品牌推广计划
  • 中信建设有限责任公司官方网站有什么做第二职业的网站吗
  • 网站编程语言排行榜企业网站做百度小程序
  • 广州网站建设平台邯郸网络运营中心电话
  • 东莞做网站公司在哪泉州seo优化排名公司
  • 住房和城乡建设部网站主页博乐建设工程信息网站
  • 网站建设前期策划方案学校网站建设的意义和目的
  • 做微信的微网站费用多少做网站横幅的图片多大
  • 购物网站哪个是正品网页传奇排名
  • 网站备案后打不开腾讯企业邮箱登录入口电脑版
  • 在国际网站做外贸需要条件做报名链接的网站
  • 南京网站开发价格phpcms模板行业网站
  • 表格模板网站永州网站开发
  • 阿里云建网站流程网站推广排名服务
  • 做计算机题目的网站在线生成小程序
  • 网站设计全包网页制作软件html
  • 临沂电商网站建设网页设计与网站建设实训报告
  • 研究生院 网站 建设番禺制作网站技术
  • 希尔顿酒店网站建设的优点制作灯笼的视频