android 串口编程总结

        最近公司在做一款带DVD的android设备,DVD是linux系统。android设备要通过串口实现对DVD的控制。控制方式很简单,只需android写命令到串口就行了,这样就涉及到了android的串口编程。

      我做的是android4.2系统的串口编程,经一个多星期的摸索,找到了两种串口的编程方法。

要实现对串口的打开首先要修改串口的权限,在init.rc里面添加修改权限语句:chmod 0777 /dev/ttyS0 。串口节点依照情况而定,我的串口是/dev/ttyS0。

    方法一:

通过android的API进行编程。android4.2的SDK中已经集成了对串口的JNI和一些串口的服务接口,可以在framework中找到。里面主要封装了两个类:

    android.hardware.SerialManager

    android.hardware.SerialPort

通过上面两个类可以实现对串口的打开,和读写操作。具体实现可以参考android SDK中/frameworks/base/tests/SerialChat下的demo代码,我已经上传到网盘:http://pan.baidu.com/s/1qWNsRTU。

注意要在代码的AndroidManifest.xml中添加android:sharedUserId="android.uid.system",然后将编译生成的apk重新进行系统签名。并将apk安装到system/app目录下。这个代码需要修改一下否则会出现闪退,并在log中提示权限问题:android.permission.SERIAL_PORT。


方法二:

使用网上的开源代码:android-serialport-api,关于这个串口的编程代码可以参考博客:http://blog.csdn.net/imyang2007/article/details/8331800        和http://www.oschina.net/question/157182_39785


我也将这个api的apk实例代码上传到了网盘:http://pan.baidu.com/s/1gdq1kNT,查看代码的时候可以参考上面的两篇博客。



   开始,我以为找到android串口编程的代码就已经大功告成了,没想到更纠结的问题出现了。我想发送“0x22”等这些命令到DVD,发送的代码如下:

                    int i;
                     CharSequence t = Emission.getText();
                     char[] text = new char[t.length()];
                     for (i=0; i                              text[i] = t.charAt(i);
                     }
                       mOutputStream.write(new String(text).getBytes());
                       mOutputStream.write('\n');


使用上面的代码发送,我测试android本身接收是正常的,但是DVD端接收就不对了,无论我发送什么数据,DVD端接收的数据打印都是一个值。纠结了好几天,后来在网上发现了如下代码,才得以解决:

                     /*发送"0x22"命令到目标机子,必须使用以下的代码
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    byteArrayOutputStream.write(Integer.decode("0x22").byteValue());//0x22是发送给被控制设备的命令
                         mOutputStream.write(byteArrayOutputStream.toByteArray());

这个代码可以参考:http://zhidao.baidu.com/link?url=U8S5KULipfFdlQSM9aesrqupf_UzQCCcg06NWj3kHrdLFIXxgCv_DgiY6jsfn41LWeJ9kcWUVIzwZq074xTOrq&qq-pf-to=pcqq.discussion



           

你可能感兴趣的:(android 串口编程总结)