1、增加1005判断,1005必推送

This commit is contained in:
weidong 2025-04-28 19:59:29 +08:00
parent d3904cd016
commit c4ed5e6d3f
4 changed files with 95 additions and 6 deletions

View File

@ -1,5 +1,6 @@
package com.imdroid.sideslope.bd;
import com.imdroid.common.util.ByteUtil;
import io.netty.buffer.ByteBuf;
/**
@ -45,5 +46,49 @@ public class UBXUtil {
return new double[]{0,0,0,NO_B562};
}
}
// d3 00 len msgtype sid ... crc
// bits 8 6 10 12 12 24
public static boolean has1005(ByteBuf data){
byte[] flag_d300 = {(byte) 0xd3, (byte)0x00};
int pos = 0;
while(pos<data.readableBytes() - 1){
byte d0 = data.getByte(pos);
byte d1 = data.getByte(pos+1);
short d2 = data.getUnsignedByte(pos+2);
if(d0 == flag_d300[0] && (d1&0xFC) == flag_d300[1]){
int msgType = data.getUnsignedShort(pos+3)>>4;
if(msgType == 1005) return true;
int len = ((d1&0x3)<<8) | d2;
pos += (6+len); // head+len:3bytes; crc:3bytes
}
else{
pos ++;
}
}
return false;
}
public static boolean has1005(byte[] data){
byte[] flag_d300 = {(byte) 0xd3, (byte)0x00};
int pos = 0;
while(pos<data.length - 2){
byte d0 = data[pos];
byte d1 = data[pos+1];
short d2 = ByteUtil.getUnsignedByte(data[pos+2]);
if(d0 == flag_d300[0] && (d1&0xFC) == flag_d300[1]){
int msgType = ByteUtil.getUnsignedShort(data[pos+3],data[pos+4])>>4;
if(msgType == 1005) return true;
int len = ((d1&0x3)<<8) | d2;
pos += (6+len); // head+len:3bytes; crc:3bytes
}
else{
pos ++;
}
}
return false;
}
}

View File

@ -6,6 +6,7 @@ import com.imdroid.secapi.client.BeidouClient;
import com.imdroid.secapi.dto.GnssDevice;
import com.imdroid.common.util.ByteUtil;
import com.imdroid.sideslope.bd.Gga;
import com.imdroid.sideslope.bd.UBXUtil;
import com.imdroid.sideslope.message.D331RtcmMessage;
import com.imdroid.sideslope.ntrip.UdpNtripServer;
import com.imdroid.sideslope.service.Device;
@ -60,7 +61,9 @@ public class D331RtcmMessageExecutor implements Executor<D331RtcmMessage, Void>
DeviceChannel deviceChannel = null;
for (Device device : deviceList) {
if (device.getOpMode() != GnssDevice.OP_MODE_USE) continue;
if ((deviceBs.getD3xxCount()%device.getGnssSampleRate()) != 0) continue;
if (device.getGnssSampleRate()>1 && (deviceBs.getD3xxCount()%device.getGnssSampleRate()) != 0) {
if(!UBXUtil.has1005(forwardBytes)) continue; //1005必推
}
String deviceId = device.getDeviceId();
if(device.getDataChannelType() == Device.CHANNEL_TYPE_UDP) {
deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId);

View File

@ -1,14 +1,49 @@
import com.imdroid.common.util.ByteUtil;
import com.imdroid.common.util.StringUtil;
import com.imdroid.sideslope.bd.Gga;
import com.imdroid.sideslope.bd.UBXUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.IOException;
public class UBXTest {
//static String ggaString = "d33103cc0081e25d8cf23e2e894d40529051414dd59800000000d3007a43267c353d45c200200415298400000000200001005d77c96a8928690a2989092a5e3ee491ebfe191fb9c8e0d2ace4d872cfae853f1b080df8dd6f917df723ba42d0f44d09bb5fcec63800000532f609e0c022063030c1200000fe48f7df7560be918225d2fb5a4bffffffffffffc00133cccf6531b533d5496017910cd300e346467c353c6b0200200000008863b0001a200001017ffff7f9229a726293dbe41a7a4be3dc1470d01134fe0357e23a156b2c48ea2066df7620fcbbf9ebe9ec178046cb15e3b05c5e95c07995a512404e08ee591c03781e74fc4f66afb9e19537b8d6b35e9f01133716f66905b956000000515f3f689c800003ed1e3f6ae63bb7dbf4ad0bf9caf800003fb45d0bbef0184df0aba6851dd50afe604acc180000200000f8168fcfd1af7294bf85d8f718f3f1bcc03ac03e1d47fcde6bffffffffffffffffffffffffffffc00000013b50d6ecd7c75d0cc76433d9150c2f5413631d76df48f0d78dd3003f43c67c4e9c7a82002006001c0000000000200000007d1d15310116c612f512cb9b0883d7a3d7e184212460e147feb8b7000000673fa0c914fefff8257d58254f145dd3006d44667c353d45c200201185000020000000200001007ffab2a2728a7ad0d0eb0ece49ef6d0042ecd1a8b70da1b3a224ba6a6fdee08cadc87954c1a02a00f000007c69d3e1de209740e1e7137b57cbe39237924e1dc87586600f000007fffffffffff80046ed0fd72cf1d52bec005fc80ad3004a45a67c353d45c200203900000000000000200001005fbebdc23d67a5953dbb638df3c5c0c8f2794513b444e1600000fd288be5353108ba4333811034942ee8efffffff009572d1249300d7111cd300ae46467c353c6b0000207fb680000000000020020000555dffefcf4f10500ff02f8fe98f896fc5ff8b0d26bed5564144170b09fa2129b0843e89fcd1bf920cbcca4b6b3c75464c6b0cf85aabbe91fe0f325dd86fa626aacae1ac7ec0829bedf6bf2fd641a02448843da5ea7e6400000075dd79cd1300000772221000000533970000006861d000007bf9070000003a311000007fffff7e775f7fedf5db00000555db34d2b0fceacab5aed28daed490e12d960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024474e4747412c3134303132342e30302c323430352e373634353531382c4e2c31303731362e343934303930382c452c322c35302c302e342c3235332e3631312c4d2c302e3030302c4d2c2c2a34360d0a";
//static String ggaString = "d34100670080f2e198ab3f059f6dbecf2e1f414ca9d70000000024474e4747412c3134353132342e30302c323432382e383539353434312c4e2c31303435312e383430383632372c452c322c33392c302e352c3836392e3739372c4d2c302e3030302c4d2c2c2a34440d0a";
static String rtcmString ="d300133ed67c033bf8d3df508cf3d4d8b80606a0d81b092915d3007443267c1e15c8420020061c184400000000200001005f55c8a9a9098909c8c9c9ef2e01707fc5dfd7393ef59f1cdca75862f3fce1aeea3434971d196d2d5c5a12304f7c93e3e45a977a8b5e75a5783f9bf5a350356f9e626f85b4b5eafcd400001e008d7fffffffffff800591bf4c75590d502d28d7980ad300d446467c1e14ed8200200000000862f0001a200001017fffffc91412541e9e54d3521f1ee08a447d540cb8c4b5d1b3f1ec0cd20e03fd00248fc98f27bea836f6e75ad5e436d82490bd118440e204ef98a726c25a13900ebd0e12beb938e978571ac999f348e81f8bb00000017175fc294fe8707fb04d7b504f000007accc60da1e011bf80bfd302ec9e0340f826b8419865c0000016bf27c480deb2647bff25fa5e7fc6ce7f8af8835a69e66c9fa83abfffffffffffffffbbbffffffffe0000002a763c67b6b765b63a6e8e9a9996c8e8c64aecbe9c5d2bcd3003f43c67c2c0e6d0200203800600000000000200000007d2501151113450dc80c5f1907321693d16155ff2a803085817d07fba4b04c727fa9696eeee820aeba2570c0b5d3008a44667c1e15c84200200184052440000000200001007fffa8ad2b2caaa8aa2c205e5434bd6276041150663bc116031bd087900e82a0d9fef3f143d9b60817d60e336bb461d64194797b01e193300c8ab000007dfa4500000011b9b000007c0be900000006f57fb3887913c70000002479b000007fffffffffffffff80005323cd46ebcbced4f1c8e46e0096f861d3005045a67c1e15c84200203900000000000000200001007fbd41403d28c7374fb5e742c2c9f513b5f933618f188f6decf9ff5d000007f3d2ff6c930503de0cd47f88ecddc1817fffffff804add71d324b280d238c3d3009746467c1e14ed8000207db600000000000020020000555ffefcf6f10502f0f4ee96f490771e51327644b8e7276d19722a18f2de477911fdfe08d6d7e38987aa9eb700531e548d0e90f9c28565d739ddd7b077fd3e430ef247dff8be304e5d7d6c7c800003ea2be80000003fd3800000337c3800003c2086800003cd829800003fffffffffffff37fc00015556cf35ad54cdabd8c5ab5ce0a29bba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024474e4747412c3131303234382e30302c323430352e373633313734352c4e2c31303731362e343933343735392c452c322c34392c302e342c3234352e3231332c4d2c302e3030302c4d2c2c2a34330d0a";
static String rtcmString2 ="d3007443267c1e15c8420020061c184400000000200001005f55c8a9a9098909c8c9c9ef2e01707fc5dfd7393ef59f1cdca75862f3fce1aeea3434971d196d2d5c5a12304f7c93e3e45a977a8b5e75a5783f9bf5a350356f9e626f85b4b5eafcd400001e008d7fffffffffff800591bf4c75590d502d28d7980ad300d446467c1e14ed8200200000000862f0001a200001017fffffc91412541e9e54d3521f1ee08a447d540cb8c4b5d1b3f1ec0cd20e03fd00248fc98f27bea836f6e75ad5e436d82490bd118440e204ef98a726c25a13900ebd0e12beb938e978571ac999f348e81f8bb00000017175fc294fe8707fb04d7b504f000007accc60da1e011bf80bfd302ec9e0340f826b8419865c0000016bf27c480deb2647bff25fa5e7fc6ce7f8af8835a69e66c9fa83abfffffffffffffffbbbffffffffe0000002a763c67b6b765b63a6e8e9a9996c8e8c64aecbe9c5d2bcd3003f43c67c2c0e6d0200203800600000000000200000007d2501151113450dc80c5f1907321693d16155ff2a803085817d07fba4b04c727fa9696eeee820aeba2570c0b5d3008a44667c1e15c84200200184052440000000200001007fffa8ad2b2caaa8aa2c205e5434bd6276041150663bc116031bd087900e82a0d9fef3f143d9b60817d60e336bb461d64194797b01e193300c8ab000007dfa4500000011b9b000007c0be900000006f57fb3887913c70000002479b000007fffffffffffffff80005323cd46ebcbced4f1c8e46e0096f861d3005045a67c1e15c84200203900000000000000200001007fbd41403d28c7374fb5e742c2c9f513b5f933618f188f6decf9ff5d000007f3d2ff6c930503de0cd47f88ecddc1817fffffff804add71d324b280d238c3d3009746467c1e14ed8000207db600000000000020020000555ffefcf6f10502f0f4ee96f490771e51327644b8e7276d19722a18f2de477911fdfe08d6d7e38987aa9eb700531e548d0e90f9c28565d739ddd7b077fd3e430ef247dff8be304e5d7d6c7c800003ea2be80000003fd3800000337c3800003c2086800003cd829800003fffffffffffff37fc00015556cf35ad54cdabd8c5ab5ce0a29bba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024474e4747412c3131303234382e30302c323430352e373633313734352c4e2c31303731362e343933343735392c452c322c34392c302e342c3234352e3231332c4d2c302e3030302c4d2c2c2a34330d0a";
static String rtcmString3 = "d31303bb002529d37919bff862744073ce1a414f4a9100000000d300133ed67c033c893792318ce0e8b5da068439c1c0fa18eed3017c46767c489fcc0200200000060033a8001a200001017ffffff9224a8a42b3dc13fa724bebdc18000000000005d39077d2cbeb30a864ddd8c346c4c81501007e081288061f5a025df6a82a7ffd7ff6001fe9e5f22a5fc095e611859688638986e6d1e2b21ec051909a9090e90e2b912c14864d490474fc9b1750117a121729b6ea876efd76862f1fe9d18399182f26f8416fffb687974010646fb1403dda183ac7902ed3cfd75c47d63bdfcc88efd0775fb79a27c4031850e6f83d38b4000000891a788737d87d9c67f35d1fd15b17e79a679dd5375c33479051d03a959038703032b0103911902fb36026bf582e029809c317d1ef3ce338ce338ce338cc9324c938ce338ce338ce326499264e338ce32bcaf2bce338ce338ce338800000018fe217f5675652d84df5763e508bbb71e0960d37474d35cd49535977a58382df56dda38255402040b781060e681c503730d331972349bd6b79abf57626d852309c4f4efede3dc88dd5189634c76e4ede1dbf9c51783670eb2109e00c3638f365e1d3018946767c489fcc0000207ffe800000000000200200007ffffffefcf6f107010afaf70ef69c90f8a908000000000000001f288de00cb5929c71e5397d4a9d0ca355d420ffffffb80000007ff7f7302140217e6407afc3e0130077f1a7da2355100b2d04cf501ef51f9d51ccf505bad02da501ce11f1e51a58c77c047d9299b12d80c7d3d8652774484e34981f195b8985c77e2c3bfe9a51cc7521fe53f4013a2741889c032d04159c410ad8807b2361457ae09d860006189f55b761d2b6416416e068ad5fe5841e71123dbcdd3f02c03e2f0fc12f044116e1d0000001336d1de8ec5d1cb461b258a12c63e0484c428667217a5041619f9e4a95bdbb66a07c0dc0042db38ce338ce338ce338ce335ce314c5538ce338ce2ee2e938ce3244900000138ce30e4391c470000000052d5cd7378db571ce954cc54dcdb27d59655197d38b3fd737151987df34b57f7d4a15d53738f874f08ff877efe7045dff23efc8627324e1221e48370fd2df83412b8220f5a1e9bc0d640ae910a2316298a00010021fe5ffa80e27938f5be0d6a3d224504f4c52532c34313636313234313733522c322a33350d0a24504f44594e2c30392c302a37350d0a2442444747412c3132333634342e30302c323631312e363132383538312c4e2c31303530332e323835343235322c452c312c32352c302e362c313130302e3139382c4d2c302e3030302c4d2c2c2a37360d0a";
public static void main(String[] args) throws Exception {
test();
}
public static void test() throws IOException{
byte[] rtcmBytes = ByteUtil.hexStringTobyte(rtcmString3);
boolean flag = UBXUtil.has1005(rtcmBytes);
System.out.println(flag?"has 1005":"no 1005");
byte[] data = {(byte) 0x80, 0x01};
short value1 = ByteUtil.getShort(data[0],data[1]);
int value2 = ByteUtil.getUnsignedShort(data[0],data[1]);
System.out.println(value1+","+value2+","+data[0]+","+ByteUtil.getUnsignedByte(data[0]));
}
/*public static void test() throws IOException{
byte[] rtcmBytes = ByteUtil.hexStringTobyte(rtcmString2);
ByteBuf buf = Unpooled.buffer();
buf.writeBytes(rtcmBytes);
boolean flag = UBXUtil.has1005(buf);
System.out.println(flag?"has 1005":"no 1005");
}
public static void test() throws IOException{
byte[] ggaBytes = ByteUtil.hexStringTobyte(ggaString);
ByteBuf buf = Unpooled.buffer();
buf.writeBytes(ggaBytes);
Gga gga = Gga.getFrom(buf);
System.out.println("lon: "+gga.getLongitude()+", lat: "+gga.getLatitude()+", alt: "+gga.getSatellitesInUsed());
}
public static void test() throws IOException {
//读取本地数据模拟
/* FileInputStream fileInputStream = new FileInputStream("2023-02-02-151826.txt");
FileInputStream fileInputStream = new FileInputStream("2023-02-02-151826.txt");
int mSize = 0;
int temp;
List<Byte> mList = new ArrayList<>();
@ -35,7 +70,7 @@ public class UBXTest {
if(result != null){
System.out.println("result"+ Arrays.toString(result));
}
fileInputStream.close();*/
}
fileInputStream.close();
}*/
}

View File

@ -38,6 +38,12 @@ public class ByteUtil {
return (short) (((high & 0xff) << 8) | (low & 0xff));
}
public static short getUnsignedByte(byte data){
return (short) (data & 0x00FF);
}
public static int getUnsignedShort(byte high, byte low){
return (((high & 0xff) << 8) | (low & 0xff)) & 0x0000FFFF;
}
public static byte[] getBytes(String data, String charsetName) {
Charset charset = Charset.forName(charsetName);
return data.getBytes(charset);