在Qt/Embedded 2.3.8中添加MX21Ads键盘处理

LangGraph多智能体实战:核心组件与工程化落地 在AI大模型应用开发中,如何让多个智能体高效协作成为工程落地的关键挑战。多智能体系统通过角色分工与状态共享,实现复杂任务的拆解与协同。LangGraph作为状态化编排框架,以图结构管理智能体流转,其核心包括State、Node、Edge、Conditional Edge等组件。理解这些基础原理,有助于构建可控、可观测的协作流程。实际工程中,利用条件路由实现质量反馈闭环,通过Checkpoint持久化会话状态,借助Send机制并行处理子任务。本文结合情报简报生成系统案例,演示分析师、撰稿人、审核员的多角色协作 阅读详情
经过查看源代码发现Qt的键盘处理是判断环境变量QWS_KEYBOARD再加载相应的键盘处理拦截类,  而qt已经包含了几个典型的键盘处理,只要以它们为蓝本即可编写自己的处理类! 一下我以 vr4xx为模板, 建立QWSMx21ButtonsHandler键盘处理类! 以下是相关实现代码,

2. 添加键盘处理类
class QWSMx21ButtonsHandler : public QWSKeyboardHandler
{
    Q_OBJECT
public:
    QWSMx21ButtonsHandler();
    virtual QWSMx21ButtonsHandler();

    bool isOpen() { return buttonFD > 0; }

private slots:
    void readKeyboardData();  // 这个函数最重要, 包含的读键盘扫描码的处理

private:
    QString terminalName;
    int buttonFD;
    int kbdIdx;
    int kbdBufferLen;
    unsigned char *kbdBuffer;
    QSocketNotifier *notifier;
};
/*
 * mx21 buttons driver
 */

QWSMx21ButtonsHandler::QWSMx21ButtonsHandler() : QWSKeyboardHandler()
{
    terminalName = "/dev/buttons";
    buttonFD = -1;
    notifier = 0;

    if ((buttonFD = open(terminalName, O_RDWR | O_NDELAY, 0)) < 0)
    {
    qWarning("Cannot open %s/n", terminalName.latin1());
    }

    if ( buttonFD >= 0 ) {
    notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );
    connect( notifier, SIGNAL(activated(int)),this,
         SLOT(readKeyboardData()) );
    }

    kbdBufferLen = 80;
    kbdBuffer = new unsigned char [kbdBufferLen];
    kbdIdx = 0;
}

QWSMx21ButtonsHandler::~QWSMx21ButtonsHandler()
{
    if ( buttonFD > 0 ) {
    ::close( buttonFD );
    buttonFD = -1;
    }
    delete notifier;
    notifier = 0;
    delete [] kbdBuffer;
}

void QWSMx21ButtonsHandler::readKeyboardData()
{

    int n = 0;
    do {
    n  = read(buttonFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx );
    if ( n > 0 )
        kbdIdx += n;
    } while ( n > 0 );

    int idx = 0;
    while ( kbdIdx - idx >= 2 ) {
        unsigned char *next = kbdBuffer + idx;
        unsigned short *code = (unsigned short *)next;

        if ( ( *code & 0x8000) != 0x8000) {
            idx += 2;
            continue;
        }
        int keycode = Qt::Key_unknown;
       //在此添加键盘扫描码映射关系
        switch ( (*code) & 0x00ff ) {
            case 59:
            keycode = Qt::Key_Up;
            break;          
            default:
            qDebug("Unrecognised key sequence %d", (int)code );
        }
            processKeyEvent( 0, keycode, 0, TRUE, FALSE );
        idx += 2;
    }

    int surplus = kbdIdx - idx;
    for ( int i = 0; i < surplus; i++ )
    kbdBuffer[i] = kbdBuffer[idx+i];
    kbdIdx = surplus;
}

2. 添加加载代码
src/kernel/qkeyboard_qws.cpp
/*
 * keyboard driver instantiation
 */

