輸入報告閱讀器程式庫

input_report_reader 程式庫可協助您進行實作 提供一個常用功能:管理和輸入驅動程式 追蹤希望接收報告的上游驅動程式。

程式庫中的 InputReportReaderManager 會建立及管理 InputReportReaders, 實作 fuchsia.input.report.InputReportsReader。管理員可以 回報給所有現有的InputReportReaders

要讀取輸入裝置的輸入報告的上游驅動程式庫,可能會向 呼叫 CreateReader 方法,即可設定 InputReportReaderManager。收到輸入報表時 (無論是 HID 報告形式,還是透過輪詢等裝置讀取資料的形式),報告內容都會是 使用 SendReportToAllReaders 方法推送至所有已註冊的讀者。報表 然後翻譯成fuchsia_input_report::InputReportInputReportReaderManager 執行個體遭刪除,所有現有的 InputReportReaders 都會釋出。

使用方法

下列步驟逐步說明如何在輸入裝置中使用輸入報告閱讀器程式庫:

  1. 定義一個類別,用來存放需要回報的所有資料 (此結構體必須宣告 必要 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);
    }
    
  2. 實作 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());
    }
    
  3. 在輸入裝置中,宣告以下範本的 InputReportReaderManager 執行個體: 您的結構,例如:

    input_report_reader::InputReportReaderManager<MyExampleMouseReport> readers_;
    
  4. 收到報表時,請剖析報表,填寫 MyExampleMouseReport 使用報表資料,並呼叫 SendReportToAllReaders 方法,例如:

    readers_.SendReportToAllReaders(report);
    
  5. 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) {
         // ...
      }
    }