Здравствуйте.
Столкнулся с такой проблемой:
есть 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
Может кто сталкивался, заранее спасибо
Здравствуйте, _Inch_, Вы писали:
_I_>есть USB-модем, я подключаюсь к нему по COM порту и отправляю через AT команды SMS.
_I_>С этим все номрально, проблема в следующем: перезагружаю компьютер, подключаю модем, и ни на одну мою АТ команду модем не отвечает. делаю переподключение модема и все работает.
Переподключение модема — т.е. отключение и подключение USB кабеля?
_I_>Причем если в диагностике опросить модем, то там все нормально, команды пишутся — модем отвечает.
_I_>модем: Alcatel x080s и ZTE MF100
_I_>Может кто сталкивался, заранее спасибо
Я бы начал с проверки режима работы порта

(выставленной скорости, четности и т.п.). Возможно, что драйвер виртуального COM порта по разному обрабатывает перезагрузку и физическое отключение устройства (ставит разные режимы порта).
Здравствуйте, 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 — состояние какое выставлял
Там случаем нет никаких хитростей, инициализации драйвера или еще чего?