Tiny6410 Android 2.3 串口通信,终端那边设置的是1s发一个信息,为什么6410接收 一会是对的 一会是错的呢?而且 read 返回的值 一直是0呢? 接收正常的时候read 也是 返回0 。
代码:
package com.example.test;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.friendlyarm.AndroidSDK.HardwareControler;
public class SerialPortActivity extends Activity
{
private static final String[] serial_port={"/dev/s3c2410_serial0","/dev/s3c2410_serial1","/dev/s3c2410_serial2","/dev/ttyUSB0","/dev/ttyUSB1","/dev/ttyUSB2","/dev/ttyUSB3"};
private static final String[] baud_rate={"4800","9600","19200","115200"};
TextView chooseserialPortView;
TextView choosebaudRateView;
TextView commucationView;
EditText editmsg;
Button beginbutton;
private Button stopButton;
private Button sendButton;
private Spinner choose_serialport;
private Spinner choose_baudrate;
private ArrayAdapter<String> serialportAdapter;
private ArrayAdapter<String> baudrateAdaptera;
private int fd = 0;
String thread = "readThread";
String choosed_serial = "/dev/s3c2410_serial1";
int choosed_buad = 115200;
// byte[] buf= new byte[900];
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
chooseserialPortView = (TextView)findViewById(R.id.choose_serialPort_text);
choose_serialport = (Spinner)findViewById(R.id.choose_seriaPort_spinner);
chooseserialPortView = (TextView)findViewById(R.id.choose_baudRate_text);
choose_baudrate = (Spinner)findViewById(R.id.choose_baudRate_spinner);
beginbutton = (Button)findViewById(R.id.beginButton);
// savebutton = (Button)findViewById(R.id.saveButton);
commucationView = (TextView)findViewById(R.id.commucation_window);
commucationView.setMovementMethod(ScrollingMovementMethod.getInstance()); //让textview实现滚动
editmsg = (EditText)findViewById(R.id.editmsg);
serialportAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,serial_port);//建立下拉控件的适配器
baudrateAdaptera = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,baud_rate);
serialportAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
baudrateAdaptera.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
choose_serialport.setAdapter(serialportAdapter);//连接控件和适配器
choose_baudrate.setAdapter(baudrateAdaptera);
choose_serialport.setSelection(2);
choose_baudrate.setSelection(2);
choose_serialport.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
choosed_serial = serial_port[arg2];
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
choose_baudrate.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
choosed_buad = Integer.parseInt(baud_rate[arg2]);
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
beginbutton.setOnClickListener(new OnClickListener() { //打开串口按钮 并且直接监听串口消息
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
fd = HardwareControler.openSerialPort(choosed_serial,choosed_buad, 8, 1);//打开串口
if (fd != -1) {
Toast.makeText(getApplicationContext(), getResources().getString(R.string.open_serial_success)+choosed_serial, 1).show();
} else{
Toast.makeText(getApplicationContext(), getResources().getString(R.string.open_fail), 1).show();
}
new readThread().start();
}
});
stopButton = (Button)findViewById(R.id.stopButton);
stopButton.setOnClickListener(new ClickEvent());
sendButton = (Button)findViewById(R.id.sendButton);//发送消息
sendButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
//输入框发送报文
// HardwareControler.write(fd, editmsg.getText().toString().getBytes());
// commucationView.append("自己发送: "+editmsg.getText().toString().getBytes()+"\n");
//直接调用数据包
// HardwareControler.write(fd,MsgPacket.mtSendVersion);
// HardwareControler.write(fd,MsgPacket.mtHeadCommand);
HardwareControler.write(fd,MsgPacket.mtSendData);
System.out.println("发送数据信息3333333333333333333333");
new readThread().start();
}
});
}
public class ClickEvent implements Button.OnClickListener//退出
{
public void onClick(View arg0) {
// TODO Auto-generated method stub
HardwareControler.close(fd);//关闭串口
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);
}
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.arg1) {
case 0:
byte[] buf= new byte[300];
int len = HardwareControler.read(fd, buf, 300);
// String string = new String(buf, 0, len);
// commucationView.append(string+"\n");
// System.out.println("Sonar: "+buf+" "+len);
DataConvert dc = new DataConvert();
String msgpacket11 = dc.bytesToHexString(buf);
commucationView.append(msgpacket11);
System.out.println("Sonar: "+msgpacket11);
System.out.println("len: "+len);
MsgPacketHandle mph = new MsgPacketHandle();
if(mph.mtAliveHandler(buf)){
System.out.println("成功监听mtAlive,可在此处理流程图!");
}
new readThread().start();
break;
case 1:
new readThread().start();
break;
default:
break;
}
}
};
class readThread extends Thread//读取串口信息线程
{
public void run()
{
Message msg = new Message();
if (HardwareControler.select(fd,1,0)==1) {
msg.arg1 = 0;
System.out.println("开始 select0");
}
else {
msg.arg1 =1;
System.out.println("开始 select1");
}
handler.sendMessage(msg);
}
}
}