• 跳至主要导航
  • 跳到主要内容
  • 跳到主要侧边栏
  • 跳到页脚

单片机技巧

微控制器工程资源,微控制器新产品和电子工程新闻

  • 产品展示
    • 8-bit
    • 16-bit
    • 32-bit
    • 64-bit
  • 应用领域
    • 汽车行业
    • 连接性
    • 消费类电子产品
    • 产业
    • 医疗类
    • 安全
  • EE论坛
    • EDABoard.com
    • Electro-Tech-Online.com
  • 影片
    • TI单片机视频
  • EE资源
    • 快速设计
    • 电子书/技术提示
    • 常见问题
    • LEAP奖
    • 播客
    • 网络研讨会
    • 白皮书
  • EE学习中心

在嵌入式Linux演示中使用输入设备:英特尔爱迪生上的USB鼠标

一月23,2016 通过 艾米·卡尔诺斯卡斯(Aimee Kalnoskas) 2条留言

塔希米德

我最近一直在康奈尔机器人项目团队(该项目的联合主持人)使用英特尔爱迪生 美国英特尔康奈尔杯比赛)。基于我以前对嵌入式系统的了解,我开始学习在Linux上使用和编程的知识。使用的发行版是Yocto(有关所有信息,请参见 英特尔爱迪生网站)。
Tahmid_Linux_embedded A

我们工作的原型之一是使用无线Playstation 4控制器移动用户界面。在Linux上使用输入设备的概念并不复杂,但是对于刚接触Linux编程的人来说,这可能是艰巨的任务。我决定写这篇文章,给出在嵌入式Linux平台上使用输入设备的示例。我正在演示的演示应用程序使用USB鼠标作为连接到Intel Edison的输入设备。

先决条件
我假设您有一块闪动的Intel Edison主板,知道如何(通过USB COM端口或SSH)访问该终端,并已安装Eclipse IDE并可以对其进行编程。当然如果你不这样做’没有IDE,您可以通过终端编译代码,而我’最后告诉您如何做。如果您使用的平台不是Edison,则细节可能会有所变化,但总体思路是相似的。此外,假定您对C编程有基本的了解。

连接USB鼠标时,首先要注意的是,必须将板上的开关(标为SW1)从面向microUSB端口的默认位置切换到USB-A连接器。

的Linux中的设备驱动程序抽象化了与输入设备的接口的底层细节,并通过可与文件接口的文件描述符显示输入。如前所述,可以在Linux环境中查看和读取输入设备,就像文件一样。输入设备出现在/ dev / input目录中。最初,在插入鼠标之前,您可以看到有一个event0和一个event1文件。连接鼠标后,您可以看到一个event2文件。

图1:未连接鼠标的输入设备文件
图2:已连接鼠标的输入设备文件

