Оригинальный способ сокращения расходов на оплату междугородних переговоров по сотовому телефону. Еще несколько лет назад сотовый телефон являлся недосягаемым показателем достатка и простому смертному человеку он просто был не по карману, но чудеса конкуренции постоянно приближают ценовую планку к нашему среднестатистическому «Я». Однако тарифные планы у многих операторов могли бы быть и пониже. Поэтому, приобретя сотовый телефон, каждый в первую очередь задумывается, как сэкономить на разговорах. Ситуацию, в которой мы оказались1, можно перенести практически на любой регион. В нашей родной Удмуртии есть оператор сотовой связи, называющий себя «МТС-Удмуртия». Зона покрытия помимо Ижевска включает еще несколько городов и населенные пункты вокруг них, но из-за странной политики компании звонки туда оплачиваются по междугороднему тарифу. Соответственно живя, например в Воткинске, при вызовах с сотового телефона домой приходится платить до 0,37 у.е. за минуту в зависимости от тарифа. После детального рассмотрения прайс-листа оказалось, что не все так плохо. Внутрисетевой звонок (т.е. звонок с сотового на сотовый) обходится в пределах 0,06-0,18 у.е. Таким образом, в среднем разница с межгородом составляет 20 центов за минуту. Было решено заставить эту разницу работать на себя. В теории решение можно описать очень просто. Требуется некое устройство-переходник из сотовой сети в местную городскую. В идеальном случае оно должно работать следующим образом: 1. Необходимо наличие одного дополнительного сотового телефона и одного обычного аппарата с городской линией. 2. Между двумя аппаратами сооружается «черный ящик». 3. При поступлении звонка на мобильник наш черный ящик (например, маленький человечек в коробочке) поднимает трубку городского телефона и сотового, а затем прикладывает их друг к другу так, чтобы микрофон одного совпадал с динамиком другого и наоборот. 4. После завершения разговора оба аппарата возвращаются в первоначальное состояние. Гениально? Несомненно. Просто? Почти. Осталось только реализовать эту схему на практике и наслаждаться результатами. Будучи программистами особой дружбы с аналоговой электроникой мы не ведем. Потому компьютер – первая альтернатива черному ящику, которая пришла на ум. И не с проста! Многие современные сотовые телефоны имеют встроенный модем, даже самые дешевые. Таким образом, подключив мобильник к компьютеру, мы сможем управлять им, как и самым простым модем. Соответственно аналогично мы сможем управлять городской телефонной линией, подключившись к ней обычным голосовым модемом. Все сотовые аппараты технологии GSM, имеющие встроенный модем, поддерживают один (слава и хвала международным организациям!) стандарт расширенных AT-команд под названием ETSI GSM. Есть, конечно, и дополнительные команды, разработанные производителями специально для конкретных модельных линеек, но нам они не потребуются. С голосовыми модемами кутерьмы намного больше. Не смотря на то, что у них у всех возможности примерно одинаковые, реализация управляющих кодов местами настолько разнится, что невольно приходит на ум сравнение с историей о Вавилонской башне. Итак, выход в сеть GSM будет обеспечиваться сотовым телефоном со встроенным модемом, а для выхода в проводную телефонную сеть мы будем пользоваться голосовым модемом (замечу, что практически все модемы в настоящее время являются голосовыми). Теперь непосредственно о реализации задуманного. Имеем персоналку с установленной MS-DOS, модем в сотовом телефоне и обычный голосовой модем (пусть сотовый модем [Модем 1] подключен к COM1, а обычный [Модем2] к COM2). Мы использовали голосовой модем ELINE на чипе Davicom и сотовый телефон Siemens C35i. В общем случае программа работает по следующему алгоритму: 1. Инициализируем COM-порты, т.е. устанавливаем скорость обмена 19200 бод, 8 бит данных, 1 стоповый бит, отключаем контроль четности. 2. Инициализируем модемы. Для сотового достаточно стандартной команды ATZ, а вот для голосового нужно выполнить еще несколько действий. Во-первых, необходимо перевести модем в голосовой режим, для того чтобы он работал как телефонный аппарат, делаем это командой AT#CLS=8. Во-вторых, включаем распознавание DTMF-кодов командой AT#VTD=3F,3F,3F (для простоты включим все возможные сигналы). И, в-третьих, необходимо установить в качестве устройства ввода микрофон (именно микрофон, для чего это мы рассмотрим в шестом пункте) командой AT#VLS=3. 3. В бесконечном цикле через определенный интервал времени прослушивается COM1. 4. Как только на COM1 появляется последовательность \r\nRING\r\n (строка \r\n означает коды «возврат каретки» и «перевод строки»), которая соответствует звонку телефона, отсчитываем n-ное количество звонков и поднимаем трубки у обоих модемов командой ATA (именно ATA, иначе Модем2 не будет обрабатывать полученные с мобильного DTMF-коды). После выполнения этого шага необходимо на всех остальных стадиях периодически проверять состояние Модем1 для определения конца сеанса связи и перехода в новый цикл ожидания. 5. Генерируем условный звуковой сигнал на Модем2, чтобы дать знать звонящему о готовности принять номер. С этой целью, например, можно использовать команду AT#VTS=[500,1300,3]. 6. Входим в режим считывания номера телефона, т.е. обрабатываем все DTMF-коды до тех пор, пока не встретиться символ # и складываем их в одну строку. Напомним, что при инициализации Модем2 в качестве устройства ввода мы установили микрофон, это позволило изолировать тоновые сигналы и не выпускать их в проводную сеть. В принципе ничего страшного не случится, если набираемый номер попадет на АТС в обход модема, но тогда не будет возможности добавить различные сервисные функции, например, перекодировка из тона в импульс, быстрый набор номера, ожидание гудка междугороднего соединения, ведение лога и т.п. (уверяем, аппетит приходит во время еды). 7. Переключаем Модем2 в режим спикерфона командой AT#VLS=6 (теперь устройство ввода это микрофон, а устройство вывода телефонная сеть), и набираем командой ATD\ принятый с сотового номер телефона. 8. Далее идет разговор, а программа в это время в цикле командой AT+CPAS опрашивает состояние Модем1. Цикл продолжается до тех пор, пока результатом команды опроса является число 4, которое указывает на активный разговор, в противном случае цикл прервется. 9. Вешаются все трубки и происходит переход к шагу 2. Как видите, ничего сложного нет, в подтверждение можно посмотреть на Си, а при желании использовать его в своей разработке. Еще раз напоминаем, что все это работало с модемом ELINE на чипе Davicom (V1433VQH-U Internal FAXModem (Voice)) и сотовым телефоном Siemens C35i. Поведение программы на другом железе не проверялось, вероятно придется покопаться в исходниках или файле инициализации, в который для удобства настройки вынесены командные последовательности. Что ж, проблема определения звонка и поднятия трубки решена. Теперь необходимо обеспечить передачу звуковых данных в обоих направлениях. В нашем простейшем варианте между модемом и сотовым аппаратом реализована элементарная акустическая развязка. В итоге не потребовалось ни схем согласования, ни физического вмешательства в аппарат или модем. Все было выполнено из метра проводов, микрофона, динамика и пары мини-джеков. Далее подключаем микрофон и динамик к модему и укрепляем их на телефонной трубке – микрофоны к динамикам. И готово! Теперь, чтобы дозвониться на городской телефон набираем номер мобильника, подключенного к компьютеру. Программа поднимает трубки на обоих модемах. Далее услышав сигнал-приглашение, тоновой последовательностью набираем на сотовом требуемый номер (в некоторых моделях трубок необходимо предварительно включить режим DTMF), заканчивающийся знаком ‘#’. После этого происходит набор телефона в городской линии и, в результате, ведем разговор обычным образом. Однако у такого варианта кроме своих преимуществ есть и обидный недостаток: необходим компьютер и модем, которые должны работать весь период времени, в который может понадобиться связь, а у многих это круглые сутки. Но, думаем, это остановить не должно. После полугода работы нашего аппаратно-программного комплекса в меню суммарного времени разговоров сотовый показал абсолютное значение 08:34:21 (примерно 500 минут). Учтем, что разговор обычно длится не полную минуту, а при классической поминутной тарификации в счет абоненту вписывается минута целиком. Соответственно к этой сумме можно смело накинуть еще сотню минут. Теперь займемся арифметикой. Как упоминалось в начале, экономия при использовании моста составляет 20 центов, соответственно его работа уже сберегла нам более 100 у.е. Если учесть, что потрачено 90 долларов на покупку и подключение лишнего сотового аппарата, то уже можно смело подсчитывать чистую экономию – точка окупаемости пройдена! Да здравствуют прямые руки! Прим. редактора. Дабы пресечь возможные недоразумения уточняем, что под словом «Мы» подразумеваются авторы статьи, а не редакция сайта «Ferra». [вернуться]