2017-08-19 21 views
15

(Đây là một crosspost from the MSDN forums kể từ đó vẫn chưa được bất kỳ phản ứng có một thời gian khá lâu và tôi nghĩ rằng tôi sẽ nhận được câu trả lời tốt hơn ở đây.)đang phát triển một trình điều khiển thiết bị đầu vào HID cho một thiết bị BLE GATT trên Windows 10

Tôi có thiết bị BLE chứa dịch vụ GATT tùy chỉnh, trong đó tôi không thể sửa đổi phần mềm. Tôi muốn lắng nghe các sự kiện đặc trưng của GATT từ dịch vụ đó, và làm cho Windows sử dụng chúng như các báo cáo HID để làm cho Windows nhận ra nó như một thiết bị khác. Tôi sẽ đi đâu để tới đó?

tôi đã tiến hành một số nghiên cứu, và tìm thấy các thông tin dưới đây:

Câu hỏi của tôi là, là gì tiếp cận cần thiết ở đây để tạo trình điều khiển này?

  • Tôi có cần phải tạo hai trình điều khiển (driver HID ảo và một hồ sơ GATT lái xe), và sau đó bằng cách nào đó kết nối chúng với nhau?
  • Tôi có cần thực hiện cuộc gọi API Bluetooth LE từ trình điều khiển HID ảo không?
  • Tôi có cần tạo trình điều khiển Cấu hình GATT để thực hiện cuộc gọi HID không?
  • Hoặc cái gì khác hoàn toàn?

Trình điều khiển cấu hình GATT thậm chí vẫn được phép trên Windows 10, vì có vẻ như nó là not allowed to create filter drivers for BthLeEnum?

Cập nhật

Tôi thực sự đánh giá cao việc Alain dành thời gian trả lời câu hỏi và vì vậy tôi đã đánh dấu câu trả lời của mình là câu trả lời cho câu hỏi; tuy nhiên đối với tôi câu hỏi chưa hoàn toàn được trả lời. Thấy rằng câu hỏi đã nhận được hơn 10 phiếu, tôi nghĩ rằng nó xứng đáng là một câu trả lời rộng hơn. Điểm có thể được cải thiện/thêm là:

  • những lập luận đằng sau những lời khuyên (ví dụ như tại sao UMDF minidriver thay vì lái xe VHF, tại sao sử dụng UWP API bluetooth đòi hỏi phải sử dụng cppwinrt thay vì chỉ đơn giản bằng cách sử dụng chức năng C++ Bluetooth mà tôi tìm thấy trong nghiên cứu của tôi, viết về trình điều khiển GATT Profile, v.v.) Nếu không có sự tranh luận đó, tôi sẽ không học được nhiều từ lời khuyên.
  • câu trả lời cho các truy vấn con của tôi
  • ví dụ về cách sử dụng mã cppwinrt từ trình điều khiển và liệu có thể truy cập các API đó hay không. Có bất kỳ hạn chế nào đối với điều đó (since the code will not be running from an appx) không?Cppwinrt được trình bày ở đây là một cái gì đó mới, nhưng tôi không thể tìm thấy bất kỳ tài liệu hướng dẫn sử dụng cppwinrt trong bối cảnh của một trình điều khiển.
  • một số phản ánh về nghiên cứu của riêng tôi - câu trả lời hiện tại không chạm vào những điểm tôi thấy là tốt hay không. Sự phản chiếu này sẽ giúp tôi hiểu chủ đề tốt hơn.

Trả lời

1

Cách tiếp cận tốt nhất để điều này sẽ tạo ra một trình điều khiển UMDF HID (https://docs.microsoft.com/en-us/windows-hardware/drivers/wdf/creating-umdf-hid-minidrivers) mà cài đặt trên nút thiết bị bthleenum mà được tạo ra cho dịch vụ tùy chỉnh của thiết bị và sử dụng apis Bluetooth LE UWP mới (https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.genericattributeprofile).

Có một số sự mơ hồ về việc sử dụng UWP Apis từ ứng dụng không lưu trữ, nhưng điều này là không chính xác. Những Apis này có thể sử dụng được trong mọi điều kiện. Trong trường hợp bạn cần trợ giúp thiết lập dự án của mình, đây là mẫu C++/UWP có thể giúp bạn bắt đầu.

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

+0

Đây là mẫu C++/UWP: https://github.com/Microsoft/cppwinrt – Alain

+0

cảm ơn bạn! Bạn có nghĩa là nút thiết bị GATT/bthleenum "sự kiện xuất hiện" sẽ kích hoạt cài đặt trình điều khiển UMDF HID đó không? Có sự tương tác nào khác giữa các trình điều khiển/các nút trình điều khiển không? Ví dụ: có thể rằng trình điều khiển UMDF HID bằng cách nào đó tiêu thụ các dịch vụ tùy chỉnh và các đặc tính trực tiếp từ nút thiết bị GATT/bthleenum, hoặc nó cần phải bắt đầu "từ đầu" bằng cách thực hiện các cuộc gọi như 'GattDeviceService.FromIdAsync' vv? –

+0

cũng, bạn có thể vui lòng giải thích lý do tại sao bạn nên viết một HID minidriver thay vì sử dụng [Virtual Hid Framework] (https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/virtual-hid- framework - vhf-)? –

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