From e29b2f68e2062688c2d40209ba434e3e7932b92e Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期一, 02 十二月 2024 16:09:03 +0800
Subject: [PATCH] 修改升级数据中的CRC16验证算法,注意其是大端模块,与其他部分不一样
---
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java | 7 ++-
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java | 21 +++++-----
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java | 8 +++-
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java | 39 +++++--------------
4 files changed, 33 insertions(+), 42 deletions(-)
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java
index f33e72c..2e4b312 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/parse/global/GlCreate.java
@@ -93,9 +93,12 @@
}
public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception {
- short crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ;
+ int crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ;
+ byte[] crcBs = new byte[4] ;
+ ByteUtil.int2Bytes_BE(crcBs, crc, 0);
byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ;
- ByteUtil.short2Bytes_LE(bytes, crc, 0);
+ bytes[0] = crcBs[3] ;
+ bytes[1] = crcBs[4] ;
bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ;
return bytes ;
}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java
index 71b7883..eafe829 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/parse/global/GlCreate.java
@@ -1,5 +1,6 @@
package com.dy.common.mw.protocol.p206V2.parse.global;
+import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
import com.dy.common.util.*;
@@ -95,9 +96,12 @@
public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception {
int crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ;
+ byte[] crcBs = new byte[4] ;
+ ByteUtil.int2Bytes_BE(crcBs, crc, 0);
byte[] bytes = new byte[ProtocolConstantV206V2.UG_lenTail] ;
- ByteUtilUnsigned.short2Bytes_LE(bytes, crc, 0);
- bytes[2] = ProtocolConstantV206V2.P_Tail_Byte ;
+ bytes[0] = crcBs[3] ;
+ bytes[1] = crcBs[4] ;
+ bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ;
return bytes ;
}
}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java
index 7468ba0..2e8f20f 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/parse/global/GlCreate.java
@@ -1,7 +1,5 @@
package com.dy.common.mw.protocol.p206V202404.parse.global;
-import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
-import com.dy.common.mw.protocol.p206V2.ProtocolConstantV206V2;
import com.dy.common.mw.protocol.p206V202404.CommonV202404;
import com.dy.common.mw.protocol.p206V202404.ProtocolConstantV206V202404;
import com.dy.common.util.*;
@@ -142,8 +140,8 @@
}
public static void createLen(byte[] bsNoTail) throws Exception {
- int len = bsNoTail.length - ProtocolConstantV206V1.lenHead2ctrl;
- bsNoTail[ProtocolConstantV206V1.dataLenIndex] = (byte)len ;
+ int len = bsNoTail.length - ProtocolConstantV206V202404.lenHead2ctrl;
+ bsNoTail[ProtocolConstantV206V202404.dataLenIndex] = (byte)len ;
}
public static void createLen4PUg(byte[] bytes) throws Exception {
@@ -159,18 +157,21 @@
}
public static byte[] createCrcTail(byte[] bsNoTail) throws Exception {
- int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V1.ctrlIndex, bsNoTail.length -1) ;
- byte[] bytes = new byte[ProtocolConstantV206V1.lenTail] ;
+ int crc = new CRC8_for_2_0().CRC8(bsNoTail, ProtocolConstantV206V202404.ctrlIndex, bsNoTail.length -1) ;
+ byte[] bytes = new byte[ProtocolConstantV206V202404.lenTail] ;
bytes[0] = (byte)crc ;
- bytes[1] = ProtocolConstantV206V1.P_Tail_Byte ;
+ bytes[1] = ProtocolConstantV206V202404.P_Tail_Byte ;
return bytes ;
}
public static byte[] createCrcTail4Ug(byte[] bsNoTail) throws Exception {
int crc = new CRC16().CRC16_table(bsNoTail, 0, bsNoTail.length -1) ;
- byte[] bytes = new byte[ProtocolConstantV206V2.UG_lenTail] ;
- ByteUtilUnsigned.short2Bytes_LE(bytes, crc, 0);
- bytes[2] = ProtocolConstantV206V2.P_Tail_Byte ;
+ byte[] crcBs = new byte[4] ;
+ ByteUtil.int2Bytes_BE(crcBs, crc, 0);
+ byte[] bytes = new byte[ProtocolConstantV206V202404.UG_lenTail] ;
+ bytes[0] = crcBs[3] ;
+ bytes[1] = crcBs[4] ;
+ bytes[2] = ProtocolConstantV206V202404.P_Tail_Byte ;
return bytes ;
}
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java
index 3b66baf..307e1af 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/CRC16.java
@@ -95,13 +95,13 @@
* @return CRC
*/
@SuppressWarnings("unused")
- public short CRC16_table(byte[] bs, int startIndex, int endIndex) {
- short x ;
- short crc = (short)0xffff;
+ public int CRC16_table(byte[] bs, int startIndex, int endIndex) {
+ int x ;
+ int crc = 0xffff;
if(bs != null && bs.length >= endIndex + 1){
for (int i = startIndex ; i <= endIndex; i++){
- x = (short)(crc ^ bs[i]) ;
- crc = (short)((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ;
+ x = (crc ^ bs[i]) ;
+ crc = ((crc >> 8) ^ crc16_rev_table[x & 0x00FF]) ;
}
}
return crc ;
@@ -142,31 +142,14 @@
}
public static void main(String[] args) throws Exception {
- //String hex = "AA0024AA
- // 16015301
- // 15059980
- // 00011000
- // 00014A00
- // 5D4D5D4D
- // 00004000
- // AAC616" ;
+ int s = 62430 ;
+ //String hex = "AA0018AA16015301150599800001100000014A005D4D5D4D00004000AA7E16" ;
String hex = "AA0018AA16015301150599800001100000014A005D4D5D4D00004000" ;
byte[] bs = ByteUtil.hex2Bytes(hex) ;
- for(int i = 0 ; i < bs.length - 2 ; i++){
- short crc = new CRC16().CRC16_table(bs, i , bs.length - 1) ;
- byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ;
- ByteUtil.short2Bytes_LE(bytes, crc, 0);
- bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ;
- System.out.println(ByteUtil.bytes2Hex(bytes, true)) ;
- }
-// System.out.println("==============================") ;
-// for(int i = 4 ; i < bs.length ; i++){
-// short crc = new CRC16().CRC16_table(bs, 0 , i) ;
-// byte[] bytes = new byte[ProtocolConstantV206V1.UG_lenTail] ;
-// ByteUtil.short2Bytes_LE(bytes, crc, 0);
-// bytes[2] = ProtocolConstantV206V1.P_Tail_Byte ;
-// System.out.println(ByteUtil.bytes2Hex(bytes, true)) ;
-// }
+ int crc = new CRC16().CRC16_table(bs, 0 , bs.length - 1) ;
+ byte[] crcBs = new byte[4] ;
+ ByteUtil.int2Bytes_BE(crcBs, crc, 0);
+ System.out.println(ByteUtil.bytes2Hex(crcBs, true)) ;
}
}
--
Gitblit v1.8.0