diff options
author | Maarten Hooft <mthooft@google.com> | 2010-09-27 18:12:45 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-09-27 18:12:45 -0700 |
commit | c746476ac0ce63fac4b66aca280ada2500ba6af7 (patch) | |
tree | 72e5741078bc90e66c09d381a426df0c6f019ae0 | |
parent | 2eda346cfee98da0c0b7f8f55b0c9d4a6a562af5 (diff) | |
parent | c5a79ececaee5c623d2098b4c34bd9fdfeeebee0 (diff) | |
download | device_samsung_crespo-c746476ac0ce63fac4b66aca280ada2500ba6af7.zip device_samsung_crespo-c746476ac0ce63fac4b66aca280ada2500ba6af7.tar.gz device_samsung_crespo-c746476ac0ce63fac4b66aca280ada2500ba6af7.tar.bz2 |
Merge "S5PC11X: SENSOR: Change LightSensor to return lux" into gingerbread
-rw-r--r-- | libsensors/LightSensor.cpp | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/libsensors/LightSensor.cpp b/libsensors/LightSensor.cpp index 087afb4..fa08685 100644 --- a/libsensors/LightSensor.cpp +++ b/libsensors/LightSensor.cpp @@ -131,10 +131,7 @@ int LightSensor::readEvents(sensors_event_t* data, int count) int type = event->type; if (type == EV_ABS) { if (event->code == EVENT_TYPE_LIGHT) { - if (event->value != -1) { - // FIXME: not sure why we're getting -1 sometimes - mPendingEvent.light = indexToValue(event->value); - } + mPendingEvent.light = indexToValue(event->value); } } else if (type == EV_SYN) { mPendingEvent.timestamp = timevalToNano(event->time); @@ -155,8 +152,25 @@ int LightSensor::readEvents(sensors_event_t* data, int count) float LightSensor::indexToValue(size_t index) const { -#warning Return lux levels - /* for now we return just raw ADC levels. need to convert - to lux levels. tbd. */ - return index; + /* Driver gives a rolling average adc value. We convert it lux levels. */ + static const struct adcToLux { + size_t adc_value; + float lux_value; + } adcToLux[] = { + { 150, 10.0 }, /* from 0 - 150 adc, we map to 10.0 lux */ + { 800, 160.0 }, /* from 151 - 800 adc, we map to 160.0 lux */ + { 900, 225.0 }, /* from 801 - 900 adc, we map to 225.0 lux */ + { 1000, 320.0 }, /* from 901 - 1000 adc, we map to 320.0 lux */ + { 1200, 640.0 }, /* from 1001 - 1200 adc, we map to 640.0 lux */ + { 1400, 1280.0 }, /* from 1201 - 1400 adc, we map to 1280.0 lux */ + { 1600, 2600.0 }, /* from 1401 - 1600 adc, we map to 2600.0 lux */ + { 4095, 10240.0 }, /* from 1601 - 4095 adc, we map to 10240.0 lux */ + }; + size_t i; + for (i = 0; i < ARRAY_SIZE(adcToLux); i++) { + if (index < adcToLux[i].adc_value) { + return adcToLux[i].lux_value; + } + } + return adcToLux[ARRAY_SIZE(adcToLux)-1].lux_value; } |