USB HID

USB HID

USB HID(点击查看视频教程)客户端,对应的硬件模块为USB HID服务端(比如ESP32 S3等),也即用户可以直接使用UsbClient和USB HID硬件进行通信。这是一个通用接口,支持任何USB HID硬件。USB硬件和通信等问题可以直接咨询官方客服connectsendreceive
例子:冰狐脚本调用UsbClient和USB HID硬件通信

function main() {
    var b = usb.connect();
    console.log('connect:', b);
    if (b) {
        usbInit(rsScreenWidth, rsScreenHeight)

        // usbRecentApps()
        // usbSwipe(400, 2000, 600, 1000, 1000)
        // usbBack(usb)
        usbHome()
        // usbClick(800, 650)
    }
    console.log('end')
}

function usbInit(screenWidth, screenHeight) {
    usb.send([0xe].concat(int2bytes(screenWidth, 2), int2bytes(screenHeight, 2)))
    sleep(3000)
}

function usbClick(x, y, duration) {
    if (null == duration) {
        duration = 200
    }
    usbMouseMove(usb, x, y);
    sleep(duration);
    usbMouseUp(usb, x, y);
}

function usbMouseMove(x, y) {
    usb.send([0x9].concat(int2bytes(x, 2), int2bytes(y, 2)))
}

function usbMouseUp(x, y) {
    usb.send([0xa].concat(int2bytes(x, 2), int2bytes(y, 2)))
}

function usbSwipe(x1, y1, x2, y2, duration) {
    if (null == duration) {
        duration = 300
    }

    var moveCount = randInt(6, 20)
    var dTime = parseInt(duration / moveCount);
    var startX = 0, startY = 0, endX = 0, endY = 0, useCurve = false;
    if (x1 != x2 && y1 != y2) {
        if (x1 < x2 && y1 > y2) {
            startX = x1;
            startY = y1;
            endX = x2;
            endY = y2;
            useCurve = true;
        } else if (x1 > x2 && y1 < y2) {
            startX = x2;
            startY = y2;
            endX = x1;
            endY = y1;
            useCurve = true;
        }
    }

    if (useCurve) {
        var x = endX - startX;
        var y = startY - endY;

        var a = (endX - startX) / ((endY - startY) * (endY - startY));
        var yb = y1;
        var ya = (y2 - yb) / (moveCount * moveCount);
        for (var i = 1; i < moveCount; ++i) {
            var fY = (ya * i * i + yb);
            var y = parseInt(fY);
            var x = parseInt(a * (y - startY) * (y - startY) + startX);
            if (i > 1 && i < moveCount - 1) {
                x += randInt(0, 5) - 2;
                y += randInt(0, 5) - 2;
            }
            usbMouseMove(usb, x, y)
            sleep(dTime);
        }
    } else {
        usbMouseMove(usb, x1, y1)
        var a = (x1 - x2) / (y1 - y2);
        var b = x1 - a * y1;

        var yb = y1;
        var ya = (y2 - yb) / (moveCount * moveCount);
        for (var i = 1; i < moveCount; ++i) {
            var fY = (ya * i * i + yb);
            var y = parseInt(fY);
            var x = parseInt((a * y + b));
            if (i > 1 && i < moveCount - 1) {
                x += randInt(0, 5) - 2;
                y += randInt(0, 5) - 2;
            }
            usbMouseMove(usb, x, y)
            sleep(dTime);
        }
    }

    usbMouseMove(usb, x2, y2)
    sleep(10);
    usbMouseUp(usb, x2, y2)
}

function usbHome() {
    usb.send([0x20])
}

function usbBack() {
    usb.send([0xd])
}

function usbRecentApps() {
    usb.send([0x8, 0x4, 0x2b])
}

function usbCopy() {
    usb.send([0x08, 0x01, 0x06])
}

function usbPaste() {
    usb.send([0x08, 0x01, 0x19])
}

function usbCut() {
    usb.send([0x08, 0x01, 0x1B])
}

function usbSelectAll() {
    usb.send([0x08, 0x01, 0x04])
}

connect

连接usb设备。1表示成功,-1表示没有找到usb设备,-2表示连接设备失败,0表示失败
参数:
参数名 类型 必填 说明

send

发送数据给usb设备。返回integer,1表示成功,-1表示端口错误,-2表示发送失败,0表示失败
参数:
参数名 类型 必填 说明
data string/byte array 必填 待发送的数据,支持字符串和整数,注意:如果为数组时必须是整数数组(每个整数实际为一个byte)。

receive

从USB设备接收数据,返回字符串。
参数:
参数名 类型 必填 说明
timeout integer 选填 超时时间,单位毫秒,默认值10000