在LINUX下键盘编程 编写键盘应用程序 能够获取键盘按键

在LINUX下键盘编程 编写键盘应用程序 能够获取键盘按键,第1张

提供一个输入按键应用程序实例,你参考一下。

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ioctl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <sys/select.h>

#include <sys/time.h>

#include <errno.h>

#include <linux/input.h>

int main(void)

{

int buttons_fd

int key_value,i=0,count

struct input_event ev_key

buttons_fd = open("/dev/input/event0", O_RDWR)

if (buttons_fd <0) {

perror("open device buttons")

exit(1)

}

for () {

count = read(buttons_fd,&ev_key,sizeof(struct input_event))

for(i=0i<(int)count/sizeof(struct input_event)i++)

if(EV_KEY==ev_key.type)

printf("type:%d,code:%d,value:%d\n", ev_key.type,ev_key.code-1,ev_key.value)

if(EV_SYN==ev_key.type)

printf("syn event\n\n")

}

close(buttons_fd)

return 0

}

键盘扫描码有两种:

一个是make code,也就是键被按下和按住不放时产生

另一种是break code,在键被释放时产生。

每个键都有自己唯一的make code和break code。

提供一个我在Linux下的实现,就是使用ioctl 改变终端I/O模式。

测试程序在“a”健被按下时退出。

#include <stdio.h>

#include <stdlib.h>

#include <termios.h>

#include <sys/ioctl.h>

#include <unistd.h>

#include <linux/kd.h>

int main(void)

{

struct termios oldtermios,newtermios

int oldmode

unsigned short key

int i

if((tcgetattr(fileno(stdin),&oldtermios))<0)

{

perror("tcgetaddr error")

exit(1)

}

if((tcgetattr(fileno(stdin),&newtermios))<0)

{

perror("tcgetaddr error")

exit(1)

}

newtermios.c_lflag &= ~(ICANON|ECHO|ISIG)

newtermios.c_iflag = 0

newtermios.c_cc[VMIN] = 0

newtermios.c_cc[VTIME] = 1 //=0延时0 ,=1延时1s

if(tcsetattr(fileno(stdin),TCSAFLUSH,&newtermios))

{

perror("tcsetattr error")

exit(1)

}

ioctl(fileno(stdin),KDGKBMODE,&oldmode)

if(ioctl(fileno(stdin),KDSKBMODE,K_RAW))

{

perror("ioctl error")

exit(1)

}

while(1)

{

if(read(fileno(stdin),&key,sizeof(key))>0)

printf(" key = 0x%x \n",key)

if (key == 0x1e)//key a down , exit.

break

key = 0

}

ioctl(fileno(stdin),KDSKBMODE,oldmode)

tcsetattr(fileno(stdin),TCSANOW,&oldtermios)

return 0

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ma100/archive/2007/02/07/1504270.aspx

以上代码,我在suse liux下,没有成功。原因是 if(ioctl(fileno(stdin),KDSKBMODE,K_RAW)) 没有成功。

参考下面文章:http://www.linuxjournal.com/article/2783,需要弄清楚ioctl对键盘的 *** 作。

LED 测试

蜂鸣器测试

执行lsinput查看按键所对应的输入事件

从lsinput的输出信息,得知按键KEY0 对应的输入事件是 /dev/input/event2 ,因此使用 od 或者 hexdump 命令读取 /dev/input/event2 文件,按下按键后会打印出事件内容:

接执行下面的指令可退出桌面程序。 psplash.sh 这个脚本会关闭以 Q 开头的 Qt 程序。

执行 ts_test 点击 Draw,就可以开始画图。

注意 : ts_calibrate 一般是针对电阻屏校准的。 使用 ts_calibrate

后会在 /etc 目录下生成一个坐标参考文件 pointercal。 如果你是电容屏,并且 /etc 目录下有 pointercal 这个坐标参考文件,请把它删除。否则可能影响触摸坐标上报的数据值。

进入睡眠/熄屏模式:

退出睡眠/亮屏模式:

这样可以像调试串口一样输入登录用户名 root,即可进入系统。这样能输入指令并返回结

果,表明 RS232 串口正常

Memtester 简单介绍

参数说明:

使用文件系统自带的 Memtester 测试工具申请 8MB 内存数量测试做 1 次 DDR 测试。

执行如下指令。

SD 卡写速度测试

SD 卡读速度测试

网速测试

默认开发板的 can 设备是还没有打开的,使用下面的指令打开 can 设备。

服务端:

同理, 客户端也是这样设置:

服务端使用 candump 指令接收来自 can0 的数据

将 SD 卡的第一个分区模拟成 U 盘

说明:使用含 Qt5 的文件系统,启动时插上 RGB 屏幕。

开发板进入系统后,插上鼠标会打印如下信息

ALSA(高级 Linux 声音架构)在 Linux *** 作系统上提供了音频和 MIDI(Musical Instrument

Digital Interface,音乐设备数字化接口)的支持。

amixer 的使用:

alsamixer 则提供一套

图形界面来控制音频设备,可以用键盘方向键来控制增减音量,打开或者关闭等

开发板系统音频输出功能默认是打开的,下面两条指令可不执行。

设置播放音量,执行如下命令,音量的单位是 dB,音量最小为 0,最大为 127。

播放音频文件,执行下面指令


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8117438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存