Alejandro Acuña
2024-07-30 65a64a81d30f00f1fffd5da6866850e1308e1135
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
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
package test.protocol.musatel;
 
import java.io.InputStream;
 
 
public class MusatelInputStream extends MusatelProtocol
{
    private ControllerMusatel controller = null;
    
    public MusatelInputStream (ControllerMusatel controller)
    {
        this.controller = controller;
    }
 
 
    public void response() throws Exception
    {
        manage(controller.is);
    }
        
    
    public void response(InputStream input) throws Exception
    {
        manage(input);
    }
    
    
    
    private void manage(InputStream input) throws Exception
    {
        int address = input.read();
        int function = input.read();
 
        switch (function)
        {
            case MusatelProtocol.DEM_USE: DEM_USE(input.read()); break;
            case MusatelProtocol.DEM_SER: DEM_SER(input.read()); break;
            case MusatelProtocol.ENV_ALA : ENV_ALA(input.read(), input.read()); break;
            case MusatelProtocol.ACK_FON_ON : ACK_FON_ON(); break;
            case MusatelProtocol.ACK_FON_OFF : ACK_FON_OFF(); break;
            case MusatelProtocol.ACK_TON_ON : ACK_TON_ON(); break;
            case MusatelProtocol.ACK_TON_OFF : ACK_TON_OFF(); break;
            case MusatelProtocol.RES_TST_FON : RES_TST_FON(); break;
            case MusatelProtocol.RES_TST_MAN : RES_TST_MAN(); break;
            case MusatelProtocol.ACK_VOZ_ON : ACK_VOZ_ON(); break;
            case MusatelProtocol.ACK_VOZ_OFF : ACK_VOZ_OFF(); break;
            case MusatelProtocol.ACK_ADJ_VOL : ACK_ADJ_VOL(); break;
            case MusatelProtocol.NACK : NACK(); break;
            
            default:
            {
                System.out.println("< UNKNOWN;" +  String.format("%02X", function));
                break;
            }
        }
 
        int CRC1 = input.read();
        int CRC2 = input.read();
        
    }
 
 
    
 
 
    /**
     * Una vez reciba el poste ACK_DEM_USE, actuará el sintetizador con el mensaje de espera en cuatro idiomas<br>
     * Acabado el mensaje, actuará el tono de llamada durante un máximo de 2 minutos<br>
     * Si el poste no recibe en 5 segundos el ACK_DEM_USE enviará la demanda 3 veces, en tiempos de 5
     * segundos. Si ninguno de los intentos fuera positivo pasará a estar en estado de "Fuera de Servicio" y
     * activará el sintetizador de voz con el mensaje oportuno durante 1 minuto<br>
     * El poste pasa a fonía y el sintetizador se desactiva. Para mantener la fonía activa el centro de control
     * debe enviar ORD_FON_ON periódicamente al poste en un intervalo inferior a dos minutos
     * En caso contrario el poste pasará automáticamente a reposo<br>
     * Se corta la fonía en el poste.El poste pasa a reposo.
     * 
     * Poste                Central
     * ------------------------------------
     * DEM_USE      ---->      
     *              <----   ACK_DEM_USE
     *              <----   ORD_FON_ON 
     * ACK_FON_ON   ---->
     *              <----   ORD_FON_ON 
     * ACK_FON_ON   ---->
     *              <----   ORD_FON_ON 
     * ACK_FON_ON   ---->
     *              <----   ORD_FON_OFF
     * ACK_FON_OFF  ---->
     */
    
    private void DEM_USE(int type) throws Exception
    {
        System.out.println("< DEM_USE;type=" + String.format("%02X", type));
        controller.output.function(MusatelProtocol.ACK_DEM_USE);
        //controller.output.callWait();
        //Thread.sleep(5000);
        //controller.output.openAudio("172.16.11.210", 6666);
    }
    
    
    
    
 
 
    /**
     * Una vez reciba el poste ACK_DEM_SER, actuará el sintetizador con el mensaje de espera en cuatro  idiomas<br> 
     * Acabado el mensaje, actuará el tono de llamada durante un máximo de 2 minutos<br>
     * Si el poste no recibe en 5 segundos el ACK_DEM_SER enviará la demanda 3 veces, en tiempos de 5
     * segundos. Si ninguno de los intentos fuera positivo pasará a estar en estado de "Fuera de Servicio" y
     * activará el sintetizador de voz con el mensaje oportuno durante 1 minuto<br>
     * El poste pasa a fonía y el sintetizador se desactiva.Para mantener la fonía activa el centro de control
     * debe enviar ORD_FON_ON periódicamente al poste en un intervalo inferior a dos minutos<br> 
     * En caso contrario el poste pasará automáticamente a reposo<br>
     * Se corta la fonía en el poste.El poste pasa a reposo
     * 
     * Poste                Central
     * ------------------------------------
     * DEM_SER      ---->      
     *              <----   ACK_DEM_SER
     *              <----   ORD_FON_ON 
     * ACK_FON_ON   ---->
     *              <----   ORD_FON_ON 
     * ACK_FON_ON   ---->
     *              <----   ORD_FON_ON 
     * ACK_FON_ON   ---->
     *              <----   ORD_FON_OFF
     * ACK_FON_OFF  ---->
     */
    
    private void DEM_SER(int type) throws Exception
    {
        System.out.println("< DEM_SER;type=" + String.format("%02X", type));
        controller.output.function(MusatelProtocol.ACK_DEM_SER);
    }
    
    
    
    /**
     *El poste envía solamente una vez cada alarma para evitar el envío repetitivo de alarmas<br> 
     * El test demantenimiento al poste refresca el estado de las alarmas. El proceso es el siguiente:<br>
     * El poste enviará SOLAMENTE UNA VEZ la alarma (Puerta abierta, batería baja)<br>
     * - Cuando el operador haga un test de mantenimiento al poste emisor de la alarma, se
     * refrescará (reseteará) indicando en la respuesta el estado de la alarma en dicho momento<br>
     * - Suponiendo que una alarma, en el momento del test, se hubiera corregido
     * momentáneamente, en el resultado del test se reflejará como alarma OK, anulándose
     * automáticamente de la ventana de alarmas pendientes<br>
     * - Si después del test se volviese a producir de nuevo la misma alarma anterior, el poste volverá
     * a enviar de nuevo SOLAMENTE UNA VEZ dicha alarma reflejándose otra vez en la ventana
     * de alarmas pendientes<br> 
     */
    private void ENV_ALA(int primaryState, int secondaryState) throws Exception
    {
        System.out.println("< ENV_ALA;primary state=" + String.format("%02X", primaryState) + ";secondary state=" + String.format("%02X", secondaryState));
        controller.output.function(MusatelProtocol.ACK_ENV_ALA);
    }    
        
    
    
    private void ACK_FON_ON()
    {
        System.out.println("< ACK_FON_ON");
    }            
            
 
    private void ACK_FON_OFF()
    {
        System.out.println("< ACK_FON_ON");
    }            
    
            
    private void ACK_TON_ON()
    {
        System.out.println("< ACK_TON_ON");
    }            
            
 
    private void ACK_TON_OFF()
    {
        System.out.println("< ACK_TON_ON");
    }            
            
    
    
    private void RES_TST_FON()
    {
        System.out.println("< RES_TST_FON");
    }            
            
    
    
    private void RES_TST_MAN()
    {
        System.out.println("< RES_TST_MAN");
    }            
            
    
    
    
    private void ACK_VOZ_ON()
    {
        System.out.println("< ACK_VOZ_ON");
    }            
            
    
    
    
    private void ACK_VOZ_OFF()
    {
        System.out.println("< ACK_VOZ_OFF");
    }            
            
    
    
    
    private void ACK_ADJ_VOL()
    {
        System.out.println("< ACK_ADJ_VOL");
    }            
            
    
    
   
    
    private void NACK()
    {
        System.out.println("< NACK");
    }            
            
    
    
}