MyTetra Share
Делитесь знаниями!
Как правильно набрать номер на сотовом телефоне Siemens M50 через COM-порт
Время создания: 16.05.2015 22:25
Автор: Xintrea
Текстовые метки: Siemens, телефон, сотовый, мобильный, набор номера, COM-порт, команда
Раздел: Компьютер - Аппаратное обеспечение - Мобильные телефоны - Siemens M50
Запись: xintrea/mytetra_syncro/master/base/14318043312clv9v860j/text.html на raw.github.com

Набор номера через терминал


Если у нас есть сотовый телефон Siemens C35...M65, и он подключен к компьютеру через COM-порт, то мы можем AT-командами управлять телефоном. Все дальнейшие примеры рассмотриваются для операционной системы Linux.


Например, можно отправить команду набора номера через терминал minicom. В AT-команде должна присутствовать буква D (что обозначает "установка соединения", DIAL), а так же должна быть буква T, которая обозначает тоновый набор. Правильно команда набора номера будет выглядеть так:


ATDT+79185512345;


Да-да, именно с точкой с запятой ";" в конце!


Если ее не поставить, то встроенный в Siemens HAYES-совместимый модем будет пытаться дождаться тонового сигнала, потом будет набирать номер, а потом будет ждать сигнала вызова. В сотовых сетях различные сотовые операторы по-разному дают ответ от станции на телефон во время набора номера. И в 99% случаев набор номера в сотовой сети совершенно не соответствует набору номера на обычном телефоне. А микросхема HAYES-совместимого модема в мобильнике стандартная, расчитанная на обычную телефонную линию (уж не знаю, почему так делают).


Точка с запятой в конце команды говорит мобильнику: набери телефонный номер и больше ничего не делай. Не жди тоновых сигналов на линии, просто набери номер и вернись в консоль.


Если не поставить точку с запятой, то при звонках на сотовоые телефоны различных операторов будут появляться ошибки:


NO DIALTONE


или


NO CARRIER


и номер нормально не наберется.


Помните об этой хитрости!



Набор номера через команду Bash


А вот команда, которую можно выполнять прямо в консоли Bash, а не в терминале типа minicom:


echo -e 'atdt+79181234567;\x0D' > /dev/ttyS0


В конце передается символ 0Dh, который является символом перевода строки. Сама команда echo по-умолчанию в конце строки передает символ 0Ah. Таким образом, в конце команды, в модем поступают символы 0Dh, 0Ah. Именно эти символы HAYES-совместимый модем воспринимает как конец команды.


Опция -e означает, что в строке нужно находить спецсимволы, написанные в синтаксисе \xAA, и преобразовывать их в соответствующие байты.


UPD: Тут мне подсказывают, что можно воспользоваться опцией -n, которая запрещает автоматически добавлять символ перевода строки в конце строки. Таким образом, можно формировать отправляемую строку в явном виде:


echo -n -e 'atdt+79181234567;\x0D\x0A' > /dev/ttyS0


Такая запись более удобна, так как исключает неявные символы, и все что отправляется в COM-порт, мы видим прямо в строке.



Настройка COM-терминала и организация мониторинга передаваемых по COM-порту данных


Чтобы увидеть передаваемы по COM-порту данные (причем, в обе стороны), мы можем в отдельной консоли запустить команду:


cat /dev/ttyS0


Однако, тут тоже есть одна хитрость. Если мы предварительно не настростроим терминал, который обменивается с устройством /dev/ttyS0 данными (т. е. с COM-портом), то мониторинг будет работать криво. Это будет проявляться в том, что:


  • либо выполнение команды "cat /dev/ttyS0" сразу завершится, и никакого лога символов, проходящих через COM-порт невозможно будет увидеть;
  • либо отображаемый лог будет показывать не все символы, а только конечные символы, или только символ "a" при поступлении любой команды;
  • прочие странности.


Чтобы этого избежать, надо настроить терминал, например так:


stty -F /dev/ttyS0 raw ispeed 9600 ospeed 9600


После такой команды, команда "cat /dev/ttyS0" волшебным образом заработает. То, что передается в COM-порт, и то, что принимается из COM-порта, будет видно в логе этой команды.



Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования