android设备使用usb串口传输数据,如何监听串口而不占用串口

android设备使用usb串口传输数据,如何监听串口而不占用串口

SeriaPort能够监听,但是会据有串口,相似串口Smart这种的监听,相关资料太少了,要求用钩子或写驱动底层去完成,能还是无法提供相关质感依然demo之类的,写驱动这几个固然了,咱功力远远不足。

合法国网球国际比赛址:

源文章地址:

自然,大家得以给串口增加个监听

1.2    通信机制与设施驱动对接

     SuperIO满含两大学一年级些:通信部分和设备驱动部分。

(1)   
通信部分如何与设施驱动协和职业?两某些重大是透过IRunDevice接口落实两有的之间的和煦专门的事业,线程、异步、同步等机制由SuperIO内部来完毕。

(2)   
通信部分接受到数码后怎么传输到对应的配备上?轮询情势空中楼阁这里个主题材料,重要涉嫌到现身情势和节制方式,因为这两部分使用的是异步监听数据的艺术。肃清这些标题有三种艺术:第朝气蓬勃种、通过摄取公约驱动获得器具ID来鉴定识别相应的设施。第三种、通过配备安装的IP地址来辨别相应的装置。今后的SuperIO平台选择的是第三种格局。

(3)   
并发情势和平协议束形式怎么样兑现通信中断状态?在链路不通的处境下,发送央求命令,未有回去相应的数据,也只是触发运维设备的接口,所以通信状态也不会变动,也不会做出任何影响。化解那个主题素材的措施是,发送央浼数据命令超过3次,每一趟都还没再次回到相应的多寡,就能够触发运转设备接口,来成功运维设备的成套流程。

 

作者QQ:504547114

交流QQ群:54256083

另叁个是我们此次介绍的开源项目:

SuperIO相关资料下载:

 

1.1    通信机制表达

     
通信的完整机制选取呼叫应答格局,正是上位机软件主动发送央浼数据命令,下位机终端选拔到命令后,并校验成功,重返相应的多少。

(1)串口通信机制包蕴:轮询方式。

     
串口总线涉及到拾叁分的简报、生龙活虎对多的报纸发表,为了幸免总线上多少的冲突难题以致境遇烦恼的难题,在维持通信稳固性的前提下,只使用轮询通信机制。一个设施发送、接受实现多少后,才进行下三个装置的通信。然而这种通信效能十分低,假若要提MediaTek讯效能,可以追加串口服务器,在SuperIO平台上实现一个串口对应多台现场配备开展报导,也便是把现场的全体设施平衡负载到差异的串口上。

(2)网络通讯机制包罗:轮询格局、并发形式和平条节制情势。

      
轮询形式与串口通信机制中的轮询格局相通,不过对于互联网通信时,那几个操作形式的频率是非常的低,不能反映网络通信的优势。基于那样的设想,在轮询形式的基本功上,扩展了产出情势和约束形式。

      
并发方式,由SuperIO的里边来和煦落实,通过调用IRunDevice设备接口的GetSendBytes函数获得发送的命令包,聚集发送全数道具的多少。选用数据部分应用异步监听方式,接纳相应设备的多寡。并发方式的报道周期由SuperIO平台统少年老成开展调整,不能够自己作主要调整制央求数据的周期,在那基本功上扩大了约束方式。

      
自作者调节方式,一遍开拓者在付出设备驱动时,能够准期通过OnSendDataHandler发送哀告数据命令,接受数据部分选取异步监听情势,接受相应设施的多少,做到及时央浼即时响应。

别的一种状态,现场硬件终端会百尺竿头更上一层楼发送状态字数据给上位机软件,那时就须要能够主动监听选拔数据事件,那是轮询情势做不到的。碰到这类情况,提议利用自控方式实行报导。

 

骨子里那么些开源项目早已为大家封装了重重驱动类,都在driver包下,大家直接拿来用就足以了

 

 1  1 private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
 2  2 private SerialInputOutputManager mSerialIoManager;
 3  3 
 4  4 private final SerialInputOutputManager.Listener mListener =
 5  5             new SerialInputOutputManager.Listener() {
 6  6                 @Override
 7  7                 public void onRunError(Exception e) {
 8  8                     Log.d(TAG, "Runner stopped.");
 9  9                 }
10 10 
11 11                 @Override
12 12                 public void onNewData(final byte[] data) {
13 13                    //TODO 新的数据
14 14                 }
15 15             };
16 16 
17 17 mSerialIoManager = new SerialInputOutputManager(sPort, mListener);//添加监听
18 //在新的线程中监听串口的数据变化
19 18 mExecutor.submit(mSerialIoManager);

把 SerialInputOutputManager 中的 READ_WAIT_MILLIS 和 BUFSIZ
改成少量的高低就可以了

图片 1

 

下一场,大家选拔第三个dirver ,连接装置

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图