diff options
author | Mathias Agopian <mathias@google.com> | 2010-07-21 18:13:35 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-07-21 18:13:35 -0700 |
commit | 409c484b6d235b52b69e87a44b1f51a1ac5ca1f9 (patch) | |
tree | eedf7711eb0aca9dca132567467e2b6601b0b865 /services/sensorservice/SensorService.cpp | |
parent | 36647e977ae472ea9609818676bba7a0d0a8c778 (diff) | |
parent | 994fff705ee8a7a8e9826ade53a5220949a28192 (diff) | |
download | frameworks_base-409c484b6d235b52b69e87a44b1f51a1ac5ca1f9.zip frameworks_base-409c484b6d235b52b69e87a44b1f51a1ac5ca1f9.tar.gz frameworks_base-409c484b6d235b52b69e87a44b1f51a1ac5ca1f9.tar.bz2 |
am 994fff70: am 5df13ef3: SensorService doesn\'t crash if correct HAL is not present
Merge commit '994fff705ee8a7a8e9826ade53a5220949a28192'
* commit '994fff705ee8a7a8e9826ade53a5220949a28192':
SensorService doesn't crash if correct HAL is not present
Diffstat (limited to 'services/sensorservice/SensorService.cpp')
-rw-r--r-- | services/sensorservice/SensorService.cpp | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 3fe3a5d..fec9153 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -79,35 +79,45 @@ ANDROID_SINGLETON_STATIC_INSTANCE(BatteryService) SensorService::SensorService() : Thread(false), - mDump("android.permission.DUMP") + mSensorDevice(0), + mSensorModule(0), + mDump("android.permission.DUMP"), + mInitCheck(NO_INIT) { } void SensorService::onFirstRef() { + LOGD("nuSensorService starting..."); + status_t err = hw_get_module(SENSORS_HARDWARE_MODULE_ID, (hw_module_t const**)&mSensorModule); LOGE_IF(err, "couldn't load %s module (%s)", SENSORS_HARDWARE_MODULE_ID, strerror(-err)); - err = sensors_open(&mSensorModule->common, &mSensorDevice); + if (mSensorModule) { + err = sensors_open(&mSensorModule->common, &mSensorDevice); - LOGE_IF(err, "couldn't open device for module %s (%s)", - SENSORS_HARDWARE_MODULE_ID, strerror(-err)); + LOGE_IF(err, "couldn't open device for module %s (%s)", + SENSORS_HARDWARE_MODULE_ID, strerror(-err)); - LOGD("nuSensorService starting..."); + struct sensor_t const* list; + int count = mSensorModule->get_sensors_list(mSensorModule, &list); + for (int i=0 ; i<count ; i++) { + Sensor sensor(list + i); + LOGI("%s", sensor.getName().string()); + mSensorList.add(sensor); + if (mSensorDevice) { + mSensorDevice->activate(mSensorDevice, sensor.getHandle(), 0); + } + } - struct sensor_t const* list; - int count = mSensorModule->get_sensors_list(mSensorModule, &list); - for (int i=0 ; i<count ; i++) { - Sensor sensor(list + i); - LOGI("%s", sensor.getName().string()); - mSensorList.add(sensor); - mSensorDevice->activate(mSensorDevice, sensor.getHandle(), 0); + if (mSensorDevice) { + run("SensorService", PRIORITY_URGENT_DISPLAY); + mInitCheck = NO_ERROR; + } } - - run("SensorService", PRIORITY_URGENT_DISPLAY); } SensorService::~SensorService() @@ -238,6 +248,9 @@ void SensorService::cleanupConnection(const wp<SensorEventConnection>& connectio status_t SensorService::enable(const sp<SensorEventConnection>& connection, int handle) { + if (mInitCheck != NO_ERROR) + return mInitCheck; + status_t err = NO_ERROR; Mutex::Autolock _l(mLock); SensorRecord* rec = mActiveSensors.valueFor(handle); @@ -265,6 +278,9 @@ status_t SensorService::enable(const sp<SensorEventConnection>& connection, status_t SensorService::disable(const sp<SensorEventConnection>& connection, int handle) { + if (mInitCheck != NO_ERROR) + return mInitCheck; + status_t err = NO_ERROR; Mutex::Autolock _l(mLock); SensorRecord* rec = mActiveSensors.valueFor(handle); @@ -291,6 +307,9 @@ status_t SensorService::disable(const sp<SensorEventConnection>& connection, status_t SensorService::setRate(const sp<SensorEventConnection>& connection, int handle, nsecs_t ns) { + if (mInitCheck != NO_ERROR) + return mInitCheck; + status_t err = NO_ERROR; Mutex::Autolock _l(mLock); |