2012-07-19 20 views
5

Nexus 7とGalaxy NexusにADKアクセサリを接続しましたが、「デバイスプロトコルバージョンを読み取れませんでした」というメッセージに接続できませんでした。ボードが死んで、ICSでNexus Sに接続していたと思って、うまくいきました。 Jelly Beanをアップグレードする前にGalaxy Nexusで作業していたため、ハードウェアの障害を排除できます。ADK 1.0デバイスがJelly Beanで動作しない理由は何ですか?

私はADKのアナウンスをきちんと見てきましたが、この特定の変更やADK 2.0対応のAndroidデバイスの下位互換性については何も読んだり聞いたりしていません。

Accessory Development Kit 2011ガイドでは、「プロトコルバージョン1はAndroid 2.3.4(APIレベル10)以上でサポートされています」プロトコルバージョン2はAndroid 4.1(APIレベル16)以上でサポートされています。 1はであり、これは4.1でサポートされていないであり、既存のハードウェアがそのまま放棄されることは奇妙なことです。

私はここで何が欠けていますか?これはバグか機能ですか?

+0

私は同じ問題を抱えています。 JellybeanがNexus 7に接続されているときにメディアデバイスとして識別される前にすべてでうまく動作するUSB​​アクセサリ。 – Snowwire

+0

4.1を実行している2つのデバイスでADK2011(間違いなく「試して真のADKアクセサリ」)を試しました。 Galaxy NexusとNexus 7の両方を使用しています。あなたがそれがうまくいかなかったよりも多くの文脈を提供する方法はありますか?ソースコード/エラー/ログ/問題を示すものは何ですか? – machinaut

+0

@ajray:問題のコードはhttps://github.com/home-climate-control/arduinoにあります。あなたのために公開されているコードのソースは公開されていますか? –

答えて

5

昨年リリースされた古いADK1ライブラリは、JellyBeanデバイス(Android 4.1以降)が話す新しいAOA v2プロトコルを認識しません。これは、更新されたADK1ライブラリリリースで修正されました。

あなたのADKライブラリを更新し、あなたのADK1スケッチをアップロード:

Goが新しいADK1ライブラリを取得します。新しいライブラリはArduino 1.0以上で動作するように更新されているので、おそらくArduino IDEも更新する必要があります。

+1

実際にそうであることが確認できれば、Android 4.1に対するバグとして提出する必要があります。これは、ドキュメントと矛盾し、動くターゲットとして、実際の製品でのインターフェイスの使い勝手を排除するためです。 –

+0

@Chris:それは機能を呼び出すことができるバグだと思います。 adk_release_0512.zipのArduino.ccpは、プロトコル1以外のものとは明確に拒否しています。提示されたプロトコル番号を印刷するための些細な変更は、JellyBeanデバイスがバージョン2を示していることを示しています。release_20120606は> = 1を理解しているようですが、 ADK 1.0に準拠した既存のすべてのデバイスのダスト;すでに出荷されていて手の届かないところにあるデバイスにファームウェアを修正することができます。 ADKチームからの先見性の欠如を見て怒っている。 –

+0

私は、GoogleがADKのUSBインターフェイスを維持することに過度に関心がないことをかなり明確にしていると思います。今年Google IOでプレゼンテーションを観ると、視聴者の質問に興味深い答えが寄せられました。これを36m30s、http://www.youtube.com/watch?v=ZUaKSs3utrs – Snowwire

2

@Chris Strattonへの返信では、オリジナルライブラリは将来の互換性を考慮して書かれていないという問題があります。

元のライブラリでは、将来のプロトコルバージョンに下位互換性がないと(protocol == 1のチェックでswitchDevice()をチェックしている)と仮定しています。 20120606ライブラリバージョン(修正版protocol >= 1チェックの意味で、switchDevice())から、今後のライブラリバージョンが下位互換性があることが意図されていることが明らかになっています。

残念ながら、これは、ライブラリの元のバージョンでコンパイルされた既存のファームウェアがJelly Beanデバイスと互換性がないことを意味します。ファームウェアは新しいライブラリバージョンで再コンパイルし、アクセサリに再アップロードする必要があります。

サイドバーの「ADKパッケージ」リンクが、本体のテキストにリンクされている新しいバージョンではなく、古いライブラリのバージョンにリンクするドキュメントには、これを記述する際にエラーがあることにも注意してください。 (私はこのためにバグを追加しました:https://code.google.com/p/android/issues/detail?id=35463)を

追加情報:http://developer.android.com/tools/adk/aoa2.html#detectingが言う

  • 注こと:「オリジナルアクセサリプロトコルのために設計されたアクセサリーはまだ動作してプロトコルのバージョン2.0は、上位互換性がありますより新しいAndroid搭載端末を搭載していますしかし、これは元のライブラリの問題を無視しています。

  • 注意もhttp://developer.android.com/tools/adk/adk.html#start-adkhttp://developer.android.com/tools/adk/aoa2.html#detecting両方のコードはprotocol >= 1呪文を使用すること。 (私はこれを確認することはできませんが、元のライブラリは、私がADK2011のドキュメントは、新しいチェックを使用するように更新されていると思いますチェックのこのバージョンを使用していませんでした。与えられた)

1

私は古いを実行するために管理しています私のゼリービーンズデバイスでADK。ここでは詳細は以下のとおりです。

  1. ダウンロードdarduino:4.1.1
  2. ステップとArduinoのメガADK

  3. サムスンギャラクシーS3で

    • マックOSマウンテンライオンに実行
    • -1.0.1-macosx
    • Documents/Arduinoフォルダを空にする
    • フォルダライブラリを作成する
    • labs.arduino.cc/uploads/ADK/GettingStarted/ArduinoADK-beta-001.zipからUSB互換ファイルをダウンロードします。
    • 解凍後、ArduinoADK-beta-001/libraries/UsbHostフォルダを上記のライブラリフォルダにコピーします。
    • AndroidAccessoryフォルダを取得し、ライブラリにコピーします。 Soory、私はどこから得たか覚えている。 Accesoryが何であるかを知っているので、コードをコンパイルできるようにする必要があります。このフォルダには、特にAndroidAccessory.cppとAndroidAccessory.h
    • スタートArdoinuが含まれており、例えば(含まれており、defincesは、コードのフォーマットは、それが表示されない前に#を挿入してください)あなたのボードにコードをアップロードします。

      には、 < Max3421e.h> は、<を含みます。Usb.h> を含みます。< AndroidAccessory.h> は、ARRAY_SIZE 12を定義します。

      AndroidAccessory acc( "製造元"、 "モデル"、 "説明"、 "バージョン"、 "URI"、 "シリアル");

      char hello [12] = {'h'、 'e'、 'l'、 'l'、 'o'、 ''、 'w'、 'o'、 'r'、 'l' 'd'};

      void setup(){ Serial.begin(115200); // acc.powerOn(); acc.begin(); }

      ボイドループ(){

      があれば(acc.isConnectedは()){ ため(INT i = 0; I < 12; iは++){ Serial.print(ハロー[I])。 遅延(250); }

      Serial.println(); 遅延(250); }}

      1. USB経由でS3を接続するときは、シリアルモニタに出力が表示されます。単純に(プロトコル== 1)からファームウェアを変更

敬具 FL

関連する問題