MAKCU API

KM 主机协议 — v3.9 · MAKCU 生态的完整指令参考。

传统 API (ASCII)

所有响应都会以km.开头,并以CRLF 结尾,随后是提示符>>>
下方 TX 示例中的最后提示符均表示为\r\n>>>
RX(主机 → 设备)
  • 命令格式:以 . 开头,以 ) 结尾。不再需要 km. 前缀。
  • 其他值(如 km\r\n 等)会被忽略。示例:.move(1,1,)
  • 可选二进制帧:DE AD <lenLE:2> <ASCII 或二进制负载>
TX(设备 → 主机)
  • 格式:km.payload\r\n>>> (为兼容性保留 km. 前缀)
  • Setter 指令会回显输入作为 ACK,除非通过echo(0) 关闭。
  • 部分流式响应在 km. 前缀后携带二进制km.mouse<8字节>km.buttons<1字节掩码>。行尾仍为 CRLF 与提示符。

鼠标

单个按键 (GET/SET)

命令
left([state]) | right([state]) | middle([state]) | side1([state]) | side2([state])
参数
state: 0=释放(发送帧),1=按下,2=静默释放(设为0但不发送帧)
响应 (GET)
km.left()
>>> 

返回锁定状态:0=无,1=原始,2=注入,3=两者。

响应 (SET)
km.left(1)
>>> 

回显 ACK(受 echo(0|1) 控制)。

点击调度 (SET)

命令
click(button[,count[,delay_ms]])
参数
button: 按键编号; count: 点击次数(可选); delay_ms: 延迟(可选,默认随机 35-75ms,内部计时)
响应 (SET)
km.click(1,3)
>>> 

回显 ACK。

turbo([button[,delay_ms]]) — GET/SET

命令
turbo([button[,delay_ms]])
描述

启用鼠标按键的连发模式。当按键被按住时,自动触发快速的按下/释放循环。多个按键可以同时启用连发,每个按键有独立的延迟设置。

参数
  • button: 1-5(鼠标按键:1=左键,2=右键,3=中键,4=侧键1,5=侧键2),0=禁用所有连发
  • delay_ms: 1-5000ms(0=禁用)。如果省略,使用随机 35-75ms。延迟是每次按下/释放切换之间的时间(例如,500ms = 按下 500ms,释放 500ms,重复)
  • 延迟会自动舍入到鼠标端点的 bInterval 以进行 USB 同步
  • turbo() - 仅返回活动的连发设置,如 (m1=200, m2=400)(仅显示已设置的,不显示零值)
  • turbo(button) - 使用随机 35-75ms 延迟设置连发(自动舍入到 bInterval)
  • turbo(button, delay_ms) - 使用指定延迟设置连发(自动舍入到 bInterval)
  • turbo(button, 0) - 禁用该按键的连发
  • turbo(0) - 禁用所有连发
示例
km.turbo(1, 500)
>>> 
km.turbo(2, 250)
>>> 
km.turbo(1)
>>> 
km.turbo()
>>> 

鼠标移动

move(dx,dy[,segments[,cx1,cy1[,cx2,cy2]]]) — SET

命令
move(dx,dy[,segments[,cx1,cy1[,cx2,cy2]]])
参数

dx,dy: 相对移动距离; segments: 分段数(可选,默认1,最大512); cx1,cy1,cx2,cy2: 三次贝塞尔控制点(可选)

响应 (SET)
km.move(10,-3)
>>> 
km.move(100,50,8,40,25,80,10)
>>> 

回显 ACK。

moveto(x,y[,segments[,cx1,cy1[,cx2,cy2]]]) — SET

命令
moveto(x,y[,segments[,cx1,cy1[,cx2,cy2]]])
描述

将指针移动到绝对位置。内部计算到达请求屏幕位置所需的 x,y 移动量。参数与 km.move() 对齐。

参数

x,y: 绝对坐标; segments: 分段数(可选,默认1,最大512); cx1,cy1,cx2,cy2: 三次贝塞尔控制点(可选)

响应 (SET)
km.moveto(640,360)
>>> 
km.moveto(100,50,8,40,25,80,10)
>>> 

回显 ACK。

wheel(delta) — SET

命令
wheel(delta)
描述

Windows 不允许在单个命令中执行多个滚轮步数。delta 值会被限制为 ±1 步(正数向上滚动,负数向下滚动)。大于 1 的值视为 1,小于 -1 的值视为 -1。

参数
delta: 滚轮步数(限制为 ±1)
响应 (SET)
km.wheel(-1)
>>> 
km.wheel(1)
>>> 

回显 ACK。注意:km.wheel(-5) 只会向下滚动 1 步,km.wheel(5) 只会向上滚动 1 步。

pan([steps]) — GET/SET

命令
pan([steps])
参数
steps: 水平滚动步数(SET); 无参数时查询待处理数量(GET)
响应
km.pan(3)
>>> 

tilt([steps]) — GET/SET

命令
tilt([steps])
参数
steps: 倾斜/z轴滚动步数(SET); 无参数时查询待处理数量(GET)
响应
km.tilt(2)
>>> 

getpos() — GET

命令
getpos()
响应 (GET)
km.getpos()
>>> km.getpos(123,456)
>>> 

返回当前指针位置 (x,y)。

silent(x,y) — SET

命令
silent(x,y)
参数
移动并在 (x,y) 处执行静默左键点击
响应 (SET)
km.silent(400,300)
>>> 

回显 ACK。

鼠标高级

mo(buttons,x,y,wheel,pan,tilt) — SET

命令
mo(buttons,x,y,wheel,pan,tilt)
描述

发送完整的原始鼠标帧(仅SET,不支持GET)。(0) 清除所有状态。x,y,wheel,pan,tilt 为一次性值;按键掩码镜像按键状态。

参数
buttons: 按键掩码; x,y: 移动增量; wheel,pan,tilt: 滚轮值
响应 (SET)
km.mo(1,10,5,0,0,0)
>>> 

lock_<target>(state) — GET/SET

命令格式
lock_<target>([state])
描述

锁定按钮或轴。目标(target)是命令名的一部分,不是参数。state: 1=锁定,0=解锁。调用时使用 `()` 可读取锁定状态。

目标