QWSKeyboardHandler *QWSServer::newKeyboardHandler( const QString &spec )
{
    QWSKeyboardHandler *handler = 0;

    QString device;
    QString type;
    int colon=spec.find(':');
    if ( colon>=0 ) {
    type = spec.left(colon);
    device = spec.mid(colon+1);
    } else {
    type = spec;
    }

    if ( type == "Buttons" ) {
#if defined(QT_QWS_YOPY)
    handler = new QWSyopyButtonsHandler();
#elif defined(QT_QWS_CASSIOPEIA)
    handler = new QWSVr41xxButtonsHandler();
#endif
    } else if ( type == "QVFbKeyboard" ) {
    handler = new QWSVFbKeyboardHandler();
    } else if ( type == "USB" ) {
    handler = new QWSUsbKeyboardHandler(device);
    } else if ( type == "TTY" ) {
    handler = new QWSTtyKeyboardHandler(device);
    } else if ( type == "MX21" ) {   //这是我们添加的MX21键盘处理类
    handler = new QWSMx21ButtonsHandler();
    } else {
    qWarning( "Keyboard type %s:%s unsupported", spec.latin1(), device.latin1() );
    }

    return handler;
}
3.重新编译链接
在目标平台上只要设置QWS_KEYBOARD=MX21即可在界面中拦截到键盘事件处理! 
这里只是给出了基本原理实现,具体的键盘扫瞄码映射关系得看具体的操作!
最新的qtopia-core 版本也可以参考Vr4xx 实现来做, 在src/gui/embedded/下!

希望对有需要的人有所帮助!
 
