Зависание при подключении к COM модему

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Yahoo!
Сообщения: 2
Зарегистрирован: 17 апр 2010, 18:03

Форумчане, прошу помогите...

Есть usb-модем опсосов HUAWEI "проецируется" на COM7
Так вот написал программу, которая соединяется с модемом и позволяет мне звонить или отправлять СМС с него, но вот проблема, программа зависает когда я подключаюсь к модему, ЕСЛИ я его НЕ "Опросил"(через диспетчер устройств) или НИ РАЗУ не выходил в интернет, ДО ТОГО как вставил модем в порт. Если это сделать то ОНА ПОЛНОСТЬЮ РАБОТАЕТ.

Привожу кусочек проблемной части программы

Код: Выделить всё

void OpenPort()
{
    if (hCom != INVALID_HANDLE_VALUE)
    {
        ClosePort();
        Sleep(300);
    }

    GetDlgItemTextA(hWnd, IDC_COMBO1, ModemPort, 6);

    char ComPort[10];
    lstrcpyA(ComPort, "\\.\\\\");
    lstrcatA(ComPort, ModemPort);

    hCom = CreateFileA(ComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    
    if (hCom == INVALID_HANDLE_VALUE) SetDlgItemTextA(hWnd, IDC_EDIT5, "failed to open port");
    else  
    {
        SetDlgItemTextA(hWnd, IDC_EDIT5, "port successfully opened");
        
        hThread = CreateThread(0, 0, ReadThread, (LPVOID)hWnd, 0, 0);

        DCB dcb;
        memset(&dcb, 0, sizeof(dcb));
        dcb.DCBlength = sizeof(dcb);
        MessageBoxA(0, "Щас может зависнуть :( \nЧтобы этого не произошло:\
            \n Войдите хоть раз в интернет либо опросите модем ч/з диспетчер устройств.",
            "Bug", MB_OK | MB_ICONASTERISK );

        // При вызове GetCommState она и зависает...

        if(!GetCommState(hCom, &dcb)) SetDlgItemTextA(hWnd, IDC_EDIT5, "Error of get data about port");
        // Если закоментить GetCommState то прожка зависнет на SetCommState и т.д...
        dcb.BaudRate = CBR_57600; //460800;
        dcb.ByteSize = 8;
        dcb.Parity = NOPARITY;
        dcb.StopBits = ONESTOPBIT;

        if (SetCommState(hCom, &dcb)) SetDlgItemTextA(hWnd, IDC_EDIT5, "Configuring OK");
        else SetDlgItemTextA(hWnd, IDC_EDIT5, "Configuring Error");
    }
    return;
}
знаете как это можно исправить? Или мне искать мануалы на английском, которых в открытом доступе скорее всего не будет :( Если они есть то можно и на них ссылочку...
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Всё правильно. Чтобы ты мог работать с внешним устройством через СОМ-порт, система должна сначала распознать, какое именно устройство было подключено к USB-порту, инициализировать с ним связь, т.е. задействовать соответствующие драйвера, чтобы предоставить возможность общаться с ним на уровне файлового потока через СОМ-порт. Инициализировать связь с подключенным с устройством можно как внешними программами (всё тот же "Диспетчер устройств" или программа установки интернет-соединения), так и из собственного приложения с помощью функций библиотеки TAPI версии 2.2 или 3.0
Я когда-то делал подобную утилиту, которая позволяла с компьютера через подключенный мобильный телефон делать звонок на другой телефон. Что-то типа сигнализации.
Yahoo!
Сообщения: 2
Зарегистрирован: 17 апр 2010, 18:03

2WinMain, спасибо за ответ, но TAPI мне не подходило с самого начала.

Вопрос отпал сразу после полного анализа моего кода и удаления с него строчки создания потока на чтение.
(Да как я на нее раньше внимание не обратил только голову Вам зря заморочил, простите)
Тему можно прикрыть
Аватара пользователя
Decoder
Сообщения: 308
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Я когда-то делал подобную утилиту, которая позволяла с компьютера через подключенный мобильный телефон делать звонок на другой телефон. Что-то типа сигнализации.

WinMain, а ты не мог бы по-подробнее рассказать про то, как программно управлять с компьютера мобильным телефоном? Уж очень любопытно узнать, как ты это делаешь.
Поумнеть несложно, куда труднее от дури избавиться.
BulldozerBSG
Сообщения: 270
Зарегистрирован: 09 янв 2010, 04:14
Контактная информация:

Decoder А это вам батенька к документации по AT коммандам обратиться стоит.
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Смотря для чего тебе это нужно. Если это будет некое стационарное устройство, постоянно подключенное к компьютеру, то лучше приобрести специальный GSM-модем с внешним источником питания. Либо в виде платы, которая встраивается внутрь компьютера. У обычного мобильного телефона аккумулятор будет быстро разряжаться и его придётся каждый раз отключать для подзарядки. Обычно к GSM-модему прилагается диск с ПО, на котором есть специальная библиотека Open AT. Она унифицирована под разные операционные системы. В документации к ней идут примеры программного кода.
Если же нужно просто получить с мобильного телефона список контактов или записать туда справочник, то это делается с помощью библиотеки TAPI и нескольких AT-команд.
Ответить