blob: 547a01c0f6cde726a5da6d1584687bf5619a4638 [file] [log] [blame] [view]
# Input Report Reader
This directory contains the Input Report Reader, a library which binds to
the [InputReport Drivers](/sdk/fidl/fuchsia.input.report/)
and parses their reports into
[fuchsia.ui.input:InputReports](https://fuchsia.googlesource.com/fuchsia/+/HEAD/sdk/fidl/fuchsia.ui.input/input_reports.fidl).
## USAGE
This program cannot be run directly. It exists in the system
as a library used by [`RootPresenter`](/src/ui/bin/root_presenter/README.md).
This library should not be used in new programs, as [fuchsia.ui.input:InputReports](https://fuchsia.googlesource.com/fuchsia/+/HEAD/sdk/fidl/fuchsia.ui.input/input_reports.fidl) is deprecated.
### TEST
This program has the following test command:
Interface test:
```
fx test input-report-reader-test
```
## Class Organization
`InputReader` is the top-level class that is created and holds all other classes.
`InputReader` is responsible for creating the device watchers for the system.
At the moment we only have one type of `DeviceWatcher`, `FdioDeviceWatcher`.
`FdioDeviceWatcher` watches for new InputReport devices. These devices appear as files
in the `/dev/class/input-report/` directory.
When `FdioDeviceWatcher` discovers a new device, it creates a channel to the device.
This channel is then passed through a callback up to `InputReader`.
`InputReader` creates an `InputInterpreter` with the new channel.
The `InputInterpreter` class is the class that drives the sending and receiving
of reports from the Driver. `InputInterpreter` gets a Report Descriptor
and parses the data into the form necessary for RootPresenter.
If the Report Descriptor contains a Touch device, ConsumerControl device, or Mouse device,
then the correct `fuchsa.ui.input:InputDevicePtr` will be allocated to send
reports and descriptors to RootPresenter.
### Class Relationships
* An `InputReader` has exactly one `DeviceWatcher`.
* An `InputReader` may have one or more `InputInterpreter` classes.
* An `InputInterpreter` has exactly one `zx::channel` representing a driver.