@@ -300,43 +300,43 @@ static uint8_t precise_kelvin_convert_to_percentage(uint16_t kelvin)
300300 */
301301static void cct_and_brightness_convert_and_power_limit (lightbulb_led_beads_comb_t led_beads , float multiple , uint8_t cct , uint8_t brightness , uint16_t white_value [])
302302{
303+ uint16_t max_value = 0 ;
304+ hal_get_driver_feature (QUERY_MAX_INPUT_VALUE , & max_value );
305+
303306 if (led_beads == LED_BEADS_1CH_C || led_beads == LED_BEADS_4CH_RGBC || led_beads == LED_BEADS_4CH_RGBCC ) {
304- uint16_t value = brightness * 255 / 100 ;
307+ uint16_t value = brightness / 100.0 * max_value ;
305308 hal_get_linear_table_value ((uint8_t )value , & white_value [3 ]);
306309 if (led_beads == LED_BEADS_4CH_RGBCC ) {
307310 hal_get_linear_table_value ((uint8_t )value , & white_value [4 ]);
308311 }
309312 } else if (led_beads == LED_BEADS_1CH_W || led_beads == LED_BEADS_4CH_RGBW || led_beads == LED_BEADS_4CH_RGBWW ) {
310- uint16_t value = brightness * 255 / 100 ;
311- hal_get_linear_table_value ((uint8_t )value , & white_value [4 ]);
313+ uint16_t value = brightness / 100.0 * max_value ;
314+ hal_get_linear_table_value (value , & white_value [4 ]);
315+
312316 if (led_beads == LED_BEADS_4CH_RGBWW ) {
313317 hal_get_linear_table_value ((uint8_t )value , & white_value [3 ]);
314318 }
315319 } else if ((led_beads == LED_BEADS_2CH_CW || led_beads == LED_BEADS_5CH_RGBCW ) && IS_WHITE_OUTPUT_HARDWARE_MIXED ()) {
316- uint16_t value1 = cct * 255 / 100 ;
317- uint16_t value2 = brightness * 255 / 100 ;
320+ uint16_t value1 = cct / 100.0 * max_value ;
321+ uint16_t value2 = brightness / 100.0 * max_value ;
318322 hal_get_linear_table_value ((uint8_t )value1 , & white_value [3 ]);
319323 hal_get_linear_table_value ((uint8_t )value2 , & white_value [4 ]);
320324 } else if (led_beads == LED_BEADS_2CH_CW || ((led_beads == LED_BEADS_5CH_RGBCW ) && (s_lb_obj -> cap .enable_precise_cct_control == false))) {
321- uint16_t max_value ;
322325 float max_power ;
323326 float _c = cct / 100.0 ;
324327 float _w = (100 - cct ) / 100.0 ;
325-
326- hal_get_driver_feature (QUERY_MAX_INPUT_VALUE , & max_value );
327328 float baseline = MAX (_c , _w );
329+
328330 max_power = MIN (max_value * multiple , max_value / baseline );
329331 _c = max_power * _c * (brightness / 100.0 );
330332 _w = max_power * _w * (brightness / 100.0 );
331333 hal_get_linear_table_value ((uint16_t )_c , & white_value [3 ]);
332334 hal_get_linear_table_value ((uint16_t )_w , & white_value [4 ]);
333335 } else {
334- uint16_t max_value ;
335336 float max_power ;
336337 lightbulb_cct_mapping_data_t data = search_mapping_cct_data (cct );
337338 ESP_LOGD (TAG , "%f, %f, %f, %f, %f" , data .rgbcw [0 ], data .rgbcw [1 ], data .rgbcw [2 ], data .rgbcw [3 ], data .rgbcw [4 ]);
338339
339- hal_get_driver_feature (QUERY_MAX_INPUT_VALUE , & max_value );
340340 float baseline = MAX (data .rgbcw [0 ], data .rgbcw [1 ]);
341341 baseline = MAX (baseline , data .rgbcw [2 ]);
342342 baseline = MAX (baseline , data .rgbcw [3 ]);
0 commit comments