@leaveye
2017-03-21T02:45:29.000000Z
字数 1783
阅读 1417
液晶
按键
接口
文档
read()
系统调用读取结构对象:
struct input_event {
struct timeval time; //按键时间
__u16 type; //事件类型
__u16 code; //要模拟成什么按键
__s32 value;//是按下还是释放
};
读取到的 input_event
成员值:
.time
事件时间点 .type
EV_KEY/1U
一种类型。.value
按键按下时值为 1
,松开时值为 0
。 .code
按键布局及码表如下:
- | 上 /S20 |
- | F1 /S16 |
通话 /S13 |
1 /S10 |
2 /S07 |
3 /S04 |
* /S01 |
---|---|---|---|---|---|---|---|---|
左 /S19 |
确定 /S23 |
右 /S21 |
F2 /S17 |
退格 /S14 |
4 /S11 |
5 /S08 |
6 /S05 |
0 /S02 |
- | 下 /S22 |
- | F3 /S18 |
挂断 /S15 |
7 /S12 |
8 /S09 |
9 /S06 |
# /S03 |
本段是 demo 代码与测试代码的说明,已废弃,保留仅为参考。
测试代码中看出 demo 中的操作:
ioctl:Init()
初始化什么内容?什么情况下需要?必要性是否可以移除?什么情况下限制执行?使用什么公共资源,可能产生什么冲突?是否可多实例同时初始化?是否可以驱动程序加载后就自动进入 load 画面,等待应用层初始化才清屏待用?ioctl:FillRam(u8)
是将全屏填写一个固定的字节?描述的是模板、图案还是什么?
ioctl:GeDot(u8)
间隔点显示,是什么模板?输入参数字节如何决定图案?ioctl:Hang(u8)
间隔行显示,是什么模板?输入参数字节如何决定图案?ioctl:Biang()
是矩形边框?write(type, x, y, buf)
调用一次写入一个字符,中文或英文。每次需要完整传输点阵字模,且长度按中文长度计算。可认为接口是这样两个:
write:chinize(x, y, bitmap16x16)
write:char(x, y, bitmap8x16)
ioctl:Init()
初始化。
write:Flush(bitmap_t bitmap)
全屏平铺(或不平铺、参数化,待议)显示指定图案。
write:Paint(u16 left, u16 top, bitmap_t bitmap)
将 bitmap
图案显示到指定位置。
其他底层指令酌情添加。
init(charlib_t db8x8, charlib_t db16x16, ...)
初始化。
drawBox(u16 left, u16 top, u16 width, u16 height, u8 style, bitmap_t *pattern)
在指定位置 画一个指定尺寸的矩形 。
若 pattern
不为空,则以其内容平铺填充矩形内部;否则不填充内部。
边框类型由 style
指定。至少包含以下类型:
NONE
无边框SOLID
实线考虑
DOTTED
虚线(一像素有、一像素无,反复)DASHED
虚线(五像素有、三像素无,反复)drawLine ...
效率来说,显示文字的操作放到底层效率会更高,但对驱动程序实现上增加复杂度。比如:
write:setlib(8, 16, fontlib8x16)
write:setlib(16, 16, fontlib16x16)
抑或更高效的方式:
ioctl:setlib(8, 16, open("SongTi8x16", O_RDONLY))
以及:
ioctl:setlib(8, 16, "SongTi8x16")
这种情况下,系统 I/O 调用负责传递的就只是有效文本。
write:text(x, y, "abcd你我他")
typedef struct {
u16 count;
u8 *bitmaps;
} charlib_t;
typedef struct {
u16 w, h;
u8 *bitmap;
} bitmap_t;