当前位置:   article > 正文

android 串口通信打开失败_android找不到串口节点

android找不到串口节点

谷歌开源serialPort api 

按照步骤将SerialPort、jni、jnilibs加入,在build.gradle中添加

  1. sourceSets {
  2. main { jni.srcDirs = [] }
  3. }

SerialPort serialPort = new SerialPort(new File(path),baudrate,0);

这里path是指串口文件地址、baudrate是指波特率,flags读写权限,

打开失败的情况可能是没有给权限,

进入ADB SHELL之后,cd /dev 进入dev后,ls查看设备是否有ttyS0 1 2 3等串口

输入:setenforce 0 关闭防火墙

输入:chmod 777 /dev/ttyS2(串口文件) 修改权限

这样的权限只是暂时的每次开机都要重新输入

 

SerialPort类里面的这行代码
//通过挂载到linux的方式,修改文件的操作权限
Process su = Runtime.getRuntime().exec("/system/xbin/su");

5.1以后好像是不能用了,所以最好还是驱动那边,帮忙把ttyS1的读写权限在开机的时候就给出来

  1. 串口接收数据往往需要的是16进制字符串命令,例如
  2. String hexStr ="";
  3. hexStr="03111111111FFFF07";
  4. //16进制字符串转成byte[]直接发送就可以了
  5. try {
  6. byte[] bytes = hexString2Bytes(hexStr);
  7. Logger.e("sendSerialPort:bytes"+hexStr);
  8. sendSerialPort(bytes);
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. /*
  13. * 16进制字符串转字节数组
  14. */
  15. public static byte[] hexString2Bytes(String hex) {
  16. if ((hex == null) || (hex.equals(""))) {
  17. return null;
  18. } else if (hex.length() % 2 != 0) {
  19. return null;
  20. } else {
  21. hex = hex.toUpperCase();
  22. int len = hex.length() / 2;
  23. byte[] b = new byte[len];
  24. char[] hc = hex.toCharArray();
  25. for (int i = 0; i < len; i++) {
  26. int p = 2 * i;
  27. b[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p + 1]));
  28. }
  29. return b;
  30. }
  31. }

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/245512
推荐阅读
相关标签
  

闽ICP备14008679号