系统IO的实际应用
===============
安装使用液晶屏触摸屏模拟器
第一步: 分别安装触摸屏和液晶屏的驱动
先make编译驱动程序,得到.ko文件(ko文件就是驱动文件)
使用insmod 驱动的名字 安装驱动(使用超级用户权限安装)
提示:驱动安装成功以后,在ubuntu根目录 /dev下生成两个驱动节点文件
ubuntu_event //触摸屏的驱动
ubuntu_lcd //液晶屏的驱动
第二步:执行VTSLcd程序
./VTSLcd (超级用户权限执行)
1. 使用系统IO在液晶屏上显示bmp格式的图片
日常图片格式: jpg (用算法压缩过的,占用的存储空间很小) bmp png gif (每种格式的图片都有自己的编码方式)
bmp图片的特点: 没有压缩过,存储的是每个像素点最原始的RGB数据(三原色),RGB各占1个字节,bmp每个像素点占三个字节(24位二进制)
微软公司发明bmp格式图片,规定了bmp图片在存储的时候上下像素点就是颠倒,RGB的排列也是颠倒
bmp图片最前面有54个字节的头信息(存放的是图片的属性信息,宽,高),真实的RGB数据从55字节开始的
模拟lcd: 每个像素点占4个字节,多出来的一个字节用来存放图片的透明度信息(A),换句话来说lcd要求是ARGB, 但是bmp图片是RGB
思路:
第一步:打开你要显示的bmp图片(800*480大小)
打开虚拟的液晶屏驱动
第二步:读取bmp图片像素点的RGB数值
第三步:把读取的RGB数值写入到液晶屏中
第四步:关闭图片,关闭液晶屏
遇到的问题:
第一个问题: 图像显示错乱
二进制 1101 1010
1010 1101<<8 按位或 结果 1010 1101 1101 1010
R 1101 1010
G 1010 1101<<8
B 1100 1011<<16 位或 结果1100 1011 1010 1101 1101 1010
按位或和左移配合,实现数据的拼接
2. 使用系统IO操作触摸屏
思路: 打开触摸屏的驱动 /dev/ubuntu_event
读取触摸屏的坐标
关闭触摸屏
输入子系统模型:(后面学习驱动会详细讲解,目前理解原理即可)
/usr/include/linux/input.h定义了大量的宏定义(统一了名字)
linux把所有输入类型的设备驱动统一成了一个模型---》称为输入子系统模型
常见的输入类型的设备: 鼠标 键盘 触摸屏
//linux中定义了一个结构体
struct input_event {
struct timeval time; //事件触发的时间
__u16 type; //事件类型,EV_KEY表示键盘 EV_REL表示鼠标 EV_ABS表示触摸屏
__u16 code; //x,y坐标 左右键 键盘的按键 ABS_X x坐标 ABS_Y y坐标
__s32 value; //坐标值 键值
};
作业:
1. 思考题: 其它大小的图片,在液晶屏指定位置如何显示???
200*100大小的bmp 在屏幕 (100,150)的位置显示出来