| // Copyright 2019 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.pwm; |
| |
| using zx; |
| |
| struct PwmConfig { |
| bool polarity; |
| uint32 period_ns; |
| /// duty_cycle range: [0.0, 100.0] |
| float32 duty_cycle; |
| /// TODO(fxbug.dev/41256): Vendor extensions |
| /// mode_config should be mode specific parameters. The first parameter should always be mode. |
| /// For example, a PWM supporting regular mode and 2 timer mode should have: |
| /// struct mode_config_regular {}; |
| /// |
| /// struct mode_config_two_timer { |
| /// uint32_t period_ns2; |
| /// float duty_cycle2; |
| /// uint8_t timer1; |
| /// uint8_t timer2; |
| /// }; |
| /// |
| /// struct mode_config { |
| /// uint32_t mode; |
| /// union { |
| /// struct mode_config_regular regular; |
| /// struct mode_config_two_timer two_timer; |
| /// }; |
| /// }; |
| vector<voidptr>? mode_config; |
| }; |
| |
| [Layout = "ddk-protocol"] |
| protocol Pwm { |
| /// Gets the current config of the PWM. |
| /// @Returns : |s| : ZX_OK if success. |
| /// @Returns : |config| : current config of PWM. |
| GetConfig() -> (zx.status s, PwmConfig config); |
| |
| /// Sets the configurations of the PWM |
| /// |config| : Configurations. |
| /// @Returns : |s| : ZX_OK if success. |
| SetConfig(PwmConfig config) -> (zx.status s); |
| |
| /// Enables the PWM. |
| /// @Returns : |s| : ZX_OK if success. |
| Enable() -> (zx.status s); |
| |
| /// Disables the PWM. |
| /// @Returns : |s| : ZX_OK if success. |
| Disable() -> (zx.status s); |
| }; |
| |
| [Layout = "ddk-protocol"] |
| protocol PwmImpl { |
| /// Gets the current config of the PWM. |
| /// |idx| : Index of requested PWM. |
| /// @Returns: |s| : ZX_OK if success. |
| /// @Returns : |config| : current config of PWM. |
| GetConfig(uint32 idx) -> (zx.status s, PwmConfig config); |
| |
| /// Sets the configurations of the PWM. |
| /// |idx| : Index of requested PWM. |
| /// |config| : Configurations. |
| /// @Returns : |s| : ZX_OK if success. |
| SetConfig(uint32 idx, PwmConfig config) -> (zx.status s); |
| |
| /// Enables the PWM. |
| /// |idx| : Index of requested PWM. |
| /// @Returns : |s| : ZX_OK if success. |
| Enable(uint32 idx) -> (zx.status s); |
| |
| /// Disables the PWM. |
| /// |idx| : Index of requested PWM. |
| /// @Returns : |s| : ZX_OK if success. |
| Disable(uint32 idx) -> (zx.status s); |
| }; |