使用前提

  • 手机上安装了服务端APP
  • 下载地址:点击下载

权限

安装之后需要开启四个权限

  • 蓝牙权限:用来连接板子的蓝牙
  • 通知权限:用于app的后台运行
  • 电池优化:防止app被系统关闭
  • usb权限:用于连接板子的otg
    • otg模式开启的状态下,连接板子到手机,会提示允许APP访问板子吗?
    • 勾选一律打开后点确定,然后插拔板子后会自动启动服务端,不会有弹窗
    • usb

连接模式

  • 蓝牙连接:通过蓝牙跟板子通信
  • USB连接:通过OTG跟板子通信

蓝牙模式

  • 先将手机蓝牙跟板子配对
  • 在服务端选择板子蓝牙,然后点连接
  • 连接成功后,可以点击按钮进行功能测试
  • lanyaceshi

USB模式

  • 先将板子插上手机
  • 如果弹出是否允许,勾选一律打开后点击确定
  • 正常情况会显示设备已连接,点击按钮进行功能测试
  • usbceshi

充电管理

  • 服务端带了充电管理功能
  • 开启后,会定时检测当前手机电量
  • 如果当前电量小于充电阈值,则向板子发送充电开启指令,然后一直充电直到大于停止阈值
  • 如果当前电量大于停止阈值,则向板子发送关闭充电指令,然后一直等待电量小于充电阈值
  • chongdian

服务端主页

用于简单的功能测试,点击,滑动, 按键

  • 通过电脑访问服务端首页(需要在同一路由器下)
  • 通过服务端所在的手机浏览器访问/
  • zhuye

API常见用法

  1. 想从app界面回到桌面:发送home指令
  2. 想返回上一个界面:发送back指令
  3. 想点击某个坐标:发送tap指令
  4. 想给输入框发送一段文字:先发送setClipboard,然后发送key_paste指令
  5. 想查询当前分辨率:发送getResolution指令
  6. 想让设备开始充电:发送charge指令
  7. 想滑动屏幕:发送swipe指令
  8. 想按下键盘:发送key指令

服务端系统 API

基本URL格式:

http://127.0.0.1:8866/hid?system=指令名

  • 127.0.0.1:8866 是服务监听的地址和端口(可能需要根据实际情况修改)。
  • 指令名 是要执行的操作。

查询指令 (GET)

getHidMode

  • 指令名: getHidMode
  • 功能: 获取当前在设置中配置的 HID 连接模式(USB 或 BLUETOOTH)。这反映的是配置值,不代表实际连接状态。
  • 参数:
  • 返回: 字符串 "USB" 或 "BLUETOOTH"。
  • 测试样例: /hid?system=getHidMode

getHidStatus

  • 指令名: getHidStatus
  • 功能: 获取当前 HID 的实际连接状态。检查的状态取决于 getHidMode 返回的配置模式(如果是 USB 模式则检查 USB 连接,如果是蓝牙模式则检查蓝牙连接)。
  • 参数:
  • 返回: 字符串 "true" (表示已连接) 或 "false" (表示未连接)。
  • 测试样例: /hid?system=getHidStatus

getBatteryLevel

  • 指令名: getBatteryLevel
  • 功能: 获取运行服务的设备的当前电池电量百分比。
  • 参数:
  • 返回: 整数形式的电池百分比字符串,例如 "85"。
  • 测试样例: /hid?system=getBatteryLevel

getBluetoothName

  • 指令名: getBluetoothName
  • 功能: 获取运行服务的设备的蓝牙适配器名称。
  • 参数:
  • 返回: 设备的蓝牙名称字符串。
  • 测试样例: /hid?system=getBluetoothName

isCharging

  • 指令名: isCharging
  • 功能: 检查运行服务的设备当前是否正在充电。
  • 参数:
  • 返回: 字符串 "true" (正在充电) 或 "false" (未充电)。
  • 测试样例: /hid?system=isCharging

