Hlasov� modem
Obsah
�vod
Hlasov� modem je b�n� modem, kter� nav�c um� p�ehr�vat do telefonn�
linky digit�ln� zvukov� sign�l a tak� opa�n� p�ed�vat po��ta�i
digitalizovan� zvuk z telefonn� linky. D�le umo��uje zvuky z
linky rozpozn�vat (ticho, vyzv�n�c� a obsazovac� t�ny, DTMF t�ny). Pou��v�
se p�edev��m jako telefonn� z�znamn�k. P�i p��choz�m hovoru software
rozpozn�, jde-li o datov�, faxov� nebo hlasov� vol�n�. V posledn�
jmenovan�m p��pad� pak do telefonu p�ehraje zpr�vu pro volaj�c� a umo�n�
zanechat hlasov� vzkaz. Mezi nejzn�m�j�� oblu�n� programy pat�� vgetty
(jako sou��st mgetty) nebo mvm.
Instalace vgetty
Po rozbalen� bal�ku zm�nit policy.h-dist na policy.h a podle pot�eb jej
nakonfigurovat a spustit make. Pot� se p�epnout do adres��e voice a op�t
spustit make. Nakonec spustit make install. Pokud instalujete z RPM-ka,
naistalujte bal�ky mgetty-x.x.xx.rpm a mgetty-voice-x.x.xx.rpm.
Konfigurace
Voice.conf najdete bu� v /etc/mgetty nebo /etc/mgetty+sendfax. Pokud jste
vgetty kompilovali, m��e se konfigura�n� soubor nach�zet v /usr/local/lib
nebo /usr/local/etc. Nejd�le�it�j�� ��dky jsou
- voice_device kde se modem nach�z�, nap�. "voice_device ttyS1"
- rings kolik zvon�n� p�ed nav�z�n�m spojen� �ekat, nap�. "rings 5"
- voice_dir kde se nach�z� hlasov� schr�nka, "voice_dir /var/spool/voice"
- port port na n�m� modem poslouch�, nap�. "port ttyS1"
Hlasov� shell (vgetty)
Vgetty nav�e spojen� s volaj�c� stranou po $rings zazvon�n�ch a za�ne
p�ehr�vat uv�tac� zpr�vu ($message_list ve voice.conf). P�i p�ehr�v�n�
modem p�ed�v� p��choz� DTMF t�ny vgetty. Pokud vgetty dostane sekvenci
*��sla#, jedn� se o DTMF p��kaz. V takov�m p��pad� p�estane p�ehr�vat
�vodn� vzkaz a spust� $dtmf_program s parametrem ��sla (pokud je ve
voice.conf specifikov�n). Dostane-li vgetty na vstup od modemu pouze
��slo, op�t p�estane p�ehr�vat a sna�� se nav�zat datov� spojen� a kdy�
neusp�je, pokus� se je�te o faxov� spojen�. P�ijde-li pouze znak "#",
vgetty jednodu�e zav�s�. Pokud b�hem p�ehr�v�n� nep�ijde ��dn� DTMF t�n,
vy�le vgetty p�pnut� a za�ne nahr�vat vzkaz volaj�c�ho. N�hr�v�n� kon��,
p�ijde-li DTMF t�n (jak je pops�no v��e, v takov�m p��pad� se nahr�n�
zpr�va ma�e), pokud je p�ekro�eno $record_max_len nebo kdy� volaj�c�
zav�s�. Po ukon�en� t�to procedury vgetty spust� $message_program (pokud
je definov�n ve voice.conf) s n�zvem nahran� zpr�vy jako parametrem.
Vgetty pojmenov�v� ka�dou nahranou zpr�vu jinak.
Hlasov� shell (vgetty)
Vgetty nav�e spojen� po $rings a spust� skript $call_program. Po ukon�en�
tohoto skriptu vgetty pokra�uje podle n�vratov�ho k�du skriptu:
- exit code 1: vgetty se pokus� nav�zat se vzd�len�m koncem datov� spojen�
- exit code 2: vgetty se pokus� nav�zat se vzd�len�m koncem faxov� spojen�
- exit code 3: vgetty se pokus� nav�zat se vzd�len�m koncem nejprve
datov� spojen�, pokud neusp�je zkus� faxov�
- p�i ka�d�m j�n�m n�vratov�m k�du vgetty ukon�� komunikaci s modemem
P�i spu�t�n� skriptu mu vgetty p�ed� sv� PID (pou��v� se pro komunikaci) a
d�le ��sla dvou deskriptor�, kter� ukazuj� na dv� roury, slou��c� ke
komunikaci mezi vgetty a shellem. Shell pak m��e vgetty p�ed�vat
sv� p��kazy pomoc� jednoduch�ho znakov�ho protokolu a naopak vgetty
p�ed�v� shellu informace stavu linky. P�i psan� takov�ho skriptu si dejte
pozor, aby ka�d� nahran� zpr�va dostala jin� jm�no.
Uv�tac� zpr�va
Uv�tac� zpr�va mus� b�t ve form�tu, kter�mu rozum� v� modem. Tak�e ji
m��ete nahr�t bu� pomoc� mikrofonu p��kazem vm record -m soubor.rmdn nebo
p�ev�st ji� existuj�c� zpr�vu do form�tu .rmd (pomoc� pvf tools).
Zdroje
P��klad hlasov�ho shellu (skriptu)
send "ENABLE EVENTS"
ANSWER=`receive`
if [ "$ANSWER" != "READY" ]; then
echo "$0: something's wrong" >&2
exit 1
fi
if [ -f demo.rmd ]; then
send "PLAY demo.rmd"
fi
while true; do
ANSWER=`receive`
case $ANSWER in
PLAYING)
ANSWER=`receive`
case $ANSWER in
READY) send "PLAY demo.rmd";;
RECEIVED_DTMF) send "STOP"; proc_dtmf;;
BUSY_TONE) send "STOP"; receive; send "GOODBYE";
receive; exit 0;;
FAX_CALLING_TONE) send "STOP"; receive;
send "GOODBYE"; receive; exit 2;;
esac;;
esac
done