Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b823e816 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I564b285c,I11b7946a

* changes:
  Listen for Sensors HAL Death
  Do not use SensorDevice as ISensorsCallback
parents 4d8bb132 574cda30
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "SensorDevice.h"

#include "android/hardware/sensors/2.0/ISensorsCallback.h"
#include "android/hardware/sensors/2.0/types.h"
#include "SensorService.h"

@@ -32,6 +33,7 @@
using namespace android::hardware::sensors;
using namespace android::hardware::sensors::V1_0;
using namespace android::hardware::sensors::V1_0::implementation;
using android::hardware::sensors::V2_0::ISensorsCallback;
using android::hardware::sensors::V2_0::EventQueueFlagBits;
using android::hardware::hidl_vec;
using android::hardware::Return;
@@ -57,6 +59,27 @@ static status_t StatusFromResult(Result result) {
    }
}

void SensorsHalDeathReceivier::serviceDied(
        uint64_t /* cookie */,
        const wp<::android::hidl::base::V1_0::IBase>& /* service */) {
    ALOGW("Sensors HAL died, attempting to reconnect.");
    // TODO: Attempt reconnect
}

struct SensorsCallback : public ISensorsCallback {
    using Result = ::android::hardware::sensors::V1_0::Result;
    Return<void> onDynamicSensorsConnected(
            const hidl_vec<SensorInfo> &dynamicSensorsAdded) override {
        return SensorDevice::getInstance().onDynamicSensorsConnected(dynamicSensorsAdded);
    }

    Return<void> onDynamicSensorsDisconnected(
            const hidl_vec<int32_t> &dynamicSensorHandlesRemoved) override {
        return SensorDevice::getInstance().onDynamicSensorsDisconnected(
                dynamicSensorHandlesRemoved);
    }
};

SensorDevice::SensorDevice()
        : mHidlTransportErrors(20), mRestartWaiter(new HidlServiceRegistrationWaiter()) {
    if (!connectHidlService()) {
@@ -166,13 +189,15 @@ SensorDevice::HalConnectionStatus SensorDevice::connectHidlServiceV2_0() {
        status_t status = StatusFromResult(checkReturn(mSensors->initialize(
                *mEventQueue->getDesc(),
                *mWakeLockQueue->getDesc(),
                this)));
                new SensorsCallback())));

        if (status != NO_ERROR) {
            connectionStatus = HalConnectionStatus::FAILED_TO_CONNECT;
            ALOGE("Failed to initialize Sensors HAL (%s)", strerror(-status));
        } else {
            connectionStatus = HalConnectionStatus::CONNECTED;
            mSensorsHalDeathReceiver = new SensorsHalDeathReceivier();
            sensors->linkToDeath(mSensorsHalDeathReceiver, 0 /* cookie */);
        }
    }

+8 −3
Original line number Diff line number Diff line
@@ -42,9 +42,12 @@
namespace android {

// ---------------------------------------------------------------------------
class SensorsHalDeathReceivier : public android::hardware::hidl_death_recipient {
    virtual void serviceDied(uint64_t cookie,
                             const wp<::android::hidl::base::V1_0::IBase>& service) override;
};

class SensorDevice : public Singleton<SensorDevice>,
                     public android::hardware::sensors::V2_0::ISensorsCallback,
                     public SensorServiceUtil::Dumpable {
public:
    class HidlTransportErrorLog {
@@ -107,9 +110,9 @@ public:

    using Result = ::android::hardware::sensors::V1_0::Result;
    hardware::Return<void> onDynamicSensorsConnected(
            const hardware::hidl_vec<hardware::sensors::V1_0::SensorInfo> &dynamicSensorsAdded) override;
            const hardware::hidl_vec<hardware::sensors::V1_0::SensorInfo> &dynamicSensorsAdded);
    hardware::Return<void> onDynamicSensorsDisconnected(
            const hardware::hidl_vec<int32_t> &dynamicSensorHandlesRemoved) override;
            const hardware::hidl_vec<int32_t> &dynamicSensorHandlesRemoved);

    // Dumpable
    virtual std::string dump() const;
@@ -223,6 +226,8 @@ private:
    hardware::EventFlag* mEventQueueFlag;

    std::array<Event, SensorEventQueue::MAX_RECEIVE_BUFFER_EVENT_COUNT> mEventBuffer;

    sp<SensorsHalDeathReceivier> mSensorsHalDeathReceiver;
};

// ---------------------------------------------------------------------------