微型光学手指导航模组的android系统软件操作实现
input_report_abs(ofn_device, abs_pressure, 1);
input_sync(ofn_device);
if(val) // 抬起及其同步,包括压力论文联盟http://
{ 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模拟鼠标驱动程序与上述模拟按键或触摸屏的操作类似,区别在于:
初始化上报系统,事件为相对坐标和“点击”;
可以将采集到的运动数据直接上报系统。wwW.133229.COm
像模拟触摸屏驱动一样,通过配合“持续点下状态”,实现可视屏幕区域的“拖动”选择。
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);