From 3a709d693bec87de92b4b91abba535d14392810b Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期四, 27 三月 2025 16:10:25 +0800
Subject: [PATCH] 获取项目列表接口
---
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java | 77 +++++++++++++++++++++++++++++++-------
1 files changed, 62 insertions(+), 15 deletions(-)
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java
index e2f09db..437d4a7 100644
--- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/softUpgrade/parse/HexFileParse.java
@@ -2,8 +2,10 @@
import cn.hutool.core.util.HexUtil;
import com.dy.common.util.ByteUtil;
+import com.dy.common.util.CRC16;
import java.io.*;
+import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
@@ -16,18 +18,19 @@
private static final int hexFileMinLine = 4 ;
private static final int lineHeadEndIndex = 9 ;
- private static final int bytesSplitUnit = 512 ;
+ private static final int lineValidCharCount = 43 ;//姣忚鏈夋晥瀛楃锛堝啋鍙蜂笌鍗佸叚杩涘埗锛変釜鏁帮紝渚嬪鈥�:1096C000DC96010010020020203E00000441000052鈥濓紝浣嗗�掓暟绗�3琛屼笉鍙楅檺鍒�
+ private static final int bytesSplitUnit512 = 512 ;
public static void main(String[] args) throws Exception{
- boolean fromBytes = true ;
+ boolean fromBytes = false ;
HexFileParse obj = new HexFileParse() ;
if(!fromBytes){
- String filePath = "D:\\hexFile\\YuanMu_edit241007_01.hex";
+ String filePath = "D:\\hexFile\\YuanMu_20250116_01.hex";
//File file = new File(filePath) ;
HexFileVo vo = obj.doParse(filePath) ;
System.out.println(vo.toString());
}else{
- String filePath = "D:\\hexFile\\YuanMu_edit241007_01.hex";
+ String filePath = "D:\\hexFile\\YuanMu_20250116_01.hex";
File file = new File(filePath) ;
byte[] fileContent = new byte[(int)file.length()] ;
FileInputStream fileInputStream = new FileInputStream(file) ;
@@ -65,7 +68,8 @@
HexFileVo vo = new HexFileVo() ;
this.checkAndCalculate(vo, lineList);
this.parse(vo, lineList);
- this.split(vo);
+ this.splitBytesByUnit512(vo);
+ this.calculateCrc(vo);
return vo ;
}
@@ -85,7 +89,8 @@
HexFileVo vo = new HexFileVo() ;
this.checkAndCalculate(vo, lineList);
this.parse(vo, lineList);
- this.split(vo);
+ this.splitBytesByUnit512(vo);
+ this.calculateCrc(vo);
return vo ;
}
@@ -106,7 +111,9 @@
if(vo.totalLines < hexFileMinLine){
throw new Exception("Hex鏂囦欢鍐呭琛屾暟" + vo.totalLines + "涓嶆纭�(鏈�灏忚鏁�" + hexFileMinLine +")") ;
}
- vo.calculateBytes = ((vo.totalLines - 4) * 32) / 1024 * 512 ;
+ vo.calculateBytes = ((((vo.totalLines - 4) * 32) / 1024)
+ + ((((vo.totalLines - 4) * 32) % 1024) > 0?1 : 0))
+ * 512 ;
}
/**
@@ -136,12 +143,16 @@
if(!line.startsWith(":")){
vo.errors.add("绗�" + counter + "琛屽唴瀹逛笉鏄互:寮�澶�") ;
}else{
- line = line.substring(lineHeadEndIndex, line.length() - 2) ;
- if(vo.bytes.length == 0){
- vo.bytes = HexUtil.decodeHex(line) ;
+ if(counter != vo.totalLines - 3 && line.length() != lineValidCharCount){
+ //鏃犳晥鏁版嵁锛岃垗寮冩湰琛屾暟鎹�
}else{
- byte[] bytes = HexUtil.decodeHex(line) ;
- vo.bytes = ByteUtil.bytesMerge(vo.bytes, bytes) ;
+ line = line.substring(lineHeadEndIndex, line.length() - 2) ;
+ if(vo.bytes.length == 0){
+ vo.bytes = HexUtil.decodeHex(line) ;
+ }else{
+ byte[] bytes = HexUtil.decodeHex(line) ;
+ vo.bytes = ByteUtil.bytesMerge(vo.bytes, bytes) ;
+ }
}
}
}
@@ -153,23 +164,59 @@
/**
* 浠�512涓哄崟浣嶅垎鍓叉暟鎹寘
+ * @param bytes
+ */
+ public List<byte[]> splitBytesByUnit512(byte[] bytes){
+ List<byte[]> listByte512 = new ArrayList<>();
+ if(bytes != null && bytes.length > 0){
+ int index = 0 ;
+ while (true){
+ if(index < bytes.length){
+ byte[] bs = ByteUtil.bytesSplit(bytes, index, bytesSplitUnit512) ;
+ listByte512.add(bs) ;
+ }else{
+ break ;
+ }
+ index += bytesSplitUnit512;
+ }
+ }
+ return listByte512 ;
+ }
+
+ /**
+ * 浠�512涓哄崟浣嶅垎鍓叉暟鎹寘
* @param vo
*/
- private void split(HexFileVo vo){
+ private void splitBytesByUnit512(HexFileVo vo){
if(vo.bytes != null && vo.bytes.length > 0){
vo.realBytes += vo.bytes.length ;
int index = 0 ;
while (true){
if(index < vo.bytes.length){
- byte[] bytes = ByteUtil.bytesSplit(vo.bytes, index, bytesSplitUnit) ;
+ byte[] bytes = ByteUtil.bytesSplit(vo.bytes, index, bytesSplitUnit512) ;
vo.listByte512.add(bytes) ;
vo.totalBytes512 += bytes.length ;
}else{
break ;
}
- index += bytesSplitUnit ;
+ index += bytesSplitUnit512;
}
}
}
+ /**
+ * 璁$畻CRC16
+ * @param vo
+ */
+ private void calculateCrc(HexFileVo vo){
+ int crc = 0xffff ;
+ if(vo.listByte512 != null && vo.listByte512.size() > 0){
+ CRC16 crc16 = new CRC16() ;
+ for(byte[] bs : vo.listByte512){
+ crc = crc16.CRC16_table(bs.length, bs, crc) ;
+ }
+ }
+ vo.bytesCrc16 = crc ;
+ }
+
}
--
Gitblit v1.8.0