android 10 系统源码 充电指示灯设置流程
2021/11/26 20:10:27
本文主要是介绍android 10 系统源码 充电指示灯设置流程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
frameworks/base/services/core/java/com/android/server/BatteryService.java /** * Synchronize on BatteryService. */ public void updateLightsLocked() { final int level = mHealthInfo.batteryLevel; final int status = mHealthInfo.batteryStatus; if (level < mLowBatteryWarningLevel) { if (status == BatteryManager.BATTERY_STATUS_CHARGING) { // Solid red when battery is charging mBatteryLight.setColor(mBatteryLowARGB); } else { // Flash red when battery is low and not charging mBatteryLight.setFlashing(mBatteryLowARGB, Light.LIGHT_FLASH_TIMED, mBatteryLedOn, mBatteryLedOff); } } else if (status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL) { if (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90) { // Solid green when full or charging and nearly full mBatteryLight.setColor(mBatteryFullARGB); } else { // Solid orange when charging and halfway full mBatteryLight.setColor(mBatteryMediumARGB); } } else { // No lights if not charging and not low mBatteryLight.turnOff(); } } frameworks/base/services/core/java/com/android/server/lights/LightsService.java @Override public void setFlashing(int color, int mode, int onMS, int offMS) { synchronized (this) { setLightLocked(color, mode, onMS, offMS, BRIGHTNESS_MODE_USER); } } private void setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) { if (shouldBeInLowPersistenceMode()) { brightnessMode = BRIGHTNESS_MODE_LOW_PERSISTENCE; } else if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) { brightnessMode = mLastBrightnessMode; } if (!mInitialized || color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS || mBrightnessMode != brightnessMode) { if (DEBUG) Slog.v(TAG, "setLight #" + mId + ": color=#" + Integer.toHexString(color) + ": brightnessMode=" + brightnessMode); mInitialized = true; mLastColor = mColor; mColor = color; mMode = mode; mOnMS = onMS; mOffMS = offMS; mBrightnessMode = brightnessMode; Trace.traceBegin(Trace.TRACE_TAG_POWER, "setLight(" + mId + ", 0x" + Integer.toHexString(color) + ")"); try { setLight_native(mId, color, mode, onMS, offMS, brightnessMode); } finally { Trace.traceEnd(Trace.TRACE_TAG_POWER); } } }
frameworks/base/services/core/jni/com_android_server_lights_LightsService.cpp static void setLight_native( JNIEnv* /* env */, jobject /* clazz */, jint light, jint colorARGB, jint flashMode, jint onMS, jint offMS, jint brightnessMode) { if (!sLightSupported) { return; } if (!validate(light, flashMode, brightnessMode)) { return; } Type type = static_cast<Type>(light); LightState state = constructState( colorARGB, flashMode, onMS, offMS, brightnessMode); { android::base::Timer t; sp<ILight> hal = ILight::getService(); if (hal == nullptr) { sLightSupported = false; return; } Return<Status> ret = hal->setLight(type, state); processReturn(ret, type, state); if (t.duration() > 50ms) ALOGD("Excessive delay setting light"); } } hardware/interfaces/light/2.0/default/Light.cpp // Methods from ::android::hardware::light::V2_0::ILight follow. Return<Status> Light::setLight(Type type, const LightState& state) { auto it = mLights.find(type); if (it == mLights.end()) { return Status::LIGHT_NOT_SUPPORTED; } light_device_t* hwLight = it->second; light_state_t legacyState { .color = state.color, .flashMode = static_cast<int>(state.flashMode), .flashOnMS = state.flashOnMs, .flashOffMS = state.flashOffMs, .brightnessMode = static_cast<int>(state.brightnessMode), }; int ret = hwLight->set_light(hwLight, &legacyState); switch (ret) { case -ENOSYS: return Status::BRIGHTNESS_NOT_SUPPORTED; case 0: return Status::SUCCESS; default: return Status::UNKNOWN; } } hardware/qcom/display/liblight/lights.c static int set_speaker_light_locked(struct light_device_t* dev, struct light_state_t const* state) { int red, green, blue; int blink; int onMS, offMS; unsigned int colorRGB; if(!dev) { return -1; } switch (state->flashMode) { case LIGHT_FLASH_TIMED: onMS = state->flashOnMS; offMS = state->flashOffMS; break; case LIGHT_FLASH_NONE: default: onMS = 0; offMS = 0; break; } colorRGB = state->color; #if 0 ALOGD("set_speaker_light_locked mode %d, colorRGB=%08X, onMS=%d, offMS=%d\n", state->flashMode, colorRGB, onMS, offMS); #endif red = (colorRGB >> 16) & 0xFF; green = (colorRGB >> 8) & 0xFF; blue = colorRGB & 0xFF; if (onMS > 0 && offMS > 0) { /* * if ON time == OFF time * use blink mode 2 * else * use blink mode 1 */ if (onMS == offMS) blink = 2; else blink = 1; } else { blink = 0; } if (blink) { if (red) { if (write_int(RED_BLINK_FILE, blink)) write_int(RED_LED_FILE, 0); } if (green) { if (write_int(GREEN_BLINK_FILE, blink)) write_int(GREEN_LED_FILE, 0); } if (blue) { if (write_int(BLUE_BLINK_FILE, blink)) write_int(BLUE_LED_FILE, 0); } } else { write_int(RED_LED_FILE, red); write_int(GREEN_LED_FILE, green); write_int(BLUE_LED_FILE, blue); } return 0; }
这篇关于android 10 系统源码 充电指示灯设置流程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路