getResolution

  • 指令名: getResolution
  • 功能: 获取运行服务的设备的屏幕分辨率(宽度和高度)。
  • 参数:
  • 返回: JSON 格式的字符串,包含宽度和高度,例如 {"width":1080,"height":1920}。Content-Type 为 application/json
  • 测试样例: /hid?system=getResolution

setClipboard

  • 指令名: setClipboard
  • 功能: 设置运行服务的设备的系统剪贴板内容。
  • 参数:
    • content (字符串): 要设置到剪贴板的文本内容。
  • 返回: 字符串 "success" 或错误信息 "error: missing content parameter"。
  • 测试样例: /hid?system=setClipboard&content=你好大表哥

服务端HID API

基本URL格式:

http://127.0.0.1:8866/hid?cmd=指令名:参数1,参数2,...

  • 127.0.0.1:8866 是服务监听的地址和端口(可能需要根据实际情况修改)。
  • 指令名 是要执行的操作。
  • 参数 是指令所需的数据,以逗号分隔。如果指令不需要参数,则省略 : 及之后的部分。

键盘指令

home

  • 指令名: home
  • 功能: 回到桌面。
  • 参数:
  • 测试样例: /hid?cmd=home

home2

  • 指令名: home2
  • 功能: 回到桌面
  • 参数:
  • 测试样例: /hid?cmd=home2

back

  • 指令名: back
  • 功能: 返回键
  • 参数:
  • 测试样例: /hid?cmd=back

back1

  • 指令名: back1
  • 功能: 返回键
  • 参数:
  • 测试样例: /hid?cmd=back1

back2

  • 指令名: back2
  • 功能: 返回键
  • 参数:
  • 测试样例: /hid?cmd=back2

recents

  • 指令名: recents
  • 功能: 最近任务
  • 参数:
  • 测试样例: /hid?cmd=recents

recents2

  • 指令名: recents2
  • 功能: 最近任务,解决oppo之类的特殊型号手机
  • 参数:
  • 测试样例: /hid?cmd=recents2

key_select / key_all

key_copy

  • 指令名: key_copy
  • 功能: 发送 Ctrl + C 组合键(复制)。
  • 参数:
  • 测试样例: /hid?cmd=key_copy

key_cut

  • 指令名: key_cut
  • 功能: 发送 Ctrl + X 组合键(剪切)。
  • 参数:
  • 测试样例: /hid?cmd=key_cut

key_paste

  • 指令名: key_paste
  • 功能: 发送 Ctrl + V 组合键(粘贴)。
  • 参数:
  • 测试样例: /hid?cmd=key_paste

key_del

  • 指令名: key_del
  • 功能: 发送 Delete 键
  • 参数:
  • 测试样例: /hid?cmd=key_del

key_delete

  • 指令名: key_delete
  • 功能: 发送 Backspace 键
  • 参数:
  • 测试样例: /hid?cmd=key_delete

key_enter

  • 指令名: key_enter
  • 功能: 发送 Enter 键
  • 参数:
  • 测试样例: /hid?cmd=key_enter

key_up

  • 指令名: key_up
  • 功能: 发送向上箭头键
  • 参数:
  • 测试样例: /hid?cmd=key_up

key_down

  • 指令名: key_down
  • 功能: 发送向下箭头键
  • 参数:
  • 测试样例: /hid?cmd=key_down

key_left

  • 指令名: key_left
  • 功能: 发送向左箭头键
  • 参数:
  • 测试样例: /hid?cmd=key_left

key_right

  • 指令名: key_right
  • 功能: 发送向右箭头键
  • 参数:
  • 测试样例: /hid?cmd=key_right

key_home

  • 指令名: key_home
  • 功能: 光标移动到行首
  • 参数:
  • 测试样例: /hid?cmd=key_home

key_end

  • 指令名: key_end
  • 功能: 光标移动到行尾
  • 参数:
  • 测试样例: /hid?cmd=key_end

key_undo

  • 指令名: key_undo
  • 功能: 发送 Ctrl + Z 组合键(撤销)。
  • 参数:
  • 测试样例: /hid?cmd=key_undo

