ТОР 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;
Не нашли, что искали? Воспользуйтесь поиском:
|