/*
* Copyright (C) 2011-2012 sakuramilk <c.sakuramilk@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sakuramilk.TweakGS2.Display;
import java.io.File;
import android.content.Context;
import net.sakuramilk.util.Misc;
import net.sakuramilk.util.RootProcess;
import net.sakuramilk.util.SettingManager;
import net.sakuramilk.util.SysFs;
public class DisplaySetting extends SettingManager {
public static final String KEY_LCD_TYPE = "disp_lcd_type";
public static final String KEY_LCD_GAMMA = "disp_lcd_gamma";
public static final String KEY_MDNIE_ENABLED = "disp_mdnie_enabled";
public static final String KEY_MDNIE_MODE = "disp_mdnie_mode";
public static final String KEY_MDNIE_MCM_CB = "disp_mdnie_color_cb";
public static final String KEY_MDNIE_MCM_CR = "disp_mdnie_color_cr";
public static final String MDNIE_MCM_ENABLE = "69";
public static final String MDNIE_MCM_DISABLE = "0";
public static final String LCD_BASE_PATH_KERNEL_3_0 = "/sys/devices/platform/samsung-pd.2/s3cfb.0/spi_gpio.3/spi_master/spi3/spi3.0/lcd/panel";
public static final String LCD_BASE_PATH_KERNEL_3_0_OLD = "/sys/devices/platform/samsung-pd.2/s3cfb.0/spi_gpio.3/spi3.0/lcd/panel";
public static final String LCD_BASE_PATH_KERNEL_2_6 = "/sys/devices/platform/samsung-pd.2/s3cfb.0/spi_gpio.3/spi3.0";
public static final String LCD_USER_LCDTYPE = "/user_lcdtype";
public static final String LCD_USER_GAMMA_ADJUST = "/user_gamma_adjust";
private final SysFs mSysFsLcdType;
private final SysFs mSysFsLcdGamma;
private final SysFs mSysFsMdniePower = new SysFs("/sys/devices/platform/samsung-pd.2/s3cfb.0/mdnie_power");
private final SysFs mSysFsMdnieForceDisable = new SysFs("/sys/devices/platform/samsung-pd.2/s3cfb.0/mdnie_force_disable");
public static final String MDNIE_BASE_PATH_KERNEL_3_0 = "/sys/devices/platform/samsung-pd.2/mdnie/mdnie/mdnie";
public static final String MDNIE_BASE_PATH_KERNEL_2_6 = "/sys/devices/virtual/mdnieset_ui/switch_mdnieset_ui";
public static final String MDNIE_USER_MODE_CMD = "/user_mode";
public static final String MDNIE_USER_MCM_CB_CMD = "/user_cb";
public static final String MDNIE_USER_MCM_CR_CMD = "/user_cr";
public static final String MDNIE_USER_MODE_CMD_LEGACY = "/mdnieset_user_mode_cmd";
public static final String MDNIE_USER_MCM_CB_CMD_LEGACY = "/mdnieset_user_mcm_cb_cmd";
public static final String MDNIE_USER_MCM_CR_CMD_LEGACY = "/mdnieset_user_mcm_cr_cmd";
private final SysFs mSysFsMdnieMode;
private final SysFs mSysFsMdnieMcmCb;
private final SysFs mSysFsMdnieMcmCr;
public DisplaySetting(Context context, RootProcess rootProcess) {
super(context, rootProcess);
if (Misc.getKernelVersion() >= Misc.KERNEL_VER_3_0_0) {
File file = new File(LCD_BASE_PATH_KERNEL_3_0);
if (file.exists()) {
mSysFsLcdType = new SysFs(LCD_BASE_PATH_KERNEL_3_0 + LCD_USER_LCDTYPE);
mSysFsLcdGamma = new SysFs(LCD_BASE_PATH_KERNEL_3_0 + LCD_USER_GAMMA_ADJUST);
} else {
mSysFsLcdType = new SysFs(LCD_BASE_PATH_KERNEL_3_0_OLD + LCD_USER_LCDTYPE);
mSysFsLcdGamma = new SysFs(LCD_BASE_PATH_KERNEL_3_0_OLD + LCD_USER_GAMMA_ADJUST);
}
mSysFsMdnieMode = new SysFs(MDNIE_BASE_PATH_KERNEL_3_0 + MDNIE_USER_MODE_CMD);
mSysFsMdnieMcmCb = new SysFs(MDNIE_BASE_PATH_KERNEL_3_0 + MDNIE_USER_MCM_CB_CMD);
mSysFsMdnieMcmCr = new SysFs(MDNIE_BASE_PATH_KERNEL_3_0 + MDNIE_USER_MCM_CR_CMD);
} else {
mSysFsLcdType = new SysFs(LCD_BASE_PATH_KERNEL_2_6 + LCD_USER_LCDTYPE);
mSysFsLcdGamma = new SysFs(LCD_BASE_PATH_KERNEL_2_6 + LCD_USER_GAMMA_ADJUST);
mSysFsMdnieMode = new SysFs(MDNIE_BASE_PATH_KERNEL_2_6 + MDNIE_USER_MODE_CMD_LEGACY);
mSysFsMdnieMcmCb = new SysFs(MDNIE_BASE_PATH_KERNEL_2_6 + MDNIE_USER_MCM_CB_CMD_LEGACY);
mSysFsMdnieMcmCr = new SysFs(MDNIE_BASE_PATH_KERNEL_2_6 + MDNIE_USER_MCM_CR_CMD_LEGACY);
}
}
public DisplaySetting(Context context) {
this(context, null);
}
public boolean isEnableLcdType() {
return mSysFsLcdType.exists();
}
public String getLcdType() {
String value = mSysFsLcdType.read(mRootProcess);
if ("SM2 (A1 line)".equals(value)) {
return "0";
} else if ("M2".equals(value)) {
return "1";
} else if ("SM2 (A2 line)".equals(value)) {
return "2";
} else {
return "Unknown";
}
}
public String getLcdTypeText(String value) {
if ("0".equals(value)) {
return "SM2 (A1 line)";
} else if ("1".equals(value)) {
return "M2";
} else if ("2".equals(value)) {
return "SM2 (A2 line)";
} else {
return "Unknown";
}
}
public void setLcdType(String value) {
mSysFsLcdType.write(value, mRootProcess);
}
public String loadLcdType() {
return getStringValue(KEY_LCD_TYPE);
}
public void saveLcdType(String value) {
setValue(KEY_LCD_TYPE, value);
}
public boolean isEnableLcdGamma() {
return mSysFsLcdGamma.exists();
}
public String getLcdGamma() {
return mSysFsLcdGamma.read(mRootProcess);
}
public void setLcdGamma(String value) {
mSysFsLcdGamma.write(value, mRootProcess);
}
public String loadLcdGamma() {
return getStringValue(KEY_LCD_GAMMA);
}
public void saveLcdGamma(String value) {
setValue(KEY_LCD_GAMMA, value);
}
public boolean isEnableMdnieForceDisable() {
return mSysFsMdnieForceDisable.exists();
}
public boolean getMdnieEnabled() {
String ret = mSysFsMdnieForceDisable.read(mRootProcess);
return "0".equals(ret) ? true : false;
}
public void setMdnieEnabled(boolean value) {
mSysFsMdnieForceDisable.write(value ? "0" : "1", mRootProcess);
mSysFsMdniePower.write(value ? "1" : "0", mRootProcess);
}
public boolean loadMdnieEnabled() {
return getBooleanValue(KEY_MDNIE_ENABLED);
}
public void saveMdnieEnabled(boolean value) {
setValue(KEY_MDNIE_ENABLED, value);
}
public boolean isEnableMdnieMode() {
return mSysFsMdnieMode.exists();
}
public String getMdnieMode() {
return mSysFsMdnieMode.read(mRootProcess);
}
public void setMdnieMode(String value) {
mSysFsMdnieMode.write(value, mRootProcess);
}
public boolean loadMdnieMode() {
return getBooleanValue(KEY_MDNIE_MODE);
}
public void saveMdnieMode(boolean value) {
setValue(KEY_MDNIE_MODE, value);
}
public boolean isEnableMdnieMcmCb() {
return mSysFsMdnieMcmCb.exists();
}
public String getMdnieMcmCb() {
return mSysFsMdnieMcmCb.read(mRootProcess);
}
public void setMdnieMcmCb(String value) {
mSysFsMdnieMcmCb.write(value, mRootProcess);
}
public String loadMdnieMcmCb() {
return getStringValue(KEY_MDNIE_MCM_CB);
}
public void saveMdnieMcmCb(String value) {
setValue(KEY_MDNIE_MCM_CB, value);
}
public boolean isEnableMdnieMcmCr() {
return mSysFsMdnieMcmCr.exists();
}
public String getMdnieMcmCr() {
return mSysFsMdnieMcmCr.read(mRootProcess);
}
public void setMdnieMcmCr(String value) {
mSysFsMdnieMcmCr.write(value, mRootProcess);
}
public String loadMdnieMcmCr() {
return getStringValue(KEY_MDNIE_MCM_CR);
}
public void saveMdnieMcmCr(String value) {
setValue(KEY_MDNIE_MCM_CR, value);
}
/*
public final String KEY_MDNIE_DU_CONTROL_ENABLED = "lcdsharpness_du_control";
public final String FILE_MDNIE_DU_CONTROL_ENABLED = "/sys/devices/virtual/mdnieset_ui/switch_mdnieset_ui/mdnieset_user_de_control_enabled_cmd";
public boolean isEnableMdnieDuControlEnabled() {
File file = new File(FILE_MDNIE_DU_CONTROL_ENABLED);
return file.exists();
}
public String loadMdnieDuControlEnabled(Context context) {
return loadValue(context, KEY_MDNIE_DU_CONTROL_ENABLED);
}
public String getCurrentMdnieDuControlEnabled() {
return getCurrentValue(FILE_MDNIE_DU_CONTROL_ENABLED);
}
public void setMdnieDuControlEnabled(String value) {
setValue(FILE_MDNIE_DU_CONTROL_ENABLED, value);
}
public static final String KEY_MDNIE_DU_SHARPNESS = "lcdsharpness_du_sharpness";
public static final String FILE_MDNIE_DU_SHARPNESS = "/sys/devices/virtual/mdnieset_ui/switch_mdnieset_ui/mdnieset_user_de_sharpness_cmd";
public static boolean isEnableMdnieDuSharpness() {
File file = new File(FILE_MDNIE_DU_SHARPNESS);
return file.exists();
}
public String loadMdnieDuSharpness(Context context) {
return loadValue(context, KEY_MDNIE_DU_SHARPNESS);
}
public String getCurrentMdnieDuSharpness() {
return getCurrentValue(FILE_MDNIE_DU_SHARPNESS);
}
public void setMdnieDuSharpness(String value) {
setValue(FILE_MDNIE_DU_SHARPNESS, value);
}
public void setRecommended(Context context) {
saveLcdGamma(context, "-2");
saveMdnieForceDisable(context, true);
}
public void setInit(Context context) {
saveLcdGamma(context, "0");
saveMdnieForceDisable(context, true);
}
*/
@Override
public void setOnBoot() {
if (isEnableLcdType()) {
String value = loadLcdType();
if (!Misc.isNullOfEmpty(value)) {
setLcdType(value);
}
}
if (isEnableLcdGamma()) {
String value = loadLcdGamma();
if (!Misc.isNullOfEmpty(value)) {
setLcdGamma(value);
}
}
if (isEnableMdnieMcmCb()) {
String value = loadMdnieMcmCb();
if (!Misc.isNullOfEmpty(value)) {
setMdnieMcmCb(value);
}
}
if (isEnableMdnieMcmCr()) {
String value = loadMdnieMcmCr();
if (!Misc.isNullOfEmpty(value)) {
setMdnieMcmCr(value);
}
}
if (isEnableMdnieMode()) {
boolean value = loadMdnieMode();
setMdnieMode(value ? MDNIE_MCM_ENABLE : MDNIE_MCM_DISABLE);
}
if (isEnableMdnieForceDisable()) {
boolean value = loadMdnieEnabled();
if (value == false) {
setMdnieEnabled(false);
}
}
}
@Override
public void setRecommend() {
// noop
}
@Override
public void reset() {
clearValue(KEY_LCD_TYPE);
clearValue(KEY_LCD_GAMMA);
clearValue(KEY_MDNIE_ENABLED);
clearValue(KEY_MDNIE_MODE);
clearValue(KEY_MDNIE_MCM_CB);
clearValue(KEY_MDNIE_MCM_CR);
}
}