diff options
author | Mathias Agopian <mathias@google.com> | 2010-07-19 19:09:10 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2012-06-27 17:07:53 -0700 |
commit | 50df2959e58fc7408f98d11d77c8428397dca445 (patch) | |
tree | 53ca49cb7741d83e7668114810e61596f252f01e | |
parent | 5d2707214dfb97bd8dfcc6620be36841d3c82420 (diff) | |
download | frameworks_native-50df2959e58fc7408f98d11d77c8428397dca445.zip frameworks_native-50df2959e58fc7408f98d11d77c8428397dca445.tar.gz frameworks_native-50df2959e58fc7408f98d11d77c8428397dca445.tar.bz2 |
SensorService doesn't crash if correct HAL is not present
Change-Id: I83700b1a1b43390f5830e1056572bfb16e58e8e4
-rw-r--r-- | services/sensorservice/SensorService.cpp | 47 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 1 |
2 files changed, 34 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); diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 88b84ec..8731956 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -98,6 +98,7 @@ class SensorService : struct sensors_poll_device_t* mSensorDevice; struct sensors_module_t* mSensorModule; Permission mDump; + status_t mInitCheck; // protected by mLock mutable Mutex mLock; |