web-dev-qa-db-ja.com

AndroidでシリアルポートRS-232を使用していますか?

AndroidデバイスのJavaComm APIクラスを使用してシリアルポート経由で信号を送信したいのですが、ここに想像します:

1- Androidデバイスは:Android 2.2およびUSBホストモードを備えたArchos 3.2です。

2- RxTx libパッケージをmy Android app。でインクルードし、Android NDK。

3- USB->シリアルの短いケーブル。

問題が発生する可能性のある場所を教えていただけませんか。

18
rami

私はJavaCOMM(GNU RXTX)ライブラリをAndroidに移植しました。ここにリンクがあります http://v-lad.org/projects/gnu.io.Android/

それでもカーネルを再構築し、環境に合わせて共有ライブラリを再コンパイルする必要があるかもしれません。しかし、これで始められるはずです。

12
Vlad

上記のように、お持ちのUSB <-> Serialデバイス用のデバイスドライバーを用意する必要があります。これらのデバイスの多くは、Prolific PL2303チップを使用しています。

http://www.qbik.ch/usb/devices/showdr.php?id=175

ストックLinuxカーネルはこれをサポートしており、長い間使用されてきました。私はこれを使用しており、正常に動作するため、このチップを使用するUSB​​ <-> Serialデバイスを使用することをお勧めします。

さらに、udevでは、これらのデバイスは通常/ dev/ttyUSB#として表示されます。 Androidでそれがどのように起こるかはわかりません。そのため、それを理解する必要があります。

最後に、RxTxネイティブコードをビルドする必要があります。このコードはかなり無作法です-かなり現代的なAngstromでコードをビルドするのに問題があり、クロスコンパイルをまったく試みていませんでした。

3
TazMainiac

はい、Androidの電話側からシリアルデバイスを使用することは間違いなく混乱です。問題は、AOSに存在するさまざまなデバイスが文書化されておらず、標準のLinuxのデバイスと一致することがほとんどないことです。したがって、実際に何と/誰と話しているのか、デバイス、アブストラクションレイヤー(HAL、UART、PCIなど)は決してわかりません。これは、外部USB接続PCからシリアルデバイス(モデム)と通信する方法に関するチュートリアルです。

いずれにしても、お使いの携帯電話がUSBホストモードをサポートしている場合は、それを使用してシリアルポート/デバイスにアクセスする別の方法が必要です。結局のところ、下位互換性は、多くの場合、USBケーブルからのある種のFAX、テレフォニー、または外部モデムのサポートを保証するものです。また、いくつかの仮想シリアルデバイスを含む可能性のあるテテリングもあります...

この一部についてのチュートリアルがあります here

PS。そのようなプログラム(Vladのような)とアプリケーション(serial-apiのような)の主な問題は、デバイス/ポート名、およびこれらに到達(読み取り/書き込み)するために必要なアクセス許可を非常に強く想定していることです...

2
not2qubit

通常のPCとは異なり、Androidデバイスのほとんどの標準カーネルには、コンパイルされた最小モジュールが付属しています。USBシリアルコンバーターを有効にしたドライバーでカーネルを再コンパイルする必要があります。使用しているデバイス。多くの製造元は、カーネルソースコードを提供しないため、GPLに違反しています。Droid2を搭載したMotorolaなどの一部の製造元では、署名付きカーネルが必要です。これにより、デバイスにカスタムカーネルをロードできなくなります。

また、多くのデバイスにはUSBホストモードがありますが、デバイスモードを切り替えるには、フープをジャンプする必要があります。たとえば、Motrola droidでは、電源を入れてホストモードに切り替える前に、特別なドングルをUSBポートに接続する必要があります。

ここにあなたがする必要があることを説明するあなたのためのいくつかのリンクがあります:

  1. 「ドロイドホストモードの詳細」 http://www.tombom.co.uk/blog/?p=134

  2. 「Motorola DroidのUSBホストモード」 http://www.tombom.co.uk/blog/?p=124

2
Vlad

最大の問題は、おそらくUSB->シリアルアダプターです。

Androidカーネルには含まれていない可能性が高いUSBシリアルドライバー用のデバイスドライバーが必要です。

もう1つのオプションは、libusb(Androidにも移植する必要がある場合があります)などのようなものと、libusbに基づくユーザースペースドライバーを使用することです。

1
plaisthos

おそらくあなたが探しているものとは正確には違うかもしれませんが、 this instructable はあなたを正しい方向に導くかもしれません

1
Stewart Murrie

私はこれをやった。次のことを行う必要があります。1.デバイスをルート化します。

  1. 使用する特定のUSBチセット用に独自のモジュールを作成します。 Android用のカーネルモジュールの構築

  2. PL2303ドライバーが既に実装されている移植されたusb-serial-for-Androidライブラリの使用をお勧めします: https://code.google.com/r/felixhaedicke-usb-serial-for-Android

0
Vaiden