/** * @file dev_pwm.c * @author your name (you@domain.com) * @brief * @version 0.1 * @date 2023-04-05 * * @copyright Copyright (c) 2023 * */ #include #include "dev_pwm.h" #include "ems_assert.h" #ifdef __cplusplus extern "C" { #endif EMS_TAG("EMS_PWM") /* private variables -------------------------------------------------------- */ static ems_ops_t _obj_ops = { .open = NULL, .close = NULL, .read = NULL, .write = NULL, }; /** * @brief * * @param me * @param name * @param ops * @param user_data */ void ems_pwm_register(ems_pwm_t * const me, const char *name, const ems_pwm_ops_t *ops, void *user_data) { ems_assert(me != NULL); ems_assert(name != NULL); ems_assert(ops != NULL); ems_obj_attr_t attr = { .user_data = user_data, .standlone = true, .type = EMS_OBJ_PWM, }; ems_register(&me->super, name, &_obj_ops, &attr); me->ops = ops; me->duty_ratio = 0; me->ops->init(me); } /** * @brief * * @param me * @param duty_ratio */ void ems_pwm_set_duty(ems_object_t * const me, uint8_t duty_ratio) { ems_assert(me != NULL); ems_assert(duty_ratio <= 100); ems_assert(me->attr.type == EMS_OBJ_PWM); ems_pwm_t *pwm = (ems_pwm_t *)me; if (duty_ratio != pwm->duty_ratio) { pwm->ops->set_duty(pwm, duty_ratio); pwm->duty_ratio = duty_ratio; } } #ifdef __cplusplus } #endif