The Poke3 has a screen light composed of two set of LEDs that edge light the screen.
That's pretty typical for Eink devices nowadays.
Usually one set of LEDs is a warmer color tempearture (reddish) and the other set cooler (bluish).
Normally you mix the two together to get the color temperature you want.
To give the most utility you make it so either set of LEDs by itself gives a tolerable light in the vicinity of "white".
That's where the Poke3 deviates from normal practice.
One set of LEDs gives a slightly bluish white, the other set is practically red.
On most Eink devices a 50/50 mix gives something like a reasonable white.
On the Poke3 it's more like 75/25 (much less of the red).
Like many things in the Poke3 control is defaulted to framework.jar but has override spackled on in kcb.apk.
You can look through the code, it's all overkill.
In its simplest form it's just two location in /sys that take a value from 0-255.
Code:
$ echo 100 > /sys/class/backlight/white/brightness
$ cat /sys/class/backlight/white/brightness
100
$ echo 30 > /sys/class/backlight/warm/brightness
$ cat /sys/class/backlight/warm/brightness
30
The permissions are open, you don't have to be rooted (but you do need ADB).
The LED (software) drivers have non-linearity built in and also automatic ramping up and down.
The non-linearity (approximately a cube law) is because your eye and a power supply don't agree on when a bulb is 1/2 bright.
The ramping allows the LEDs to gracefully transition between settings.
That's where we come to settings, as in Settings.
Normally in Android you have in Settings.System screen_brightness
This value is entirely ignored, which is why any screen brightness control in your reader app does nothing.
Instead there is screen_cool_brightness and screen_warm_brightness (not part of stock Android).
Normally one would expect that changing these values would have an effect, but they don't.
Onyx has presumed that since they are the only ones who would change these values they don't have to watch for changes.
It only reads these settings when waking up.
That brings us to the screen sliders on the pull-down settings pane.
There are two independent sliders for the two sets of LEDs.
That's about as inconvenient as having two separate knobs on a sink instead of a modern faucet with temperature and volume separate.
But it's worse than that. The red slider in its minimal setting gives a value of 70 (which you can verify as above).
So, it's really impossible to have a dim screen light without too much red (or none).
Hit the button to lock the two sliders and you get a disastrous red.
Finally we come to the point of all this. Are you happy with the screen light as is? Do you want to use a light control in your reader app?
There are three ways to change this:
- Modify the Onyx software to work correctly (requires root)
- Modify the reader app to control the dual channel screen brightness
- Add a small app that watches screen_brightness and controls both screen_xxxx_brightness
I have the second solution working fine on my Poke3. I'll knock out the third solution if anyone is interested.