2013-06-21 41 views
11

Làm cách nào để sử dụng đúng cách libusb để nói chuyện với các thiết bị USB được kết nối?Cách sử dụng libusb đúng cách nhất để nói chuyện với các thiết bị USB được kết nối?

Cụ thể, làm cách nào để chuyển dữ liệu đến các thiết bị USB, nhận thông tin từ các thiết bị, tìm ra tên của thiết bị kết nối, nếu họ có lưu trữ, vv

Cụ thể hơn, tôi sẽ chạy này trên máy Mac   OS   Máy X, vì vậy tôi biết tôi không thể chỉ sử dụng các tệp tiêu đề Windows.

Nếu có giải thích tốt về libusb và thiết bị USB, điều đó cũng sẽ hữu ích.

Trả lời

6

Here là một bài đăng trên một câu hỏi tương tự mà có thể có ích cho bạn. Tôi bao gồm nhiều liên kết.

Nhưng có thể bạn muốn xem tại đây. Vì vậy, trong trường hợp đó, ở đây nó đi!

Libusb cho phép bạn liệt kê các thiết bị và chọn thiết bị bạn muốn dựa trên ID nhà cung cấp/Sản phẩm cụ thể (Id V/P). Nếu bạn không biết điều này và không thể tìm thấy nó trực tuyến với mô tả của sản phẩm thì bạn có thể dễ dàng tìm thấy nó.

Nếu nó không trực tuyến, bạn sẽ cần phải sử dụng một ứng dụng tương tự như lsusb trên Linux. (Tôi không tin nó là trên Mac.) Khi bạn chạy lsusb nó liệt kê các thiết bị kết nối và các V/P Id của họ. Bạn có thể dễ dàng tìm thấy thiết bị của mình bằng cách rút phích cắm, chạy lsusb và cắm lại thiết bị và so sánh. Dễ như ăn bánh. Bất kỳ ứng dụng danh sách usb nào trên Mac sẽ hy vọng hiển thị ID V/P như lsusb.

Sau đó, khi bạn có ID V/P này, bạn sẽ sử dụng libusb (nếu sử dụng 0,1) để liệt kê tất cả các thiết bị và tìm thiết bị khớp với id đó. (Tôi hỗ trợ bằng cách sử dụng libusbx mà sẽ xảy ra để có một chức năng tìm thiết bị duy nhất dựa trên V/P id - trong thực tế, libusbx là một toàn bộ rất nhiều ngắn gọn hơn tất cả xung quanh.)

Sau khi chọn thiết bị của bạn, bạn sẽ gửi một gói bằng cách sử dụng hoặc Báo cáo tính năng hoặc đầu ra. Đây là phần phức tạp nhất vì gói bạn gửi phụ thuộc vào thiết bị cá nhân mà tôi tin. Nó là 8 byte dữ liệu và chỉ một trong số đó là một ký tự đơn bạn muốn gửi tới thiết bị USB. (Nếu bạn muốn gửi 8 ký tự, bạn sẽ phải lặp qua một mảng ký tự và gửi báo cáo tính năng hoặc đầu ra cho mỗi ký tự.)

Ví dụ như tham khảo một thiết bị đầu cuối khá cụ thể example Tôi đã viết cho kiểm soát hai đèn LED. Nếu nó hữu ích, tuyệt vời! Nó chứa một ví dụ libusbx và libusb-0.1.

Tôi hy vọng điều này sẽ hữu ích!

+0

Thay vì lsusb, trên máy Mac (mà bài đăng có liên quan đến origiral) bạn có thể làm 'system_profiler SPUSBDataType' để nhận ID nhà cung cấp và ID sản phẩm. –

+0

Tôi biết đây là ngày, nhưng bạn sẽ làm gì trong trường hợp có nhiều thiết bị? Nói cách khác, nói rằng tôi có hai đầu đọc RFID kết nối cùng loại và nhà sản xuất? – audiFanatic

1

Quá trình mà bạn có thể làm theo là:

  1. Lấy VID, PID cho các thiết bị mà bạn muốn giao tiếp bằng lsusb
  2. Cố gắng mở điện thoại và đọc các mô tả thiết bị
  3. Nếu bạn muốn tên của thiết bị sử dụng bộ mô tả chuỗi để nhận được rằng
  4. Kiểm tra xem có trình điều khiển hạt nhân nào được đính kèm hay không. Nếu có, hãy tháo nó ra và thực hiện một số chuyển dữ liệu thô
  5. Sau khi nhận được phản hồi lại, hãy đính kèm lại trình điều khiển.
Các vấn đề liên quan