YSC 8K · 协议参考

两种方言
同一根线。

盒子同时讲 YSC JSON 帧与完整的 MAKCU km.* 文本方言——与 MAKCU 生态逐命令兼容。 V1 与 V2 命令集完全一致,仅物理传输层不同(V1 走 UART · V2 走 USB-CDC,与波特率无关)。

01 能力清单
CAP—01

压枪控制

CMD 30 / 31 · 字段 RX RY RC

减速系数在开火时缩小真实鼠标下拉输入。持续时间窗口按当前回报率自适应——1K 与 8K 鼠标表现完全一致。

自适应 · 1K=1包/ms · 8K=8包/ms
CAP—02

宏引擎

CMD 36–38 · 槽位 0–7

8 个触发掩码槽位。滚轮按周期脉冲输出,间隔与持续均带逐周期随机浮动——没有节拍器式的机械特征。

槽位 · 8 · ±抖动 ms
CAP—03

鼠标曲线

CMD 42–44 · 档位

分段移动配置重塑注入位移的落点——平滑分段、持续时间控制与幅度抖动,轨迹更自然。

档位 · 分段 + 时长
CAP—04

抖动轨迹

CMD 39–41 · AX FX PY FY

开火触发的 X/Y 独立微振荡,幅度与频率分轴可调。画出自己的压枪轨迹。

轴向 · 双轴 · 开火触发
CAP—05

手柄映射

PS5 · XBOX · XINPUT · HID

手柄按键映射为鼠标按键,扳机支持模拟量阈值;鼠标移动转换为摇杆偏移,支持缩放与轴取反。

映射 · 按键→鼠标 · 移动→摇杆
CAP—06

远程控制

KMNET · 局域网

通过网络用第二台电脑驱动盒子。内置自检,端到端验证链路可靠后再放心使用。

链路 · LAN · 自检
02 帧格式 · 摘录

帧结构
与应答。

YSC 帧——7 字节 START 标记 + 2 字节大端总长 + JSON 负载,以 5 字节 END 标记收尾。 USART 收发各走一条 DMA 通道,IDLE 中断触发收帧。应答为 {"code":200,"message":"…","data":"…"};抖动与曲线的查询结果经异步事件 debug_response 回传。

MAKCU 方言——纯文本 km.* 命令,CRLF 结尾,应答以 >>> 收尾。

另有一个 9 字节二进制波特率帧(0xDE 0xAD 05 00 A5 + 4 字节小端波特率)直接重配 USART—— 不知道当前波特率时的恢复通道。

01; 平滑移动 + 压枪窗口 02{"cmd":30,"x":100,"y":50,"c":1, 03 "rx":1.0,"ry":0.6,"rc":50} 04
{"code":200,"message":"mouse_move","data":""}
05; 宏槽位 0 · 滚轮脉冲 30±5ms 06{"cmd":36,"s":0,"e":1,"t":3,"w":-1, 07 "i":30,"d":10,"ij":5,"dj":2} 08
{"code":200,"message":"macro_set","data":""}
09; MAKCU 方言 10km.move(100, 50, 8) 11km.version() 12
km.version(km.MAKCU)
>>>
13; 编译日期 14{"cmd":132} 15
{"code":200,"message":"version","data":"Jul 23 2026"}
03 YSC 命令集
命令名称负载 / 说明
30MOUSE_MOVE{"cmd":30,"x":100,"y":50,"c":1,"rx":1.0,"ry":1.0,"rc":0} — 平滑移动;c=分步次数;rx/ry 物理输入减速系数,rc=减速持续 ms(按回报率自适应)
31MOUSE_MOVE_TOW方向性移动,与 cmd 30 叠加(位移在 HID 报告中相加)。字段相同;两者同设 rc 时以 cmd 31 为准
32MOUSE_BUTTONb 位掩码(1=左,2=右,4=中),c=持续上报次数后自动释放
33BUTTON_STATE按键状态直设:s=1 按下,0 释放——立即生效,无上报次数
34UPLOAD_STATUSstatus>0 开启 HID 数据上传(按键+移动回传串口)
35WHEEL_HOLDw ±1,c=持续时长 ms
36MACRO_SET槽位 s 0–7,e 启用,t 触发掩码,p 屏蔽掩码,w 滚轮值,i 间隔 ms,d 每周期持续 ms,ij/dj 随机浮动。按键位:1=左 2=右 4=中 8=侧后 16=侧前
37MACRO_GETs=-1 查全部,0–7 查单槽
38MACRO_RESET全部槽位恢复固件默认(禁用)
39 / 40 / 41JITTER 设/查/重置e, t, ax, fx, py, fy — 开火触发的 X/Y 振荡;结果经异步 debug_response 回传
42 / 43 / 44CURVE 设/查/重置e, p, n, d, j — 档位、分段数、持续 ms、抖动幅度
50JUMP_TO_IAP先回 entering_iap,随后重启进入 Bootloader。V2 以序列号 TOWMCUIAP 重新枚举——COM 号可能改变
132 (0x84)GET_VERSION编译日期(__DATE__)。V2:APP 返回 ysc-towmcu-L|R v1.0;IAP 返回 YSC-IAP
133 (0x85)SET_BAUDRATEbaud — 固件不校验白名单;建议只发白名单内 8 档(115200 … 3000000)。上位机需立即同步切换
04 MAKCU 方言 · KM.*
命令分组说明
km.move(x,y[,seg])移动seg 分步数 1–512(超出裁剪)
km.left / right / middle / ms1 / ms2 (1/0)按键1=按下,0=释放,2=静默释放(不入推送队列)
km.wheel(±1)移动滚动一格;其他值裁剪到 ±1
km.lock_mx / lock_my (0/1)轴锁定另有 lock_mx+ / lock_mx- 单向锁定;Y 轴同理
km.lock_ml / mr / mm / ms1 / ms2按键锁定锁定后物理按键输入不生效
km.invert_x / invert_y · km.swap_xy轴映射反转或交换轴
km.catch_ml / mm / mr / ms1 / ms2捕获0=自动,1=手动捕获模式
km.scroll_side · km.scroll_lr滚轮映射侧键 2 或左右键同按触发滚轮
km.buttons(mode,period)推送物理按键推送;period 周期 1–1000 ms
km.serial("…" / 0)身份设置 / 重置设备序列号(最长 32 B,支持 C 转义);无参数=查询
km.echo(0/1)系统命令回显(默认开启)
km.baud([rate])系统rate ≥ 115200,不校验白名单;无参数=查询当前值
km.version()系统返回 km.version(km.MAKCU)
km.reboot()系统应答后软复位
05 设备状态
状态含义如何识别
APP正常运行——透传 + 命令处理cmd 132 返回应用版本串(V2 为 ysc-towmcu-L v1.0 / -R,V1 为编译日期)
IAPBootloader,等待固件升级cmd 132 返回 YSC-IAP;V2 以序列号 TOWMCUIAP 枚举