ADK 1.0设备无法与Jelly Bean一起使用,为什么?

时间:2012-07-19 14:49:21

标签: android arduino android-4.0-ice-cream-sandwich adk android-4.2-jelly-bean

刚刚将经过验证的ADK配件连接到Nexus 7和Galaxy Nexus - 它无法连接“无法读取设备协议版本”消息。认为董事会死了,与ICS连接到Nexus S - 工作得很好。在Jelly Bean升级之前就开始使用Galaxy Nexus,因此可以排除硬件故障。

我一直在密切关注ADK公告,但不记得阅读或听到有关此特定更改的任何内容,也不记得支持ADK 2.0的Android设备的向后兼容性。

Accessory Development Kit 2011指南说“Android 2.3.4(API级别10)及更高版本支持协议版本1. Android 4.1(API级别16)及更高级别支持协议版本2”,它不支持说版本1是4.1支持,并且发现现有硬件将被抛弃将是非常奇怪的。

我在这里缺少什么?这是一个错误还是一个功能?

4 个答案:

答案 0 :(得分:5)

去年发布的旧ADK1库不承认JellyBean设备(Android 4.1及更高版本)所说的新AOA v2协议。这已在更新的ADK1库版本中修复。

去获取新的ADK1库:

更新ADK库并上传ADK1草图。请注意,新库已更新,可与Arduino 1.0及更高版本配合使用,因此您可能还需要更新Arduino IDE。

答案 1 :(得分: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-adk http://developer.android.com/tools/adk/aoa2.html#detecting中的代码均使用protocol >= 1咒语。 (我无法验证这一点,但鉴于原始库未使用此版本的检查,我认为ADK2011文档已更新为使用新检查。)

答案 2 :(得分:1)

我已经设法用我的Jelly Beans设备运行旧的ADK。以下是详细信息:

  • 在Mac OS Mountain Lion上运行
  • 使用Arduino Mega ADK
  • Samsung Galaxy S3 with 4.1.1

步骤:

  1. 下载darduino-1.0.1-macosx
  2. 清空Documents / Arduino文件夹
  3. 在其中创建文件夹库
  4. 从labs.arduino.cc/uploads/ADK/GettingStarted/ArduinoADK-beta-001.zip下载USB兼容性文件。
  5. 解压缩后,将ArduinoADK-beta-001 / libraries / UsbHost文件夹复制到上述库文件夹中。
  6. 获取AndroidAccessory文件夹并将其复制到库中。 Soory,我可以记住我从哪里得到它。有必要使代码可以编译,因为知道什么是Accesory。该文件夹特别包含AndroidAccessory.cpp和AndroidAccessory.h
  7. 启动Ardoinu,例如将代码上传到您的主板(请在包含和defince之前插入#,代码格式不显示):

    包括< 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(); }

    void loop(){

    if(acc.isConnected()){    for(int i = 0; i< 12; i ++){      Serial.print(你好[I]);      延迟(250);    }

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

    1. 通过USB连接S3时,您应该看到串行监视器中的输出。
  8. 祝你好运 FL

答案 3 :(得分:0)

简单地将固件从(协议== 1)检查更改为(协议> = 1)对我有用(至少对于枚举 - 仍然需要测试发送和接收)。我的硬件是LPC1768 mbed。 (http://mbed.org/cookbook/mbed-with-Android-ADK