Struct Device

Source
pub struct Device { /* private fields */ }

Implementations§

Source§

impl Device

Source

pub fn close(&self) -> Error

Close the device.

Examples found in repository?
examples/ex1.rs (line 236)
173fn main() {
174    // ---------- Device Check ----------
175    let count = rtlsdr::get_device_count();
176    if count == 0 {
177        println!("No devices found, exiting.");
178        return;
179    }
180
181    for i in 0..count {
182        let (m, p, s, err) = rtlsdr::get_device_usb_strings(i);
183        println!("get_device_usb_strings: {:?} - {} {} {}", err, m, p, s);
184    }
185
186    let index = 0;
187    println!("===== Device name, index {}: {} =====",
188             index,
189             rtlsdr::get_device_name(0));
190    println!("===== Running tests using device indx: 0 =====\n");
191
192    let (dev, mut err) = rtlsdr::open(index);
193    match err {
194        Error::NoError => println!("open successful"),
195        _ => return,
196    }
197
198    err = sdr_config(&dev);
199    match err {
200        Error::NoError => println!("sdr_config successful..."),
201        _ => return,
202    }
203
204    println!("calling read_sync...");
205    for i in 0..10 {
206        let (_, read_count, err) = dev.read_sync(rtlsdr::DEFAULT_BUF_LENGTH);
207        println!("----- read_sync requested iteration {} -----", i);
208        println!("\tread_sync requested - {}", rtlsdr::DEFAULT_BUF_LENGTH);
209        println!("\tread_sync received  - {}", read_count);
210        println!("\tread_sync err msg   - {:?}", err);
211    }
212
213    dev.reset_buffer();
214
215    // read_async is a blocking call and doesn't return until
216    // async_stop is called , so we spawn a thread that sleeps
217    // for a bit while our async callback is called...
218    let d = dev.clone();
219    thread::spawn(move || {
220        println!("async_stop thread sleeping for 5 seconds...");
221        thread::sleep(Duration::from_millis(5000));
222        println!("async_stop thread awake, canceling read async...");
223        d.cancel_async();
224    });
225
226    println!("calling read_async...");
227    err = dev.read_async(Some(read_async_callback),
228                         ptr::null_mut(),
229                         rtlsdr::DEFAULT_ASYNC_BUF_NUMBER,
230                         rtlsdr::DEFAULT_BUF_LENGTH);
231    match err {
232        Error::NoError => println!("device close successful..."),
233        _ => println!("dev close error - {:?}", err),
234    }
235
236    err = dev.close();
237    match err {
238        Error::NoError => println!("device close successful..."),
239        _ => println!("dev close error - {:?}", err),
240    }
241}
Source

pub fn set_xtal_freq(&self, rtl_freq_hz: i32, tuner_freq_hz: i32) -> Error

Sets the crystal oscillator frequencies.

Typically both ICs (rtlsdr and tuner) use the same clock. Changing the clock may make sense if you are applying an external clock to the tuner or to compensate the frequency (and sample rate) error caused by the original (cheap) crystal.

Note, call this function only if you fully understand the implications.

Examples found in repository?
examples/ex1.rs (line 53)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_xtal_freq(&self) -> (i32, i32, Error)

Returns the crystal oscillator frequencies. Typically both ICs (rtlsdr and tuner) use the same clock.

Examples found in repository?
examples/ex1.rs (line 93)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_usb_strings(&self) -> (String, String, String, Error)

Returns the device information (manufact, product, serial). Note, strings may be empty.

Examples found in repository?
examples/ex1.rs (line 11)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn write_eeprom(&self, data: Vec<u8>, offset: u8) -> Error

Writes information data to the EEPROM.

Source

pub fn read_eeprom(&self, offset: u8, len: u16) -> (Vec<u8>, Error)

Returns information data read from the EEPROM.

Source

pub fn set_center_freq(&self, freq_hz: i32) -> Error

Sets the center frequency.

Examples found in repository?
examples/ex1.rs (line 118)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_center_freq(&self) -> i32

Returns the tuned frequency or zero on error.

Examples found in repository?
examples/ex1.rs (line 124)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn set_freq_correction(&self, ppm: i32) -> Error

