2012-07-19 32 views
5

Chỉ cần kết nối phụ kiện ADK đã thử và thực với Nexus 7 và Galaxy Nexus - và không thể kết nối với thông báo "không thể đọc phiên bản giao thức thiết bị". Nghĩ rằng hội đồng quản trị đã chết, kết nối với Nexus S với ICS - chỉ hoạt động tốt. Làm việc trên Galaxy Nexus trước khi Jelly Bean nâng cấp là tốt, do đó, lỗi phần cứng có thể được loại trừ.Thiết bị ADK 1.0 không hoạt động với Jelly Bean, tại sao?

Tôi đã xem thông báo ADK khá chặt chẽ, nhưng không nhớ đọc hoặc nghe bất cứ điều gì về thay đổi cụ thể này, cũng như khả năng tương thích ngược của thiết bị Android hỗ trợ ADK 2.0.

Accessory Development Kit 2011 Hướng dẫn cho biết "Giao thức phiên bản 1 được hỗ trợ bởi Android 2.3.4 (API cấp 10) trở lên. Giao thức phiên bản 2 được hỗ trợ bởi Android 4.1 (API cấp 16) trở lên", nó không nói rằng phiên bản 1 là không phải được hỗ trợ bởi 4.1 và sẽ khá kỳ lạ khi thấy rằng phần cứng hiện tại sẽ bị hủy bỏ như thế.

Tôi thiếu gì ở đây? Đây có phải là một lỗi hoặc một tính năng?

+0

Tôi đang gặp vấn đề tương tự. Phụ kiện USB hoạt động tốt trên mọi thứ trước khi Jellybean được xác định là thiết bị truyền thông khi được kết nối với Nexus 7. – Snowwire

+0

Tôi vừa thử ADK2011 của mình (được cho là "phụ kiện ADK đã thử và đúng") với hai thiết bị chạy 4.1 và hoạt động tốt với cả hai (Galaxy Nexus và Nexus 7). Có cách nào bạn có thể cung cấp nhiều bối cảnh hơn là nó không hoạt động? Mã nguồn/Lỗi/Nhật ký/bất kỳ điều gì thể hiện sự cố? – machinaut

+0

@ajray: Mã được đề cập đến là https://github.com/home-climate-control/arduino. Nguồn của mã có hoạt động cho bạn công khai không? –

Trả lời

5

Thư viện ADK1 cũ được phát hành năm ngoái không nhận ra giao thức AOA v2 mới mà thiết bị JellyBean (Android 4.1 trở lên) nói. Điều này đã được sửa trong bản phát hành thư viện ADK1 đã cập nhật.

Go có được các thư viện ADK1 mới:

Cập nhật thư viện ADK của bạn và tải lên phác thảo ADK1 của bạn. Lưu ý rằng các thư viện mới đã được cập nhật để làm việc với Arduino 1.0 và cao hơn, vì vậy bạn có thể sẽ phải cập nhật Arduino IDE của bạn.

+1

Nếu nó có thể được xác nhận đó là trường hợp, nó sẽ được nộp như một lỗi chống lại Android 4.1, vì nó mâu thuẫn với tài liệu và, như một mục tiêu di chuyển, loại bỏ khả năng sử dụng của giao diện trong các sản phẩm thực tế. –

+0

@ Chris: Đoán nó là một lỗi có thể gọi một tính năng. Arduino.ccp từ adk_release_0512.zip rõ ràng từ chối nói chuyện với bất kỳ điều gì khác ngoài giao thức 1. Thay đổi nhỏ để in số giao thức được trình bày cho thấy rằng các thiết bị JellyBean có phiên bản 2. release_20120606, mặc dù, dường như hiểu> = 1 - nhưng điều này sẽ để lại bụi tất cả các thiết bị hiện có phù hợp với ADK 1.0; may mắn sửa chữa firmware trên các thiết bị đã được vận chuyển và ngoài tầm với. Kinda khó chịu khi thấy sự thiếu tầm nhìn xa này của nhóm ADK. –

+0

Tôi nghĩ rằng Google đang làm cho nó khá rõ ràng rằng họ không quá quan tâm đến việc duy trì giao diện USB cho ADK. Nếu bạn xem bản trình bày của họ tại Google IO năm nay, họ đã đưa ra một câu trả lời thú vị cho câu hỏi của khán giả. Xem video này từ 36 phút 30, http://www.youtube.com/watch?v=ZUaKSs3utrs – Snowwire

