Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прочесть ответ COM-порта? 
:(
    Опции темы
Delvish
Дата 23.8.2009, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



Добрый день!

Ребят, гуглил, и здесь на форуме искал, но безрезультатно... Проблема такова:
в цикле необходимо пройтись по списку и послать SMS. COM-порт открываю, AT командой AT+CMGS=19
> [здесь текст сформированного сообщения] 
отправляю, но тут происходит беда... Как мне дождаться ответного сигнала от телефона вида "+CMGS: 0" о том, что сообщение отправлено? Иначе проходя дальше по списку и пытаясь отправить следующее SMS, пока предыдущее не отправилось - ничего не получится. Уйдет только первое SMS. Вот и возник вопрос о том как корректно отловить ответ телефона о том что SMS отправилась и приступить к отсылу следующей?
Далее фрагмент кода отсылки

Код

for i := 0 to ListBox.Count -1 do
  begin
  h := CreateFile(PChar('\\.\' + Form2.ComboBox1.Text), GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if h = INVALID_HANDLE_VALUE then exit;
  
  SetupComm(h, 1600, 1600);
  GetCommState(h, DCB);
  with DCB do begin
    BaudRate := 9600;
    ByteSize := 8;
    Parity := EvenParity;
    StopBits := OneStopBit;
  end;
  if not SetCommState(h, DCB) then begin
    CloseHandle(h);
    exit;
  end;

  SetCommState(h, DCB);
   CTO.ReadTotalTimeoutConstant := 50;
   CTO.ReadIntervalTimeout := 50;
   CTO.ReadTotalTimeoutMultiplier := 1;
   CTO.WriteTotalTimeoutMultiplier := 0;
   CTO.WriteTotalTimeoutConstant := 10;
   SetCommTimeouts(h, CTO);
    
  sms := CreateSMS(ListBox1.Items.Strings[i]);
  msg := 'AT+CMGS=19';
  WriteFile(h, PChar(msg + #13)^, Length(msg) +1, u, C);
  Sleep(600);
  Application.ProcessMessages;
  WriteFile(h, PChar(sms + #26)^, Length(sms) +1, u, C);
  Application.ProcessMessages;

  if ReadFile(h, Buffer, Size, Received, nil) then
  begin 
  // ShowMessage(Buffer);                          // вот здесь надо как-то дождаться ответа...
  end;

  StatusBar1.Panels.Items[0].Text := 'Sending ' + IntToStr(i +1) + ' SMS';
  CloseHandle(h);
  end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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