        |
Apuntes sobre el desarrollo de TETRA de los Moya (tetra)
Wednesday, 31 May 2006, 6:22:54 pm
Decodificación de los mensajes "nuevos" en app-debug-print.c Resulta que ya decodificaba el de tirador de alarma S-9000. Añado el de "activacion de redundancia de racks". Falta el de "actualizacion de fichero DVAS".
Hago que mande respuesta a los mensajes que tiene que mandarla Añado en monitor-tetra. el nuevo callback "app_reply" a la lista cb_main, y en app.c añado la implementación.
Wednesday, 31 May 2006, 5:40:10 pm
Puesto trazas en answer-tetra.c:answer_puesta_en_marcha_automatica Para verlas hay que hacer un "tail -f nohup.out | grep answer_puesta_en_marcha_automatica".
Friday, 26 May 2006, 5:12:56 pm
Añadida la versión tetra-1.4.7.2 En la que implementar los nuevos comandos de la serie 3000.
Fuentes
Están en datos1_moviles:/home/metro/wrk/tetra-1.4.7.2/tetra
(Ajustando el número de versión de forma adecuada)
Funcionamiento
1. El programa registra las funciones de decodificación de la pila TETRA. Las capas de la pila son: capa TAL -> CM -> TL -> APP.
La estructura en la que se registran las capas es en la estructura monitor. Se inicializa una estructura de este tipo automáticamente en el main() del programa, y lo asicia al stdin/stdout. Se inicializa una nueva estructura adicional por cada conexión TCP/IP que se abra con el programa.
La manera de registrar funciones de decodificación de la pila en el monitor es llamando a la siguiente función:
proto.c:proto_cb_append (proto_t* this, int pos, proto_cb_func f, void* data, int prio)
La mayoría de las funciones están registradas en monitor-tetra.c, y las tiene agrupadas en listas que llama "cbset" (callbackset -- lista de callbacks), como se ve en:
monitor-tetra.c:static monitor_cbset_t monitor_cbset_main[] = {
[...]
monitor-tetra.c:static monitor_cbset_t monitor_cbset_answer[] = {
[...]
Se registra "automáticamente" el conjunto de funciones del cbset "main" en el monitor que se instala automáticamente en main.c:
main.c: monitor_exec_line (main_monitor, "monitor reset");
main.c: monitor_exec_line (main_monitor, "monitor main");
main.c: monitor_exec_line (main_monitor, "monitor debug");
main.c: monitor_exec_line (main_monitor, "registrar");
Pero ahí no se registran las respuestas automáticas (¡argh!).
Respuestas automáticas
Sólo registra las respuestas automáticas cuando ha hecho la pregunta que la va a requerir. Por ejemplo:
monitor-tetra.c
[...]
int
cmd_puesta_en_marcha_automatica (monitor_handler&str; mon,
int argc, char* argv[])
{
app_message_t msg;
A_data_t data = g_new(A_data_t, 1);
[...]
proto_cb_append (mon->app, CB_IN,
(proto_cb_func) answer_puesta_en_marcha_automatica, data, 100
);
monitor_send_app (mon, &msg, 4 + 3);
return 1;
}
[...] |
|