Changeset 119 for Comm/UCommFrame.pas
- Timestamp:
- Jan 5, 2011, 1:16:30 PM (14 years ago)
- Location:
- Comm
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Comm
-
Property svn:ignore
set to
lib
-
Property svn:ignore
set to
-
Comm/UCommFrame.pas
r26 r119 6 6 7 7 uses 8 Classes, U MemoryStreamEx, Dialogs, SysUtils,9 Forms,UCommPin;8 Classes, UStreamHelper, Dialogs, SysUtils, 9 UCommPin; 10 10 11 11 const … … 22 22 private 23 23 LastCharIsSpecialChar: Boolean; 24 ReceiveBuffer: T MemoryStreamEx;24 ReceiveBuffer: TStreamHelper; 25 25 FrameState: TFrameState; 26 26 FFrameErrorCount: Integer; … … 31 31 FrameDataPin: TCommPin; 32 32 PacketLoss: Real; 33 procedure RawDataReceive(S tream: TStream);34 procedure FrameDataReceive(S tream: TStream);33 procedure RawDataReceive(Sender: TCommPin; Stream: TStream); 34 procedure FrameDataReceive(Sender: TCommPin; Stream: TStream); 35 35 constructor Create; 36 36 destructor Destroy; override; … … 46 46 constructor TCommFrame.Create; 47 47 begin 48 ReceiveBuffer := T MemoryStreamEx.Create;48 ReceiveBuffer := TStreamHelper.Create; 49 49 RawDataPin := TCommPin.Create; 50 50 RawDataPin.OnReceive := RawDataReceive; … … 62 62 end; 63 63 64 procedure TCommFrame.FrameDataReceive(S tream: TStream);64 procedure TCommFrame.FrameDataReceive(Sender: TCommPin; Stream: TStream); 65 65 var 66 RawData: T MemoryStreamEx;66 RawData: TStreamHelper; 67 67 I: Integer; 68 68 Character: Byte; … … 75 75 // Byte stuffing 76 76 Stream.Position := 0; 77 RawData := TMemoryStreamEx.Create; 78 RawData.WriteByte(SpecialChar); 79 RawData.WriteByte(ControlCodeFrameStart); 80 for I := 0 to Stream.Size - 1 do begin 81 Character := TMemoryStreamEx(Stream).ReadByte; 77 try 78 RawData := TStreamHelper.Create; 79 RawData.WriteByte(SpecialChar); 80 RawData.WriteByte(ControlCodeFrameStart); 81 for I := 0 to Stream.Size - 1 do begin 82 Character := Stream.ReadByte; 83 if Character = SpecialChar then begin 84 RawData.WriteByte(SpecialChar); 85 RawData.WriteByte(ControlCodeSpecialChar); 86 end else RawData.WriteByte(Character); 87 end; 88 89 Character := CRC; 82 90 if Character = SpecialChar then begin 83 91 RawData.WriteByte(SpecialChar); 84 92 RawData.WriteByte(ControlCodeSpecialChar); 85 93 end else RawData.WriteByte(Character); 94 95 RawData.WriteByte(SpecialChar); 96 RawData.WriteByte(ControlCodeFrameEnd); 97 //if Random >= PacketLoss then 98 RawDataPin.Send(RawData); 99 100 finally 101 RawData.Free; 86 102 end; 87 88 Character := CRC;89 if Character = SpecialChar then begin90 RawData.WriteByte(SpecialChar);91 RawData.WriteByte(ControlCodeSpecialChar);92 end else RawData.WriteByte(Character);93 94 RawData.WriteByte(SpecialChar);95 RawData.WriteByte(ControlCodeFrameEnd);96 //if Random >= PacketLoss then97 RawDataPin.Send(RawData);98 RawData.Free;99 103 end; 100 104 101 procedure TCommFrame.RawDataReceive(S tream: TStream);105 procedure TCommFrame.RawDataReceive(Sender: TCommPin; Stream: TStream); 102 106 var 103 107 Character: Byte; … … 107 111 begin 108 112 for I := 0 to Stream.Size - 1 do begin 109 Character := TMemoryStreamEx(Stream).ReadByte;113 Character := Stream.ReadByte; 110 114 if LastCharIsSpecialChar then begin 111 115 if Character = ControlCodeSpecialChar then begin … … 115 119 if FrameState = fsInside then 116 120 Inc(FFrameErrorCount); 117 ReceiveBuffer. Clear;121 ReceiveBuffer.Size := 0; 118 122 FrameState := fsInside; 119 123 end else … … 123 127 if ReceiveBuffer.Size > 0 then begin 124 128 ReceiveBuffer.Position := ReceiveBuffer.Size - 1; 125 CRC := TMemoryStreamEx(ReceiveBuffer).ReadByte;129 CRC := ReceiveBuffer.ReadByte; 126 130 ReceiveBuffer.Size := ReceiveBuffer.Size - 1; 127 131 ExpectedCRC := GetStreamCRC8(ReceiveBuffer);
Note:
See TracChangeset
for help on using the changeset viewer.