[APP] LevelSight 1.1.0.2 2009.09.16 - backlight enhancement for Acer 900s and HTC

Search This thread

NuShrike

Senior Recognized Developer
Sep 18, 2007
1,128
69
Seriously consider donating something like $1 if you want software from me to continue, as johnpatcher had suggested.

This was originally built to flatten the brightness levels between AC and BATT on the Kaiser, but since lacking a workable front-camera API access, this works out better on devices with a light sensor.

/// new Acer m900 support
Since this device has only 3 auto-brightness settings, a full sensor-to-backlight curve is used -- configurable in HKCU/SOFTWARE/Creative 'Ware/LevelSight/0-a -- to map the 11 brightness settings actually available.

Brightness levels to about 4 have been hand-tuned and then it's a linear scale to max brightness.

Currently, the settings are loaded only on service startup, restart the service (through dotfred TaskMgr) if you want it to reload the registry settings
///

1.0.3.x: <HTC>Remember to CLICK OFF your auto-backlight setting.<HTC>
Uses HKCU\SOFTWARE\Creative 'Ware\LevelSight\offset to adjust the native backlight setting. It defaults to -1 so it'll pick a setting 1 less than what the system would've automatically set. If you set it to 0, it'll pick the same as auto, and so on. Behavior is the same as pre-1.0.3.x when backlevels fall below low_wm, but switches to offset mode when levels rise above high_wm.

More gui ability to adjust these settings is coming.

/// pre-1.0.3.x
<HTC>All this does is TURNS OFF the auto-backlight whenever reported light levels drop below low_wm using a custom 1st order low-pass algorithm. When turned off, the backlight falls back to whatever you have your AC/BATT light levels set to in your control panel. This solves the issue of the auto-backlight not dimming below backlight level 3.

When light levels rise above what the light sensor API thinks should be backlight level high_wm, it uses the auto-backlight settings again, and lets it auto-adjust as was usual.<HTC>
///

It is however not perfect due to the low accuracy of the sensor at low light levels, but does try to ignore the random unexplainable surges in the sensor readings when light levels are constant. It's probably a reason why ODMs don't bother to try to make auto-backlight work any lower.

Thanks originally to Koush for his LightSensor SDK reference as well as Scott Seligman for the C++ reference.

Advantages:
  • works with native OEM backlight without extra .NET layer
  • history-less sensor-data filtering
  • Native C++ and assembly, floating-point-less DSP/SIMD-accelerated math, and extra optimization analysis in Ida Pro.
    No CPU/power-sucking .NET, nor the standard/default software floating-point emulation used.
  • takes 1K of ram, 22K of storage
  • 0 process slots (runs as a service)
  • no notable power-draw (same amount of power ~53mA with service on/off on Fuze)
  • polls every ~2000 milliseconds
  • no HTCSensorSDK sensor-data lag (~200-300 ms) nor cpu load -- directly accesses the sensor driver
  • dll and supporting code are compressed independently of .cab and use cpu's smaller Thumb (16-bit) code when advantageous
  • mostly lockless multi-threading
HKCU/Software/Creative 'Ware/LevelSight:
offset: adjusts backlight levels positive or negative of oem-pick
low_wm: fuzzy point where it low-light auto-backlight (2 is default recommendation)
high_wm: fuzzy point where offset auto-backlight will turn on (5 is recommendation)

Tested with stock Fuze rom, and Acer m900 160-lite rom.

Release Notes:
-current(1.1.0.x series)
1.1.0.2: fix bug where max backlight was clamped to level 5. It now uses the full 1-10 (10 levels) range. Level 0 disabled because not useful.

1.1.0.1 2009.09.04: full-backlight enhancement for Acer m900 ONLY!! Backport to FUZE whenever.
Acer 900s version abandoned because of Clove Technology.

-stable(1.0.3.x series)
1.0.3.2 2008.02.19: full-backlight replacement

