SylixOS xinput 系统

使用xinput_calibrator解决gtk程序无法校准的问题 关于xinput_calibrators(触摸屏校准器) 一个通用的X.Org触摸屏校准程序 -------------------------------------------------------------------------------------- 由于所有已经存在的校准器(触摸屏)都是驱动程序依赖性,并且都使用不方便 所以xinput_calibrato 阅读详情

xinput系统简介

SylixOS提供了一个xinput子系统,对键盘、鼠标、触摸屏等设备进行了一个统一管理,SylixOS的xinput系统支持热插拔,可随意添加删除输入设备,使用上很方便、很灵活,下面我们从一个框架图开始来开始学习SylixOS xinput子系统。

xinput分析

xinput系统框架图

SylixOS xinput

从图中看xinput系统分为3层:xinput设备层驱动层,xinput核心处理层,物理设备层,下面我们结合源码来分析个层的含义

xinput设备驱动层

xinput设备将所有输入设备抽象成了键盘和鼠标设备(xmse、xkbd),并且实现了标准的NEW_1型驱动,如下代码片段所示,这样对于上层如Qt应用就可以像操作普通文件那样对键盘、鼠标、触摸屏等设备进行正常的读操作了。

...
    fileop.owner     = THIS_MODULE;
    fileop.fo_create = xinput_open;
    fileop.fo_open   = xinput_open;
    fileop.fo_close  = xinput_close;
    fileop.fo_read   = xinput_read;
    fileop.fo_lstat  = xinput_lstat;
    fileop.fo_ioctl  = xinput_ioctl;

xinput_drv_num = iosDrvInstallEx2(&fileop, LW_DRV_TYPE_NEW_1);
...

xinput核心处理层

xinput的核心处理层负责监控物理设备的热插拔事件,以及从物理设备层取得输入事件,然后通知给xinput设备驱动层,以唤醒上层的应用。这些处理过程都在一个线程中完成,下面代码片段是这个线程的部分工作。

xinput_hotplug_fd = open("/dev/hotplug", O_RDONLY);

    for (;;) {

        if (need_check) { /* need check if a device has been plug on */
            xdev_try_open();
        }
    ...
        ret = select(width, &fdset, LW_NULL, LW_NULL, &timeval);
        ...

                temp = read(xinput_hotplug_fd, hpmsg, LW_HOTPLUG_DEV_MAX_MSGSIZE);

        ...
                        temp = read(input->fd, (PVOID)&knotify, sizeof(knotify));

                            API_MsgQueueSend(kdb_xinput.queue, (void *)&knotify, (u_long)temp);
                            SEL_WAKE_UP_ALL(&kdb_xinput.sel_list, SELREAD);
        ...

                        temp = read(input->fd, (PVOID)mnotify,
                                sizeof(mouse_event_notify) * MAX_INPUT_POINTS);

                            API_MsgQueueSend(mse_xinput.queue, (void *)mnotify, (u_long)temp);
                            SEL_WAKE_UP_ALL(&mse_xinput.sel_list, SELREAD);
        ...

    }
    ...

上面的代码片段只是保留了能够说明工作内容的部分,可能看起来很怪,但从这些片段中足以让我们了解了xinput层3个工作内容:

  • 读取“/dev/hotplug”监视设备的插拔;
  • 读取knotify(键盘类事件),唤醒xinput读;
  • 读取mnotify(鼠标类事件),唤醒xinput读.

代码的详细实现可参看SylixOS源码。

物理设备层

这一层包括了各种输入设备,如USB鼠标、USB键盘、触摸屏、PCI输入设备等,这些设备驱动需要驱动程序员自己编写,需要注意的是,这些设备驱动应该传递下面的键盘或者鼠标事件给xinput子系统。

下面是键盘事件结构:

typedef struct keyboard_event_notify {
    int32_t             nmsg;                               /*  message num, usually one msg*/
    int32_t             type;                               /*  press or release            */
    int32_t             ledstate;                           /*  LED stat                    */
    int32_t             fkstat;                             /*  func-key stat               */
    int32_t             keymsg[KE_MAX_KEY_ST];              /*  key code                    */
} keyboard_event_notify;

下面是鼠标事件结构:

typedef struct mouse_event_notify {
    int32_t             ctype;                               /*  coordinate type             */

    int32_t             kstat;                               /*  mouse button stat           */
    int32_t             wscroll[MOUSE_MAX_WHEEL];            /*  wheel scroll                */

    int32_t             xmovement;                           /*  the relative displacement   */
    int32_t             ymovement;

    /*
     *  if use absolutely coordinate (such as touch screen)
     *  if you use touch screen:
     *  (kstat & MOUSE_LEFT) != 0 (press)
     *  (kstat & MOUSE_LEFT) == 0 (release)
     */
#define xanalog         xmovement                          /*  analog samples values       */
#define yanalog         ymovement
} mouse_event_notify;
DXInput源代码 这是我用VS2010加DirectX9.0写的一个有关DirectInput,DirectSound和拾取的东西。还望高手不吝赐教。 立即下载

相关推荐

金融风控实战:用Python从零搭建贷款违约预测模型(附完整数据集)

