更新lora逻辑

This commit is contained in:
2025-10-10 15:00:01 +08:00
parent c3d4531870
commit 961b0c170b
2 changed files with 11 additions and 5 deletions

View File

@@ -135,7 +135,8 @@ class LoRaMeshUartPassthroughManager(ILoraManager):
addr = int.from_bytes(packet[2:4], 'big')
total_chunks = packet[4]
current_chunk = packet[5]
chunk_data = packet[6:]
# 提取数据块排除末尾的2字节源地址
chunk_data = packet[6:-2]
# --- 长度反向校验 ---
# 根据协议Length字段 = 2 (自定义头) + N (数据块)
@@ -151,10 +152,15 @@ class LoRaMeshUartPassthroughManager(ILoraManager):
log(f"LoRa: 收到单包消息,来自地址 {addr},长度 {len(chunk_data)}")
return chunk_data
# 对于多包消息,只有当收到第一个分片时才清空缓存并设置期望分片数
if current_chunk == 0:
log(f"LoRa: 开始接收新的多包会话 ({total_chunks}个分片)...")
self._reassembly_cache.clear()
self._expected_chunks = total_chunks
elif not self._reassembly_cache and self._expected_chunks == 0:
# 如果不是第一个分片,但缓存是空的,说明错过了第一个分片,丢弃当前分片
log(f"LoRa: 收到非首个分片 {current_chunk},但未检测到会话开始,已丢弃。")
continue
self._reassembly_cache[current_chunk] = chunk_data
log(f"LoRa: 收到分片 {current_chunk + 1}/{self._expected_chunks},已缓存 {len(self._reassembly_cache)}")