【信息科学与工程学】【控制科学】第十二篇 微型计算机控制技术01 更精确的经典模型:I1在第5周期WB结束,I2最早可在第6周期进入EX,但I2在ID阶段就需要R1,因此I2的ID需在第6周期,而I1的WB在第5周期,所以I2的ID可以紧接在第6周期,但中间仍有一个stall(因为I1的EX结果要等到MEM之后才能转发给ID?有优先级继承后,Task_L被提升优先级,不会被Task_M抢占,阻塞时间缩短为Task_L剩余执行时间(9ms),仍可能超过10ms,但可通过调整任务周期或使用中断处理缓解。电感L=10μH,输出电容C=100μF,ESR=5mΩ。 阅读详情

相关推荐

Qt绑定开发板硬件按键

Qt中绑定ARM开发板硬件的按键方法.亲试,成功

Qt/E中的键盘设备管理

转载请注明出处:http://www.cnblogs.com/baizx/ 键盘设备在Qt中表现为QWSKeyboardHandler的一个实例,为了支持各种各样的键盘设备,Qt提供了QWSKeyboardHandler接口,各种键盘设备只需要在收到底层操作系统键盘设备的按键以后调用QWSKeyboardHandler的processKeyEvent函数即可将键盘信息传递到Qt系统中...

weixin_30900589的博客 194

DESeq2实战:利用LRT检验解析时间序列基因表达动态变化

本文详细介绍了如何使用DESeq2中的LRT检验分析时间序列基因表达数据,揭示基因表达动态变化模式。通过构建完整模型与简化模型比较,LRT检验能有效识别处理效应随时间变化的基因,适用于发育过程、疾病进展等研究。文章提供了从数据准备、模型构建到结果可视化的完整实战指南,并分享了高级技巧与常见问题排查方法。

weixin_29062671的博客 439

QT 按键1

浅析 Qt Embedded 键盘驱动分析 (下) 2011-06-29 15:36 佚名 互联网 我要评论(0) 字号:T | T 我们都知道Qt-x11借助XServer提供对硬件外设的接口,不需要直接和driver打交道,Qt Embedded则颠覆了这个传统并且摒弃了对XServer的依赖, 所以免不了要有和硬件driver交互的时候。 AD:

吴建梅的专栏 632

笔记:使用Materials Studio计算聚合物的玻璃化转变温度

使用Materials Studio计算聚合物的玻璃化转变温度。

FXJgogogo的博客 1941

iOS马甲包过审实战:如何用5天时间搞定4.3审核(附完整代码混淆方案)

本文提供了一套为期五天的高效实战方案,专门解决iOS应用因重复或抄袭问题而被App Store的4.3条款拒绝的难题。方案涵盖深度分析、代码混淆、资源翻新及环境隔离等系统性步骤,并附有完整的代码混淆示例,旨在帮助开发者在合规框架内重塑应用,显著提升过审成功率。

weixin_29234239的博客 147

qt和linux下的input设备

在嵌入式开发中,qt的键盘往往都是特制的,如何让特制的键盘被qt用起来,需要对linux的input子系统有一定了解,并且特别要追一下qt对外界输入时间的处理方式。应用层和驱动层相互关联,在此仅先粗略分析下qt这部分:     在qt的源码中grep下/dev/input/event之类的,就可以顺藤摸瓜了 对于qt的embedded版本,第一个运行的QApp当作server,后起来的QApp

BaikalHU 1万+

[原创]Step by step 实现自己的AI知识库问答(二)

对小白很友好的AI智能问答开发保姆级教程,适合初级开发者、学生阅读参考,无限制分享,欢迎转载。在这个章节中,我们使用了百度千帆作为知识库,通过简单的代码调用API实现了智能问答。

BaiRiYiSanJin的博客 1471

qt linux设备,qt和linux下的input设备

在嵌入式开发中,qt的键盘往往都是特制的,如何让特制的键盘被qt用起来,需要对linux的input子系统有一定了解,并且特别要追一下qt对外界输入时间的处理方式。应用层和驱动层相互关联,在此仅先粗略分析下qt这部分:在qt的源码中grep下/dev/input/event之类的,就可以顺藤摸瓜了对于qt的embedded版本,第一个运行的QApp当作server,后起来的QApps当作clien...

weixin_34274954的博客 859

【opencv3 学习记录】第二章 读取显示保存视频

一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f

m0_64448543的博客 3272

在虚拟机上搭建FTP服务器

chroot_list_file=/etc/vsftpd/chroot_list # 对chroot_list下用户限制。[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #打开配置文件。# 指定用户的shell: -s /usr/bin/nologin。# 在配置文件中找到以下几行代码, 去掉注释(去掉 "#"号)# 指定用户主目录:/data/ftp/ftpuser -M。(2)修改配置文件,路径/etc/vsftpd/ 下的文件。

weixin_70753380的博客 3211

Qt 虚拟键盘布局

注:译自Qt 5.14.2帮助文档。 所有布局 虚拟键盘支持以下语言: Albanian Arabic Bulgarian Bulgarian (Latin) Croatian Czech Danish Dutch English (British)

学而时习之 741

AIO-1126-JD4(RV1126)蓝牙通讯(BLE)

AIO-1126-JD4采用了正基科技推出的一款集成WiFi、蓝牙功能的模组AP6236,支持高速(HS)功能的蓝牙 4.0,集成了 1.5 类功率放大器(PA),并支持低功耗蓝牙(BLE)。提到正基就不得不提下博通。博通和正基是芯片技术与模块制造方面的合作关系,正基科技是中国台湾的公司,在无线通信模块领域有一定的市场份额,博通则是全球领先的有线和无线通信半导体公司。正基把包含博通关键IP的核心芯片和自家的射频部分等封装在一起,即SIP(System In Package)。

w1820020635的博客 1123

移植基于Qt4.4-tp1的WebKit到ARM平台

 在Qt4.4的技术预览版上,  已集成了 WebKit的支持,  很容易嵌入到Qt应用程序中. 编译Qt4.4-tp1 for arm 我这里使用的是mx27的bsp, jpeg, png都使用系统库. 尚未对Qt进行削减.#!/bin/sh./configure /  -prefix /opt/QtCore-4.4-tp1-arm/ /  -release -shared /  -fast /

奋斗中拥有 1万+

10、数据挖掘与轨迹生成技术:FSSEMiner与CondTraj - GAN的探索

本文介绍了两种先进的数据处理技术:FSSEMiner算法用于从动态属性图中挖掘频繁顺序子图演化模式,揭示如交通流和疾病传播等复杂系统的演化规律;CondTraj-GAN是一种端到端的条件生成对抗网络,能够生成高质量的合成车辆轨迹,解决真实轨迹数据因隐私问题难以获取的挑战。通过实验评估与真实数据集验证,两种技术在可扩展性、实用性及生成质量方面均表现出色,并在交通管理、城市规划、自动驾驶研发等领域具有广泛应用前景。

grafana8visual的博客 88

VB摄像头监控

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

在Linux上使用Qt编译WebKit

Webkit 是 Apple Safari 和 KDE Konqueror 浏览器的核心, 作为一套优秀的轻量级的浏览器排版引擎,已获得Qt的支持,在新的Qt版本4.4中, 已经集成了WebKit引擎. 下面我们就来编译基于Qt的WebKit.Dependencies编译WebKit需要以下软件:  Qt version 4.3 or later.  gperf.  sqlli

奋斗中拥有 9810

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Qt4 在x86和arm平台上的一些配置

需要注意的是一些库的配置, 如zlib, libpng, libjpeg, libmng这些. 一般x86平台都自带了, arm的就需要自己编译了. 如果在配置arm版本Qt时不想把手动配置这些库的目录, 可以将这些库拷到交叉编译工具自动搜索的目录. 不清楚的话可以随便写一个test.c, 然后使用[corss_compile]gcc -v test.c 就可以列出来了. 或者用[co

奋斗中拥有 6659

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用qmake 单独生成Qt程序

以Qt-4.4为例, 配置时使用了-nomake demos, 现在想编译demos下的browser.确定使用Qt的的安装目录, 进行一下操作export QTDIR=/opt/QtX11-4.4-tp1/$QTDIR/bin/qmake -spec $QTDIR/mkspecs/qws/linux-x86-g++ -unix -o Makefile browser.progma

奋斗中拥有 3272

Compile qt-2.3.10

 @font-face{font-family:"Times New Roman";}@font-face{font-family:"宋体";}@font-face{font-family:"Symbol";}@font-face{font-family:"Arial";}@font-face{font-family:

奋斗中拥有 3044

对在Qtopia中添加国际化支持一文补充

经过对Qt的分析,  发现实际上qt的原理是将各种文字编码先转化为utf8编码,然翻译为qm文件来显示本地字符! 这里不使用findstr、msg2qm工具,而采用另外的qt工具lupdate 、lrelease、linguist来完成本地化操作以qt2/tutorial/t1 作为中文翻译例子进行了少部分修改,加入了中文字体支持#include #include #include int mai

奋斗中拥有 2952

QT/Embedded 2.3.8 MX21ADS板移植

QT/Embedded 现在的最新版本是Qtopia Core 4,网上找很久都没有相关教材,还是稳打稳扎用QT/embedded 2的版本来做。目标平台是Freescale MX21,linux2.4内核,开发平台是RH9,下面是移植过程:1. 下载qt-embedded和tmakeftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qt/sourc

奋斗中拥有 2925

对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析

本文详细介绍了Qt中的QTableWidget控件和QTableWidgetItem类,它们是处理二维表格数据的核心组件。主要内容包括: QTableWidgetItem类详解: 核心方法:row()/column()获取位置,setText()/text()设置文本,setIcon()设置图标 样式控制:setTextAlignment()对齐方式,setFont()字体,setSizeHint()尺寸 QTableWidget核心操作: 单元格管理:item()获取单元格,setItem()设置单元格

2503_92929084的博客 118

Qt QBuffer 详解:内存缓冲区读写与实战用法

QBuffer 是 Qt 中用于内存缓冲区读写的 QIODevice 实现,可将 QByteArray 作为“文件”进行随机访问。它支持 open()、read()、write()、seek() 等操作,常用于数据序列化(配合 QDataStream)、内存加载图片、适配仅接受 QIODevice* 的 API。使用时需注意:必须先 open(),写后需 seek(0) 才能读取;若传入外部 QByteArray,其生命周期须长于 QBuffer。适用于小到中等规模内存数据处理,大文件应避免使用。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 560

云服务器部署,Qt 聊天软件的服务端

验证:qmake -v。

2301_79809746的博客 39
上一篇: QT/Embedded 2.3.8 MX21ADS板移植
下一篇: 在Qtopia中添加国际化支持
功名半纸
功名半纸 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄26年 1137粉丝 282原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值