| // Copyright 2023 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.driver.framework; |
| |
| using zx; |
| |
| /// This protocol is used by the Driver Framework's Driver Host to communicate various messages and |
| /// lifecycle hooks to the driver. The connection for this protocol is established through the |
| /// |DriverRegistration| defined in the `driver_symbols` library. |
| /// |
| /// Once the driver has closed its server end, the Driver Framework will initiate the shutdown |
| /// of all dispatchers belonging to this driver. |
| @transport("Driver") |
| @available(added=15) |
| open protocol Driver { |
| /// Starts the driver with the given |start_args|. |
| /// |
| /// Drivers should finish their initial setup and enumeration before returning from |Start|. |
| /// In particular they should enumerate all currently available nodes by utilizing |
| /// `fuchsia.driver.framework/Node.AddChild` and waiting for all calls to be completed. |
| /// |
| /// The Framework will not consider the driver to be started until this call has returned |
| /// successfully. Therefore a driver will not have |Stop| called on it until after it has |
| /// replied to |Start| successfully. |
| /// |
| /// If a driver returns an error, it will not have |Stop| called on it before the |
| /// Driver Framework initiates shutdown of the driver's dispatchers. Therefore it should have |
| /// performed all necessary cleanup before returning an error. |
| flexible Start(resource struct { |
| start_args DriverStartArgs; |
| }) -> () error zx.Status; |
| |
| /// Stops the driver. To stop, the driver should teardown any resources it set up in or after |
| /// |Start|. This is a one-way FIDL method. When the driver has completed stopping, it should |
| /// close its server end. Asynchronous operations should fully complete before closing |
| /// the server end. |
| flexible Stop(); |
| }; |