Android通过JNI操作串口《三》
来源:互联网 发布:c语言基础编程题 编辑:程序博客网 时间:2024/05/20 09:43
4. JAVA层封装本地方法
package com.notioni.uart.manager;
import com.notioni.uart.manager.TtyNativeControl.ReceiveCallback;
/*
*单例模式
*/
publicclass UARTCTLManager {
private TtyNativeControlmTtyControl;
privatebooleanmIsOpen =false;
privatestatic UARTCTLManagermManager;
private UARTCTLManager(){
mTtyControl =new TtyNativeControl();
}
publicstatic UARTCTLManager getInstance(){
if(mManager == null){
mManager =new UARTCTLManager();
}
returnmManager;
}
/*
* 打开驱动
*/
publicint openDevice(){
int o =mTtyControl.openTty();
o=1;
if(o == 1){
mIsOpen =true;
}
return o;
}
/*
* 关闭驱动
*/
publicint closeDevice(){
int c =mTtyControl.closeTty();
if(c == 1){
mIsOpen =false;
}
return c;
}
/*
* 判断驱动是否打开
*/
publicboolean isOpenDevice(){
returnmIsOpen;
}
/*
* 发送数据
*/
publicint sendDataToDevice(byte[] data){
returnmTtyControl.sendMsgToTty(data);
}
/*
* 注入接收数据回调方法
*/
publicvoid receiveDataFromDevice(ReceiveCallback callback){
mTtyControl.receiveMsgFromTty(callback);
}
/**
* 设置串口数据位,校验位,速率,停止位
* @param databits 数据位 取值位7或8
* @param event 校验类型 取值N ,E, O,,S
* @param speed 速率 取值 2400,4800,9600,115200
* @param stopBit 停止位 取值1或者 2
*/
publicint configDevice(int databits,char event,int speed,int stopBit){
if(!mIsOpen){
return -1;
}
int re =mTtyControl.configTty(databits, event, speed, stopBit);
return re;
}
/**
* 设置串口通信模式,打印串口信息
* @param mode是否使用原始模式(Raw Mode)方式来通讯 取值0,1,2 说明:0=nothing,1=Raw mode,2=no raw mode
* @param showLog打印出串口信息Log 取值1,0
* @return
*/
publicint setMode(int mode ,int showLog){
returnmTtyControl.setMode(mode, showLog);
}
/**
*
* 接收数据回调接口,接收驱动送到的数据要实现这个回调接口
*/
publicinterface ReceiveDataCallBackextends ReceiveCallback{
}
}
5. JAVA调用 Activity
package com.notioni.uart;
import com.notioni.uart.manager.TtyNativeControl;
import com.notioni.uart.manager.UARTCTLManager;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
publicclass UARTCTLActivityextends Activityimplements View.OnClickListener{
privatestaticfinal StringTAG ="UARTCTLActivity";
private UARTCTLManagermUartctlManager;
private ButtonmOpenOrCloseBtn;
private ButtonmSendBtn;
private EditTextmSendText;
private TextViewmReceiveText;
private ReceiveDatamReceiveData;
/** Called when the activity is first created. */
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mUartctlManager = UARTCTLManager.getInstance();
mReceiveData =new ReceiveData();
mOpenOrCloseBtn = (Button)findViewById(R.id.openOrcloseBtn);
mSendBtn = (Button)findViewById(R.id.sendBtn);
mSendText = (EditText)findViewById(R.id.sendMsg);
mReceiveText = (TextView)findViewById(R.id.receiveMsg);
mOpenOrCloseBtn.setOnClickListener(this);
mSendBtn.setOnClickListener(this);
}
@Override
protectedvoid onResume() {
super.onResume();
}
@Override
publicvoid onClick(View v) {
switch(v.getId()){
case R.id.openOrcloseBtn://打开或关闭驱动
Log.i(TAG,"isOpen:"+mUartctlManager.isOpenDevice());
if(mUartctlManager.isOpenDevice()){
mUartctlManager.closeDevice();
mOpenOrCloseBtn.setText(R.string.open);
}else{
int i =mUartctlManager.openDevice();
Log.i(TAG,"openDevice result:"+i);
mOpenOrCloseBtn.setText(R.string.close);
mUartctlManager.setMode(1, 1);//查看串口配置信息
}
break;
case R.id.sendBtn:
openDevice();
int re =mUartctlManager.sendDataToDevice(getSendText());
Log.i(TAG,"send result:"+re);
break;
}
}
/*
* 打开驱动
*/
privatevoid openDevice(){
if(!mUartctlManager.isOpenDevice()){
mUartctlManager.openDevice();
mUartctlManager.receiveDataFromDevice(mReceiveData);
}
}
/*
* 关闭驱动
*/
publicvoid closeDevice(){
if(mUartctlManager.isOpenDevice()){
mUartctlManager.closeDevice();
}
}
/*
* 取出待发送的数据
*/
privatebyte[] getSendText(){
String st = mSendText.getText().toString()+"\r";
if(st ==null ||"".equals(st)){
returnnull;
}
return st.getBytes();
}
/*
* 接收数据
*/
class ReceiveDataimplements UARTCTLManager.ReceiveDataCallBack{
@Override
publicvoid onReceiveData(byte[] data, TtyNativeControl tty) {
if(mReceiveText != null && data !=null){
Log.w(TAG,"[onReceiveData] data:"+data.toString());
mReceiveText.setText(data.toString());
}
}
}
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
menu.add(1,1,0,R.string.config);
returnsuper.onCreateOptionsMenu(menu);
}
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if(item.getItemId() == 1){
Intent intent = new Intent();
intent.setClass(this, ConfigActivity.class);
startActivity(intent);
}
returntrue;
}
@Override
protectedvoid onPause() {
super.onPause();
// closeDevice();
}
@Override
protectedvoid onDestroy() {
closeDevice();
super.onDestroy();
}
}
6. JAVA配置串口属性
package com.notioni.uart;
import com.notioni.uart.manager.UARTCTLManager;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.widget.Toast;
publicclass ConfigActivityextends PreferenceActivityimplements Preference.OnPreferenceChangeListener{
privatestaticfinal StringTAG ="ConfigActivity";
privatestaticfinal StringKEY_DATABITS ="tty_databits";
privatestaticfinal StringKEY_EVENT ="tty_event";
privatestaticfinal StringKEY_SPEED ="tty_speed";
privatestaticfinal StringKEY_STOPBITS ="tty_stopbits";
ListPreference dataBitsPrefer ;
ListPreference eventPrefer ;
ListPreference speedPrefer ;
ListPreference stopBitsPrefer ;
Object dataBitsValues =null;
Object eventValues =null;
Object speedValues =null;
Object stopbitsValues =null;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.config_options);
PreferenceScreen prefSet = getPreferenceScreen();
dataBitsPrefer = (ListPreference)prefSet.findPreference(KEY_DATABITS);
eventPrefer = (ListPreference)prefSet.findPreference(KEY_EVENT);
speedPrefer = (ListPreference)prefSet.findPreference(KEY_SPEED);
stopBitsPrefer = (ListPreference)prefSet.findPreference(KEY_STOPBITS);
dataBitsPrefer.setValueIndex(0);
eventPrefer.setValueIndex(0);
speedPrefer.setValueIndex(0);
stopBitsPrefer.setValueIndex(0);
dataBitsPrefer.setOnPreferenceChangeListener(this);
eventPrefer.setOnPreferenceChangeListener(this);
speedPrefer.setOnPreferenceChangeListener(this);
stopBitsPrefer.setOnPreferenceChangeListener(this);
}
@Override
publicboolean onPreferenceChange(Preference preference, Object newValue) {
if(preference ==dataBitsPrefer){
dataBitsValues = newValue;
}elseif(preference ==eventPrefer){
eventValues = newValue;
}elseif(preference ==speedPrefer){
speedValues = newValue;
}elseif(preference ==stopBitsPrefer){
stopbitsValues = newValue;
}
Log.i(TAG,"newValue:"+newValue);
returnfalse;
}
@Override
protectedvoid onPause() {
super.onPause();
UARTCTLManager mUartctlManager = UARTCTLManager.getInstance();
int databits=7,speed=9600,stopbits=1;//设置默认值
char event='N';//设置默认值
if(dataBitsValues != null){
databits = Integer.parseInt(dataBitsValues.toString());
}
if(eventValues != null){
event = eventValues.toString().charAt(0);
}
if(speedValues != null){
speed = Integer.parseInt(speedValues.toString());
}
if(stopbitsValues != null){
stopbits = Integer.parseInt(stopbitsValues.toString());
}
if(!mUartctlManager.isOpenDevice()){
mUartctlManager.openDevice();
}
Log.e(TAG,"databit="+databits+",event="+event+",speed="+speed+",stopbits="+stopbits);
if(databits == -1 || speed == -1 || stopbits == -1 || event=='Q'){
Toast.makeText(this,"有参数没有设置,不去配置串口!", Toast.LENGTH_LONG).show();
return;
}
mUartctlManager.configDevice(databits, event, speed, stopbits);
mUartctlManager.setMode(0, 1);//查看串口配置信息
// Log.e(TAG, "databit="+databits+",event="+event+",speed="+speed+",stopbits="+stopbits);
}
}- Android通过JNI操作串口《三》
- Android通过JNI操作串口
- Android通过JNI操作串口
- Android通过JNI操作串口《一》
- Android通过JNI操作串口《二》
- Android通过JNI操作串口《四》
- Android通过JNI实现与C语言的串口通讯操作蓝牙硬件模块
- Android - JNI 串口通信
- android 串口通讯 JNI
- 浅析android下如何通过jni监控wifi(三)
- android 串口jni 开发流程
- Android Studio 串口jni开发
- Android开发之jni串口
- Android开发之jni串口
- android JNI 系列 三
- android JNI学习三
- android jni 编程 三
- Android JNI操作指南
- 后知后觉的思考
- 多线程编程4 - GCD
- 王宪明的文章:Android4.2锁屏流程【Android锁屏解析三】
- 2014-04-04
- C#调用mysql存储过程方法
- Android通过JNI操作串口《三》
- UVaOJ_10405 - Longest Common Subsequence
- 获取ios设备所有图片
- redhat5.1的samba的配置及安装
- svn diff
- 多线程编程3 - NSOperationQueue
- 通过批处理来操作samba
- Android通过JNI操作串口《四》
- 6