feat(bridge): BLE 桥接能力——bridge_server.py(Windows原生) + BridgeTransport + --via/PPCLOCK_VIA,149 测试全绿

This commit is contained in:
agent committed 2026-07-28 14:23:30 +00:00
1 parent 17e2512f6a
commit 49b2010088
7 files changed
+658 -2

No files matched your search

+17 -1
View File
@@ -1,10 +1,13 @@
"""ppclock CLI — 离线、agent 友好(--json 机器可读输出)。"""
"""ppclock CLI — 离线、agent 友好(--json 机器可读输出)。
传输选择:默认本机 BLE;`--via bridge://host[:port]`(或环境变量 PPCLOCK_VIA)
经 bridge 服务端(tools/bridge_server.py)远程使用他机蓝牙。"""
from __future__ import annotations
import argparse
import asyncio
import datetime
import json
import os
import sys
from . import commands as C
@@ -39,6 +42,12 @@ def _emit(args, cmd, data=None, error=None):
def _make_transport(args):
"""工厂函数——测试用 monkeypatch 替换为 FakeTransport。"""
from .bridge import BridgeTransport, parse_via
via = parse_via(getattr(args, "via", None))
if via:
host, port = via
return BridgeTransport(address=args.mac, timeout=args.timeout,
host=host, port=port)
from .transport import BLETransport
return BLETransport(address=args.mac, timeout=args.timeout)
@@ -86,6 +95,8 @@ def build_parser() -> argparse.ArgumentParser:
p.add_argument("--mac", help="设备 MAC(省略则自动扫描 NRF- 前缀设备)")
p.add_argument("--timeout", type=float, default=10.0)
p.add_argument("--json", action="store_true", help="机器可读 JSON 输出")
p.add_argument("--via", default=os.environ.get("PPCLOCK_VIA"),
help="传输:local(默认) 或 bridge://host[:port](桥接他机蓝牙)")
sub = p.add_subparsers(dest="cmd", required=True)
sub.add_parser("scan", help="扫描设备")
@@ -299,6 +310,11 @@ async def _run_batch(args) -> list:
async def _dispatch(args) -> dict | list | None:
if args.cmd == "scan":
from .bridge import parse_via
via = parse_via(getattr(args, "via", None))
if via:
from .bridge import scan as bridge_scan
return {"devices": await bridge_scan(via[0], via[1], timeout=args.timeout)}
from .transport import scan
return {"devices": await scan(timeout=args.timeout)}
if args.cmd == "batch":