Skip to content

Commit 73b3fac

Browse files
committed
change Vector backend to use new methods
1 parent e8c6711 commit 73b3fac

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

can/interfaces/vector/canlib.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ def __init__(self, channel, can_filters=None, poll_interval=0.01,
119119
else:
120120
LOG.info('Install pywin32 to avoid polling')
121121

122-
self.set_filters(can_filters)
123-
124122
try:
125123
vxlapi.xlActivateChannel(self.port_handle, self.mask,
126124
vxlapi.XL_BUS_TYPE_CAN, 0)
@@ -133,26 +131,40 @@ def __init__(self, channel, can_filters=None, poll_interval=0.01,
133131
vxlapi.xlGetSyncTime(self.port_handle, offset)
134132
self._time_offset = time.time() - offset.value * 1e-9
135133

136-
super(VectorBus, self).__init__()
137-
138-
def set_filters(self, can_filters=None):
139-
if can_filters:
140-
# Only one filter per ID type allowed
141-
if len(can_filters) == 1 or (
142-
len(can_filters) == 2 and
143-
can_filters[0].get("extended") != can_filters[1].get("extended")):
144-
for can_filter in can_filters:
134+
self._is_filtered = False
135+
super(VectorBus, self).__init__(channel=channel, can_filters=can_filters,
136+
poll_interval=0.01, receive_own_messages=False, bitrate=None,
137+
rx_queue_size=256, app_name="CANalyzer", **config)
138+
139+
def _apply_filters(self, filters):
140+
if filters:
141+
# Only up to one filter per ID type allowed
142+
if len(filters) == 1 or (len(filters) == 2 and
143+
filters[0].get("extended") != filters[1].get("extended")):
144+
for can_filter in filters:
145145
try:
146-
vxlapi.xlCanSetChannelAcceptance(
147-
self.port_handle, self.mask,
146+
vxlapi.xlCanSetChannelAcceptance(self.port_handle, self.mask,
148147
can_filter["can_id"], can_filter["can_mask"],
149148
vxlapi.XL_CAN_EXT if can_filter.get("extended") else vxlapi.XL_CAN_STD)
150149
except VectorError as exc:
151150
LOG.warning("Could not set filters: %s", exc)
151+
# go to fallback
152+
else:
153+
self._is_filtered = True
154+
return
152155
else:
153-
LOG.warning("Only one filter per extended or standard ID allowed")
156+
LOG.warning("Only up to one filter per extended or standard ID allowed")
157+
# go to fallback
158+
159+
# fallback: reset filters
160+
self._is_filtered = False
161+
try:
162+
vxlapi.xlCanSetChannelAcceptance(self.port_handle, self.mask, 0x0, 0x0, vxlapi.XL_CAN_EXT)
163+
vxlapi.xlCanSetChannelAcceptance(self.port_handle, self.mask, 0x0, 0x0, vxlapi.XL_CAN_STD)
164+
except VectorError as exc:
165+
LOG.warning("Could not reset filters: %s", exc)
154166

155-
def recv(self, timeout=None):
167+
def _recv_internal(self, timeout):
156168
end_time = time.time() + timeout if timeout is not None else None
157169
event = vxlapi.XLevent(0)
158170
event_count = ctypes.c_uint()
@@ -178,10 +190,10 @@ def recv(self, timeout=None):
178190
dlc=dlc,
179191
data=event.tagData.msg.data[:dlc],
180192
channel=event.chanIndex)
181-
return msg
193+
return msg, self._is_filtered
182194

183195
if end_time is not None and time.time() > end_time:
184-
return None
196+
return None, self._is_filtered
185197

186198
if HAS_EVENTS:
187199
# Wait for receive event to occur

0 commit comments

Comments
 (0)