This commit is contained in:
gcw_4spBpAfv
2026-02-10 17:52:55 +08:00
parent 573c0a3385
commit 592dc6ceb1
9 changed files with 626 additions and 136 deletions

View File

@@ -42,6 +42,7 @@ class NetworkManager:
self._high_send_queue = []
self._normal_send_queue = []
self._queue_lock = threading.Lock()
self._send_event = threading.Event()
self._uart4g_lock = threading.Lock()
self._device_id = None
self._password = None
@@ -150,6 +151,7 @@ class NetworkManager:
self._high_send_queue.append(item)
else:
self._normal_send_queue.append(item)
self._send_event.set()
def _dequeue(self):
"""线程安全地从队列取出(内部方法)"""
@@ -493,6 +495,8 @@ class NetworkManager:
# 设置非阻塞模式(用于接收数据)
self._wifi_socket.setblocking(False)
# 加快消息发送
self._wifi_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
self._tcp_connected = True
self.logger.info("[WIFI-TCP] TCP连接已建立")
@@ -1317,29 +1321,29 @@ class NetworkManager:
except:
ip = "error_getting_ip"
self.safe_enqueue({"result": "current_ip", "ip": ip}, 2)
elif inner_cmd == 7:
from ota_manager import ota_manager
if ota_manager.update_thread_started:
self.safe_enqueue({"result": "update_already_started"}, 2)
continue
# elif inner_cmd == 7:
# from ota_manager import ota_manager
# if ota_manager.update_thread_started:
# self.safe_enqueue({"result": "update_already_started"}, 2)
# continue
try:
ip = os.popen("ifconfig wlan0 2>/dev/null | grep 'inet ' | awk '{print $2}'").read().strip()
except:
ip = None
# try:
# ip = os.popen("ifconfig wlan0 2>/dev/null | grep 'inet ' | awk '{print $2}'").read().strip()
# except:
# ip = None
if not ip:
self.safe_enqueue({"result": "ota_rejected", "reason": "no_wifi_ip"}, 2)
else:
# 注意direct_ota_download 需要 ota_url 参数
# 如果 ota_manager.ota_url 为 None需要从其他地方获取
ota_url_to_use = ota_manager.ota_url
if not ota_url_to_use:
self.logger.error("[OTA] cmd=7 但 OTA_URL 未设置")
self.safe_enqueue({"result": "ota_failed", "reason": "ota_url_not_set"}, 2)
else:
ota_manager._start_update_thread()
_thread.start_new_thread(ota_manager.direct_ota_download, (ota_url_to_use,))
# if not ip:
# self.safe_enqueue({"result": "ota_rejected", "reason": "no_wifi_ip"}, 2)
# else:
# # 注意direct_ota_download 需要 ota_url 参数
# # 如果 ota_manager.ota_url 为 None需要从其他地方获取
# ota_url_to_use = ota_manager.ota_url
# if not ota_url_to_use:
# self.logger.error("[OTA] cmd=7 但 OTA_URL 未设置")
# self.safe_enqueue({"result": "ota_failed", "reason": "ota_url_not_set"}, 2)
# else:
# ota_manager._start_update_thread()
# _thread.start_new_thread(ota_manager.direct_ota_download, (ota_url_to_use,))
elif inner_cmd == 41:
self.logger.info("[TEST] 收到TCP射箭触发命令")
self._manual_trigger_flag = True
@@ -1467,7 +1471,8 @@ class NetworkManager:
self.logger.error("十分钟无心跳ACK重连")
break
time.sleep_ms(50)
self._send_event.wait(timeout=0.05) # 0.05秒 = 50ms
self._send_event.clear()
self._tcp_connected = False
self.logger.error("连接异常2秒后重连...")