Skip to content

USB HID Events

Overview

  • Simulate taps, swipes, and typing over a USB cableno BLE or OTG development board
  • Global object: usbHidEvent
  • For EC iOS USB 10.7.0+ mid-control; phone OS recommended iOS 17+
  • Keep USB connected, device trusted, and the bridge running
  • Similar to BLE events and OTG HID, but without an external board

Quick example

function _usbOk(r) {
return r == null || r === "";
}
function main() {
let r = usbHidEvent.sessionStart(true);
if (!_usbOk(r)) {
logw("USB HID session failed: " + r);
return;
}
r = usbHidEvent.setScreenSize(1170, 2532);
if (!_usbOk(r)) {
logw("setScreenSize failed: " + r);
return;
}
r = usbHidEvent.clickPoint(200, 400);
logd("click: " + (_usbOk(r) ? "ok" : r));
r = usbHidEvent.typeText("hello");
logd("en type: " + (_usbOk(r) ? "ok" : r));
r = usbHidEvent.inputText("中文测试");
logd("zh paste: " + (_usbOk(r) ? "ok" : r));
r = usbHidEvent.systemKey("home");
logd("home: " + (_usbOk(r) ? "ok" : r));
usbHidEvent.sessionStop();
}
main();

usbHidEvent.sessionStart

  • Start (or reuse) a USB HID session
  • Requires EC iOS USB 10.7.0+
  • @param gate Prefer enhanced compatibility mode; default true (ignored on older OS when unsupported)
  • @returns {string} null/empty = success

usbHidEvent.sessionStop

  • Close the session and release resources
  • Requires EC iOS USB 10.7.0+
  • @returns {string} null/empty = success

usbHidEvent.sessionRestart

  • Force close and reopen the USB HID session (use after broken stream / dead touch)
  • More thorough than sessionStart alone (which may reuse a stale connection)
  • Requires EC iOS USB 10.7.0+
  • @param gate Prefer enhanced compatibility mode; default true
  • @returns {string} null/empty = success

usbHidEvent.setScreenSize

  • Set screen pixel size for coordinate mapping (must match screenshot/stream)
  • Requires EC iOS USB 10.7.0+
  • @param w width
  • @param h height
  • @returns {string} null/empty = success

usbHidEvent.touchDown / touchMove / touchUp

  • Press / move / release at pixel coordinates
  • Requires EC iOS USB 10.7.0+
  • @param x X
  • @param y Y
  • @returns {string} null/empty = success

usbHidEvent.clickPoint

  • Tap
  • Requires EC iOS USB 10.7.0+
  • @param x X
  • @param y Y
  • @returns {string} null/empty = success

usbHidEvent.press

  • Long press
  • Requires EC iOS USB 10.7.0+
  • @param x X
  • @param y Y
  • @param delay hold time in ms
  • @returns {string} null/empty = success

usbHidEvent.doubleClickPoint

  • Double tap
  • Requires EC iOS USB 10.7.0+
  • @param x X
  • @param y Y
  • @returns {string} null/empty = success

usbHidEvent.swipeToPoint

  • Swipe
  • Requires EC iOS USB 10.7.0+
  • @param startX start X
  • @param startY start Y
  • @param endX end X
  • @param endY end Y
  • @param duration duration in ms
  • @returns {string} null/empty = success

usbHidEvent.multiTouch

  • Path points (same shape as bleEvent.multiTouch)
  • action: 0 down, 1 up, 2 move; delay is per-point ms
  • Requires EC iOS USB 10.7.0+
  • @param touch1 point array
  • @param timeout total timeout ms
  • @returns {string} null/empty = success
let touch1 = [
{"action": 0, "x": 100, "y": 500, "delay": 20},
{"action": 2, "x": 100, "y": 300, "delay": 30},
{"action": 1, "x": 100, "y": 300, "delay": 20}
];
usbHidEvent.multiTouch(touch1, 10000);

usbHidEvent.systemKey

  • Requires EC iOS USB 10.7.0+
  • @param key home | recents | lock
  • @returns {string} null/empty = success

usbHidEvent.inputText

  • Clipboard paste for all text (ASCII and non-ASCII)
  • Requires EC iOS USB 10.7.0+
  • @param text text
  • @returns {string} null/empty = success

usbHidEvent.typeText

  • Type printable ASCII as keys; non-English/emoji automatically uses clipboard paste
  • Requires EC iOS USB 10.7.0+
  • @param text text
  • @returns {string} null/empty = success

usbHidEvent.keyPressChar

  • Requires EC iOS USB 10.7.0+
  • @param prefix optional: alt | ctrl | gui | shift | r_ctrl | r_shift
  • @param code character or key name (a / enter / BS)
  • @returns {string} null/empty = success

usbHidEvent.keyPress / keyUp

  • Press one key / release all keys
  • Requires EC iOS USB 10.7.0+
  • @returns {string} null/empty = success

usbHidEvent.volumeUp / volumeDown / mute

  • Volume and mute hardware keys
  • Requires EC iOS USB 10.7.0+
  • @returns {string} null/empty = success

usbHidEvent.setClipboard

  • Write device clipboard only (does not paste into a field)
  • Requires EC iOS USB 10.7.0+
  • @param text text
  • @returns {string} null/empty = success

usbHidEvent.getClipboard

  • Read device clipboard text
  • Requires EC iOS USB 10.7.0+
  • @returns {string} clipboard text; empty when none or on failure