Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions python/sbp/client/framer.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@ class Framer(six.Iterator):
Stream of bytes to read from.
write : port
Stream of bytes to write to.
verbose: boolean
verbosify stdout / stderr. Default False
dispatcher: function
function to call on each deframed message
skip_medata: boolean
do not add "time" and "session-uuid" metadata
sender_id_filter: list
list of integer sender_ids to frame, with the exlusion of all others
"""

def __init__(self,
Expand All @@ -42,7 +50,8 @@ def __init__(self,
verbose=False,
dispatcher=dispatch,
into_buffer=True,
skip_metadata=False):
skip_metadata=False,
sender_id_filter_list=[]):
self._read = read
self._write = write
self._verbose = verbose
Expand All @@ -52,6 +61,7 @@ def __init__(self,
self._buffer = np.zeros(16*1024, dtype=np.uint8)
self._into_buffer = into_buffer
self._skip_metadata = skip_metadata
self._sender_id_filter_list = sender_id_filter_list

def __iter__(self):
self._broken = False
Expand Down Expand Up @@ -135,12 +145,15 @@ def _receive(self):
if self._verbose:
print("crc mismatch: 0x%04X 0x%04X" % (msg_crc, crc))
return None
msg = SBP(msg_type, sender, msg_len, data, crc)
try:
msg = self._dispatch(msg)
except Exception as exc:
warnings.warn("SBP dispatch error: %s" % (exc,))
return msg
if (len(self._sender_id_filter_list) == 0 or sender in self._sender_id_filter_list):
msg = SBP(msg_type, sender, msg_len, data, crc)
try:
msg = self._dispatch(msg)
except Exception as exc:
warnings.warn("SBP dispatch error: %s" % (exc,))
return msg
else:
return None

def __call__(self, *msgs, **metadata):
"""
Expand Down