diff options
Diffstat (limited to 'Radio/Utils/AirSpyIQ/main.swift')
-rw-r--r-- | Radio/Utils/AirSpyIQ/main.swift | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/Radio/Utils/AirSpyIQ/main.swift b/Radio/Utils/AirSpyIQ/main.swift index 7fea329..a643d5f 100644 --- a/Radio/Utils/AirSpyIQ/main.swift +++ b/Radio/Utils/AirSpyIQ/main.swift @@ -12,11 +12,11 @@ import libairspy //set the command line arguments struct CommandLineArgs: ParsableCommand { @Argument var file:String = "" - @Option(name:.shortAndLong) var serialno: UInt64 = 0 + @Option() var serial: UInt64 = 0 @Option(name:.shortAndLong) var samplerate: Int = 3000000 @Option(name:.shortAndLong) var gain: Int = 0 @Option(name:.shortAndLong) var frequency: Int = 100000000 - @Option(name:.shortAndLong) var nsamples: Int = 1024 + @Option(name:.shortAndLong) var nsamples: Int = 65536 @Flag(help:"Version \(software_version)") var version: Bool = false @Flag(name: .shortAndLong) var verbose: Bool = false } @@ -43,6 +43,28 @@ if (ret != AIRSPY_SUCCESS.rawValue) { exit(1) } +//prepare file descriptor if args specify that +let currentExePath = Process().currentDirectoryPath +var fileDescriptor = FileManager.default +var fileArgUrl:URL? +var fileHandle:FileHandle? +if (args.file != "") { + fileArgUrl = URL(fileURLWithFileSystemRepresentation: args.file, isDirectory: false, relativeTo: nil) + if (checkIfFileExists(args.file)) { + //remove file + do { + try fileDescriptor.removeItem(atPath: fileArgUrl!.path()) + } catch { + print("Couldn't delete file that exists \(fileArgUrl!.path())") + } + } + + //create file + fileDescriptor.createFile(atPath: fileArgUrl!.path(), contents: nil) + try fileHandle = FileHandle(forWritingTo: fileArgUrl!) + try fileHandle?.seekToEnd() +} + var device:AirSpy? do { device = try AirSpy() @@ -53,14 +75,45 @@ do { let sample_rates = device?.getSampleRates() let _ = device?.setSampleRate(sample_rates![0]) +print("sample rate \(sample_rates![0])") -print("Here 5") +var sdr_run = true +var total_samples:Int32=0 func rf_callback(_ transffer: UnsafeMutablePointer<airspy_transfer_t>?) -> Int32 { let t = transffer!.pointee - print("Got \(t.sample_count) samples") + let rx_bufffer = t.samples + let sample_count = t.sample_count + //default value + + if (t.sample_type != AIRSPY_SAMPLE_FLOAT32_IQ) { + print("Unsupported sample type to write") + } + let bytes_to_write = sample_count*2*4 //IQ*float + + total_samples += sample_count + if total_samples > args.nsamples { + sdr_run = false + return 0 + } + + if let file = fileHandle { + let convertedData = Data(bytes: rx_bufffer!, count: Int(bytes_to_write)) + do { + try file.write(contentsOf: convertedData) + } catch { + print("Cant dump data to file") + } + } + + print("Got \(sample_count) samples") + return 0 } +let _ = device?.VGAGain(5) +let _ = device?.mixerGain(5) +let _ = device?.lnaGain(1) + let _ = device?.startRx(rf_callback) let _ = device?.setFrequency(UInt32(args.frequency)) @@ -68,12 +121,14 @@ let _ = device?.setFrequency(UInt32(args.frequency)) sleep(1) var count = 10 while ((device?.isStreaming() != AIRSPY_TRUE.rawValue) -&& (count>0)) { +&& (count>0) && (sdr_run)) { print("Streaming") sleep(1) count -= 1 } +let _ = device?.stopRx() + let _ = device?.close() airspy_exit() |