diff options
author | Mathias Agopian <mathias@google.com> | 2010-07-21 16:12:25 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-07-21 16:12:25 -0700 |
commit | 994fff705ee8a7a8e9826ade53a5220949a28192 (patch) | |
tree | 18d6a97295218c48d66c7463c4ab5a4008682171 /services | |
parent | 042efd6c9251064f09705882180d9ab18ce4e914 (diff) | |
parent | 5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0 (diff) | |
download | frameworks_base-994fff705ee8a7a8e9826ade53a5220949a28192.zip frameworks_base-994fff705ee8a7a8e9826ade53a5220949a28192.tar.gz frameworks_base-994fff705ee8a7a8e9826ade53a5220949a28192.tar.bz2 |
am 5df13ef3: SensorService doesn\'t crash if correct HAL is not present
Merge commit '5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0' into gingerbread-plus-aosp
* commit '5df13ef30e7dd58e4e718e6d949ac3d1f5af94e0':
SensorService doesn't crash if correct HAL is not present
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; |