summaryrefslogtreecommitdiff
path: root/Radio/Utils/iqconvert/main.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Radio/Utils/iqconvert/main.swift')
-rw-r--r--Radio/Utils/iqconvert/main.swift117
1 files changed, 97 insertions, 20 deletions
diff --git a/Radio/Utils/iqconvert/main.swift b/Radio/Utils/iqconvert/main.swift
index 49db280..b8b5f3b 100644
--- a/Radio/Utils/iqconvert/main.swift
+++ b/Radio/Utils/iqconvert/main.swift
@@ -11,7 +11,11 @@ import ArgumentParser
enum SDRInputFormat {
case FMT_NONE
case FMT_U8
+ case FMT_I16
+ case FMT_U16
+ case FMT_SC16Q11
case FMT_F32
+ case FMT_WAV
}
//set the command line arguments
@@ -27,16 +31,17 @@ let args = CommandLineArgs.parseOrExit()
if args.listFormats {
print("Supported input:")
- print(" u8: RTLSDR [not supported]")
- print(" u16: AirSpyHF [not supported]")
+ print(" u8: RTLSDR ")
+ print(" u16: AirSpyHF ")
print(" u16r: AirSpy [not supported]")
- print(" i16: AirSpy [not supported]")
+ print(" i16: AirSpy ")
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(" sc16q11: BladeRF ")
+ print(" fc32r: AirSpy [not supported]") //float32 real 1 * 32bit per sample
+ print(" fc32: AirSpy [not supported]")
print("Supported output:")
- print(" fc32: inspectrum, sdr++ ")
- print(" wav: SDR# [not suppoprted]")
+ print(" fc32: inspectrum ")
+ print(" wav: SDR#,sdr++ [not suppoprted]")
}
//var inputFilePath:String
@@ -60,10 +65,16 @@ 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"]
+ let supportedExtensionList = ["u8","cu8","i16","ci16","u16","cu16","sc16q11"]
if supportedExtensionList.contains(fileExtension) {
if ["u8","cu8"].contains(fileExtension) {
inputFormat = SDRInputFormat.FMT_U8
+ } else if ["i16","ci16"].contains(fileExtension) {
+ inputFormat = SDRInputFormat.FMT_I16
+ } else if ["u16","cu16"].contains(fileExtension) {
+ inputFormat = SDRInputFormat.FMT_U16
+ } else if ["sc16q11"].contains(fileExtension) {
+ inputFormat = SDRInputFormat.FMT_SC16Q11
}
}
}
@@ -78,29 +89,95 @@ if let dotIndex = args.outputFile.lastIndex(of: ".") {
if supportedExtensionList.contains(fileExtension) {
if ["f32","fc32"].contains(fileExtension) {
outputFormat = SDRInputFormat.FMT_F32
+ } else if ["wav"].contains(fileExtension) {
+ outputFormat = SDRInputFormat.FMT_WAV
}
}
}
print("Input file format:\(inputFormat) output file format:\(outputFormat)")
-//read from file
-//if let data_u8:[UInt8] = fileReader.readAll() {
+//read from file and convert to file format
+
+
var data_u8:[UInt8] = []
-do {
- data_u8 = try fileReader.readAll()
-} catch {
- print("Reading file: \(error)")
- exit(1)
+var data_i16:[Int16] = []
+var data_u16:[UInt16] = []
+
+var outdata_f32:[Float32] = []
+
+switch inputFormat {
+case .FMT_U8:
+ do {
+ data_u8 = try fileReader.readAllUInt8()
+ } catch {
+ print("Reading file: \(error)")
+ exit(1)
+ }
+ break
+case .FMT_U16:
+ do {
+ data_u16 = try fileReader.readAllUInt16()
+ } catch {
+ print("Reading file: \(error)")
+ exit(1)
+ }
+ break
+case .FMT_I16:
+ do {
+ data_i16 = try fileReader.readAllInt16()
+ } catch {
+ print("Reading file: \(error)")
+ exit(1)
+ }
+ break
+case .FMT_SC16Q11:
+ do {
+ print("FMT_SC16Q11")
+ data_i16 = try fileReader.readAllInt16()
+ } catch {
+ print("Reading file: \(error)")
+ exit(1)
+ }
+ break
+default:
+ print("Unknow input file format")
}
//convert to output format
-var outdata_f32:[Float32] = []
-if data_u8.count > 0 {
- outdata_f32 = cnvU8toFloat32(data_u8)
-} else {
- print("No data in buffer")
+switch (inputFormat) {
+case .FMT_U8:
+ if data_u8.count > 0 {
+ outdata_f32 = cnvU8toFloat32(data_u8)
+ } else {
+ print("No data in buffer")
+ }
+ break
+case .FMT_U16:
+ if data_u16.count > 0 {
+ outdata_f32 = cnvU16toFloat32(data_u16)
+ } else {
+ print("No data in buffer")
+ }
+ break
+case .FMT_I16:
+ if data_i16.count > 0 {
+ outdata_f32 = cnvI16toFloat32(data_i16)
+ } else {
+ print("No data in buffer")
+ }
+ break
+case .FMT_SC16Q11:
+ if data_i16.count > 0 {
+ print("convert to FMT_SC16Q11")
+ outdata_f32 = cnvSC16Q11toFloat32(data_i16)
+ } else {
+ print("No data in buffer")
+ }
+ break
+default:
+ print("Cant convert to unknown format")
}
// write to file