![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
Что я хочу знать для начала: открыть выбранный порт, настроить его, послать АТ-команду в него, получить ответ, отобразить ответ.
Нашел поиском много всякого, начал разбираться, понял что для открытия порта и чтения\записи в\из него используются ф-ции CreateFile, WriteFile, ReadFile. Для настройки открытого порта используются ф-ции описанные в разделе MSDN - Communications Functions. А вот чего не нашел пока - это как получить список доступных в системе COM-портов, дабы иметь возможность выбрать требуемый. Вариант "просто список из номеров по порядку" не подходит, у меня к примеру в системе 1 физический порт COM1 и 12 виртуальных, появившихся после установки Bluetooth-контроллера, которым программа установки присвоила номера от COM30 до СОМ42. Подскажите. |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| gromo |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 2.9.2009 Репутация: нет Всего: нет |
Я так понимаю, СОМ-порт нужен для работы с модемом или телефоном?!
Опиши конкретно задачу, какие функции нужны? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| AndreySol |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
Использовал вариант с QueryDosDevice, спасибо Всем.
Новый вопрос есть. На виртуальном COM-порту - моб.телефон. Пробую, для начала, открыть порт и послать в него AT-команду. Пример кода взял из статьи "Serial Communications in Win32" с MSDN. Приводить здесь код ф-ции открытия и настройки порта не буду, там ошибок не должно быть. Ф-ция записи в порт:
вызов ф-ции:
В результате получается так - вижу что порт открывается (МТ пишет на экране "SPP профиль подключен"), но команда не выполняется. Закрытие порта то-же нормально отрабатывается (МТ пишет на экране "SPP профиль отключен"). Где-то у меня ошибка, помогите. Это сообщение отредактировал(а) AndreySol - 9.8.2011, 22:20 |
||||
|
|||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
Нашел ошибку. Оказывается к AT-команде надо добавлять "\r".
|
|||
|
||||
| AndreySol |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
На виртуальном COM-порту - моб.телефон.
Посылаю команду, к примеру "at+egmr=0,0", ответ получаю в таком виде:
А HyperTerminal возвращает как положено, только
Уже и PurgeComm везде понаставил и пробовал порт открывать в синхронном и в асинхронном режиме - результат тот-же. В чем проблема может быть ? |
||||
|
|||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
Разобрался, был включен режим "Эхо", помогло ATE0 - и все стало приходить как надо.
|
|||
|
||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
Посылаю команду AT+CPBR=2.
В своей программе ответ сохраняю в переменную типа CString, затем вывожу на RichEdit. Получается так +CPBR: 2, "09xxxx6453", 129, "" в последних кавычках должно быть имя абонента русскими буквами, с английским текстом все ОК. Проверял стандартным виндовым HyperTerminal'ом - в нем то-же "". Подскажите, что можно сделать ? P.S. смотрел команду +CSCS, но не очень понял что там за кодировки, кроме "PCCP437". |
|||
|
||||
| bass |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
так создай мемо и туда побайтно выводи что приходит от телефона..... Либо телефон не чего не выдает либо софтина некорректно воспринимает (твоя)....
|
|||
|
||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
дак я не спорю. Вы подскажите, как корректно принять ? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
не вижу функции приема данных
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| AndreySol |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: нет Всего: 1 |
Вы это имели ввиду ?
Это сообщение отредактировал(а) AndreySol - 4.9.2011, 14:03 |
||||
|
|||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ну наверное тебе лучше знать как ты данные пытаешься принять.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
есть 3 варианта: 1. смотреть надо на результат, возвращаемый функцией ReadFile, только при значении TRUE buffRead будет содержать что-то вменяемое 2. hCurrPort открыт в режиме оверлаппед? тогда см. пункт 1., в таком случае чтение не обязано завершиться немедленно, т.е. нужен во первых, динамический (или статический) буфер, а во вторых - реализация какого-либо ожидания завершения операции чтения, в котором этот буфер можно использовать 3. если поставить на 6-й стоке брейкпойнт и посмотреть на содержимое buffRead, то если buffRead будет содержать данные, а на 8-й strPrint - уже нет, значит проблема в кодировке (ее нужно локализовать для России) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |