From cc565da5a178d598d35cc9b7d4a1a36be5fb17f5 Mon Sep 17 00:00:00 2001 From: tangweikang Date: Fri, 9 Aug 2019 18:37:16 +0800 Subject: [components][drivers] add encoder driven framework --- components/drivers/include/drivers/encoder.h | 65 ++++++++++++++++++++++++++++ components/drivers/include/rtdevice.h | 4 ++ 2 files changed, 69 insertions(+) create mode 100644 components/drivers/include/drivers/encoder.h (limited to 'components/drivers/include') diff --git a/components/drivers/include/drivers/encoder.h b/components/drivers/include/drivers/encoder.h new file mode 100644 index 0000000000..c6c3e4d708 --- /dev/null +++ b/components/drivers/include/drivers/encoder.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-08-08 balanceTWK the first version + */ + +#ifndef __ENCODER_H__ +#define __ENCODER_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* encoder control command */ +typedef enum +{ + ENCODER_INFO_GET = 0x01, /* get a encoder feature information */ + ENCODER_SWITCH_ON, /* switch on encoder */ + ENCODER_SWITCH_OFF, /* switch off encoder */ + ENCODER_COUNT_CLEAR, /* clear encoder count */ +} rt_encoder_ctrl_t; + +/* encoder type */ +typedef enum +{ + SINGLE_PHASE_ENCODER = 0x01, /* single phase encoder */ + AB_PHASE_ENCODER /* two phase encoder */ +} rt_encoder_type_t; + +struct rt_encoder_device; + +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 (*control)(struct rt_encoder_device *encoder, rt_uint32_t cmd, void *args); +}; + +/* Encoder feature information */ +struct rt_encoder_info +{ + rt_encoder_type_t type; /* the type of encoder */ +}; + +typedef struct rt_encoder_device +{ + struct rt_device parent; + const struct rt_encoder_ops *ops; + const struct rt_encoder_info *info; +} rt_encoder_t; + +rt_err_t rt_device_encoder_register(rt_encoder_t *encoder, const char *name, void *user_data); + +#ifdef __cplusplus +} +#endif + +#endif /* __ENCODER_H__ */ diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h index f764d30c24..0c009e9580 100644 --- a/components/drivers/include/rtdevice.h +++ b/components/drivers/include/rtdevice.h @@ -126,6 +126,10 @@ extern "C" { #include "drivers/crypto.h" #endif +#ifdef RT_USING_ENCODER +#include "drivers/encoder.h" +#endif + #ifdef __cplusplus } #endif -- cgit v1.3.1