| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #ifdef CHLCD_ON_ESP
- #include <cx/chlcd.h>
- #include <driver/gpio.h>
- #include <driver/ledc.h>
- #include <rom/ets_sys.h>
- #include <freertos/FreeRTOS.h>
- #include <freertos/task.h>
- #ifndef CHLCD_LED_PWM_TIMER
- #define CHLCD_LED_PWM_TIMER LEDC_TIMER_MAX
- #endif
- #ifndef CHLCD_LED_PWM_CHANNEL
- #define CHLCD_LED_PWM_CHANNEL LEDC_CHANNEL_MAX
- #endif
- #ifndef CHLCD_LED_PWM_FREQUENCY
- #define CHLCD_LED_PWM_FREQUENCY 20000
- #endif
- chlcd_error_t chlcd_pin_set_output(chlcd_pin_t target) {
- if (gpio_output_enable(target) == ESP_OK) {
- return CHLCD_SUCCESS;
- }
- return CHLCD_BAD_ARGUMENT;
- }
- chlcd_error_t chlcd_pin_write(chlcd_pin_t target, bool state) {
- if (gpio_set_level(target, state ? 1 : 0) == ESP_OK) {
- return CHLCD_SUCCESS;
- }
- return CHLCD_BAD_ARGUMENT;
- }
- chlcd_error_t chlcd_pin_set_pwm(chlcd_pin_t target) {
- ledc_timer_config_t timer_config[1] = {0};
- timer_config->speed_mode = LEDC_LOW_SPEED_MODE;
- timer_config->duty_resolution = LEDC_TIMER_12_BIT;
- timer_config->clk_cfg = LEDC_AUTO_CLK;
- timer_config->freq_hz = CHLCD_LED_PWM_FREQUENCY;
- timer_config->timer_num = CHLCD_LED_PWM_CHANNEL;
- if (ledc_timer_config(timer_config) != ESP_OK) {
- return CHLCD_BAD_ARGUMENT;
- }
- ledc_channel_config_t channel_config[1] = {0};
- channel_config->speed_mode = LEDC_LOW_SPEED_MODE;
- channel_config->channel = CHLCD_LED_PWM_CHANNEL;
- channel_config->timer_sel = CHLCD_LED_PWM_TIMER;
- channel_config->gpio_num = target;
- channel_config->duty = 0;
- channel_config->hpoint = 0;
- channel_config->sleep_mode = LEDC_SLEEP_MODE_KEEP_ALIVE;
- if (ledc_channel_config(channel_config) != ESP_OK) {
- return CHLCD_BAD_ARGUMENT;
- }
- return CHLCD_SUCCESS;
- }
- chlcd_error_t chlcd_pin_write_pwm(
- chlcd_pin_t target,
- uint16_t pwm
- ) {
- return CHLCD_SUCCESS;
- }
- chlcd_error_t chlcd_sleep_us(uint32_t time) {
- if (time < 1000) {
- ets_delay_us(time);
- return CHLCD_SUCCESS;
- }
- vTaskDelay(time / 1000 / portTICK_PERIOD_MS);
- return CHLCD_SUCCESS;
- }
- #endif
|