String über USB einlesen

  • Antworten:6
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 36

29.07.2014, 15:55:10 via Website

Hallo,

ich würde gerne einen Datenstring von RS232 über USB einlesen. Dabei bin ich auf das Digitus Android zu RS232-Kabel gestoßen. Leider habe ich keinen Ansatz wie ich das bewerkstelligen könnte. Kann mir jemand helfen?

Vielen Dank!

Antworten
  • Forum-Beiträge: 36

04.09.2014, 10:27:40 via Website

Ich habe jetzt folgenden Code:

public class MainActivity extends Activity {

(...)
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /* create editable text objects */
    readText = (EditText) findViewById(R.id.ReadValues);
    writeText = (EditText) findViewById(R.id.WriteValues);

    writeButton = (Button) findViewById(R.id.WriteButton);

    /* allocate buffer */
    writeBuffer = new byte[64];
    readBuffer = new byte[4096];
    readBufferToChar = new char[4096]; 
    actualNumBytes = new int[1];


    /* handle write click */
    writeButton.setOnClickListener(new View.OnClickListener() {

        // @Override
        public void onClick(View v) {

            if (writeText.length() != 0x00)
            {
                writeData();
            }
        }
    });

    uartInterface = new FT311UARTInterface(this);   
    uartInterface.SetConfig(baudRate, dataBit, stopBit, parity, flowControl);

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    handlerThread = new handler_thread(handler);
    handlerThread.start();



}


final Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {

        for(int i=0; i<actualNumBytes[0]; i++)
        {
            readBufferToChar[i] = (char)readBuffer[i];
        }
        appendData(readBufferToChar, actualNumBytes[0]);
    }
};

/* usb input data handler */
private class handler_thread extends Thread {
    Handler mHandler;

    /* constructor */
    handler_thread(Handler h) {
        mHandler = h;
    }

    public void run() {
        Message msg;

        while (true) {

            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
            }

            status = uartInterface.ReadData(4096, readBuffer,actualNumBytes);

            if (status == 0x00 &amp;&amp; actualNumBytes[0] > 0) {
                msg = mHandler.obtainMessage();
                mHandler.sendMessage(msg);
            }

        }
    }
}



public void writeData()
{
    String srcStr = writeText.getText().toString();     
    String destStr = "";

    String[] tmpStr = srcStr.split(" ");

}



public void appendData(char[] data, int len)
{
    if(len >= 1)         
        readSB.append(String.copyValueOf(data, 0, len));

        char[] ch = readSB.toString().toCharArray();
        String temp;
        StringBuilder tmpSB = new StringBuilder();

        readText.setText(tmpSB);

}

}

Allerdings funktioniert das noch nicht. Kann jemand helfen?

Antworten
  • Forum-Beiträge: 11.154

04.09.2014, 10:53:31 via Website

Mit Funktioniert nicht kann ich nicht viel anfangen.
Was funktioniert nicht?
Debuge deinen Code und mache ausgaben!
Kommen im Buffer überhaupt daten an?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 36

04.09.2014, 10:56:08 via Website

Ich kann nicht debuggen, da ich ja das Digitus Kabel im einzigen Anschluss habe. Deshalb weiß ich auch nicht wo es "hängt" und kann nicht genauer fragen.

Antworten