主题 : Tiny6410 Android 2.3 串口通信read 值返回问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 83239
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-12-04
最后登录: 2014-12-05
楼主  发表于: 2012-12-09 09:36

 Tiny6410 Android 2.3 串口通信read 值返回问题

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);
            }
    }
}
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2012-12-09 09:54
串口0已经被用于console
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 83239
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-12-04
最后登录: 2014-12-05
2楼  发表于: 2012-12-09 11:32

 回 1楼(mindee) 的帖子

我选的是串口1,应该不是串口的问题吧?就是有时候能够接手正确,有时候不能。