Androidのライブラリを使用してターミナルエミュレータに接続しようとしています。これによりシリアルデバイスに接続され、送受信されたデータが表示されます。inputStream
ターミナルセッションに接続するには、 tosetTermIn(InputStream)
とoutputStream
toを指定する必要がありますsetTermOut(OutputStream)
。
のようにいくつかのストリームを初期化してアタッチしますonCreate()
。これらは単なる初期ストリームであり、送受信したいデータにアタッチされていません。
private OutputStream bos;
private InputStream bis;
...
byte[] a = new byte[4096];
bis = new ByteArrayInputStream(a);
bos = new ByteArrayOutputStream();
session.setTermIn(bis);
session.setTermOut(bos);
/* Attach the TermSession to the EmulatorView. */
mEmulatorView.attachSession(session);
データを送受信するときに、ストリームをデータに割り当てたいと思います。Enterキーを押すたびに呼び出すsendData()メソッドには、次のものがあります。
public void sendData(byte[] data)
{
bos = new ByteArrayOutputStream(data.length);
}
また、onReceiveData()メソッドでは、データがシリアルで受信されるたびに呼び出されます。
public void onDataReceived(int id, byte[] data)
{
bis = new ByteArrayInputStream(data);
}
ただし、ByteArrayInputStream
は与えられたデータしか持つことができないため、データの送受信時に常に作成する必要があります。問題は、このデータを端末に表示したいのですが、データにbisを割り当てると、電話をかけたときのようにデータが添付されなくなります。mEmulatorView.attachSession(session);
ビスが端末に持っているバインドを壊すことなく、ビスが指しているものを更新する方法はありますか?
編集:また、アタッチを再度呼び出そうとするとエラーが発生しますが、理想的には再度呼び出したくないなどです。
SerialTerminalActivity.this.runOnUiThread(new Runnable() {
public void run() {
mSession.setTermIn(bis);
mSession.setTermOut(bos);
mEmulatorView.attachSession(mSession);
}
});
それが私のコーディングかもしれませんが。 http://i.imgur.com/de8D5.png