/*
* Copyright (c) 2020-2021 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
/**
* @addtogroup PWM
* @{
*
* @brief Provides standard pulse width modulation (PWM) interfaces for driver development.
*
* The PWM module abstracts the PWM capabilities of different system platforms to provide stable APIs for driver
* development. You can use this module to create/release PWM device handles, set the PWM period, polarity, and duty
* cycle, enable/disable PWM devices, and set/obtain the PWM configuration.
*
* @since 1.0
*/
/**
* @file pwm_if.h
*
* @brief Declares standard PWM interfaces for driver development.
*
* A driver needs to use the PWM interfaces to perform operations on a PWM device.
*
* @since 1.0
*/
#ifndef PWM_IF_H
#define PWM_IF_H
#include "platform_if.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
/**
* @brief Indicates the normal polarity of a PWM device.
*
* @since 1.0
*/
#define PWM_NORMAL_POLARITY 0
/**
* @brief Indicates the inverted polarity of a PWM device.
*
* @since 1.0
*/
#define PWM_INVERTED_POLARITY 1
/**
* @brief Indicates that a PWM device is in the disabled state.
*
* @since 1.0
*/
#define PWM_DISABLE_STATUS 0
/**
* @brief Indicates that a PWM device is in the enabled state.
*
* @since 1.0
*/
#define PWM_ENABLE_STATUS 1
/**
* @brief Enumerates PWM I/O commands.
*
* @since 1.0
*/
enum PwmIoCmd {
PWM_IO_GET = 0, /**< Get the PWM device. */
PWM_IO_PUT, /**< Put the PWM device. */
PWM_IO_SET_CONFIG, /**< Set config. */
PWM_IO_GET_CONFIG, /**< Get config. */
};
/**
* @brief Defines the PWM device configuration parameters.
*
* @attention The specific PWM device determines which variables in this structure are supported.
*
* @since 1.0
*/
struct PwmConfig {
uint32_t duty; /**< Duty cycle, in nanoseconds */
uint32_t period; /**< PWM period, in nanoseconds */
uint32_t number; /**< Number of square waves to generate. A positive value indicates that
* the specified number of square waves will be generated, and 0 indicates
* that square waves will be continuously generated.
*/
uint8_t polarity; /**< Polarity
* --------------------- | ---------------------
* PWM_NORMAL_POLARITY | Normal polarity
* PWM_INVERTED_POLARITY | Inverted polarity
*/
uint8_t status; /**< Running status
* ------------------ | ------------------
* PWM_DISABLE_STATUS | Disabled
* PWM_ENABLE_STATUS | Enabled
*/
};
/**
* @brief Obtains the PWM device handle.
*
* @param num Indicates the PWM device number.
*
* @return Returns the PWM device handle if the operation is successful; returns NULL otherwise.
*
* @since 1.0
*/
DevHandle PwmOpen(uint32_t num);
/**
* @brief Releases the PWM device handle.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
*
* @since 1.0
*/
void PwmClose(DevHandle handle);
/**
* @brief Sets the PWM period.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
* @param period Indicates the PWM device period to set, in nanoseconds.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmSetPeriod(DevHandle handle, uint32_t period);
/**
* @brief Sets the PWM duty cycle.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
* @param duty Indicates the duty cycle to set, in nanoseconds.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmSetDuty(DevHandle handle, uint32_t duty);
/**
* @brief Sets the PWM polarity.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
* @param polarity Indicates the polarity to set, which can be {@link PWM_NORMAL_POLARITY}
* or {@link PWM_INVERTED_POLARITY}.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmSetPolarity(DevHandle handle, uint8_t polarity);
/**
* @brief Enables the PWM device.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmEnable(DevHandle handle);
/**
* @brief Disables the PWM device.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmDisable(DevHandle handle);
/**
* @brief Sets the PWM device configuration parameters.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
* @param config Indicates the pointer to the {@link PwmConfig} structure that
* contains PWM device configuration parameters.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmSetConfig(DevHandle handle, struct PwmConfig *config);
/**
* @brief Obtains the PWM device configuration parameters.
*
* @param handle Indicates the PWM device handle obtained via {@link PwmOpen}.
* @param config Indicates the pointer to the {@link PwmConfig} structure that contains
* PWM device configuration parameters.
*
* @return Returns 0 if the operation is successful; returns a negative value otherwise.
*
* @since 1.0
*/
int32_t PwmGetConfig(DevHandle handle, struct PwmConfig *config);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* PWM_IF_H */
/** @} */