12d4d9a4dSopenharmony_ci/*
22d4d9a4dSopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
32d4d9a4dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
42d4d9a4dSopenharmony_ci * you may not use this file except in compliance with the License.
52d4d9a4dSopenharmony_ci * You may obtain a copy of the License at
62d4d9a4dSopenharmony_ci *
72d4d9a4dSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
82d4d9a4dSopenharmony_ci *
92d4d9a4dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
102d4d9a4dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
112d4d9a4dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122d4d9a4dSopenharmony_ci * See the License for the specific language governing permissions and
132d4d9a4dSopenharmony_ci * limitations under the License.
142d4d9a4dSopenharmony_ci */
152d4d9a4dSopenharmony_ci
162d4d9a4dSopenharmony_ci#ifndef OHOS_VIRTUAL_DEVICE_H
172d4d9a4dSopenharmony_ci#define OHOS_VIRTUAL_DEVICE_H
182d4d9a4dSopenharmony_ci
192d4d9a4dSopenharmony_ci#include <map>
202d4d9a4dSopenharmony_ci#include <string>
212d4d9a4dSopenharmony_ci#include <vector>
222d4d9a4dSopenharmony_ci
232d4d9a4dSopenharmony_ci#include <dirent.h>
242d4d9a4dSopenharmony_ci#include <fcntl.h>
252d4d9a4dSopenharmony_ci#include <unistd.h>
262d4d9a4dSopenharmony_ci
272d4d9a4dSopenharmony_ci#include <linux/input.h>
282d4d9a4dSopenharmony_ci#include "linux/uinput.h"
292d4d9a4dSopenharmony_ci
302d4d9a4dSopenharmony_ci#include "constants_dinput.h"
312d4d9a4dSopenharmony_ci
322d4d9a4dSopenharmony_cinamespace OHOS {
332d4d9a4dSopenharmony_cinamespace DistributedHardware {
342d4d9a4dSopenharmony_cinamespace DistributedInput {
352d4d9a4dSopenharmony_ciclass VirtualDevice {
362d4d9a4dSopenharmony_cipublic:
372d4d9a4dSopenharmony_ci    explicit VirtualDevice(const InputDevice &event);
382d4d9a4dSopenharmony_ci    virtual ~VirtualDevice();
392d4d9a4dSopenharmony_ci    bool DoIoctl(int32_t fd, int32_t request, const uint32_t value);
402d4d9a4dSopenharmony_ci    bool CreateKey(const InputDevice &inputDevice);
412d4d9a4dSopenharmony_ci    void SetABSInfo(struct uinput_user_dev &inputUserDev, const InputDevice &inputDevice);
422d4d9a4dSopenharmony_ci    bool SetPhys(const std::string &deviceName, const std::string &dhId);
432d4d9a4dSopenharmony_ci    bool SetUp(const InputDevice &inputDevice, const std::string &devId, const std::string &dhId);
442d4d9a4dSopenharmony_ci    bool InjectInputEvent(const input_event &event);
452d4d9a4dSopenharmony_ci    void SetNetWorkId(const std::string &netWorkId);
462d4d9a4dSopenharmony_ci    void SetPath(const std::string &path);
472d4d9a4dSopenharmony_ci    std::string GetNetWorkId();
482d4d9a4dSopenharmony_ci    std::string GetPath();
492d4d9a4dSopenharmony_ci    uint16_t GetClasses();
502d4d9a4dSopenharmony_ci
512d4d9a4dSopenharmony_ci    int32_t GetDeviceFd();
522d4d9a4dSopenharmony_ci    uint16_t GetDeviceType();
532d4d9a4dSopenharmony_ci
542d4d9a4dSopenharmony_ciprivate:
552d4d9a4dSopenharmony_ci    int32_t fd_ = -1;
562d4d9a4dSopenharmony_ci    std::string deviceName_;
572d4d9a4dSopenharmony_ci    std::string netWorkId_;
582d4d9a4dSopenharmony_ci    std::string path_;
592d4d9a4dSopenharmony_ci    const uint16_t busType_;
602d4d9a4dSopenharmony_ci    const uint16_t vendorId_;
612d4d9a4dSopenharmony_ci    const uint16_t productId_;
622d4d9a4dSopenharmony_ci    const uint16_t version_;
632d4d9a4dSopenharmony_ci    const uint16_t classes_;
642d4d9a4dSopenharmony_ci    struct uinput_user_dev dev_ {};
652d4d9a4dSopenharmony_ci    const std::string pid_ = std::to_string(getpid());
662d4d9a4dSopenharmony_ci
672d4d9a4dSopenharmony_ciprivate:
682d4d9a4dSopenharmony_ci    void RecordEventLog(const input_event &event);
692d4d9a4dSopenharmony_ci};
702d4d9a4dSopenharmony_ci} // namespace DistributedInput
712d4d9a4dSopenharmony_ci} // namespace DistributedHardware
722d4d9a4dSopenharmony_ci} // namespace OHOS
732d4d9a4dSopenharmony_ci
742d4d9a4dSopenharmony_ci#endif // OHOS_VIRTUAL_DEVICE_H
75