本文详细介绍了如何使用Python从零构建金融风控中的贷款违约预测模型,涵盖数据清洗、特征工程、模型构建与评估等全流程。通过实战案例展示逻辑回归、XGBoost和LightGBM三大算法的对比,特别强调AUC-ROC指标在金融风控中的重要性,并附完整数据集和代码实现。

weixin_29175469的博客 240

Linux下无Makefile编译xinput

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

baikunlun的专栏 999

ArcGIS Pro中协同区位熵方法在商业选址分析中的应用

本文详细介绍了如何利用ArcGIS Pro中的协同区位熵方法进行科学的商业选址分析。该方法通过量化目标客户与竞争对手在空间上的关联程度,精准识别市场空白区与竞争红海,帮助决策者从“凭感觉”转向“用数据说话”,有效提升选址成功率和投资回报。

weixin_29214559的博客 360

sylixos input子系统学习、调试记录

sylixos input子系统

kuniqiw的博客 555

51单片机独立按键控制LED(二)

对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。独立按键控制LED显示二进制。独立按键控制LED灯亮灭。独立按键控制LED状态。独立按键控制LED移位。

m0_50562428的博客 5382

深度学习之常用算子介绍

打开 onnx 模型图,可以看到它是一个有向无环图。除了 Input、Output ,其他都是算子(是操作,而不是节点)在ONNX(Open Neural Network Exchange)模型中,除了输入和输出,其他都是算子(Operations)。算子是表示神经网络模型中的不同操作或层的元素。一个ONNX模型由一系列算子组成,通过连接这些算子来定义模型的计算流程。

ueke1的博客 8460

XOutput开源工具:解决手柄兼容性问题的完整解决方案

当你将老旧手柄连接到现代游戏时,是否遇到过设备无响应或功能异常的情况?这并非硬件故障,而是输入协议的"语言障碍"问题。现代游戏普遍采用Xbox 360控制器的XInput标准,而大多数经典手柄仍使用DirectInput协议,两者在数据格式、设备识别和功能映射方面存在本质差异。 **核心价值**:准确定位兼容性问题的技术本质 这种不兼容主要体现在三个层面: - 信号格式差异:XInput采用1

gitblog_00846的博客 256

HALCON深度学习模型部署新选择:一份详细的OpenVINO 2021.4 LTS集成与配置避坑指南

本文详细介绍了如何将HALCON深度学习模型与OpenVINO 2021.4 LTS集成,提供环境配置、硬件加速优化及故障排除的实用指南。特别针对Intel独立显卡的AI加速器接口进行优化,帮助机器视觉工程师提升AI推理效率,适用于工业检测等高要求场景。

weixin_42531779的博客 238

Input源码

