Показать сообщение отдельно
  #5  
Старый 18.06.2010, 16:15
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

А где эт можно глянуть?... ссылочкой не пожешь? (устарело)



Вот собственно как все это делается

На обоих компах открываем COM порт модема для этого:
PHP код:
var
  
hCommFileTHandle
  
DCBTDCB;
Begin
 hCommFile 
:= CreateFile(PChar('COM1'), GENERIC_READ or GENERIC_WRITE,
                        
FILE_SHARE_READ or FILE_SHARE_WRITEnil,
  
OPEN_EXISTINGFILE_ATTRIBUTE_NORMAL{FILE_FLAG_OVERLAPPED}, 0);
  if 
hCommFile=INVALID_HANDLE_VALUE then
  begin
    Memo1
.Lines.Append('Unable to open 'CommPort);
    exit;
  
end;

DCB.BaudRate := CBR_115200//скорость
DCB.StopBits := 0;        //стоповые биты (0 - 1, 1 - 1,5, 2 - 2)
DCB.Parity := 0;          //проверка четности
DCB.ByteSize := 8;        //биты данных
SetCommState(hCommFileDCB);
End

Закрытие порта
PHP код:
CloseHandle(hCommFile); 

Вызов номера модема
PHP код:
Var
  
PhoneNumberstring//номер
  
NumberWrittenCardinal//сдесь будет число реально записанных байт
Begin
WriteFile
(hCommFilePChar(PhoneNumber)^, Length(PhoneNumber),
  
NumberWritten,nil)
end

Вызывать номер нужно согласно AT командам модема,
например ATDP89451234567
AT - Команды все начинаются с этого
D - Dial (вызов)
P - Пульсовый режим.
остальное номер телефона, подробнее можно узнать в яндексе

для считывания информации с модема нужно запустить циклическую бесконечную (до закрытия порта) процедуру, желательно в отдельном потоке.

PHP код:
var
CurrentState:TComStat;
CodeError:Cardinal;
PData:array [0..2048of byte;
AvaibleBytesRealRead:Cardinal;
Text:String
Begin
ClearCommError
(hCommFileCodeError, @CurrentState); //считываем состояние модема
AvaibleBytes:=CurrentState.cbInQue// получаем количество пришедших байтов

if AvaibleBytes>0 then begin //если что-то пришло
  
If ReadFile(hCommFilePDataAvaibleBytesRealReadnilthen begin // читаем из порта данные
  
if RealRead>0 then begin //если удалось прочитать больше чем ничего
  
Text:=Pchar(@PData); // что дальше делать с данными решайте сами
   
end;
end;
end;
end

Если пришёл вызов на модем, то в переменой TEXT будет #13#10RING#13#10, и отвечаем за вызов записав в модем команду ATA
AT - Команда модема,
A - Ответить на звонок,
После этого модемы попробуют связаться друг с другом не требуя от вас никакого вмешательства,... если соединение удалось, то модем ответит сообщением CONNECT и скорость соединения. При этом модемы перейдут с состояние обмена данными, т.е. любая информация записанная в порт будет выдана на другом конце. Для окончания соединения нужно просто закрыть порт.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием