|  | // Copyright 2020 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.hardware.gpio; | 
|  |  | 
|  | using zx; | 
|  |  | 
|  | /// Flags for `ConfigIn`. | 
|  | enum GpioFlags : uint32 { | 
|  | PULL_DOWN = 0x0; | 
|  | PULL_UP = 0x1; | 
|  | NO_PULL = 0x2; | 
|  | PULL_MASK = 0x3; | 
|  | }; | 
|  |  | 
|  | protocol Gpio { | 
|  | /// Configures a GPIO for input. | 
|  | ConfigIn(GpioFlags flags) -> () error zx.status; | 
|  |  | 
|  | /// Configures a GPIO for output. | 
|  | ConfigOut(uint8 initial_value) -> () error zx.status; | 
|  |  | 
|  | /// Reads the current value of a GPIO (0 or 1). | 
|  | Read() -> (uint8 value) error zx.status; | 
|  |  | 
|  | /// Sets the current value of the GPIO (any non-zero value maps to 1). | 
|  | Write(uint8 value) -> () error zx.status; | 
|  |  | 
|  | /// Sets the drive strength of the GPIO. | 
|  | /// actual_ds_ua is always >= ds_ua. If ds_ua is larger than max value, the drive strength will be set to the max value. | 
|  | /// Return error if unable to set drive strength. actual_ds_ua is not set in this case. | 
|  | SetDriveStrength(uint64 ds_ua) -> (uint64 actual_ds_ua) error zx.status; | 
|  | }; |