Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






ДОДАТОК А ПРОГРАМА КАНАЛЬНОГО РІВНЯ




unit KNetProtocol;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,

syncobjs, {Debug, AdPort,} Math;

 

type

str40 = string[40];

 

TKNetProtocol = class

private

FMainTimer: TTimer;

NBlokPd, KBlokPd, NBlokPm, SB_L3:integer;

RS_COM2:integer;

FETXPd,FETXPm:boolean;

FNAK, FACK, FTA:boolean;

SBBlokPd:integer;

SBBlokPm:integer;

Contr_SumPd:integer;

Contr_SumPm:integer;

RG21_1, RG21_2, RG12_1, RG12_2:Array[0..19] of integer;

RG32_1, RG32_2, RG23_1, RG23_2:Array[0..511] of integer;

FHandle: HWnD;

// внутренние переменные и флаги

FVxDIsLoaded: Boolean;

FErrorCode: integer;

hCVxD: THandle;

RetInfo: Array[0..9]Of DWord;

PutInfo: Array[0..9]Of DWord;

cbBytesReturned: DWord;

pReceive1:pointer;

pReceive3:pointer;

pTransmit1:pointer;

pTransmit3:pointer;

pStr40:pointer;

procedure VxDProc(var Msg: TMessage);

function LoadVxD: integer;

function FreeVxD: integer;

procedure FormBlok(var j:integer);

procedure Com_Mod;

procedure HookIRQ;

procedure TransmitInf;

procedure OnMainTimer(Sender: TObject);

public

FPm_VxD:boolean;

NT:string;

function Ur1_Init:integer;

procedure Ur1_Done;

function Pd_Inf_L1(var BufSize:integer; pTransmit3:pointer):integer;

published

end;

 

const

wm_VxD = wm_User;

MES_PROTOCOL_NAK = wm_VxD+1;

MES_PROTOCOL_ACK = wm_VxD+2;

MES_PROTOCOL_STX = wm_VxD+3;

 

CVXD_APIFUNC_1 = 1; {Завантаження параметрів в VxD}

CVXD_APIFUNC_2 = 2; {Передача команди для модему}

CVXD_APIFUNC_3 = 3; {Передача інформації в VxD}

CVXD_APIFUNC_4 = 4;

 

STX = 2; {"Початок тексту"}

ETB = $17; {"Кінець блоку"}

ETX = $03; {"Кінець тексту"}

EOT = $04; {"Кінець передачі"}

ENQ = $05; {"КТМ"}

DLE = $10; {"АР1"}

NAK = $15; {"Ні"}

ACK = $06; {"Так"}

 

SBBI = 16; {Кількість інформаційних байтів в блоці}

AddrCOM2 = $2F8;{Базова адреса порта}

NIRQ = $10;

command1:Str40 = 'ATDP';

command2:Str40 = 'ATH0';

 

implementation

 

procedure TKNetProtocol.FormBlok(var j:integer);

var i:byte;

begin

SBBlokPm:=0;

if NBlokPd=(KBlokPd-1) then

FETXPd:=True

else

FETXPd:=False;

i:=0;

if pTransmit1=@RG21_1 then

begin

RG21_1[i]:=STX;

Inc(i);

RG21_1[i]:=NBlokPd;

Inc(i);

Contr_SumPd:=STX XOR NBlokPd;

Repeat

RG21_1[i]:=RG32_1[j];

Contr_SumPd:=Contr_SumPd XOR RG21_1[i];

Inc(i);

Inc(j);

Inc(SBBlokPd);

Until SBBlokPd < SBBI;

if FETXPd then RG21_1[i]:=ETX

else RG21_1[i]:=ETB;

Inc(i);

RG21_1[i]:=Contr_SumPd;

pTransmit1:=@RG21_2;

end

else

begin

RG21_2[i]:=STX;

Contr_SumPd:=Contr_SumPd XOR RG21_1[i];

Inc(i);

RG21_2[i]:=NBlokPd;

Inc(i);

Contr_SumPd:=STX XOR NBlokPd;

Repeat

RG21_2[i]:=RG32_1[j];

Inc(i);

Inc(j);

Inc(SBBlokPd);

Until SBBlokPd < SBBI;

if FETXPd then RG21_2[i]:=ETX

else RG21_2[i]:=ETB;

Inc(i);

RG21_2[i]:=Contr_SumPd;

pTransmit1:=@RG21_1;

end;

end;

 

function TKNetProtocol.Pd_Inf_L1(var BufSize:integer; pTransmit3:pointer):integer;

var j:integer;

Label Pd_Inf1,Pd_Inf2;

begin

Result:=0;

j:=0;

NBlokPd:=0;

FTA:=False;

KBlokPd:=BufSize div 16;

FNAK:=False;

FETXPd:=False;

FACK:=True;

Pd_Inf1:

if FACK then

begin

FACK:=False;

FMainTimer.Enabled:=False;{Зупинити відлік Т1}

if NOT FETXPd then

begin

Pd_Inf2:

FormBlok(j);

Inc(NBlokPd);

TransmitInf;

FMainTimer.Enabled:=True;{Запуск відліку Т1}

end

else

begin

FETXPd:=False;

Result:=1;

Exit;

end;

end

else

begin

if FNAK then

begin

Dec(NBlokPd);

FNAK:=False;

FMainTimer.Enabled:=False;{Зупинити відлік Т1}

goto Pd_Inf2;

end

else

begin

if FTA then

begin

FTA:=False;

Result:=0;

Exit;

end

else goto Pd_Inf1;

end;

end;

end;

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных