Skip to content

Commit

Permalink
Add Onyx Nova 2 frontlight controller (#248)
Browse files Browse the repository at this point in the history
based on writing to sysfs nodes.
On onyx nova 2 these are: /sys/class/backlight/{warm,white}/brightness
  • Loading branch information
Galunid committed Aug 29, 2020
1 parent 8d0ebd8 commit b8fec04
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 1 deletion.
10 changes: 9 additions & 1 deletion app/src/org/koreader/launcher/device/DeviceInfo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ object DeviceInfo {
private val CREMA: Boolean
private val CREMA_0650L: Boolean
private val ONYX_C67: Boolean
private val ONYX_NOVA2: Boolean
private val ENERGY: Boolean
private val INKBOOK: Boolean
private val TOLINO: Boolean
Expand Down Expand Up @@ -72,7 +73,8 @@ object DeviceInfo {

enum class LightsDevice {
NONE,
TOLINO_EPOS
TOLINO_EPOS,
ONYX_NOVA2
}

enum class BugDevice {
Expand Down Expand Up @@ -142,6 +144,12 @@ object DeviceInfo {
CREMA_0650L = BRAND.contentEquals("crema") && PRODUCT.contentEquals("keplerb")
deviceMap[EinkDevice.CREMA_0650L] = CREMA_0650L

// Onyx NOVA 2
ONYX_NOVA2 = (MANUFACTURER.contentEquals("onyx")
&& PRODUCT.contentEquals("nova2")
&& DEVICE.contentEquals("nova2"))
lightsMap[LightsDevice.ONYX_NOVA2] = ONYX_NOVA2

// Onyx C67
ONYX_C67 = (MANUFACTURER.contentEquals("onyx")
&& (PRODUCT.startsWith("c67") || MODEL.contentEquals("rk30sdk"))
Expand Down
5 changes: 5 additions & 0 deletions app/src/org/koreader/launcher/device/LightsFactory.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import java.util.Locale

import org.koreader.launcher.device.lights.GenericController
import org.koreader.launcher.device.lights.TolinoWarmthController
import org.koreader.launcher.device.lights.OnyxWarmthController
import org.koreader.launcher.utils.Logger

object LightsFactory {
Expand All @@ -15,6 +16,10 @@ object LightsFactory {
logController("Tolino")
TolinoWarmthController()
}
DeviceInfo.LightsDevice.ONYX_NOVA2 -> {
logController("ONYX_NOVA2")
OnyxWarmthController()
}
else -> {
logController("Generic")
GenericController()
Expand Down
106 changes: 106 additions & 0 deletions app/src/org/koreader/launcher/device/lights/OnyxWarmthController.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package org.koreader.launcher.device.lights

import java.io.File

import android.app.Activity
import android.util.Log

import org.koreader.launcher.interfaces.LightInterface
import org.koreader.launcher.utils.Logger

class OnyxWarmthController : LightInterface {
companion object {
private const val TAG = "lights"
private const val BRIGHTNESS_MAX = 255
private const val WARMTH_MAX = 255
private const val MIN = 0
private const val WHITE_FILE = "/sys/class/backlight/white/brightness"
private const val WARMTH_FILE = "/sys/class/backlight/warm/brightness"
}

override fun hasFallback(): Boolean {
return false
}

override fun hasWarmth(): Boolean {
return true
}

override fun needsPermission(): Boolean {
return false
}

override fun getBrightness(activity: Activity): Int {
val brightnessFile = File(WHITE_FILE)
return try {
// .replace("\n", "") is needed, since it's automatically appended
// without it exception is thrown
// java.lang.NumberFormatException: For input string: "125\n"
return brightnessFile.readText().replace("\n", "").toInt()
} catch (e: Exception) {
Logger.w(TAG, Log.getStackTraceString(e))
0
}
}

override fun getWarmth(activity: Activity): Int {
val warmthFile = File(WARMTH_FILE)
return try {
// .replace("\n", "") is needed, since it's automatically appended
// without it exception is thrown
// java.lang.NumberFormatException: For input string: "125\n"
return warmthFile.readText().replace("\n", "").toInt()
} catch (e: Exception) {
Logger.w(TAG, Log.getStackTraceString(e))
0
}
}

override fun setBrightness(activity: Activity, brightness: Int) {
if (brightness < MIN || brightness > BRIGHTNESS_MAX) {
Logger.w(TAG, "brightness value of of range: $brightness")
return
}
Logger.v(TAG, "Setting brightness to $brightness")
val brightnessFile = File(WHITE_FILE)
try {
brightnessFile.writeText(brightness.toString())
} catch (e: Exception) {
Logger.w(TAG, "$e")
}
}

override fun setWarmth(activity: Activity, warmth: Int) {
if (warmth < MIN || warmth > WARMTH_MAX) {
Logger.w(TAG, "warmth value of of range: $warmth")
return
}
val warmthFile = File(WARMTH_FILE)
Logger.v(TAG, "Setting warmth to $warmth")
try {
warmthFile.writeText(warmth.toString())
} catch (e: Exception) {
Logger.w(TAG, "$e")
}
}

override fun getMinWarmth(): Int {
return MIN
}

override fun getMaxWarmth(): Int {
return WARMTH_MAX
}

override fun getMinBrightness(): Int {
return MIN
}

override fun getMaxBrightness(): Int {
return BRIGHTNESS_MAX
}

override fun enableFrontlightSwitch(activity: Activity): Int {
return 1
}
}

0 comments on commit b8fec04

Please sign in to comment.