Всем привет!
Я пишу прогу, которая должна отправлять sms на Visual C++ 7 (MFC). Отлаживаю прогу, используя телефон Siemens C60.
DataCable подключен к USB, но в системе он как COM-порт. Работая с программой SiMoCo ни каких проблем не возникает, да с HyperTerminal'ом тоже особых проблем нет (почти, иногда бывают, но это скорее по моему незнанию :
).
В кратце как я работаю с телефоном и как отправляю sms:
Если этап открытия порта прошел успешно, т.е. октрыт порт, создано событие прихода пакета (CEvent ev=CreateEvent(NULL, FALSE, FALSE, NULL)), создан поток опроса порта (AfxBeginTread), выполнены команды:
a) посылаю ATE0, чтобы тел. не повторял, то что я посылаю;
b) узнаю поддерживает ли телефон pdu-режим (AT+CMGF=0);
c) узнаю поддерживает ли телефон sms команды (at+csms=0);
d) узнаю адрес sms-сервера (at+csca?)
То я могу отправлять sms,
Иначе MsgBox(codeError).
Отправка sms проходит в подготовку + 2 этапа:
1) [Подготовка] Формирование sms;
2) [1 этап] Отправка команды at+cmgs=<len> и ожидание прихода символа '>'
3) [2 этап] Отправка sms и ожидание прихода строки "OK"
*При отправке каких-то команд в модем всегда помимо ожидаемых ждется OK или ERROR
Теперь о ситуации:
Если идти пошагово, то небольшие sms (символов 5) моя прога отправляет, если символов больше (пробовал на ~30) нет, почему-то телефон либо почти сразу возвращает error (редко) либо молчит и я выхожу по тайм-ауту.
Если просто запустить debug версию, то она мне выдает "Протекает наложенное событие ввода/вывода" на этапе открытия порта при отправке какой-либо из команд a,b,c,d. Тоже самое и в релиз версии. Да судя по сообщению, это наверное что-то связано с синхронизацией обращений к данным из 2-х потоков, но доступ к ним вроде синхронизирован (с помощью критической секции).
Может кто-то сталкивался с подобной ситуацией или кто-то знает в чем дело, подскажите пожалуйста.
P.S.: надеюсь я понятно описал проблему