组件内不使用JSX,作为模块加载时可以节省代码量。   Input组件: 用于创建input、textarea元素,input、textarea元素两侧可添加额外的元素。 使用 var props={ type,// 类型"input|textarea" id, prefixCls,// 样式类前缀 size,// 尺寸"l...

schifred的博客 945

华为OD机试双机位C卷-开心消消乐(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【开心消消乐】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试 - 开心消消乐。

qq_45776114的博客 1513

MicroPython学习:在STM32上进行移植

本文将介绍如何在STM32上移植MicroPython,并提供相应的源代码。通过以上步骤,你已经成功地将MicroPython移植到STM32上,并可以使用MicroPython语言编写和运行代码。你可以进一步探索MicroPython的功能和API,以利用STM32的各种外设和功能。使用STM32CubeProgrammer或其他适当的烧录工具,将编译生成的MicroPython固件烧录到STM32微控制器中。打开该文件,并根据你的STM32微控制器类型进行必要的配置更改。模块来控制STM32的LED。

JeeVue的博客 1237

SylixOS注册USB驱动模块

概述 介绍如何正确加载USB驱动模块,主要针对用户安装SylixOS之后,USB相关设备无法正常使用的情况。 注册USB驱动模块流程 远程登陆目标机 当新安装SylixOS之后,进入系统,发现无法使用键盘、鼠标等USB设备,此时我们可以通过网口telnet或者串口超级终端远程进入系统,如图 11所示。 图 11 telnet远程登陆目标机 上传USB驱动模块文件

u010053087的博客 596

Codex入门10-Goal自主任务(进阶必学:设定目标就不管了,AI自己干活到完成)

/goal 是Codex CLI最强大的进阶功能——设定一个目标,AI就会制定计划、分步执行、自我测试、持续迭代,即使你关掉终端也会继续。本文详解/goal的工作原理、配置启用方法、常用命令(pause/resume/status/clear),以及如何写出高质量的目标描述让AI高效自主完成任务。

yueyeguzhuo的专栏 456

SylixOS Shell下操作环境变量方法

SylixOS Shell下操作环境变量方法。

ScilogyHunter的博客 1128

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SylixOS里的事件控制块儿

概念 SylixOS里信号量、消息队列、标志组等线程间同步工具都统称为事件(event),都依赖于事件控制块来实现。所以理解事件控制块的数据结构和基本操作是理解信号量、消息队列、标志组的重要基础和保证。 数据结构 /********************************************************************************************************* 事件控制块 (可用于计数及二进制信号量、互斥信号量量、消息队列、PART内存池)

ScilogyHunter的博客 606

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SylixOS -- KN_SMP_WMB()内存屏障函数解析

在SylixOS驱动代码中,常会看到KN_SMP_WMB()指令,追踪该指定到最后查到的是它会在编译前转换成__asm__ __volatile__ ("" : : : "memory")命令,那这句话的意思是什么呢?  __asm__ __volatile__ ("" : : : "memory")是内嵌汇编指令,代码的功能是实现内存屏障。 __asm__:表示后面的代码为内嵌汇编

诸葛一帆丶的博客 2020

SylixOS -- iMX6平台I2C总线驱动

原理概述 I2C总线驱动概述 I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力,比如起始,停止,应答信号和MasterXfer的实现函数。驱动程序包含初始化I2C总线控制器__i2cHwInit函数,操作函数集(总线传输__i2cTransfer函数,总线控制__i2cMasterCtl函数)。 Imx6ul控制器的硬件描述

诸葛一帆丶的博客 2168

SylixOS网卡驱动实现篇

开发环境  操作系统:SylixOS  编程环境:RealEvo-IDE3.1  硬件平台:IMX6Q实验箱 技术实现 网卡驱动的收发功能,是通过管理收发描述符的方式实现的。因此,在MAC初始化的时候需要对描述符也进行相应的初始化操作。初始化内容会因CPU的不同而有所区别。当描述符初始化完毕之后,就可以用他们来进行网络报文的收发。2.1 网络发送函数的实现 网络驱动的

PCSean的博客 928

SylixOS -- phy驱动接口

原理概述 网卡驱动概述 一块以太网网卡包括OSI模型的两个层:物理层和数据链路层。数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY。 MAC主要负责控制与连接物理层的物理介质.在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议

诸葛一帆丶的博客 1286

SylixOS 热插拔系统

1. 引入所谓热插拔(hot-pluggin)即带电插拔,热插拔功能是允许用户在不关闭系统,不切断电源的情况下插入或拨出设备,例如:USB设备(U盘、USB鼠标等)SD卡设备。这个对用户看似简单的操作,在系统层面却有着复杂的处理。2. SylixOS 热插拔系统简介很早之前的计算机系统,程序员知道它们只需在启动时扫描所有的设备,并且他们从来不必关心设备消失直到整个机器被关闭。现在,随着USB设备、C

flags_s的博客 987

SylixOS热插拔驱动接口(三)

1. 热插拔设备驱动 SylixOS下创建插拔消息设备,应用程序可以读取此设备来获取系统热插拔消息。 1.   安装驱动程序 内核线程调用hotplugDrvInstall函数安装消息设备驱动程序。 #include INT _hotplugDrvInstall (VOID); 函数_hotplugDrvInstall原型分析: l 函数成功返回ERROR_NONE,失败返回P

渀波儿灞 361

PCI总线基础知识和SylixOS下PCI设备驱动框架介绍

一、PCI总线基础知识 1、PCI总线的概念             PCI是Peripheral Component Interconnect(外设部件互联)的缩写,它是CPU和外围设备通信的高速传输总线。PCI总线的工作频率一般为33MHz(有的PCI总线工作频率为64MHz和132MHz),是一种同步的独立于处理器的32位或64位局部总线。 2、PCI总线结构        PC

WY_study的博客 928

SylixOS 环境变量

(environment variables)是一组键值对(“key = value”)列表,每一项键值对为一个环境变量,分环境变量名和环境变量值,两者本质都是字符串。环境变量用于为系统提供一组动态可变参数,系统提供了统一的读写、存储、同步等方法,通过代码程序或shell命令都可以访问。具体某项环境变量起什么作用、如何解析则由使用该环境变量的程序具体决定,如TZ用于设置系统时区。

ScilogyHunter的博客 963

SylixOS -- NUC970平台触摸屏驱动移植

原理概述 1.首先要区分lcd和触摸屏,lcd是一个屏幕,触摸屏是贴在lcd上的两层膜。 2.四线电阻触摸屏的原理:触摸屏就是上下两层膜,比如上层代表x轴(XM:负端,XP:正端),下层代表y轴(YM:负端,YP:正端)。当读取x轴坐标时,XP接3.3v,XM接地,从YM读取按下点的电压值作为模拟输入信号,再经过AD转换后就得到了x轴坐标。同理,当读取y轴坐标时,YP接3

诸葛一帆丶的博客 1823

SylixOS CAN驱动框架之一

SylixOS应用层代码详 SylixOS CAN驱动框架 如图 11所示,在SylixOS中CAN总线的框架可分为4层,应用层、系统层、驱动层和硬件层。本文主要介绍应用层的开发和使用。 图 11 SylixOS CAN驱动框架  SylixOS CAN设备应用层框架 在SylixOS中CAN应用层的框架如如图 12所示,在本文档中以调用open,read

Best_Ccc的博客 1171
上一篇: SylixOS I/O系统
下一篇: SylixOS 唤醒链
flags_s
博客等级 码龄11年 15粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值