5

刚刚将久经考验的真正 ADK 配件连接到 Nexus 7 和 Galaxy Nexus - 并且无法连接并显示“无法读取设备协议版本”消息。以为板子死了,用 ICS 连接到 Nexus S - 工作得很好。在 Jelly Bean 升级之前也在 Galaxy Nexus 上工作过,因此可以排除硬件故障。

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

附件开发工具包 2011指南说“Android 2.3.4(API 级别 10)及更高版本支持协议版本 1。Android 4.1(API 级别 16)及更高版本支持协议版本 2”,它没有说版本 1 4.1不支持,如果发现现有的硬件会被这样抛弃,那将是非常奇怪的。

我在这里想念什么?这是错误还是功能?

4

4 回答 4

5

去年发布的旧 ADK1 库无法识别 JellyBean 设备(Android 4.1 及更高版本)使用的新 AOA v2 协议。这已在更新的 ADK1 库版本中得到修复。

去获取新的 ADK1 库:

更新您的 ADK 库并上传您的 ADK1 草图。请注意,新库已更新为与 Arduino 1.0 及更高版本一起使用,因此您可能还必须更新您的 Arduino IDE。

于 2012-07-23T23:41:58.157 回答
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 文档已更新为使用新检查。)

于 2012-07-25T00:12:31.583 回答
1

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

  • 在 Mac OS 上运行 Mountain Lion
  • 使用 Arduino Mega ADK
  • 带有 4.1.1 的三星 Galaxy S3

脚步:

  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,我记得我从哪里得到的。有必要这样代码才能编译,因为知道附件是什么。此文件夹特别包含 AndroidAccessory.cpp 和 AndroidAccessory.h
  7. 启动 Ardoinu,例如将代码上传到您的开发板(请在包含和定义之前插入 #,代码格式不显示):

    包括<Max3421e.h> 包括<Usb.h> 包括<AndroidAccessory.h> 定义ARRAY_SIZE 12;

    AndroidAccessory acc("Manufacturer", "Model", "Description", "Version", "URI", "Serial");

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

    无效设置() { Serial.begin(115200);// acc.powerOn(); acc.begin(); }

    无效循环(){

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

    序列号.println(); 延迟(250);} }

    1. 通过 USB 连接 S3 时,您应该在串行监视器中看到输出。

最好的问候 FL

于 2012-12-04T22:42:36.517 回答
0

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

于 2014-04-02T17:34:55.420 回答