whyclj
2020-08-29 166f2f34ffed7ee9562eff02482ac6a3f7168bcd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package com.dev.btse.comm;
 
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
 
import com.dev.btse.data.ComFn;
import com.dev.btse.data.FBS9100_ComBase;
import com.dev.btse.data.FBS9100_Crc16;
 
public class FBS9100S_FOD_Param {
    public final static int DevFOD_DataLen = 56;
    public final static int DevFOD_Len = 14;
    
    public int dev_id;                //É豸id
    public int op_cmd;
    public int test_cmd;            //²âÊÔÀàÐÍ
    
    public FOD_Param[] fodParam = new  FOD_Param[4];
    public int GroupNum;                //ÉèÖÃ×éºÅ
    
    public FBS9100S_FOD_Param() {
        for(int i=0;i<fodParam.length;i++) {
            FOD_Param  param = new FOD_Param();
            param.GroupNum = i+1;
            fodParam[i] = param;
        }
    }
    
    
    public FBS9100S_FOD_Param clone(){
        FBS9100S_FOD_Param param = new FBS9100S_FOD_Param();
        param.dev_id = this.dev_id;
        param.op_cmd = this.op_cmd;
        param.test_cmd = this.test_cmd;
        fodParam = this.fodParam.clone();
        return param;
    }
    
    public boolean putByteBuffer(final ByteBuffer bf)
    {
        boolean flag = true;
        //System.out.println(ComFn.bytesToHexString(bf.array(), bf.array().length));
        if(bf.limit() < DevFOD_DataLen)
            return false;
        
        ByteBuffer tmpbuf = bf;
        /*int crc0 = tmpbuf.getShort(DevFOD_DataLen-2) & 0xFFFF;
        int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, DevFOD_DataLen-2);
        if(crc0 != crc1) {
            return false;
        }*/
        tmpbuf.position(0);
        for(int i = 0;i<fodParam.length ;i++) {
            tmpbuf.position(0);
            int crc1 = FBS9100_Crc16.CalCRC16(tmpbuf, 12);
            fodParam[i].CRC = tmpbuf.getShort(12)&0xFFFF;
            
            tmpbuf.position(0);            
            //System.err.println(crc1+"===="+fodParam[i].CRC);
            if(crc1 != fodParam[i].CRC) {
                flag = flag && false;
                tmpbuf.position(14);
            }else {
                fodParam[i].GroupNum = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
                fodParam[i].STDCap = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
                fodParam[i].FloatVol = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort())/10;
                fodParam[i].Strength = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort());
                fodParam[i].YHStrength = FBS9100_ComBase.changeShortToDouble(tmpbuf.getShort());
                fodParam[i].TimeLong = FBS9100_ComBase.changeShortToInt(tmpbuf.getShort());
                fodParam[i].CRC = tmpbuf.getShort()&0xFFFF;
                flag = flag && true;
            }
            //System.out.println(fodParam[i]);
            tmpbuf.compact();
        }
        tmpbuf.compact();
        tmpbuf.flip();
        return true;
    }
    
    public ByteBuffer getByteBuffer()
    {
        ByteBuffer bytebuffer = ByteBuffer.allocate(DevFOD_DataLen);
        bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
        ByteBuffer tmp = ByteBuffer.allocate(DevFOD_Len);
        tmp.order(ByteOrder.LITTLE_ENDIAN);
        if(GroupNum > 4) {
            GroupNum = 4;
        }
        for(int i =0;i<fodParam.length;i++) {
            tmp.clear();
            tmp.position(0);
            tmp.putShort(FBS9100_ComBase.changeIntToShort(fodParam[i].GroupNum));
            tmp.putShort(FBS9100_ComBase.changeIntToShort(fodParam[i].STDCap));
            tmp.putShort(FBS9100_ComBase.changeDoubleToShort(fodParam[i].FloatVol*10));
            tmp.putShort(FBS9100_ComBase.changeDoubleToShort(fodParam[i].Strength));
            tmp.putShort(FBS9100_ComBase.changeDoubleToShort(fodParam[i].YHStrength));
            tmp.putShort(FBS9100_ComBase.changeIntToShort(fodParam[i].TimeLong));
            int CRC = FBS9100_Crc16.CalCRC16(tmp, tmp.position());
            tmp.putShort(FBS9100_ComBase.changeIntToShort(CRC));
            
            tmp.flip();
            bytebuffer.put(tmp.array());
        }
        
        //System.out.println(this+"$$$$$$$$$$$$$$$$$$$$$$$$$");
        
        bytebuffer.flip();
        //System.err.println(ComFn.bytesToHexString(bytebuffer.array(), bytebuffer.array().length));
        return bytebuffer;
    }
    
    //»ñÈ¡¿ØÖƵÄʱºòµÄÊý¾Ý¼¯ºÏ
    public ByteBuffer getControlByteBuffer() {
        ByteBuffer bytebuffer = ByteBuffer.allocate(4);
        bytebuffer.order(ByteOrder.LITTLE_ENDIAN);
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(GroupNum));
        int CRC = FBS9100_Crc16.CalCRC16(bytebuffer, bytebuffer.position());
        bytebuffer.putShort(FBS9100_ComBase.changeIntToShort(CRC));
        bytebuffer.flip();        
        return bytebuffer;
    }
    
    
    class FOD_Param{
        public int GroupNum;            //×éºÅ
        public int STDCap;                //±ê³ÆÈÝÁ¿
        public double FloatVol;            //¸¡³äµçѹ
        public double Strength;            //³ýÁòÇ¿¶È
        public double YHStrength;        //Ñø»¤Ç¿¶È
        public int TimeLong;            //³ýÁòÌìÊý
        public int CRC = 0;
        
        
        @Override
        public String toString() {
            return "FOD_Param [GroupNum=" + GroupNum + ", STDCap=" + STDCap + ", FloatVol=" + FloatVol + ", Strength="
                    + Strength + ", YHStrength=" + YHStrength + ", TimeLong=" + TimeLong + ", CRC=" + CRC + "]";
        }
        
        
    }
}