-obsolete(1.0.2.x series)
1.0.2.1 2008.12.03: reset hysteresis on backlight power-state edge
1.0.2.0 2008.12.03: hysteresis now using first-order low-pass filter with a medium α; math and power-state optimizations

obsolete (1.0.1.x series) LevelSightSvc.1.0.1.1.CAB (11.8 KB, 132 views)
1.0.1.1 2008.11.24: work-around for service not starting up when device is rebooted; tweaked hysteresis
1.0.1.0 2008.11.21: converted into a service with registry configurable water marks

1.0.0.3: better hysterisis
1.0.0.2 2008/11/16: Previous version tended to like it dark and resisted turning it up.

Adjusted dark/light sensitivity so it switches auto-off at light sensor 3::3, and switches it back on at 3::5. Still playing with this to get a better hysteresis.
 

Attachments

  • LevelSightSvc.1.0.2.1.CAB
    11.9 KB · Views: 409
  • LevelSightSvc.1.0.3.2.CAB
    12.3 KB · Views: 542
  • LevelSightSvc.1.1.0.2.CAB
    12.9 KB · Views: 578
Last edited:

DeepThought

Senior Member
Jul 6, 2006
781
1
Austria, Vienna
Thank you Sir! That's exactly the kind of app I was waiting for. From what it sounds like I much prefer your solution over G-Light! I will test it right away!
 

DeepThought

Senior Member
Jul 6, 2006
781
1
Austria, Vienna
NuShrike, the app doesn't seem to work for me. I've installed it and did a soft reset afterwards (just to make sure) but the backlight still never falls below level 3. In my AC/Batt settings I have the backlight auto configuration enabled and did also try to disable this with the same result.

Am I making some mistake?

I'm really looking forward to get this sorted out because I love the idea of your app!
 

DeepThought

Senior Member
Jul 6, 2006
781
1
Austria, Vienna
I just analyzed the running processes after soft reset and the app is not running even tough it is placed in startup. so I just tryed starting the process manually but even when it's running it is not working :(
 

TheMostToys

Senior Member
Aug 23, 2007
122
13
Austin
Great idea, but does not work consistently. I've tried to narrow it down to a repeatable scenario, but have not been successful. I can see the LevelSight.exe process running (BTW, it takes approx 2.4% of my cpu every three seconds, then idle for three seconds.) LevelSight initially appears to work as designed, but after a few light cycles, it stops enabling the auto adjust setting.
 

TheMostToys

Senior Member
Aug 23, 2007
122
13
Austin
Just did some more testing. If I go in and manually enable auto adjust (in Power settings) it will work as long as the light level is high. Then when light level is low, LevelSight will disable auto adjust (setting backlight level to what I have it set to) but never reenable auto adjust (no matter how bright the ambient light.) So it seems to half way work, it does consistently disable auto adjust but it never enables it.
 

TheMostToys

Senior Member
Aug 23, 2007
122
13
Austin
More testing. Seems that if I let the phone dim the backlight all the way to dark setting (30 seconds) and hit it with bright light before it goes to sleep, LevelSight will enable the auto setting and the light will come up. This might cause a problem with the auto dim. Hmm, still playing.
 

NuShrike

Senior Recognized Developer
Sep 18, 2007
1,128
69
Okay, I've tried playing with the turn-on trigger a bit to see if that helps. It was programmed in the dark with a flash-light and now just tested in the sun today.

Version 1.0.0.2 is a little better at turning auto-back on, but may be still be not quite "right" in my experience.

Here's an interm version to get it more usable while I try to find the better "fuzzy" logic for the trigger.

TheMostToys: How are you measuring CPU usage? I'm using TaskManager and it's showing cpu in the range I described.

DeepThought: do you have HTCSensorSDK.dll in your \Windows? I assume a Raphael rom is built mostly the same as a Fuze's so I'm not sure why else it's not running for you. It will refuse to run more than one at a time also, and soft-reset may clear up the self-lock if that's the problem. If not, I'll post up a debug app to see what's going on.

