串口操作的异步实现:仿照MIDP2.0按键事件处理方法

来源:互联网 发布:阿里的域名泛解析 编辑:程序博客网 时间:2024/05/21 13:57

 j2me提供了CommConnection对串口协议封装,采用的是一种同步机制;一般的流程是:

发命令---》循环读响应数据;
这种操作很简单,当交互的次数较多时,或者使用状态机时,代码就是大循环套小循环,而且结构也不好看;所以,我想实现对串口封装,实现一种异步的方式。
对上层应用来说,要求如下:
1. 启动;启动串口;
2. 发送:发送命令;
3. 如果有传输层协议,开启定时器,当一定时间到达后未收到数据,认为异常;
4. 当接收到数据后,回调函数被调用,读取数据;
5. 关闭;关闭串口;
在MIDP2.0中,MIDP的按键事件源和底层操作系统以队列为接口,MIDP从队列中取出事件,处理后响应;最后回调Canvas的keyPressed;参照这种结构,我实现了串口的异步方法:代码如下所示:
 
CommHandler这个私有类的作用是:从串口取数据,压入队列中;CommHandler还提供了两个方法:proceed方法用于控制线程继续从串口取数据;send方法用于通过串口发送数据;
CommDataQueue是一个私有类,实现循环队列的功能;
 
QueueEventHandler是一个私有类,它的作用是当队列中有数据时,就回调;当队列中没有数据时,就触发CommHandler从串口读数据;
m_cb是一个接口,定义如下:
 
 
commHandler私有类、QueueEventHandler私有类、CommDataQueue私有类构成一个类DefaultCommHandler;在上层的使用方法如下所示:
 
程序简单地测试后,效果不错。
原创粉丝点击