blob: 6b1d6829e2b2f329078272f16d7435511194386e [file] [log] [blame] [view]
# Driver examples
This page contains a list of the examples intended to demonstrate Fuchsia
driver concepts.
## Basic examples
These examples showcase common [driver concepts][driver-concepts]:
* **Skeleton driver** - The [skeleton driver example][skeleton-driver] is
a minimal driver written in DFv2.
* **Template driver** - The [template driver][driver-template] is a minimal
driver written in DFv2, and built with SDK rules (which can be used in
both the Fuchsia source checkout and Fuchsia SDK environments).
* **Simple driver** - The [simple driver examples][simple-driver] showcases
how to write a [DFv1 driver][dfv1-simple-driver] and
a [DFv2 driver][dfv2-simple-driver] with the following common patterns:
* Adding logs
* Adding a child node
* Implementing stop functions
* Setting up a compat device server
* **Metadata** - The [metadata example][driver-metadata] demonstrates how
to define metadata types and pass metadata from a driver to its children.
## Transport examples
These examples showcase communication between drivers:
* **Banjo** - These examples demonstrate a parent driver serving a Banjo
transport and a child driver that connects and queries data from it.
* [DFv1 example][dfv1-banjo-transport]
* [DFv2 example][dfv2-banjo-transport]
* **Zircon transport** - These examples demonstrate a parent driver serving
a FIDL protocol over Zircon transport and a child driver that connects
and queries data from it.
* [DFv1 example][dfv1-zircon-transport]
* [DFv2 example][dfv2-zircon-transport]
* **Driver transport** - These examples demonstrate a parent driver serving
a FIDL protocol over driver transport and a child driver that connects and
queries data from it.
* [DFv1 example][dfv1-driver-transport]
* [DFv2 example][dfv2-driver-transport]
## Bind examples
These examples demonstrate how to write and use bind libraries for drivers:
* **Bind library** - This [example][bindlib] demonstrates how to write a bind library.
* **Bind library codegen** - This [example][bindlib-codegen] demonstrates how to
use the C++ and Rust constants generated from a bind library.
* **FIDL bind library codegen** - This [example][bindlib-codegen] demonstrates how to
write a bind library.
## Test examples
These examples demonstrate writing unit and integration tests for drivers.
### Unit tests
Unit test examples:
* [**Simple driver**][dfv2-test-cc] - Barebones unit test for the simple driver
example
* [**Banjo transport**][dfv2-test-banjo] - Unit test that verifies that the child
driver can query from a fake Banjo server
* [**Zircon transport**][dfv2-test-zircon] - Unit test that verifies that the
child driver can query from a fake FIDL zircon server
* [**Driver transport**][dfv2-test-driver] - Unit test that verifies that the child
driver can query from a fake FIDL driver server
### Integration tests
The [Driver Test Realm examples][driver-test-realm] demonstrate how to write
hermetic and non-hermetic integration tests for a driver.
<!-- Reference links -->
[driver-concepts]: /docs/concepts/drivers/README.md
[skeleton-driver]: /examples/drivers/skeleton/
[driver-template]: /examples/drivers/template/
[simple-driver]: /examples/drivers/simple/
[dfv1-simple-driver]: /examples/drivers/simple/dfv1/
[dfv2-simple-driver]: /examples/drivers/simple/dfv2/
[driver-metadata]: /examples/drivers/metadata
[dfv1-banjo-transport]: /examples/drivers/transport/banjo/v1/
[dfv2-banjo-transport]: /examples/drivers/transport/banjo/v2/
[dfv1-zircon-transport]: /examples/drivers/transport/zircon/v1/
[dfv2-zircon-transport]: /examples/drivers/transport/zircon/v2/
[dfv1-driver-transport]: /examples/drivers/transport/driver/v1/
[dfv2-driver-transport]: /examples/drivers/transport/driver/v2/
[bindlib]: /examples/drivers/bind/bindlib/
[bindlib-codegen]: /examples/drivers/bind/bindlib_codegen/
[dfv2-test-cc]: /examples/drivers/simple/dfv2/tests/
[dfv2-test-banjo]: /examples/drivers/transport/banjo/v2/tests/
[dfv2-test-zircon]: /examples/drivers/transport/zircon/v2/tests/
[dfv2-test-driver]: /examples/drivers/transport/driver/v2/tests/
[driver-test-realm]: /examples/drivers/driver_test_realm/