OTG HID函数
说明
- 该功能是使用OTG的方式模拟滑动、输入等功能,目前支持ESP32S3的开发板
- 如何刷入固件,以及链接等,请进入该文档查看iOS USB OTG-HID教程
提示
- 注意:固件里面只有绝对坐标固件,请使用iOS17+以上的系统
otgEvent.isOtgConnect otg链接状态
- otg链接状态
- 适配EC iOS USB版本9.32.0+
- @returns
{string}null或者空字符串,代表成功,其他代表错误信息
let current_screen_width = 0;
let current_screen_height = 0;
function otg_test() {
//scanOtgIp();
logd("Start test otg functions")
if (!connectOtg()) {
return
}
logd("device.getOrientationNoAuto() " + device.getOrientationNoAuto())
captureScreenAndResetScreenSize();
testSystemKey();
testInput();
click_swipe();
test_touch();
test_multiTouch()
logd("test otg end")
}
function test_multiTouch() {
sleep(1000)
logd("开始测试多点触摸函数")
// 最后一个抬起 最好与 最后一个移动保持一致 防止有错误的偏移
let touch1 = [
{"action": 0, "x": 500, "y": 1200, "delay": 10},
{"action": 2, "x": 480, "y": 1100, "delay": 200},
{"action": 2, "x": 460, "y": 1000, "delay": 100},
{"action": 2, "x": 430, "y": 1000, "delay": 100},
{"action": 2, "x": 430, "y": 950, "delay": 100},
{"action": 2, "x": 350, "y": 900, "delay": 100},
{"action": 2, "x": 300, "y": 800, "delay": 100},
{"action": 1, "x": 300, "y": 800, "delay": 2}
]
let rr = otgEvent.multiTouch(touch1, 1000)
if (_isEmpty(rr)) {
logd("执行多点触摸成功")
} else {
logd("执行多点触摸失败 {}", rr)
}
}
function test_touch() {
sleep(1000)
let startx = 200;
let starty = 400;
let touchDown = otgEvent.touchDown(startx, starty)
logd("touchDown, {},{} :{} ", startx, starty, (_isEmpty(touchDown) ? "OK" : touchDown))
for (let i = 0; i < 50; i++) {
sleep(10)
startx = startx + 1;
starty = starty + 10;
let touchMove = otgEvent.touchMove(startx, starty)
logd("touchMove {},{} :{} ", startx, starty, (_isEmpty(touchMove) ? "OK" : touchMove))
}
sleep(100)
let touchUp = otgEvent.touchUp(startx, starty)
logd("touchUp {},{} :{} ", startx, starty, (_isEmpty(touchUp) ? "OK" : touchUp))
}
function click_swipe() {
sleep(1000)
let click = otgEvent.clickPoint(508, 411)
logd("clickPoint: {}", (_isEmpty(click) ? "OK" : click))
sleep(1000)
let press = otgEvent.press(719, 792, 5000)
logd("press : {}", (_isEmpty(press) ? "OK" : press))
sleep(1000)
let doubleClickPoint = otgEvent.doubleClickPoint(500, 792)
logd("doubleClickPoint : {}", (_isEmpty(doubleClickPoint) ? "OK" : doubleClickPoint))
sleep(1000)
let swipeToPoint = otgEvent.swipeToPoint(300, 400, 700, 900, 1000)
logd("swipeToPoint : {}", (_isEmpty(swipeToPoint) ? "OK" : swipeToPoint))
}
function moveMouse() {
sleep(1000)
let resetZero = otgEvent.resetZero()
logd("resetZero {}", (_isEmpty(resetZero) ? "OK" : resetZero))
sleep(1000)
let mouseMove = otgEvent.mouseMove(300, 500)
logd("mouseMove {}", (_isEmpty(mouseMove) ? "OK" : mouseMove))
}
function testSystemKey() {
sleep(1000)
let recents_r = otgEvent.systemKey("recents");
logd("进程列表 {} ", _isEmpty(recents_r) ? "ok" : recents_r)
sleep(2000)
let home_result = otgEvent.systemKey("home");
logd("模拟HOME {} ", _isEmpty(home_result) ? "ok" : home_result)
}
function testInput() {
let keyPress1 = otgEvent.keyPress("", 97)
logd("keyPress {} ", _isEmpty(keyPress1) ? "ok" : keyPress1)
otgEvent.keyPressChar("", "Enter")
sleep(2000)
let keyPressChar = otgEvent.keyPressChar("alt", "b")
logd("keyPressChar {} ", _isEmpty(keyPressChar) ? "ok" : keyPressChar)
sleep(2000)
otgEvent.keyPressChar("", "t")
sleep(2000)
logd("toggleSoftKeyboard {}", otgEvent.toggleSoftKeyboard())
}
function connectOtg() {
let oldIp = otgEvent.getOtgIp();
if (!_isEmpty(oldIp)) {
logd("当前OTG设备IP {} getMacAddress={}", oldIp, otgEvent.getMacAddress())
if (_isEmpty(otgEvent.isOtgConnect())) {
logd("OTG设备已经准备好")
return true;
}
logd("OTG设备没有好,开始重新扫描")
}
let ips = utils.getPCIps();
if (_isEmpty(ips)) {
logd("未找到本电脑的IP")
return false;
}
logd("本电脑的IP为: {}", ips)
ips = ips.split(",")
for (let i = 0; i < ips.length; i++) {
let ipsKey = ips[i];
let iparr = ipsKey.split(".")
let range = iparr[0] + "." + iparr[1] + "." + iparr[2] + ".2-" + iparr[0] + "." + iparr[1] + "." + iparr[2] + ".254"
logd("-- scan ip rang: {}", range)
let scanr = otgEvent.scanOtgDevice(range)
if (_isEmpty(scanr)) {
logd("扫描IP段结束: {}", range)
} else {
logd("扫描IP段错误消息: {}", scanr)
}
}
logd("等待OTG准备...")
sleep(5000)
oldIp = otgEvent.getOtgIp();
if (!_isEmpty(oldIp)) {
if (_isEmpty(otgEvent.isOtgConnect())) {
logd("当前OTG设备IP {} getMacAddress={}", oldIp, otgEvent.getMacAddress())
logd("OTG设备已经准备好")
return true;
}
logd("OTG设备没有好")
} else {
logw("OTG设备没有好,请先给开发板配网,然后扫描")
}
return false
}
function captureScreenAndResetScreenSize() {
logd("开始设置屏幕的大小,防止坐标计算偏离")
let img = image.captureFullScreenNoAuto()
if (!img) {
image.resetCaptureScreenNoAutoEnv()
sleep(1000)
img = image.captureFullScreenNoAuto()
}
if (img) {
let w = img.getWidth();
let h = img.getHeight();
if (w != current_screen_height || h != current_screen_height) {
let sets = otgEvent.setScreenSize(w, h)
if (_isEmpty(sets)) {
logd("设置屏幕尺寸大小成功 w:{} h:{}", w, h)
current_screen_width = w;
current_screen_height = h;
}
}
img.recycle()
} else {
logw("截图失败 可能无法设置屏幕的尺寸,会导致坐标偏离")
}
}
otg_test()
otgEvent.scanOtgDevice 扫描OTG设备的IP
- 扫描OTG设备的IP
- 适配EC iOS USB版本9.32.0+
- @param ip_ranges IP范围,例如 192.168.2.1-92.168.2.255
- @returns
{string}null或者空字符串,代表成功,其他代表错误信息
function main() {
// 参考 otgEvent.isOtgConnect 例子
}
main();
otgEvent.getOtgIp 获取OTG的IP
- 获取OTG的IP
- 适配EC iOS USB版本9.32.0+
- @returns
{string}null或者空字符串,没有IP,需要重新扫描
function main() {
// 参考 otgEvent.isOtgConnect 例子
}
main();
otgEvent.setScreenSize 设置屏幕尺寸
- 设置屏幕尺寸
- 这个用来防止鼠标移动到屏幕外,导致鼠标偏移
- 如果不知道屏幕尺寸,就使用截图后的图片的宽度和高度
- 适配EC iOS USB版本9.32.0+
- @param w 屏幕的宽度
- @param h 屏幕的高度
- @returns
{string}null或者空字符串,代表成功,其他代表错误信息
function main() {
// 参考 otgEvent.isOtgConnect 例子
}
main();
otgEvent.restart 重启开发板
- 重启开发板
- 相当于 按了开发板的RST键
- 适配EC iOS USB版本9.32.0+
- @returns
{string}null或者空字符串,代表成功,其他代表错误信息
function main() {
// 直接调用即可
logd(otgEvent.restart())
}
main();