@belunix

Программное определение используемого 3g модемом COM порта в Windows

Исходные данные:

ОС WIN ХР SP3, 3G-модем Huawei или 3G-модем Alcatel, установленные драйвера к ним и готовые подключения в папке «Сетевые подключения»

Известно также, что при непосредственном подсоединении модема к порту USB, создается несколько виртуальных COM-портов (для разных моделей число может быть различным, как правило — от 2 до 4 портов).
Номера портов, естественно, произвольные и при каждом подключении могут изменяться.
Один из этих портов распознается в Диспетчере устройств на вкладке «Модемы»как 3G-модем, а остальные порты располагаются во вкладке «Порты (COM и LPT)», и им присваиваются какие-либо номера.

При этом модем использует чаще всего один из COM-портов для чтения команд, а другой для записи ответов.
Иногда бывает, что один COM-порт используется для чтения команд, а ответ пишется сразу в несколько других COM-портов.

Вопрос: как программно(с помощью WINAPI, язык С/С++), определить для данного подключения, в какой (в какие) порты для этого модема осуществлять запись, а из какого (из каких) портов производить чтение ответов?

Моя идея была в том, чтобы программно получить название COM-порта из ярлыка Подключения (см.Исходные данные), а далее отправить стандартную команду AT, при этом в цикле перебирая и прослушивая все свободные COM-порты. Получив ответ на каком-либо из них(либо на нескольких сразу), считать что пара портов для записи-чтения найдена.

Проблема, с которой я столкнулся, заключается в том, что мне не удалось найти подходящей функции WINAPI, которая, грубо говоря, по входному параметру «Имя_подключения» вернула бы «Имя_COM_порта», соответствующее этому подключению.
При этом, в самом ярлыке Подключение этот COM-порт вполне хорошо виден.
(Для примера в случае Мегафона в его Подключении указан COM9, а на вкладке «Порты (COM и LPT)» виден COM10, соответственно пишем в COM9, читаем из COM10. А Alcatel вообще открывает 4 COM-порта).
Для решения этой задачи использовал подмножество функций и структур RAS из WINAPI, но, как сказал выше, не нашел подходящей функции для возврата имени COM-порта.

Возможно, задачу надо вообще решать по-другому. Как быть?
  • Вопрос задан
  • 18499 просмотров
Решения вопроса 1
@dummy2002
Не знаю, как с GSM, но CDMA-модемы могут создавать следующие устройства при включении:
1) COM-порт модема (основной порт для приема-передачи, изменение режимов работы модема)
2) COM-порт диагностики (используется для настройки устройства — изменение параметров Оператора, получение диагностических данных CDMA-сети и пр.)
3) COM-порт GPS-устройства (NMEA и др. протоколы)

Например, устройство Huawey E176 создает 2 COM-порта «Huawey Mobile Connect — 3G Application Interface (COM4)» (модем) и «Huawey Mobile Connect — 3G PC UI Interface (COM5)» (диагностика). При этом еще создается сетевая плата «Huawey Mobile Connect — 3G Network Card» и сетевое подключение «Подключение по локальной сети 3», а управление процессом «Подключение/отключение» выполняет фронт-энд ПО «Mobile Partner».

Или у Вас устройство без фронт-энд ПО, когда пользователь вручную создает и использует стандартное подключение Windows? Что у вас действительно в исходных данных из вышеперечисленного?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы