1+ from __future__ import annotations
2+
13import time
24import traceback
35import numpy as np
46import pyModeS as pms
57
8+ from typing import Any
9+
10+
11+ import_msg = """
12+ ---------------------------------------------------------------------
13+ Warning: pyrtlsdr not installed (required for using RTL-SDR devices)!
14+ ---------------------------------------------------------------------"""
15+
616try :
717 import rtlsdr # type: ignore
8- except :
9- print ("------------------------------------------------------------------------" )
10- print ("! Warning: pyrtlsdr not installed (required for using RTL-SDR devices) !" )
11- print ("------------------------------------------------------------------------" )
18+ except ImportError :
19+ print (import_msg )
1220
1321sampling_rate = 2e6
1422smaples_per_microsec = 2
2432
2533
2634class RtlReader (object ):
27- def __init__ (self , ** kwargs ):
35+ def __init__ (self , ** kwargs ) -> None :
2836 super (RtlReader , self ).__init__ ()
29- self .signal_buffer = [] # amplitude of the sample only
37+ self .signal_buffer : list [ float ] = [] # amplitude of the sample only
3038 self .sdr = rtlsdr .RtlSdr ()
3139 self .sdr .sample_rate = sampling_rate
3240 self .sdr .center_freq = modes_frequency
@@ -39,7 +47,7 @@ def __init__(self, **kwargs):
3947
4048 self .exception_queue = None
4149
42- def _calc_noise (self ):
50+ def _calc_noise (self ) -> float :
4351 """Calculate noise floor"""
4452 window = smaples_per_microsec * 100
4553 total_len = len (self .signal_buffer )
@@ -50,7 +58,7 @@ def _calc_noise(self):
5058 )
5159 return min (means )
5260
53- def _process_buffer (self ):
61+ def _process_buffer (self ) -> list [ list [ Any ]] :
5462 """process raw IQ data in the buffer"""
5563
5664 # update noise floor
@@ -70,17 +78,18 @@ def _process_buffer(self):
7078 i += 1
7179 continue
7280
73- if self ._check_preamble (self .signal_buffer [i : i + pbits * 2 ]):
74- frame_start = i + pbits * 2
75- frame_end = i + pbits * 2 + (fbits + 1 ) * 2
81+ frame_start = i + pbits * 2
82+ if self ._check_preamble (self .signal_buffer [i :frame_start ]):
7683 frame_length = (fbits + 1 ) * 2
84+ frame_end = frame_start + frame_length
7785 frame_pulses = self .signal_buffer [frame_start :frame_end ]
7886
7987 threshold = max (frame_pulses ) * 0.2
8088
81- msgbin = []
89+ msgbin : list [ int ] = []
8290 for j in range (0 , frame_length , 2 ):
83- p2 = frame_pulses [j : j + 2 ]
91+ j_2 = j + 2
92+ p2 = frame_pulses [j :j_2 ]
8493 if len (p2 ) < 2 :
8594 break
8695
@@ -117,7 +126,7 @@ def _process_buffer(self):
117126
118127 return messages
119128
120- def _check_preamble (self , pulses ):
129+ def _check_preamble (self , pulses ) -> bool :
121130 if len (pulses ) != 16 :
122131 return False
123132
@@ -127,7 +136,7 @@ def _check_preamble(self, pulses):
127136
128137 return True
129138
130- def _check_msg (self , msg ):
139+ def _check_msg (self , msg ) -> bool :
131140 df = pms .df (msg )
132141 msglen = len (msg )
133142 if df == 17 and msglen == 28 :
@@ -137,8 +146,9 @@ def _check_msg(self, msg):
137146 return True
138147 elif df in [4 , 5 , 11 ] and msglen == 14 :
139148 return True
149+ return False
140150
141- def _debug_msg (self , msg ):
151+ def _debug_msg (self , msg ) -> None :
142152 df = pms .df (msg )
143153 msglen = len (msg )
144154 if df == 17 and msglen == 28 :
@@ -151,24 +161,26 @@ def _debug_msg(self, msg):
151161 # print("[*]", msg)
152162 pass
153163
154- def _read_callback (self , data , rtlsdr_obj ):
164+ def _read_callback (self , data , rtlsdr_obj ) -> None :
155165 amp = np .absolute (data )
156166 self .signal_buffer .extend (amp .tolist ())
157167
158168 if len (self .signal_buffer ) >= buffer_size :
159169 messages = self ._process_buffer ()
160170 self .handle_messages (messages )
161171
162- def handle_messages (self , messages ):
172+ def handle_messages (self , messages ) -> None :
163173 """re-implement this method to handle the messages"""
164174 for msg , t in messages :
165175 # print("%15.9f %s" % (t, msg))
166176 pass
167177
168- def stop (self , * args , ** kwargs ):
178+ def stop (self , * args , ** kwargs ) -> None :
169179 self .sdr .close ()
170180
171- def run (self , raw_pipe_in = None , stop_flag = None , exception_queue = None ):
181+ def run (
182+ self , raw_pipe_in = None , stop_flag = None , exception_queue = None
183+ ) -> None :
172184 self .raw_pipe_in = raw_pipe_in
173185 self .exception_queue = exception_queue
174186 self .stop_flag = stop_flag
0 commit comments