key_redo

  • 指令名: key_redo
  • 功能: 发送 Ctrl + Y 组合键(重做)。
  • 参数:
  • 测试样例: /hid?cmd=key_redo

key_tab

  • 指令名: key_tab
  • 功能: 发送 Tab 键
  • 参数:
  • 测试样例: /hid?cmd=key_tab

key_print

key_space

  • 指令名: key_space
  • 功能: 发送空格键
  • 参数:
  • 测试样例: /hid?cmd=key_space

key_esc

  • 指令名: key_esc
  • 功能: 发送 Escape 键
  • 参数:
  • 测试样例: /hid?cmd=key_esc

key

  • 指令名: key
  • 功能: 发送指定的 HID 键盘码
  • 参数:
    • keyCode (整数): 要发送的 HID Usage ID。例如,0x4C (十进制 76) 是 Delete 键。
  • 测试样例: /hid?cmd=key:76 (发送 Delete 键)

key_combo

  • 指令名: key_combo
  • 功能: 发送组合键
  • 参数:
    • modifier (整数): 0:没有控制键 1:ctrl键 2:alt键 4:shift 8:win (如果控制键需要多个,比如ctrl+alt,相加即可=3
    • key (整数): 普通HID键盘码
    • mode (整数): 按键流程分成四个步骤,控制键按下=1 ,控制+普通键同时按下=2,普通键抬起=4,控制键抬起=8,需要执行哪个步骤就相加即可,比如四个步骤都执行,则1+2+4+9=15
  • 测试样例(ctrl+v): /hid?cmd=key_combo:1,25,15

key_abc

  • 指令名: key_abc
  • 功能: 输入一串英文文本字符。支持基本的 ASCII 字符(字母、数字、符号)。
  • 参数:
    • text (字符串): 要输入的文本内容。
  • 注意: 内部会将字符映射到 HID Usage ID 和 Shift 状态。并非所有字符都支持。
  • 测试样例: /hid?cmd=key_abc:Hello World 123!

媒体与系统控制指令

power

  • 指令名: power
  • 功能: 模拟按下电源键。可以模拟短按或长按。
  • 参数:
    • (可选) delay (整数): 按下和释放之间的延迟(毫秒)。如果提供此参数,则模拟长按。
  • 测试样例 (短按): /hid?cmd=power
  • 测试样例 (长按 1 秒): /hid?cmd=power:1000

volUp

  • 指令名: volUp
  • 功能: 发送音量增加键
  • 参数:
  • 测试样例: /hid?cmd=volUp

volDown

  • 指令名: volDown
  • 功能: 发送音量减小键
  • 参数:
  • 测试样例: /hid?cmd=volDown

volClose

  • 指令名: volClose
  • 功能: 发送 Mute 媒体控制命令(静音)。
  • 参数:
  • 测试样例: /hid?cmd=volClose

设备控制指令

reboot

  • 指令名: reboot
  • 功能: 重启板子
  • 参数:
  • 测试样例: /hid?cmd=reboot

led

  • 指令名: led
  • 功能: 控制设备上的 LED 状态
  • 参数:
    • ledState (整数): LED 状态,0 表示关闭,1 表示开启。
  • 测试样例 (开启 LED): /hid?cmd=led:1
  • 测试样例 (关闭 LED): /hid?cmd=led:0

charge

  • 指令名: charge
  • 功能: 控制设备的充电状态
  • 参数:
    • chargeState (整数): 充电状态,0 表示关闭,1 表示开启/允许。
  • 测试样例 (允许充电): /hid?cmd=charge:1
  • 测试样例 (禁止充电): /hid?cmd=charge:0

setbt

  • 指令名: setbt
  • 功能: 设置蓝牙电量
  • 参数:
    • btMode (整数): 要设置的剩余电量
  • 测试样例: /hid?cmd=setbt:50

setname

  • 指令名: setname
  • 功能: 设置设备的蓝牙广播名称
  • 参数:
    • name (字符串): 新的设备名称,尽量不要超过12位
  • 测试样例: /hid?cmd=setname:BirdisGood

setmode

  • 指令名: setmode
  • 功能: 设置设备的工作模式,0:双开,1:单开otg,2:单开蓝牙
  • 参数:
    • mode (整数): 要设置的工作模式代码。
  • 测试样例: /hid?cmd=setmode:2

setxy

  • 指令名: setxy
  • 功能: 设置屏幕分辨率,用于旧版本fish设备
  • 参数:
    • width (整数): 屏幕宽度(像素)。
    • height (整数): 屏幕高度(像素)。
  • 测试样例: /hid?cmd=setxy:1080,2400

触摸与滑动指令

坐标说明: * 坐标可以是绝对像素值,也可以是百分比(0.0 到 1.0)。 * 通过 isPercent 参数控制坐标类型。isPercent=0(默认)表示像素,isPercent=1 表示百分比。 * 百分比坐标会根据 setxy 设置的或设备默认的分辨率进行转换。

touchDown

  • 指令名: touchDown
  • 功能: 模拟手指按下屏幕。
  • 参数:
    • x (浮点数): 按下点的 X 坐标。
    • y (浮点数): 按下点的 Y 坐标。
    • finger (整数, 可选, 默认 0): 手指 ID (用于多点触控)。
    • isPercent (整数, 可选, 默认 0): 1 表示 x, y 是百分比, 0 表示像素。
  • 测试样例 (像素): /hid?cmd=touchDown:100,200
  • 测试样例 (百分比, 手指1): /hid?cmd=touchDown:0.5,0.8,1,1

touchMove

  • 指令名: touchMove
  • 功能: 模拟手指在屏幕上移动(需先 touchDown)。
  • 参数:
    • x (浮点数): 移动到的 X 坐标。
    • y (浮点数): 移动到的 Y 坐标。
    • finger (整数, 可选, 默认 0): 手指 ID。
    • isPercent (整数, 可选, 默认 0): 1 表示 x, y 是百分比, 0 表示像素。
  • 测试样例 (像素): /hid?cmd=touchMove:150,250
  • 测试样例 (百分比): /hid?cmd=touchMove:0.6,0.85,0,1

touchUp

  • 指令名: touchUp
  • 功能: 模拟手指抬起。
  • 参数:
    • (可选) x (浮点数): 抬起点的 X 坐标。如果省略,使用最后记录的坐标。
    • (可选) y (浮点数): 抬起点的 Y 坐标。如果省略,使用最后记录的坐标。
    • finger (整数, 可选, 默认 0): 手指 ID。
    • isPercent (整数, 可选, 默认 0): 1 表示 x, y 是百分比, 0 表示像素。
  • 测试样例 (指定坐标): /hid?cmd=touchUp:150,250
  • 测试样例 (使用最后坐标): /hid?cmd=touchUp
  • 测试样例 (百分比, 手指1): /hid?cmd=touchUp:0.6,0.85,1,1

tap

  • 指令名: tap
  • 功能: 模拟一次或多次点击(按下 -> 等待 -> 抬起 -> 等待)。
  • 参数:
    • x (浮点数): 点击位置的 X 坐标。
    • y (浮点数): 点击位置的 Y 坐标。
    • delay1 (整数, 可选, 默认 30): 按下后到抬起前的延迟(毫秒)。
    • delay2 (整数, 可选, 默认 30): 抬起后到下一次点击(如果是多次点击)或结束前的延迟(毫秒)。
    • times (整数, 可选, 默认 1): 点击次数。
    • finger (整数, 可选, 默认 0): 手指 ID。
    • isPercent (整数, 可选, 默认 0): 1 表示 x, y 是百分比, 0 表示像素。
  • 测试样例 (单次点击): /hid?cmd=tap:424,434
  • 测试样例 (双击, 百分比坐标): /hid?cmd=tap:0.5,0.5,50,50,2,0,1

swipe

  • 指令名: swipe
  • 功能: 模拟滑动操作,可以包含复杂的参数控制滑动行为,并可选择性地让另一根手指在滑动过程中进行点击。
  • 参数 (按顺序):
    1. x1 (浮点数): 起点 X 坐标。
    2. y1 (浮点数): 起点 Y 坐标。
    3. x2 (浮点数): 终点 X 坐标。
    4. y2 (浮点数): 终点 Y 坐标。
    5. isPercent (整数, 可选, 默认 0): 1 表示坐标是百分比, 0 表示像素。 (对应 IS_PERCENT_INDEX)
    6. accelMode (整数, 可选, 默认由SwipeUtility决定): 加速模式。 (对应 ACCEL_MODE_INDEX)
    7. accelFactor (浮点数, 可选, 默认由SwipeUtility决定): 加速/减速因子。 (对应 ACCEL_FACTOR_INDEX)
    8. numSteps (整数, 可选, 默认由SwipeUtility决定): 覆盖滑动步数。 (对应 NUM_STEPS_INDEX)
    9. initialSleep (整数, 可选, 默认由SwipeUtility决定): 初始按下后的等待时间 (ms)。 (对应 INITIAL_SLEEP_INDEX)
    10. finalSleep (整数, 可选, 默认由SwipeUtility决定): 抬起后的等待时间 (ms)。 (对应 FINAL_SLEEP_INDEX)
    11. stepSleepBase (整数, 可选, 默认由SwipeUtility决定): 每步之间的基础等待时间 (ms)。 (对应 STEP_SLEEP_BASE_INDEX)
    12. touchUpCount (整数, 可选, 默认由SwipeUtility决定): 滑动结束时发送 touchUp 报告的数量。 (对应 TOUCH_UP_COUNT_INDEX)
    13. swipeFinger (整数, 可选, 默认由SwipeUtility决定): 执行滑动的手指 ID。 (对应 SWIPE_FINGER_INDEX)
    14. curveType (整数, 可选, 默认由SwipeUtility决定): 滑动曲线类型。 (对应 CURVE_TYPE_INDEX)
    15. curveOffset1 (整数, 可选, 默认由SwipeUtility决定): 曲线偏移量参数1。 (对应 CURVE_OFFSET1_INDEX)
    16. curveOffset2 (整数, 可选, 默认由SwipeUtility决定): 曲线偏移量参数2。 (对应 CURVE_OFFSET2_INDEX)
    17. tapFinger (整数, 可选, 默认 -1): 如果需要在滑动同时进行点击,指定点击的手指 ID (必须与 swipeFinger 不同)。 (对应 TAP_FINGER_INDEX)
    18. tapSequence (字符串, 可选, 默认 ""): 描述点击时序和位置的序列字符串 (仅当 tapFinger >= 0 时有效,具体格式取决于 SwipeUtility::execute_swipe_and_taps 的实现)。 (对应 TAP_SEQUENCE_INDEX)
  • 注意: 可选参数如果不想指定,可以使用一个占位符(例如,代码中可能是使用默认值或者特定值如 -1 表示不覆盖,具体取决于 getIntParam/getDoubleParam 的默认值设置)。在 URL 中,如果省略末尾的可选参数,则它们会取默认值。如果需要跳过中间的可选参数而指定后面的参数,必须提供占位符(例如,用 -10,取决于参数类型和默认值逻辑)。
  • 测试样例 (基本滑动): /hid?cmd=swipe:100,500,800,500
  • 测试样例 (百分比滑动, 50步): /hid?cmd=swipe:0.1,0.5,0.9,0.5,1,-1,-1,50 (跳过了 accelMode 和 accelFactor,指定了 isPercent 和 numSteps)
  • 测试样例 (滑动手指0,同时手指1点击): /hid?cmd=swipe:100,500,800,500,0,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,1,TapSequencePlaceholder (需要知道 tapSequence 的确切格式才能构造有效样例)

其他指令

reg

  • 指令名: reg
  • 功能: 用于Fishhid设备激活
  • 参数: code(字符串): 激活码
  • 测试样例: /hid?cmd=reg:激活码