首先要,编译内核时启用了 USB HID 设备。启用了 鼠标 。

在开发板上插入usb 时会有如下提示。

可以看到,多了一个 mouse0 和 eventX 打出来的是我的 联想鼠标。

1, 在 终端打印出坐杯

测试代码:

 #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//author:ningci dev
//date: 2017-05-04 15:39
#define MOUSE_DEV "/dev/input/mouse0" static int postion_x;
static int postion_y;
static int mouse_fd; int main(int argc, char **argv)
{
mouse_fd = open(MOUSE_DEV, O_RDONLY);
if(- == mouse_fd)
{
printf("mouse cat't open %s \n", MOUSE_DEV);
return -;
}
while()
{
unsigned char buf[];
if(read(mouse_fd, buf, sizeof(buf)))
{
postion_x = buf[];
postion_y = buf[];
printf("x:%d y:%d \n", postion_x, postion_y);
}
}
return ;
}

测试结果: 上下移动时

左右移动时

测试按键的结果 (打印 buf[0] )

左键 0x9
松开 0x8

右键 0xa
松开 0x8

中键 0xc
松开 0x8

好了,可以开始写转换作标的函数了。

测试正常后的源码

 #include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> /**
* author:ningci dev
* date: 2017-05-04 15:58
*/
#define MOUSE_DEV "/dev/input/mouse0" //定义步进
#define MOVE_STEP 10
static int postion_x;
static int postion_y;
static int mouse_fd; int main(int argc, char **argv)
{
//限定最大 X Y
int max_x = ;
int max_y = ; mouse_fd = open(MOUSE_DEV, O_RDONLY);
if(- == mouse_fd)
{
printf("mouse cat't open %s \n", MOUSE_DEV);
return -;
}
while()
{
unsigned char buf[];
if(read(mouse_fd, buf, sizeof(buf)))
{
/**
* 原理 当不为0 时说明鼠标在移动,经测试发现,值为 12 或 255 254 所以这里取比10小就是减少
*/
//X 向右移动时变大 没问题
if( < buf[])
{
postion_x += ( > buf[]) ? MOVE_STEP : ( - MOVE_STEP);
}
//Y 向下移动时变小 需要反转
if( < buf[])
{
postion_y += ( > buf[]) ? ( - MOVE_STEP) : MOVE_STEP;
}
postion_x = ( > postion_x) ? : postion_x;
postion_y = ( > postion_y) ? : postion_y;
postion_x = (max_x < postion_x) ? max_x : postion_x;
postion_y = (max_y < postion_y) ? max_y : postion_y; printf("x:%d y:%d \n", postion_x, postion_y);
}
}
return ;
}

2,在 lcd 显示鼠标键头。

正常的鼠标指针,肯定是这个样子,(下图中是在 ps 中)。 除了指针外,是透明的。

因为现在,还没有添加 png 图片解析功能,所以先使用 BMP 图片,效果就是,指针外带有一个白外框。

重新修正,添加功能后 gif 图。

linux 读取 USB HID鼠标坐标和点击 在 LCD上显示的更多相关文章

  1. 虚拟机下Linux读取USB设备的问题虚拟机下Linux无法读取USB设备的解决方案

    我们在虚拟机中识别USB设备有三种情况导致Linux系统不能读取到USB设备: 1. .当虚拟机的USB服务没有开启的时候 2. 若虚拟机的USB连接的设置选项没有设置好 3. Widows抢先一步, ...

  2. 【Unity】鼠标指向某物体,在其上显示物体的名字等等等等信息

    之前一直用NGUI HUD Text插件做这个功能,感觉一个小功能就导一个插件进来简直丧心病狂.然后就自己写了一个~ Camera cam;//用于发射射线的相机 Camera UIcam;//UI层 ...

  3. 根据百度地图API得到坐标和地址并在地图上显示

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  4. usb的hid鼠标键盘报告描述符(五)

    title: usb的hid鼠标键盘报告描述符 tags: linux date: 2018/12/20/ 18:05:08 toc: true --- usb的hid鼠标键盘报告描述符 https: ...

  5. USB HID复合设备实例—键盘+鼠标

    实现这种USB HID复合设备有两种方法,在<USB HID协议入门>一节已经讲到其中一种方法,说一个USB HID设备可以包含多种功能的报告描述符合集,这样可以实现复合设备,如带鼠标功能 ...

  6. USB小白学习之路(5) HID鼠标程序

    HID鼠标程序 1. 特别注意 需要特别注意,各个例程中的设备描述符,配置描述符等各种描述符都是已经配置好了的,我们需要做的只是在例程中将代码修改为自己需要的部分即可,一般情况下是不可以串搭配的. 2 ...

  7. STC8H开发(九): STC8H8K64U模拟USB HID外设

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  8. USB HID介绍【转】

    本文转载自:http://blog.csdn.net/leo_wonty/article/details/6721214 HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复 ...

  9. C# 访问USB(HID)设备

    原文:C# 访问USB(HID)设备 二话不说,直接给代码,如果您真想做这方面的东西,还是稍微研究下,没有现成的好类用,就需要自己了解其原理 //引用空间 using System; using Sy ...

随机推荐

  1. springboot学习笔记:7.IDEA下5步完成热部署配置

    开发工具IDEA 2017.02   JDK1.8 1.pom.xml中增加: <dependency> <groupId>org.springframework.boot&l ...

  2. 使用yum仅下载不安装

    安装工具 yum install yum-utils yum install yum-plugin-downloadonly yum install yumdownloadonlyyum instal ...

  3. cs231n spring 2017 lecture7 Training Neural Networks II

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  4. java 内存溢出-与gc

    感谢原作者 在日常中我们经常遇到这样的错误:java.lang.OutOfMemoryError: Java heap space. 但是除了heap space 的OutOfMemoryError, ...

  5. 吴裕雄--天生自然python学习笔记:Python3 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  6. 响应式WEB页面开发实践

    转自:https://github.com/markyun/My-blog/issues/27 最近得到一个新任务单,让我用一套页面适应所有主流终端(Android.iPhone.iPad.PC),而 ...

  7. devexpress设置选中行

    版本2009.3 gvTagInfo.FocusedRowHandle = k; ;   //有效  gvTagInfo.FocusedRowHandle = k;              //这种 ...

  8. Java Timer和TimerTask

    Timer是JDK中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的任务,可以指定一次或多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可被执行的任 ...

  9. ES:在线迁移集群索引,数据不丢失

    一.背景 生产环境由于某些原因需要跨机房迁移ES集群,或者同机房原有集群中所有节点全部更换,期间ES索引要求完整,客户端请求中断不超过五分钟. 二.应用场景 1.同机房不同集群之间数据迁移: 2.跨机 ...

  10. 查漏补缺:socket编程:TCP粘包问题和常用解决方案(上)

    1.TCP粘包问题的产生(发送端) 由于TCP协议是基于字节流并且无边界的传输协议,因此很容易产生粘包问题.TCP的粘包可能发生在发送端,也可能发生在接收端.发送端的粘包是TCP协议本身引起的,TCP ...