按键: ml/mm/mr/ms1/ms2

  • ml - 左键
  • mm - 中键
  • mr - 右键
  • ms1 - 侧键1
  • ms2 - 侧键2

轴: mx/my/mw/mx+/mx-/my+/my-/mw+/mw-

  • mx/my/mw - 完全锁定(阻止该轴的所有移动)
  • mx+/my+/mw+ - 正向锁定(仅阻止正向移动)
  • mx-/my-/mw- - 负向锁定(仅阻止负向移动)
响应 (GET)
km.lock_mx()
>>> km.lock_mx(1)
>>> 

返回值:1=已锁定,0=未锁定

响应 (SET)
km.lock_mx(1)
>>> 

锁定所有 X 轴移动

km.lock_mx+(1)
>>> 

仅锁定正向 X 移动(向右)

km.lock_mx-(1)
>>> 

仅锁定负向 X 移动(向左)

km.lock_my(1)
>>> 

锁定所有 Y 轴移动

km.lock_mw(1)
>>> 

锁定所有滚轮移动

km.lock_mw+(1)
>>> 

仅锁定正向滚轮移动(向上滚动)

km.lock_mw-(1)
>>> 

仅锁定负向滚轮移动(向下滚动)

km.lock_ml(1)
>>> 

锁定左键

catch_<target>(mode) — GET/SET

命令格式
catch_<target>([mode])
描述

在锁定的按钮上启用捕获。目标(target)是命令名的一部分,不是参数。注意:捕获仅适用于按钮,不适用于轴。需要先设置对应的 km.lock_<target>

目标
ml, mm, mr, ms1, ms2(仅按钮,不适用于轴)
参数
mode: 0=自动,1=手动; () 返回状态
响应 (GET)
km.catch_ml()
>>> 

使用 `()` 查询捕获状态

响应 (SET)
km.catch_ml(1)
>>> 

为左键启用手动捕获

km.catch_ml(0)
>>> 

为左键启用自动捕获

鼠标重映射(物理)

以下命令仅影响物理输入,注入不受影响。这意味着您可以重映射物理鼠标按键和轴,而通过 API 注入的输入将保持不变。

remap_button([src,dst]) — GET/SET

命令
remap_button([src,dst])
描述

重映射鼠标按键(仅物理)。自动清除冲突的映射;可以映射两个方向(交换)。

参数
  • () - 仅显示活动的映射,如 (left:right,right:left)
  • (0) - 重置所有按键映射
  • (src,dst) - 映射按键 src→dst(1=左键,2=右键,3=中键,4=侧键1,5=侧键2)
  • (src,0) - 清除 src 按键的映射
示例
km.remap_button()
>>> 
km.remap_button(1,2)
>>> 
km.remap_button(0)
>>> 

remap_axis([inv_x,inv_y,swap]) — GET/SET

命令
remap_axis([inv_x,inv_y,swap])
描述

重映射鼠标轴(仅物理)。一次设置所有三个标志。

参数
  • () - 显示当前设置,如 (invert_x=0,invert_y=1,swap_xy=0)
  • (0) - 重置所有轴映射
  • (inv_x,inv_y,swap) - 设置所有三个标志(0 或 1)
示例
km.remap_axis()
>>> 
km.remap_axis(0,1,0)
>>> 
km.remap_axis(0)
>>> 

invert_x([state]) — GET/SET

命令
invert_x([state])
描述
反转 X 轴(仅物理)
参数
() 查询; (0) 禁用; (1) 启用
响应
km.invert_x(1)
>>> 

invert_y([state]) — GET/SET

命令
invert_y([state])
描述
反转 Y 轴(仅物理)
参数
() 查询; (0) 禁用; (1) 启用
响应
km.invert_y(1)
>>> 

swap_xy([state]) — GET/SET

命令
swap_xy([state])
描述
交换 X 和 Y 轴(仅物理)
参数
() 查询; (0) 禁用; (1) 启用
响应
km.swap_xy(1)
>>> 

键盘命令

键盘命令支持两种格式:数字 HID 码(如 4)或字符串名称(如 'a'、"enter")。 支持的按键名称包括字母、数字、功能键、导航键和修饰键。详见规范。

down(key) — SET

命令
down(key)
参数
key: HID码或字符串('a'、"shift")
响应 (SET)
km.down('shift')
>>> 

up(key) — SET

命令
up(key)
参数
key: HID码或字符串('a'、"ctrl")
响应 (SET)
km.up("ctrl")
>>> 

press(key[,hold_ms[,rand_ms]]) — SET

命令
press(key[,hold_ms[,rand_ms]])
参数
  • key: HID码(0-255)或引用的按键名称
  • hold_ms: 按住时间(可选)。如果省略,使用随机 35-75ms(值会被记录日志)
  • rand_ms: 可选随机范围,添加到 hold_ms(0 = 无随机化)
  • 注意:持续时间会自动舍入到键盘的 bInterval 以进行 USB 同步
示例
km.press('a')
>>> 

使用随机 35-75ms 按住时间(已记录)

km.press('d', 50)
>>> 

精确按住 50ms

km.press('d', 50, 10)
>>> 

50ms 基础 + 随机 0-10ms

string(text) — SET

命令
string(text)
描述

使用自动计时的队列按键输入输入 ASCII 字符串。自动处理大写字母和符号的 Shift。使用定时队列系统(无定时器插槽限制)。

参数
  • text: 要输入的 ASCII 字符串(最多 256 个字符)
  • 每个字符使用随机 35-75ms 按住时间(内部计时,不记录日志)
  • 字符间延迟:字符之间 10ms
示例
km.string("Hello")
>>> 
km.string("Test123!")
>>> 
响应 (SET)
km.string("hello")
>>> 

init() — SET

命令
init()
描述
清除键盘状态并释放按下的按键
响应 (SET)
km.init()
>>> 

isdown(key) — GET

命令
isdown(key)
参数
key: HID码或字符串('a'、"shift")
响应 (GET)
km.isdown("ctrl")
>>> km.isdown(1)
>>> 

如果按键按下返回 1,释放返回 0。

disable([key1,key2,...] | [key,mode]) — GET/SET

命令
disable([key1,key2,...] | [key,mode])
描述

禁用/启用键盘按键以阻止它们被发送到主机。

