@leaveye
2017-03-21T02:45:29.000000Z
字数 1783
阅读 1497
液晶 按键 接口 文档
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;
