2012-04-20 2 views
1

Как вы должны программно определять, когда удаленный модем на вашем телефоне зависает? Я пишу программу C, которая взаимодействует с устройством SoftModem /dev/ttySL0 в Ubuntu linux. Я могу настроить модем с помощью команд Hayes AT и общаться с удаленным модемом. Однако я не смог определить, как я должен обнаружить, что другой конец повесил линию.Hayes AT Commands: Обнаружение удаленной зависания?

У меня есть модем, настроенный так, что, когда другой конец зависает, устройство печатает NO CARRIER и переключается в режим команд. Однако я не могу использовать строку NO CARRIER, потому что я не могу гарантировать, что модем не получит эту строку в режиме данных.

Как вы "прослушиваете" удаленное соединение?

+0

P.S. У меня нет реплики для создания тега 56k-modem или softmodem. Модемный тег, похоже, больше связан с модемами доступа в Интернет, чем для модем-модемных модемов 56k. –

+0

Я добавил тэг [at-command]; этого должно хватить. [listen] на самом деле не тег. –

+1

Интересный. В аппаратном мире RS232 для этого используется провод CD (Carrier Detect). Если вы используете API/библиотеку, есть ли соответствующая виртуализация? –

ответ

0

Тестирование на NO CARRIER в виде текста не хватит. Этот текст часто встречается на сайтах в сети, даже на сайтах Q &.

Исходя из модема, он должен быть заключен в разрывы строк.

Кроме того, после обнаружения этого текста вы можете попробовать переключиться в командный режим с помощью +++. Если это работает, ваше соединение сохраняется, и вы можете подключить его и продолжить использовать. Если это не так (потому что вы уже там, и +++ является недопустимой командой), соединение прошло.

3

Это аппаратный сигнал на модемах, линия обнаружения несущей (CD). Вам нужно будет следить за ним, чтобы узнать, что соединение было потеряно. Основы linux описаны в this how-to, вы получаете состояние сигнала с помощью ioctl() с помощью команды TIOCM_CAR.

+0

Это, безусловно, похоже на то, что я искал. Это требует больше работы, чем я надеялся сварить это до рабочего примера.В моих первых экспериментах DCD запускается отключен и включается при установлении соединения (как и ожидалось), но затем DCD остается включенным, когда удаленный модем отключается, даже после того, как я прочитал «NO CARRIER» с устройства. –

+0

Как это когда-либо выключается тогда :) –

+0

Сбрасывается на 0, когда я вызываю 'TIOCSSOFTCAR' ioctl, чтобы очистить CLOCAL. –