参数
  • () - 列出所有当前禁用的按键,格式为 (a,c,f,)(显示按键名称(如果可用),否则显示 HID 码)
  • (key1,key2,...) - 一次禁用多个按键。按键可以是 HID 码或引用的按键名称(例如,'a''f1''ctrl'
  • (key,mode) - 启用或禁用单个按键。mode1=禁用,0=启用
示例
km.disable()
>>> km.disable(a,c,f,)
>>> 
km.disable('a','c','f')
>>> 
km.disable('f1','alt','win')
>>> 
km.disable('a', 0)
>>> 
km.disable('a', 1)
>>> 
km.disable(4,6,9)
>>> 

mask(key[,mode]) — GET/SET

命令
mask(key[,mode])
参数
key: HID码或字符串; mode: 0=关闭,1=开启
响应
km.mask('a',1)
>>> 

remap(source,target) — GET/SET

命令
remap(source,target)
参数
source,target: 均可为HID码或字符串; target=0 清除映射(透传)
示例
km.remap('a','b')
>>> 
km.remap('a',0)
>>> 

完整键盘按键参考

单字符字母区分大小写'a' 输入小写,'A' 输入大写)。多字符特殊键不区分大小写'f1''F1''ctrl''CTRL' 都相同)。
命令
press(key)
描述

键盘按键参考表。所有按键支持 HID 码或字符串名称。单字符字母区分大小写(小写输入小写,大写自动使用 Shift 输入大写)。多字符特殊键不区分大小写。

字母(HID 4-29)
按键名称HID正常输出Shift 输出
'a'4aA
'b'5bB
'c'6cC
'd'7dD
'e'8eE
'f'9fF
'g'10gG
'h'11hH
'i'12iI
'j'13jJ
'k'14kK
'l'15lL
'm'16mM
'n'17nN
'o'18oO
'p'19pP
'q'20qQ
'r'21rR
's'22sS
't'23tT
'u'24uU
'v'25vV
'w'26wW
'x'27xX
'y'28yY
'z'29zZ
响应
km.press('a')      # types "a" (HID 4)
km.press('A')      # types "A" (HID 4 + Shift)
数字和 Shift 变体(HID 30-39)
按键名称HID正常输出Shift 输出
'1'301!
'2'312@
'3'323#
'4'334$
'5'345%
'6'356^
'7'367&
'8'378*
'9'389(
'0'390)
响应
km.press('1')      # types "1" (HID 30)
km.down('shift')
km.press('1')      # types "!" (HID 30 + Shift)
km.up('shift')
控制键(HID 40-44)
按键名称HID正常输出Shift 输出
'enter', 'return'40Enter-
'escape', 'esc'41Escape-
'backspace', 'back'42Backspace-
'tab'43Tab-
'space', 'spacebar'44 -
响应
km.press('enter')  # Enter key (HID 40)
符号和 Shift 变体(HID 45-57)
按键名称HID正常输出Shift 输出
'minus', 'dash', 'hyphen'45-_
'equals', 'equal'46=+
'leftbracket', 'lbracket', 'openbracket'47[{
'rightbracket', 'rbracket', 'closebracket'48]}
'backslash', 'bslash'49\|
'nonus_hash'50#-
'semicolon', 'semi'51;:
'quote', 'apostrophe', 'singlequote'52'"
'grave', 'backtick', 'tilde'53`~
'comma'54,<
'period', 'dot'55.>
'slash', 'forwardslash', 'fslash'56/?
'capslock', 'caps'57Caps Lock-
响应
km.press('minus')  # types "-" (HID 45)
km.down('shift')
km.press('minus')  # types "_" (HID 45 + Shift)
km.up('shift')
功能键(HID 58-69)
按键名称HID正常输出Shift 输出
'f1'58F1-
'f2'59F2-
'f3'60F3-
'f4'61F4-
'f5'62F5-
'f6'63F6-
'f7'64F7-
'f8'65F8-
'f9'66F9-
'f10'67F10-
'f11'68F11-
'f12'69F12-
响应
km.press('f1')     # F1 key (HID 58)
系统键(HID 70-83)
按键名称HID正常输出Shift 输出
'printscreen', 'prtsc', 'print'70Print Screen-
'scrolllock', 'scroll'71Scroll Lock-
'pause', 'break'72Pause/Break-
'insert', 'ins'73Insert-
'home'74Home-
'pageup', 'pgup'75Page Up-
'delete', 'del'76Delete-
'end'77End-
'pagedown', 'pgdown', 'pgdn'78Page Down-
'right', 'rightarrow'79Right Arrow-
'left', 'leftarrow'80Left Arrow-
'down', 'downarrow'81Down Arrow-
'up', 'uparrow'82Up Arrow-
'numlock', 'num'83Num Lock-
响应
km.press('home')   # Home key (HID 74)
数字键盘(HID 84-99)
按键名称HID正常输出Shift 输出
'kpdivide', 'npdivide'84/-
'kpmultiply', 'npmultiply'85*-
'kpminus', 'npminus'86--
'kpplus', 'npplus'87+-
'kpenter', 'npenter'88Enter-
'kp1', 'np1'891-
'kp2', 'np2'902-
'kp3', 'np3'913-
'kp4', 'np4'924-
'kp5', 'np5'935-
'kp6', 'np6'946-
'kp7', 'np7'957-
'kp8', 'np8'968-
'kp9', 'np9'979-
'kp0', 'np0'980-
'kpperiod', 'kpdot', 'npperiod', 'npdot'99.-
响应
km.press('kp1')    # Numpad 1 (HID 89)
修饰键(HID 224-231)
按键名称(别名)HID正常输出Shift 输出
'leftctrl', 'lctrl', 'leftcontrol', 'lcontrol', 'ctrl', 'control'224Left Ctrl-
'leftshift', 'lshift', 'shift'225Left Shift-
'leftalt', 'lalt', 'alt'226Left Alt-
'leftgui', 'lgui', 'leftwin', 'lwin', 'gui', 'win', 'windows', 'super', 'meta', 'cmd', 'command'227Left GUI-
'rightctrl', 'rctrl', 'rightcontrol', 'rcontrol'228Right Ctrl-
'rightshift', 'rshift'229Right Shift-
'rightalt', 'ralt'230Right Alt-
'rightgui', 'rgui', 'rightwin', 'rwin', 'rightwindows'231Right GUI-

注意:通用名称('ctrl''shift''alt''gui')默认为左侧变体

响应
km.down('ctrl')    # Left Ctrl (HID 224)
km.up('ctrl')

流式

keyboard([mode[,period]]) — GET/SET

命令
keyboard([mode[,period]])
描述

流式传输键盘按键,使用人类可读的名称。模式 1=raw(物理输入),2=constructed frame(重映射/屏蔽后);周期限制在 1-1000 帧。

参数
mode: 1=raw(原始),2=constructed frame(构造帧); period: 1-1000 帧; () 查询; (0) 禁用
输出格式

输出格式:keyboard(raw,shift,'h')keyboard(constructed,ctrl,shift,'a') - 修饰键和按键显示为名称(如 'shift', 'ctrl', 'h', 'a')而不是 HID 数字。

响应 (GET)
km.keyboard(2,50)
>>> 
响应 (SET)
km.keyboard(1,100)
>>> 

buttons([mode[,period_ms]]) — GET/SET

命令
buttons([mode[,period_ms]])
参数
1=raw(原始),2=constructed frame(构造帧); time_ms: 1-1000ms; (0) 或 (0,0) 重置
响应 (GET)
km.buttons(2,25)
>>> 
响应 (SET)
km.buttons(1,10)
>>> 

启用后,设备会发送 1 字节掩码:

km.buttons<mask_u8>
>>> 

axis([mode[,period_ms]]) — GET/SET

命令
axis([mode[,period_ms]])
参数
1=raw(原始),2=constructed frame(构造帧); period_ms: 1-1000ms; (0) 或 (0,0) 重置
输出格式

输出格式:raw(x,y,w)mut(x,y,w),其中 w 是滚轮增量。

响应 (GET)
km.axis(1,25)
>>> 
响应 (SET)
km.axis(2,10)
>>> 

mouse([mode[,period_ms]]) — GET/SET

命令
mouse([mode[,period_ms]])
模式
1=raw(原始),2=constructed frame(构造帧); period_ms: 1-1000ms; () 查询; (0) 或 (0,0) 重置
响应 (GET)
km.mouse(2,25)
>>> 
响应 (SET)
km.mouse(1,10)
>>> 
流格式

设备发送 8 字节二进制帧(x,y 为 int16):

km.mouse<8 bytes>
>>> 

其他

help() — GET

命令
help()
描述
显示命令列表
响应 (GET)
km.help()
>>> 

info() — GET

命令
info()
描述
报告系统信息:MAC 地址、MCU 温度(可用时)、RAM 统计、固件信息、CPU 和运行时间
响应 (GET)
km.info()
>>> 

version() — GET

命令
version()
描述
报告固件版本
响应 (GET)
km.version()
>>> 

device() — GET

命令
device()
描述
报告使用较多的设备:(keyboard)、(mouse) 或 (none)
响应 (GET)
km.device()
>>> 

fault() — GET

命令
fault()
描述

返回存储的解析故障信息,包括 ESP32 MAC 地址、失败的端点地址、接口编号、失败原因和原始 HID 描述符字节。用于调试解析失败的设备。

响应 (GET)
km.fault()
>>> 

reboot() — SET

命令
reboot()
描述
重启设备(响应后重启)
响应 (SET)
km.reboot()
>>> 

serial([text]) — GET/SET

命令
serial([text])
描述

用于更改连接到 MAKCU 的鼠标或键盘的序列号。此更改是持久的,即使在未来的固件更新后也会保留。注意:MAKCU 不允许为不包含序列号的设备更改序列号。

参数
() 查询; (0) 重置; (text) 设置清理后的序列号
响应 (GET)
km.serial()
>>> km.serial("MAKCU001")
>>> 

返回当前序列号。

响应 (SET)
km.serial("MAKCU001")
>>> 
km.serial(0)
>>> 

回显 ACK。更改在固件更新后仍然保留。

log([level]) — GET/SET

命令
log([level])
参数
level: 0-5; 空参数时查询当前级别。设置会持续 3 个电源周期,然后自动禁用
响应
km.log(3)
>>> 

echo([enable]) — GET/SET

命令
echo([enable])
参数
enable: 1=开启,0=关闭; 空参数时查询
响应
km.echo(1)
>>> 

baud([rate]) — GET/SET

命令
baud([rate])
参数
rate: 115200 – 4000000; 0=重置为默认115200; 空参数时查询
响应 (GET)
km.baud(115200)
>>> 
响应 (SET)
km.baud(921600)
>>> 

立即生效;主机需以新波特率重新打开串口。

bypass([mode]) — GET/SET

命令
bypass([mode])
描述

阻止鼠标端点发送到 USB 1,所有其他端点将正常通过。可在未连接 USB 设备的情况下工作。

参数
  • () - 查询当前状态
  • (0) - 关闭(恢复 USB 写入,禁用遥测)
  • (1) - 鼠标绕过(启用 km.mouse(1,1) 并禁用 USB 写入)
  • (2) - 键盘绕过(启用 km.keyboard(1,1) 并禁用 USB 写入)
响应 (GET)
km.bypass()
>>> km.bypass(0)
>>> 

如果未检测到设备,会警告 (no mouse)(no keyboard)

响应 (SET)
km.bypass(1)
>>> 
km.bypass(2)
>>> 
km.bypass(0)
>>> 

hs([enable]) — GET/SET

命令
hs([enable])
描述
USB 高速兼容性(用于可能不正确报告轮询率的设备)*持久化设置
参数
() 查询; (1/0) 启用/禁用
响应
km.hs(1)
>>> 

led([target[,mode[,times,delay_ms]]]) — GET/SET

命令
led([target[,mode[,times,delay_ms]]])
描述

控制设备和主机两侧的 LED 和 RGB 状态。支持查询、控制和闪烁功能。

查询
  • led() - 查询设备 LED 状态(向后兼容)
  • led(1) - 查询设备 LED 状态
  • led(2) - 查询主机 LED 状态(通过 UART)
  • 返回:(device,off)(device,on)(device,slow_blink)(device,fast_blink)(host,off)(host,on)
控制
  • led(0) - 关闭设备 LED(向后兼容)
  • led(1) - 打开设备 LED(向后兼容,但与查询冲突 - 使用 led(1,1) 进行显式控制)
  • led(1, 0) - 关闭设备 LED
  • led(1, 1) - 打开设备 LED
  • led(2, 0) - 关闭主机 LED(通过 UART)
  • led(2, 1) - 打开主机 LED(通过 UART)
  • Target: 1 = 设备 LED,2 = 主机 LED(USB 主机侧,通过 UART 控制)
  • Mode: 0 = 关闭,1 = 打开
闪烁
  • led(1, times, delay_ms) - 闪烁设备 LED(例如,led(1, 3, 200) = 3 次闪烁,每次 200ms)
  • led(2, times, delay_ms) - 闪烁主机 LED(例如,led(2, 5, 100) = 5 次闪烁,每次 100ms)
  • Flash parameters: times = 闪烁次数(默认 1),delay_ms = 闪烁之间的延迟(毫秒)(默认 100ms,最大 5000ms)
示例
km.led()
>>> km.led(device,on)
>>> 
km.led(2)
>>> km.led(host,off)
>>> 
km.led(1, 0)
>>> 
km.led(2, 1)
>>> 
km.led(1, 3, 200)
>>> 
km.led(2, 5, 100)
>>> 

release([timer_ms]) — GET/SET

命令
release([timer_ms])
描述

自动释放监控系统。持续监控独立的锁定、按键和键状态。当计时器到期时,仅释放仍处于活动状态的相应值(不是全部)。该设置会持久保存到存储中,并在启动/引导时自动启用。`()` 获取状态(0=禁用,否则为时间 ms);`(timer_ms)` 设置计时器 500-300000ms(5 分钟),(0) 禁用。

参数
() 获取状态; (timer_ms) 设置计时器 500-300000ms,(0) 禁用
响应 (GET)
km.release()
>>> 
响应 (SET)
km.release(5000)
>>> 
km.release(0)
>>> 

screen([W,H]) — GET/SET

命令
screen([width,height])
参数
() 查询; (width,height) 设置虚拟屏幕尺寸
响应 (GET)
km.screen(1920,1080)
>>> 
响应 (SET)
km.screen(2560,1440)
>>> 

波特率变更(传统)

用途
通过二进制帧设置 UART 波特率(无 ASCII 指令)。
帧格式
DE AD <lenLE:2> <cmd:0xA5> <baud_rate:LE32>
示例 (115200)
DE AD 05 00 A5 00 C2 01 00

解析:DE AD05 00(长度=5)| A5(命令)|00 C2 01 00(115200 小端)

V2 API (二进制)

所有二进制命令使用相同的帧结构。帧格式在下方说明,后续命令示例仅显示命令字节和负载数据。
RX(主机 → 设备)
  • 帧格式:[0x50] [CMD] [LEN_LO] [LEN_HI] [PAYLOAD...]
  • 0x50 - 帧起始字节(固定)
  • CMD - 命令字节(0x01-0xFF)
  • LEN_LO / LEN_HI - 负载长度(小端序,16位)
  • PAYLOAD - 命令特定数据(可变长度)
TX(设备 → 主机)
  • 设置命令 (SET):返回 [0x50] [CMD] [LEN_LO] [LEN_HI] [status:u8],其中 0x00 表示成功 (OK),0x01 表示错误 (ERR)
  • 查询命令 (GET):返回 [0x50] [CMD] [LEN_LO] [LEN_HI] [PAYLOAD...],包含原始值字节或结构化数据
  • 流式命令:返回原始 HID 帧字节(无文本格式),格式为 [0x50] [CMD] [LEN_LO] [LEN_HI] [PAYLOAD...]
  • 数据格式:多字节值使用小端序(little-endian)。示例:查询波特率(命令 0xB1,无负载)返回 [0x50] [0xB1] [0x04] [0x00] [0x00] [0xC2] [0x01] [0x00],其中 0x00C20100 = 115200(小端序)
  • 在后续命令示例中,我们仅显示:[CMD] [PAYLOAD...]

鼠标

单个按键 (GET/SET)

命令
left(0x08) | right(0x11) | middle(0x0A) | side1(0x12) | side2(0x13)
描述
控制单个鼠标按键 - 状态:0=释放 1=按下 2=静默释放;查询返回:0=无 1=原始 2=注入 3=两者
参数
() 查询; (state) 设置状态。state: 0=释放(发送帧),1=按下,2=静默释放(设为0但不发送帧)
响应 (GET)
[0x08]
Response: [0x08] [state:u8]

返回锁定状态:0=无,1=原始,2=注入,3=两者。

响应 (SET)
[0x08] [state:u8]
Response: [0x08] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

点击调度 (SET)

命令
[0x04]
描述
调度点击 - 按钮 1-5,次数 1-255,延迟 ms(0=随机 35-75ms)
参数
button: 1-5(左、右、中、侧1、侧2);count: 1-255;delay_ms: 延迟毫秒,0=随机 35-75ms
响应 (SET)
[0x04] [button:u8] [count:u8] [delay_ms:u8]
Response: [0x04] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

turbo() (GET/SET)

命令
[0x17]
描述
鼠标按键 1-5 的连发 - 延迟:1-5000ms 或 (button) 随机 35-75ms - (0) 禁用所有
参数
() 返回活动设置; (button) 随机延迟; (button,delay_ms) 设置延迟;(0) 禁用所有
响应 (GET)
[0x17]
Response: [0x17] [btn1-5_delay:u16×5]

返回 10 字节:按键 1-5 的 5 个延迟(每个 u16)。

响应 (SET)
[0x17] [button:u8] [delay_ms:u16]
Response: [0x17] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

鼠标移动

move(dx,dy[,segments[,cx1,cy1]]) — SET (0x0D)

命令
[0x0D]
描述
相对移动并带贝塞尔曲线
参数
dx,dy: 相对移动距离(int16);segments: 贝塞尔分段数;cx1,cy1: 控制点1(int8)
响应 (SET)
[0x0D] [x:i16] [y:i16] [segments:u8] [cx1:i8] [cy1:i8]
Response: [0x0D] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

moveto(x,y[,segments[,cx1,cy1[,cx2,cy2]]]) — SET (0x0E)

命令
[0x0E]
描述
绝对移动并带贝塞尔曲线
参数
x,y: 绝对位置(int16);segments: 贝塞尔分段数;cx1,cy1,cx2,cy2: 控制点(int16)
响应 (SET)
[0x0E] [x:i16] [y:i16] [segments:u8] [cx1:i16] [cy1:i16] [cx2:i16] [cy2:i16]
Response: [0x0E] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

wheel(delta) — SET (0x18)

命令
[0x18]
描述
滚轮步数
参数
delta: 滚轮增量(int8,正值向上,负值向下)
响应 (SET)
[0x18] [delta:i8]
Response: [0x18] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

pan([steps]) — GET/SET (0x0F)

命令
[0x0F]
描述
水平滚动/平移步数
参数
() 查询待处理的平移;(steps) 设置平移步数(int8)
响应 (GET)
[0x0F]
Response: [0x0F] [pending:i8]
响应 (SET)
[0x0F] [steps:i8]
Response: [0x0F] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

swap_xy([enable]) — GET/SET (0x15)

命令
[0x15]
描述
交换 X 和 Y 轴(仅物理) - 0=禁用,1=启用
参数
() 查询; (enable) 设置。enable: 0=禁用,1=启用
响应 (GET)
[0x15]
Response: [0x15] [enabled:u8]

返回 0=禁用,1=启用。

响应 (SET)
[0x15] [enable:u8]
Response: [0x15] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

tilt([steps]) — GET/SET (0x16)

命令
[0x16]
描述
倾斜/z轴步数
参数
() 查询待处理的倾斜;(steps) 设置倾斜步数(int8)
响应 (GET)
[0x16]
Response: [0x16] [pending:i8]
响应 (SET)
[0x16] [steps:i8]
Response: [0x16] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

silent(x,y) — SET (0x14)

命令
[0x14]
描述
移动然后静默左键点击
参数
x,y: 移动到的位置(int16)
响应 (SET)
[0x14] [x:i16] [y:i16]
Response: [0x14] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

鼠标高级

catch_<target>([mode]) — GET/SET (0x03)

命令
[0x03]
描述
捕获模式 - 0=关闭,1=注入,2=锁定
参数
() 查询; (mode) 设置模式。mode: 0=关闭,1=注入,2=锁定
响应 (GET)
[0x03]
Response: [0x03] [mode:u8]
响应 (SET)
[0x03] [mode:u8]
Response: [0x03] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

getpos() — GET (0x05)

命令
[0x05]
描述
获取当前鼠标位置
参数
无参数
响应 (GET)
[0x05]
Response: [0x05] [x:i16] [y:i16]

返回当前指针位置(int16 坐标)。

invert_x([enable]) — GET/SET (0x06)

命令
[0x06]
描述
反转 X 轴(仅物理) - 0=禁用,1=启用
参数
() 查询; (enable) 设置。enable: 0=禁用,1=启用
响应 (GET)
[0x06]
Response: [0x06] [enabled:u8]

返回 0=禁用,1=启用。

响应 (SET)
[0x06] [enable:u8]
Response: [0x06] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

invert_y([enable]) — GET/SET (0x07)

命令
[0x07]
描述
反转 Y 轴(仅物理) - 0=禁用,1=启用
参数
() 查询; (enable) 设置。enable: 0=禁用,1=启用
响应 (GET)
[0x07]
Response: [0x07] [enabled:u8]

返回 0=禁用,1=启用。

响应 (SET)
[0x07] [enable:u8]
Response: [0x07] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

lock_<target>([state]) — GET/SET (0x09)

命令
[0x09]
描述
锁定按钮或轴 - state: 1=锁定,0=解锁;target 是命令的一部分(mx, my, mw, mx+, mx-, my+, my-, mw+, mw-, ml, mm, mr, ms1, ms2)
参数
() 查询; (state) 设置状态。state: 1=锁定,0=解锁
目标
轴:mx, my, mw(全部);mx+, mx-, my+, my-, mw+, mw-(方向);按钮:ml, mm, mr, ms1, ms2
响应 (GET)
[0x09]
Response: [0x09] [locked:u8]

返回 1=锁定,0=解锁。

响应 (SET)
[0x09] [state:u8]
Response: [0x09] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

mo(buttons,x,y,wheel,pan,tilt) — SET (0x0B)

命令
[0x0B]
描述
发送原始鼠标帧 - 按键掩码镜像状态,轴为一次性
参数
buttons: 按键掩码(u8);x,y: 位置(i16);wheel,pan,tilt: 轴值(i8)
响应 (SET)
[0x0B] [buttons:u8] [x:i16] [y:i16] [wheel:i8] [pan:i8] [tilt:i8]
Response: [0x0B] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

remap_button([src,dst]) — GET/SET (0x10)

命令
[0x10]
描述
重映射鼠标按键(1-5:左、右、中、侧1、侧2);dst=0 清除 src
参数
() 显示映射; (0) 重置所有; (src,dst) 映射按键 src→dst; (src,0) 清除 src
响应 (GET)
[0x10]
Response: [0x10] [map1-5:u8×2×5]

返回 10 字节:5 个映射,每个 2 字节(src,dst)。

响应 (SET)
[0x10] [src:u8] [dst:u8]
Response: [0x10] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

remap_axis([inv_x,inv_y,swap]) — GET/SET (0x19)

命令
[0x19]
描述
重映射鼠标轴(仅物理) - 原子性设置所有三个标志:inv_x, inv_y, swap(每个 0=禁用,1=启用)
参数
  • () - 查询当前设置
  • (0) - 重置所有轴映射
  • (inv_x,inv_y,swap) - 设置所有三个标志(每个 0 或 1)
响应 (GET)
[0x19]
Response: [0x19] [inv_x:u8] [inv_y:u8] [swap:u8]

返回 3 字节:inv_x, inv_y, swap(每个 0=禁用,1=启用)。

响应 (SET)
[0x19] [inv_x:u8] [inv_y:u8] [swap:u8]
Response: [0x19] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。原子性设置所有三个标志。

[0x19] [0x00]
Response: [0x19] [status:u8]

重置所有轴映射(将所有标志设为 0)。

键盘

键盘命令使用数字 HID 码(u8)。支持的 HID 码范围:0x00-0xFF。详见完整按键参考。

disable([key1,key2,...] | [key,mode]) — GET/SET (0xA1)

命令
[0xA1]
描述
禁用按键 - key: HID 码 - mode: 0=启用 1=禁用 - 可禁用多个按键
参数
() 列出禁用的按键; (key1,key2,...) 禁用多个按键; (key,mode) 启用/禁用单个按键
响应 (GET)
[0xA1]
Response: [0xA1] [disabled_keys:u8×N]

返回禁用的 HID 码列表。

响应 (SET)
[0xA1] [key1:u8]...[keyN:u8]
Response: [0xA1] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

down(key) — SET (0xA2)

命令
[0xA2]
描述
按下按键
参数
key: HID 码(u8)
响应 (SET)
[0xA2] [key:u8]
Response: [0xA2] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

init() — SET (0xA3)

命令
[0xA3]
描述
清除键盘状态
参数
无参数
响应 (SET)
[0xA3]
Response: [0xA3] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

isdown(key) — GET (0xA4)

命令
[0xA4]
描述
查询按键是否按下
参数
key: HID 码(u8)
响应 (GET)
[0xA4] [key:u8]
Response: [0xA4] [is_down:u8]

返回 0=释放,1=按下。

mask(key[,mode]) — SET (0xA6)

命令
[0xA6]
描述
掩码按键 - key: HID 码 - mode: 0=关闭 1=开启
参数
key: HID 码(u8);mode: 0=关闭掩码,1=开启掩码
响应 (SET)
[0xA6] [key:u8] [mode:u8]
Response: [0xA6] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

press(key[,hold_ms[,rand_ms]]) — SET (0xA7)

命令
[0xA7]
描述
点击按键 - key: HID 码 - hold_ms: 省略时随机 35-85ms - rand_ms 可选
参数
key: HID 码(u8);hold_ms: 按住时间(u8,0=随机 35-85ms);rand_ms: 随机化(u8,可选)
响应 (SET)
[0xA7] [key:u8] [hold_ms:u8] [rand_ms:u8]
Response: [0xA7] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

remap(source,target) — SET (0xA8)

命令
[0xA8]
描述
重映射键码 - 两者:HID 码;target=0 清除重映射(直通)
参数
source: 源 HID 码(u8);target: 目标 HID 码(u8),0=清除重映射
响应 (SET)
[0xA8] [source:u8] [target:u8]
Response: [0xA8] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

string(text) — SET (0xA9)

命令
[0xA9]
描述
输入 ASCII 字符串 - 最大 256 字符
参数
text: ASCII 字节数组(u8×N,最大 256 字节)
响应 (SET)
[0xA9] [text:u8×N]
Response: [0xA9] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

up(key) — SET (0xAA)

命令
[0xAA]
描述
释放按键
参数
key: HID 码(u8)
响应 (SET)
[0xAA] [key:u8]
Response: [0xAA] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

流式

buttons([mode[,period_ms]]) — GET/SET (0x02)

命令
[0x02]
描述
流式输出按键状态 - 模式:1=原始 2=修改;周期:1-1000ms(四舍五入到 bInterval);需要波特率 >= 1M;仅在帧变化时输出
参数
() 查询; (mode) 设置模式; (mode,period_ms) 设置模式和周期。mode: 1=原始 2=修改;period: 1-1000ms
响应 (GET)
[0x02]
Response: [0x02] [mode:u8] [period:u8]

返回当前流式模式和周期。

响应 (SET)
[0x02] [mode:u8] [period:u8]
Response: [0x02] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

流格式

设备在按键变化时发送 2 字节二进制帧:

[0x02] [buttons_lo:u8] [buttons_hi:u8]

按键掩码:位 0=左键,1=右键,2=中键,3=侧键1,4=侧键2

axis([mode[,period_ms]]) — GET/SET (0x01)

命令
[0x01]
描述
流式输出 x/y/滚轮轴增量 - 模式:1=原始 2=修改;周期:1-1000ms(四舍五入到 bInterval);需要波特率 >= 1M;仅在帧变化时输出
参数
() 查询; (mode) 设置模式; (mode,period_ms) 设置模式和周期。mode: 1=原始 2=修改;period: 1-1000ms
响应 (GET)
[0x01]
Response: [0x01] [mode:u8] [period:u8]
响应 (SET)
[0x01] [mode:u8] [period:u8]
Response: [0x01] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

流格式

设备在轴变化时发送 6 字节二进制帧:

[0x01] [dx:i16] [dy:i16] [wheel:i8]

mouse([mode[,period_ms]]) — GET/SET (0x0C)

命令
[0x0C]
描述
流式输出完整鼠标数据 - 模式:1=原始 2=修改;周期:1-1000ms(四舍五入到 bInterval);需要波特率 >= 1M;仅在帧变化时输出
参数
() 查询; (mode) 设置模式; (mode,period_ms) 设置模式和周期。mode: 1=原始 2=修改;period: 1-1000ms
响应 (GET)
[0x0C]
Response: [0x0C] [mode:u8] [period:u8]
响应 (SET)
[0x0C] [mode:u8] [period:u8]
Response: [0x0C] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

流格式

设备在鼠标数据变化时发送 8 字节二进制帧:

[0x0C] [buttons:u8] [dx:i16] [dy:i16] [wheel:i8] [pan:i8] [tilt:i8]

keyboard([mode[,period_ms]]) — GET/SET (0xA5)

命令
[0xA5]
描述
流式输出键盘 - 模式:1=原始 2=修改;周期:1-1000ms(四舍五入到 bInterval);需要波特率 >= 1M;仅在帧变化时输出
参数
() 查询; (mode) 设置模式; (mode,period_ms) 设置模式和周期。mode: 1=原始 2=修改;period: 1-1000ms
响应 (GET)
[0xA5]
Response: [0xA5] [mode:u8] [period:u8]
响应 (SET)
[0xA5] [mode:u8] [period:u8]
Response: [0xA5] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

流格式

设备在键盘数据变化时发送 15 字节二进制帧:

[0xA5] [modifiers:u8] [keys:u8×14]

修饰符字节:ctrl、shift、alt、gui 等的位标志。按键数组:最多 14 个 HID 码。

其他

baud([rate]) — GET/SET (0xB1)

命令
[0xB1]
描述
设置/获取 UART0 波特率 - 0=默认 (115200)
参数
() 查询; (rate) 设置波特率(u32),0=默认 115200,范围:115200-4000000
响应 (GET)
[0xB1]
Response: [0xB1] [rate:u32]

返回当前波特率(uint32,小端序)。

响应 (SET)
[0xB1] [rate:u32]
Response: [0xB1] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。更改是持久的。

bypass([mode]) — GET/SET (0xB2)

命令
[0xB2]
描述
旁路模式 - 0=关闭,1=鼠标,2=键盘;禁用 USB 写入,将原始数据流式传输到 COM2
参数
() 查询; (mode) 设置模式。mode: 0=关闭,1=鼠标,2=键盘;需要波特率 >= 1M
响应 (GET)
[0xB2]
Response: [0xB2] [mode:u8]
响应 (SET)
[0xB2] [mode:u8]
Response: [0xB2] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

echo([enable]) — GET/SET (0xB4)

命令
[0xB4]
描述
切换 UART 回显
参数
() 查询; (enable) 设置回显。enable: 0=禁用,1=启用
响应 (GET)
[0xB4]
Response: [0xB4] [enabled:u8]
响应 (SET)
[0xB4] [enable:u8]
Response: [0xB4] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。当回显禁用时,大多数设置命令不会回显其输入。

hs([enable]) — GET/SET (0xB7)

命令
[0xB7]
描述
USB 高速兼容性 - 0=禁用,1=启用(持久)
参数
() 查询; (enable) 设置高速模式。enable: 0=禁用,1=启用
响应 (GET)
[0xB7]
Response: [0xB7] [enabled:u8]
响应 (SET)
[0xB7] [enable:u8]
Response: [0xB7] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。设置在重启后仍然保留。

led([...]) — GET/SET (0xB9)

命令
[0xB9]
描述
LED 控制 - target: 1=设备 2=主机;mode: 0=关闭 1=开启;state: 0=关闭 1=开启 2=慢闪 3=快闪
参数
() 查询设备; (1) 查询设备; (2) 查询主机; (0) 设备关闭; (1) 设备开启; (target,mode) 控制; (target,times,delay_ms) 闪烁
响应 (GET)
Query device: [0xB9]
Query host:   [0xB9] [0x02]
Response:    [0xB9] [target:u8] [state:u8]

状态:0=关闭,1=开启,2=慢闪,3=快闪

响应 (SET)
Set:    [0xB9] [target:u8] [mode:u8]
Response: [0xB9] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

闪烁
Flash:  [0xB9] [target:u8] [times:u32] [delay_ms:u32]
Response: [0xB9] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。控制 LED 和 RGB。次数:1-255,延迟:100-5000ms

log([level]) — GET/SET (0xBA)

命令
[0xBA]
描述
设置/获取日志级别 - 0-5。设置会持续 3 个电源周期,然后自动禁用
参数
() 查询; (level) 设置日志级别。level: 0-5(0=无,5=调试)。设置会持续 3 个电源周期,然后自动禁用
响应 (GET)
[0xBA]
Response: [0xBA] [level:u8]
响应 (SET)
[0xBA] [level:u8]
Response: [0xBA] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

release([timer_ms]) — GET/SET (0xBC)

命令
[0xBC]
描述
自动释放定时器 - 到期时释放所有活动的锁定/按键/键
参数
() 获取状态; (timer_ms) 设置定时器 500-300000ms(5 分钟),(0) 禁用
响应 (GET)
[0xBC]
Response: [0xBC] [timer_ms:u32]

如果禁用返回 0,否则返回时间(毫秒)。

响应 (SET)
[0xBC] [timer_ms:u32]
Response: [0xBC] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

screen([W,H]) — GET/SET (0xBD)

命令
[0xBD]
描述
设置/获取虚拟屏幕尺寸
参数
() 查询; (width,height) 设置虚拟屏幕尺寸(int16)
响应 (GET)
[0xBD]
Response: [0xBD] [width:i16] [height:i16]
响应 (SET)
[0xBD] [width:i16] [height:i16]
Response: [0xBD] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。

serial([text]) — GET/SET (0xBE)

命令
[0xBE]
描述
USB 序列号操作 - ASCII 字节
参数
() 查询; (0) 重置; (text) 设置清理后的序列号(ASCII 字节数组)
响应 (GET)
[0xBE]
Response: [0xBE] [serial:u8×N]

返回当前序列号(ASCII 字节)。

响应 (SET)
[0xBE] [text:u8×N]
Response: [0xBE] [status:u8]

成功返回 0x00 (OK),错误返回 0x01 (ERR)。更改在固件更新后仍然保留。

device() — GET (0xB3)

命令
[0xB3]
描述
返回活动设备类型
参数
无参数
响应 (GET)
[0xB3]
Response: [0xB3] [type:u8]

类型:0=无,1=键盘,2=鼠标

fault() — GET (0xB5)

命令
[0xB5]
描述
获取存储的解析故障信息(与 0xE8 相同)
参数
无参数
响应 (GET)
[0xB5]
Response: [0xB5] [parse_fault_t struct]

返回包含 MAC、端点、原因和原始描述符字节的 parse_fault_t 结构。

info() — GET (0xB8)

命令
[0xB8]
描述
系统/设备信息 - 键值格式:MAC1、MAC2、TEMP、RAM、FW、CPU、UP、VID、PID、VENDOR、MODEL、ORIGINAL_SERIAL、SPOOFED_SERIAL、MOUSE_BINT、KBD_BINT、FAULT
参数
无参数
响应 (GET)
[0xB8]
Response: [0xB8] [field_count:u8] [fields...]

返回包含系统/设备信息键值对的结构化二进制数据。设备信息在首次获取后缓存。

reboot() — SET (0xBB)

命令
[0xBB]
描述
响应后重启设备
参数
无参数
响应 (SET)
[0xBB]
Response: [0xBB] [status:u8]

始终返回 0x00(成功)。设备在发送响应后重启。

version() — GET (0xBF)

命令
[0xBF]
描述
获取固件版本信息
参数
无参数
响应 (GET)
[0xBF]
Response: [0xBF] [version:u8×N]

返回固件版本(ASCII 字节)。