关于安卓串口编程的详解
来源:互联网 发布:java高级流和低级流 编辑:程序博客网 时间:2024/05/21 18:02
由于近日在做关于用安卓手机端用串口配置调试底层设备,底层设备的通信接口为RS485通信方式,严格遵从modebus协议。此为大前提,如何通过安卓手机端完成这一工作,首先有两种方式: 1、OTG功能与底层连接;
2、无需OTG功能;
根据现在的安卓机中带有OTG功能手机所占的份额不是很大,因此,本项目选择无需OTG的通信方式。项目选择的设备为FT311D芯片的力特Z-TEK的android转RS232的设备为硬件通信设备。安卓端编程如下:首先将这个驱动芯片的类导入到工程 这里有几个对象要注意下,这是usb通信中用到的对象,然后定义输入输出流,定义各种缓存数组,这里的maxnumbytes = 65536是最大字节数,是用于限制数据中最大不能超过2的16次方。下面注意的一点是在构造函数中要将USB通信挂起,这必须要在构造函数完成,先获取usb服务,用PendingIntent对象中的getBroadcast 的方法去注册我们定义的服务。然后判断usb是否连接,这里当usb设备拔出的时候会抛出一个action值为UsbManager.ACTION_USB_DEVICE_DETACHE,注册一个广播接收即可,同理当我们插入usb的时候也会自动的识别,然后输入输出流初始化为空。
这里的形参(int baud, byte dataBits, byte stopBits, byte parity,byte flowControl )分别代表串口的波特率、数据位、停止位、校验位、流控制。下面我简要说一下这几个参数:
1、波特率,代表通信过程中的传输速率,单位为bit/s,顾名思义也就是每秒钟传输多少位;
2、数据位,代表一次通信过程中传输的数据有多少个位(也可称一帧数据中数据位),一般分为两种7位或者8位,以8位用的最多;
3、停止位,就是我们所说的帧尾,这一位用于表示数据的截止,通信中一般用一位,但是对网络媒体通信中也可出现两位;
4、校验位,是将我们的一帧数据做校验,有无、奇校验、偶校验、MARK校验、SPACE校验几种;
5、流控制,指的是通信中的数据流,一般选择无即默认情况,但是在硬件的控制流中也会出现RTS/CTS流模式;
发送函数,这里就是用于数据的发送,故就不详细说明了。下面是接受函数也不做说明了, 然后就是usb的广播函数,在前面我们注册的,这里的功能就是告诉安卓设备让不让我注册usb通信,让就在调试那里把允许调试打开,然后将自己电脑的调试指纹发送到手机中,我们会看到安卓设备会弹出一个界面。一堆指纹问你允不允许,这里想要通信的我建议允许,哈哈然后就是我们的DestroyAccessory(true);函数就是注销函数如下所示:最后开辟一个线程用于处理usb通信
这个类先讲到这里,还有很多类,光它不会通信的(*^__^*) 嘻嘻……。下次我会继续讲解下面我们要在怎么做了,我会将它做成一个系列告诉大家一步一步的完成我现在做的这个项目后面更精彩哦!本人是开发者交流版块的版主看到排名下降,希望亲们感觉不错多多支持我们的版块哦。谢谢亲们 ~小轩,对了先附几张我软件的界面图吧,让大家了解一下~~~
2、无需OTG功能;
根据现在的安卓机中带有OTG功能手机所占的份额不是很大,因此,本项目选择无需OTG的通信方式。项目选择的设备为FT311D芯片的力特Z-TEK的android转RS232的设备为硬件通信设备。安卓端编程如下:首先将这个驱动芯片的类导入到工程 这里有几个对象要注意下,这是usb通信中用到的对象,然后定义输入输出流,定义各种缓存数组,这里的maxnumbytes = 65536是最大字节数,是用于限制数据中最大不能超过2的16次方。下面注意的一点是在构造函数中要将USB通信挂起,这必须要在构造函数完成,先获取usb服务,用PendingIntent对象中的getBroadcast 的方法去注册我们定义的服务。然后判断usb是否连接,这里当usb设备拔出的时候会抛出一个action值为UsbManager.ACTION_USB_DEVICE_DETACHE,注册一个广播接收即可,同理当我们插入usb的时候也会自动的识别,然后输入输出流初始化为空。
这里的形参(int baud, byte dataBits, byte stopBits, byte parity,byte flowControl )分别代表串口的波特率、数据位、停止位、校验位、流控制。下面我简要说一下这几个参数:
1、波特率,代表通信过程中的传输速率,单位为bit/s,顾名思义也就是每秒钟传输多少位;
2、数据位,代表一次通信过程中传输的数据有多少个位(也可称一帧数据中数据位),一般分为两种7位或者8位,以8位用的最多;
3、停止位,就是我们所说的帧尾,这一位用于表示数据的截止,通信中一般用一位,但是对网络媒体通信中也可出现两位;
4、校验位,是将我们的一帧数据做校验,有无、奇校验、偶校验、MARK校验、SPACE校验几种;
5、流控制,指的是通信中的数据流,一般选择无即默认情况,但是在硬件的控制流中也会出现RTS/CTS流模式;
发送函数,这里就是用于数据的发送,故就不详细说明了。下面是接受函数也不做说明了, 然后就是usb的广播函数,在前面我们注册的,这里的功能就是告诉安卓设备让不让我注册usb通信,让就在调试那里把允许调试打开,然后将自己电脑的调试指纹发送到手机中,我们会看到安卓设备会弹出一个界面。一堆指纹问你允不允许,这里想要通信的我建议允许,哈哈然后就是我们的DestroyAccessory(true);函数就是注销函数如下所示:最后开辟一个线程用于处理usb通信
这个类先讲到这里,还有很多类,光它不会通信的(*^__^*) 嘻嘻……。下次我会继续讲解下面我们要在怎么做了,我会将它做成一个系列告诉大家一步一步的完成我现在做的这个项目后面更精彩哦!本人是开发者交流版块的版主看到排名下降,希望亲们感觉不错多多支持我们的版块哦。谢谢亲们 ~小轩,对了先附几张我软件的界面图吧,让大家了解一下~~~
0 0
- 关于安卓串口编程的详解
- 安卓 关于接收串口数据的问题
- 关于串口编程的读书笔记
- 关于安卓进行串口调试
- S 串口编程 详解3 串口的初始化、打开/关闭
- S 串口编程 详解5 串口数据的接收
- S 串口编程 详解5 串口数据的接收
- S 串口编程 详解3 串口的初始化、打开/关闭
- 关于linux串口编程的一点总结
- 关于虚拟串口设备的编程方法
- 关于串口编程的(一)
- 关于串口编程的(一)
- 转:串口通讯,关于javax.comm的安…
- 关于安卓开发网络编程踩坑的总结
- 关于 C# 串口编程
- 关于Java串口编程
- Linux串口编程详解
- Linux串口编程详解
- 程序员到三十岁之后需要转行或者转管理吗
- Stanford
- URAL_2025_Line Fighting_均值不等式
- 二分查找
- 最大值和次大值(《编程珠玑(续)》第15章)
- 关于安卓串口编程的详解
- C++ memset详解
- VS2012版最常用的快捷键
- j2ee 连接数据库
- realloc,malloc,calloc的区别
- 如何在Linux里使用xargs命令
- UVA - 10048 Audiophobia (floyd+dp)
- 二叉树遍历(递归,非递归)
- 清仓极路由,源代码