From 68e9f63929fce404d80618f53047f1cf1a8a9d7d Mon Sep 17 00:00:00 2001 From: zms Date: Mon, 17 Nov 2025 17:36:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=AB=99=E6=95=B0=E6=8D=AE=E6=B5=81?= =?UTF-8?q?=E6=8F=92=E5=85=A51005?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/D331RtcmMessageExecutor.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java index 8fd81865..a8a432b6 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java @@ -183,15 +183,35 @@ public class D331RtcmMessageExecutor implements Executor if (logger.isDebugEnabled()) { logger.debug("forward d331 rtcm from {} to device {}", deviceBs.getDeviceId(), deviceId); } - ByteBuf buf = Unpooled.buffer(); - buf.writeBytes(forwardBytes); - //推送策略:F9P基站(505)兼容博通(510)推送 添加指定基站ID的推送 + // 为每个设备生成独立的数据副本,确保按需修改(如2307)不影响其他设备 + byte[] perDeviceBytes = forwardBytes; + if(deviceId.startsWith("2307")){ + // 处理2307型号的测站,兼容不带序号的测站(修改应发生在写入 ByteBuf 之前) + perDeviceBytes = forwardBytes.clone(); + perDeviceBytes[2] = (byte) (perDeviceBytes[2] & 0x07); + } + + ByteBuf buf = Unpooled.buffer(); + buf.writeBytes(perDeviceBytes); + + // 推送策略: + // 1) 保持原 F9P(505)→ 博通(510)兼容逻辑不变 + // 2) 仅对指定基站 ID 追加 1005(不影响其它基站) + boolean needInsert1005 = false; if ((deviceBs.getModel()==null || deviceBs.getModel() == GnssDevice.MODEL_G505) && - (device.getModel()!=null && device.getModel()==GnssDevice.MODEL_G510)|| - TARGET_BASE_STATION_ID_FOR_1005.equals(deviceBs.getDeviceId())){ + (device.getModel()!=null && device.getModel()==GnssDevice.MODEL_G510)) { + needInsert1005 = true; // 原兼容逻辑 + } + if (TARGET_BASE_STATION_ID_FOR_1005.equals(deviceBs.getDeviceId())) { + needInsert1005 = true; // 仅特定基站额外插入 + } + if (needInsert1005) { buf = insert1005(deviceBs, deviceId, buf); } + + // 实际发送到设备通道 + deviceChannel.writeAndFlush(buf); } } @@ -206,7 +226,9 @@ public class D331RtcmMessageExecutor implements Executor //logger.info("Adding D300 string for device: {}", deviceId); // 获取当前buf中的数据 - byte[] originalData = buf.array(); + int readableLen = buf.readableBytes(); + byte[] originalData = new byte[readableLen]; + buf.getBytes(0, originalData); String originalHex = ByteUtil.bytesToHexString(originalData); // 找到D300和D301的位置