赞
踩
业务场景:
自己遇到的业务上的一个需求,智能硬件设备两侧有跑马灯,需要通过应用层app根据特定指定控制跑马灯的频率,状态等需求。
直接上代码吧:
往设备中写echo命令:
- //往gpio写
- private boolean RootCommand(String command) {
- Process process = null;
- DataOutputStream os = null;
- try {
- process = Runtime.getRuntime().exec("su");
- os = new DataOutputStream(process.getOutputStream());
- os.writeBytes(command + "\n");
- os.writeBytes("exit\n");
- os.flush();
- process.waitFor();
- } catch (Exception e) {
- return false;
- } finally {
- try {
- if (os != null) {
- os.close();
- }
- process.destroy();
- } catch (Exception e) {
- }
- }
- return true;
- }
读GPIO:
- //读GPIO
- private String getGpioString(String path) {
- String defString = "0";// 默认值
- try {
- @SuppressWarnings("resource")
- BufferedReader reader = new BufferedReader(new FileReader(path));
- defString = reader.readLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return defString;
- }
使用方式:
- 写入:
- //表示输出引脚电平正常或翻转
- RootCommand("echo normal >/sys/class/pwm/pwmchip2/pwm0/polarity")
- //设置pwm周期,单位纳秒
- RootCommand("echo 1000 >/sys/class/pwm/pwmchip2/pwm0/period");
- //设置占空比 100-1000
- RootCommand("echo 1000 >/sys/class/pwm/pwmchip2/pwm0/duty_cycle");
- //echo 1开启跑马灯 echo 0 关闭跑马灯
- RootCommand("echo 1 >/sys/class/pwm/pwmchip2/pwm0/enable");
-
- 读取:返回当前灯是什么状态,1/0:开启/关闭
- String gpioString = getGpioString("/sys/class/pwm/pwmchip2/pwm0/enable");
echo 1 >/sys/class/pwm/pwmchip2/pwm0/enable
这行命令是控制灯的开关的,echo 1 是开启,echo 0 是关闭,读取灯的状态可以使用读取方法
String gpioString = getGpioString("/sys/class/pwm/pwmchip2/pwm0/enable");
“echo (1/0) > ” 不需要写入指令。
第三点的问题不知道是硬件那边在设计上的问题还是怎么,不过对我这边影响倒不是很大,读取等的状态是开启还是关闭时倒是没有误差,能够正常使用也没有去管。希望能帮到不熟悉的朋友。
-------------------------------------------------分割线--------------------------------------------------------------
在写入项目之前,最好是通过黑窗口或者开发设备的控制器,通过adb命令发送命令行试一下效果
举例:在android studio下方的 Terminal 中:
1:确保当前连接上了要调试的设备,并且只有一台设备连接电脑。
2:通过发送命令:adb shell 找到当前设备
3:直接发送echo 命令即可,如图:
没报错没提示,就代表这行命令可行,已经写进设备中,可以时刻关注设备,看是否有效果即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。