From 933f7c54d837ebb23b0eefdb3e6567844e7c1785 Mon Sep 17 00:00:00 2001 From: Ziyan Date: Tue, 16 Dec 2014 19:06:47 +0100 Subject: tuna: add support for CMHW - Adaptive backlight - Color and gamma calibration - LTO - Vibrator control Also switched to cyanogenmod_tuna_defconfig, since these features require non-stock kernel configs. Change-Id: I5d5b0999c91690eb4c46ce33b6040bc52c0d9cb9 --- .../cyanogenmod/hardware/AdaptiveBacklight.java | 67 ++++++++++++++++ .../hardware/DisplayColorCalibration.java | 88 ++++++++++++++++++++++ .../hardware/DisplayGammaCalibration.java | 79 +++++++++++++++++++ cmhw/org/cyanogenmod/hardware/LongTermOrbits.java | 62 +++++++++++++++ cmhw/org/cyanogenmod/hardware/VibratorHW.java | 52 +++++++++++++ 5 files changed, 348 insertions(+) create mode 100644 cmhw/org/cyanogenmod/hardware/AdaptiveBacklight.java create mode 100644 cmhw/org/cyanogenmod/hardware/DisplayColorCalibration.java create mode 100644 cmhw/org/cyanogenmod/hardware/DisplayGammaCalibration.java create mode 100644 cmhw/org/cyanogenmod/hardware/LongTermOrbits.java create mode 100644 cmhw/org/cyanogenmod/hardware/VibratorHW.java (limited to 'cmhw') diff --git a/cmhw/org/cyanogenmod/hardware/AdaptiveBacklight.java b/cmhw/org/cyanogenmod/hardware/AdaptiveBacklight.java new file mode 100644 index 0000000..a04b304 --- /dev/null +++ b/cmhw/org/cyanogenmod/hardware/AdaptiveBacklight.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2013 The CyanogenMod Project + * + * 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 org.cyanogenmod.hardware; + +import org.cyanogenmod.hardware.util.FileUtils; +import java.io.File; + +/** + * Adaptive backlight support (this refers to technologies like NVIDIA SmartDimmer, + * QCOM CABL or Samsung CABC). + */ +public class AdaptiveBacklight { + private static String FILE_CAB = "/sys/class/backlight/s6e8aa0/acl_set"; + + /** + * Whether device supports an adaptive backlight technology. + * + * @return boolean Supported devices must return always true + */ + public static boolean isSupported() { + File f = new File(FILE_CAB); + return f.isFile(); + } + + /** + * This method return the current activation status of the adaptive backlight technology. + * + * @return boolean Must be false when adaptive backlight is not supported or not activated, or + * the operation failed while reading the status; true in any other case. + */ + public static boolean isEnabled() { + if (Integer.parseInt(FileUtils.readOneLine(FILE_CAB)) == 1) { + return true; + } else { + return false; + } + } + + /** + * This method allows to setup adaptive backlight technology status. + * + * @param status The new adaptive backlight status + * @return boolean Must be false if adaptive backlight is not supported or the operation + * failed; true in any other case. + */ + public static boolean setEnabled(boolean status) { + if (status == true) { + return FileUtils.writeLine(FILE_CAB, "1"); + } else { + return FileUtils.writeLine(FILE_CAB, "0"); + } + } +} diff --git a/cmhw/org/cyanogenmod/hardware/DisplayColorCalibration.java b/cmhw/org/cyanogenmod/hardware/DisplayColorCalibration.java new file mode 100644 index 0000000..b021e6c --- /dev/null +++ b/cmhw/org/cyanogenmod/hardware/DisplayColorCalibration.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2013 The CyanogenMod Project + * + * 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 org.cyanogenmod.hardware; + +import org.cyanogenmod.hardware.util.FileUtils; +import java.io.File; + +public class DisplayColorCalibration { + private static final String[] COLOR_FILE = new String[] { + "/sys/class/misc/samoled_color/red_multiplier", + "/sys/class/misc/samoled_color/green_multiplier", + "/sys/class/misc/samoled_color/blue_multiplier" + }; + private static final String COLOR_FILE_V2 = "/sys/class/misc/colorcontrol/multiplier"; + + public static boolean isSupported() { + if (new File(COLOR_FILE_V2).exists()) { + return true; + } + for (String filePath : COLOR_FILE) { + if (!new File(filePath).exists()) { + return false; + } + } + return true; + } + + public static int getMaxValue() { + return 2000000000; // Real value: 4000000000 + } + + public static int getMinValue() { + return 0; + } + + public static int getDefValue() { + return 1000000000; // Real value: 2000000000 + } + + public static String getCurColors() { + StringBuilder values = new StringBuilder(); + if (new File(COLOR_FILE_V2).exists()) { + String[] valuesSplit = FileUtils.readOneLine(COLOR_FILE_V2).split(" "); + for (int i = 0; i < valuesSplit.length; i++) { + values.append(Long.toString(Long.valueOf(valuesSplit[i]) / 2)).append(" "); + } + } else { + for (String filePath : COLOR_FILE) { + values.append(Long.toString(Long.valueOf( + FileUtils.readOneLine(filePath)) / 2)).append(" "); + } + } + return values.toString(); + } + + public static boolean setColors(String colors) { + String[] valuesSplit = colors.split(" "); + if (new File(COLOR_FILE_V2).exists()) { + StringBuilder realColors = new StringBuilder(); + for (int i = 0; i < valuesSplit.length; i++) { + realColors.append(Long.toString(Long.valueOf(valuesSplit[i]) * 2)).append(" "); + } + return FileUtils.writeLine(COLOR_FILE_V2, realColors.toString()); + } else { + boolean result = true; + for (int i = 0; i < valuesSplit.length; i++) { + String targetFile = COLOR_FILE[i]; + result &= FileUtils.writeLine(targetFile, Long.toString( + Long.valueOf(valuesSplit[i]) * 2)); + } + return result; + } + } +} diff --git a/cmhw/org/cyanogenmod/hardware/DisplayGammaCalibration.java b/cmhw/org/cyanogenmod/hardware/DisplayGammaCalibration.java new file mode 100644 index 0000000..8be53c0 --- /dev/null +++ b/cmhw/org/cyanogenmod/hardware/DisplayGammaCalibration.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2013 The CyanogenMod Project + * + * 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 org.cyanogenmod.hardware; + +import org.cyanogenmod.hardware.util.FileUtils; +import java.io.File; + +public class DisplayGammaCalibration { + private static final String[] GAMMA_FILE = new String[] { + "/sys/class/misc/samoled_color/red_v1_offset", + "/sys/class/misc/samoled_color/green_v1_offset", + "/sys/class/misc/samoled_color/blue_v1_offset" + }; + private static final String GAMMA_FILE_V2 = "/sys/class/misc/colorcontrol/v1_offset"; + + public static boolean isSupported() { + if (new File(GAMMA_FILE_V2).exists()) { + return true; + } + for (String filePath : GAMMA_FILE) { + if (!new File(filePath).exists()) { + return false; + } + } + return true; + } + + public static int getNumberOfControls() { + return 1; + } + + public static int getMaxValue(int control) { + return 20; + } + + public static int getMinValue(int control) { + return -20; + } + + public static String getCurGamma(int control) { + if (new File(GAMMA_FILE_V2).exists()) { + return FileUtils.readOneLine(GAMMA_FILE_V2); + } else { + StringBuilder values = new StringBuilder(); + for (String filePath : GAMMA_FILE) { + values.append(FileUtils.readOneLine(filePath)).append(" "); + } + return values.toString(); + } + } + + public static boolean setGamma(int control, String gamma) { + if (new File(GAMMA_FILE_V2).exists()) { + return FileUtils.writeLine(GAMMA_FILE_V2, gamma); + } else { + String[] valuesSplit = gamma.split(" "); + boolean result = true; + for (int i = 0; i < valuesSplit.length; i++) { + String targetFile = GAMMA_FILE[i]; + result &= FileUtils.writeLine(targetFile, valuesSplit[i]); + } + return result; + } + } +} diff --git a/cmhw/org/cyanogenmod/hardware/LongTermOrbits.java b/cmhw/org/cyanogenmod/hardware/LongTermOrbits.java new file mode 100644 index 0000000..3122402 --- /dev/null +++ b/cmhw/org/cyanogenmod/hardware/LongTermOrbits.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2013 The CyanogenMod Project + * + * 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 org.cyanogenmod.hardware; + +import java.io.File; + +/** + * Long Term Orbits (LTO) support. + */ +public class LongTermOrbits { + + // We use the "7 day" data file + private static final String LTO_SRC = "http://gllto.glpals.com/7day/v2/latest/lto2.dat"; + private static final File LTO_DST = new File("/data/gps/lto.dat"); + private static final long DOWNLOAD_INTERVAL_DEFAULT = 259200000; /* 3 days */ + + /** + * Whether device supports the LTO technology. + * + * @return boolean Supported devices must return always true. + */ + public static boolean isSupported() { return true; } + + /** + * Returns the source location of the LTO data. + * + * @return String The LTO source location. + */ + public static String getSourceLocation() { return LTO_SRC; } + + /** + * Returns the source location of the LTO data. + * + * @return File The LTO source location. + */ + public static File getDestinationLocation() { return LTO_DST; } + + /** + * Returns the interval in milliseconds to trigger the LTO data download.
+ *
+ * As convenience, implementations should set the download interval to the half of the + * validity of the downloaded data. + * + * @return long The download interval in milliseconds + */ + public static long getDownloadInterval() { return DOWNLOAD_INTERVAL_DEFAULT; } + +} diff --git a/cmhw/org/cyanogenmod/hardware/VibratorHW.java b/cmhw/org/cyanogenmod/hardware/VibratorHW.java new file mode 100644 index 0000000..8bb2509 --- /dev/null +++ b/cmhw/org/cyanogenmod/hardware/VibratorHW.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2013 The CyanogenMod Project + * + * 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 org.cyanogenmod.hardware; + +import org.cyanogenmod.hardware.util.FileUtils; +import java.io.File; + +public class VibratorHW { + private static String AMP_PATH = "/sys/vibrator/pwmvalue"; + + public static boolean isSupported() { + return new File(AMP_PATH).exists(); + } + + public static int getMaxIntensity() { + return 100; + } + + public static int getMinIntensity() { + return 0; + } + + public static int getWarningThreshold() { + return -1; + } + + public static int getCurIntensity() { + return Integer.parseInt(FileUtils.readOneLine(AMP_PATH)); + } + + public static int getDefaultIntensity() { + return 85; + } + + public static boolean setIntensity(int intensity) { + return FileUtils.writeLine(AMP_PATH, String.valueOf(intensity)); + } +} -- cgit v1.1