| // 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`. |
| type GpioFlags = strict enum : uint32 { |
| PULL_DOWN = 0x0; |
| PULL_UP = 0x1; |
| NO_PULL = 0x2; |
| PULL_MASK = 0x3; |
| }; |
| |
| protocol Gpio { |
| /// Configures a GPIO for input. |
| ConfigIn(struct { |
| flags GpioFlags; |
| }) -> (struct {}) error zx.status; |
| |
| /// Configures a GPIO for output. |
| ConfigOut(struct { |
| initial_value uint8; |
| }) -> (struct {}) error zx.status; |
| |
| /// Reads the current value of a GPIO (0 or 1). |
| Read() -> (struct { |
| value uint8; |
| }) error zx.status; |
| |
| /// Sets the current value of the GPIO (any non-zero value maps to 1). |
| Write(struct { |
| value uint8; |
| }) -> (struct {}) 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(struct { |
| ds_ua uint64; |
| }) -> (struct { |
| actual_ds_ua uint64; |
| }) error zx.status; |
| |
| /// Gets the configured drive strength of the GPIO in microamps (ua). |
| GetDriveStrength() -> (struct { |
| result_ua uint64; |
| }) error zx.status; |
| |
| /// Gets an interrupt object pertaining to a particular GPIO pin. `flags` |
| /// is passed as the `options` parameter when |
| /// [creating the interrupt](https://fuchsia.dev/fuchsia-src/reference/syscalls/interrupt_create). |
| GetInterrupt(struct { |
| flags uint32; |
| }) -> (resource struct { |
| irq zx.handle:INTERRUPT; |
| }) error zx.status; |
| |
| /// Release the interrupt. |
| ReleaseInterrupt() -> (struct {}) error zx.status; |
| }; |