/*
* Copyright (c) 2021-2022 Huawei Device Co., Ltd.
* 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.
*/
#include "input_manager_command.h"
#include <getopt.h>
#include <algorithm>
#include <chrono>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <limits>
#include <thread>
#include <sys/time.h>
#include <unistd.h>
#include "string_ex.h"
#include "error_multimodal.h"
#include "input_manager.h"
#include "mmi_log.h"
#include "multimodal_event_handler.h"
#include "pointer_event.h"
#include "util.h"
class InputManagerCommand {
public:
int32_t ParseCommand(int32_t argc, char *argv[]);
int32_t ConnectService();
void ShowUsage();
private:
void InitializeMouseDeathStub();
};
namespace OHOS {
namespace MMI {
namespace {
constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, MMI_LOG_DOMAIN, "InputManagerCommand" };
constexpr int32_t SLEEPTIME = 20;
constexpr int32_t MOUSE_ID = 7;
constexpr int32_t JOYSTICK_BUTTON_ID = 25;
constexpr int32_t TWO_MORE_COMMAND = 2;
constexpr int32_t THREE_MORE_COMMAND = 3;
constexpr int32_t MAX_PRESSED_COUNT = 30;
constexpr int32_t ACTION_TIME = 3000;
constexpr int32_t BLOCK_TIME_MS = 7;
constexpr int32_t TIME_TRANSITION = 1000;
constexpr int64_t MIN_TAKTTIME_MS = 1;
constexpr int64_t MAX_TAKTTIME_MS = 15000;
constexpr int32_t DEFAULT_DELAY = 200;
constexpr int32_t KNUCKLE_PARAM_SIZE = 9;
enum JoystickEvent {
JOYSTICK_BUTTON_UP,
JOYSTICK_BUTTON_PRESS,
JOYSTICK_MOVE,
JOYSTICK_CLICK,
JOYSTICK_INTERVAL
};
struct JoystickInfo {
int32_t buttonId { -1 };
int32_t absValue { -1 };
int32_t taktTime { 0 };
PointerEvent::AxisType absType;
};
} // namespace
void InputManagerCommand::SleepAndUpdateTime(int64_t ¤tTimeMs)
{
int64_t nowEndSysTimeMs = GetSysClockTime() / TIME_TRANSITION;
int64_t sleepTimeMs = BLOCK_TIME_MS - (nowEndSysTimeMs - currentTimeMs) % BLOCK_TIME_MS;
std::this_thread::sleep_for(std::chrono::milliseconds(sleepTimeMs));
currentTimeMs = nowEndSysTimeMs + sleepTimeMs;
}
int32_t InputManagerCommand::NextPos(int64_t begTimeMs, int64_t curtTimeMs, int32_t totalTimeMs,
int32_t begPos, int32_t endPos)
{
int64_t endTimeMs = 0;
if (!AddInt64(begTimeMs, totalTimeMs, endTimeMs)) {
return begPos;
}
if (curtTimeMs < begTimeMs || curtTimeMs > endTimeMs) {
return begPos;
}
if (totalTimeMs == 0) {
std::cout << "invalid totalTimeMs" << std::endl;
return begPos;
}
double tmpTimeMs = static_cast<double>(curtTimeMs - begTimeMs) / totalTimeMs;
int32_t offsetPos = std::ceil(tmpTimeMs * (endPos - begPos));
int32_t retPos = 0;
if (offsetPos == 0) {
return begPos;
} else if (offsetPos > 0) {
if (!AddInt32(begPos, offsetPos, retPos)) {
return begPos;
}
return retPos > endPos ? endPos : retPos;
}
if (!AddInt32(begPos, offsetPos, retPos)) {
return begPos;
}
return retPos < endPos ? endPos : retPos;
}
int32_t InputManagerCommand::ParseCommand(int32_t argc, char *argv[])
{
struct option headOptions[] = {
{"mouse", no_argument, nullptr, 'M'},
{"keyboard", no_argument, nullptr, 'K'},
{"touch", no_argument, nullptr, 'T'},
{"joystick", no_argument, nullptr, 'J'},
{"help", no_argument, nullptr, '?'},
{nullptr, 0, nullptr, 0}
};
struct option mouseSensorOptions[] = {
{"move", required_argument, nullptr, 'm'},
{"click", required_argument, nullptr, 'c'},
{"double_click", required_argument, nullptr, 'b'},
{"down", required_argument, nullptr, 'd'},
{"up", required_argument, nullptr, 'u'},
{"scroll", required_argument, nullptr, 's'},
{"drag", required_argument, nullptr, 'g'},
{"interval", required_argument, nullptr, 'i'},
{nullptr, 0, nullptr, 0}
};
struct option keyboardSensorOptions[] = {
{"down", required_argument, nullptr, 'd'},
{"up", required_argument, nullptr, 'u'},
{"long_press", required_argument, nullptr, 'l'},
{"interval", required_argument, nullptr, 'i'},
{nullptr, 0, nullptr, 0}
};
struct option touchSensorOptions[] = {
{"move", required_argument, nullptr, 'm'},
{"down", required_argument, nullptr, 'd'},
{"up", required_argument, nullptr, 'u'},
{"click", required_argument, nullptr, 'c'},
{"interval", required_argument, nullptr, 'i'},
{"drag", required_argument, nullptr, 'g'},
{"knuckle", no_argument, nullptr, 'k'},
{nullptr, 0, nullptr, 0}
};
struct option joystickSensorOptions[] = {
{"move", required_argument, nullptr, 'm'},
{"down", required_argument, nullptr, 'd'},
{"up", required_argument, nullptr, 'u'},
{"click", required_argument, nullptr, 'c'},
{"interval", required_argument, nullptr, 'i'},
{nullptr, 0, nullptr, 0}
};
int32_t c = 0;
int32_t optionIndex = 0;
optind = 0;
if ((c = getopt_long(argc, argv, "MKTJ?", headOptions, &optionIndex)) != -1) {
switch (c) {
case 'M': {
int32_t px = 0;
int32_t py = 0;
int32_t buttonId;
int32_t scrollValue;
while ((c = getopt_long(argc, argv, "m:d:u:c:b:s:g:i:", mouseSensorOptions, &optionIndex)) != -1) {
switch (c) {
case 'm': {
if (argc - optind < 1) {
std::cout << "too few arguments to function" << std::endl;
return RET_ERR;
}
auto isTraceOption = [](const std::string &opt1) {
return opt1 == std::string("--trace");
};
auto traceMode = [isTraceOption](int32_t argCount, char *argvOffset[]) -> bool {
if (argCount <= 3) {
return false;
}
std::string arg3 = argvOffset[2];
if (!arg3.empty() && arg3.at(0) == '-') {
return false;
}
if ((argCount >= 5) && isTraceOption(std::string(argvOffset[4]))) {
return true;
}
if ((argCount >= 6) && isTraceOption(std::string(argvOffset[5]))) {
return true;
}
return false;
}(argc - optind + 1, &argv[optind - 1]);
if (!traceMode) {
if (!StrToInt(optarg, px) || !StrToInt(argv[optind], py)) {
std::cout << "invalid parameter to move mouse" << std::endl;
return RET_ERR;
}
if ((px < 0) || (py < 0)) {
std::cout << "Coordinate value must be greater than 0" << std::endl;
return RET_ERR;
}
std::cout << "move
没有合适的资源?快使用搜索试试~ 我知道了~
多模输入标准系统组件,提供传统的输入交互方式,例如按键、触控、键盘、鼠标等
共893个文件
cpp:267个
h:243个
rules:116个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 89 浏览量
2023-12-07
09:47:20
上传
评论
收藏 2.52MB ZIP 举报
温馨提示
本组件应用于标准系统之上,为设备提供单指触控输入能力。本组件将触屏输入产生的事件上报到JS UI框架或用户程序框架,JS UI框架根据上报的事件再次封装,对应用提供接口。
资源推荐
资源详情
资源评论
收起资源包目录
多模输入标准系统组件,提供传统的输入交互方式,例如按键、触控、键盘、鼠标等 (893个子文件)
multimodalinput.cfg 2KB
udev.conf 49B
input_manager_command.cpp 91KB
input_windows_manager.cpp 72KB
multimodal_input_connect_stub.cpp 70KB
key_command_handler.cpp 68KB
input_manager_pointer_test.cpp 63KB
mmi_service.cpp 63KB
multimodal_input_connect_proxy.cpp 61KB
js_pointer_context.cpp 60KB
input_manager_simulate_test.cpp 56KB
input_manager_impl.cpp 54KB
input_manager_test.cpp 53KB
key_event.cpp 52KB
js_event_target.cpp 47KB
js_input_monitor.cpp 43KB
pointer_drawing_manager.cpp 40KB
js_key_code.cpp 35KB
js_pointer_manager.cpp 35KB
device_base_test.cpp 35KB
mouse_transform_processor.cpp 33KB
input_manager_util.cpp 32KB
pointer_event_test.cpp 31KB
key_subscriber_handler.cpp 28KB
js_input_device_context.cpp 27KB
key_event_value_transformation.cpp 27KB
virtual_device.cpp 25KB
input_device_manager.cpp 25KB
pointer_event.cpp 24KB
touchpad_transform_processor.cpp 24KB
multimodal_input_connect_manager.cpp 22KB
dfx_hisysevent.cpp 22KB
input_manager_filter_manual_test.cpp 22KB
event_normalize_handler.cpp 21KB
udev_device.cpp 20KB
event_resample_test.cpp 19KB
js_register_module.cpp 18KB
key_command_handler_test.cpp 18KB
input_handler_manager.cpp 18KB
util.cpp 17KB
event_monitor_handler.cpp 17KB
device_base.cpp 16KB
server_msg_handler.cpp 16KB
js_register_module.cpp 16KB
input_event_data_transformation.cpp 16KB
input_display_bind_helper.cpp 16KB
event_resample.cpp 16KB
key_event_value_transformation_test.cpp 16KB
key_event_test.cpp 15KB
mouse_transform_processor_test.cpp 15KB
client_msg_handler.cpp 14KB
event_interceptor_handler.cpp 14KB
custom_udev_test.cpp 14KB
inject_event_test.cpp 13KB
input_manager.cpp 13KB
js_register_util.cpp 13KB
transform_point_test.cpp 13KB
uds_server.cpp 12KB
virtual_device_test.cpp 12KB
event_util_test.cpp 12KB
js_input_monitor_manager.cpp 11KB
js_input_monitor_module.cpp 11KB
bytrace_adapter.cpp 11KB
multimodal_input_preferences_manager.cpp 11KB
mouse_event_normalize_test.cpp 10KB
touch_transform_processor.cpp 10KB
util_napi_value.cpp 10KB
js_input_device_manager.cpp 9KB
mmi_client.cpp 9KB
processing_touch_screen_device.cpp 9KB
injection_event_dispatch.cpp 9KB
input_display_bind_helper_test.cpp 9KB
input_windows_manager_test.cpp 9KB
key_auto_repeat.cpp 9KB
setting_datashare.cpp 9KB
js_util.cpp 9KB
input_parse.cpp 8KB
tablet_tool_tranform_processor.cpp 8KB
processing_game_pad_device.cpp 8KB
dfx_hisysevent_test.cpp 8KB
system_info.cpp 8KB
processing_pen_device.cpp 8KB
event_dispatch_handler.cpp 8KB
processing_joystick_device_test.cpp 7KB
mouse_event_normalize.cpp 7KB
input_manager_manual_test.cpp 7KB
key_event_input_subscribe_manager.cpp 7KB
js_short_key_manager.cpp 7KB
event_dump.cpp 7KB
event_filter_handler.cpp 7KB
key_event_normalize.cpp 7KB
uds_session_test.cpp 7KB
js_short_key_context.cpp 7KB
input_device_impl.cpp 7KB
processing_joystick_device.cpp 7KB
e2e_udev_test.cpp 7KB
stream_buffer_test.cpp 6KB
switch_subscriber_handler.cpp 6KB
injection_tools_help_func.cpp 6KB
uds_session.cpp 6KB
共 893 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6732
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功