| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #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) {
- gpio_config_t config[1] = {0};
- config->pin_bit_mask = 1UL << target;
- config->mode = GPIO_MODE_OUTPUT;
- config->pull_up_en = GPIO_PULLUP_DISABLE;
- config->pull_down_en = GPIO_PULLDOWN_DISABLE;
- config->intr_type = GPIO_INTR_DISABLE;
- if (gpio_config(config) == 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
|