FTDI Android - 创建新活动

时间:2014-06-27 18:20:10

标签: android multithreading hardware ftdi

此代码能够将Android设备作为硬件模型的USB主机。它还可以在Main Activity中正确读取硬件中的数据。但是,只要我将其移动到另一个活动,一切仍然有效,但数据读取不正确。 例如,我试图将读取的数据写入文件。第一个活动是输入文件名,只输入一个按钮发送到另一个活动。以下代码位于第二个活动

public class Temp extends Activity {
private FileOutputStream outputStream;

public static D2xxManager ftD2xx= null;

Handler mHandler = new Handler();

FT_Device ftDev = null;
int devCount = 0;
UsbDevice device = null;
TextView Text =null;
String temp = null;

_4DPoint P = null;

 int rd = 0;
byte[] byt = null;
byte[] Fdata = null;

String outp = "";
String From_Serial = "";
int Min = -1;

String fileName;
Context c;

final Runnable updateResults = new Runnable() {

    @Override
    public void run() {
        // TODO Auto-generated method stub
         Text.setText("" + Min + '\n' + temp);          
    }
};

public void getData(){
    try {

        outputStream = openFileOutput(fileName, Context.MODE_PRIVATE);
         byt = new byte[256];//{(byte)'a','b','c','d',};
         Toast.makeText(getBaseContext(), "start " + fileName , Toast.LENGTH_LONG).show();


        Text = (TextView)findViewById(R.id.test2);

        device = (UsbDevice) getIntent().getParcelableExtra("USB");
        ftD2xx = D2xxManager.getInstance(c);
        ftD2xx.addUsbDevice(device);


        devCount = ftD2xx.createDeviceInfoList(c);
            if (devCount > 0) {
                ftDev = ftD2xx.openByUsbDevice(c, device);
            }
            if( ftDev.isOpen() == true ) {
                ftDev.setBitMode((byte)0 , D2xxManager.FT_BITMODE_RESET);
                ftDev.setBaudRate(38400);
                ftDev.setDataCharacteristics(D2xxManager.FT_DATA_BITS_8, D2xxManager.FT_STOP_BITS_1, D2xxManager.FT_PARITY_NONE);
                ftDev.setFlowControl(D2xxManager.FT_FLOW_NONE, (byte) 0x0b, (byte) 0x0d);

                Thread t = new Thread() {
                    public void run() {

                        int i;
                        while(true){
                            rd=0;

                            while (rd==0){
                                    rd = ftDev.read(byt, 14);
                            }

                            for(i=0; i<rd; i++) 
                                outp += (char)byt[i];

                            From_Serial = new String(outp);
                            P = new _4DPoint(From_Serial);
                            temp = String.format("%s: %f %f %f %f %d\n", From_Serial, P.R, P.G, P.B, P.L, P.camera);
                            try {
                                outputStream.write(temp.getBytes());
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            outp = "";

                            mHandler.post(updateResults);
                        }
                    }
                };

                t.start();
            }
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (D2xxException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_color);
    // Show the Up button in the action bar.
    setupActionBar();
    Intent intent = getIntent();
    fileName = intent.getStringExtra("File Name");
    c = this;
    getData();
}

设置应该没问题,因为它从硬件读取数据,但读取的数据不正确。 另外,我想知道为什么我们需要在读取数据时创建新线程。我尝试不创建新的线程并且它不能很好地工作,但仍然不知道为什么?我试图联系编写代码的人来阅读数据,但没有回复。 任何帮助将非常感激:)

1 个答案:

答案 0 :(得分:0)

您声明您收到了数据,因此我认为您应该查看您的ftDev设置。例如,尝试设置ftDev.setBaudRate(115200)(这适用于我)或尝试使用其他ftDev设置稍微玩一下。

我在程序中使用的设置是:

int baudRate = 115200;
byte stopBit = 1; /*1:1stop bits, 2:2 stop bits*/
byte dataBit = 8; /*8:8bit, 7: 7bit*/
byte parity = 0;  /* 0: none, 1: odd, 2: even, 3: mark, 4: space*/
byte flowControl = 1; /*0:none, 1: flow control(CTS,RTS)*/

如果这不起作用,首先用计算机程序检查这种数据通信是明智的。或者分析那些错误的错误&#39;数据