Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемка с организацией конференц-связи, два телефона через GSM-терминал 
:(
    Опции темы
ksili
Дата 7.2.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Связываю два телефона через GSM-терминал Siemens MC35i. Вот такая последовательность АТ-команд работает если её набирать в HyperTerminal'e:
Код

ATZ                                             //сброс модема (GSM-терминала) в начальное состояние
ATD<номер телефона1>;          //набираем первый номер
AT+CLCC                                    //заносим соединение в список звонков
ATD<номер телефона2>;          //набираем второй номер
AT+CLCC                                    //заносим соединение в список звонков
AT+CHLD=3                                //объединяем конференц-связью, звноки из списка звонков

Однако в программе прямо так же выполнить подряд несколько вызовов WriteFile с этими командами не получится. Дело в том, что между ATD и AT+CLCC должно быть ожидание (тот кому звонят должен снять трубку). Если не ждать, а сразу выполнить посылку AT+CLCC модему, то звонок сорвётся (NO CARRIER). 
HyperTerminal эту задержку делает сам -  пока ответа нет, вводить команды нельзя. Но в своей программе сделать ожидание снятия трубки у меня чё-то не получается. Делаю так:

Код

 char buffer1[100],buffer2[100];
 int i;
 DWORD dwRead9, dwWritten9;
 OVERLAPPED myOL;
 HANDLE hEvent;
 bool RetCode;

 //создаём событие **********************
 hEvent = CreateEvent(NULL,true,false,NULL);
 SetCommMask(hCom9,EV_RXCHAR);

 myOL.hEvent = hEvent;

 if(WriteFile(hCom9, "ATD8904xxxxxxx;\r", 16, &dwWritten9, NULL)==0)
    {
     Application->MessageBoxA("error","Error",MB_OK);
     CloseHandle(hCom9);
     hCom9 = NULL;
     return;
    }

 ResetEvent(hEvent);
 PurgeComm(hCom9,PURGE_TXCLEAR + PURGE_RXCLEAR);    
 DWORD wcEvent = 0; //код события
 RetCode = WaitCommEvent(hCom9, &wcEvent, NULL); 

 if ((!RetCode) && (GetLastError()==ERROR_IO_PENDING))
  {
   WaitForSingleObject(hEvent, 1);
  }
 PurgeComm(hCom9,PURGE_TXCLEAR + PURGE_RXCLEAR);      
 if(WriteFile(hCom9, "AT+CLCC\r", 8, &dwWritten9, NULL)==0)
    {
     Application->MessageBoxA("error","Error",MB_OK);
     CloseHandle(hCom9);
     hCom9 = NULL;
     return;
    }

//
//потом также звоним на другой номер

С такой маской события как здесь (EV_RXCHAR, если поступил символ) ожидания не происходит. Событие как будто сразу происходит, хотя я перед этим очищаю буферы (PurgeComm). Пробовал другие маски EV_CTS, EV_DSR, EV_RING, EV_RLSD и EV_RXFLAG. С ними всё останавливается на функции ожидания  
RetCode = WaitCommEvent(hCom9, &wcEvent, NULL);
и ничего не происходит даже если снимается трубка. Короче виснет.

Кто-нибудь знает, как ожидать снятия трубки?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0374 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.