/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include "Sensor.h" #include "V2_1/SubHal.h" namespace android { namespace hardware { namespace sensors { namespace V2_1 { namespace subhal { namespace implementation { using ::android::hardware::sensors::V1_0::OperationMode; using ::android::hardware::sensors::V1_0::RateLevel; using ::android::hardware::sensors::V1_0::Result; using ::android::hardware::sensors::V1_0::SharedMemInfo; using ::android::hardware::sensors::V2_1::Event; using ::android::hardware::sensors::V2_1::implementation::IHalProxyCallback; using ::android::hardware::sensors::V2_1::implementation::ISensorsSubHal; class SensorsSubHal : public ISensorsSubHal, public ISensorsEventCallback { public: SensorsSubHal(); Return getSensorsList_2_1(ISensors::getSensorsList_2_1_cb _hidl_cb); Return injectSensorData_2_1(const Event& event); Return initialize(const sp& halProxyCallback); virtual Return setOperationMode(OperationMode mode); OperationMode getOperationMode() const { return mCurrentOperationMode; } Return activate(int32_t sensorHandle, bool enabled); Return batch(int32_t sensorHandle, int64_t samplingPeriodNs, int64_t maxReportLatencyNs); Return flush(int32_t sensorHandle); Return registerDirectChannel(const SharedMemInfo& mem, ISensors::registerDirectChannel_cb _hidl_cb); Return unregisterDirectChannel(int32_t channelHandle); Return configDirectReport(int32_t sensorHandle, int32_t channelHandle, RateLevel rate, ISensors::configDirectReport_cb _hidl_cb); Return debug(const hidl_handle& fd, const hidl_vec& args); const std::string getName() { return "FakeSubHal"; } void postEvents(const std::vector& events, bool wakeup) override; protected: template void AddSensor() { std::shared_ptr sensor = std::make_shared(mNextHandle++ /* sensorHandle */, this /* callback */); mSensors[sensor->getSensorInfo().sensorHandle] = sensor; } std::map> mSensors; sp mCallback; private: OperationMode mCurrentOperationMode = OperationMode::NORMAL; int32_t mNextHandle; }; } // namespace implementation } // namespace subhal } // namespace V2_1 } // namespace sensors } // namespace hardware } // namespace android