Faxy a hlasové modemy

Viktor Bulánek, xbulanek@fi.muni.cz


Obsah


Faxy

Obsah


Úvod

V současné době existují 4 skupiny faxů, které rozdělujeme podle jimi podporovaného standardu kodování přenášeného obrazu GROUP. Nejstarší Group 1 byly někdy v 70-tých letech nahrazeny Group 2. Dnes už se většinou používají jen Group 3. Existují i Group 4, které jsou určeny pro digitální ISDN linky. Pro řízení komunikace mezi počítačem a faxem (faxmodemem) byly definovány protokoly (příkazové sady) typově označené jako CLASS, a to Class 1, Class 2 a Class 2.0. Hlavní rozdíl spočívá v tom, nakolik je samotné kódování a dekódování faxového obrazu prováděno programem či samotným modemem. Přenášenými daty je bitmapa obrázku (stránky papíru). V rámci jednoho spojení je možno přenést několik stránek. Komunikace mezi modemem a počítačem je vedena také ve dvou režimech - datovém a příkazovém. Mezi těmito módy se přepíná automaticky v průběhu přenosu.

Před samotným faxováním si ověřte, zda je váš modem i faxmodem:

#cu -l ttyS2
Connected
at+fclass=?
0,1,2
OK
~[].
Disconnected

Příkaz at+fclass=? se zeptá, které příkazové sady modem podporuje. Class 1, 2 a 2.0 jsou pro faxování.

Ke kompresi se používají algoritmy: Korekce chyb: Rozpoznání příchozího volání - fax vysílá ton 1100Hz, podle něj volaný pozná, že na druhé straně je fax.

Formáty faxových stránek

Existují 2 typy G3 souborů, které jsou definovány standardem ITU T.4: nízké rozlišení ( 204 x 98 dpi ) vysoké rozlišení ( 204 x 196 dpi) Šířka faxové stránky je většinou 1728 pixelů, délka je libovolná (někdy může být omezena na délku A4ky). Celá stránka A4 má pak typicky délku okolo 2100 pixelů ve vysokém rozlišení.

Programy

Všechny dostupné programy se skládají z několika částí - obdoba programu getty pro modem, program pro vlastní faxování a někdy i pro převod z/do formátu g3. Většinou obsahují utility pro vypis stavu serveru, vymaz faxu z fronty a změnu atributů faxu ve frontě.

Generování stránek

Samotné G3 soubory je možné vygenerovat několika způsoby. Můžete využít programu 'pbm2g3' z balíku 'mgetty+sendfax' nebo použít GhostScript.
Příklad použití GhostScriptu: 'gs -sDEVICE=ovladač -sOutputFile=fax.g3.%d vas_postscript.ps', kde ovladač je buď 'dfaxlow' nebo 'dfaxhigh'. Nebo můžete převést prosté ASCII soubory do PostScriptu použitím psify taktéž z GhostScript distribuce a ty pak výše uvedeným opět převést do formátu G3.
Použití pbm2g3: 'cat soubor | pbmtext > soubor.pbm; pbm2g3 soubor.pbm > soubor.g3'

Příjem faxů

Příjem faxů probíhá tak, že mgetty naslouchá na modemové lince a případě, že příchozí volání je fax, přijme jej a dále zpracovává a následně ukládá do adresáře 'fax_spool_in' (obvykle '/var/spool/fax/incoming') , který je definován v 'mgetty.config' v adresáři '/etc/mgetty+sendfax/'. Po přijetí je možné také zaslat mail (direktiva 'notify').
Některé další direktivy 'mgetty.config':
fax-id		- telefonní číslo faxu 
fax-owner	- vlastník faxu 
fax-group	- skupina vlastníků faxu 
port-mode	- nastavení práv zařízení 
diskspace	- nastavení velikosti místa určeného pro příjem faxů (default 1MB) 
fax-only yes|no	- modem může sloužit jen pro faxová spojení 

Tisk a prohlížení faxů

