diff --git a/components/drivers/include/drivers/encoder.h b/components/drivers/include/drivers/encoder.h index 57cb47e6fbb06c5654830661ca0f48e8009b4545..f338f9e845e881ee3d95248fdbe3993ed8daeecb 100644 --- a/components/drivers/include/drivers/encoder.h +++ b/components/drivers/include/drivers/encoder.h @@ -38,6 +38,7 @@ struct rt_encoder_ops { rt_err_t (*init)(struct rt_encoder_device *encoder); rt_int32_t (*get_count)(struct rt_encoder_device *encoder); + rt_err_t (*clear_count)(struct rt_encoder_device *encoder); rt_err_t (*control)(struct rt_encoder_device *encoder, rt_uint32_t cmd, void *args); }; diff --git a/components/drivers/misc/encoder.c b/components/drivers/misc/encoder.c index ec799bd5feec8f88703e98f537ab2fa922eb17c6..e9e1da0f40890443656f04026cba52dee9bc5de9 100644 --- a/components/drivers/misc/encoder.c +++ b/components/drivers/misc/encoder.c @@ -77,12 +77,14 @@ static rt_err_t rt_encoder_control(struct rt_device *dev, int cmd, void *args) encoder = (struct rt_encoder_device *)dev; switch (cmd) { + case ENCODER_CMD_CLEAR_COUNT: + result = encoder->ops->clear_count(encoder); + break; case ENCODER_CMD_GET_TYPE: *(enum rt_encoder_type *)args = encoder->type; break; case ENCODER_CMD_ENABLE: case ENCODER_CMD_DISABLE: - case ENCODER_CMD_CLEAR_COUNT: result = encoder->ops->control(encoder, cmd, args); break; default: