Alejandro Acuña
2024-10-07 e68f1da78bc96da5410d19e0486446917d263fc6
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
package art.servers.etdserver.protocols.diamond;
 
import java.io.ByteArrayOutputStream;
 
public class Diamond_ProtocolWriter 
{
    public static final int MAXLANES            =    8;
    public static final int MAXVALUES           =   32;
    public static final int MAXAXLES            =   32;
    public static final int MAXSPEEDS           =   32;
    public static final int MAXLENGTHS          =   32;
    public static final int MAXGAPS             =   32;
    public static final int MAXHEADWAYS         =   32;
    public static final int MAXSPEEDSBYLENGTHS  =   32;
    public static final int MAXSPEEDSBYAXLES    =   32;
    public static final int MAXINTERVALS        =    6;
    public static final int MAXPERIODS          =   60;
 
 
    public static final int DIAMOND_MODULE_HEADER              =  0x01;
    public static final int DIAMOND_MODULE_BINNED_SETUP        =  0x02;
    public static final int DIAMOND_MODULE_SERIAL_NUMBER       =  0x03;
    public static final int DIAMOND_MODULE_LANE1_CONFIGURATION =  0x10;
    public static final int DIAMOND_MODULE_LANE2_CONFIGURATION =  0x20;
    public static final int DIAMOND_MODULE_LANE3_CONFIGURATION =  0x30;
    public static final int DIAMOND_MODULE_LANE4_CONFIGURATION =  0x40;
    public static final int DIAMOND_MODULE_LANE5_CONFIGURATION =  0x50;
    public static final int DIAMOND_MODULE_LANE6_CONFIGURATION =  0x60;
    public static final int DIAMOND_MODULE_LANE7_CONFIGURATION =  0x70;
    public static final int DIAMOND_MODULE_LANE8_CONFIGURATION =  0x80;
    public static final int DIAMOND_MODULE_COUND_DATA          =  0x90;
    public static final int DIAMOND_MODULE_BINNED_AXLE         =  0x91;
    public static final int DIAMOND_MODULE_BINNED_SPEED        =  0x92;
    public static final int DIAMOND_MODULE_BINNED_LENGTH       =  0x93;
    public static final int DIAMOND_MODULE_BINNED_GAP          =  0x94;
    public static final int DIAMOND_MODULE_BINNED_HEADWAY      =  0x95;
    public static final int DIAMOND_MODULE_BINNED_SPEED_LENGTH =  0x96;
    public static final int DIAMOND_MODULE_BINNED_SPEED_AXLE   =  0x97;
    public static final int DIAMOND_MODULE_ERROR_BIN_INFO      =  0x9F;
    public static final int DIAMOND_MODULE_TIME_DATE           =  0xF0;
    public static final int DIAMOND_MODULE_RECORD_INTERVAL     =  0xF1;
    public static final int DIAMOND_MODULE_END_OF_FILE         =  0xFF;
 
 
 
 
    public static final int DIAMONDSERIAL_OK            =     1;
    public static final int DIAMONDSERIAL_ERROR         =    -1;
    public static final int DIAMONDSERIAL_TIMEOUT       =    -2;
 
 
    public static final int DIAMONDSERIAL_ERROR_OPENPORT        =  -100;
    public static final int DIAMONDSERIAL_ERROR_CONNECT         =  -101;
    public static final int DIAMONDSERIAL_ERROR_SPEEDTABLE      =  -102;
    public static final int DIAMONDSERIAL_ERROR_LENGTHTABLE     =  -103;
    public static final int DIAMONDSERIAL_ERROR_RETRIEVEFILE    =  -104;
    public static final int DIAMONDSERIAL_ERROR_PASSWORD        =  -105;
    public static final int DIAMONDSERIAL_ERROR_NOTBINNED       =  -107;
    public static final int DIAMONDSERIAL_ERROR_NOTBINNEDSPEED  =  -108;
    public static final int DIAMONDSERIAL_ERROR_NOTBINNEDLENGTH =  -109;
    public static final int DIAMONDSERIAL_ERROR_NODATA          =  -110;
    public static final int DIAMONDSERIAL_ERROR_NOLANES         =  -111;
    public static final int DIAMONDSERIAL_ERROR_BINNEDLENGTH    =  -112;
    public static final int DIAMONDSERIAL_ERROR_STORAGEBINNED   =  -113;
    public static final int DIAMONDSERIAL_ERROR_ACTIVEDSPEED    =  -114;
    public static final int DIAMONDSERIAL_ERROR_ACTIVEDLENGTH   =  -115;
    public static final int DIAMONDSERIAL_ERROR_PRES_PRES       =  -116;
    public static final int DIAMONDSERIAL_ERROR_NOCARRILESACTIVOS = -117;
    public static final int DIAMONDSERIAL_ERROR_FECHA           =  -120;
    public static final int DIAMONDSERIAL_ERROR_SIZE            =  -121;
    public static final int DIAMONDSERIAL_MODEMCALLERROR        =  -500;
 
 
    public static final int DIAMOND_OK              =        1;
    public static final int DIAMOND_ERR_00          =       -1;
    public static final int DIAMOND_ERR_01          =       -2;
    public static final int DIAMOND_ERR_02          =       -3;
    public static final int DIAMOND_ERR_03          =       -4;
    public static final int DIAMOND_ERR_04          =       -5;
    public static final int DIAMOND_ERR_05          =       -6;
    public static final int DIAMOND_ERR_06          =       -7;
    public static final int DIAMOND_ERR_07          =       -8;
    public static final int DIAMOND_ERR_08          =       -9;
    public static final int DIAMOND_ERR_09          =      -10;
    public static final int DIAMOND_ERR_0A          =      -11;
    public static final int DIAMOND_ERR_0B          =      -12;
    public static final int DIAMOND_ERROR           =     -501;
 
