微型光学手指导航模组的Android系统软件操作实现
input_report_abs(OFN_Device, ABS_PRESSURE, 1);
input_sync(OFN_Device);
if(val) // 抬起及其同步,包括压力
{ input_report_key(OFN_Device, BTN_TOUCH, 0);
input_report_abs(OFN_Device, ABS_PRESSURE, 0);
input_sync(OFN_Device);
} // 没有抬起,持续就是拖动
return IRQ_RETVAL(IRQ_HANDLED);
}
static int __init SmltTscOFN_init(void) // OFN设备初始化
{ … // 与模拟按键驱动相同
input_set_abs_params(OFN_Device, ABS_X, 0, TscMaxX, 0, 0);// 上报屏参数:Xmin,Xmax
input_set_abs_params(OFN_Device, ABS_Y, 0, TscMaxY, 0, 0); // Ymin,Ymax
input_set_abs_params(OFN_Device, ABS_PRESSURE, 0, 1, 0, 0); // 压力
OFN_Device->evbit[0] = BIT_MASK(EV_SYN) | // 上报上传信息内容:点击,绝对坐标
BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
OFN_Device->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
… // 与模拟按键驱动相同
}
6 OFN模拟鼠标驱动设计
OFN模拟鼠标驱动程序与上述模拟按键或触摸屏的操作类似,区别在于:
初始化上报系统,事件为相对坐标和“点击”;
可以将采集到的运动数据直接上报系统。
像模拟触摸屏驱动一样,通过配合“持续点下状态”,实现可视屏幕区域的“拖动”选择。
OFN模拟触摸屏驱动不同于模拟按键或触摸屏的主要程序代码如下:
void work_handle(void *data) // 工作处理:IIC移动数据-->相对坐标信息,上传
{ short dx, dy; unsigned buf[3];
buf[0] = 2; // 读取OFN数据信息
i2c_master_send(rfid_client, buf, 1);
i2c_master_recv(rfid_client, buf, 3);
if(buf[0]1) // OFN运动与否?
{ dx = (char)buf[1]; // OFN的X向运动
dy = (char)buf[2]; // OFN的Y向运动
input_report_rel(dev, REL_X, dx); // 数据上传及其系统同步
input_report_rel(dev, REL_Y, dy);
input_sync(OFN_Device);
}
}
static irqreturn_t SmltClckMousEisrOFN(int irq, void *p) // OFN中断处理程序:点击发生
{ int val = gpio_get_value (S5PV210_GPH0(0)); // 获取管脚状态
input_report_key(dev, BTN_LEFT, 1); // 左键按下
input_sync(OFN_Device);
if(val) // 左键抬起
{ input_report_key(dev, BTN_LEFT, 0);
input_sync(OFN_Device);
} // 没有抬起,持续就是拖动
return IRQ_RETVAL(IRQ_HANDLED);
}
static int __init SmltMouseOFN_init(void) // OFN设备初始化
{ … // 与模拟按键或触摸屏驱动相同
OFN_device->evbit[0] = // 确定上传信息内容:点击/位移
BIT_MASK(EV_KEY)|BIT_MASK(EV_REL);
OFN_device->keybit[BIT_WORD(BTN_LEFT)] = BIT_MASK(BTN_LEFT);
OFN_device->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
… // 与模拟按键或触摸屏驱动相同}
7 结 论
OFN设备驱动不同于一般常见的特定专用设备,通过各级相关软件设计,使其以“input”类字符型设备的身份,作为系统某个总线特定“适配器”的一个“客户设备”出现,中断形式实时高效地采集位移等信息,包装成Android体系可以普遍识别的按键、鼠标或触摸屏的信息格式广播,就可以实现把OFN“无缝植入”并在Android软件系统完美应用。深入分析,层层设计,逐步实现,环环相扣,是难度较大的基于硬体软件设计中复杂问题简单化的行之有效的途径。
更多计算机与外设信息请关注:21ic计算机与外设频道
评论