input_report_reader
程式庫可協助您進行實作
提供一個常用功能:管理和輸入驅動程式
追蹤希望接收報告的上游驅動程式。
程式庫中的 InputReportReaderManager
會建立及管理 InputReportReaders
,
實作 fuchsia.input.report.InputReportsReader
。管理員可以
回報給所有現有的InputReportReaders
。
要讀取輸入裝置的輸入報告的上游驅動程式庫,可能會向
呼叫 CreateReader
方法,即可設定 InputReportReaderManager
。收到輸入報表時
(無論是 HID 報告形式,還是透過輪詢等裝置讀取資料的形式),報告內容都會是
使用 SendReportToAllReaders
方法推送至所有已註冊的讀者。報表
然後翻譯成fuchsia_input_report::InputReport
。InputReportReaderManager
執行個體遭刪除,所有現有的 InputReportReaders
都會釋出。
使用方法
下列步驟逐步說明如何在輸入裝置中使用輸入報告閱讀器程式庫:
定義一個類別,用來存放需要回報的所有資料 (此結構體必須宣告 必要
ToFidlInputReport
方法),例如:struct MyExampleMouseReport { zx::time event_time; int64_t x; int64_t y; void ToFidlInputReport(fidl::WireTableBuilder<::fuchsia_input_report::wire::InputReport>& input_report, fidl::AnyArena& allocator); }
實作
ToFidlInputReport
方法,例如:void MyExampleMouseReport::ToFidlInputReport( fidl::WireTableBuilder<::fuchsia_input_report::wire::InputReport>& input_report, fidl::AnyArena& allocator) { auto mouse_input_rpt = fuchsia_input_report::wire::MouseInputReport::Builder(allocator); mouse_input_rpt.movement_x(x); mouse_input_rpt.movement_y(y); input_report.mouse(mouse_input_rpt.Build()); input_report.event_time(event_time.get()); }
在輸入裝置中,宣告以下範本的
InputReportReaderManager
執行個體: 您的結構,例如:input_report_reader::InputReportReaderManager<MyExampleMouseReport> readers_;
收到報表時,請剖析報表,填寫
MyExampleMouseReport
使用報表資料,並呼叫SendReportToAllReaders
方法,例如:readers_.SendReportToAllReaders(report);
在
fuchsia.input.report.InputDevice.GetInputReportsReader
實作中, 請呼叫CreateReader
方法,例如:void MyExampleInputDevice::GetInputReportsReader(GetInputReportsReaderRequestView request, GetInputReportsReaderCompleter::Sync& completer) { auto status = readers_.CreateReader(dispatcher_, std::move(request->reader)); if (status != ZX_OK) { // ... } }