44using OneWare . Essentials . Behaviors ;
55using OneWare . Essentials . Enums ;
66using OneWare . Essentials . Services ;
7+ using OneWare . Quartus . Helper ;
78using OneWare . UniversalFpgaProjectSystem . Models ;
89using OneWare . UniversalFpgaProjectSystem . Parser ;
910using OneWare . UniversalFpgaProjectSystem . Services ;
@@ -45,9 +46,21 @@ public async Task DownloadAsync(UniversalFpgaProjectRoot project)
4546 ? "1"
4647 : "\" " + cableSetting + "\" " ;
4748
49+ var qsfPath = QsfHelper . GetQsfPath ( project ) ;
50+ var qsf = QsfHelper . ReadQsf ( qsfPath ) ;
51+
52+ var outputDirRelative = qsf . GetGlobalAssignment ( "PROJECT_OUTPUT_DIRECTORY" ) ;
53+
54+ var outputDir = project . FullPath ;
55+
56+ if ( outputDirRelative != null )
57+ {
58+ outputDir = Path . Combine ( outputDir , outputDirRelative ) ;
59+ }
60+
4861 if ( ! longTerm )
4962 {
50- var sofFile = Path . GetFileName ( FirstFileInPath ( project . FullPath , ".sof" ) ?? "" ) ;
63+ var sofFile = Path . GetFileName ( FirstFileInPath ( outputDir , ".sof" ) ) ;
5164
5265 if ( string . IsNullOrEmpty ( sofFile ) )
5366 {
@@ -64,7 +77,7 @@ public async Task DownloadAsync(UniversalFpgaProjectRoot project)
6477 pgmArgs . AddRange ( [ "-o" , $ "{ shortTermOperation } ;{ sofFile } "] ) ;
6578
6679 await childProcessService . ExecuteShellAsync ( "quartus_pgm" , pgmArgs ,
67- project . FullPath , "Running Quartus programmer (Short-Term)..." , AppState . Loading , true ) ;
80+ outputDir , "Running Quartus programmer (Short-Term)..." , AppState . Loading , true ) ;
6881 }
6982 else
7083 {
@@ -74,7 +87,7 @@ await childProcessService.ExecuteShellAsync("quartus_pgm", pgmArgs,
7487
7588 if ( longTermFormat . Equals ( "pof" , StringComparison . OrdinalIgnoreCase ) )
7689 {
77- var pofFile = Path . GetFileName ( FirstFileInPath ( project . FullPath , ".pof" ) ?? "" ) ;
90+ var pofFile = Path . GetFileName ( FirstFileInPath ( outputDir , ".pof" ) ?? "" ) ;
7891
7992 if ( string . IsNullOrEmpty ( pofFile ) )
8093 {
@@ -87,7 +100,7 @@ await childProcessService.ExecuteShellAsync("quartus_pgm", pgmArgs,
87100 else
88101 {
89102 //Use CPF to convert SOF in given format
90- var sofFile = Path . GetFileName ( FirstFileInPath ( project . FullPath , ".sof" ) ?? "" ) ;
103+ var sofFile = Path . GetFileName ( FirstFileInPath ( outputDir , ".sof" ) ?? "" ) ;
91104
92105 if ( string . IsNullOrEmpty ( sofFile ) )
93106 {
@@ -109,7 +122,7 @@ await childProcessService.ExecuteShellAsync("quartus_pgm", pgmArgs,
109122 cpfArgs . AddRange ( [ "-c" , sofFile , convertedFilePath ] ) ;
110123
111124 var result = await childProcessService . ExecuteShellAsync ( "quartus_cpf" , cpfArgs ,
112- project . FullPath , $ "Converting .sof to .{ longTermFormat . ToLower ( ) } ...") ;
125+ outputDir , $ "Converting .sof to .{ longTermFormat . ToLower ( ) } ...") ;
113126
114127 if ( ! result . success ) return ;
115128
@@ -125,7 +138,7 @@ await childProcessService.ExecuteShellAsync("quartus_pgm", pgmArgs,
125138 pgmArgs . AddRange ( [ "-o" , $ "{ longTermOperation } ;{ programFile } "] ) ;
126139
127140 await childProcessService . ExecuteShellAsync ( "quartus_pgm" , pgmArgs ,
128- project . FullPath , "Running Quartus programmer (Long-Term)..." , AppState . Loading , true ) ;
141+ outputDir , "Running Quartus programmer (Long-Term)..." , AppState . Loading , true ) ;
129142 }
130143 }
131144}
0 commit comments