Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зарпет обработки события


olega ©   (2008-02-13 14:15:00) 

Добрый день! Для работы с GSM-модемом я использую компонент TBComPort 2.10 ( http://www.delphisources.ru/pages/sources/system/2005_year/bcom_port.html). В случае если на модем приходит СМС, он выдает в СОМ-порт строку '+CMTI: "MT",1'. В компоненте есть прерывние OnRxChar, которое вызывается в случае появления во входном буфере СОМ-порта данных. Его обработчик - это функция синхронного чтения порта. Таким образом, когда приходит СМС, программа автоматом улавливает этот момент и считывает указанную выше строку.
Для дальнейшей работы мне необходимо считать СМС. Для этого я посылаю команду 'AT+CMGR=1'. Для контроля правильности ее выполнения необходимо проверять ответы от модема. НО с прерыванием это делать не удобно. Как можно его временно запретить, чтобы считывать ответы от модема "вручную", а когда обработаю пришедшую СМС, востановить прерывание и ожидать новой СМС?


DiamondShark   (2008-02-13 14:50:00) [1]


> НО с прерыванием это делать не удобно.

Это почему же?
Дубовую state-machine трудно организовать?

...
FState: integer;

procedure TBComPort1.OnRxChar;
begin
 case FState of
 ...
 17: begin // состояние "ждать уведомления от модема"
    ЧитатьКомандуОтМодкма();
    if команда = '+CMTI: "MT",1' then
    begin
      ПослатьКомандуМодему('AT+CMGR=1');
      FState := 18;
    end;
   ...
 end;
 18: begin // состояние "ждать ответа на 'AT+CMGR=1'"
    // читать и чего-то делать с ответом
    FState := 38;
 end
 ...
 end;
end;


Семеныч   (2008-02-13 14:35:00) [2]

procedure TForm1.BComPort1RxChar(...); // Обработчик OnRxChar
begin
 BComPort1.OnRxChar := nil;
 try
   ... // Обработка
 finally
   BComPort1.OnRxChar := BComPort1RxChar;
 end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо