feat(bridge): BLE 桥接能力——bridge_server.py(Windows原生) + BridgeTransport + --via/PPCLOCK_VIA,149 测试全绿
This commit is contained in:
1 parent
17e2512f6a
commit
49b2010088
7 files changed
+658
-2
No files matched your search
+17
-1
@@ -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":
|
||||
|
||||
Reference in new issue
Block a user