encoder.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2019-08-08 balanceTWK the first version
  9. */
  10. #ifndef __ENCODER_H__
  11. #define __ENCODER_H__
  12. #include <rtthread.h>
  13. #include <rtdevice.h>
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /* encoder control command */
  18. #define ENCODER_CMD_GET_TYPE (128 + 0) /* get a encoder type information */
  19. #define ENCODER_CMD_ENABLE (128 + 1) /* enable encoder */
  20. #define ENCODER_CMD_DISABLE (128 + 2) /* disable encoder */
  21. #define ENCODER_CMD_CLEAR_COUNT (128 + 3) /* clear encoder count */
  22. /* encoder type */
  23. enum rt_encoder_type
  24. {
  25. UNKNOWN_ENCODER_TYPE = 0x00, /* Unknown encoder type */
  26. SINGLE_PHASE_ENCODER, /* single phase encoder */
  27. AB_PHASE_ENCODER /* two phase encoder */
  28. };
  29. struct rt_encoder_device;
  30. struct rt_encoder_ops
  31. {
  32. rt_err_t (*init)(struct rt_encoder_device *encoder);
  33. rt_int32_t (*get_count)(struct rt_encoder_device *encoder);
  34. rt_err_t (*control)(struct rt_encoder_device *encoder, rt_uint32_t cmd, void *args);
  35. };
  36. struct rt_encoder_device
  37. {
  38. struct rt_device parent;
  39. const struct rt_encoder_ops *ops;
  40. enum rt_encoder_type type;
  41. };
  42. rt_err_t rt_device_encoder_register(struct rt_encoder_device *encoder, const char *name, void *user_data);
  43. #ifdef __cplusplus
  44. }
  45. #endif
  46. #endif /* __ENCODER_H__ */