Чтение ответа от USB модема через COM-порт
От: _Inch_  
Дата: 17.03.11 10:09
Оценка:
Здравствуйте.

Столкнулся с такой проблемой:
есть USB-модем, я подключаюсь к нему по COM порту и отправляю через AT команды SMS.
С этим все номрально, проблема в следующем: перезагружаю компьютер, подключаю модем, и ни на одну мою АТ команду модем не отвечает. делаю переподключение модема и все работает.

Открываю порт:
    if ((hComPort = CreateFile(comPortName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL)) == INVALID_HANDLE_VALUE)
        return GetLastError();

    // Очищаем буфер COM порта
    if (!PurgeComm(hComPort, PURGE_TXCLEAR | PURGE_RXCLEAR))
        result = GetLastError();

Чтение/запись
ReadFile(hComPort, readBuffer, 1, NULL, overlapped); ......

// bufferToWrite - ATZ\r\n
WriteFile(hComPort, (LPCVOID)bufferToWrite, strlen(atCommand) + 2, NULL, overlapped) .......


Причем если в диагностике опросить модем, то там все нормально, команды пишутся — модем отвечает.
модем: Alcatel x080s и ZTE MF100

Может кто сталкивался, заранее спасибо
Re: Чтение ответа от USB модема через COM-порт
От: andrey82  
Дата: 17.03.11 10:26
Оценка: 1 (1)
Здравствуйте, _Inch_, Вы писали:

_I_>есть USB-модем, я подключаюсь к нему по COM порту и отправляю через AT команды SMS.

_I_>С этим все номрально, проблема в следующем: перезагружаю компьютер, подключаю модем, и ни на одну мою АТ команду модем не отвечает. делаю переподключение модема и все работает.

Переподключение модема — т.е. отключение и подключение USB кабеля?

_I_>Причем если в диагностике опросить модем, то там все нормально, команды пишутся — модем отвечает.

_I_>модем: Alcatel x080s и ZTE MF100

_I_>Может кто сталкивался, заранее спасибо



Я бы начал с проверки режима работы порта (выставленной скорости, четности и т.п.). Возможно, что драйвер виртуального COM порта по разному обрабатывает перезагрузку и физическое отключение устройства (ставит разные режимы порта).
Re[2]: Чтение ответа от USB модема через COM-порт
От: _Inch_  
Дата: 17.03.11 11:35
Оценка:
Здравствуйте, andrey82, Вы писали:

A>Переподключение модема — т.е. отключение и подключение USB кабеля?

ага

A>Я бы начал с проверки режима работы порта (выставленной скорости, четности и т.п.). Возможно, что драйвер виртуального COM порта по разному обрабатывает перезагрузку и физическое отключение устройства (ставит разные режимы порта).


пробую:

получаю GetCommState(...)
когда модем не отвечает:

    dcb.BaudRate = 9600
    dcb.XonLim = 760
    dcb.XoffLim = 170
    dcb.fBinary = 1
    dcb.ByteSize = 8
    остальное по нулям


когда модем отвечает (после переподключения)

    dcb.fBinary = 1
    dcb.ByteSize = 8
    остальное по нулям


Думаю ну вот она — проблема, правлю структуру, делаю SetCommState(...) — и не работает
SetCommState(...) — отрабатывает, так как при последующих вызовах GetCommState — состояние какое выставлял

Там случаем нет никаких хитростей, инициализации драйвера или еще чего?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.