void healthd_board_mode_charger_battery_update( struct android::BatteryProperties *batt_prop) { static int blink_for_hvdcp = -1; static int old_color = 0; int i, color, soc, rc; bool blink = false; if (blink_for_hvdcp == -1) blink_for_hvdcp = leds_blink_for_hvdcp_allow(); if ((blink_for_hvdcp > 0) && is_hvdcp_inserted()) blink = true; soc = batt_prop->batteryLevel; for (i = 0; i < ((int)ARRAY_SIZE(soc_leds) - 1); i++) { if (soc < soc_leds[i].soc) break; } color = soc_leds[i].color; if (old_color != color) { if ((color & HVDCP_COLOR_MAP) && blink) { if (blink_for_hvdcp & RED_LED) { rc = write_file_int(RED_LED_BLINK_PATH, HVDCP_BLINK_TYPE); if (rc < 0) { LOGE("Fail to write: %s\n", RED_LED_BLINK_PATH); return; } } if (blink_for_hvdcp & GREEN_LED) { rc = write_file_int(GREEN_LED_BLINK_PATH, HVDCP_BLINK_TYPE); if (rc < 0) { LOGE("Fail to write: %s\n", GREEN_LED_BLINK_PATH); return; } } } else { set_tricolor_led(0, old_color); set_tricolor_led(1, color); old_color = color; LOGV("soc = %d, set led color 0x%x\n", soc, soc_leds[i].color); } } }
static int set_battery_soc_leds(int soc) { int i, color, rc; static int old_color = 0; for (i = 0; i < (int)ARRAY_SIZE(soc_leds); i++) { if (soc <= soc_leds[i].soc) break; } color = soc_leds[i].color; if (old_color != color) { rc = set_tricolor_led(0, old_color); if (rc < 0) LOGE(CHGR_TAG, "Error in setting old_color on tricolor_led\n"); rc = set_tricolor_led(1, color); if (rc < 0) LOGE(CHGR_TAG, "Error in setting color on tricolor_led\n"); if (!rc) { old_color = color; LOGV(CHGR_TAG, "soc = %d, set led color 0x%x\n", soc, soc_leds[i].color); } } return 0; }