    public static final int STX = 0x0D;
    public static final int CR = 0x0D;
    public static final int NL = 0x0A;
 
    private ByteArrayOutputStream bos = new ByteArrayOutputStream();
    
    
    public Diamond_ProtocolWriter()
    {
    }
 
    
    public void write(int data)
    {
        bos.write(data);
    }
 
    
    public void writeShort(int data)
    {
        bos.write((data >> 8) & 0xFF);
        bos.write((data & 0xFF));
    }
 
    
    public void writeInt(int data)
    {
        bos.write((data >> 24) & 0xFF);
        bos.write((data >> 16) & 0xFF);
        bos.write((data >> 8) & 0xFF);
        bos.write((data & 0xFF));
    }
 
    
    public void writeString(String data)
    {
        for (int i=0; i<data.length(); i++)
        {
            bos.write(data.charAt(i));
        }
    }
    
 
    public void write(int[] data)
    {
        for (int i=0; i<data.length; i++)
        {
            write(data[i]);
        }
    }
 
 
    public void writeSerialNumber(int serialNumber)
    {
        bos.write((serialNumber >> 8));
        bos.write((serialNumber & 0xFF));
    }
 
 
    public void writeHeader()
    {
        bos.write('S');
        bos.write('K');
        bos.write('P');
        bos.write('3');
    }
 
 
    public void writeCR()
    {
        bos.write(CR);
        bos.write(NL);
    }
 
 
    public void writeNL()
    {
        bos.write(NL);
    }
 
 
    public byte[] createMessage()
    {
        return(toByteArray());
    }
 
 
    public int crc(int[] command)
    {
        int crc = 0;
        for (int i=0; i<command.length; i++)
            crc += command[i];
        return(crc%256);
    }
    
    
 
    public byte[] toByteArray()
    {
        return bos.toByteArray();
    }
            
 
    public int[] toIntegerArray()
    {
        byte[] data = bos.toByteArray();
        int[] result = new int[data.length];
        for (int i=0; i<data.length; i++) result[i] = (int)data[i] & 0xFF;
        return result;
    }
 
}