This commit is contained in:
yrx
2026-05-29 16:24:04 +08:00
parent 575e690868
commit 64722f4d73
17 changed files with 1647 additions and 77 deletions

View File

@@ -1879,6 +1879,7 @@ class NetworkManager:
from laser_manager import laser_manager
laser_manager.turn_off_laser()
laser_manager.stop_calibration()
laser_manager.stop_remote_laser_detect()
hardware_manager.start_idle_timer() # 开表
self.safe_enqueue({"result": "laser_off"}, 2)
elif inner_cmd == 4: # 上报电量
@@ -1955,6 +1956,81 @@ class NetworkManager:
mccid = self.get_4g_mccid()
self.logger.info(f"4G MCCID: {mccid}")
self.safe_enqueue({"result": "mccid", "mccid": mccid if mccid is not None else ""}, 2)
elif inner_cmd == 200: # 远程激光点识别:稳定 3s 后上报 (x,y)
from laser_manager import laser_manager
# 远程激光识别期间不能停掉心跳/空闲计时,否则会影响数据上报与连接保持
# 这里仅启动远程识别,不停止网络侧心跳。
try:
laser_manager.turn_on_laser()
if self.logger:
self.logger.info("[LASER] cmd200 已发送开激光指令")
except Exception as e:
if self.logger:
self.logger.warning(
f"[LASER] cmd200 开激光异常: {e}"
)
if not laser_manager.start_remote_laser_detect():
self.safe_enqueue(
{
"cmd": 200,
"result": "laser_detect_busy",
},
2,
)
else:
self.safe_enqueue(
{
"cmd": 200,
"result": "laser_detect_started",
},
2,
)
elif inner_cmd == 201: # 设置硬编码激光点并结束远程识别会话
from laser_manager import laser_manager
laser_manager.stop_remote_laser_detect()
inner_data = (
data_obj.get("data", {})
if isinstance(data_obj.get("data"), dict)
else {}
)
raw_x = data_obj.get("x", inner_data.get("x"))
raw_y = data_obj.get("y", inner_data.get("y"))
try:
ix, iy = laser_manager.set_hardcoded_laser_point(
raw_x, raw_y
)
self.safe_enqueue(
{
"cmd": 201,
"result": "laser_point_set",
"x": ix,
"y": iy,
},
2,
)
self.logger.info(
f"[LASER] cmd201 硬编码激光点=({ix}, {iy})"
)
except Exception as e:
self.logger.error(f"[LASER] cmd201 失败: {e}")
self.safe_enqueue(
{
"cmd": 201,
"result": "laser_point_set_failed",
"reason": str(e),
},
2,
)
hardware_manager.start_idle_timer()
elif inner_cmd == 46: # 开关射箭原图保存
inner_data = data_obj.get("data", {}) if isinstance(data_obj, dict) else {}
enabled = True
if isinstance(inner_data, dict) and "enable" in inner_data:
enabled = bool(inner_data.get("enable"))
config.SAVE_RAW_SHOT_IMAGE_ENABLED = enabled
self.logger.info(f"[RAW_IMAGE] 射箭原图保存开关: {enabled}")
self.safe_enqueue({"result": "raw_image_save", "enabled": enabled}, 2)
hardware_manager.start_idle_timer() # 重新计时
elif inner_cmd == 41:
self.logger.info(f"[TEST] 收到TCP射箭触发命令, {time.time()}")
self._manual_trigger_flag = True
@@ -2042,7 +2118,7 @@ class NetworkManager:
pass
break
# 发送激光校准结果
# 发送激光校准结果cmd=2 等传统校准)
if logged_in:
from laser_manager import laser_manager
result = laser_manager.get_calibration_result()
@@ -2050,6 +2126,21 @@ class NetworkManager:
x, y = result
self.safe_enqueue({"result": "ok", "x": x, "y": y}, 2)
# 发送远程激光识别结果cmd=200会话持续至 cmd=201
if logged_in:
from laser_manager import laser_manager
rd = laser_manager.get_remote_detect_result()
if rd and isinstance(rd, dict) and rd.get("status") == "ok":
self.safe_enqueue(
{
"cmd": 200,
"result": "laser_detect_ok",
"x": rd.get("x"),
"y": rd.get("y"),
},
2,
)
# 定期发送心跳
current_time = time.ticks_ms()
if logged_in and current_time - last_heartbeat_send_time > config.HEARTBEAT_INTERVAL * 1000: