AndroidのUSBホストAPIは非常に薄いため、インターフェース/エンドポイントを列挙して接続を作成することができれば、それ以上のことはできません。あなたは生のUSBデータ転送と通信することになります。フォーマットはカメラのデバイスクラスに依存します。あなたのリクエストは多少ワームの可能性があるので、私は有益なリソースを提供するために最善を尽くします。
残念なことに、ストレージデバイスとメディアデバイスは、最も簡単なデバイスクラスではありません。そのため、一般的にはUSBを濡らすだけでは難しいかもしれません。私が与えることができる最良のアドバイスは、あなたのカメラが報告するインターフェイスクラスのデバイスクラス仕様(大部分はMass StorageかMTPのいずれか)を見てみることです。http://www.usb.org/developers/devclass_docs
specドキュメントでは、デバイスとの通信に使用するコマンド。私はまた、USBの要点をチェックすることをお勧めします。これは、USB要求がどのように構築されているかを指摘するうえで役に立ちます。具体的には、仕様文書に表示されているものをUsbDeviceConnection
のメソッドにあるパラメータにマップできます。 http://www.beyondlogic.org/usbnutshell/usb1.shtml
最初にカメラを設定するために「エンドポイント0」に送信する必要がある制御コマンドが数多くあり、残りの転送は大量のエンドポイントで行われる可能性があります。
Androidの制御要求は、UsbDeviceConnection.controlTransfer()
を使用して同期的に送信することができます。これは、転送が完了するまでこのメソッドがブロックされることを意味します。このメソッドを満たすパラメータは、デバイスクラスのspecドキュメントにあります。
バルクエンドポイントのリクエストは、UsbRequest
インスタンスを使用してUsbDeviceConnection.bulkTransfer()
または非同期で同期して送信できます。 UsbRequest
を使用すると、転送をキューに入れてから、後で(UsbDeviceConnection.requestWait()
を介して)結果を確認することができます。
ホストAPIを使用して、デバイス記述子のような情報を取得するための基本的な割り込みと制御転送を行うGithubページの例がいくつかあります。おそらく、そのうちのいくつかは同様にあなたに役立つでしょう:USBのコード例についてのご質問に関してhttps://github.com/devunwired/accessory-samples
:
このコードで行われた要求は、単に一般的な「ゲットコンフィギュレーション・ディスクリプタ」でありますすべてのUSBデバイスが応答しなければならないことを要求します(クラス固有ではなく、コアコマンドです)。実際、Android APIがインターフェイスとエンドポイントについて問い合わせることができる情報を取得するリクエストです。フィールド値はCore USB Specification(このコマンドは具体的には3.0スペックのセクション9.4.3と9.6.3で定義されています):http://www.usb.org/developers/docs/、またはもう少し詳しくUSBで簡単に見つけることができます説明:http://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescriptors
長さはやや恣意的です。これは、ドライバに読み書きするバイト数を通知します。ほとんどのUSBホストドライバは、最初に、デバイスがサポートする最大パケットサイズをホストに伝えるフィールドを含むデバイス記述子を照会し、そのサイズを将来の要求の長さとして使用します。フル機能のドライバがおそらくこのコマンドを作成し、長さのバイト(ディスクリプタのwTotalLengthフィールド)を調べて、バッファが十分に大きいかどうかを確認し、そうでなければ変更/再送信します。この例では、プロトコルがサポート可能と定義する「最大」最大パケットサイズであるため、わかりやすく64を選択しました。
また、デバイスが提供しなければならない特定のデータの要求を行う場合、それらのコマンドはコア仕様ではなく、特定のクラスドキュメントにあります。
私は先ほど超ロジックサイトを覗いていて、多くのことを解釈するのに少し問題があり、それのアンドロイド部分との関係を見つけることができませんでした。 デバイスがあると判断されました public static final int USB_CLASS_STILL_IMAGE 私は仕様書を今すぐ掘り下げて見つけてください。 もう一度おねがいします(うまくいけば私は立ち往生しません) –
標準のデバイスリクエストの有用性は、デバイスのメタデータを与えるだけなので、少し問題があります。私はこれを間違って読んでいますか? クラス、サブクラス、プロトコルコードとそれぞれのエンドポイントデータを書き留めましたが、カメラがデバイスに見えるものを送信するための関連するコマンドはまだ検出されていません。 –
この情報は、デバイスクラス仕様書に記載されています。静止画像は、リンク先のサイトに掲載されています。または、ここにそのクラス文書への直接リンクがあります。具体的には、第7章では画像キャプチャを使用するワークフローについて説明します。http://www.usb.org/developers/devclass_docs/usb_still_img10.pdf – Devunwired