Sets the frequency correction.

Examples found in repository?
examples/ex1.rs (line 149)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_freq_correction(&self) -> i32

Returns the frequency correction value.

Examples found in repository?
examples/ex1.rs (line 145)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_tuner_type(&self) -> String

Returns the tuner type.

Examples found in repository?
examples/ex1.rs (line 52)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_tuner_gains(&self) -> (Vec<i32>, Error)

Returns a list of supported tuner gains. Values are in tenths of dB, e.g. 115 means 11.5 dB.

Examples found in repository?
examples/ex1.rs (line 67)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn set_tuner_gain(&self, gain: i32) -> Error

Sets the tuner gain. Note, manual gain mode must be enabled for this to work. Valid gain values may be queried using get_tuner_gains.

Valid values (in tenths of a dB) are: -10, 15, 40, 65, 90, 115, 140, 165, 190, 215, 240, 290, 340, 420, 430, 450, 470, 490

Gain values are in tenths of dB, e.g. 115 means 11.5 dB.

Examples found in repository?
examples/ex1.rs (line 75)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_tuner_gain(&self) -> i32

Returns the tuner gain.

Gain values are in tenths of dB, e.g. 115 means 11.5 dB.

Source

pub fn set_tuner_bandwidth(&self, bw_hz: i32) -> Error

Sets the device bandwidth.

Examples found in repository?
examples/ex1.rs (line 130)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn set_tuner_if_gain(&self, stage: i32, gains_tenths_db: i32) -> Error

Sets the intermediate frequency gain.

Intermediate frequency gain stage number 1 to 6. Gain values are in tenths of dB, e.g. -30 means -3.0 dB.

Source

pub fn set_tuner_gain_mode(&self, manual_mode: bool) -> Error

Sets the gain mode, automatic or manual. Manual gain mode must be enabled for the gain setter function to work.

Examples found in repository?
examples/ex1.rs (line 61)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn set_sample_rate(&self, rate_hz: i32) -> Error

Sets the sample rate.

When applicable, the baseband filters are also selected based on the requested sample rate.

Examples found in repository?
examples/ex1.rs (line 84)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn get_sample_rate(&self) -> i32

Returns the sample rate.

Examples found in repository?
examples/ex1.rs (line 90)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn set_testmode(&self, test_mode: bool) -> Error

Sets device to test mode.

Test mode returns 8 bit counters instead of samples. Note, the counter is generated inside the device.

Source

pub fn set_agc_mode(&self, agc_mode: bool) -> Error

Sets the AGC mode.

Source

pub fn set_direct_sampling(&self, mode: SamplingMode) -> Error

Sets the direct sampling mode.

When enabled, the IF mode of the device is activated, and set_center_freq() will control the IF-frequency of the DDC, which can be used to tune from 0 to 28.8 MHz (xtal frequency of the device).

Source

pub fn get_direct_sampling(&self) -> SamplingMode

Returns the state of direct sampling mode.

Source

pub fn set_offset_tuning(&self, enable: bool) -> Error

Sets the offset tuning mode for zero-IF tuners, which avoids problems caused by the DC offset of the ADCs and 1/f noise.

Source

pub fn get_offset_tuning(&self) -> Error

Returns the offset tuning mode.

Source

pub fn reset_buffer(&self) -> Error

Resets the streaming buffer.

