⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motepacket.java

📁 在Mote节点与主机实现互联的前提下
💻 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 + -