commit ed8684703079cb39bc95650ef858a2b3763e7922 Author: Róka Miklós Date: Thu Jan 8 19:21:09 2026 +0100 Initial check in diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3389cb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +__history +__recovery + +bin +dcu +*.exe +prj.dpgxcon\Win32 +prj.dpgxcon\Win64 + +*.dcu +*.res +*.identcache +*.local +*.dsk +*.dsv + +# documentation intermediate files (TeX) +*.aux +*.bmt +*.dvi +*.log +*.lot +*.mtc* +*.mlt* +*.toc +*.hex diff --git a/prj.tri/Delphi12Athens/Win64/Debug/tri.rsm b/prj.tri/Delphi12Athens/Win64/Debug/tri.rsm new file mode 100644 index 0000000..1a51152 Binary files /dev/null and b/prj.tri/Delphi12Athens/Win64/Debug/tri.rsm differ diff --git a/prj.tri/Delphi12Athens/tri.dpr b/prj.tri/Delphi12Athens/tri.dpr new file mode 100644 index 0000000..0d5a86f --- /dev/null +++ b/prj.tri/Delphi12Athens/tri.dpr @@ -0,0 +1,14 @@ +program tri; + +uses + Vcl.Forms, + main in '..\..\src.tri\main.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/prj.tri/Delphi12Athens/tri.dproj b/prj.tri/Delphi12Athens/tri.dproj new file mode 100644 index 0000000..a625d4b --- /dev/null +++ b/prj.tri/Delphi12Athens/tri.dproj @@ -0,0 +1,1120 @@ + + + {29C9F1DF-C66E-4F8B-ACF7-63B878409C07} + 20.3 + VCL + True + Debug + Win32 + tri + 3 + Application + tri.dpr + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + .\$(Platform)\$(Config) + .\$(Platform)\$(Config) + false + false + false + false + false + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + $(BDS)\bin\delphi_PROJECTICON.ico + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png + $(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png + tri + + + vclwinx;DataSnapServer;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;Skia.Package.RTL;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;vclactnband;fmxFireDAC;dbexpress;FireDACInfxDriver;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;vcltouch;fmxase;DBXOdbcDriver;dbrtl;FireDACDBXDriver;Skia.Package.FMX;FireDACOracleDriver;fmxdae;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + + + vclwinx;DataSnapServer;fmx;emshosting;vclie;DbxCommonDriver;bindengine;IndyIPCommon;VCLRESTComponents;DBXMSSQLDriver;FireDACCommonODBC;emsclient;FireDACCommonDriver;appanalytics;IndyProtocols;vclx;IndyIPClient;dbxcds;vcledge;bindcompvclwinx;emsedge;bindcompfmx;DBXFirebirdDriver;inetdb;FireDACSqliteDriver;DbxClientDriver;FireDACASADriver;soapmidas;vclactnband;fmxFireDAC;dbexpress;FireDACInfxDriver;DBXMySQLDriver;VclSmp;inet;DataSnapCommon;vcltouch;fmxase;DBXOdbcDriver;dbrtl;FireDACDBXDriver;FireDACOracleDriver;fmxdae;FireDACMSAccDriver;CustomIPTransport;FireDACMSSQLDriver;DataSnapIndy10ServerTransport;DataSnapConnectors;vcldsnap;DBXInterBaseDriver;FireDACMongoDBDriver;IndySystem;FireDACTDataDriver;Skia.Package.VCL;vcldb;vclFireDAC;bindcomp;FireDACCommon;DataSnapServerMidas;FireDACODBCDriver;emsserverresource;inetstn;IndyCore;RESTBackendComponents;bindcompdbx;rtl;FireDACMySQLDriver;FireDACADSDriver;RESTComponents;DBXSqliteDriver;vcl;IndyIPServer;dsnapxml;dsnapcon;DataSnapClient;DataSnapProviderClient;adortl;DBXSybaseASEDriver;DBXDb2Driver;vclimg;DataSnapFireDAC;emsclientfiredac;FireDACPgDriver;FireDAC;FireDACDSDriver;inetdbxpress;xmlrtl;tethering;bindcompvcl;dsnap;CloudService;DBXSybaseASADriver;DBXOracleDriver;FireDACDb2Driver;DBXInformixDriver;fmxobj;bindcompvclsmp;DataSnapNativeClient;DatasnapConnectorsFreePascal;soaprtl;soapserver;FireDACIBDriver;$(DCC_UsePackage) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + $(BDS)\bin\default_app.manifest + + + DEBUG;$(DCC_Define) + true + false + true + true + true + true + true + + + false + PerMonitorV2 + C:\Work\mr.sw\sw.bds\bds.tools\mr.devmgr\src.devmgr\;C:\Work\mr.sw\sw.bds\bds.tools\mr.devmgr\src.devmgr\dev\usb\trinity\;C:\Work\mr.sw\sw.bds\bds.tools\mr.devmgr\src.devmgr\dev\usb\trinity\modules\jtag\;C:\Work\mr.sw\sw.bds\bds.tools\mr.devmgr\src.devmgr\dev\usb\;C:\Work\mr.sw\sw.bds\bds.tools\mr.devmgr\src.devmgr\drv\usb\;C:\Work\mr.sw\sw.bds\bds.tools\mr.devmgr\src.devmgr\dev\usb\trinity\modules\;$(Debugger_DebugSourcePath) + + + PerMonitorV2 + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + PerMonitorV2 + + + PerMonitorV2 + + + + MainSource + + +
frmMain
+ dfm +
+ + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
+ + Delphi.Personality.12 + Application + + + + tri.dpr + + + + + + tri.exe + true + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + res\xml + 1 + + + res\xml + 1 + + + + + library\lib\armeabi + 1 + + + library\lib\armeabi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + library\lib\mips + 1 + + + library\lib\mips + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-v21 + 1 + + + res\values-v21 + 1 + + + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-ldpi + 1 + + + res\drawable-ldpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-mdpi + 1 + + + res\drawable-mdpi + 1 + + + + + res\drawable-hdpi + 1 + + + res\drawable-hdpi + 1 + + + + + res\drawable-xhdpi + 1 + + + res\drawable-xhdpi + 1 + + + + + res\drawable-xxhdpi + 1 + + + res\drawable-xxhdpi + 1 + + + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + + + + res\drawable-small + 1 + + + res\drawable-small + 1 + + + + + res\drawable-normal + 1 + + + res\drawable-normal + 1 + + + + + res\drawable-large + 1 + + + res\drawable-large + 1 + + + + + res\drawable-xlarge + 1 + + + res\drawable-xlarge + 1 + + + + + res\values + 1 + + + res\values + 1 + + + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + + + + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + Contents\MacOS + 1 + .framework + + + 0 + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .dll;.bpl + + + + + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 0 + .bpl + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + Contents + 1 + + + Contents + 1 + + + Contents + 1 + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + ..\ + 1 + + + ..\ + 1 + + + ..\ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).launchscreen + 64 + + + ..\$(PROJECTNAME).launchscreen + 64 + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + + + + + + + + + + + + + True + True + + + 12 + + + + +
diff --git a/prj.tri/triPG.groupproj b/prj.tri/triPG.groupproj new file mode 100644 index 0000000..e882916 --- /dev/null +++ b/prj.tri/triPG.groupproj @@ -0,0 +1,44 @@ + + + {2C32184F-3FD9-47DB-96C8-F045004883A5} + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + {29C9F1DF-C66E-4F8B-ACF7-63B878409C07} + Debug + Win32 + True + + + diff --git a/src.tri/main.dfm b/src.tri/main.dfm new file mode 100644 index 0000000..f4a7fbd --- /dev/null +++ b/src.tri/main.dfm @@ -0,0 +1,221 @@ +object frmMain: TfrmMain + Left = 0 + Top = 0 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'Trinity bizgentyu' + ClientHeight = 994 + ClientWidth = 1670 + Color = clBtnFace + Constraints.MinHeight = 536 + Constraints.MinWidth = 851 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poScreenCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + OnShow = FormShow + PixelsPerInch = 192 + DesignSize = ( + 1670 + 994) + TextHeight = 32 + object tvItems: TVirtualStringTree + Left = 11 + Top = 11 + Width = 1648 + Height = 294 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Anchors = [akLeft, akTop, akRight] + DefaultNodeHeight = 40 + Header.AutoSizeIndex = 5 + Header.Height = 38 + Header.MaxHeight = 20000 + Header.MinHeight = 20 + Header.Options = [hoColumnResize, hoDrag, hoShowSortGlyphs, hoVisible, hoAutoSpring] + Indent = 36 + Margin = 8 + TabOrder = 0 + TextMargin = 8 + TreeOptions.PaintOptions = [toShowButtons, toShowDropmark, toShowTreeLines, toThemeAware, toUseBlendedImages, toFullVertGridLines, toUseExplorerTheme] + TreeOptions.SelectionOptions = [toFullRowSelect, toSelectNextNodeOnRemoval] + OnFreeNode = tvItemsFreeNode + OnGetText = tvItemsGetText + Touch.InteractiveGestures = [igPan, igPressAndTap] + Touch.InteractiveGestureOptions = [igoPanSingleFingerHorizontal, igoPanSingleFingerVertical, igoPanInertia, igoPanGutter, igoParentPassthrough] + Columns = < + item + Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coVisible, coAllowFocus, coUseCaptionAlignment, coEditable, coStyleColor] + Position = 0 + Spacing = 4 + Text = 'Name' + Width = 200 + end + item + Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coVisible, coAllowFocus, coUseCaptionAlignment, coEditable, coStyleColor] + Position = 1 + Spacing = 4 + Text = 'VID' + Width = 120 + end + item + Options = [coAllowClick, coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coVisible, coAllowFocus, coUseCaptionAlignment, coEditable, coStyleColor] + Position = 2 + Spacing = 4 + Text = 'PID' + Width = 120 + end + item + Position = 3 + Spacing = 4 + Text = 'Functions' + Width = 400 + end + item + Position = 4 + Spacing = 4 + Text = 'Serial' + Width = 150 + end + item + Position = 5 + Spacing = 4 + Text = 'Description' + Width = 400 + end + item + Position = 6 + Spacing = 4 + Text = 'Location' + Width = 200 + end> + end + object pcFunctions: TPageControl + Left = 12 + Top = 318 + Width = 1646 + Height = 664 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + ActivePage = tsFirmware + Anchors = [akLeft, akTop, akRight, akBottom] + TabOrder = 1 + object tsFirmware: TTabSheet + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'Firmware' + object Button1: TButton + Left = 1072 + Top = 28 + Width = 86 + Height = 50 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = '...' + TabOrder = 0 + OnClick = Button1Click + end + object StaticText1: TStaticText + Left = 32 + Top = 38 + Width = 120 + Height = 36 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'StaticText1' + TabOrder = 1 + end + object ebFirmware: TEdit + Left = 288 + Top = 34 + Width = 772 + Height = 40 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + TabOrder = 2 + end + object btnDownload: TButton + Left = 1184 + Top = 28 + Width = 150 + Height = 50 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'Download' + TabOrder = 3 + OnClick = btnDownloadClick + end + object Button2: TButton + Left = 1056 + Top = 272 + Width = 150 + Height = 50 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'Refresh' + TabOrder = 4 + OnClick = Button2Click + end + end + object tsIIC: TTabSheet + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'tsIIC' + ImageIndex = 1 + end + end + object Button3: TButton + Left = 640 + Top = 480 + Width = 150 + Height = 50 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'Button3' + TabOrder = 2 + OnClick = Button3Click + end + object Button4: TButton + Left = 640 + Top = 592 + Width = 150 + Height = 50 + Margins.Left = 6 + Margins.Top = 6 + Margins.Right = 6 + Margins.Bottom = 6 + Caption = 'Button4' + TabOrder = 3 + OnClick = Button4Click + end + object od: TOpenDialog + Left = 1088 + Top = 192 + end +end diff --git a/src.tri/main.pas b/src.tri/main.pas new file mode 100644 index 0000000..e74a00c --- /dev/null +++ b/src.tri/main.pas @@ -0,0 +1,570 @@ +unit main; + +interface + +uses + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VirtualTrees.BaseAncestorVCL, + VirtualTrees.BaseTree, VirtualTrees.AncestorVCL, VirtualTrees, + Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls; + +const + GUID_DEVINTERFACE_USB_DEVICE: TGUID = '{CDDE880F-898A-4DAB-B0EA-51FBA32C1D82}'; + DBT_DEVICEARRIVAL = $8000; // system detected a new device + DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone + DBT_DEVTYP_DEVICEINTERFACE = $00000005; // device interface class + +type + PDevBroadcastHdr = ^DEV_BROADCAST_HDR; + DEV_BROADCAST_HDR = packed record + dbch_size : DWORD; + dbch_devicetype: DWORD; + dbch_reserved : DWORD; + end; + + PDevBroadcastDeviceInterface = ^DEV_BROADCAST_DEVICEINTERFACE; + DEV_BROADCAST_DEVICEINTERFACE = record + dbcc_size : DWORD; + dbcc_devicetype: DWORD; + dbcc_reserved : DWORD; + dbcc_classguid : TGUID; + dbcc_name : char; + end; + + TfrmMain = class(TForm) + tvItems : TVirtualStringTree; + pcFunctions : TPageControl; + tsFirmware : TTabSheet; + tsIIC : TTabSheet; + od : TOpenDialog; + Button1 : TButton; + StaticText1 : TStaticText; + ebFirmware : TEdit; + btnDownload : TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + + + procedure FormCreate( Sender : TObject); + procedure FormDestroy( Sender : TObject); + procedure FormShow( Sender : TObject); + + procedure tvItemsGetText( Sender : TBaseVirtualTree; + Node : PVirtualNode; + Column : TColumnIndex; + TextType : TVSTTextType; + var CellText : string); + + procedure tvItemsFreeNode( Sender : TBaseVirtualTree; + Node : PVirtualNode); + + procedure Button1Click(Sender: TObject); + procedure btnDownloadClick(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + + private + procedure DoUsbArrival( ADevicePath : string); + procedure DoUsbRemoval( ADevicePath : string); + + procedure RefreshDeviceNode( Node: PVirtualNode); + end; + +var + frmMain: TfrmMain; + +implementation +uses + mr.drv.trinity, + mr.dev.usb, + mr.dev.manager, + mr.trinity, + mr.trinity.types, + + m.jtag.types; + +type + TNodeType = ( + ntTRI, + ntJTG + ); + + PxxData = ^TxxData; + TxxData = record + NodeType : TNodeType; + Name : string; + VID : string; + PID : string; + Functions : string; + Serial : string; + Description : string; + Location : string; + DevicePath : string; + Capabilities: TCapabilities; + end; + +{$R *.dfm} + +// ================================================================================================ +// main :: Form Ceate +// ================================================================================================ +procedure TfrmMain.Button1Click(Sender: TObject); +begin + od.Filter := '*.hex'; + od.DefaultExt := '.hex'; + if od.Execute then + ebFirmware.Text := od.FileName; +end; + +procedure TfrmMain.Button2Click(Sender: TObject); +begin + for var node in tvItems.Nodes do + RefreshDeviceNode( node) +end; + +procedure TfrmMain.Button3Click(Sender: TObject); +begin + var node : PVirtualNode := tvItems.FocusedNode; + var data : PxxData := tvItems.GetNodeData( node); + + if (data <> nil) and (data.DevicePath <> '') then + begin + var dev := AllocateDevice( data.DevicePath); + + if dev is TTrinity then + begin + with TTrinity(dev) do + begin + var ids: array [0..9] of cardinal; + var s := ''; + + for var i:=0 to 9 do + ids[i] := 0; + + var buf: array [0..19] of AnsiChar; + + Open; + + buf[ 0] := 'R'; + buf[ 1] := '?'; + + iic.Write( $41, 2, @buf[0], 100); + iic.Read( $41, 11, @buf[0], 100); + +{ + buf[ 0] := 'C'; + buf[ 1] := 'W'; + + iic.Write( $41, 2, @buf[0], 100); + + + + buf[ 0] := 'D'; + buf[ 1] := '1'; + buf[ 2] := '0'; + buf[ 3] := '0'; + buf[ 4] := '2'; + buf[ 5] := '.'; + buf[ 6] := '1'; + buf[ 7] := '2'; + buf[ 8] := '3'; + buf[ 9] := '4'; + buf[10] := '5'; + + iic.Write( $41, 11, @buf[0], 100); + + buf[ 0] := 'D'; + buf[ 1] := '1'; + buf[ 2] := '?'; + + iic.Write( $41, 3, @buf[0], 100); + iic.Read( $41, 11, @buf[0], 100); +} + +{ + jtag.scan( @ids[0], 10); + + for var i := 0 to 9 do + begin + if ids[i] <> 0 then + begin + if s <> '' then + s := s+ ', '; + + s := s + Format( '%8.8X', [ids[i]]); + end + + else break + end; +} + + + Close + end; + end; + + DeallocateDevice( dev); + end; +end; + +procedure TfrmMain.Button4Click(Sender: TObject); +begin + var node : PVirtualNode := tvItems.FocusedNode; + var data : PxxData := tvItems.GetNodeData( node); + + var buf : array [0..19] of AnsiChar; + + if (data <> nil) and (data.DevicePath <> '') then + begin + var dev := AllocateDevice( data.DevicePath); + + if dev is TTrinity then + begin + with TTrinity(dev) do + begin + var ids: array [0..9] of cardinal; + var s := ''; + + for var i:=0 to 9 do + ids[i] := 0; + + + Open; + + iic.Read( $41, 12, @buf[0], 100); + + s := buf; + + Close + end; + end; + + DeallocateDevice( dev); + end; + +end; + +procedure TfrmMain.btnDownloadClick(Sender: TObject); +begin + if FileExists( ebFirmware.Text) then + begin + var node : PVirtualNode := tvItems.FocusedNode; + var data : PxxData := tvItems.GetNodeData( node); + + if (data <> nil) and (data.DevicePath <> '') then + begin + var dev := AllocateDevice( data.DevicePath); + + if dev is TTrinity then + with TTrinity(dev) do + begin + Screen.Cursor := crHourGlass; + + Open; + DownloadFirmware( ebFirmware.Text); + Close; + + Screen.Cursor := crDefault; + end; + + DeallocateDevice( dev); + +// RefreshDeviceNode( tvItems.FocusedNode); +// tvItems.Invalidate; +// tvItems.Refresh + end; + end; +end; + +procedure TfrmMain.FormCreate(Sender: TObject); +begin + tvItems.NodeDataSize := sizeof( TxxData); + + RegisterUsbConnectEventHandler( DoUsbArrival); + RegisterUsbDisconnectEventHandler( DoUsbRemoval); +end; + +// ================================================================================================ +// main :: form destroy +// ================================================================================================ +procedure TfrmMain.FormDestroy(Sender: TObject); +begin + RegisterUsbConnectEventHandler( nil); + RegisterUsbDisconnectEventHandler( nil); +end; + + +// ================================================================================================ +// main :: form show +// ================================================================================================ +procedure TfrmMain.FormShow(Sender: TObject); +var + Functions: TCapabilities; + +begin + GetDeviceList + ( + function( VID: word; PID: word; Desc: string; Loc: string; DevicePath: string): boolean + begin +{ + var key := (VID shl 16) + PID; + var s := ''; + var f := ''; + var sn := ''; + var cap : TCapabilities; + + + if key = $16D00712 then + begin + var dev := AllocateDevice( DevicePath); + + if dev is TTrinity then + with TTrinity(dev) do + begin + + Open; + + cap := TTrinity(dev).Capabilities; + + if (Functions = []) or ( (cap * Functions) = Functions) + then f := Caps2String( cap) + else f := ''; + + sn := TTrinity(dev).SerialNumber; + + if f <> '' then + Desc := ' ['+ f +']'; + + Close + + end; + + DeallocateDevice( dev); + end; +} + + var node : PVirtualNode := tvItems.AddChild(nil); + var data : PxxData := tvItems.GetNodeData( node); + + data.DevicePath := DevicePath; + RefreshDeviceNode( node); + + exit; +{ + if data <> nil then + begin + if key = $16D00712 + then data.Name := 'Trinity' + else data.Name := 'Cypress FX2LP'; + + data.VID := Format( '0x%4.4X', [VID]); + data.PID := Format( '0x%4.4X', [PID]); + data.Functions := f; + data.Serial := sn; + data.Description := Desc; + data.Location := loc; + data.DevicePath := DevicePath; + data.Capabilities := cap; + end; +} +{ + if capJTAG in cap then + begin + var dev2 := AllocateDevice( DevicePath); + + if dev2 is TTrinity then + with TTrinity(dev2) do + begin + Open; + + var ids: array [0..9] of cardinal; + var jtg: IJTAG; + + if Supports( dev2, IJTAG, jtg) then + begin + jtg.scan( @ids[0], 10); + + s := ''; + + for var i := 0 to 9 do + begin + if ids[i] <> 0 then + begin + if s <> '' then + s := s+ ', '; + + s := s + Format( '%8.8X', [ids[i]]); + + node := tvItems.AddChild(node); + data := tvItems.getnodedata( node); + + data.Name := s; + end + + else + break + end; + + end; + end; + + + + Close + end; +} + + exit( true) + end + ) + +end; + +// ================================================================================================ +// tvItems :: Free Node +// ================================================================================================ +procedure TfrmMain.tvItemsFreeNode( Sender: TBaseVirtualTree; + Node : PVirtualNode); +begin + var data: PxxData := Sender.GetNodeData( Node); + + if data <> nil then + begin + data.Name := ''; + data.VID := ''; + data.PID := ''; + data.Functions := ''; + data.Serial := ''; + data.Description := ''; + data.Location := ''; + data.DevicePath := ''; + end; +end; + +// ================================================================================================ +// tvItems :: Get Text +// ================================================================================================ +procedure TfrmMain.tvItemsGetText( Sender : TBaseVirtualTree; + Node : PVirtualNode; + Column : TColumnIndex; + TextType : TVSTTextType; + var CellText : string); +begin + var data: PxxData := Sender.GetNodeData( Node); + + if data <> nil then + begin + case Column of + 0: CellText := data.Name; + 1: CellText := data.VID; + 2: CellText := data.PID; + 3: CellText := data.Functions; + 4: CellText := data.Serial; + 5: CellText := data.Description; + 6: CellText := data.Location; + end + end +end; + +procedure TfrmMain.RefreshDeviceNode( Node: PVirtualNode); +begin + var data: PxxData:= tvItems.GetNodeData( node); + + if (data <> nil) and (data.DevicePath <> '') then + begin + var dev := AllocateDevice( data.DevicePath); + + if dev <> nil then + begin + var _fun := ''; + var _sn := ''; + var _dsc := dev.Description; + var _key := (dev.VendorID shl 16) + dev.ProductID; + + + if dev is TTrinity then + with TTrinity(dev) do + begin + Open; + + var fun : TCapabilities := []; + var cap := TTrinity(dev).Capabilities; + + if (fun = []) or ( (cap * fun) = fun) then + _fun := Caps2String( cap); + + _sn := TTrinity(dev).SerialNumber; + + if _fun <> '' then + _dsc := _dsc +' ['+ _fun +']'; + + Close + end; + + if _key = $16D00712 + then data.Name := 'Trinity' + else data.Name := 'Cypress FX2LP'; + + data.VID := Format( '0x%4.4X', [ dev.VendorID ]); + data.PID := Format( '0x%4.4X', [ dev.ProductID]); + + data.Location := dev.Location; + data.Functions := _fun; + data.Serial := _sn; + data.Description := _dsc; + end; + + tvItems.InvalidateNode( Node); + + DeallocateDevice( dev); + end; +end; + + +procedure TfrmMain.DoUsbArrival( ADevicePath: string); +begin + var node: PVirtualNode := tvItems.AddChild(nil); + var data: PxxData := tvItems.GetNodeData( node); + + data.DevicePath := ADevicePath; + RefreshDeviceNode( node) +end; + +procedure TfrmMain.DoUsbRemoval( ADevicePath: string); +var + vid : word; + pid : word; + loc : string; + dsc : string; + + data: PxxData; + next: PVirtualNode; + +begin + ParseDevicePath( ADevicePath, vid, pid, loc, dsc); + + next := nil; + + with tvItems do + begin + BeginUpdate; + + for var node in LevelNodes( 0) do + begin + data := GetNodeData( node); + + if CompareText( data.Location, loc) = 0 then + begin + DeleteNode( node); + break + end; + end; + + EndUpdate + end +end; + + +end.