2015-05-21 23 views
3

我有這個java代碼,當我點擊一個按鈕,我得到我的串行USB數據使用FTDI(FT232R)芯片,我可以在我的應用程序屏幕上顯示我讀取的值,FTDI芯片完美的作品。如何連續讀取FTDI USB數據? - (FTDI的作品和應用程序測試)

package com.application.i; 


import java.io.UnsupportedEncodingException; 

import jp.ksksue.driver.serial.FTDriver; 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.usb.UsbManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class FTDI extends Activity{ 
// [FTDriver] Object 
FTDriver mSerial; 

// [FTDriver] Permission String 
private static final String ACTION_USB_PERMISSION = "jp.ksksue.tutorial.USB_PERMISSION"; 

Button btnRead; 
TextView Monitor,Monitor2,Monitor3; 
TextView val,val2,val3; 
TextView indicator; 
StringBuffer mText1 = new StringBuffer(); 
int i,len; 
String Text=null, d1=null, d2=null, d3=null; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ftdisub); 

btnRead = (Button) findViewById(R.id.btnRead); 
Monitor = (TextView)findViewById(R.id.onitor); 
Monitor2 = (TextView)findViewById(R.id.onitor2); 
Monitor3 = (TextView)findViewById(R.id.onitor3); 
val = (TextView)findViewById(R.id.dec); 
val2 = (TextView)findViewById(R.id.dec2); 
val3 = (TextView)findViewById(R.id.dec3); 
indicator = (TextView)findViewById(R.id.indicator); 

// [FTDriver] Create Instance 
mSerial = new FTDriver((UsbManager)getSystemService(Context.USB_SERVICE)); 



// [FTDriver] setPermissionIntent() before begin() 
PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); 
mSerial.setPermissionIntent(permissionIntent); 

// [FTDriver] Open USB Serial 
if(mSerial.begin(FTDriver.BAUD115200)) { 
             btnRead.setEnabled(true); 

             Toast.makeText(this, "connected", Toast.LENGTH_SHORT).show(); 
             } else { 
               Toast.makeText(this, "cannot connect", Toast.LENGTH_SHORT).show(); 
               } 




} 




@Override 
public void onDestroy() { 
         super.onDestroy(); 
         // [FTDriver] Close USB Serial 
         mSerial.end(); 
         } 

public void onReadClick(View view) throws UnsupportedEncodingException { 





     // [FTDriver] Create Read Buffer 
     byte[] rbuf = new byte[27]; // 1byte <--slow-- [Transfer Speed] --fast--> 4096 byte 

     // [FTDriver] Read from USB Serial 
     len = mSerial.read(rbuf); 

     for(i=0; i<len; i++) { 
          mText1.append((char) rbuf[i]); 
          } 

     Text = mText1.toString(); //Text=string with the buffer value. 
     String[] Splited = Text.split("#"); 


     Long r = Long.parseLong(Splited[1], 16); 
     Float f1 = Float.intBitsToFloat(r.intValue()); 
     d1 = f1.toString(); 
     val.setText(d1); 


     Long r2 = Long.parseLong(Splited[2], 16); 
     Float f2 = Float.intBitsToFloat(r2.intValue()); 
     d2 = f2.toString(); 
     val2.setText(d2); 


     Long r3 = Long.parseLong(Splited[3], 16); 
     Float f3 = Float.intBitsToFloat(r3.intValue()); 
     d3 = f3.toString(); 
     val3.setText(d3); 

     String[] Fields = {d1,d2,d3}; 

     rbuf = null; 

    } 





} 

Poroblem: 我的應用程序需要讀取所有的時間(背景Service)的USB數據,我的指標是把它作爲一個Activity現在看到的值讀取所有的時間,問題是,我無法從onReadClick中獲取代碼。 我試圖把它放在:onStart,onResume, FTDI()方法。 到目前爲止還沒有工作。

要說清楚,我的目標是: 1.使FTDI讀取爲激活FTDI Activity,不涉及任何按鈕。 2.創建一個「讀取循環」,從FTDI芯片一直獲取數據。

+0

需要幫助的傢伙! –

回答

0