通过读取event2文件,可以读取鼠标数据。要从文件中转储数据,可以使用od命令(手册页:http://man7.org/linux/man-pages/man1/od.1.html)

例如,以十六进制格式查看输出转储:

Tahmid_embedded_Linux代码1
左右移动鼠标,按按钮,滚动滚轮,然后’会看到数据出现在控制台上:
Tahmid_Linux_embedded图3
图3:使用od命令进行文件event2数据转储

当您按Ctrl + C’re satisfied you’我已经看到足够的垃圾场了。

现在要理解此输入,对其进行解密并有意义地使用它,我编写了一个简单的C应用程序。一世’在提供代码之前,将带您逐步完成开发过程。

首先要做的是将这些参考作为内核文档的一部分:
//www.kernel.org/doc/Documenta…vent-codes.txt
//www.kernel.org/doc/Documenta…nput/input.txt

另外,您应该浏览linux / input.h头文件。您可以在这里找到副本:
http://lxr.free-electrons.com/source…put.h?v=2.6.38

您也可以将其键入Eclipse,在键盘上按Ctrl,然后在标题文件名上单击鼠标左键以查看文件本身。

从内核文档和input.h文件中,您应该发现发生了数据输出,因此每次事件发生时,都可以“fit”转换为以下结构(在linux / input.h中定义):

Tahmid_Linux_embedded代码2
您会发现它的总长度为16个字节。您可以浏览不同的数据类型,并使用Eclipse中的函数大小进行添加和确认:
Tahmid_Linux_embedded代码3

每个事件都有一个时间戳,类型,代码和值,您可以从输入结构中猜测出来。此外,事件由只是标记的EV_SYN类型事件分隔。 EV_SYN定义为0。

您可以在C程序中读取文件,然后仅打印出输入事件结构中作为字段分隔的值,以确认这一点并在与鼠标交互时观察不同类型的数据。您可以在与鼠标交互时限制事件的类型。要了解收到的数字的含义,请仔细阅读上面链接的linux / input.h文件和内核文档。您将看到描述事件的部分:

Tahmid_Linux_embedded代码4
您还可以找到描述键盘,游戏手柄,鼠标等不同键/按钮的部分。描述鼠标的部分为:
Tahmid_Linux_embedded代码5
Tahmid_Linux_embedded代码6

您可以将它们与看到的值进行比较,看它们是否有意义(它们应该!)。然后,您可以进行模制以读取基于这些的不同代码,类型和值。这是我在演示应用程序中所做的,应该对此进行足够的评论,以使您理解。 (很显然,如果您有任何疑问,请在评论部分告诉我!)

我没有的最后一件事’还没有介绍(但是您可能已经知道)如何读取文件。我已经使用低级文件IO函数打开并阅读:

开启档案
Tahmid_Linux_embdedd代码7
读取文件
Tahmid_Linux_embedded代码8

该演示应用程序将打印出描述鼠标运动,滚轮运动以及左,中(滚轮)和右按钮按下的消息。参见下面的图4。

典型输出如下所示:

图4:演示应用程序的输出
图4:演示应用程序的输出

不使用Eclipse IDE进行编程
 正如我之前提到的,即使您不’如果没有Eclipse IDE(您应该得到),您仍然可以对Edison进行编程。您可以通过几种方法进行操作。

首先,您可以将代码从文本编辑器复制粘贴到终端上(使用PuTTY,鼠标右键单击即可粘贴),甚至可以在终端上编写代码。此外,您可以使用WinSCP之类的程序来传输C文件。注意Windows文件,因为行以换行符和回车符结尾,而在Linux上,它们仅以换行符结尾。如果使用文本编辑器打开文件,则回车符将显示为^ M。将文件放置在Edison文件系统上的某个位置后,将其CD到该文件夹​​中并进行编译:

海湾合作委员会<output name> <source file name>
eg: 海湾合作委员会mouse mouse.c

然后,您可以运行它:
例如:./ mouse

我试图使代码不言自明,并在此处提供足够的背景细节,以使您理解’继续。通过更改代码和类型检查,您可以将其扩展到其他设备。希望你’会发现这很有用!让我知道你的想法!

关于作者
Tahmid是一位专门从事微控制器和电力电子学的工程师。他是以下组织的积极成员 EDAboard.com 论坛已超过八年,并撰写了几篇有关嵌入式系统,电源系统和模拟电路的文章。您可以从Tahmid找到更多文章 这里.

 

提起下: 嵌入式的, 的Linux 标签: EDAboard.com, 嵌入式的, 的Linux

读者互动

评论

  1. 亚历克斯 说

    二月28,2019在8:23下午

    在哪里可以找到演示代码?我可以’似乎无法在此页面上找到它。它’可能就在我的面前,但为了我的生命,我可以’t see it.

    谢谢

    回复
    • 黄褐色 说

      2019年8月1日上午12:37

      我认为打印输出是读者的功课。
      反正干得好!

      回复

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

主侧边栏

快速设计

组件选择变得简单。

今天尝试
设计快速的globle

EE培训中心教室

“ee

“ee

“ee

“ee

订阅我们的新闻

订阅每周行业新闻,新产品创新等等。

立即订阅

的RSS 当前的EDABoard.com讨论

  • 16F628
  • Well Tap细胞的DRC规则
  • 电压检测器问题
  • 我是否遇到了MCP3421故障
  • 如何串联8Bit二进制EEPROM文件以获得32Bit二进制文件。

的RSS 当前Electro-Tech-Online.com讨论

  • PIC24FJ1024GB610 PWM
  • 4岁的McIntosh前置放大器上闪烁的静音照明LED
  • 对自定义esp32开发板进行编程
  • 搞笑图片主题!
  • 矩形信号

在推特上关注我们

MicroContrlTips的推文

页脚

单片机技巧

EE World在线网络

  • 快速设计
  • EE World在线
  • EDA董事会论坛
  • 电子技术在线论坛
  • 连接器提示
  • 模拟IC技巧
  • 电力电子提示
  • 传感器提示
  • 测试和测量技巧
  • 电线电缆技巧
  • 5G技术世界

单片机技巧

  • 订阅我们的新闻
  • 与我们一起做广告
  • 联系我们
  • 关于我们
在推特上关注我们在Facebook上添加我们在YouTube上关注我们 在Instagram上关注我们

版权© 2021 ·WTWH Media LLC及其许可方。版权所有。
未经WTWH Media事先书面许可,不得复制,分发,传播,缓存或以其他方式使用本网站上的资料。

隐私政策
<basefont class="xJ1JY42"><pre class="zOb1PI9"></pre></basefont>
<figure class="TtTEWdJ"></figure>