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!
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!
Also im Groben:
USB-Port öffnen
Input Stream darauf legen
Auf Daten warten
Schonmal danke für diese erste Rückmeldung.
Wie kann ich den USB Port öffnen? Ein Beispielprojekt wäre echt super, weil ich keinen Ansatz finde...
Da gibts was von Android selbst:
Zum Einen einen ziemlich speziellen Missile Launcher.
https://github.com/android/pla…mples/USB/MissileLauncher
Zum Anderen einen etwas allgemeineren AdbTest.
https://github.com/android/pla…aster/samples/USB/AdbTest
Beide werden im USB Host Dokument der Android Dokumentation erwähnt:
http://developer.android.com/g…onnectivity/usb/host.html
Hinweis:
Dokumentation und Sourcen sind 'arschalt'. In Zahlen: 3 Jahre und auf Android 3.1 angepasst.
In den normalen Android Sample Codes sind sie auch gar nicht mehr zu finden, lediglich in den Samples der Android Sourcen liegen sie noch rum.
Es kann also gut sein, dass viele Dinge davon so nicht mehr funktionieren.
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 = (char)readBuffer;
}
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 && 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);
}
}
Alles anzeigen
Allerdings funktioniert das noch nicht. Kann jemand helfen?
Nicht bei der Fragestellung.
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.
Dann ist entweder Dein Setup oder Deine App zum Debug ungeeignet.
Ich sehe da erst mal drei Möglichkeiten:
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!