diff options
author | Mathias Agopian <mathias@google.com> | 2010-07-19 19:09:10 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2010-07-21 16:09:39 -0700 |
commit | 5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0 (patch) | |
tree | 196fdbccb8e8eff1562ee672a67cfe55e22d2bfe /services | |
parent | b9cdead457fb86efc125db8c1c6954c4af1d7388 (diff) | |
download | frameworks_base-5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0.zip frameworks_base-5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0.tar.gz frameworks_base-5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0.tar.bz2 |
SensorService doesn't crash if correct HAL is not present
Change-Id: I83700b1a1b43390f5830e1056572bfb16e58e8e4
Diffstat (limited to 'services')
-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; |