Захотелось мне задействовать последний не настроенный под Linux интерфейс на заслуженном ноутбуке HP Compaq nc6320 Notebook PC, а именно - модем. Поиск на сайте производителя выдал информацию о том, что на нем установлен программный факс-модем, он же "soft-modem", Conexant HDAUDIO с функцией SmartCP.
"Софт-модем" - это такой модем, у которого реализовано только DSP (максимально простой и дешёвый, а то и этого нет), а обработка, кодирование данных и исправление ошибок осуществляется драйвером. В "обычных" модемах все эти операции осуществляется аппаратным обеспечением самого модема. "Дерьмецо" по существу, конечно, с какой стороны не посмотри, но раз есть - приходиться использовать.
Итак, приступаем к поиску модема.
Просмотрим список устройств обнаруженных на PCI шине ноутбука:
# lspci | grep -i modem
....
Ничего нет, похожего на модем, как автономное устройство.
"Софт-модемы" работают в весьма тесной связке со звуковым чипом. Смотрим, как у нас дела со звуком:
# lspci | grep -i audio
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
Хорошо, устройство чётко опознано. Работа звуковой подсистемы у меня обеспечивается пакетом ALSA. Воспользуемся утилитой "aplay" из указанного пакета для просмотра списка аудио оборудования:
# aplay --list-devices
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: AD198x Analog [AD198x Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 6: Si3054 Modem [Si3054 Modem]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 0: AD198x Analog [AD198x Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 6: Si3054 Modem [Si3054 Modem]
Subdevices: 1/1
Subdevice #0: subdevice #0
Прогресс на лицо, обнаружен аналоговый модем на чипе Si3054 в составе аппаратного обеспечения звуковой подсистемы, лучше, чем ничего.
Непродолжительные поиски в доступных источниках информации показали, что для чипа Si3054 есть узда в виде slmodem (SmartLink software modem daemon) работающая только через ALSA, инсталлируем:
# aptitude install slmodem
Установщик создал для своего "демона" группу и пользователя, нам это ещё пригодится при настройке обращения к модему:
....
Adding system user `Slmodemd' ...
Adding new group `Slmodemd' ...
Adding new user `Slmodemd' with group `Slmodemd' ...
....
Adding system user `Slmodemd' ...
Adding new group `Slmodemd' ...
Adding new user `Slmodemd' with group `Slmodemd' ...
....
Для обеспечения доступа к аппаратной составляющей необходимо загрузка установленных с пакетом "slmodem" модулей "slamr" или "slusb", надо полагать, в зависимости от того, какой тип модема мы применяем.
Создатели slmodem люди умные, видно по init скрипту, как они заботятся о том, чтобы запуск "демона" прошёл успешно в автоматическом режиме, не доставляя никаких проблем пользователю. Всё так, однако я настраиваю модем для исключительно редкого использования (вполне хватает пока Ethernet, WiFi, Bluetooth, GPRS и так далее и тому подобного), потому отключим автозапуск путём корректировки файла "/etc/default/sl-modem-daemon":
....
DONTSTART=1
....
DONTSTART=1
....
Запускаем утилиту, эмулятор порта с работающим модемом (понятно, что hw:0,6 - указатель на номер карты и устройства извлечённые из вывода утилит сканирования наличествующего оборудования):
# slmodemd --alsa hw:0,6
При необходимости, при запуске можно указать страну, к особенностям телефонной сети необходимо адаптироваться:
# slmodemd -c RUSSIA --alsa hw:0,6
SmartLink Soft Modem: version 2.9.9e-pre1 Sep 7 2008 23:29:38
symbolic link `/dev/ttySL0' -> `/dev/pts/6' created.
modem `hw:0,6' created. TTY is `/dev/pts/6'
Use `/dev/ttySL0' as modem device, Ctrl+C for termination.
symbolic link `/dev/ttySL0' -> `/dev/pts/6' created.
modem `hw:0,6' created. TTY is `/dev/pts/6'
Use `/dev/ttySL0' as modem device, Ctrl+C for termination.
# ls -l /dev/ttySL*
lrwxrwxrwx 1 root root 10 2010-06-18 13:46 /dev/ttySL0 -> /dev/pts/6
Инсталлируем утилиту "cu" для теста работы с модемом:
# aptitude install cu
Тестируем с помощью HAYES совместимых AT команд:
# cu -l /dev/ttySL0
Connected.
AT
OK
ATI0
SmartLink Soft Modem
OK
ATI2
SmartLink Soft Modem, 2.9.9e-pre1
Smart Link Ltd.
OK
ATI3
hw:0,6
alsa modem driver
OK
AT
OK
ATI0
SmartLink Soft Modem
OK
ATI2
SmartLink Soft Modem, 2.9.9e-pre1
Smart Link Ltd.
OK
ATI3
hw:0,6
alsa modem driver
OK
Прекрасно, модем откликается. Пытаемся позвонить на произвольный номер из консоли терминала:
ATD12345
NO CARRIER
NO CARRIER
Не работает, и вывод slmodemd при каждой попытке набрать номер показывает следующее:
....
error: period size 48 is not supported by playback (64).
....
error: period size 48 is not supported by playback (64).
....
Поиск по этой ошибке наводит на множество постов в форумах, одна из наиболее предполагаемых версий - проблемы в работе ALSA. Мне, как весьма слабо разбирающемуся во всех этих тонкостях "кёрнел-хакерства", по началу не пришло в голову ничего лучшего, как скачать наиболее свежую версию "slmodem" и попытаться откомпилировать её. Нашёл по адресу http://linmodems.technion.ac.il/packages/smartlink/ последнюю бинарную сборку утилиты (в моём случае сборка от 13 Марта 2010 года), вынул её из архива и воспользовался ею, не удаляя оригинальный пакет Debian Lenny. Как ни удивительно, но оно работает.
Пытаемся позвонить на несуществующий номер из консоли терминала:
ATDT12345
NO DIALTONE
ATI2
SmartLink Soft Modem, 2.9.11
Smart Link Ltd.
OK
NO DIALTONE
ATI2
SmartLink Soft Modem, 2.9.11
Smart Link Ltd.
OK
Ура! Вывод "демона" slmodemd чист, как слеза младенца.
Пытаемся позвонить на существующий номер модемного "пула" павлодарского провайдера Dial-Up из консоли терминала:
ATDT390039
CONNECT 52000
GW2.PWQ1 line 42 Dial-In: 390039
Welcome to Nursat Access Point!
If you have any question/troubles/comments, please contact us:
+7-327-260-8000 +7-327-298-0000 +7-327-260-8120 (Fax)
http://noc.nursat.net
ip-op@nursat.net
User Access Verification
Username: test
Password:
% Authentication failed.
Username: nursat
Password:
GW2.PWQ1>?
Exec commands:
disable Turn off privileged commands
exit Exit from the EXEC
help Description of the interactive help system
logout Exit from the EXEC
ppp Start IETF Point-to-Point Protocol (PPP)
slip Start Serial-line IP (SLIP)
GW2.PWQ1>exit
NO CARRIER
CONNECT 52000
GW2.PWQ1 line 42 Dial-In: 390039
Welcome to Nursat Access Point!
If you have any question/troubles/comments, please contact us:
+7-327-260-8000 +7-327-298-0000 +7-327-260-8120 (Fax)
http://noc.nursat.net
ip-op@nursat.net
User Access Verification
Username: test
Password:
% Authentication failed.
Username: nursat
Password:
GW2.PWQ1>?
Exec commands:
disable Turn off privileged commands
exit Exit from the EXEC
help Description of the interactive help system
logout Exit from the EXEC
ppp Start IETF Point-to-Point Protocol (PPP)
slip Start Serial-line IP (SLIP)
GW2.PWQ1>exit
NO CARRIER
Пляшем танец папуаса, который смог включить портативный телевизионный приёмник, не подозревающего о том, что после дня эксплуатации ему придётся искать на своём тихоокеанском острове батарейки, которые распространяются только дилерами на территории США. В общем - модем заработал.
То ли реализация эмуляции модема не проработана, то ли ещё что, но я не смог включить "пищалку" устройства для индикации процесса набора номера и этапов работу с помощью таких команд, как:
ATL Громкость звука:
Параметры: 0, 1, 2, 3;
По умолчанию: 2;
ATL0 Низкая громкость;
ATL1 Низкая громкость;
ATL2 Средняя громкость;
ATL3 Высокая громкость.
По умолчанию: 2;
ATL0 Низкая громкость;
ATL1 Низкая громкость;
ATL2 Средняя громкость;
ATL3 Высокая громкость.
ATM Громкость звука:
Параметры: 0, 1, 2, 3;
По умолчанию: 1 (громкоговоритель включён до появления несущей);
ATM0 Громкоговоритель выключен всегда;
ATM1 Громкоговоритель включён до появления несущей;
ATM2 Громкоговоритель включён всегда;
ATM3 То же, что и ATM1, но тон DTMF не слышен.
По умолчанию: 1 (громкоговоритель включён до появления несущей);
ATM0 Громкоговоритель выключен всегда;
ATM1 Громкоговоритель включён до появления несущей;
ATM2 Громкоговоритель включён всегда;
ATM3 То же, что и ATM1, но тон DTMF не слышен.
Под Windows, вроде бы, модем пищал, хотя давно это было, года три назад, могу и напутать что нибудь. В общем, под Linux модем молча, как партизан, делает своё дело.
Кстати, учитывая то, что технология Dial-Up подразумевает работу в диапазоне голосовых частот, её параллельной работе с асинхронным DSL (в Казахстане это Megaline, например) ничего не мешает. Так что, можно воспользоваться одновременным доступом по широкополосному каналу в "Интернет" и по Dial-Up - в FIDO.