summaryrefslogtreecommitdiff
path: root/Radio/Utils/iqconvert/main.swift
blob: f61952993046823d7d91e3570f0d9a733d6e805e (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
//
//  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++ [not supported]")
    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)")



fileReader.close()