Tôi đang làm việc trên một dự án sử dụng khả năng của Máy chủ lưu trữ USB trong Android 3.2. Tôi đang bị thiếu hiểu biết và tài năng về giao tiếp USB/Serial nói chung. Tôi cũng không thể tìm thấy bất kỳ mã ví dụ nào tốt cho những gì tôi cần làm.Truyền thông Máy chủ USB Android
Tôi cần đọc từ Thiết bị liên lạc USB.
Ex: Khi tôi kết nối qua Putty (trên máy tính của tôi) Tôi nhập:
>GO
Và điện thoại bắt đầu phun ra dữ liệu cho tôi. Pitch/Roll/Temp/Checksum.
Ex:
$R1.217P-0.986T26.3*60
$R1.217P-0.986T26.3*60
$R1.217P-0.987T26.3*61
$R1.217P-0.986T26.3*60
$R1.217P-0.985T26.3*63
tôi có thể gửi lệnh 'GO' ban đầu từ thiết bị Android tại thời điểm đó tôi nhận được một tiếng vang của 'GO'.
Sau đó, không có gì khác trên bất kỳ lần đọc tiếp theo nào.
Làm cách nào để có thể: 1) Gửi lệnh 'go'. 2) Đọc trong luồng dữ liệu kết quả.
Thiết bị USB tôi đang làm việc có các giao diện sau (điểm cuối).
Device Class: thiết bị truyền thông (0x2)
Giao diện:
Interface # 0 Class: Communication Device (0x2) Endpoint # 0 Hướng: Inbound (0x80) Loại: Intrrupt (0x3) Poll Interval: 255 Max gói Kích thước: 32 Attributes: 000000011
Interface # 1 class: Truyền De Phó Class (CDC) (0xa) Endpoint # 0 Địa chỉ: 129 Số: 1 Hướng: Inbound (0x80) Loại: Bulk (0x2) Poll Interval (0) Max gói Kích thước: 32 Attributes: 000.000.010
Endpoint # 1 Địa chỉ: 2 Số: 2 Hướng: Outbound (0x0) Loại: Bulk (0x2) Poll Interval (0) Max gói Kích thước: 32 Attributes: 000000010
Tôi có thể xử lý sự cho phép, kết nối với thiết bị, tìm giao diện chính xác và gán các điểm cuối. Tôi chỉ gặp khó khăn trong việc tìm ra kỹ thuật nào để sử dụng để gửi lệnh ban đầu đọc dữ liệu tiếp theo. Tôi đã thử các kết hợp khác nhau của bulkTransfer và controlTransfer mà không có may mắn.
Cảm ơn.
Tôi đang sử dụng giao diện # 1 như bên dưới:
public AcmDevice(UsbDeviceConnection usbDeviceConnection, UsbInterface usbInterface) {
Preconditions.checkState(usbDeviceConnection.claimInterface(usbInterface, true));
this.usbDeviceConnection = usbDeviceConnection;
UsbEndpoint epOut = null;
UsbEndpoint epIn = null;
// look for our bulk endpoints
for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
UsbEndpoint ep = usbInterface.getEndpoint(i);
Log.d(TAG, "EP " + i + ": " + ep.getType());
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
epOut = ep;
} else if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
epIn = ep;
}
}
}
if (epOut == null || epIn == null) {
throw new IllegalArgumentException("Not all endpoints found.");
}
AcmReader acmReader = new AcmReader(usbDeviceConnection, epIn);
AcmWriter acmWriter = new AcmWriter(usbDeviceConnection, epOut);
reader = new BufferedReader(acmReader);
writer = new BufferedWriter(acmWriter);
}
cho những người trong chúng ta đấu tranh trên mạng, làm thế nào bạn chọn Interface 1, và cho mục đích gì sẽ giao diện 0, giao diện ngắt, được sử dụng cho? Cảm ơn! – Rachael