New file |
| | |
| | | package safeluck.drive.evaluation.bean; |
| | | |
| | | import android.util.Log; |
| | | |
| | | import com.anyun.im_lib.util.ByteUtil; |
| | | |
| | | /** |
| | | * MyApplication2 |
| | | * Created by lzw on 2019/12/17. 15:39:23 |
| | | * 邮箱:632393724@qq.com |
| | | * All Rights Saved! Chongqing AnYun Tech co. LTD |
| | | */ |
| | | public abstract class DriveExamProtocol { |
| | | |
| | | private static final String TAG = "DriveExamProtocol"; |
| | | /***======================== |
| | | 消息结构表 |
| | | 标识位 消息头 消息体 校验码 标识位 |
| | | 0x7E 0x7E |
| | | ======================**/ |
| | | // 标识位 |
| | | private byte MESSAGE_HEAD = 0x7e; |
| | | //标识位 |
| | | private byte MESSAGE_TAIL = 0x7e; |
| | | //校验码 先暂时写死 |
| | | private int checkCode = 0x78; |
| | | |
| | | |
| | | /***===========以下是消息头=============***/ |
| | | //协议版本号 BYTE 235,固定 |
| | | private short protocol_version = 235; |
| | | //消息ID |
| | | private short msg_id; |
| | | |
| | | //消息体属性 |
| | | private int msg_property; |
| | | |
| | | //终端手机号 |
| | | private String phoneOnTerminal; |
| | | //13 消息流水号 WORD 按发送顺序从0开始循环累加 |
| | | public static short msg_serial_num=0; |
| | | |
| | | //15 预留 BYTE 预留 |
| | | private byte reserve; |
| | | /***===========消息头结束=============***/ |
| | | |
| | | /** |
| | | * 消息体 |
| | | */ |
| | | protected abstract byte[] createMessageBody(); |
| | | |
| | | /** |
| | | * 构造函数 |
| | | * @param msg_id 消息ID |
| | | */ |
| | | public DriveExamProtocol(short msg_id) { |
| | | this.msg_id = msg_id; |
| | | } |
| | | |
| | | protected byte[] toBytes(){ |
| | | byte[] desBytes = new byte[1+16+2+1+1]; |
| | | int pos = 0; |
| | | |
| | | |
| | | //标识位 |
| | | desBytes[pos] = MESSAGE_HEAD; |
| | | pos++; |
| | | //协议版本号 |
| | | byte[] protoVersion = ByteUtil.shortGetByte(protocol_version); |
| | | System.arraycopy(protoVersion,0,desBytes,pos,protoVersion.length); |
| | | pos +=protoVersion.length; |
| | | |
| | | //消息ID |
| | | byte[] msgIdBytes = ByteUtil.shortGetBytes(msg_id); |
| | | System.arraycopy(msgIdBytes,0,desBytes,pos,msgIdBytes.length); |
| | | pos+=msgIdBytes.length; |
| | | |
| | | //消息体属性 |
| | | byte[] msg_pro_bytes = ByteUtil.shortGetBytes((short)2); |
| | | System.arraycopy(msg_pro_bytes,0,desBytes,pos,msg_pro_bytes.length); |
| | | pos+=msg_pro_bytes.length; |
| | | //终端手机号 |
| | | byte[] phoneBytes = ByteUtil.str2Bcd("12345678"); |
| | | System.arraycopy(phoneBytes,0,desBytes,pos,phoneBytes.length); |
| | | pos+=phoneBytes.length; |
| | | //消息流水号 |
| | | byte[] msg_serialNum = ByteUtil.shortGetBytes(msg_serial_num++); |
| | | System.arraycopy(msg_serialNum,0,desBytes,pos,msg_serialNum.length); |
| | | pos+=msg_serialNum.length; |
| | | //保留 |
| | | desBytes[pos] = 0; |
| | | pos++; |
| | | |
| | | //消息体 |
| | | byte[] messageBodyBytes = createMessageBody(); |
| | | System.arraycopy(messageBodyBytes,0,desBytes,pos,messageBodyBytes.length); |
| | | pos+=messageBodyBytes.length; |
| | | |
| | | //校验码 |
| | | desBytes[pos] = 0x01; |
| | | pos++; |
| | | //末尾结束标识位 |
| | | desBytes[pos] = MESSAGE_TAIL; |
| | | |
| | | Log.i(TAG, "包长度="+pos); |
| | | Log.i(TAG, "包内容: "+ByteUtil.byte2HexStr(desBytes)); |
| | | return desBytes; |
| | | } |
| | | |
| | | } |