Устройства ADK 1.0 не работают с Jelly Bean, почему?

Просто подключил проверенный и действующий аксессуар ADK к Nexus 7 и Galaxy Nexus - и ему не удалось подключиться с сообщением "Не удалось прочитать версию протокола устройства". Думал, что умерла плата, подключенная к Nexus S с ICS - работало просто отлично. Работал над Galaxy Nexus до обновления Jelly Bean, поэтому можно исключить сбои оборудования.

Я внимательно слежу за объявлениями ADK, но не помню, чтобы читал или слышал об этом конкретном изменении или обратной совместимости устройств Android, поддерживающих ADK 2.0.

В Руководстве по разработке комплекта аксессуаров 2011 говорится, что "Протокол версии 1 поддерживается в Android 2.3.4 (API уровня 10) и выше. Протокол версии 2 поддерживается в Android 4.1 (API уровня 16) и выше", но это не означает, что версия 1 4.1 не поддерживается, и было бы довольно странно обнаружить, что существующее оборудование будет заброшено именно так.

Что мне здесь не хватает? Это ошибка или особенность?

4 ответа

Решение

Старые библиотеки ADK1, выпущенные в прошлом году, не распознают новый протокол AOA v2, на котором говорят устройства JellyBean (Android 4.1 и выше). Это было исправлено в обновленном выпуске библиотеки ADK1.

Принесите новые библиотеки ADK1:

Обновите библиотеки ADK и загрузите эскиз ADK1. Обратите внимание, что новые библиотеки были обновлены для работы с Arduino 1.0 и выше, поэтому вам, вероятно, придется обновить и вашу Arduino IDE.

В ответ на @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 была обновлена ​​для использования новой проверки.)

Мне удалось запустить старый ADK с моим устройством Jelly Beans. Вот подробности:

  • Работает на Mac OS Mountain Lion
  • С Ардуино Мега АДК
  • Samsung Galaxy S3 с 4.1.1

шаги:

  1. скачать darduino-1.0.1-macosx
  2. Очистить папку документов /Arduino
  3. Создайте в нем папку библиотеки
  4. Загрузите файлы совместимости USB с веб-сайта labs.arduino.cc/uploads/ADK/GettingStarted/ArduinoADK-beta-001.zip.
  5. После разархивирования скопируйте папку ArduinoADK-beta-001/library /UsbHost в указанную выше папку библиотеки.
  6. Получите папку AndroidAccessory и скопируйте ее в библиотеки. Соори, я могу вспомнить, откуда я это взял. Это необходимо для того, чтобы код мог компилироваться, потому что он знает, что такое Accesory. Эта папка содержит файлы AndroidAccessory.cpp и AndroidAccessory.h
  7. Запустите Ardoinu и, например, загрузите код на свою доску (пожалуйста, введите # перед включением и определением, формат кода не отображает его):

    include include include define 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 (hello [i]); задержки (250); }

    Serial.println (); задержки (250); } }

    1. При подключении S3 через USB вы должны увидеть выход на последовательном мониторе.

С наилучшими пожеланиями FL

Простое изменение прошивки с проверки (protocol==1) на (protocol>=1) сработало для меня (по крайней мере, для перечисления - отправка и получение еще должны быть проверены). Мое оборудование - LPC1768 mbed. ( http://mbed.org/cookbook/mbed-with-Android-ADK)

Другие вопросы по тегам