1
+ using FrequencyManagerCommon ;
2
+ using FrequencyManagerCommon . Helpers ;
3
+ using FrequencyManagerCommon . Models ;
4
+
5
+ namespace SdrSharpToSdrPlusPlus ;
6
+
7
+ class Program
8
+ {
9
+ static void Main ( string [ ] args )
10
+ {
11
+ const string SdrppDefaultFileName = "frequency_manager_config.json" ;
12
+ const string SdrsharpDefaultFileName = "frequencies.xml" ;
13
+ const string CopyOption = "-c" ;
14
+ const string MergeOption = "-m" ;
15
+
16
+ if ( args . Length == 0 )
17
+ {
18
+ Help ( ) ;
19
+ }
20
+ else
21
+ {
22
+ var option = isOption ( args [ 0 ] ) ? args [ 0 ] . Trim ( ) . ToLower ( ) : CopyOption ;
23
+
24
+ if ( ! CopyOption . Equals ( option ) && ! MergeOption . Equals ( option ) )
25
+ {
26
+ Help ( ) ;
27
+ }
28
+
29
+ var inputFileName = ! isOption ( args [ 0 ] ) ? args [ 0 ] : args [ 1 ] ;
30
+
31
+ var outputFileName = ! isOption ( args [ 0 ] )
32
+ ? ( args . Length > 1 ? args [ 1 ] : null )
33
+ : ( args . Length > 2 ? args [ 2 ] : null ) ;
34
+
35
+ using ( var sdrpp = new SdrPlusPlusHelper ( ) )
36
+ using ( var sdrsharp = new SdrSharpHelper ( ) )
37
+ {
38
+ var inputFileExt = Path . GetExtension ( inputFileName ) ;
39
+
40
+ if ( ".json" . Equals ( inputFileExt . ToLower ( ) ) )
41
+ {
42
+ // convert from sdr++ format to sdr#
43
+
44
+ if ( ! File . Exists ( inputFileName ) )
45
+ {
46
+ ErrorAndExit ( $ "File does not exists; { inputFileName } ") ;
47
+ }
48
+
49
+ var inputChannels = sdrpp . LoadFromFile ( inputFileName ) ;
50
+
51
+ if ( inputChannels == null || ! inputChannels . Any ( ) )
52
+ {
53
+ ErrorAndExit ( $ "Invalid file format; { inputFileName } is not SDR++ frequency file.") ;
54
+ }
55
+
56
+ outputFileName = outputFileName ? . ToLower ( ) ?? SdrsharpDefaultFileName ;
57
+
58
+ var outputChannels = File . Exists ( outputFileName )
59
+ ? sdrsharp . LoadFromFile ( outputFileName )
60
+ : new List < Channel > ( ) ;
61
+
62
+ try
63
+ {
64
+ using ( var frequencyManager = new FrequencyManager ( outputChannels ) )
65
+ {
66
+ if ( File . Exists ( outputFileName ) && MergeOption . Equals ( option ) )
67
+ {
68
+ WriteLine ( $ "Merge { inputFileName . ToLower ( ) } ({ inputChannels . Count } channels) into { outputFileName . ToLower ( ) } ({ outputChannels . Count } channels).") ;
69
+ WriteLine ( $ "Matching by [group name]+[frequency].") ;
70
+ }
71
+ else
72
+ {
73
+ WriteLine ( $ "Copy { inputFileName . ToLower ( ) } ({ inputChannels . Count } channels) into { outputFileName . ToLower ( ) } .") ;
74
+ }
75
+
76
+ ( long updated , long added ) = CopyOption . Equals ( option )
77
+ ? frequencyManager . Copy ( inputChannels )
78
+ : frequencyManager . Merge ( inputChannels ) ;
79
+
80
+ WriteLine ( $ "{ updated } channels updated, { added } channels added.") ;
81
+
82
+ sdrsharp . SaveToFile ( frequencyManager . Channels , outputFileName ) ;
83
+ }
84
+
85
+ Exit ( ) ;
86
+ }
87
+ catch ( Exception ex )
88
+ {
89
+ ErrorAndExit ( ex . Message ) ;
90
+ } ;
91
+ }
92
+ else if ( ".xml" . Equals ( inputFileExt . ToLower ( ) ) )
93
+ {
94
+ // convert from sdr# format to sdr++
95
+
96
+ if ( ! File . Exists ( inputFileName ) )
97
+ {
98
+ ErrorAndExit ( $ "File does not exists; { inputFileName } ") ;
99
+ }
100
+
101
+ var inputChannels = sdrsharp . LoadFromFile ( inputFileName ) ;
102
+
103
+ if ( inputChannels == null || ! inputChannels . Any ( ) )
104
+ {
105
+ ErrorAndExit ( $ "Invalid file format; { inputFileName } is not SDR# frequency file.") ;
106
+ }
107
+
108
+ outputFileName = outputFileName ? . ToLower ( ) ?? SdrppDefaultFileName ;
109
+
110
+ var outputChannels = File . Exists ( outputFileName )
111
+ ? sdrpp . LoadFromFile ( outputFileName )
112
+ : new List < Channel > ( ) ;
113
+
114
+ try
115
+ {
116
+ using ( var frequencyManager = new FrequencyManager ( outputChannels ) )
117
+ {
118
+ if ( File . Exists ( outputFileName ) && MergeOption . Equals ( option ) )
119
+ {
120
+ WriteLine ( $ "Merge { inputFileName . ToLower ( ) } ({ inputChannels . Count } channels) into { outputFileName . ToLower ( ) } ({ outputChannels . Count } channels).") ;
121
+ WriteLine ( $ "Matching by [group name]+[frequency].") ;
122
+ }
123
+ else
124
+ {
125
+ WriteLine ( $ "Copy { inputFileName . ToLower ( ) } ({ inputChannels . Count } channels) into { outputFileName . ToLower ( ) } .") ;
126
+ }
127
+
128
+ ( long updated , long added ) = CopyOption . Equals ( option )
129
+ ? frequencyManager . Copy ( inputChannels )
130
+ : frequencyManager . Merge ( inputChannels ) ;
131
+
132
+ WriteLine ( $ "{ updated } channels updated, { added } channels added.") ;
133
+
134
+ sdrpp . SaveToFile ( frequencyManager . Channels , outputFileName ) ;
135
+ }
136
+
137
+ Exit ( ) ;
138
+ }
139
+ catch ( Exception ex )
140
+ {
141
+ ErrorAndExit ( ex . Message ) ;
142
+ } ;
143
+ }
144
+ else
145
+ {
146
+ Help ( ) ;
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
+ static private bool isOption ( string text )
153
+ {
154
+ return text != null && text . Length == 2 && text . StartsWith ( "-" ) ;
155
+ }
156
+
157
+ static private void Help ( )
158
+ {
159
+ Console . WriteLine ( "==============================================================================" ) ;
160
+ Console . WriteLine ( $ " SDR#/SRD++ frequency file converter https://github.com/thewsoftware ") ;
161
+ Console . WriteLine ( "==============================================================================" ) ;
162
+ Console . WriteLine ( "" ) ;
163
+ Console . WriteLine ( "Usage: sdrfc [-option] [drive:][path][inputfilename] [drive:][path][outputfilename]" ) ;
164
+ Console . WriteLine ( "" ) ;
165
+ Console . WriteLine ( "Options:" ) ;
166
+ Console . WriteLine ( "-c\t Copy channels from input file to output file, overwrite the output file (default)." ) ;
167
+ Console . WriteLine ( "-m\t Merge channels from input file to output file, save the result into the output file." ) ;
168
+ Console . WriteLine ( "" ) ;
169
+ Console . WriteLine ( "Convert frequency channels from one format to another. Auto-detect input and output file formats." ) ;
170
+ Console . WriteLine ( "Create output file if it doesn't exist. If output file does exist and '-m' option is selected" ) ;
171
+ Console . WriteLine ( "then frequency channels from input file are merged into the output file and saved." ) ;
172
+ Console . WriteLine ( "" ) ;
173
+ Exit ( ) ;
174
+ }
175
+
176
+ static private void Exit ( )
177
+ {
178
+ Environment . Exit ( 0 ) ;
179
+ }
180
+
181
+ static private void ErrorAndExit ( string message )
182
+ {
183
+ WriteLine ( $ "Error: { message } ") ;
184
+ Environment . Exit ( - 1 ) ;
185
+ }
186
+
187
+ static private void WriteLine ( string text )
188
+ {
189
+ Console . WriteLine ( $ "[SDRFC] { text } ") ;
190
+ }
191
+ }
0 commit comments