使用前提
- 手机上安装了服务端APP
- 下载地址:点击下载
权限
安装之后需要开启四个权限
- 蓝牙权限:用来连接板子的蓝牙
- 通知权限:用于app的后台运行
- 电池优化:防止app被系统关闭
- usb权限:用于连接板子的otg
- otg模式开启的状态下,连接板子到手机,会提示允许APP访问板子吗?
- 勾选一律打开后点确定,然后插拔板子后会自动启动服务端,不会有弹窗
连接模式
- 蓝牙连接:通过蓝牙跟板子通信
- USB连接:通过OTG跟板子通信
蓝牙模式
- 先将手机蓝牙跟板子配对
- 在服务端选择板子蓝牙,然后点连接
- 连接成功后,可以点击按钮进行功能测试
USB模式
- 先将板子插上手机
- 如果弹出是否允许,勾选一律打开后点击确定
- 正常情况会显示设备已连接,点击按钮进行功能测试
充电管理
- 服务端带了充电管理功能
- 开启后,会定时检测当前手机电量
- 如果当前电量小于充电阈值,则向板子发送充电开启指令,然后一直充电直到大于停止阈值
- 如果当前电量大于停止阈值,则向板子发送关闭充电指令,然后一直等待电量小于充电阈值
服务端主页
用于简单的功能测试,点击,滑动, 按键
- 通过电脑访问服务端首页(需要在同一路由器下)
- 通过服务端所在的手机浏览器访问/
API常见用法
- 想从app界面回到桌面:发送home指令
- 想返回上一个界面:发送back指令
- 想点击某个坐标:发送tap指令
- 想给输入框发送一段文字:先发送setClipboard,然后发送key_paste指令
- 想查询当前分辨率:发送getResolution指令
- 想让设备开始充电:发送charge指令
- 想滑动屏幕:发送swipe指令
- 想按下键盘:发送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_select
或key_all
- 功能: 发送 Ctrl + A 组合键(全选)。
- 参数: 无
- 测试样例:
/hid?cmd=key_select
或/hid?cmd=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_print
- 功能: 截图键
- 参数: 无
- 测试样例:
/hid?cmd=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,相加即可=3key
(整数): 普通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
- 功能: 模拟滑动操作,可以包含复杂的参数控制滑动行为,并可选择性地让另一根手指在滑动过程中进行点击。
- 参数 (按顺序):
x1
(浮点数): 起点 X 坐标。y1
(浮点数): 起点 Y 坐标。x2
(浮点数): 终点 X 坐标。y2
(浮点数): 终点 Y 坐标。isPercent
(整数, 可选, 默认 0):1
表示坐标是百分比,0
表示像素。 (对应IS_PERCENT_INDEX
)accelMode
(整数, 可选, 默认由SwipeUtility
决定): 加速模式。 (对应ACCEL_MODE_INDEX
)accelFactor
(浮点数, 可选, 默认由SwipeUtility
决定): 加速/减速因子。 (对应ACCEL_FACTOR_INDEX
)numSteps
(整数, 可选, 默认由SwipeUtility
决定): 覆盖滑动步数。 (对应NUM_STEPS_INDEX
)initialSleep
(整数, 可选, 默认由SwipeUtility
决定): 初始按下后的等待时间 (ms)。 (对应INITIAL_SLEEP_INDEX
)finalSleep
(整数, 可选, 默认由SwipeUtility
决定): 抬起后的等待时间 (ms)。 (对应FINAL_SLEEP_INDEX
)stepSleepBase
(整数, 可选, 默认由SwipeUtility
决定): 每步之间的基础等待时间 (ms)。 (对应STEP_SLEEP_BASE_INDEX
)touchUpCount
(整数, 可选, 默认由SwipeUtility
决定): 滑动结束时发送touchUp
报告的数量。 (对应TOUCH_UP_COUNT_INDEX
)swipeFinger
(整数, 可选, 默认由SwipeUtility
决定): 执行滑动的手指 ID。 (对应SWIPE_FINGER_INDEX
)curveType
(整数, 可选, 默认由SwipeUtility
决定): 滑动曲线类型。 (对应CURVE_TYPE_INDEX
)curveOffset1
(整数, 可选, 默认由SwipeUtility
决定): 曲线偏移量参数1。 (对应CURVE_OFFSET1_INDEX
)curveOffset2
(整数, 可选, 默认由SwipeUtility
决定): 曲线偏移量参数2。 (对应CURVE_OFFSET2_INDEX
)tapFinger
(整数, 可选, 默认 -1): 如果需要在滑动同时进行点击,指定点击的手指 ID (必须与swipeFinger
不同)。 (对应TAP_FINGER_INDEX
)tapSequence
(字符串, 可选, 默认 ""): 描述点击时序和位置的序列字符串 (仅当tapFinger
>= 0 时有效,具体格式取决于SwipeUtility::execute_swipe_and_taps
的实现)。 (对应TAP_SEQUENCE_INDEX
)
- 注意: 可选参数如果不想指定,可以使用一个占位符(例如,代码中可能是使用默认值或者特定值如 -1 表示不覆盖,具体取决于
getIntParam
/getDoubleParam
的默认值设置)。在 URL 中,如果省略末尾的可选参数,则它们会取默认值。如果需要跳过中间的可选参数而指定后面的参数,必须提供占位符(例如,用-1
或0
,取决于参数类型和默认值逻辑)。 - 测试样例 (基本滑动):
/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:激活码