如上面贴给你的dsi_panel_set_backlight这个函数,我需要在case DSI_BACKLIGHT_EXTERNAL:下,同时并发执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness两个函数来设置背光亮度。
时间: 2023-07-06 12:29:51 浏览: 56
要在case DSI_BACKLIGHT_EXTERNAL下同时并发执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness两个函数来设置背光亮度,可以使用多线程来实现。以下是一个简单的示例代码:
```c
int dsi_panel_set_backlight(struct dsi_panel *panel, u32 bl_lvl) {
int rc = 0;
struct dsi_backlight_config *bl = &panel->bl_config;
if (panel->host_config.ext_bridge_mode)
return 0;
DSI_DEBUG("backlight type:%d lvl:%d\n", bl->type, bl_lvl);
switch (bl->type) {
case DSI_BACKLIGHT_WLED:
rc = backlight_device_set_brightness(bl->raw_bd, bl_lvl);
break;
case DSI_BACKLIGHT_DCS:
rc = dsi_panel_update_backlight(panel, bl_lvl);
break;
case DSI_BACKLIGHT_EXTERNAL:
{
pthread_t thread1, thread2;
int bl_lvl1 = bl_lvl, bl_lvl2 = bl_lvl;
// 创建两个线程,分别执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness函数
pthread_create(&thread1, NULL, lcd_bl_set_led_brightness, (void *)&bl_lvl1);
pthread_create(&thread2, NULL, lcd_bias_set_led_brightness, (void *)&bl_lvl2);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
}
break;
case DSI_BACKLIGHT_PWM:
rc = dsi_panel_update_pwm_backlight(panel, bl_lvl);
break;
default:
DSI_ERR("Backlight type(%d) not supported\n", bl->type);
rc = -ENOTSUPP;
}
return rc;
}
```
在case DSI_BACKLIGHT_EXTERNAL下,我们创建了两个线程,分别执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness函数。线程的创建和等待使用了pthread库中的函数pthread_create和pthread_join。注意,在多线程编程中,需要注意线程安全问题,例如共享变量的访问等。