Android串口通信(基于Tiny6410平台)

简介: <p><span style="color:rgb(102,102,102); font-family:宋体,Arial; font-size:16px; line-height:26px"><span style="font-family:Arial; font-size:14px; line-height:26px">更多信息请移步:</span><a target="_blank"
+关注继续查看

更多信息请移步:http://xiebaochun.github.io/

友善之臂的Android系统有他们自己编写的一个串口通信程序,网上没有找到他的源代码,而且界面操作不在一个界面,不是很方便,这里我自己写了一个粗糙点的串口通信程序。

同样这里还是调用友善之臂的friendlyarm-hardware.so库文件。
在Android工程文件下面加入com.friendlyarm.androidSDK包,在其下添加HardwareControler.java。下面我把我做的截图发上来。
                                                 
主程序代码:
  1. package geekle.lab;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.text.method.ScrollingMovementMethod;
  7. import android.util.Log;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.view.WindowManager;
  11. import android.widget.AdapterView;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.Spinner;
  16. import android.widget.TextView;
  17. import android.widget.Toast;

  18. import com.friendlyarm.AndroidSDK.HardwareControler;

  19. public class SerialPortActivity extends Activity
  20. {
  21.     private static final String[] serial_port={"/dev/s3c2410_serial0","/dev/s3c2410_serial1","/dev/s3c2410_serial2"};
  22.     private static final String[] baud_rate={"4800","9600","19200","115200"};
  23.     
  24.     TextView chooseserialPortView;
  25.     TextView choosebaudRateView;
  26.     TextView commucationView;
  27.     EditText editmsg;
  28.     private Button stopButton;
  29.     private Button sendButton;
  30.     private Spinner choose_serialport;
  31.     private Spinner choose_baudrate;
  32.     private ArrayAdapter<String> serialportAdapter;
  33.     private ArrayAdapter<String> baudrateAdaptera;
  34.     
  35.     private int fd = 0;
  36.     String thread = "readThread";
  37.     String choosed_serial = "/dev/s3c2410_serial2";
  38.     int choosed_buad = 19200;
  39.     byte[] buf= new byte[300];

  40.     /** Called when the activity is first created. */
  41.     @Override
  42.     public void onCreate(Bundle savedInstanceState)
  43.     {
  44.         super.onCreate(savedInstanceState);
  45.         setContentView(R.layout.main);
  46.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
  47.         chooseserialPortView = (TextView)findViewById(R.id.choose_serialPort_text);
  48.         choose_serialport = (Spinner)findViewById(R.id.choose_seriaPort_spinner);
  49.         chooseserialPortView = (TextView)findViewById(R.id.choose_baudRate_text);
  50.         choose_baudrate = (Spinner)findViewById(R.id.choose_baudRate_spinner);
  51.                 
  52.         serialportAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,serial_port);//建立下拉控件的适配器
  53.         baudrateAdaptera = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,baud_rate);
  54.         serialportAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
  55.         baudrateAdaptera.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
  56.         choose_serialport.setAdapter(serialportAdapter);//连接控件和适配器
  57.         choose_baudrate.setAdapter(baudrateAdaptera);
  58.         choose_serialport.setSelection(2);
  59.         choose_baudrate.setSelection(2);
  60.         
  61.         choose_serialport.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
  62.         {
  63.             
  64.             public void onItemSelected(AdapterView<?> arg0, View arg1,
  65.                     int arg2, long arg3) {
  66.                 // TODO Auto-generated method stub
  67.                 choosed_serial = serial_port[arg2];
  68.             }

  69.             public void onNothingSelected(AdapterView<?> arg0) {
  70.                 // TODO Auto-generated method stub
  71.                 
  72.             }
  73.             
  74.         });
  75.             
  76.         choose_baudrate.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
  77.         {
  78.             
  79.             public void onItemSelected(AdapterView<?> arg0, View arg1,
  80.                     int arg2, long arg3) {
  81.                 // TODO Auto-generated method stub
  82.                 choosed_buad = Integer.parseInt(baud_rate[arg2]);
  83.             }

  84.             public void onNothingSelected(AdapterView<?> arg0) {
  85.                 // TODO Auto-generated method stub
  86.                 
  87.             }
  88.             
  89.         });
  90.         fd = HardwareControler.openSerialPort(choosed_serial,choosed_buad, 8, 1);//打开串口
  91.         if (fd != -1) {
  92.             Toast.makeText(getApplicationContext(), getResources().getString(R.string.open_serial_success)+choosed_serial, 1).show();
  93.         } else {
  94.             Toast.makeText(this, getResources().getString(R.string.open_fail), 1).show();
  95.         }
  96.         stopButton = (Button)findViewById(R.id.stopButton);
  97.         stopButton.setOnClickListener(new ClickEvent());
  98.         
  99.         sendButton = (Button)findViewById(R.id.sendButton);//发送消息
  100.         sendButton.setOnClickListener(new OnClickListener() {
  101.             
  102.             public void onClick(View arg0) {
  103.                 // TODO Auto-generated method stub
  104.                 HardwareControler.write(fd, editmsg.getText().toString().getBytes());
  105.                 commucationView.append(editmsg.getText()+"\n");
  106.             }
  107.         });

  108.         commucationView = (TextView)findViewById(R.id.commucation_window);
  109.         commucationView.setMovementMethod(ScrollingMovementMethod.getInstance()); //让textview实现滚动
  110.         editmsg = (EditText)findViewById(R.id.editmsg);
  111.         
  112.         new readThread().start();//开始串口的监听线程
  113.         
  114.     }
  115.     
  116.     public class ClickEvent implements Button.OnClickListener//退出
  117.     {
  118.         public void onClick(View arg0) {
  119.             // TODO Auto-generated method stub
  120.             android.os.Process.killProcess(android.os.Process.myPid());
  121.             System.exit(0);
  122.         }
  123.     }
  124.     Handler handler = new Handler() {
  125.         public void handleMessage(Message msg) {
  126.             switch (msg.arg1) {
  127.             case 0:
  128.                 int len = HardwareControler.read(fd, buf, 300);    
  129.                 String string = new String(buf, 0, len);
  130.                 commucationView.append(string+"\n");
  131.                 new readThread().start();//处理完消息后立即开启监听线程
  132.                 Log.d(thread,"接收到数据,新线程启动");
  133.                 break;
  134.             case 1:
  135.                 HardwareControler.setLedState(1, 0);
  136.                 new readThread().start();
  137. //                Log.d(thread,"没有数据,新线程启动");
  138.                 break;
  139.             default:
  140.                 break;
  141.             }
  142.         }
  143.     };
  144.     
  145.     class readThread extends Thread//读取串口信息线程
  146.     {        
  147.         public void run()
  148.         {
  149.             Message msg = new Message();
  150.             HardwareControler.setLedState(0, 0);
  151.             if (HardwareControler.select(fd,5, 0)==1) {            
  152.                 msg.arg1 = 0;            
  153.             }
  154.             else {
  155.                 msg.arg1 =1;
  156.                 HardwareControler.setLedState(0, 1);
  157.             }
  158.             handler.sendMessage(msg);
  159.         }
  160.     }
  161. }
