package com.whyc.charge;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import com.whyc.dto.ComFn;
|
import com.whyc.dto.Fbs5100ComBase;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* 配网电源
|
* @author LiJun
|
* 充电数据结构体
|
*/
|
@Component
|
public class Fbs5100ChargeData {
|
public Fbs5100BattParam battParam; //电池参数
|
public Fbs5100ChargeParam chargeParam; //测试参数
|
public Fbs5100ChargeState chargeState; //容量状态
|
|
public List<Fbs5100FbsData> fbsDatas;
|
|
public int parse_result = Fbs5100ComBase.PARSE_RESULT_NULL;
|
|
public Fbs5100ChargeData() {
|
battParam = new Fbs5100BattParam();
|
chargeParam = new Fbs5100ChargeParam();
|
chargeState = new Fbs5100ChargeState();
|
fbsDatas = new ArrayList<Fbs5100FbsData>();
|
}
|
|
public void parseFileData(String filePath)
|
{
|
|
FileInputStream fis = null;
|
try {
|
File f = new File(filePath);
|
//非充电文件
|
if(!filePath.endsWith(".CHR")) {
|
parse_result = Fbs5100ComBase.PARSE_RESULT_FILETYPEERR;
|
return;
|
}
|
if(!f.exists()) {
|
parse_result = Fbs5100ComBase.PARSE_RESULT_NOTFOUNDFILE;
|
return;
|
//System.out.println("文件不存在..........");
|
}
|
fis = new FileInputStream(f);
|
byte[] buf = new byte[1024];
|
if(fis.read(buf, 0, buf.length) == 1024)
|
{
|
if(this.readDataHead(buf)) {
|
parse_result = Fbs5100ComBase.PARSE_RESULT_SUCCESS;
|
}else {
|
parse_result = Fbs5100ComBase.PARSE_RESULT_FILEERROR;
|
}
|
|
while(true)
|
{
|
Fbs5100FbsData fbsData = new Fbs5100FbsData();
|
int tag = fbsData.checkDataHead(fis);
|
if((0xFD == tag) || (0xFC == tag) || (0xFB == tag))
|
{
|
byte[] databuf = new byte[Fbs5100FbsData.BYTE_LEN - 4];
|
if(fis.read(databuf) == databuf.length)
|
{
|
//System.out.println(ComFn.bytesToHexString(databuf, databuf.length));
|
|
if(fbsData.putByteBuffer(databuf)) {
|
fbsDatas.add(fbsData);
|
}
|
}
|
}
|
if(tag == 1)
|
break;
|
}
|
}else {
|
parse_result = Fbs5100ComBase.PARSE_RESULT_FILEERROR;
|
}
|
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
if(null != fis)
|
{
|
try {
|
fis.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
|
//解析数据头
|
public boolean readDataHead(byte[] buf) {
|
//System.out.println(ComFn.bytesToHexString(buf, buf.length));
|
boolean flag = false;
|
if(buf.length < (Fbs5100BattParam.BYTE_LEN + Fbs5100ChargeParam.BYTE_LEN + Fbs5100ChargeState.BYTE_LEN)) {
|
//System.out.println("头部数据长度异常");
|
return flag;
|
}
|
ByteBuffer bf = ByteBuffer.allocate(buf.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(buf);
|
bf.position(0);
|
flag = this.battParam.putByteBuffer(bf);
|
//System.out.println("battParam:"+flag);
|
flag &= this.chargeParam.putByteBuffer(bf);
|
//System.out.println("chargeParam:"+flag);
|
flag &= this.chargeState.putByteBuffer(bf);
|
//System.out.println("chargeState:"+flag);
|
return flag;
|
}
|
|
@Override
|
public String toString() {
|
return "Fbs5100ChargeData [battParam=" + battParam + ", chargeParam=" + chargeParam + ", chargeState="
|
+ chargeState + ", fbsDatas=" + fbsDatas + ", parse_result=" + parse_result + "]";
|
}
|
}
|