Examples found in repository?
examples/ex1.rs (line 138)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
158
159unsafe extern "C" fn read_async_callback(buf: *mut c_uchar, len: u32, ctx: *mut c_void) {
160    let _ = ctx;
161    let v = Vec::<u8>::from_raw_parts(buf, len as usize, len as usize);
162    println!("----- read_async_callback buffer size - {}", len);
163    println!("----- {} {} {} {} {} {}",
164             v[0],
165             v[1],
166             v[2],
167             v[3],
168             v[4],
169             v[5]);
170}
171
172
173fn main() {
174    // ---------- Device Check ----------
175    let count = rtlsdr::get_device_count();
176    if count == 0 {
177        println!("No devices found, exiting.");
178        return;
179    }
180
181    for i in 0..count {
182        let (m, p, s, err) = rtlsdr::get_device_usb_strings(i);
183        println!("get_device_usb_strings: {:?} - {} {} {}", err, m, p, s);
184    }
185
186    let index = 0;
187    println!("===== Device name, index {}: {} =====",
188             index,
189             rtlsdr::get_device_name(0));
190    println!("===== Running tests using device indx: 0 =====\n");
191
192    let (dev, mut err) = rtlsdr::open(index);
193    match err {
194        Error::NoError => println!("open successful"),
195        _ => return,
196    }
197
198    err = sdr_config(&dev);
199    match err {
200        Error::NoError => println!("sdr_config successful..."),
201        _ => return,
202    }
203
204    println!("calling read_sync...");
205    for i in 0..10 {
206        let (_, read_count, err) = dev.read_sync(rtlsdr::DEFAULT_BUF_LENGTH);
207        println!("----- read_sync requested iteration {} -----", i);
208        println!("\tread_sync requested - {}", rtlsdr::DEFAULT_BUF_LENGTH);
209        println!("\tread_sync received  - {}", read_count);
210        println!("\tread_sync err msg   - {:?}", err);
211    }
212
213    dev.reset_buffer();
214
215    // read_async is a blocking call and doesn't return until
216    // async_stop is called , so we spawn a thread that sleeps
217    // for a bit while our async callback is called...
218    let d = dev.clone();
219    thread::spawn(move || {
220        println!("async_stop thread sleeping for 5 seconds...");
221        thread::sleep(Duration::from_millis(5000));
222        println!("async_stop thread awake, canceling read async...");
223        d.cancel_async();
224    });
225
226    println!("calling read_async...");
227    err = dev.read_async(Some(read_async_callback),
228                         ptr::null_mut(),
229                         rtlsdr::DEFAULT_ASYNC_BUF_NUMBER,
230                         rtlsdr::DEFAULT_BUF_LENGTH);
231    match err {
232        Error::NoError => println!("device close successful..."),
233        _ => println!("dev close error - {:?}", err),
234    }
235
236    err = dev.close();
237    match err {
238        Error::NoError => println!("device close successful..."),
239        _ => println!("dev close error - {:?}", err),
240    }
241}
Source

pub fn read_sync(&self, len: i32) -> (Vec<u8>, i32, Error)

Performs a synchronous read of samples and returns the number of samples read.

Examples found in repository?
examples/ex1.rs (line 206)
173fn main() {
174    // ---------- Device Check ----------
175    let count = rtlsdr::get_device_count();
176    if count == 0 {
177        println!("No devices found, exiting.");
178        return;
179    }
180
181    for i in 0..count {
182        let (m, p, s, err) = rtlsdr::get_device_usb_strings(i);
183        println!("get_device_usb_strings: {:?} - {} {} {}", err, m, p, s);
184    }
185
186    let index = 0;
187    println!("===== Device name, index {}: {} =====",
188             index,
189             rtlsdr::get_device_name(0));
190    println!("===== Running tests using device indx: 0 =====\n");
191
192    let (dev, mut err) = rtlsdr::open(index);
193    match err {
194        Error::NoError => println!("open successful"),
195        _ => return,
196    }
197
198    err = sdr_config(&dev);
199    match err {
200        Error::NoError => println!("sdr_config successful..."),
201        _ => return,
202    }
203
204    println!("calling read_sync...");
205    for i in 0..10 {
206        let (_, read_count, err) = dev.read_sync(rtlsdr::DEFAULT_BUF_LENGTH);
207        println!("----- read_sync requested iteration {} -----", i);
208        println!("\tread_sync requested - {}", rtlsdr::DEFAULT_BUF_LENGTH);
209        println!("\tread_sync received  - {}", read_count);
210        println!("\tread_sync err msg   - {:?}", err);
211    }
212
213    dev.reset_buffer();
214
215    // read_async is a blocking call and doesn't return until
216    // async_stop is called , so we spawn a thread that sleeps
217    // for a bit while our async callback is called...
218    let d = dev.clone();
219    thread::spawn(move || {
220        println!("async_stop thread sleeping for 5 seconds...");
221        thread::sleep(Duration::from_millis(5000));
222        println!("async_stop thread awake, canceling read async...");
223        d.cancel_async();
224    });
225
226    println!("calling read_async...");
227    err = dev.read_async(Some(read_async_callback),
228                         ptr::null_mut(),
229                         rtlsdr::DEFAULT_ASYNC_BUF_NUMBER,
230                         rtlsdr::DEFAULT_BUF_LENGTH);
231    match err {
232        Error::NoError => println!("device close successful..."),
233        _ => println!("dev close error - {:?}", err),
234    }
235
236    err = dev.close();
237    match err {
238        Error::NoError => println!("device close successful..."),
239        _ => println!("dev close error - {:?}", err),
240    }
241}
Source

