Пластиковые карты с открытой памятью. Востриков А.А - 83 стр.

UptoLike

83
Функция проверки контрольной суммы
Function CheckLinkCRC : Boolean;
{Проверить контрольную сумму. False – не совпала}
Var i: Word;
Chk_Calc, Chk_Frame: Word;
Begin
Chk_Calc:=0;
For i:=0 To COMFrameLen-3 Do
Chk_Calc:=Word(Chk_Calc+RXBuf[i]);
Move(RXBuf[COMFrameLen-2], Chk_Frame, SizeOf(Chk_Frame));
If Chk_Calc=Chk_Frame Then CheckLinkCRC:=True Else
CheckLinkCRC:=False;
End; { of CheckLinkCRC }
Процедура чтения контрольной суммы
Procedure CalcLinkCRC;
{Прочитать контрольную сумму и записать в конец кадра}
Var i: Word;
Chk_Calc: Word;
Begin
Chk_Calc:=0;
For i:=0 To COMFrameLen-3 Do
Chk_Calc:=Word(Chk_Calc+TXBuf[i]);
Move(Chk_Calc, TXBuf[COMFrameLen-2], SizeOf(Chk_Calc));
End; { of CalcLinkCRC }
Функция формирования кадра
Function Send_Frame(FT: Byte; NA: tNA; Cmd: Byte; Status: Byte;
Data: tData): Boolean;
{Формирование кадра длины COMFrameLen для передачи, подсчет КС,
передача с ожиданием ухода всего кадра}
Var Res: Boolean; Start: LongInt; i: Word; Symb: Byte;
Begin
Send_Frame:=False;
Out_Buf.FT:=FT;
Out_Buf.NA:=NA;
Out_Buf.Cmd:=Cmd;
Out_Buf.Status:=Status;
For i:=1 To COMFrameLen-2 Do Out_Buf.Data[i]:=Data[i];
CalcLinkCRC;