SOLUTION: 第二次在我的申請。這是關於時間安排,需要將onReadClick設置爲onResume並設置休眠時間以讓FTDIdriver初始化。 我改變了代碼,現在它的工作:

package com.application.i; 


import java.io.UnsupportedEncodingException; 

import jp.ksksue.driver.serial.FTDriver; 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.usb.UsbManager; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class FTDI extends Activity{ 
// [FTDriver] Object 
FTDriver mSerial; 

// [FTDriver] Permission String 
private static final String ACTION_USB_PERMISSION = "jp.ksksue.tutorial.USB_PERMISSION"; 

Button btnRead; 
TextView Monitor,Monitor2,Monitor3; 
TextView val,val2,val3; 
TextView indicator; 
StringBuffer mText1 = new StringBuffer(); 
int i,len; 
String Text=null, d1=null, d2=null, d3=null; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ftdisub); 

btnRead = (Button) findViewById(R.id.btnRead); 
Monitor = (TextView)findViewById(R.id.onitor); 
Monitor2 = (TextView)findViewById(R.id.onitor2); 
Monitor3 = (TextView)findViewById(R.id.onitor3); 
val = (TextView)findViewById(R.id.dec); 
val2 = (TextView)findViewById(R.id.dec2); 
val3 = (TextView)findViewById(R.id.dec3); 
indicator = (TextView)findViewById(R.id.indicator); 

// [FTDriver] Create Instance 
mSerial = new FTDriver((UsbManager)getSystemService(Context.USB_SERVICE)); 



// [FTDriver] setPermissionIntent() before begin() 
PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); 
mSerial.setPermissionIntent(permissionIntent); 

// [FTDriver] Open USB Serial 
if(mSerial.begin(FTDriver.BAUD115200)) { 
             // btnRead.setEnabled(true); 

             Toast.makeText(this, "connected", Toast.LENGTH_SHORT).show(); 
             } else { 
               Toast.makeText(this, "cannot connect", Toast.LENGTH_SHORT).show(); 
               } 




} 




@Override 
public void onDestroy() { 
         super.onDestroy(); 
         // [FTDriver] Close USB Serial 
         mSerial.end(); 
         } 

public void onResume() { 


super.onResume(); 


     // [FTDriver] Create Read Buffer 
     byte[] rbuf = new byte[27]; // 1byte <--slow-- [Transfer Speed] --fast--> 4096 byte 


    try { 
     Thread.sleep(300); 
     } catch (InterruptedException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
             } 

     // [FTDriver] Read from USB Serial 
     len = mSerial.read(rbuf); 

     for(i=0; i<len; i++) { 
          mText1.append((char) rbuf[i]); 
          } 

     Text = mText1.toString(); //Text=string with the buffer value. 
     String[] Splited = Text.split("#"); 


     Long r = Long.parseLong(Splited[1], 16); 
     Float f1 = Float.intBitsToFloat(r.intValue()); 
     d1 = f1.toString(); 
     val.setText(d1); 


     Long r2 = Long.parseLong(Splited[2], 16); 
     Float f2 = Float.intBitsToFloat(r2.intValue()); 
     d2 = f2.toString(); 
     val2.setText(d2); 


     Long r3 = Long.parseLong(Splited[3], 16); 
     Float f3 = Float.intBitsToFloat(r3.intValue()); 
     d3 = f3.toString(); 
     val3.setText(d3); 

     String[] Fields = {d1,d2,d3}; 

     rbuf = null; 

    } 





} 

PS: 我從這次嘗試學到的最重要的事情是亞行的wifi調試,使用USB主機時,你不能調試您的手機,因爲USB端口忙於配件電路。 簡單的解決方案在這裏:Debugging considerations在鏈接的末尾。 當您輸入手機的IP後,按回車鍵並確認後,從手機上拔下USB,然後在Eclipse上按run。 只需按照以下步驟操作即可。如果需要將電話重新設置爲USB電纜調試,只需關閉和打開手機,直到您設法處理adb。 adb阻止手機被您的計算機識別。如果您還不熟悉adb功能,重新啓動手機將使事情恢復正常,只需關閉電源即可。

希望它幫助了某人。