Changeset 10 for branches/ByteArray/Devices
- Timestamp:
- Aug 7, 2024, 12:12:42 AM (6 months ago)
- Location:
- branches/ByteArray/Devices
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ByteArray/Devices/Memory.pas
r9 r10 32 32 procedure FillZero; 33 33 procedure Clear; 34 function ToString: string; override; 34 35 property Size: TInt read FSize write SetSize; 36 constructor Create; 35 37 destructor Destroy; override; 36 38 end; … … 144 146 end; 145 147 148 function TMemory.ToString: string; 149 var 150 I: Integer; 151 begin 152 Result := ''; 153 for I := 0 to FSize - 1 do 154 Result := Result + ', ' + IntToStr(FData[I]); 155 Delete(Result, 1, 2); 156 end; 157 158 constructor TMemory.Create; 159 begin 160 FSize := 0; 161 end; 162 146 163 destructor TMemory.Destroy; 147 164 begin -
branches/ByteArray/Devices/Serial.pas
r9 r10 4 4 5 5 uses 6 Classes, SysUtils, Device, Int, Channel ;6 Classes, SysUtils, Device, Int, Channel, syncobjs; 7 7 8 8 type 9 TReadEvent = function: Byte of object;10 TWriteEvent = procedure (Value: Byte) of object;11 12 9 { TSerial } 13 10 14 11 TSerial = class(TDevice) 15 12 private 16 FOnRead: TReadEvent; 17 FOnWrite: TWriteEvent; 13 FLock: TCriticalSection; 14 FOnInput: TNotifyEvent; 15 FOnOutput: TNotifyEvent; 16 InputBuffer: string; 17 OutputBuffer: string; 18 function ReadData(Size: TIntSize): TInt; 19 function ReadInputBufferCount(Size: TIntSize): TInt; 20 function ReadOutputBufferCount(Size: TIntSize): TInt; 21 procedure WriteData(Size: TIntSize; Value: TInt); 22 procedure WriteInputBufferCount(Size: TIntSize; Value: TInt); 23 procedure WriteOutputBufferCount(Size: TIntSize; Value: TInt); 18 24 public 19 function ReadData(Size: TIntSize): TInt; 20 procedure WriteData(Size: TIntSize; Value: TInt); 25 constructor Create; 26 destructor Destroy; override; 27 function ReadOutputBuffer: string; 28 procedure WriteInputBuffer(Text: string); 21 29 function GetHandlers: THandlers; override; 22 property On Write: TWriteEvent read FOnWrite write FOnWrite;23 property On Read: TReadEvent read FOnRead write FOnRead;30 property OnOutput: TNotifyEvent read FOnOutput write FOnOutput; 31 property OnInput: TNotifyEvent read FOnInput write FOnInput; 24 32 end; 25 33 … … 31 39 function TSerial.ReadData(Size: TIntSize): TInt; 32 40 begin 33 if Assigned(FOnRead) then Result := FOnRead; 41 FLock.Acquire; 42 try 43 if Length(InputBuffer) > 0 then begin 44 Result := Ord(InputBuffer[1]); 45 Delete(InputBuffer, 1, 1); 46 end; 47 finally 48 FLock.Release; 49 end; 50 end; 51 52 function TSerial.ReadInputBufferCount(Size: TIntSize): TInt; 53 begin 54 FLock.Acquire; 55 try 56 Result := Length(InputBuffer); 57 finally 58 FLock.Release; 59 end; 60 end; 61 62 function TSerial.ReadOutputBufferCount(Size: TIntSize): TInt; 63 begin 64 FLock.Acquire; 65 try 66 Result := Length(OutputBuffer); 67 finally 68 FLock.Release; 69 end; 34 70 end; 35 71 36 72 procedure TSerial.WriteData(Size: TIntSize; Value: TInt); 37 73 begin 38 if Assigned(FOnWrite) then FOnWrite(Value); 74 FLock.Acquire; 75 try 76 OutputBuffer := OutputBuffer + Chr(Value); 77 finally 78 FLock.Release; 79 end; 80 end; 81 82 procedure TSerial.WriteInputBufferCount(Size: TIntSize; Value: TInt); 83 begin 84 FLock.Acquire; 85 try 86 InputBuffer := ''; 87 finally 88 FLock.Release; 89 end; 90 end; 91 92 procedure TSerial.WriteOutputBufferCount(Size: TIntSize; Value: TInt); 93 begin 94 FLock.Acquire; 95 try 96 OutputBuffer := ''; 97 finally 98 FLock.Release; 99 end; 100 end; 101 102 constructor TSerial.Create; 103 begin 104 FLock := TCriticalSection.Create; 105 OutputBuffer := ''; 106 InputBuffer := ''; 107 end; 108 109 destructor TSerial.Destroy; 110 begin 111 FreeAndNil(FLock); 112 inherited; 113 end; 114 115 function TSerial.ReadOutputBuffer: string; 116 begin 117 FLock.Acquire; 118 try 119 Result := OutputBuffer; 120 OutputBuffer := ''; 121 finally 122 FLock.Release; 123 end; 124 end; 125 126 procedure TSerial.WriteInputBuffer(Text: string); 127 begin 128 FLock.Acquire; 129 try 130 InputBuffer := InputBuffer + Text; 131 finally 132 FLock.Release; 133 end; 39 134 end; 40 135 … … 43 138 Result := THandlers.Create; 44 139 Result.ReadHandlers.Add(ReadData); 140 Result.ReadHandlers.Add(ReadOutputBufferCount); 141 Result.ReadHandlers.Add(ReadOutputBufferCount); 45 142 Result.WriteHandlers.Add(WriteData); 143 Result.WriteHandlers.Add(WriteInputBufferCount); 144 Result.WriteHandlers.Add(WriteOutputBufferCount); 46 145 end; 47 146
Note:
See TracChangeset
for help on using the changeset viewer.