PersonalVotingMachine/basic-setup/main/impl/modules/RotaryEncodeModule.cpp

53 lines
1.4 KiB
C++
Raw Permalink Normal View History

2020-12-22 14:30:09 +02:00
/**
* @file RotaryEncodeModule.cpp
* @brief RotaryEncoderModule implementation file
* */
#include "module.h"
RotaryEncoderModule::RotaryEncoderModule(){};
void RotaryEncoderModule::setPins(gpio_num_t a, gpio_num_t b, gpio_num_t c){
ROT_ENC_A_GPIO = a;
ROT_ENC_B_GPIO = b;
ROT_ENC_C_GPIO = c;
ENABLE_HALF_STEPS = false;
FLIP_DIRECTION = false;
this->info = new rotary_encoder_info_t();
}
rotary_encoder_info_t* RotaryEncoderModule::getInfo() const{
return info;
}
esp_err_t RotaryEncoderModule::init(){
// Initialise the rotary encoder device with the GPIOs for A and B signals
ESP_ERROR_CHECK(rotary_encoder_init(info, ROT_ENC_A_GPIO, ROT_ENC_B_GPIO, ROT_ENC_C_GPIO));
ESP_ERROR_CHECK(rotary_encoder_enable_half_steps(info, ENABLE_HALF_STEPS));
if( FLIP_DIRECTION )
ESP_ERROR_CHECK(rotary_encoder_flip_direction(info));
// Create a queue for events from the rotary encoder driver.
// Tasks can read from this queue to receive up to date position information.
QueueHandle_t event_queue = rotary_encoder_create_queue();
ESP_ERROR_CHECK(rotary_encoder_set_queue(info, event_queue));
ESP_LOGI(TAG, "rotary encoder inited");
return ESP_OK;
};
esp_err_t RotaryEncoderModule::deinit(){
ESP_ERROR_CHECK(rotary_encoder_uninit(info));
ESP_LOGI(TAG, "deinited");
return ESP_OK;
};
RotaryEncoderModule& RotaryEncoderModule::Instance(){
static RotaryEncoderModule instance;
return instance;
}