4463424 发表于 2026-3-19 17:40:51

火山服务器--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]
查看完整版本: 火山服务器--linux嵌入式之字符设备