CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 16477|回复: 14

分享如何在Android系统控制CB2的GPIO

[复制链接]
发表于 2014-1-3 13:55:21 | 显示全部楼层 |阅读模式
参考了各位大神分享了在linux上控制GPIOde1经验,和 limex GPIO文章,才完成一下代码。希望对各位坛友有所帮助。

镜像版本:cb_a20_android42_v1.04_8188eu-en_US.img
开发环境: IntelliJ IDEA
工具      : Dragonface,直接修改sysconfig1.lhs文件、boot logo等功能。
  1. package com.xxx.xxx;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;


  8. public class GPIOAPI {
  9.     private Process shell;
  10.     private OutputStream os;
  11.     private InputStream is;

  12.     public String GPIO_Init() {
  13.         try
  14.         {
  15.             //root user
  16.             shell = Runtime.getRuntime().exec("su", null, new File("/system/bin/"));
  17.             os = shell.getOutputStream();
  18.             is=shell.getInputStream();
  19.             //shell.waitFor();
  20.             return null;
  21.         }
  22.         catch (IOException g){
  23.             return g.getMessage();
  24.         }

  25.     }

  26.     public int GPIO_Output(int portnum,int status) {

  27.         String ONOFF=Integer.toString(status);
  28.         int rtn=0;

  29.         try{
  30.             switch(portnum)
  31.             {
  32.                 case 1:
  33.                     os.write(("echo "+ONOFF+" > /sys/class/gpio_sw/PD0/data \n").getBytes("ASCII"));
  34.                     break;

  35.                 case 2:
  36.                     os.write(("echo "+ONOFF+" > /sys/class/gpio_sw/PD1/data \n").getBytes("ASCII"));
  37.                     break;
  38.                
  39.                 default:
  40.                     rtn=-1;
  41.                     break;
  42.             }

  43.             os.flush();
  44.         }
  45.         catch (IOException g){
  46.             rtn=g.hashCode();
  47.         }
  48.         return rtn;

  49.     }

  50.     public int GPIO_Input(int portnum) {

  51.         int rtn=0;

  52.         try{
  53.             switch(portnum)
  54.             {
  55.                 case 1:
  56.                     is.read(("cat /sys/class/gpio_sw/PD24/data \n").getBytes("ASCII"));
  57.                     break;

  58.                 case 2:
  59.                     is.read(("cat /sys/class/gpio_sw/PD25/data \n").getBytes("ASCII"));
  60.                     break;

  61.                

  62.                 default:
  63.                     rtn=-1;
  64.                     break;
  65.             }
  66.         }
  67.         catch (IOException g){
  68.             rtn=g.hashCode();
  69.         }
  70.         return rtn;

  71.     }

  72.     public int GPIO_Close()
  73.     {
  74.         int rtn=0;
  75.         try
  76.         {
  77.             os.close();
  78.             is.close();
  79.             shell.waitFor();
  80.             shell.destroy();
  81.         }
  82.         catch (IOException g){
  83.             rtn=g.hashCode();
  84.         }
  85.         catch (InterruptedException e) {
  86.             rtn=e.hashCode();
  87.         }
  88.         return rtn;
  89.     }
  90. }
复制代码
回复

使用道具 举报

发表于 2014-1-6 14:32:53 | 显示全部楼层
这个太复杂了。。。
直接在init.sun7i.rc修改权限,然后通过读写文件来写字符串就行了。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-6 15:00:12 | 显示全部楼层
  1. //写GPIO文件
  2. public int GPIO_Output(int portnum,int status)


  3. //读GPIO文件
  4. public int GPIO_Input(int portnum)
复制代码
我才开始学android和linux,如果你有更好的方法,请分享代码,谢谢!
回复 支持 反对

使用道具 举报

发表于 2014-1-6 20:08:57 | 显示全部楼层
对分享者致以敬意!
在CB3上也可以这样吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-1-6 22:47:27 | 显示全部楼层
本帖最后由 wkloh 于 2014-1-6 22:48 编辑
zaneabc 发表于 2014-1-6 20:08
对分享者致以敬意!
在CB3上也可以这样吗?

我没有cb3,理论上是可以的。
不过请通过 Dragonface重新配置cb3 android 镜像文件sysconfig1.lhs内的 GPIO。
举例:
  1. [gpio_para]
  2. gpio_used                = 1
  3. gpio_num                 = 4
  4. gpio_pin_1          = port:PD00<1><default><1><default>
  5. gpio_pin_2          = port:PD01<1><default><1><default>
  6. gpio_pin_3         = port:PD23<1><default><default><default>
  7. gpio_pin_4         = port:PD24<0><default><default><default>
复制代码
请参考 http://linux-sunxi.org/A20/PIO
回复 支持 反对

使用道具 举报

发表于 2015-8-12 14:54:11 | 显示全部楼层
本帖最后由 xiaolonghun1 于 2015-8-12 14:58 编辑



测试了一下,报错了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2015-9-15 11:08:28 | 显示全部楼层
xiaolonghun1 发表于 2015-8-12 14:54
测试了一下,报错了。

GPIO_Init() 好像没调用吧?
回复 支持 反对

使用道具 举报

发表于 2015-9-22 10:13:18 | 显示全部楼层
gqjjqg 发表于 2015-9-15 11:08
GPIO_Init() 好像没调用吧?

好像是没有调用,后来 用了别的方式进行解决了
回复 支持 反对

使用道具 举报

发表于 2015-12-17 14:09:32 | 显示全部楼层
xiaolonghun1 发表于 2015-9-22 10:13
好像是没有调用,后来 用了别的方式进行解决了

楼主请问怎么解决的呀?
回复 支持 反对

使用道具 举报

发表于 2015-12-17 16:19:58 | 显示全部楼层
yxqlf 发表于 2015-12-17 14:09
楼主请问怎么解决的呀?

没有用这个配置的方式。直接写成一个驱动模块的形式,让它在/dev 下面以一个字符设备驱动的形式进行存在。然后
通过ioctl函数对其进行相应的调用。这一他的io口寄存器有一个专门的宏定义头文件,你找找看,读写寄存器赋值需要用到它

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-11-27 11:34 , Processed in 0.027430 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部