Назад

Роутер из голосового модема


Предлагаю вашему вниманию софтинку, и, что важнее, исходник от нее. Изначально софтинка была написана для реализации функции DISA в мини-АТС "Порнослоник". Когда на АТС звонили, софтинка брала трубку, пищала в нее и 10 секунд ждала ответа. Если человек набирал DTMFом правильный пароль, софтинка давала команду миниАТС переключить его на нужный номер (для доступа прямо к директору).

Для изготовления роутера бралась старая 286 машина без винта и телевизора, но с флоповодом, и старинный кривенький голосовой модем на 14400 (кто будет делать - имейте в виду, у моего модема был кривой набор команд, поэтому, возможно, придется переделать команды). Всё это грузится с дискеты и запускает софтинку. Девайс работает уже пару лет без передыха и не падает ;)

Эту же софтинку можно переделать для использования в качестве двустороннего роутера для GSM. Голосовой модем принимает DTMF команды как из города, так и из GSMа (если в нем нет распознавалки DTMF) и управляет линией. GSM можно приделать ко второму порту и делать ему АТА на RING, после чего поднимать первым модемом городскую линию. Подключение трубы к линии описано раньше.

Рассмотрим структуру файла команд. STARTUP = ATX0L3#VCL=1#vln=16

Это строка инициализации модема, включающая голосовой режим и распознавание DTMF. Ваш модем может инициализироваться иначе.

SHUTDOWN = ATH0#VCL=0Z0

Это передается модему при выходе.

SUFFIX = 0D

Этот суффикс прога добавляет к строкам, он в НЕХ.

TIMEOUT = 180 ATH0 // Can redirect to "Call all" instead of hangup

Этот таймаут - в тиках таймера, т.е. 180 - это 10 секунд (у таймера - 18,2 тика в секунду).

PORT = 2E8

Номер порта модема.

IRQ = 3

Прерывание выбранного порта.

if \x105\x106\x107\x108\x10F then ATDT!24;h0 //5678#

Вот здесь пошли условия. Если модем обнаруживает строку DTMF 5678#, он делает FLASH, набирает 24 и вешает трубку, таким образом перенаправляя входящий звонок на внутренний номер 24.

if \x101\x102\x103\x104\x10F then ATDT!25;h0 //1234#

То же самое для номера 25.

if RING then ATH1D,;#VBP // if ring D,;=delay 3sec

Снять трубку и включить прием DTMF, если звонят. Внутри проги при настройке на месте, кажется, была введена искусственная задержка, считающая звонки RING. Не помню. В этом исходнике такого вроде нет.

if \x10d then ATH0 // if dialtone

Диалтон определяется модемом, как и DTMF. Строка введена от возможных глюков АТС, когда она звонит и сразу проключает на внешнюю линию. Просто чтобы не подвешивать систему.

if ERROR then ATH0 // if error

Вот, собственно, и все. Счастливой доделки! Если у кого что получится, просьба не стесняться выкладывать.


 Для писем
Гостевая книга