}
static uint8_t backlight_status = 0;
+static uint8_t last_brightness = 5;
#define LCD_BACKLIGHT_PWM_PIN S_AGPIO_L16 /* 背光PWM引脚 */
-void uapi_lcd_backlight_off(void)
+
+static void backlight_ic_reset(void)
{
+ uapi_pin_set_mode(LCD_BACKLIGHT_PWM_PIN, HAL_PIO_FUNC_GPIO);
+ uapi_gpio_set_dir(LCD_BACKLIGHT_PWM_PIN, GPIO_DIRECTION_OUTPUT);
+ uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_LOW);
+ uapi_tcxo_delay_us(180); // 等待IC就绪
+ // 输出0个下降沿(仅初始化GPIO,不发送脉冲,触发IC关闭当前驱动)
+ uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_HIGH);
+ uapi_tcxo_delay_us(30);
+}
+
+void uapi_lcd_backlight_off(void)
+{
if(backlight_status == 0)
return;
backlight_status = 0;
- uapi_pin_set_mode(LCD_BACKLIGHT_PWM_PIN, HAL_PIO_FUNC_GPIO);
- uapi_gpio_set_dir(LCD_BACKLIGHT_PWM_PIN, GPIO_DIRECTION_OUTPUT);
+ backlight_ic_reset();
+
uapi_gpio_set_val(LCD_BACKLIGHT_PWM_PIN, GPIO_LEVEL_LOW);
PRINT("uapi_lcd_backlight_off\r\n");
void uapi_lcd_backlight_on(void)
{
- if(backlight_status == 1)
- return;
-
- backlight_status = 1;
+ uint8_t brightness = cm_getScreenBrightness();
+ if(last_brightness != brightness)
+ {
+ last_brightness = brightness;
+ if(backlight_status == 1)
+ {
+ backlight_ic_reset();
+ backlight_status = 0;
+ }
- uint8_t brightness = 5;
+ }
- brightness = cm_getScreenBrightness();
printf("brightness:%d\n",brightness);
+ if(backlight_status == 1)
+ return;
+
+ backlight_status = 1;
+
uint8_t fall_edge_cnt = 0;
if (brightness <= 11) fall_edge_cnt = 7;
else if (brightness <= 24) fall_edge_cnt = 6;