blob: 49db2801fa6c066f83ce05fe364d98c8012bd227 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
//
// main.swift
// iqconvert
//
// Created by Jacky Jack on 17/01/2025.
//
import Foundation
import ArgumentParser
enum SDRInputFormat {
case FMT_NONE
case FMT_U8
case FMT_F32
}
//set the command line arguments
struct CommandLineArgs: ParsableCommand {
@Argument var inputFile:String = ""
@Argument var outputFile:String = ""
@Flag(help:"Version \(software_version)") var version: Bool = false
@Flag(name: .shortAndLong) var verbose: Bool = false
@Flag(name: .shortAndLong) var listFormats: Bool = false
}
let args = CommandLineArgs.parseOrExit()
if args.listFormats {
print("Supported input:")
print(" u8: RTLSDR [not supported]")
print(" u16: AirSpyHF [not supported]")
print(" u16r: AirSpy [not supported]")
print(" i16: AirSpy [not supported]")
print(" i16r: AirSpy [not supported]") //int16 real 1 * 16bit per sample
print(" sc16q11: BladeRF [not supported]")
print(" fc32r: AirSpy [not supported]") //float32 real 1 * 32bit per sampl
print("Supported output:")
print(" fc32: inspectrum, sdr++ ")
print(" wav: SDR# [not suppoprted]")
}
//var inputFilePath:String
//check if input file exists as parameter is given
if !checkIfFileExists(args.inputFile) {
print("Error: Input file \(args.inputFile) does not exist")
exit(1)
}
let fileReader = FileReader()
do {
try fileReader.open(filename: args.inputFile)
} catch {
print("ERROR: \(error) - Cant open file \(args.inputFile)")
exit(1)
}
var inputFormat = SDRInputFormat.FMT_NONE
//file is open lets detect extension
if let dotIndex = args.inputFile.lastIndex(of: ".") {
let index = args.inputFile.index(dotIndex, offsetBy: 1)
let fileExtension = String(args.inputFile[index..<args.inputFile.endIndex])
print("\(args.inputFile) extension \(fileExtension)")
let supportedExtensionList = ["u8","cu8"]
if supportedExtensionList.contains(fileExtension) {
if ["u8","cu8"].contains(fileExtension) {
inputFormat = SDRInputFormat.FMT_U8
}
}
}
//outputfile Format
var outputFormat = SDRInputFormat.FMT_NONE
if let dotIndex = args.outputFile.lastIndex(of: ".") {
let index = args.outputFile.index(dotIndex, offsetBy: 1)
let fileExtension = String(args.outputFile[index..<args.outputFile.endIndex])
print("\(args.outputFile) extension \(fileExtension)")
let supportedExtensionList = ["f32","fc32"]
if supportedExtensionList.contains(fileExtension) {
if ["f32","fc32"].contains(fileExtension) {
outputFormat = SDRInputFormat.FMT_F32
}
}
}
print("Input file format:\(inputFormat) output file format:\(outputFormat)")
//read from file
//if let data_u8:[UInt8] = fileReader.readAll() {
var data_u8:[UInt8] = []
do {
data_u8 = try fileReader.readAll()
} catch {
print("Reading file: \(error)")
exit(1)
}
//convert to output format
var outdata_f32:[Float32] = []
if data_u8.count > 0 {
outdata_f32 = cnvU8toFloat32(data_u8)
} else {
print("No data in buffer")
}
// write to file
let fileWrite = FileWriter()
var file_ok = false
if (checkIfFileExists(args.outputFile)) {
do {
print("try to delet file for write")
try fileWrite.deleteForWrite(filename: args.outputFile)
} catch {
print("cant delete file \(error)")
exit(1)
}
} else {
do {
print("try to creating file")
try fileWrite.createForWrite(filename: args.outputFile)
} catch {
print("cant create file \(error)")
exit(1)
}
}
do {
try fileWrite.writeAll(outdata_f32)
} catch {
print("Cant write to file \(error)")
exit(1)
}
fileReader.close()
fileWrite.close()
|