Skip to content

Commit 94de557

Browse files
committed
Check for a valid session in API calls
This should prevent accidental segfaults. pipe_samples_cu8 and pipe_samples_cs16 are omitted to avoid any performance hit.
1 parent 7b29dde commit 94de557

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

support/nrsc5.py

+17
Original file line numberDiff line numberDiff line change
@@ -556,55 +556,72 @@ def open_rtltcp(self, host, port):
556556
if result != 0:
557557
raise NRSC5Error("Failed to open rtl_tcp.")
558558
self._set_callback()
559+
560+
def _check_session(self):
561+
if not self.radio:
562+
raise NRSC5Error("No session opened. Call open(), open_pipe(), or open_rtltcp() first.")
559563

560564
def close(self):
565+
self._check_session()
561566
NRSC5.libnrsc5.nrsc5_close(self.radio)
567+
self.radio = ctypes.c_void_p()
562568

563569
def start(self):
570+
self._check_session()
564571
NRSC5.libnrsc5.nrsc5_start(self.radio)
565572

566573
def stop(self):
574+
self._check_session()
567575
NRSC5.libnrsc5.nrsc5_stop(self.radio)
568576

569577
def set_mode(self, mode):
578+
self._check_session()
570579
NRSC5.libnrsc5.nrsc5_set_mode(self.radio, mode.value)
571580

572581
def set_bias_tee(self, on):
582+
self._check_session()
573583
result = NRSC5.libnrsc5.nrsc5_set_bias_tee(self.radio, on)
574584
if result != 0:
575585
raise NRSC5Error("Failed to set bias-T.")
576586

577587
def set_direct_sampling(self, on):
588+
self._check_session()
578589
result = NRSC5.libnrsc5.nrsc5_set_direct_sampling(self.radio, on)
579590
if result != 0:
580591
raise NRSC5Error("Failed to set direct sampling.")
581592

582593
def set_freq_correction(self, ppm_error):
594+
self._check_session()
583595
result = NRSC5.libnrsc5.nrsc5_set_freq_correction(self.radio, ppm_error)
584596
if result != 0:
585597
raise NRSC5Error("Failed to set frequency correction.")
586598

587599
def get_frequency(self):
600+
self._check_session()
588601
frequency = ctypes.c_float()
589602
NRSC5.libnrsc5.nrsc5_get_frequency(self.radio, ctypes.byref(frequency))
590603
return frequency.value
591604

592605
def set_frequency(self, freq):
606+
self._check_session()
593607
result = NRSC5.libnrsc5.nrsc5_set_frequency(self.radio, ctypes.c_float(freq))
594608
if result != 0:
595609
raise NRSC5Error("Failed to set frequency.")
596610

597611
def get_gain(self):
612+
self._check_session()
598613
gain = ctypes.c_float()
599614
NRSC5.libnrsc5.nrsc5_get_gain(self.radio, ctypes.byref(gain))
600615
return gain.value
601616

602617
def set_gain(self, gain):
618+
self._check_session()
603619
result = NRSC5.libnrsc5.nrsc5_set_gain(self.radio, ctypes.c_float(gain))
604620
if result != 0:
605621
raise NRSC5Error("Failed to set gain.")
606622

607623
def set_auto_gain(self, enabled):
624+
self._check_session()
608625
NRSC5.libnrsc5.nrsc5_set_auto_gain(self.radio, int(enabled))
609626

610627
def _set_callback(self):

0 commit comments

Comments
 (0)