pub fn read_async( &self, f: ReadAsyncCbT, ctx: *mut c_void, buf_num: i32, buf_len: i32, ) -> Error

Reads samples asynchronously. Note, this function will block until canceled using cancel_async. ReadAsyncCbT is a package global variable.

Optional buf_num buffer count, buf_num * buf_len = overall buffer size, set to 0 for default buffer count of 32.

Optional buf_len buffer length, must be multiple of 512, set to 0 for default buffer length of 262,144 (16 * 32 * 512).

Examples found in repository?
examples/ex1.rs (lines 227-230)
173fn main() {
174    // ---------- Device Check ----------
175    let count = rtlsdr::get_device_count();
176    if count == 0 {
177        println!("No devices found, exiting.");
178        return;
179    }
180
181    for i in 0..count {
182        let (m, p, s, err) = rtlsdr::get_device_usb_strings(i);
183        println!("get_device_usb_strings: {:?} - {} {} {}", err, m, p, s);
184    }
185
186    let index = 0;
187    println!("===== Device name, index {}: {} =====",
188             index,
189             rtlsdr::get_device_name(0));
190    println!("===== Running tests using device indx: 0 =====\n");
191
192    let (dev, mut err) = rtlsdr::open(index);
193    match err {
194        Error::NoError => println!("open successful"),
195        _ => return,
196    }
197
198    err = sdr_config(&dev);
199    match err {
200        Error::NoError => println!("sdr_config successful..."),
201        _ => return,
202    }
203
204    println!("calling read_sync...");
205    for i in 0..10 {
206        let (_, read_count, err) = dev.read_sync(rtlsdr::DEFAULT_BUF_LENGTH);
207        println!("----- read_sync requested iteration {} -----", i);
208        println!("\tread_sync requested - {}", rtlsdr::DEFAULT_BUF_LENGTH);
209        println!("\tread_sync received  - {}", read_count);
210        println!("\tread_sync err msg   - {:?}", err);
211    }
212
213    dev.reset_buffer();
214
215    // read_async is a blocking call and doesn't return until
216    // async_stop is called , so we spawn a thread that sleeps
217    // for a bit while our async callback is called...
218    let d = dev.clone();
219    thread::spawn(move || {
220        println!("async_stop thread sleeping for 5 seconds...");
221        thread::sleep(Duration::from_millis(5000));
222        println!("async_stop thread awake, canceling read async...");
223        d.cancel_async();
224    });
225
226    println!("calling read_async...");
227    err = dev.read_async(Some(read_async_callback),
228                         ptr::null_mut(),
229                         rtlsdr::DEFAULT_ASYNC_BUF_NUMBER,
230                         rtlsdr::DEFAULT_BUF_LENGTH);
231    match err {
232        Error::NoError => println!("device close successful..."),
233        _ => println!("dev close error - {:?}", err),
234    }
235
236    err = dev.close();
237    match err {
238        Error::NoError => println!("device close successful..."),
239        _ => println!("dev close error - {:?}", err),
240    }
241}
Source

pub fn cancel_async(&self) -> Error

Cancels all pending asynchronous operations.