main.xml代码:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="fill_parent"
  4.     android:layout_height="fill_parent"
  5.     android:orientation="vertical" >

  6.     <TextView
  7.         android:id="@+id/choose_serialPort_text"
  8.         android:layout_width="fill_parent"
  9.         android:layout_height="wrap_content"
  10.         android:text="@+string/chooseserialPort" />

  11.     <Spinner
  12.         android:id="@+id/choose_seriaPort_spinner"
  13.         android:layout_width="wrap_content"
  14.         android:layout_height="40dp" >
  15.     </Spinner>

  16.     <TextView
  17.         android:id="@+id/choose_baudRate_text"
  18.         android:layout_width="wrap_content"
  19.         android:layout_height="wrap_content"
  20.         android:text="@+string/choosebaudRate" />

  21.     <Spinner
  22.         android:id="@+id/choose_baudRate_spinner"
  23.         android:layout_width="wrap_content"
  24.         android:layout_height="40dp" >
  25.     </Spinner>


  26.          <TextView
  27.           android:id="@+id/commucation_window"
  28.           android:layout_width="fill_parent"
  29.           android:layout_height="190dp" >
  30.          </TextView>
  31.     <EditText
  32.         android:id="@+id/editmsg"
  33.         android:layout_width="fill_parent"
  34.         android:layout_height="wrap_content"
  35.         android:hint="edit here" />

  36.     <LinearLayout
  37.         android:layout_width="fill_parent"
  38.         android:layout_height="wrap_content"
  39.         android:layout_weight="1"
  40.         android:orientation="horizontal" >

  41.         <Button
  42.             android:id="@+id/sendButton"
  43.             android:layout_width="wrap_content"
  44.             android:layout_height="wrap_content"
  45.             android:layout_weight="1"
  46.             android:text="@+string/send" />

  47.         <Button
  48.             android:id="@+id/stopButton"
  49.             android:layout_width="wrap_content"
  50.             android:layout_height="wrap_content"
  51.             android:layout_weight="1"
  52.             android:text="@string/stopButton" />
  53.     </LinearLayout>

  54. </LinearLayout>
相关文章
|
3天前
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
19 1
|
3天前
|
编解码 Android开发
用PS为网迅安卓公司设计基于安卓平台的手机应用图标
用PS为网迅安卓公司设计基于安卓平台的手机应用图标
|
21天前
|
缓存 Android开发 C++
[√]Android平台ParticleSystem内存泄露的排查过程
[√]Android平台ParticleSystem内存泄露的排查过程
15 1
|
28天前
|
测试技术 数据库 Android开发
0008Java安卓程序设计-ssm基于Android平台的健康管理系统
0008Java安卓程序设计-ssm基于Android平台的健康管理系统
13 0
|
2月前
|
存储 JavaScript Java
Cocos Creator Android 平台 Google 原生登录(二)
Cocos Creator Android 平台 Google 原生登录
|
2月前
|
API 开发工具 Android开发
Cocos Creator Android 平台 Google 原生登录(一)
Cocos Creator Android 平台 Google 原生登录
|
2月前
|
JavaScript Java 开发工具
Cocos Creator Android 平台接入 Google Firebase (Analytics功能)(二)
Cocos Creator Android 平台接入 Google Firebase (Analytics功能)
|
2月前
|
Android开发 开发者
Cocos Creator Android 平台接入 Google Firebase (Analytics功能)(一)
Cocos Creator Android 平台接入 Google Firebase (Analytics功能)
|
2月前
|
JavaScript Java Android开发
Cocos Creator Android 平台 Facebook 原生登录(二)
Cocos Creator Android 平台 Facebook 原生登录
|
2月前
|
开发工具 Android开发 数据安全/隐私保护
Cocos Creator Android 平台 Facebook 原生登录(一)
Cocos Creator Android 平台 Facebook 原生登录
120 0
相关产品
云迁移中心
推荐文章
更多