String über USB einlesen

  • Antworten:6
Peter Parker
  • 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
Peter Parker
  • 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
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

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
Peter Parker
  • 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
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.09.2014, 12:06:17 via Website

Doch du kannst debuggen.
Wenn auch etwas umständlich:
https://play.google.com/store/apps/details?id=com.ryosoftware.adbw&hl=de
Das tool sollte dir beim debuggen helfen.
Ist beim App istalieren zwar etwas langsam, aber besser als gar keine Debug möglichkeit.

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

Antworten