Samsung: Add common class for vibrator

Change-Id: I0802cc122b606b08f58731febd8bf050d22f4c57
diff --git a/Android.mk b/Android.mk
index 96d7a46..e92f634 100644
--- a/Android.mk
+++ b/Android.mk
@@ -36,7 +36,7 @@
 include $(SAM_ROOT)/macloader/Android.mk
 endif
 
-# RIL
 ifeq ($(BOARD_VENDOR),samsung)
 include $(SAM_ROOT)/ril/Android.mk
+BOARD_HARDWARE_CLASS := $(SAM_ROOT)/cmhw
 endif
diff --git a/cmhw/org/cyanogenmod/hardware/VibratorHW.java b/cmhw/org/cyanogenmod/hardware/VibratorHW.java
new file mode 100755
index 0000000..970d74e
--- /dev/null
+++ b/cmhw/org/cyanogenmod/hardware/VibratorHW.java
@@ -0,0 +1,94 @@
+/*
+ * 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 LEVEL_PATH = "/sys/class/timed_output/vibrator/pwm_value";
+    private static String LEVEL_MAX_PATH = "/sys/class/timed_output/vibrator/pwm_max";
+    private static String LEVEL_MIN_PATH = "/sys/class/timed_output/vibrator/pwm_min";
+    private static String LEVEL_DEFAULT_PATH = "/sys/class/timed_output/vibrator/pwm_default";
+    private static String LEVEL_THRESHOLD_PATH = "/sys/class/timed_output/vibrator/pwm_threshold";
+
+    public static boolean isSupported() {
+        return true;
+    }
+
+    public static int getMaxIntensity()  {
+        File f = new File(LEVEL_MAX_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_MAX_PATH));
+        } else {
+            return 100;
+        }
+    }
+
+    public static int getMinIntensity()  {
+        File f = new File(LEVEL_MIN_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_MIN_PATH));
+        } else {
+            return 0;
+        }
+    }
+
+    public static int getWarningThreshold()  {
+        File f = new File(LEVEL_THRESHOLD_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_THRESHOLD_PATH));
+        } else {
+            return 75;
+        }
+    }
+
+    public static int getCurIntensity()  {
+        File f = new File(LEVEL_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_PATH));
+        } else {
+            return 0;
+        }
+    }
+
+    public static int getDefaultIntensity()  {
+        File f = new File(LEVEL_DEFAULT_PATH);
+
+        if(f.exists()) {
+            return Integer.parseInt(FileUtils.readOneLine(LEVEL_DEFAULT_PATH));
+        } else {
+            return 50;
+        }
+    }
+
+    public static boolean setIntensity(int intensity)  {
+        File f = new File(LEVEL_PATH);
+
+        if(f.exists()) {
+            return FileUtils.writeLine(LEVEL_PATH, String.valueOf(intensity));
+        } else {
+            return false;
+        }
+    }
+}