2

Để trả lời @Chris Stratton, vấn đề là thư viện gốc không được viết với khả năng tương thích trong tương lai.

Thư viện gốc giả định (bằng cách kiểm tra protocol == 1 trong switchDevice()) rằng các phiên bản giao thức trong tương lai sẽ không tương thích ngược. Nó xuất hiện từ phiên bản thư viện 20120606 (bằng hàm ý sửa đổi protocol >= 1 kiểm tra trong switchDevice()) rằng ý định bây giờ là các phiên bản thư viện tương lai được dự kiến ​​sẽ tương thích ngược.

Thật không may điều này có nghĩa là phần mềm hiện có được biên dịch với phiên bản gốc của thư viện không tương thích với thiết bị Jelly Bean. Phần mềm cần được biên dịch lại bằng phiên bản thư viện mới và tải lên lại phụ kiện. Cũng lưu ý rằng khi tôi viết điều này, có lỗi trong tài liệu trong đó liên kết "gói ADK" trong thanh bên liên kết đến phiên bản thư viện cũ hơn, không phải phiên bản mới hơn được liên kết trong nội dung văn bản. (Tôi đã thêm một lỗi cho điều này: https://code.google.com/p/android/issues/detail?id=35463)

thông tin bổ sung:

  • Lưu ý rằng http://developer.android.com/tools/adk/aoa2.html#detecting nói: "Phiên bản 2.0 của giao thức là tương thích đi lên, vì vậy phụ kiện được thiết kế cho các giao thức phụ kiện ban đầu vẫn làm việc với các thiết bị Android mới hơn. " Nhưng điều này bỏ qua vấn đề với thư viện gốc.

  • Cũng lưu ý rằng mã trong http://developer.android.com/tools/adk/adk.html#start-adkhttp://developer.android.com/tools/adk/aoa2.html#detecting đều sử dụng protocol >= 1 bùa. (Tôi không thể xác minh điều này nhưng với các thư viện ban đầu không sử dụng phiên bản này của séc Tôi nghĩ rằng tài liệu ADK2011 đã được cập nhật để sử dụng việc kiểm tra mới.)

1

Tôi đã quản lý để chạy cũ ADK với thiết bị Jelly Beans của tôi. Dưới đây là chi tiết:

  • Chạy trên Mac OS Mountain Lion
  • Với Arduino Mega ADK
  • Samsung Galaxy S3 với 4.1.1

bước:

  1. tải darduino -1.0.1-macosx
  2. Làm trống tài liệu/thư mục Arduino
  3. Tạo thư viện thư mục trong đó
  4. Tải xuống các tệp tương thích USB từ labs.arduino.cc/uploads/ADK/GettingStarted/ArduinoADK-beta-001.zip.
  5. Sau khi giải nén sao chép thư mục ArduinoADK-beta-001/libraries/UsbHost vào thư mục thư viện được đề cập ở trên.
  6. Tải thư mục AndroidAccessory và sao chép thư viện vào thư viện. Soory, tôi nhớ tôi đã lấy nó từ đâu. Nó là cần thiết để mã có thể biên dịch, bởi vì trong biết Accesory là gì. Thư mục này đặc biệt có chứa các AndroidAccessory.cpp và AndroidAccessory.h
  7. Bắt đầu Ardoinu và ví dụ upload mã để hội đồng quản trị của bạn (Xin vui lòng chèn # trước bao gồm và definces, định dạng mã số không hiển thị nó):

    bao gồm < Max3421e.h> bao gồm < Usb.h> bao gồm < AndroidAccessory.h> xác định ARRAY_SIZE 12;

    AndroidTruy cập acc ("Nhà sản xuất", "Mẫu", "Mô tả", "Phiên bản", "URI", "Nối tiếp");

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

    thiết lập void() { Serial.begin (115200); // acc.powerOn(); acc.begin(); }

    trống loop() {

    if (acc.isConnected()) { for (int i = 0; i < 12; i ++) { Serial.print (hello [i]); trì hoãn (250); }

    Serial.println(); trì hoãn (250); }}

    1. Khi kết nối S3 qua USB bạn sẽ thấy đầu ra trong Màn hình nối tiếp.

Trân trọng FL

Các vấn đề liên quan