BLE Functions
Overview
- BLE module functions are mainly used for Bluetooth gesture actions
- The BLE module uses the
bleEventprefix - For BLE hardware configuration, see BLE Getting Started
bleEvent.isConnected BLE Connection Status
- BLE connection status
- Available in EC iOS standalone edition 6.5.0+
- @returns
{boolean}true if connected, false if not connected
// See the full example code in bleEvent.startConnectbleEvent.startConnect Connect to BLE Device
- Connect to a BLE device
- Available in EC iOS standalone edition 6.5.0+
- @param bleDeviceName BLE device name; if omitted, read from app system settings
- @param save Whether to save the configured BLE device name
- @param timeout Connection timeout in milliseconds
- @returns
{string|null}null or empty string means success; otherwise an error message
function testble() {
// Set this to true if you need network connection mode // The code below is test code only — fill in your own logic let useNetwork = false if (useNetwork) { if (!useNetworkBle()) { return; } } else { if (!connectBle()) { return } }
testMoveDistance()
sleep(3000)
logd("hide ble Name : " + bleEvent.hideBleName()) sleep(1000) let zr = bleEvent.resetZero(); if (_isBleResultOk(zr)) { logd("Mouse reset to zero succeeded") } else { logw("Mouse reset to zero failed") }
let rr = bleEvent.setLastScale() if (rr != null && rr != "") { // Scale was never set before logd("Current device type: " + device.getDeviceIdentifier()) let scale = bleEvent.getIPhoneScale(); logd("scale is " + scale) // If you use relative-coordinate firmware, set the compensation scale bleEvent.setScale(scale, scale) }
logd("scale "+bleEvent.getScale())
// If you use absolute-coordinate firmware, set this to 1 // bleEvent.setScale(1,1)
resetScreenSize_auto(); sleep(1000) logd("Test LED blink") logd("light: " + bleEvent.light(10, 100, 100))
// Set step size — smaller values move slower bleEvent.setStep(20)
testClick(); sleep(5000) logd("Start testing multi-touch") testBleMtouch(); sleep(3000) logd("Start testing basic gestures") testMove()
sleep(3000) logd("Start testing keys and keyboard")
testBleKey(); sleep(3000)
logd("showBleName ble Name : " + bleEvent.showBleName())
sleep(5000) logd("Toggle soft keyboard: " + bleEvent.toggleSoftKeyboard())
sleep(2000) logd("Toggle soft keyboard: " + bleEvent.toggleSoftKeyboard()) sleep(2000)
logd("Restart development board: " + bleEvent.resetBle())
bleEvent.clickPoint(300, 400)
}
function resetScreenSize_auto() { let o = agentEvent.getOrientation(); let img = image.captureFullScreen(); if (img == null) { return } // You can also use device module functions to get width and height let w = img.getWidth(); let h = img.getHeight(); logd("Current screen width and height: " + w + "," + h + " orientation: " + o) let rw = w; let rh = h; if (o == "2") { // Landscape if (w < h) { rh = w; rw = h; } } else { // Portrait if (w > h) { rh = w; rw = h; } } logd("Set BLE screen parameters " + rw + " " + rh) bleEvent.setScreenSize(rw, rh)}
function connectBle() { bleEvent.sendCmdType(1) logd("Start connecting BLE " + bleEvent.getConfigBleName()) if (bleEvent.isConnected()) { return true; } bleEvent.stopConnect(); let cr = bleEvent.startConnect("", false, 15000) if (_isBleResultOk(cr)) { logd("BLE connected successfully " + bleEvent.getConfigBleName()) return true } logw("BLE connection failed " + cr)
return false
}
function testClick() { sleep(1000) logd("Start testing gesture actions") logd("Start testing click") bleEvent.resetZero(); let ck = bleEvent.clickPoint(300, 400)
if (_isBleResultOk(ck)) { logd("clickPoint test succeeded") } else { logw("clickPoint test failed " + ck) } sleep(2000) ck = bleEvent.press(310, 420, 4000) if (_isBleResultOk(ck)) { logd("press test succeeded") } else { logw("press test failed " + ck) }
sleep(2000) ck = bleEvent.doubleClickPoint(200, 500) if (_isBleResultOk(ck)) { logd("doubleClickPoint test succeeded") } else { logw("doubleClickPoint test failed " + ck) }
sleep(2000) ck = bleEvent.swipeToPoint(200, 500, 600, 900, 5000) if (_isBleResultOk(ck)) { logd("swipeToPoint test succeeded") } else { logw("swipeToPoint test failed " + ck) }
sleep(2000)}
function testMove() { sleep(2000) logd("start move ...") let m = bleEvent.mouseMove(100, 100) if (_isBleResultOk(m)) { logd("mouseMove test succeeded") } else { logw("mouseMove test failed " + m) }
sleep(2000) logd("start mouseMoveByDistance ...") m = bleEvent.mouseMoveByDistance(10, 20) if (_isBleResultOk(m)) { logd("mouseMoveByDistance test succeeded") } else { logw("mouseMoveByDistance test failed " + m) }
sleep(2000) logd("start touchDown ...") m = bleEvent.touchDown(101, 121) if (_isBleResultOk(m)) { logd("touchDown test succeeded") } else { logw("touchDown test failed " + m) }
sleep(2000) logd("start touchMove ...") m = bleEvent.touchMove(130, 150) if (_isBleResultOk(m)) { logd("touchMove test succeeded") } else { logw("touchMove test failed " + m) }
sleep(2000) logd("start touchUp ...") m = bleEvent.touchUp(130, 150) if (_isBleResultOk(m)) { logd("touchUp test succeeded") } else { logw("touchUp test failed " + m) }
}
function testBleMtouch() { let touch1 = [ { "action": 0, "x": 500, "y": 1200, "pointer": 1, "delay": 1 }, { "action": 2, "x": 500, "y": 1100, "pointer": 1, "delay": 20 }, { "action": 2, "x": 500, "y": 1000, "pointer": 1, "delay": 20 }, { "action": 1, "x": 1, "y": 1, "pointer": 1, "delay": 20 }];
let m = bleEvent.multiTouch(touch1, 10000) if (_isBleResultOk(m)) { logd("multiTouch test succeeded") } else { logw("multiTouch test failed " + m) }}
function testBleKey() {
sleep(1000) let kc = bleEvent.keyPressChar("", "a") if (_isBleResultOk(kc)) { logd("Press a succeeded") } else { logw("Press a failed: " + kc) }
sleep(1000) let kc2 = bleEvent.keyPressChar("shift", "a") if (_isBleResultOk(kc2)) { logd("Press SHIFT+a succeeded") } else { logw("Press SHIFT+a failed: " + kc2) }
sleep(1000) let kc3 = bleEvent.keyPress("", 97) if (_isBleResultOk(kc3)) { logd("keyPress 97 succeeded") } else { logw("keyPress 97 failed: " + kc3) }
sleep(1000) let k1 = bleEvent.systemKey("home") if (_isBleResultOk(k1)) { logd("Press HOME succeeded") } else { logw("Press HOME failed: " + k1) } sleep(1000) let k2 = bleEvent.systemKey("recents") if (_isBleResultOk(k2)) { logd("Press appSwitch succeeded") } else { logw("Press appSwitch failed: " + k2) }
}
function useNetworkBle() { let ip = bleEvent.searchBleIp(false, 10 * 1000) if (ip == null || ip == "") { logw("Failed to find development board IP") return false } logd("Development board IP: " + ip + " BLE name: " + bleEvent.getConfigBleName()) // Switch to network request mode bleEvent.sendCmdType(2) return true;
}
function testMoveDistance() { bleEvent.resetZero(); bleEvent.mouseMoveDistance(100, 100, false) bleEvent.mouseMoveDistance(100, 100, false) bleEvent.mouseMoveDistance(100, 100, false) sleep(1000) bleEvent.mouseMoveDistance(100, 100, false) sleep(3000) sleep(1000) bleEvent.mouseMoveDistance(100, 100, false) logd(bleEvent.mouseMoveDistance(0, 0, true)) sleep(1000) logd(bleEvent.mouseMoveDistance(0, 0, false))}
function _isBleResultOk(r) { return r == null || r == ""}
testble()bleEvent.stopConnect Disconnect
- Disconnect
- Available in EC iOS standalone edition 6.5.0+
- @returns
{string|null} null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.searchBleIp Search Development Board IP
- Search for the development board IP
- Available in EC iOS standalone edition 6.5.0+
- @param force Force search to prevent stale cache
- @param timeout Timeout in milliseconds
- @returns
{string|null}null means not found
// See the full example code in bleEvent.startConnectbleEvent.getIPhoneScale Mouse Compensation Scale
- Returns a scale value based on the iPhone hardware identifier prefix (digits after the comma are ignored)
- @returns
{number}float scale ratio
// See the full example code in bleEvent.startConnectbleEvent.setScale Set Mouse Compensation Scale
- Set the mouse compensation scale
- Ratio of pixel movement per mouse unit; default is 2.0
- iPhone 6/7/8 375 x 667 — set to 2.0; standard 16:9, no safe area interference
- iPhone 11 / XR 414 x 896 — set to 1.96; taller screen, system accelerates Y axis compensation
- iPhone X/XS/11 Pro 375 x 812 — set to 1.98; 19.5:9 aspect ratio with slight acceleration
- iPhone 12/13/14/15 390 x 844 — set to 1.97; different logical points from iPhone 11, slightly different acceleration curve
- Plus / Max series 414 x 896 / 430 x 932 — set to 1.94 ~ 1.95; tallest screens, system increases Y axis gain for usability
- Available in EC iOS standalone edition 6.5.0+
- @param x_scale X-axis float
- @param y_scale Y-axis float
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.getScale Get Stored Compensation Scale
- Get the stored compensation scale
- Available in EC iOS standalone edition 6.6.0+
- May come from app calibration settings or from code
- @returns
{string}null or empty means never set; otherwise a JSON string with the stored value
// See the full example code in bleEvent.startConnectbleEvent.setLastScale Use Previous Compensation Scale
- Apply the previously saved compensation scale
- Available in EC iOS standalone edition 6.6.0+
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.setScreenSize Set Screen Size
- Set screen size
- Prevents the mouse from moving off-screen and causing offset
- If screen size is unknown, use the width and height from a screenshot
- Or use functions from the device module
- Available in EC iOS standalone edition 6.5.0+
- @param w Screen width
- @param h Screen height
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.setWifiInfo Set Network Information
- Set network information
- Helps the development board connect to Wi-Fi
- Available in EC iOS standalone edition 6.5.0+
- @param name Wi-Fi name
- @param pwd Wi-Fi password
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.resetBle Restart Development Board
- Restart the development board
- Equivalent to pressing the RST button on the board
- Available in EC iOS standalone edition 6.5.0+
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.mouseMove Move Mouse
- Move the mouse
- Moves only — no press action
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.mouseMoveByDistance Move Mouse (Pixel Distance)
- Move the mouse by pixel distance
- Moves only — no press action
- Available in EC iOS standalone edition 6.5.0+
- @param x_dis X pixel distance; must not exceed 127
- @param y_dis Y pixel distance; must not exceed 127
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.mouseMoveDistance Move Mouse (With Press Parameter)
- Move the mouse with optional press parameter
- Moves only; press can be included
- If both x and y are 0, send twice — first with press=true, then press=false — to simulate a click
- Available in EC iOS standalone edition 6.5.0+
- @param x_dis X pixel distance; must not exceed 127
- @param y_dis Y pixel distance; must not exceed 127
- @param press true to press
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.resetZero Reset Mouse to Zero
- Reset mouse to zero
- Moves the mouse to the top-right corner at (0, 0)
- Available in EC iOS standalone edition 6.5.0+
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.touchDown Touch Down at Coordinates
- Touch down at coordinates
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.touchMove Move Touch Point
- Move touch point
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.touchUp Touch Up at Coordinates
- Touch up at coordinates
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.clickPoint Click Coordinates
- Click coordinates
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.press Long Press Coordinates
- Long press coordinates
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @param delay Long press duration in milliseconds
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.doubleClickPoint Double-Click Coordinates
- Double-click coordinates
- Available in EC iOS standalone edition 6.5.0+
- @param x X coordinate
- @param y Y coordinate
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.pressMouseBtn Press Mouse Button
- Press a mouse button
- Can be used for AssistiveTouch custom actions — Custom Actions
- To avoid conflicts, use button numbers 4 through 8
- Available in EC iOS standalone edition 6.5.0+
- @param b Mouse button number starting from 1; typically 1=left, 2=right, 3=middle scroll, 4–8=custom
- @returns
{string}null or empty string means success; otherwise an error message
function main() { // BLE connection code omitted — see startConnect example // If you configured Settings > Accessibility > Touch > AssistiveTouch > Devices > select connected device > Custom Actions, // sending mouse button 4 here triggers the assigned action let r = bleEvent.pressMouseBtn(4); logd(r)}
main();bleEvent.swipeToPoint Swipe
- Swipe
- Available in EC iOS standalone edition 6.5.0+
- @param startX Start X coordinate
- @param startY Start Y coordinate
- @param endX End X coordinate
- @param endY End Y coordinate
- @param duration Duration in milliseconds
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.multiTouch Multi-Touch
- Multi-touch
- Touch parameters: action — typically 0=down, 1=up, 2=move
- x: X coordinate
- y: Y coordinate
- pointer: finger index — 1, 2, 3, etc.
- delay: delay before this action in milliseconds
- Available in EC iOS standalone edition 6.5.0+
- @param touch1 Touch point array for finger 1, e.g.:
[{"action":0,"x":1,"y":1,"pointer":1,"delay":20},{"action":2,"x":1,"y":1,"pointer":1,"delay":20}] - @param timeout Multi-touch execution timeout in milliseconds
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.systemKey System Key
- System key
- Available in EC iOS standalone edition 6.5.0+
- @param key Currently supports home, recents (recent tasks)
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.keyPress Key Press
- Key press
- Available in EC iOS standalone edition 6.5.0+
- @param prefix Modifier key; can be empty — alt=Alt, ctrl=Ctrl, gui=Win/Command, r_ctrl=right Ctrl, r_shift=right Shift, shift=Shift
- @param code Integer, e.g. 65 (ASCII); see https://tool.oschina.net/commons?type=4
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.keyPressChar Character Key Press
- Character key press
- Available in EC iOS standalone edition 6.5.0+
- @param prefix Modifier key; can be empty — alt=Alt, ctrl=Ctrl, gui=Win/Command, r_ctrl=right Ctrl, r_shift=right Shift, shift=Shift
- @param code Character, e.g. a
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.toggleSoftKeyboard Toggle Soft Keyboard
- Toggle soft keyboard
- On iPhone 7 in testing, after BLE connects, input fields may not show the soft keyboard when using the standalone main app for input — try this method; iPhone 11 did not have this issue; behavior depends on iOS version
- Ignore this method if you do not use the standalone main app as the input method
- Available in EC iOS standalone edition 6.5.0+
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.setStep Set Step Size
- Set step size
- Available in EC iOS standalone edition 6.5.0+
- @param step 10–120; maximum value per mouse move step — larger values move faster; default 100
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.light Blink LED
- Blink LED
- Available in EC iOS standalone edition 6.5.0+
- @param num Number of blink cycles
- @param lightToOff Duration from on to off in milliseconds
- @param offToLight Duration from off to on in milliseconds
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.showBleName Show BLE Name
- Show BLE name
- Available in EC iOS standalone edition 6.5.0+
- Helps the device be discoverable
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.hideBleName Hide BLE Name
- Hide BLE name
- Anti-detection
- Available in EC iOS standalone edition 6.5.0+
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.getConfigBleName Get App-Configured BLE Name
- Get the BLE name configured in the app
- Available in EC iOS standalone edition 6.5.0+
- @returns
{string}configured BLE name
// See the full example code in bleEvent.startConnectbleEvent.sendCmdType Set Communication Mode
- Set communication mode
- How the app sends commands to the development board
- Available in EC iOS standalone edition 6.5.0+
- @param tt 1=Bluetooth, 2=network
- @returns
{string}null or empty string means success; otherwise an error message
// See the full example code in bleEvent.startConnectbleEvent.startKeepAlive Mouse Keep-Alive
- Mouse keep-alive heartbeat
- Keeps the mouse cursor visible
- Under the hood, moves the mouse away and back
- Skipped when other actions are in progress
- Not needed on iOS 17+ with absolute-coordinate firmware
- @param keepAliveTime Heartbeat interval in milliseconds; e.g. 5000 for every 5 seconds
- @param moveValue Distance per heartbeat move; use 1 or 2; must not exceed 100
- @returns
{*|string}empty string on success; non-empty error message on failure
// Call directly after BLE connection completes bleEvent.startKeepAlive(5000,1)bleEvent.stopKeepAlive Stop Keep-Alive
- Stop keep-alive heartbeat
- @returns
{string}empty string on success; non-empty error message on failure
// Call directly bleEvent.stopKeepAlive()