123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #ifndef ROTARY_ENCODER_H
- #define ROTARY_ENCODER_H
- #include <stdbool.h>
- #include <stdint.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/queue.h"
- #include "esp_err.h"
- #include "driver/gpio.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef int32_t rotary_encoder_position_t;
- typedef enum
- {
- ROTARY_ENCODER_DIRECTION_NOT_SET = 0,
- ROTARY_ENCODER_DIRECTION_CLOCKWISE,
- ROTARY_ENCODER_DIRECTION_COUNTER_CLOCKWISE,
- } rotary_encoder_direction_t;
- #define TABLE_COLS 4
- typedef uint8_t table_row_t[TABLE_COLS];
- typedef struct
- {
- rotary_encoder_position_t position;
- rotary_encoder_direction_t direction;
- } rotary_encoder_state_t;
- typedef struct
- {
- gpio_num_t pin_a;
- gpio_num_t pin_b;
- QueueHandle_t queue;
- const table_row_t * table;
- uint8_t table_state;
- volatile rotary_encoder_state_t state;
- } rotary_encoder_info_t;
- typedef struct
- {
- rotary_encoder_state_t state;
- } rotary_encoder_event_t;
- esp_err_t rotary_encoder_init(rotary_encoder_info_t * info, gpio_num_t pin_a, gpio_num_t pin_b);
- esp_err_t rotary_encoder_enable_half_steps(rotary_encoder_info_t * info, bool enable);
- esp_err_t rotary_encoder_flip_direction(rotary_encoder_info_t * info);
- esp_err_t rotary_encoder_uninit(rotary_encoder_info_t * info);
- QueueHandle_t rotary_encoder_create_queue(void);
- esp_err_t rotary_encoder_set_queue(rotary_encoder_info_t * info, QueueHandle_t queue);
- esp_err_t rotary_encoder_get_state(const rotary_encoder_info_t * info, rotary_encoder_state_t * state);
- esp_err_t rotary_encoder_reset(rotary_encoder_info_t * info);
- #ifdef __cplusplus
- }
- #endif
- #endif
|