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)