Tôi tự hỏi nếu có ai có thể giúp gì cả, một chút vấn đề của chuyên gia này.Thay thế Windows USB Class Driver bằng trình điều khiển tùy chỉnh?
Tôi có một ứng dụng cần đọc và phân tích một số thiết bị USB (không phải đồng thời, chúng được chạy trong các thử nghiệm riêng biệt và có thể được chạy trên các máy khác nhau).
Mỗi thiết bị USB dựa trên lớp USB HID và được sản xuất bởi các công ty khác nhau, không có thiết bị USB nào được thiết kế để chạy trên PC, nhưng có nghĩa là cho một nền tảng khác, tuy nhiên với mục đích kiểm tra các thiết bị mà khách hàng đã yêu cầu rằng ứng dụng thử nghiệm được chạy từ PC.
Một số thiết bị sẽ khởi động, được nhận diện bởi các cửa sổ khởi động và khởi động chính xác bằng trình điều khiển lớp HID chung được tích hợp trong cửa sổ, sau đó thiết bị sẽ gửi gói dữ liệu chính xác của dữ liệu cần kiểm tra.
Một số thiết bị sẽ khởi động, được nhận diện bởi các cửa sổ sẽ cố gắng khởi động chúng nhưng không hoàn toàn khởi tạo chúng để chúng ở trạng thái khởi tạo nửa. Điều này là tốt, vì tôi có thể sử dụng phân tích giao thức beagle của tôi để nắm bắt các gói khởi tạo từ nền tảng chính hãng và sau đó sử dụng thư viện LibUSBDotNet để tái tạo các gói còn lại trong chuỗi khởi tạo và bắt chúng gửi gói chính xác.
Vấn đề tôi gặp phải là với một thiết bị cụ thể (mặc dù có một số thiết bị khác mà tôi chưa thử nghiệm nên có thể một trong số đó cũng có thể xảy ra cùng một vấn đề). Vấn đề là trình điều khiển Windows HID lớp nhận ra thiết bị và trys để khởi tạo và bắt đầu nó, điều này hoạt động sau một thời trang và thiết bị bắt đầu gửi dữ liệu.
Vấn đề là dữ liệu được gửi khác với dữ liệu được gửi tới nền tảng chính hãng (chỉ chứa một tập con của toàn bộ dữ liệu). Nó như thể các cửa sổ đã khởi tạo thiết bị vào một chế độ khác.
Khi tôi chụp các gói khởi tạo từ cả PC và nền tảng chính hãng bằng bộ phân tích giao thức USB, tôi thấy Windows đang gửi một số gói khởi tạo hơi khác nhau. Sử dụng LibUSBDotNet để gửi lại các gói chính xác khi Windows đã khởi động thiết bị dường như không có hiệu lực. Vấn đề của tôi là tôi cần phải ngăn chặn các cửa sổ cố gắng khởi tạo thiết bị bằng trình điều khiển lớp HID chuẩn, tôi đã thử gỡ bỏ trình điều khiển trong Trình quản lý Thiết bị nhưng nó vẫn khởi động nó (và trình điều khiển được gán lại trong thiết bị một cách kỳ diệu giám đốc). Tôi đã thực hiện một số điều tra và có thể lựa chọn:
Tạo một trình điều khiển cụ thể mà các cửa sổ sẽ gán cho VID đặc biệt/PID của thiết bị nhưng điều đó không có gì, sau đó tôi có thể sử dụng LibUSBDotNet để gửi đúng trình tự khởi tạo cho thiết bị từ bên trong mã của riêng tôi.
Sử dụng một cái gì đó giống như WinUSB để tạo ra một trình điều khiển thích hợp cho các thiết bị (hoặc có thể để tạo ra một "chết" lái xe như 1.
sẽ một trình điều khiển với một VID cụ/PID định nghĩa được sử dụng bởi cửa sổ trong sở thích để nó sẵn có trình điều khiển lớp USB HID? Nếu không thì tôi sẽ lãng phí thời gian của tôi đi xuống con đường này?
Lưu ý, mac của tôi khởi tạo thiết bị vấn đề một cách chính xác, và tôi đã hỏi câu hỏi của khách hàng cho dù ứng dụng có thể được phát triển cho Mac và câu trả lời của họ chỉ làm phiền Windows.
Tôi không có kinh nghiệm viết trình điều khiển Windows thích hợp, mặc dù tôi có kinh nghiệm nói chuyện với USB ở mức tương đối thấp (do đó phần đó không lo lắng quá nhiều). Bất cứ ai có thể đề xuất một hành động tốt (trước khi tôi có khả năng lãng phí tuần điều tra làm thế nào để viết trình điều khiển cho máy tính chỉ để tìm khóa học hành động được lựa chọn của tôi không thể cung cấp những gì tôi yêu cầu).
Bất kỳ trợ giúp hoặc đề xuất nào được đánh giá cao.
Cảm ơn, Giàu
vào sau khi cố gắng gợi ý dưới đây:
tôi đã cố gắng sử dụng thuật sĩ inf LibUsbDotNet để tạo ra các tập tin cần thiết và cài đặt chúng và điều này dường như làm việc - chắc chắn thiết bị đã bây giờ xuất hiện trong Device Manager như một thiết bị libusb-win32 - không phải thiết bị HID và trình điều khiển liên quan là trình điều khiển libusb. Ngay cả sau khi thực hiện điều này, thiết bị dường như vẫn được khởi tạo và bắt đầu gửi nhầm loại gói dữ liệu mặc dù bây giờ các gói đó không còn được trình điều khiển lớp xử lý và chỉ bị mất.
Tôi cũng đã gặp Zadig có trình hướng dẫn tạo inf tương tự cho WinUSB và điều này có kết quả giống hệt nhau.
Một đồng nghiệp đã đề xuất rằng có thể không phải là chính cửa sổ đang chuyển thiết bị sang chế độ này, thay vào đó thiết bị xác định rằng thiết bị được kết nối với máy tính Windows và tự chuyển sang chế độ này. Tôi nghi ngờ đây là trường hợp, trong trường hợp đó tôi bị mắc kẹt - thời gian để có một cuộc trò chuyện với khách hàng.
Rất cám ơn sự giúp đỡ.
Bạn có thể đặt câu hỏi này ngắn gọn hơn không? Tôi nghi ngờ nhiều người sẽ đọc tất cả những điều đó. –