📄 motepacket.java
字号:
package com.mars.net;
import java.util.*;
import com.mars.tools.PacketCRC;
public class MotePacket {
List<Integer> packet;
public MotePacket(){
packet=new LinkedList<Integer>();
}
public MotePacket(LinkedList<Integer> list){
packet=list;
}
public void showPacket(){
int len=packet.size();
for(int i=0;i<len;i++){
System.out.print(packet.get(i));
System.out.print(" ");
}
System.out.println();
}
public int getNoteID(){
int highID=packet.get(10);
int lowID=packet.get(9);
int nodeID=highID*256+lowID;
return nodeID;
}
public boolean isIrPacket(){
boolean isIrPacket=false;
int flag=packet.get(4);
if(flag==11){
isIrPacket=true;
}
return isIrPacket;
}
public boolean isHeartBeatPacket(){
boolean isHeartBeatPacket=false;
int flag=packet.get(4);
if(flag==253){
isHeartBeatPacket=true;
}
return isHeartBeatPacket;
}
public int getSize(){
return packet.size();
}
public Integer getPacketElement(int index){
return packet.get(index);
}
public void removeElement(int index){
packet.remove(index);
}
private boolean adaptEscapedElement(){
int pos=0;
int i=0;
boolean isCorrect=true;
boolean hasEscapedElement=false;
for(i=0;i<packet.size();i++){
int elem=packet.get(i);
if(elem==125){
if(!hasEscapedElement){
hasEscapedElement=true;
pos=i;
}
else{
break;
}
}
if(elem==93&&hasEscapedElement){
//数据包中出现0x7D5D,转成0x7D
if(i==pos+1){
packet.remove(i);
i--;
hasEscapedElement=false;
}
else{
break;
}
}
if(elem==94&&hasEscapedElement){
//数据包中出现0x7D5E,转成0x7E
if(i==pos+1){
packet.remove(pos+1);
packet.remove(pos);
packet.add(pos, 126);
i--;
hasEscapedElement=false;
}
else{
break;
}
}
}
if(i<packet.size()){
isCorrect=false;
System.out.println("**数据报文调整出错!**");
}
return isCorrect;
}
private int getPacketCRC(){
int high=packet.get(packet.size()-2);
int low=packet.get(packet.size()-3);
int crc=high*256+low;
return crc;
}
public boolean verify(){
boolean isOK=this.adaptEscapedElement();
if(isOK){
if(packet.size()-10==packet.get(6)){//测试报文的实际长度等于报文中记录的长度。
int count=packet.size()-4;
int countCRC=PacketCRC.calc(this, 1, count);
if(countCRC!=getPacketCRC()){
System.out.println("**数据报文CRC错误!**");
isOK=false;
}
}
else{
System.out.println("**数据报文长度出错!**");
isOK=false;
}
}
return isOK;
}
public void genPacket(Integer moteByte){
packet.add(moteByte);
}
public void reset(){
packet.clear();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -