![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зарпет обработки события
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;