diff options
Diffstat (limited to 'Radio/Utils/iqconvert/main.swift')
-rw-r--r-- | Radio/Utils/iqconvert/main.swift | 117 |
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 |