Examples found in repository?
examples/ex1.rs (line 223)
173fn main() {
174    // ---------- Device Check ----------
175    let count = rtlsdr::get_device_count();
176    if count == 0 {
177        println!("No devices found, exiting.");
178        return;
179    }
180
181    for i in 0..count {
182        let (m, p, s, err) = rtlsdr::get_device_usb_strings(i);
183        println!("get_device_usb_strings: {:?} - {} {} {}", err, m, p, s);
184    }
185
186    let index = 0;
187    println!("===== Device name, index {}: {} =====",
188             index,
189             rtlsdr::get_device_name(0));
190    println!("===== Running tests using device indx: 0 =====\n");
191
192    let (dev, mut err) = rtlsdr::open(index);
193    match err {
194        Error::NoError => println!("open successful"),
195        _ => return,
196    }
197
198    err = sdr_config(&dev);
199    match err {
200        Error::NoError => println!("sdr_config successful..."),
201        _ => return,
202    }
203
204    println!("calling read_sync...");
205    for i in 0..10 {
206        let (_, read_count, err) = dev.read_sync(rtlsdr::DEFAULT_BUF_LENGTH);
207        println!("----- read_sync requested iteration {} -----", i);
208        println!("\tread_sync requested - {}", rtlsdr::DEFAULT_BUF_LENGTH);
209        println!("\tread_sync received  - {}", read_count);
210        println!("\tread_sync err msg   - {:?}", err);
211    }
212
213    dev.reset_buffer();
214
215    // read_async is a blocking call and doesn't return until
216    // async_stop is called , so we spawn a thread that sleeps
217    // for a bit while our async callback is called...
218    let d = dev.clone();
219    thread::spawn(move || {
220        println!("async_stop thread sleeping for 5 seconds...");
221        thread::sleep(Duration::from_millis(5000));
222        println!("async_stop thread awake, canceling read async...");
223        d.cancel_async();
224    });
225
226    println!("calling read_async...");
227    err = dev.read_async(Some(read_async_callback),
228                         ptr::null_mut(),
229                         rtlsdr::DEFAULT_ASYNC_BUF_NUMBER,
230                         rtlsdr::DEFAULT_BUF_LENGTH);
231    match err {
232        Error::NoError => println!("device close successful..."),
233        _ => println!("dev close error - {:?}", err),
234    }
235
236    err = dev.close();
237    match err {
238        Error::NoError => println!("device close successful..."),
239        _ => println!("dev close error - {:?}", err),
240    }
241}
Source

pub fn get_hw_info(&self) -> (HwInfo, Error)

Reads the dongle’s information items from the EEPROM.

Examples found in repository?
examples/ex1.rs (line 20)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}
Source

pub fn set_hw_info(&self, info: &HwInfo) -> Error

Write the dongle’s information items to the EEPROM.

Examples found in repository?
examples/ex1.rs (line 34)
10fn sdr_config(dev: &rtlsdr::Device) -> Error {
11    let (m, p, s, mut err) = dev.get_usb_strings();
12    match err {
13        Error::NoError => println!("set_xtal_freq successful"),
14        _ => return err,
15    };
16    println!("m: {}\n p: {}\n s: {}\n err: {:?}\n", m, p, s, err);
17
18    // ---------- Get/Set/Get Hardware Info ----------
19    println!("1. Getting hardware info...");
20    let (mut hw_info, mut err) = dev.get_hw_info();
21
22    println!("Error: {:?}", err);
23    println!("Vendor ID:             {:?}", hw_info.vendor_id);
24    println!("Product ID:            {:?}", hw_info.product_id);
25    println!("Manufacturer:          {:?}", hw_info.manufact);
26    println!("Product:               {:?}", hw_info.product);
27    println!("Serial number:         {:?}", hw_info.serial);
28    println!("Serial number enabled: {:?}", hw_info.have_serial);
29    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
30    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
31    println!("");
32
33    println!("Writing hardware info...");
34    err = dev.set_hw_info(&hw_info);
35    println!("Writing hardware info return message: {:?}\n", err);
36
37    println!("2. Getting hardware info...");
38    let (hw_info, mut err) = dev.get_hw_info();
39
40    println!("Error: {:?}", err);
41    println!("Vendor ID:             {:?}", hw_info.vendor_id);
42    println!("Product ID:            {:?}", hw_info.product_id);
43    println!("Manufacturer:          {:?}", hw_info.manufact);
44    println!("Product:               {:?}", hw_info.product);
45    println!("Serial number:         {:?}", hw_info.serial);
46    println!("Serial number enabled: {:?}", hw_info.have_serial);
47    println!("IR endpoint enabled:   {:?}", hw_info.enable_ir);
48    println!("Remote wakeup enabled: {:?}", hw_info.remote_wakeup);
49    println!("");
50
51    // ---------- Get Tuner Gain ----------
52    println!("get_tuner_type: {}", dev.get_tuner_type());
53    err = dev.set_xtal_freq(28800000, 28800000);
54    match err {
55        Error::NoError => println!("set_xtal_freq - 28800000"),
56        _ => return err,
57    };
58    println!("");
59
60    // ---------- Set Tuner Gain ----------
61    err = dev.set_tuner_gain_mode(true);
62    match err {
63        Error::NoError => println!("set_tuner_gain_mode successful..."),
64        _ => return err,
65    };
66
67    let (gains, mut err) = dev.get_tuner_gains();
68    match err {
69        Error::NoError => println!("get_tuner_gains successful..."),
70        _ => println!("get_tuner_gains failed - {:?}", err), // return err,
71    };
72
73    println!("\ntuner gains:  {:?}\n", gains);
74
75    err = dev.set_tuner_gain(gains[2]);
76    match err {
77        Error::NoError => println!("set_tuner_gain {:?} successful...", gains[2]),
78        _ => return err,
79    };
80    println!("");
81
82    // ---------- Get/Set Sample Rate ----------
83    let samplerate: i32 = 2083334;
84    err = dev.set_sample_rate(samplerate);
85    match err {
86        Error::NoError => println!("set_sample_rate {} successful...", samplerate),
87        _ => return err,
88    };
89
90    println!("get_sample_rate {} successful...\n", dev.get_sample_rate());
91
92    // ---------- Get/Set Xtal Freq ----------
93    let (mut rtl_freq, mut tuner_freq, mut err) = dev.get_xtal_freq();
94    match err {
95        Error::NoError => {
96            println!("get_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
97                     rtl_freq,
98                     tuner_freq)
99        }
100        _ => return err,
101    };
102
103    rtl_freq = 28800000;
104    tuner_freq = 28800000;
105
106    err = dev.set_xtal_freq(rtl_freq, tuner_freq);
107    match err {
108        Error::NoError => {
109            println!("set_xtal_freq successful - rtl_freq: {}, tuner_freq: {}",
110                     rtl_freq,
111                     tuner_freq)
112        }
113        _ => return err,
114    };
115    println!("");
116
117    // ---------- Get/Set Center Freq ----------
118    err = dev.set_center_freq(978000000);
119    match err {
120        Error::NoError => println!("set_center_freq successful - 978000000"),
121        _ => return err,
122    };
123
124    println!("get_center_freq: {}\n", dev.get_center_freq());
125
126    // ---------- Set Tuner Bandwidth ----------
127    let bw: i32 = 1000000;
128    println!("Setting bandwidth: {}", bw);
129
130    err = dev.set_tuner_bandwidth(bw);
131    match err {
132        Error::NoError => println!("set_tuner_bandwidth {} Successful", bw),
133        _ => return err,
134    };
135    println!("");
136
137    // ---------- Buffer Reset ----------
138    err = dev.reset_buffer();
139    match err {
140        Error::NoError => println!("reset_buffer successful..."),
141        _ => return err,
142    };
143
144    // ---------- Get/Set Freq Correction ----------
145    let mut freq_corr = dev.get_freq_correction();
146    println!("get_freq_correction - {}", freq_corr);
147
148    freq_corr += 1;
149    let err = dev.set_freq_correction(freq_corr);
150    match err {
151        Error::NoError => println!("set_freq_correction successful - {}", freq_corr),
152        _ => return err,
153    };
154    println!("");
155    // ----------  ----------
156    Error::NoError
157}

Trait Implementations§

Source§

impl Clone for Device

Source§

fn clone(&self) -> Device

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Device

Source§

impl Send for Device

Source§

impl Sync for Device

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.