diff --git a/common/include/input_hub.cpp b/common/include/input_hub.cpp index 96736d8..c3afa22 100644 --- a/common/include/input_hub.cpp +++ b/common/include/input_hub.cpp @@ -1471,7 +1471,7 @@ void InputHub::SavePressedKeyState(const InputHub::Device *dev, int32_t keyCode) void InputHub::CheckTargetKeyState(const InputHub::Device *dev, const unsigned long *keyState) { - //If device is a mouse, record the mouse pressed key. + // If device is a mouse, record the mouse pressed key. if ((dev->classes & INPUT_DEVICE_CLASS_CURSOR) != 0) { int mouseLeftBtnState = BitIsSet(keyState, BTN_LEFT); if (mouseLeftBtnState != 0) { diff --git a/common/include/input_hub.h b/common/include/input_hub.h index bd1403f..8964fb8 100644 --- a/common/include/input_hub.h +++ b/common/include/input_hub.h @@ -44,7 +44,7 @@ inline constexpr size_t NBYTES(size_t nbits) } class InputHub { -private: +public: struct Device { Device* next; int fd; // may be -1 if device is closed @@ -73,7 +73,7 @@ private: int32_t absXIndex; int32_t absYIndex; }; -public: + InputHub(); ~InputHub(); size_t StartCollectInputEvents(RawEvent *buffer, size_t bufferSize); diff --git a/services/sink/inputcollector/test/sinkcollectorunittest/BUILD.gn b/services/sink/inputcollector/test/sinkcollectorunittest/BUILD.gn index ef849ad..0e65594 100644 --- a/services/sink/inputcollector/test/sinkcollectorunittest/BUILD.gn +++ b/services/sink/inputcollector/test/sinkcollectorunittest/BUILD.gn @@ -63,6 +63,7 @@ ohos_unittest("distributed_input_inner_sinkcollector_test") { deps = [ "${utils_path}:libdinput_utils", + "${services_state_path}:libdinput_state", "//third_party/libevdev:libevdev", "//third_party/openssl:libcrypto_shared", ] diff --git a/services/state/include/dinput_state.h b/services/state/include/dinput_state.h index e2f71e2..5dfa229 100644 --- a/services/state/include/dinput_state.h +++ b/services/state/include/dinput_state.h @@ -69,7 +69,8 @@ private: ~DInputState(); // Simulate device state to the pass through target device. void SimulateEventInjectToSrc(const int32_t sessionId, const std::vector &dhIds); - + void SimulateBtnTouchEvent(const int32_t sessionId, const std::string &dhId, const struct RawEvent &event); + void SimulateNormalEvent(const int32_t sessionId, const std::string &dhId, const struct RawEvent &event); private: std::mutex operationMutex_; std::map dhIdStateMap_; diff --git a/services/state/src/dinput_state.cpp b/services/state/src/dinput_state.cpp index b929e3e..fae078f 100644 --- a/services/state/src/dinput_state.cpp +++ b/services/state/src/dinput_state.cpp @@ -116,44 +116,11 @@ void DInputState::SimulateEventInjectToSrc(const int32_t sessionId, const std::v if (event.code == BTN_TOUCH) { DHLOGI("Simulate Touch Down event for device path: %s, dhId: %s", event.path.c_str(), event.descriptor.c_str()); - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_ABS, ABS_MT_TRACKING_ID, SIM_TOUCH_TRACKING_ID); - std::pair absPos = GetAndClearABSPosition(event.descriptor); - if (absPos.first != -1) { - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_ABS, ABS_MT_POSITION_X, absPos.first); - } - - if (absPos.second != -1) { - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_ABS, ABS_MT_POSITION_Y, absPos.second); - } - - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_KEY, event.code, KEY_DOWN_STATE); - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_KEY, BTN_TOOL_FINGER, KEY_DOWN_STATE); - - if (absPos.first != -1) { - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_ABS, ABS_X, absPos.first); - } - - if (absPos.second != -1) { - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_ABS, ABS_Y, absPos.second); - } - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_MSC, MSC_TIMESTAMP, 0x0); - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_SYN, SYN_REPORT, 0x0); + SimulateBtnTouchEvent(sessionId, dhId, event); } else { DHLOGI("Simulate Key event for device path: %s, dhId: %s", event.path.c_str(), event.descriptor.c_str()); - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_KEY, event.code, KEY_DOWN_STATE); - DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, - EV_SYN, SYN_REPORT, 0x0); + SimulateNormalEvent(sessionId, dhId, event); } } @@ -161,6 +128,47 @@ void DInputState::SimulateEventInjectToSrc(const int32_t sessionId, const std::v } } +void DInputState::SimulateBtnTouchEvent(const int32_t sessionId, const std::string &dhId, const struct RawEvent &event) +{ + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_ABS, ABS_MT_TRACKING_ID, SIM_TOUCH_TRACKING_ID); + std::pair absPos = GetAndClearABSPosition(event.descriptor); + if (absPos.first != -1) { + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_ABS, ABS_MT_POSITION_X, absPos.first); + } + if (absPos.second != -1) { + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_ABS, ABS_MT_POSITION_Y, absPos.second); + } + + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_KEY, event.code, KEY_DOWN_STATE); + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_KEY, BTN_TOOL_FINGER, KEY_DOWN_STATE); + + if (absPos.first != -1) { + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_ABS, ABS_X, absPos.first); + } + if (absPos.second != -1) { + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_ABS, ABS_Y, absPos.second); + } + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_MSC, MSC_TIMESTAMP, 0x0); + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_SYN, SYN_REPORT, 0x0); +} + +void DInputState::SimulateNormalEvent(const int32_t sessionId, const std::string &dhId, const struct RawEvent &event) +{ + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_KEY, event.code, KEY_DOWN_STATE); + DistributedInputSinkTransport::GetInstance().SendKeyStateNodeMsg(sessionId, dhId, + EV_SYN, SYN_REPORT, 0x0); +} + void DInputState::RefreshABSPosition(const std::string &dhId, int32_t absX, int32_t absY) { std::lock_guard lock(absPosMtx_); diff --git a/utils/include/dinput_utils_tool.h b/utils/include/dinput_utils_tool.h index 8069c16..3176520 100644 --- a/utils/include/dinput_utils_tool.h +++ b/utils/include/dinput_utils_tool.h @@ -17,9 +17,9 @@ #define OHOS_DISTRIBUTED_INPUT_UTILS_TOOL_H #include -#include #include +#include #include "nlohmann/json.hpp" #include "dinput_log.h"