Android应用层对proc节点的读写
2015-10-19 10:23
330 查看
Android应用层对proc节点的读写
前段时间用android端开发物联网,其中用到了485通讯,关于485通讯知识的介绍:http://blog.chinaunix.net/uid-26921272-id-3506640.html232通讯是两根数据线一个收一个发,但是485通讯是两线合作收发,芯片有一个状态控制端,也就是控制端口的高低电平来决定是收状态还是发状态,android上是用proc节点的方式控制处理器外部端口的状态的,下面就是如何读取proc节点:
核心代码示例:
File myFile = new File("proc/tp_debug/debug_switch");
FileWriter fr;
try {
fr = new FileWriter( myFile );
fr.write("1"); //1是发送出数据,0是接收进数据
fr.close();
}
catch (IOException e) {
e.printStackTrace();
}
实际场景应用实例:
package com.hehe.haha;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.os.Bundle;
import android.util.Log;
import com.hehe.haha.base.BaseActivity;
import com.hehe.haha.base.BaseApp;
import com.hehe.haha.base.SerialPort;
/**
send and receive of serial port
*/
public abstract class SerialPortActivity extends BaseActivity {
private static final String TAG = "SerialPortActivity";
protected BaseApp mApplication;
protected SerialPort mSerialPort;
protected OutputStream mOutputStream;
private InputStream mInputStream;
private ReadThread mReadThread;
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
int maxLength = 10;
byte[] buffer = new byte[maxLength];//缓存区
while (!isInterrupted()) {
try {
int size;
if (mInputStream == null) {
return;
}
size = mInputStream.read(buffer);
//防止溢出
if (size == 10) {
onDataReceived(buffer, 10);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
mApplication = (BaseApp) getApplication();
mSerialPort = mApplication.getSerialPort();
mOutputStream = mSerialPort.getOutputStream();
mInputStream = mSerialPort.getInputStream();
/* Create a receiving thread */
mReadThread = new ReadThread();
mReadThread.start();
} catch (Exception e) {
DisplayError(R.string.error_configuration);
}
}
/**
* send order
*
* @param str
*/
protected void sendOrder(String str) {
try {
Log.i("send data", str);
setSerialStu(1);
for (int i = 0; i < str.length(); i = i + 2) {//Integer.parseInt(str.substring(i, i + 2), 16)
mOutputStream.write(Integer.parseInt(str.substring(i, i + 2), 16));//new String(text).getBytes()
}
setSerialStu(0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*这里是今天笔记的重点
* set status of 485
* @param stu
* 1 is send,0 is receive
*/
protected void setSerialStu(int stu) {
File SerialCtrl = new File("proc/rp_button/485_ctrl");
FileWriter fr;
try {
fr = new FileWriter(SerialCtrl);
//485:0-- rx 1-- tx
switch (stu) {
case 0:
fr.write("0");
Log.i("ConsoleActivity", "this is receive");
break;
case 1:
fr.write("1");
Log.i("ConsoleActivity", "this is send");
break;
}
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//接收数据时调用
protected abstract void onDataReceived(final byte[] buffer, final int size);
@Override
protected void onDestroy() {
if (mReadThread != null)
mReadThread.interrupt();
mApplication.closeSerialPort();
mSerialPort = null;
super.onDestroy();
}
}
如果不清楚proc节点控制程序是否正常工作,可以先用应用层控制一个led指示灯的状态,如果灯的状态受控,proc节点读写成功。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories