Устройства 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:
- http://developer.android.com/tools/adk/adk.html (ищите "release_20120606" или выше в zip-загрузке)
Обновите библиотеки 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
шаги:
- скачать darduino-1.0.1-macosx
- Очистить папку документов /Arduino
- Создайте в нем папку библиотеки
- Загрузите файлы совместимости USB с веб-сайта labs.arduino.cc/uploads/ADK/GettingStarted/ArduinoADK-beta-001.zip.
- После разархивирования скопируйте папку ArduinoADK-beta-001/library /UsbHost в указанную выше папку библиотеки.
- Получите папку AndroidAccessory и скопируйте ее в библиотеки. Соори, я могу вспомнить, откуда я это взял. Это необходимо для того, чтобы код мог компилироваться, потому что он знает, что такое Accesory. Эта папка содержит файлы AndroidAccessory.cpp и AndroidAccessory.h
Запустите 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); } }
- При подключении S3 через USB вы должны увидеть выход на последовательном мониторе.
С наилучшими пожеланиями FL
Простое изменение прошивки с проверки (protocol==1) на (protocol>=1) сработало для меня (по крайней мере, для перечисления - отправка и получение еще должны быть проверены). Мое оборудование - LPC1768 mbed. ( http://mbed.org/cookbook/mbed-with-Android-ADK)