marcación, detección de paso a falta, tonos, pulsos, interrupción

Anuncio
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6. TARJETA TELEFÓNICA:
MARCACIÓN, DETECCIÓN DE
PASO A FALTA, TONOS, PULSOS,
INTERRUPCIÓN
6.1 INTRODUCCIÓN
En este capítulo se comentan las funciones relacionadas con la tarjeta interfaz de
línea telefónica (IFTEL): detección de llamada, marcación, detección de paso a falta,
detección de tonos multifrecuencia, etc. Se tratarán aspectos de implementación, como
el diseño de las funciones idle de segundo nivel de cada una de ellas, y sus funciones
‘inic’ y ‘fin’ asociadas. También se incluyen los diagramas de flujo de las funciones idle
de segundo nivel para facilitar el seguimiento de las explicaciones sobre su
implementación.
Pág. 6-1
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.2 DETECCIÓN DE LLAMADA
Fundamental para que se pueda responder a los usuarios que llaman al sistema.
DETALLES DE IMPLEMENTACIÓN:
•
Función inic: la variable rings_detectados se pone a cero.
•
Función idle: se considera que hay llamada cuando se han detectado el número de
tonos de llamada especificado en la variable interna s_MAX_RING. La razón de
esperar cinco segundos es asegurarnos de que se ha producido un cambio en la señal
de línea (si había tono de llamada, al cabo de cinco segundos ya no debe estar
presente, y viceversa).
•
Función fin: incrementa el número de llamadas en el fichero TADE.INI e inicia la
detección de paso a falta, llamando a su función inic y activando la función idle de
segundo nivel.
Pág. 6-2
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Pág. 6-3
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.3 COLGAR
Una vez finalizado el servicio, se deberá colgar para poder esperar una nueva
llamada.
DETALLES DE IMPLEMENTACIÓN:
Se trata de una función predefinida que genera un evento nulo, por lo que no
tiene función idle asociada.
6.4 DESCOLGAR
Una vez detectada la llamada, el sistema debe ser capaz de descolgar la línea
telefónica para poder comenzar la conversación.
DETALLES DE IMPLEMENTACIÓN:
•
•
•
Función inic: descuelga y arranca el temporizador DESCOLGAR, que será
utilizado por la función idle.
Función idle: para dar tiempo a que se estabilice la línea, espera hasta que venza el
temporizador anterior, que está fijado en un segundo.
Función fin: no hace nada.
Lo anterior es lo que ocurre cuando el sistema descuelga tras haber detectado una
llamada mientras estaba ejecutando la instrucción esperar_llamada. Sin embargo, la
instrucción descolgar del lenguaje no realiza ningún retardo, simplemente descuelga,
tratándose también de una función predefinida, pero genera un evento nulo.
Pág. 6-4
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.5 DETECCIÓN DE ‘PASO A FALTA’
Hay ocasiones en las que los usuarios cuelgan antes de que finalice la aplicación
o en las que puede producirse una desconexión por fallo en la red telefónica. En estos
casos, el sistema debe detectar esta situación y reiniciarse para atender la próxima
llamada.
DETALLES DE IMPLEMENTACIÓN:
•
Función inic: inicializa la cola circular donde se guardarán los resultados de
muestrear la línea en busca del tono de paso a falta y arranca los temporizadores
que utiliza la función idle.
•
Función idle: lo primero que hace es comprobar si se ha excedido el tiempo
máximo fijado para la llamada (controlado por la variable interna
n_timeout_sistema). Si es así, producimos un paso a falta falso, para que el sistema
cuelgue y expulse al usuario.
La decisión de que hay paso a falta se toma examinando el número de
detecciones que hay en la cola y decidiendo por mayoría. Cada cierto tiempo se
vacía el contenido de la cola, para evitar que falsas detecciones afecten a nuestra
decisión.
Para consultar la tarjeta IFTEL conviene resetear el integrado encargado de
detectar el tono de paso a falta y leerlo 2 milisegundos después, pues si lo leemos
sin resetearlo previamente podemos encontrarnos con que ha detectado el tono al
hablar el usuario o al reproducir un mensaje; es decir, cuando no lo hay. Esta es la
razón de los dos estados que tiene esta función, implementar un retardo de 2
milisegundos no bloqueante.
•
Función fin: no hace nada.
La razón de la ‘detección extra’ que se puede ver en el diagrama de flujo se debe a
que la tarjeta IFTEL, a veces, informa de que ha detectado el tono de paso a falta en la
línea cuando hay señal de voz, concretamente al reproducir un mensaje pregrabado,
sintetizar o incluso mientras se está grabando o reconociendo voz.
La solución adoptada ha sido no realizar la detección de paso a falta en esas
circunstancias. El problema que plantea esta medida es que podría haber circunstancias
en que no se detectara, pensemos en una serie de reproducciones consecutivas, como
ocurre cuando se reproduce una cadena de dígitos.
Una solución de compromiso es hacer una detección ‘extra’ después de realizar las
acciones anteriores en las que no es posible realizar la detección de paso a falta. Para
lograrlo nos aprovechamos de la arquitectura del sistema en lo referente al
funcionamiento por eventos y a la jerarquía de funciones idle.
Pág. 6-5
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Supongamos que vamos a iniciar la reproducción de un fichero (el procedimiento es
idéntico para los otros casos). Las acciones a realizar son las siguientes:
•
•
•
En la función inic de la reproducción impedimos la detección del paso a falta
poniendo a cero el campo inicio del flag asociado a la función idle de la función
paso a falta.
Cuando acaba la reproducción, desactivamos su función idle de segundo nivel y
deberíamos generar el evento asociado a la reproducción, como se explicó en el
Capítulo 2, pero no lo vamos a hacer, pues si lo hiciéramos avanzaría el autómata.
En su lugar, tomamos nota de la función que acabamos de realizar (una
reproducción), activamos la detección del paso a falta, poniendo a 1 el campo inicio
de su flag asociado, y arrancamos un temporizador.
Es decir, en vez de hacer:
void idle_reproducir(void)
{
for (int linea = 0; linea < MAX_NUM_LINEAS; linea++)
{
// si estamos reproduciendo en esta línea
if (flag[linea].repro.inicio)
{
if (idle_repro_visha(linea+1) == TODAVIA_NO)
{
//nada
}
else
{
flag[linea].repro.inicio = 0; // desactivamos el idle
fin_repro(linea+1)
// finalizamos la reproducción
flag[linea].repro.fin = 1;
// activamos el cambio de estado
}
}
}
}
Hacemos lo siguiente:
Pág. 6-6
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
void idle_reproducir(void)
{
for (int linea = 0; linea < MAX_NUM_LINEAS; linea++)
{
// si estamos reproduciendo en esta línea
if (flag[linea].repro.inicio)
{
if (idle_repro_visha(linea+1) == TODAVIA_NO)
{
//nada
}
else
{
flag[linea].repro.inicio = 0;
// desactivamos el idle
fin_repro(linea+1)
// finalizamos la reproducción
deteccion_extra[linea] = 1;
// hacemos detección extra
que_deteccion_extra[linea] = 2;
// de la función reproducción
flag[linea].ha_colgado.inicio = 1;
// activamos detección ‘paso a falta’
// arrancamos temporizador
arranca_temporizador(ID_TIMER_HA_COLGADO_EXTRA, linea+1,
T_DETECCION_EXTRA);
}
}
}
}
•
•
•
Ahora si está activa la función idle de segundo nivel de la detección de paso a falta.
Cuando venza el temporizador anterior retornará PASO_TIEMPO, y la función idle
de primer nivel será consciente de que acaba de terminar una detección extra de
paso a falta.
Es en este momento cuando podemos generar el evento que dejemos pendiente. Lo
cual podemos hacer, pues tomemos nota de la función que solicitó esta detección
extra que acaba de concluir (variable que_deteccion_extra). En este caso concreto,
para generar el evento basta poner a 1 el campo ‘fin’ del flag asociado a la función
reproducir.
Si, mientras se está realizando la detección extra, se detecta el paso a falta, se
generará el error COLGADO y se atenderá en el tratamiento de error COLGADO de
la aplicación.
Resumiendo, nos aprovechamos de la arquitectura software del sistema para, en
lugar de generar el evento donde deberíamos, retardarlo (lo hacemos en otro lugar), y
mientras realizar otra acción. Dado que el automáta está esperando ese evento, la
aplicación no avanza hasta que lo generamos.
Pág. 6-7
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Pág. 6-8
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.6 FLASH
Realiza un microcorte en la línea telefónica de 100 milisegundos. Es necesario
para redirigir llamadas en centralitas de tipo IBERCOM.
DETALLES DE IMPLEMENTACIÓN:
•
•
•
Función inic: no hace nada.
Función idle: cuelga, arranca un temporizador de 100 milisegundos, y cuando
vence, descuelga.
Función fin: no hace nada.
Pág. 6-9
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Pág. 6-10
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.7 RECONOCIMIENTO DE TONOS
MULTIFRECUENCIA (DTMF)
Esta característica es muy útil en cualquier sistema telefónico, pues permite al
usuario introducir datos con una mayor fiabilidad que la voz, aún en situaciones de alto
ruido de línea. Esta funcionalidad está controlada por la variable interna s_tipo_reco.
DETALLES DE IMPLEMENTACIÓN:
•
Función inic: inicializa la pila utilizada para contabilizar los tonos detectados, el
contador de lecturas de tonos multifrecuencia, el temporizador que nos avisará que
ha pasado un tiempo excesivo desde la última lectura y el temporizador del tiempo
entre lecturas.
•
Función idle: comienza enviando un pitido de una décima de segundo al usuario,
sólo en el caso de que haya que hacerlo (variable interna s_usa_pitido a 1 y no se
haya enviado ya en el idle de reconocimiento de voz, pues a este idle se le llama
desde el idle de reconocimiento de voz); de ahí la condición que aparece en el
diagrama (!reco_voz_activo && usa_pitido). La detección del tono multifrecuencia
tiene dos etapas bien diferenciadas. En la primera se detecta la existencia de un tono
y en la segunda su ausencia (se ‘consume’). El efecto conseguido es detectar el tono,
no cuando el usuario pulsa una tecla en su teléfono, sino cuando deja de pulsarla. Si
no lo hiciéramos así podría ocurrir que el sistema comenzase la reproducción de un
mensaje mientras el usuario todavía está pulsando la tecla, lo cual le confundiría o
interrumpiría la reproducción.
En la primera etapa se toman varias lecturas (en el diagrama se considera que se
toman 10, pero es un valor configurable mediante una entrada en el fichero
IFTEL.INI, ver Apéndice A Manual del Usuario), y sólo si para alguno de los tonos
multifrecuencia obtenidos se supera un determinado umbral se da por válido. Esto
equivale a realizar un filtrado, lo cual es conveniente debido al ruido que suele estar
presente en las líneas telefónicas. En la segunda etapa también se toman varias
lecturas y sólo se valida el tono detectado en la primera etapa si en ninguna de esas
lecturas se ha detectado un tono.
•
Función fin: no hace nada.
Pág. 6-11
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Pág. 6-12
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.8 INTERRUPCIÓN
Permite al usuario interrumpir los mensajes que le manda el sistema, tanto si son
mensajes pregrabados como si se utiliza conversión texto-voz.
Esta funcionalidad está controlada por la variable interna n_interrumpir.
DETALLES DE IMPLEMENTACIÓN:
•
Función inic: inicializa la pila utilizada para contabilizar los tonos detectados, el
contador de lecturas de tonos multifrecuencia, el temporizador que nos avisará que
ha pasado un tiempo excesivo desde la última lectura y el temporizador del tiempo
entre lecturas.
•
Función idle: tiene dos etapas bien diferenciadas. Primero detecta la existencia de
un tono y después su ausencia (lo ‘consume’). El efecto conseguido es detectar el
tono, no cuando el usuario pulsa una tecla en su teléfono, sino cuando deja de
pulsarla.
En la primera etapa se toman varias lecturas (en el diagrama se considera que se
toman 10, pero es un valor configurable mediante una entrada en el fichero
IFTEL.INI, ver Apéndice A Manual del Usuario), y sólo si para alguno de los tonos
multifrecuencia obtenidos se supera un determinado umbral se da por válido. Esto
equivale a realizar un filtrado, lo cual es conveniente debido al ruido que suele estar
presente en las líneas telefónicas. En la segunda etapa también se toman varias
lecturas y sólo se valida el tono detectado en la primera etapa si en ninguna de esas
lecturas se ha detectado un tono.
•
Función fin: no hace nada.
Pág. 6-13
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Pág. 6-14
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6.9 MARCACIÓN
Generalmente los sistemas telefónicos están especializados en el manejo de
llamadas de entrada, pero en ocasiones puede ser necesario que realicen llamadas, para
lo cual deben generar tonos multifrecuencia o pulsos, según el tipo de central a la que
pertenece la línea telefónica utilizada por el sistema. Ejemplos de aplicaciones que
deban generar llamadas son las encargadas de realizar encuestas telefónicas
automáticamente, obtener bases de datos de voz y otras.
6.9.1 Marcación por pulsos
Es el sistema más sencillo. Consiste en, una vez descolgado el terminal
telefónico, realizar tantas secuencias colgar|descolgar como indique el número a marcar,
a intervalos de 100 milisegundos (para el cero se deben generar 10).
6.9.2 Marcación por tonos multifrecuencia
Los tonos multifrecuencia son uno de los mecanismos que permiten enviar
información de señalización a la red telefónica. Su uso más común es indicar el número
de destino al que se desea llamar, pero también pueden servir para comunicarse con una
aplicación telefónica, dar instrucciones remotamente a un contestador automático y
otras muchas funciones que desempeñan en la RDSI (Red Digital de Servicios
Integrados).
Consisten en señales dentro de la banda telefónica diseñadas para no interferir
con las señales de voz. Cada tono multifrecuencia esta formado por un par de
frecuencias elegidas de forma que es improbable que se produzcan durante una
conversación telefónica.
Al ser señales dentro de banda, se transmiten de extremo a extremo a través de la
red telefónica, se propagan simultáneamente con la voz y sin que se enmascaren
mutuamente y se pueden utilizar tanto en sistemas analógicos como digitales.
Las frecuencias que componen el tono multifrecuencia se eligen de entre dos
grupos: uno de frecuencias altas y otro de bajas frecuencias, como se puede ver en la
siguiente figura.
Pág. 6-15
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
1209 Hz 1336 Hz 1477 Hz
1
ABC
2
DEF
3
GHI
4
JKL
5
MNO
770 Hz
6
PRS
7
TUV
8
WXY
852 Hz
9
*
OPE
0
#
697 Hz
941 Hz
Para enviar estos tonos a la línea telefónica se calculan las muestras
correspondientes al tono a enviar en tiempo de ejecución y se envían al DSP para que
éste las reproduzca.
6.9.3 Función predefinida MARCAR
Se encarga de marcar los números que se le indiquen. La marcación se puede
realizar mediante tonos multifrecuencia o con pulsos. Requiere dos parámetros de
entrada, el tipo de marcación que se desea utilizar y el número a marcar. No devuelve
ningún parámetro de salida.
DETALLES DE IMPLEMENTACIÓN:
•
•
•
Función inic: si la marcación ha de realizarse por pulsos, inicializa la variable
contador_pulsos a 1. Si se va a utilizar marcación por tonos multifrecuencia , calcula
el tono a enviar y programa el DSP para que empiece a pitar (el tono se envía a la
zona de memoria que el DSP reproduce cuando se le da la orden de pitar).
Función idle: Sólo realiza la marcación de un dígito. Es responsabilidad de la
función idle de primer nivel llamarle tantas veces como dígitos haya que marcar.
Función fin: en el caso de marcación por pulsos, no hace nada. Para la marcación
por tonos, deja el DSP en estado OCIOSO.
Pág. 6-16
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
Pág. 6-17
Capítulo 6: Tarjeta telefónica: marcación, detección de paso a falta, tonos, pulsos, interrupción
6. TARJETA TELEFÓNICA: MARCACIÓN, DETECCIÓN DE PASO A FALTA,
TONOS, PULSOS, INTERRUPCIÓN...................................................................... 6-1
6.1 INTRODUCCIóN....................................................................................................6-1
6.2 DETECCIóN DE LLAMADA ................................................................................6-2
6.3 COLGAR.................................................................................................................6-4
6.4 DESCOLGAR .........................................................................................................6-4
6.5 DETECCIóN DE ‘PASO A FALTA’......................................................................6-5
6.6 FLASH.....................................................................................................................6-9
6.7 RECONOCIMIENTO DE TONOS MULTIFRECUENCIA (DTMF)................6-11
6.8 INTERRUPCIóN...................................................................................................6-13
6.9 MARCACIóN........................................................................................................6-15
6.9.1
6.9.2
6.9.3
Marcación por pulsos ................................................................................................. 6-15
Marcación por tonos multifrecuencia.......................................................................... 6-15
Función predefinida MARCAR.................................................................................. 6-16
Pág. 6-18
Descargar