My Fuze did get all app security turned off so I may not be properly triggering the needed security dialogs.
 

TheMostToys

Senior Member
Aug 23, 2007
122
13
Austin
TheMostToys: How are you measuring CPU usage? I'm using TaskManager and it's showing cpu in the range I described.

I'm using Memmaid. Also tried SKTools with similar results.

BTW, I'm not overly concerned with the current CPU usage, just noticed a difference and thought I'd let you know, in case it helped narrow down the problem.
 
Last edited:

NuShrike

Senior Recognized Developer
Sep 18, 2007
1,128
69
Much better hysteresis with 3-point history.

Resists going dim, but will still do so in ~9 seconds if ambient stays dark.
 

Vladimyr

Senior Member
Mar 5, 2006
677
105
Moscow
set.nm.ru
Does not work

Hi, NuShrike, nice app, but does not work for me.
The problem is that in the full darkness the signal level from light sensor on my TP is falling under 7, but then slightly increasing till 7.26 (according to G-Light measurement) and stay constantly at 7.26 forever!
Since screen is dimmed and then lighting up to the level 3 again!

Is it possible to change the bound from 7 to 8 or make an ability to adjust it personally through some config file or command line parameter?
I suppose it might be useful to the people who have very little sensor signal in the darkness, too.
 

NuShrike

Senior Recognized Developer
Sep 18, 2007
1,128
69
Hi, NuShrike, nice app, but does not work for me.
The problem is that in the full darkness the signal level from light sensor on my TP is falling under 7, but then slightly increasing till 7.26 (according to G-Light measurement) and stay constantly at 7.26 forever!
Since screen is dimmed and then lighting up to the level 3 again!

Is it possible to change the bound from 7 to 8 or make an ability to adjust it personally through some config file or command line parameter?
I suppose it might be useful to the people who have very little sensor signal in the darkness, too.
I think your 7.26 is the calculated lumen value that G-Light may be using out of the .net SDK.

I'm not using that SDK, but basing off the raw values coming from the light sensor almost directly. I can add build some registry entries to allow some tweaking because maybe each TP reads differently.

So holding your thumb over the light-sensor and the backlight still goes back up to 3?
 

Vladimyr

Senior Member
Mar 5, 2006
677
105
Moscow
set.nm.ru
So holding your thumb over the light-sensor and the backlight still goes back up to 3?

Yes, right. Right now after my thumb covered light sensor it is dimming to 1, then after a few seconds it's back again on 3!
G-Light is deactivated this time, but when I start it showing 4.52 immediately after covering sensor, and 7.26 a few seconds later.

I can add build some registry entries to allow some tweaking...

Yep!!! Please! Do it! :)
 

NuShrike

Senior Recognized Developer
Sep 18, 2007
1,128
69
Okay, I've verified that LevelSight stops running after a full-night's sleep. I'll see if the conversion to a service will keep it running.
 

DeepThought

Senior Member
Jul 6, 2006
781
1
Austria, Vienna

NuShrike

Senior Recognized Developer
Sep 18, 2007
1,128
69
Now converted into a Service and runs under service.exe.

Registry configuration for fuzzy low and high water marks for turning auto-backlight on/off in
HKCU/Software/Creative 'Ware/LevelSight:
  • low_wm: ambient level where auto-backlight turns off
  • high_wm: ambient level that triggers auto-backlight on

Also, light sensor I2C device driver is now directly accessed so HTCSensorSDK is no longer used nor required removing a battery/cpu sucking layer.
 

Vladimyr

Senior Member
Mar 5, 2006
677
105
Moscow
set.nm.ru
The problem did not exist in fact

It seems i understood the reason of program "malfunction".
It was caused that i did not read decription carefully:
When turned off, the backlight falls back to whatever you have your AC/BATT light levels set to in your control panel.

But i had default backlight level set on 4! Thus, when ambient illumination was dropping under level 3, auto-backligh was turned off and backlight was increased to 4 :eek:

Not i set default level to 2 and all is working well! :D