summaryrefslogblamecommitdiffstats
path: root/hardware/r820.swift
blob: a8fc702ec1bc1eb5b8841898b75f60c52a57753f (plain) (tree)
1
2
3
4
5
6
7
8
9






                                        

                                                                                   
                 
                   




















                                        


                                  




















                                              











































                                                                                                                                                     


                                          

                                                   

     

























                                                                      





                                                      






































                                                                                                         
    














                                                                                                                        

    
//
//  r820.swift
//  r820sdr-init
//
//  Created by Jacky Jack on 15/03/2022.
//

//https://www.kodeco.com/7181017-unsafe-swift-using-pointers-and-interacting-with-c

import Foundation
import r820sdr_init

public class R820API {
    
    
    func R820() {
        print("Start device API")
    }
    
    func getDeviceCount() -> UInt32 {
        return rtlsdr_get_device_count()
    }
    
    
    
}

public class R820Tuner {
    var deviceInitalized:Bool = false
    var dev:       OpaquePointer?  = nil
    
    /**
     Function to initialise tunner
     - Parameters:
     -
     */
    func R820Tuner() {
        print("Initialise tunner")
    }
    
    func open(index devId: UInt32) {
        let err = rtlsdr_open(&dev,devId)
        if (err != 0) {
            print("Error couldnt open device")
            return
        }
        deviceInitalized = true
    }
    
    func close() {
        if self.deviceInitalized {
            rtlsdr_close(dev);
            dev = nil
        }
    }
    
    func getDeviceCount()->UInt32 {
        return rtlsdr_get_device_count();
    }
    
    /*
     func getDeviceName(index: UInt32) -> String {
     return rtlsdr_get_device_name(index)
     }
     */
    
    /*
     func getDeviceUsbString() {
     return rtlsdr_get_device_usb_strings();
     }*/
    func getIndexBySerial(serial: String) -> Int32
    {
        return rtlsdr_get_index_by_serial(serial);//is this ok?
    }
    
    func setXtalFreq(rtlFreq: UInt32, tunnerFreq: UInt32) -> Int32 {
        return rtlsdr_set_xtal_freq(dev, rtlFreq, tunnerFreq);
    }
    
    func getXtalFreq(rtlFreq: UnsafeMutablePointer<UInt32>?, tunnerFreq: UnsafeMutablePointer<UInt32>?)->Int32{
        return rtlsdr_get_xtal_freq(dev, rtlFreq, tunnerFreq)
    }
    
    func getUsbStrings(manufact: UnsafeMutablePointer<CChar>?, product: UnsafeMutablePointer<CChar>?, serial: UnsafeMutablePointer<CChar>?) -> Int32{
        return rtlsdr_get_usb_strings(dev, manufact, product, serial)
    }
    
    func writeEeprom(data: UnsafeMutablePointer<UInt8>?,offset: UInt8, len: UInt16) -> Int32 {
        return rtlsdr_write_eeprom(dev, data, offset, len)
    }
    
    func readEeprom(data: UnsafeMutablePointer<UInt8>?,offset: UInt8, len: UInt16) -> Int32 {
        return rtlsdr_read_eeprom(dev, data, offset, len)
    }
    
    func setCenterFreq(freq: UInt32) -> Int32{
        return rtlsdr_set_center_freq(dev, freq);
    }
    
    func getCenterFreq()->UInt32 {
        return rtlsdr_get_center_freq(dev)
    }
    
    func setFreqCorrection(ppm: Int32) -> Int32 {
        return rtlsdr_set_freq_correction(dev, ppm)
    }
    
    func getFreqCorrection() -> Int32 {
        return rtlsdr_get_freq_correction(dev)
    }
    
    func getTunerType() -> rtlsdr_tuner {
        return rtlsdr_get_tuner_type(dev)
    }
    
    func getTunerGains(gains: UnsafeMutablePointer<Int32>?) -> Int32 {
        return rtlsdr_get_tuner_gains(dev, gains)
    }
    
    func setTunerGain(gain: Int32) -> Int32 {
        return rtlsdr_set_tuner_gain(dev,gain);
    }
    
    func setTunnerBandwidth(bw: UInt32) -> Int32 {
        return rtlsdr_set_tuner_bandwidth(dev, bw)
    }
    
    func setTunerIfGain(stage: Int32, gain: Int32) -> Int32 {
        return rtlsdr_set_tuner_if_gain(dev,stage,gain)
    }
    
    func setTunerGainMode(manual: Int32) -> Int32 {
        return rtlsdr_set_tuner_gain_mode(dev, manual)
    }
    
    func setSampleRate(samplerate: UInt32) -> Int32 {
        return rtlsdr_set_sample_rate(dev, samplerate)
    }
    
    func getSampleRate() -> UInt32 {
        return rtlsdr_get_sample_rate(dev)
    }
    
    func setTestmode(on: Int32) -> Int32 {
        return rtlsdr_set_testmode(dev, on);
    }
    
    func setAgcMode(on: Int32) -> Int32 {
        return rtlsdr_set_agc_mode(dev, on);
    }
    
    func setDirectSampling(on: Int32) -> Int32 {
        return rtlsdr_set_direct_sampling(dev, on)
    }
    
    func getDirectSampling() -> Int32 {
        return rtlsdr_get_direct_sampling(dev)
    }
    
    func setOffsetTuning(on: Int32) -> Int32 {
        return rtlsdr_set_offset_tuning(dev, on)
    }
    
    func getOffsetTuning() -> Int32 {
        return rtlsdr_get_offset_tuning(dev)
    }
    
    func resetBuffer() -> Int32 {
        return rtlsdr_reset_buffer(dev)
    }
    
    func readSync(buf:UnsafeMutableRawPointer?,len: Int32,n_read:UnsafeMutablePointer<Int32>?) -> Int32 {
        return rtlsdr_read_sync(dev, buf, len, n_read);
    }
    
    func waitAsync(cb: rtlsdr_read_async_cb_t?, ctx:UnsafeMutableRawPointer?) -> Int32{
        return rtlsdr_wait_async(dev,cb, ctx);
    }
    
    func readAsync(cb: rtlsdr_read_async_cb_t,ctx:UnsafeMutableRawPointer?, buf_num: UInt32, buf_len: UInt32) -> Int32 {
        return rtlsdr_read_async(dev, cb, ctx, buf_num, buf_len)
    }
    
    func cancelAsync() -> Int32 {
        return rtlsdr_cancel_async(dev);
    }
    
    func setBiasTee(on: Int32) -> Int32 {
        return rtlsdr_set_bias_tee(dev, on)
    }
    
    func setBiasTeeGpio(gpio: Int32, on: Int32) -> Int32 {
        return rtlsdr_set_bias_tee_gpio(dev,gpio, on)
    }
    
}