endian11
2019-12-30 ec8c6028d44e730885fd9a03994732baee260e94
app/src/main/java/safeluck/drive/evaluation/bean/DriveExamProtocol.java
@@ -18,11 +18,13 @@
    标识位   消息头   消息体   校验码   标识位
     0x7E                                                       0x7E
    ======================**/
   // 标识位
   // 标识位(字节流开始)
    private byte MESSAGE_HEAD = 0x7e;
    //标识位
    //标识位(字节流结束)
    private byte MESSAGE_TAIL = 0x7e;
//校验码  先暂时写死
    //校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节
//校验码  先暂时写死 todo
    private byte checkCode = 0x78;
@@ -32,20 +34,32 @@
//消息ID
    private short msg_id;
    //消息体属性
    private int msg_property;
    //终端手机号 字符串长度必须为16
   /** 消息体属性格式结构表
15   14   13   |   12   11   10   | 9   8   7   6   5   4   3   2   1   0
    保留         数据加密方式        消息体长度
**/
    //消息体属性
    private short msg_property  =2;
    /**
       * 终端手机号 字符串长度必须为16
    **/
    private String phoneOnTerminal = "0008618513021245";
//13   消息流水号   WORD   按发送顺序从0开始循环累加
    /**
     *
     * 13   消息流水号   WORD   按发送顺序从0开始循环累加
     *
     */
    public static short msg_serial_num=0;
    //15   预留   BYTE   预留
    private byte reserve;
    private byte reserve = 0x00;
    /***===========消息头结束=============***/
    /**
     * 消息体
     * 消息体 需要子类实现
     */
    protected abstract byte[] createMessageBody();
@@ -57,6 +71,10 @@
        this.msg_id = msg_id;
    }
    /**
     * 消息转为byte数组 7E......7E
     * @return
     */
    public byte[] toBytes(){
        byte[] desBytes = new byte[1+16+2+1+1];
        int pos = 0;
@@ -72,25 +90,25 @@
        System.arraycopy(protoVersion,0,desBytes,pos,protoVersion.length);
        pos +=protoVersion.length;
    //消息ID
        //消息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);
        //消息体属性
        byte[] msg_pro_bytes = ByteUtil.shortGetBytes(msg_property);
        System.arraycopy(msg_pro_bytes,0,desBytes,pos,msg_pro_bytes.length);
        pos+=msg_pro_bytes.length;
        //终端手机号
        byte[] phoneBytes = ByteUtil.str2Bcd(phoneOnTerminal);
        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;
        //保留byte
        desBytes[pos] = reserve;
        pos++;
        //消息体