From: <jim...@us...> - 2013-02-02 18:46:59
|
Revision: 2972 http://openlcb.svn.sourceforge.net/openlcb/?rev=2972&view=rev Author: jimkueneman626 Date: 2013-02-02 18:46:48 +0000 (Sat, 02 Feb 2013) Log Message: ----------- FDI working and implemented in mikroPascal Library and OLCB Commander for OSX, Win32 and Linux Modified Paths: -------------- trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kcontrols.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kdialogs.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/keditcommon.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kfunctions.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kgraphics.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/khexeditor.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/khexeditordesign.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/khexeditorlaz.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kprintpreview.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kprintsetup.ppu trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kwidewinprocs.ppu trunk/scratchpads/jkueneman/Library/olcb_common_tasks.pas trunk/scratchpads/jkueneman/Library/olcb_defines.pas trunk/scratchpads/jkueneman/Library/olcb_utilities.pas trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-darwin/OlcbCommander trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-linux/olcbcommander trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-win32/OlcbCommander.exe trunk/scratchpads/jkueneman/OlcbCommander/OLCB_Commander.lpi trunk/scratchpads/jkueneman/OlcbCommander/OLCB_Commander.lpr trunk/scratchpads/jkueneman/OlcbCommander/OLCB_Commander.lps trunk/scratchpads/jkueneman/OlcbCommander/form_awesome_throttle.lfm trunk/scratchpads/jkueneman/OlcbCommander/form_awesome_throttle.pas trunk/scratchpads/jkueneman/OlcbCommander/form_settings.lfm Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kcontrols.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kdialogs.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/keditcommon.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kfunctions.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kgraphics.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/khexeditor.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/khexeditordesign.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/khexeditorlaz.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kprintpreview.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kprintsetup.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Components/kHexEditor/packages/khexeditor/lib/i386-linux/kwidewinprocs.ppu =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/Library/olcb_common_tasks.pas =================================================================== --- trunk/scratchpads/jkueneman/Library/olcb_common_tasks.pas 2013-02-02 15:18:17 UTC (rev 2971) +++ trunk/scratchpads/jkueneman/Library/olcb_common_tasks.pas 2013-02-02 18:46:48 UTC (rev 2972) @@ -144,6 +144,51 @@ constructor Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte; AStream: TStream); reintroduce; end; + { TWriteAddressSpaceMemoryRawTask } + + TWriteAddressSpaceMemoryRawTask = class(TOlcbTaskBase) + private + FAddressSpace: Byte; + FForceOptionalSpaceByte: Boolean; + FStream: TMemoryStream; + FWriteAddress: DWord; + public + constructor Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte; AWriteAddress: DWord; AStream: TStream); reintroduce; + destructor Destroy; override; + procedure Process(MessageInfo: TOlcbMessage); override; + + property AddressSpace: Byte read FAddressSpace; + property ForceOptionalSpaceByte: Boolean read FForceOptionalSpaceByte write FForceOptionalSpaceByte; + property Stream: TMemoryStream read FStream; + property WriteAddress: DWord read FWriteAddress write FWriteAddress; + end; + + { TReadAddressSpaceMemoryRawTask } + + TReadAddressSpaceMemoryRawTask = class(TOlcbTaskBase) + private + FAddressSpace: Byte; + FCurrentOffset: DWord; + FForceOptionalSpaceByte: Boolean; + FReadByteCount: DWord; + FStream: TMemoryStream; + FReadAddress: DWord; + function GetPayloadSize: Integer; + protected + property CurrentOffset: DWord read FCurrentOffset write FCurrentOffset; + property PayloadSize: Integer read GetPayloadSize; + public + constructor Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte; AReadAddress, AReadByteCount: DWord); reintroduce; + destructor Destroy; override; + procedure Process(MessageInfo: TOlcbMessage); override; + + property AddressSpace: Byte read FAddressSpace; + property ForceOptionalSpaceByte: Boolean read FForceOptionalSpaceByte write FForceOptionalSpaceByte; + property Stream: TMemoryStream read FStream; + property ReadAddress: DWord read FReadAddress; + property ReadByteCount: DWord read FReadByteCount; + end; + { TIdentifyEventsTask } TIdentifyEventsTask = class(TOlcbTaskBase) @@ -285,6 +330,126 @@ implementation +{ TReadAddressSpaceMemoryRawTask } + +function TReadAddressSpaceMemoryRawTask.GetPayloadSize: Integer; +begin + if ReadByteCount - Stream.Size < MAX_CONFIG_MEM_READWRITE_SIZE then + Result := ReadByteCount - Stream.Size + else + Result := MAX_CONFIG_MEM_READWRITE_SIZE; +end; + +constructor TReadAddressSpaceMemoryRawTask.Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte; AReadAddress, AReadByteCount: DWord); +begin + inherited Create(ASourceAlias, ADestinationAlias, StartAsSending); + FStream := TMemoryStream.Create; + FAddressSpace := AnAddressSpace; + FForceOptionalSpaceByte := False; + FReadAddress := AReadAddress; + FReadByteCount := AReadByteCount; + FCurrentOffset := 0; +end; + +destructor TReadAddressSpaceMemoryRawTask.Destroy; +begin + FreeAndNil(FStream); + inherited Destroy; +end; + +procedure TReadAddressSpaceMemoryRawTask.Process(MessageInfo: TOlcbMessage); +var + DatagramReceive: TDatagramReceive; + PIP: TOlcbProtocolIdentification; + Space: TOlcbMemAddressSpace; + Options: TOlcbMemOptions; + DatagramResultStart: Byte; + i: Integer; +begin + case iState of + 0: begin + // Ask for a read from the node + SendMemoryConfigurationRead(AddressSpace, CurrentOffset, PayloadSize, ForceOptionalSpaceByte); + Sending := False; + Inc(FiState); + end; + 1: begin + // Node received the datagram + if IsDatagramAckFromDestination(MessageInfo) then + begin + Sending := False; + Inc(FiState); + end; + end; + 2: begin + // Node sending frame of data + DatagramReceive := nil; + if IsConfigMemoryReadReplyFromDestination(MessageInfo, DatagramReceive) then + begin + if ForceOptionalSpaceByte or (DatagramReceive.RawDatagram[1] and $03 = 0) then // If using the {Space} byte need to skip over it + DatagramResultStart := 7 + else + DatagramResultStart := 6; + for i := DatagramResultStart to DatagramReceive.CurrentPos - 1 do + Stream.WriteByte( DatagramReceive.RawDatagram[i]); + + if PayloadSize = 0 then + begin + Sending := True; + iState := 3; + end else + begin + CurrentOffset := CurrentOffset + MAX_CONFIG_MEM_READWRITE_SIZE; + Sending := True; + iState := 0; + end; + end + end; + 3 : begin + // Done + FDone := True + end; + end; + +end; + +{ TWriteAddressSpaceMemoryRawTask } + +constructor TWriteAddressSpaceMemoryRawTask.Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte; AWriteAddress: DWord; AStream: TStream); +begin + inherited Create(ASourceAlias, ADestinationAlias, StartAsSending); + FStream := TMemoryStream.Create; + if Assigned(AStream) then + begin + AStream.Position := 0; + Stream.CopyFrom(AStream, AStream.Size); + Stream.Position := 0; + end; + FAddressSpace := AnAddressSpace; + FForceOptionalSpaceByte := False; + FWriteAddress := AWriteAddress; +end; + +destructor TWriteAddressSpaceMemoryRawTask.Destroy; +begin + FreeAndNil(FStream); + inherited Destroy; +end; + +procedure TWriteAddressSpaceMemoryRawTask.Process(MessageInfo: TOlcbMessage); +begin + case iState of + 0 : begin + SendMemoryConfigurationWrite(AddressSpace, WriteAddress, $FFFFFFFF, ForceOptionalSpaceByte, Stream); + iState := 1 + end; + 1 : begin + // Done + FDone := True + end; + end; +end; + { TWriteAddressSpaceMemoryTask } constructor TWriteAddressSpaceMemoryTask.Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte; AStream: TStream); @@ -806,10 +971,7 @@ function TBaseAddressSpaceMemoryTask.GetMaxPayloadSize: Byte; begin - if ForceOptionalSpaceByte then - Result := MAX_DATAGRAM_LENGTH - 7 - else - Result := MAX_DATAGRAM_LENGTH - 6; + Result := MAX_CONFIG_MEM_READWRITE_SIZE; end; constructor TBaseAddressSpaceMemoryTask.Create(ASourceAlias, ADestinationAlias: Word; StartAsSending: Boolean; AnAddressSpace: Byte); Modified: trunk/scratchpads/jkueneman/Library/olcb_defines.pas =================================================================== --- trunk/scratchpads/jkueneman/Library/olcb_defines.pas 2013-02-02 15:18:17 UTC (rev 2971) +++ trunk/scratchpads/jkueneman/Library/olcb_defines.pas 2013-02-02 18:46:48 UTC (rev 2972) @@ -201,6 +201,7 @@ TRACTION_DCC_FUNCTION_32k = $01; MAX_DATAGRAM_LENGTH = 72; + MAX_CONFIG_MEM_READWRITE_SIZE = 64; DATAGRAM_REJECTED = $0000; DATAGRAM_REJECTED_PERMANENT_ERROR = $1000; Modified: trunk/scratchpads/jkueneman/Library/olcb_utilities.pas =================================================================== --- trunk/scratchpads/jkueneman/Library/olcb_utilities.pas 2013-02-02 15:18:17 UTC (rev 2971) +++ trunk/scratchpads/jkueneman/Library/olcb_utilities.pas 2013-02-02 18:46:48 UTC (rev 2972) @@ -609,8 +609,21 @@ Result := Result + ' Recive: '; Result := Result + 'From = 0x' + IntToHex( LocalHelper.SourceAliasID, 4); - Result := Result + ' MTI: ' + MTI_ToString(LocalHelper.MTI) + ' - '; + if IsDatagramMTI(LocalHelper.MTI, False) then + begin + Result := Result + '['; + for j := 0 to LocalHelper.DataCount - 1 do + begin + if IsPrintableChar( Char( LocalHelper.Data[j])) then + Result := Result + Char( LocalHelper.Data[j]) + else + Result := Result + '.' + end; + Result := Result + '] MTI: ' + MTI_ToString(LocalHelper.MTI); + end else + Result := Result + ' MTI: ' + MTI_ToString(LocalHelper.MTI) + ' - '; + // SNII/SNIP if LocalHelper.MTI = MTI_SIMPLE_NODE_INFO_REPLY then begin @@ -630,20 +643,12 @@ (LocalHelper.MTI = MTI_PRODUCER_IDENTIFIED_UNKNOWN) or (LocalHelper.MTI = MTI_CONSUMER_IDENTIFY) or (LocalHelper.MTI = MTI_CONSUMER_IDENTIFIED_SET) or (LocalHelper.MTI = MTI_CONSUMER_IDENTIFIED_CLEAR) or (LocalHelper.MTI = MTI_CONSUMER_IDENTIFIED_UNKNOWN) then begin - // S_Len := Length(Result); - // for j := 94 downto S_Len do - // Result := Result + ' '; - Result := Result + 'EventID: ' + EventIDToString(@LocalHelper.Data); end; // Traction Protocol if LocalHelper.MTI = MTI_TRACTION_PROTOCOL then begin - // S_Len := Length(Result); - // for j := 94 downto S_Len do - // Result := Result + ' '; - case LocalHelper.Data[2] and TRACTION_PROTOCOL_MASK of TRACTION_DCC: begin Modified: trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-darwin/OlcbCommander =================================================================== (Binary files differ) Modified: trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-linux/olcbcommander =================================================================== --- trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-linux/olcbcommander 2013-02-02 15:18:17 UTC (rev 2971) +++ trunk/scratchpads/jkueneman/OlcbCommander/Compiled_Binaries/i386-linux/olcbcommander 2013-02-02 18:46:48 UTC (rev 2972) @@ -1,4 +1,4 @@ -ELF |