火山服务器--linux嵌入式之字符设备
本帖最后由 4463424 于 2026-3-19 17:42 编辑火山服务器--linux嵌入式之字符设备鼠标事件,
其他设备同理!!以下就一个简单案例,供大家参考!!!!!<火山程序 类型 = "通常" 版本 = 1 />
包 火山.程序
类 启动类 <公开 基础类 = 程序类>
{
方法 启动方法 <公开 类型 = 整数>
{
// 打开键盘设备文件(需要 root 或相应权限)
变量 文件 <参考 类型 = 文件类>
变量 错误 <类型 = 错误接口 值 = 空对象>
换行输出 ("开始打开文件")
文件 = 文件类.打开 ("/dev/input/event4", 文件打开模式.只读, 0, 错误.取地址 ())
延迟执行 ()
{
文件.关闭接口.关闭 ()
}
如果 (错误 != 空对象)
{
换行输出 ("打开设备失败: %v\n", 错误)
结束 (1)
}
换行输出 ("成功打开文件")
// 设置信号处理,以便按 Ctrl+C 时优雅退出
变量 系统管道 <类型 = 系统信号管道类 值 = 空对象>
系统管道 = 系统信号管道类.创建 (1)
系统信号类.通知 (系统管道.取只写管道 (), 系统信号接口.中断信号, 系统信号接口.退出信号)
换行输出 ("开始监听键盘事件...")
变量 信号 <类型 = 系统信号接口 值 = 空对象>
// 事件循环
判断循环 (真)
{
管道分支操作 ()
{
管道读分支 (系统管道.取只读管道 (), 信号)
{
换行输出 ("程序退出")
结束 (1)
}
默认管道分支 ()
{
// 读取一个 input_event 结构体
变量 事件 <类型 = 输入事件结构体>
错误 = 二进制编解码类.读到对象 (文件.读接口, 二进制编解码类.小端字节序, 到任意值 (事件))
如果 (错误 != 空对象)
{
换行输出 ("读取错误: %v\n", 错误)
}
// 只处理按键事件 (EV_KEY)
换行格式输出 ("类型:%d\t代码:%d\t值:%d", 事件.类型, 事件.代码, 事件.值)
}
}
}
返回 (1)
}
#
}
类 输入事件结构体 <@本地类 = "">
{
变量 时间 <公开 类型 = Linux时间 @输出名 = "Time">
变量 类型 <公开 类型 = 无符号短整数 @输出名 = "Type">
变量 代码 <公开 类型 = 无符号短整数 @输出名 = "Code">
变量 值 <公开 类型 = 有符号整数32 @输出名 = "Value">
#
}
类 Linux时间 <公开 折叠2 @别名 = "syscall.Timeval" @别名类型 = 本地参考类型>
页:
[1]