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

Commit 755c451c authored by Peng Xu's avatar Peng Xu
Browse files

sensorservice: switch to use sp<> in sensor list

* Switch to use smart pointer in SensorList to avoid object
  life cycle issue.
* Refactor HardwareSensor and various virtual sensor class.
* Change active virtual sensor map into a set of handles.

Change-Id: I674d5eb5c0038179f9ef1b6f0d576b8b605649ec
parent 2b97c063
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -272,6 +272,11 @@ Sensor::Sensor(struct sensor_t const* hwSensor, int halVersion)
        break;
    }

    // Set DYNAMIC_SENSOR_MASK and ADDITIONAL_INFO_MASK flag here. Compatible with HAL 1_3.
    if (halVersion >= SENSORS_DEVICE_API_VERSION_1_3) {
        mFlags |= (hwSensor->flags & (DYNAMIC_SENSOR_MASK | ADDITIONAL_INFO_MASK));
    }

    // Set DATA_INJECTION flag here. Defined in HAL 1_4.
    if (halVersion >= SENSORS_DEVICE_API_VERSION_1_4) {
        mFlags |= (hwSensor->flags & DATA_INJECTION_MASK);
+13 −18
Original line number Diff line number Diff line
@@ -30,9 +30,7 @@ namespace android {
// ---------------------------------------------------------------------------

CorrectedGyroSensor::CorrectedGyroSensor(sensor_t const* list, size_t count)
    : mSensorDevice(SensorDevice::getInstance()),
      mSensorFusion(SensorFusion::getInstance())
{
    : VirtualSensor() {
    for (size_t i=0 ; i<count ; i++) {
        if (list[i].type == SENSOR_TYPE_GYROSCOPE) {
            mGyro = Sensor(list + i);
@@ -40,17 +38,18 @@ CorrectedGyroSensor::CorrectedGyroSensor(sensor_t const* list, size_t count)
        }
    }

    sensor_t hwSensor;
    hwSensor.name       = "Corrected Gyroscope Sensor";
    hwSensor.vendor     = "AOSP";
    hwSensor.version    = 1;
    hwSensor.handle     = '_cgy';
    hwSensor.type       = SENSOR_TYPE_GYROSCOPE;
    hwSensor.maxRange   = mGyro.getMaxValue();
    hwSensor.resolution = mGyro.getResolution();
    hwSensor.power      = mSensorFusion.getPowerUsage();
    hwSensor.minDelay   = mGyro.getMinDelay();
    mSensor = Sensor(&hwSensor);
    const sensor_t sensor = {
            .name       = "Corrected Gyroscope Sensor",
            .vendor     = "AOSP",
            .version    = 1,
            .handle     = '_cgy',
            .type       = SENSOR_TYPE_GYROSCOPE,
            .maxRange   = mGyro.getMaxValue(),
            .resolution = mGyro.getResolution(),
            .power      = mSensorFusion.getPowerUsage(),
            .minDelay   = mGyro.getMinDelay(),
    };
    mSensor = Sensor(&sensor);
}

bool CorrectedGyroSensor::process(sensors_event_t* outEvent,
@@ -78,10 +77,6 @@ status_t CorrectedGyroSensor::setDelay(void* ident, int /*handle*/, int64_t ns)
    return mSensorFusion.setDelay(FUSION_9AXIS, ident, ns);
}

const Sensor& CorrectedGyroSensor::getSensor() const {
    return mSensor;
}

// ---------------------------------------------------------------------------
}; // namespace android
+1 −6
Original line number Diff line number Diff line
@@ -31,19 +31,14 @@ namespace android {
class SensorDevice;
class SensorFusion;

class CorrectedGyroSensor : public SensorInterface {
    SensorDevice& mSensorDevice;
    SensorFusion& mSensorFusion;
class CorrectedGyroSensor : public VirtualSensor {
    Sensor mGyro;
    Sensor mSensor;

public:
    CorrectedGyroSensor(sensor_t const* list, size_t count);
    virtual bool process(sensors_event_t* outEvent, const sensors_event_t& event) override;
    virtual status_t activate(void* ident, bool enabled) override;
    virtual status_t setDelay(void* ident, int handle, int64_t ns) override;
    virtual const Sensor& getSensor() const override;
    virtual bool isVirtual() const override { return true; }
};

// ---------------------------------------------------------------------------
+13 −19
Original line number Diff line number Diff line
@@ -29,10 +29,7 @@
namespace android {
// ---------------------------------------------------------------------------

GravitySensor::GravitySensor(sensor_t const* list, size_t count)
    : mSensorDevice(SensorDevice::getInstance()),
      mSensorFusion(SensorFusion::getInstance())
{
GravitySensor::GravitySensor(sensor_t const* list, size_t count) {
    for (size_t i=0 ; i<count ; i++) {
        if (list[i].type == SENSOR_TYPE_ACCELEROMETER) {
            mAccelerometer = Sensor(list + i);
@@ -40,17 +37,18 @@ GravitySensor::GravitySensor(sensor_t const* list, size_t count)
        }
    }

    sensor_t hwSensor;
    hwSensor.name       = "Gravity Sensor";
    hwSensor.vendor     = "AOSP";
    hwSensor.version    = 3;
    hwSensor.handle     = '_grv';
    hwSensor.type       = SENSOR_TYPE_GRAVITY;
    hwSensor.maxRange   = GRAVITY_EARTH * 2;
    hwSensor.resolution = mAccelerometer.getResolution();
    hwSensor.power      = mSensorFusion.getPowerUsage();
    hwSensor.minDelay   = mSensorFusion.getMinDelay();
    mSensor = Sensor(&hwSensor);
    const sensor_t sensor = {
        .name       = "Gravity Sensor",
        .vendor     = "AOSP",
        .version    = 3,
        .handle     = '_grv',
        .type       = SENSOR_TYPE_GRAVITY,
        .maxRange   = GRAVITY_EARTH * 2,
        .resolution = mAccelerometer.getResolution(),
        .power      = mSensorFusion.getPowerUsage(),
        .minDelay   = mSensorFusion.getMinDelay(),
    };
    mSensor = Sensor(&sensor);
}

bool GravitySensor::process(sensors_event_t* outEvent,
@@ -85,10 +83,6 @@ status_t GravitySensor::setDelay(void* ident, int /*handle*/, int64_t ns) {
    return mSensorFusion.setDelay(FUSION_NOMAG, ident, ns);
}

const Sensor& GravitySensor::getSensor() const {
    return mSensor;
}

// ---------------------------------------------------------------------------
}; // namespace android
+1 −6
Original line number Diff line number Diff line
@@ -31,19 +31,14 @@ namespace android {
class SensorDevice;
class SensorFusion;

class GravitySensor : public SensorInterface {
    SensorDevice& mSensorDevice;
    SensorFusion& mSensorFusion;
class GravitySensor : public VirtualSensor {
    Sensor mAccelerometer;
    Sensor mSensor;

public:
    GravitySensor(sensor_t const* list, size_t count);
    virtual bool process(sensors_event_t* outEvent, const sensors_event_t& event) override;
    virtual status_t activate(void* ident, bool enabled) override;
    virtual status_t setDelay(void* ident, int handle, int64_t ns) override;
    virtual const Sensor& getSensor() const override;
    virtual bool isVirtual() const override { return true; }
};

// ---------------------------------------------------------------------------
Loading