package com.base;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Arrays;
|
import java.util.Calendar;
|
import java.util.Date;
|
|
public class BaseData {
|
public static final int ClildStood_DevType = 0x5678; //×ÓÕ¾Êý¾Ý°ü
|
public static final int Battery_DevType = 0x1107; //Ðîµç³Ø×éÊý¾Ý°ü
|
public static final int SwitchBoard_DevType = 0xECE0; //¿ª¹ØÁ¿°åÊý¾Ý
|
public static final int NiBianPower_DevType = 0x0204; //Äæ±äµçÔ´Êý¾Ý
|
|
|
public int packCount; //Êý¾Ý±¨ÎÄ×ܳ¤¶È
|
public int year; //Äê
|
public int month; //ÔÂ
|
public int day; //ÈÕ
|
public int hour; //ʱ
|
public int min; //·Ö
|
public int seconds; //Ãë
|
public int secondms; //ºÁÃë
|
public Date devtime;
|
public int dataCount; //Êý¾Ý¸öÊý
|
public int packtype; //±¨ÎÄÀàÐÍ
|
public int devident; //É豸/É豸±êʶ
|
public int sendnum; //·¢ËͱàºÅ(1~7×ÓÕ¾)
|
public byte[] data; //Êý¾ÝÄÚÈÝ
|
public int checksum; //УÑéºÍ
|
public int endmark; //½áÊø±êÖ¾
|
|
public boolean putByteBuffer(final ByteBuffer bf,boolean check) {
|
if(bf.limit() < 22) {
|
return false;
|
}
|
if(check) {
|
//ÐèÒª¼ì²éÊý¾ÝµÄУÑéÂë
|
if(!ComBase.checkByteBufferSum(bf)) {
|
//System.out.println("УÑéÂë´íÎó");
|
//System.out.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
return false;
|
}
|
}
|
|
ByteBuffer tmpbuf = bf;
|
tmpbuf.position(0);
|
packCount = ComBase.changeShortToInt(tmpbuf.getShort());
|
month = ComBase.changeByteToInt(tmpbuf.get());
|
year = ComBase.changeByteToInt(tmpbuf.get());
|
hour = ComBase.changeByteToInt(tmpbuf.get());
|
day = ComBase.changeByteToInt(tmpbuf.get());
|
seconds = ComBase.changeByteToInt(tmpbuf.get());
|
min = ComBase.changeByteToInt(tmpbuf.get());
|
//System.err.println((year+1900)+"-"+month+"-"+day+" "+hour+":"+min+":"+seconds);
|
dataCount = ComBase.changeShortToInt(tmpbuf.getShort());
|
packtype = ComBase.changeShortToInt(tmpbuf.getShort());
|
devident = ComBase.changeShortToInt(tmpbuf.getShort());
|
sendnum = ComBase.changeShortToInt(tmpbuf.getShort());
|
if(packtype == BaseData.SwitchBoard_DevType) {
|
//¿ª¹ØÁ¿°å
|
data = new byte[dataCount*10];
|
}else {
|
data = new byte[dataCount*2];
|
}
|
tmpbuf.get(data);
|
checksum = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println("УÑéºÍ"+checksum);
|
//System.out.println(bf.limit()+"==="+packCount);
|
if(bf.limit() < packCount) {
|
return false;
|
}
|
return true;
|
}
|
|
|
//ÆûÂÖ·¢µç»úÊý¾Ý
|
public boolean putSteamTurByteBuffer(final ByteBuffer bf,boolean check) {
|
if(bf.limit() < 130) {
|
return false;
|
}
|
if(check) {
|
if(!ComBase.checkPackageSum(bf.array())) {
|
//УÑéʧ°Ü
|
//System.out.println("УÑéʧ°Ü");
|
return false;
|
}
|
//System.out.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
}
|
ByteBuffer tmpbuf = bf;
|
tmpbuf.position(0);
|
packCount = ComBase.changeShortToInt(tmpbuf.getShort());
|
year = ComBase.changeByteToInt(tmpbuf.get());
|
day = ComBase.changeByteToInt(tmpbuf.get());
|
month = ComBase.changeByteToInt(tmpbuf.get());
|
hour = ComBase.changeByteToInt(tmpbuf.get());
|
min = ComBase.changeByteToInt(tmpbuf.get());
|
seconds = ComBase.changeByteToInt(tmpbuf.get());
|
secondms = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println(year+"-"+month+"-"+day+" "+hour+":"+min+":"+seconds);
|
packtype = ComBase.changeShortToInt(tmpbuf.getShort());
|
devident = ComBase.changeShortToInt(tmpbuf.getShort());
|
|
data = new byte[bf.limit()-16];
|
tmpbuf.get(data);
|
checksum = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println("УÑéºÍ"+checksum);
|
if(bf.limit() < (20 + dataCount*2)) {
|
return false;
|
}
|
return true;
|
}
|
|
public boolean putNiBianByteBuffer(final ByteBuffer bf,boolean check) {
|
if(bf.limit() < 22) {
|
return false;
|
}
|
if(check) {
|
if(!ComBase.checkPackageSum(bf.array())) {
|
//УÑéʧ°Ü
|
//System.out.println("УÑéʧ°Ü");
|
return false;
|
}
|
//System.out.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
|
}
|
ByteBuffer tmpbuf = bf;
|
tmpbuf.position(0);
|
packCount = ComBase.changeShortToInt(tmpbuf.getShort());
|
year = ComBase.changeByteToInt(tmpbuf.get());
|
month = ComBase.changeByteToInt(tmpbuf.get());
|
day = ComBase.changeByteToInt(tmpbuf.get());
|
hour = ComBase.changeByteToInt(tmpbuf.get());
|
min = ComBase.changeByteToInt(tmpbuf.get());
|
seconds = ComBase.changeByteToInt(tmpbuf.get());
|
secondms = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println(year+"-"+month+"-"+day+" "+hour+":"+min+":"+seconds);
|
packtype = ComBase.changeShortToInt(tmpbuf.getShort());
|
devident = ComBase.changeShortToInt(tmpbuf.getShort());
|
data = new byte[packCount-16];
|
tmpbuf.get(data);
|
//System.err.println(ComFn.bytesToHexString(data, data.length));
|
checksum = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println("УÑéºÍ"+checksum);
|
//System.out.println(this);
|
return true;
|
}
|
|
|
//½âÎöÉ豸ÊÚʱÊý¾Ý°ü
|
public boolean putDeviceTimeByteBuffer(ByteBuffer bf) {
|
if(bf.limit() != 20) {
|
return false;
|
}
|
|
//System.out.println(ComBase.checkPackageSum(bf.array()));
|
ByteBuffer tmpbuf = bf;
|
packtype = ComBase.changeShortToInt(tmpbuf.getShort());
|
packCount = ComBase.changeShortToInt(tmpbuf.getShort());
|
year = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println("year:"+year);
|
month = ComBase.changeByteToInt(tmpbuf.get());
|
day = ComBase.changeByteToInt(tmpbuf.get());
|
hour = ComBase.changeShortToInt(tmpbuf.getShort());
|
min = ComBase.changeShortToInt(tmpbuf.getShort());
|
seconds = ComBase.changeShortToInt(tmpbuf.getShort());
|
secondms = ComBase.changeShortToInt(tmpbuf.getShort());
|
//System.out.println(year+"-"+month+"-"+day+" "+hour+":"+min+":"+seconds);
|
devident = ComBase.changeShortToInt(tmpbuf.getShort());
|
checksum = ComBase.changeShortToInt(tmpbuf.getShort());
|
|
devtime = getDevTime();
|
return true;
|
}
|
|
public static byte[] createHeartData() {
|
ByteBuffer tmpbuf = ByteBuffer.allocate(16);
|
tmpbuf.order(ByteOrder.LITTLE_ENDIAN);
|
tmpbuf.putShort(ComBase.changeIntToShort(18));
|
Calendar c = null;
|
c = Calendar.getInstance();
|
tmpbuf.put(ComBase.changeIntToByte(c.get(Calendar.MONTH)+1));
|
tmpbuf.put(ComBase.changeIntToByte(c.get(Calendar.YEAR)-1900));
|
tmpbuf.put(ComBase.changeIntToByte(c.get(Calendar.HOUR_OF_DAY)));
|
tmpbuf.put(ComBase.changeIntToByte(c.get(Calendar.DATE)));
|
tmpbuf.put(ComBase.changeIntToByte(c.get(Calendar.SECOND)));
|
tmpbuf.put(ComBase.changeIntToByte(c.get(Calendar.MINUTE)));
|
//System.out.println(c.get(Calendar.YEAR)+"-"+((c.get(Calendar.MONTH)+1)+"-"+c.get(Calendar.DATE))+" "+(c.get(Calendar.HOUR_OF_DAY))+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND));
|
tmpbuf.putShort(ComBase.changeIntToShort(0));
|
tmpbuf.putShort(ComBase.changeIntToShort(0x1234));
|
tmpbuf.putShort(ComBase.changeIntToShort(0x0208));
|
tmpbuf.putShort(ComBase.changeIntToShort(2));
|
tmpbuf.flip();
|
//System.err.println(ComFn.bytesToHexString(tmpbuf.array(),tmpbuf.array().length));
|
//System.out.println(ComFn.bytesToHexString(ComBase.calCheckSum(tmpbuf.array()), ComBase.calCheckSum(tmpbuf.array()).length));
|
return ComBase.calCheckSum(tmpbuf.array());
|
}
|
|
|
//»ñÈ¡µ±Ç°É豸ʱ¼ä
|
public Date getDevTime() {
|
String time_str = year+"-"+month+"-"+day+" "+hour+":"+min+":"+seconds;
|
//System.out.println(time_str);
|
return Com.getDateTimeFromStr(time_str, Com.DTF_YMDhms);
|
}
|
|
/**
|
* »ñÈ¡Êý¾Ý֡ʱ¼ä
|
* @return
|
*/
|
public Date getDateFromDate() {
|
//System.out.println(this);
|
String time_str = (year+1900)+"-"+month+"-"+day+" "+hour+":"+min+":"+seconds;
|
//System.err.println(time_str);
|
//·µ»ØÊý¾Ý°üʱ¼ä
|
return Com.getDateTimeFromStr(time_str, Com.DTF_YMDhms);
|
}
|
|
/**
|
* ¼ÆËãУÑéºÍ
|
* @return
|
*/
|
public int Calchecksum() {
|
|
return 0;
|
}
|
|
|
/**
|
* È¡×Ö½ÚÊý×éµÄÖ¸¶¨Î»ÖÃÖ¸¶¨³¤¶ÈµÄÊý×é
|
* @param src
|
* @param begin
|
* @param count
|
* @return
|
*/
|
public static byte[] subBytes(byte[] src, int begin, int count) {
|
byte[] bs = new byte[count];
|
System.arraycopy(src, begin, bs, 0, count);
|
return bs;
|
}
|
|
/**
|
* »ñÈ¡Êý¾ÝÍ·µÄ³¤¶È
|
* @param b
|
* @return
|
*/
|
public static int createPackHeadCount(byte[] b) {
|
ByteBuffer bf = ByteBuffer.allocate(b.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(b);
|
bf.flip();
|
return ComBase.changeShortToInt(bf.getShort());
|
}
|
|
public static void udpCheck(byte[] arr) {
|
ByteBuffer bf = ByteBuffer.allocate(arr.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(arr);
|
bf.flip();
|
int sum = 0;
|
for(int i=0;i<arr.length/2;i++) {
|
int t = ~(ComBase.changeShortToInt(bf.getShort()));
|
sum += t;
|
}
|
//System.err.println("sum:" + sum);
|
}
|
|
public static void main(String[] args) {
|
//
|
System.out.println(ComFn.bytesToHexString(createHeartData(), createHeartData().length));
|
|
}
|
|
|
@Override
|
public String toString() {
|
return "BaseData [packCount=" + packCount + ", year=" + year + ", month=" + month + ", day=" + day + ", hour="
|
+ hour + ", min=" + min + ", seconds=" + seconds + ", secondms=" + secondms + ", dataCount=" + dataCount
|
+ ", packtype=" + packtype + ", devident=" + devident + ", sendnum=" + sendnum + ", data="
|
+ Arrays.toString(data) + ", checksum=" + checksum + ", endmark=" + endmark + "]";
|
}
|
}
|