/* * Copyright (C) 2017 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. */ #ifndef ANDROID_SENSORHAL_EXT_HIDRAW_DEVICE_H #define ANDROID_SENSORHAL_EXT_HIDRAW_DEVICE_H #include "HidDevice.h" #include #include #include #include #include namespace android { namespace SensorHalExt { using HidUtil::HidParser; using HidUtil::HidReport; class HidRawDevice : public HidDevice { friend class HidRawDeviceTest; public: HidRawDevice(const std::string &devName, const std::unordered_set &usageSet); virtual ~HidRawDevice(); // test if the device initialized successfully bool isValid(); // implement HidDevice pure virtuals virtual HidDeviceInfo& getDeviceInfo() override { return mDeviceInfo; } virtual bool getFeature(uint8_t id, std::vector *out) override; virtual bool setFeature(uint8_t id, const std::vector &in) override; virtual bool sendReport(uint8_t id, std::vector &data) override; virtual bool receiveReport(uint8_t *id, std::vector *data) override; protected: bool populateDeviceInfo(); size_t getReportSize(int type, uint8_t id); bool generateDigest(const std::unordered_set &usage); size_t calculateReportBitSize(const std::vector &reportItems); const HidParser::ReportPacket *getReportPacket(unsigned int type, unsigned int id); typedef std::pair ReportTypeIdPair; struct UnsignedIntPairHash { size_t operator()(const ReportTypeIdPair& v) const { std::hash hash; return hash(v.first) ^ hash(v.second); } }; std::unordered_map mReportTypeIdMap; HidParser::DigestVector mDigestVector; private: std::mutex mIoBufferLock; std::vector mIoBuffer; int mDevFd; HidDeviceInfo mDeviceInfo; bool mMultiIdDevice; int mValid; HidRawDevice(const HidRawDevice &) = delete; void operator=(const HidRawDevice &) = delete; }; } // namespace SensorHalExt } // namespace android #endif // ANDROID_SENSORHAL_EXT_HIDRAW_DEVICE_H