Příchozí faxy je možné si vytisknout pomocí několika prográmků. Nejčastějším postupem je převést si G3 soubory do pbm formátu a ten pak do PostScriptu, který vytiskneme:
'cat faxsoubor.g3 | g32pbm -d | pbmtops | lp '
Chceme-li např. spojit více G3 souborů dohromady, můžeme použít g3cat.
Prohlížet faxy pod Xwindow si lze například:
'viewfax -v faxsoubor.g3'
nebo
'cat faxsoubor.g3 | g32pbm >fax.pbm ; xloadimage fax.pbm'
nebo
'g32pbm faxsoubor.g3 | xv -'
nebo
nebo převést G3 soubor do PostScriptu a zobrazit jej v GhostView

Faxy ze stanic pod Windows

http://www.boerde.de/~horstf/
) tak, že kdykoliv klient něco odešle na síťovou tiskárnu, chopí se práce program printfax (viz ukázka ze smb.conf) a otevře spojení na respond spouštěným ve Windows, který se nás dotáže na informace potřebné k odeslání faxu. Tyto se pak předají na vstup programu faxspool. Po odeslání faxu a nebo při chybě se klientovi např. pošle mail nebo zpráva přes winpopup.
Příklad definice ze souboru smb.conf:
; for use with printfax.pl V1.3
;
[fax]
   comment       = Fax
   postscript    = yes
   print command = ( /usr/bin/printfax.pl %I %s\
                     %U %m; rm %s ) &
   printable     = yes
   writable      = no
   path          = /your/samba/print/dir
Druhou alternativou jsou klienti napsaní pro Windows, kteří komunikují s HylaFax serverem svým vlastním definovaným protokolem na svém portu. Namátkou jmenujme WHFC, RelayFax, Cypheus, w2hfax...

Zdroje


Hlasové modemy

Obsah


Úvod

Hlasový modem je zcela běžný modem, určený pro komunikaci nad telefonní linkou. Oproti běžnému modemu má schopnost přehrávat do telefonní linky digitální zvukový signál, který dostane z počítače, a naopak počítači předávat digitalizovaný zvuk, který "slyší" v telefonní lince. Většina hlasových modemů má také schopnost tento zvuk do jisté míry analyzovat - například detekovat ticho na lince, vyzváněcí a obsazovací tóny, a také rozpoznávat DTMF (Dual Tone Modulation Frequency) 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. Navíc volající může pomocí kláves tónové volby určitým poměrně dobře definovaným způsobem předávat hlasovému modemu informaci, kterou můžeme využít pro vytváření i daleko rozsáhlejší aplikace. Mezi nejznámější oblužné programy patří vgetty (jako součást mgetty) nebo mvm.

Instalace

Po rozbalení balíku změnit 'policy.h-dist' na 'policy.h' a podle potřeb jej nakonfigurovat, změnit instalační cesty v souboru 'Makefile'. Poté 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

Konfigurace se provádí v souboru 'Voice.conf'. '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'
'call_program' program volaný po '$rings' zazvoněních
'message_list' uvítací zpráva
'dtmf_program' program, který se spustí po DTMF příkazu
'record_max_len' maximální velikost nahrané zprávy
'message_program' program, který se spustí ke zpracování nahrané zprávy

Hlasový shell

Vgetty naváže spojení s volající stranou po '$rings' zazvoněních. Pokud není definován nějaký skript v 'call_program', začne vgetty přehrávat uvítací zprávu ('message_list'). 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. 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ště 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' s názvem nahrané zprávy jako parametrem. Vgetty pojmenovává každou nahranou zprávu jinak.

V případě, že je definován nějaký skript v 'call_program' V okamžiku příchozího volání spustí vgetty tento hlasový shell, předá mu v proměnných prostředí svoje PID (používá se pak pro komunikaci), a dále čísla dvou deskriptorů. Tyto deskriptory ukazují na dvě roury, které slouží k obousměrné komunikaci mezi vgetty a hlasovým shellem. Shell pak má možnost jednoduchým znakovým protokolem předávat vgetty svoje příkazy ("přehraj tento soubor", "pípni", "nahrej zvuky, které slyšíš z linky, do tohoto souboru", a tak podobně). Na druhou stranu vgetty předává shellu informace o stavu linky ("Slyším DTMF tón #", "Na lince je ticho", "Slyším obsazovací tón, volající asi zavěsil", atd.). Tento protokol umožňuje implementovat vše potřebné pro hlasové aplikace.

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).

Příklad hlasového shellu

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

Zdroje