pyxcp 0.23.2__cp312-cp312-win_arm64.whl → 0.23.4__cp312-cp312-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyxcp might be problematic. Click here for more details.

pyxcp/__init__.py CHANGED
@@ -17,4 +17,4 @@ tb_install(show_locals=True, max_frames=3) # Install custom exception handler.
17
17
 
18
18
  # if you update this manually, do not forget to update
19
19
  # .bumpversion.cfg and pyproject.toml.
20
- __version__ = "0.23.2"
20
+ __version__ = "0.23.4"
Binary file
Binary file
Binary file
@@ -31,7 +31,6 @@ DAQ_TIMESTAMP_SIZE = {
31
31
 
32
32
  class DaqProcessor:
33
33
  def __init__(self, daq_lists: List[DaqList]):
34
- # super().__init__()
35
34
  self.daq_lists = daq_lists
36
35
  self.log = get_application().log
37
36
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
pyxcp/transport/base.py CHANGED
@@ -222,6 +222,10 @@ class BaseTransport(metaclass=abc.ABCMeta):
222
222
  self.finish_listener()
223
223
  self.listener.join()
224
224
 
225
+ # Ensure the close event is cleared before starting a new listener thread.
226
+ if hasattr(self, "closeEvent"):
227
+ self.closeEvent.clear()
228
+
225
229
  self.listener = threading.Thread(target=self.listen)
226
230
  self.listener.start()
227
231
 
@@ -368,16 +372,16 @@ class BaseTransport(metaclass=abc.ABCMeta):
368
372
  self.timer_restart_event.set()
369
373
 
370
374
  def process_response(self, response: bytes, length: int, counter: int, recv_timestamp: int) -> None:
371
- if counter == self.counter_received:
372
- self.logger.warning(f"Duplicate message counter {counter} received from the XCP slave")
373
- if self._debug:
374
- self.logger.debug(f"<- L{length} C{counter} {hexDump(response[:512])}")
375
- return
376
- self.counter_received = counter
375
+ # Important: determine PID first so duplicate counter handling can be applied selectively.
377
376
  pid = response[0]
377
+
378
378
  if pid >= 0xFC:
379
+ # Do not drop RESPONSE/EVENT/SERV frames even if the transport counter repeats.
380
+ # Some slaves may reuse the counter while DAQ traffic is active, and we must not lose
381
+ # command responses; otherwise request() can stall until timeout.
379
382
  if self._debug:
380
383
  self.logger.debug(f"<- L{length} C{counter} {hexDump(response)}")
384
+ self.counter_received = counter
381
385
  if pid >= 0xFE:
382
386
  self.resQueue.append(response)
383
387
  with self.policy_lock:
@@ -391,6 +395,15 @@ class BaseTransport(metaclass=abc.ABCMeta):
391
395
  with self.policy_lock:
392
396
  self.policy.feed(types.FrameCategory.SERV, self.counter_received, self.timestamp.value, response)
393
397
  else:
398
+ # DAQ traffic: Some transports reuse or do not advance the counter for DAQ frames.
399
+ # Do not drop DAQ frames on duplicate counters to avoid losing measurements.
400
+ if counter == self.counter_received:
401
+ self.logger.debug(f"Duplicate message counter {counter} received (DAQ) - not dropping")
402
+ # DAQ still flowing – reset request timeout window to avoid false timeouts while
403
+ # the slave is busy but has not yet responded to a command.
404
+ self.timer_restart_event.set()
405
+ # Fall through and process the frame as usual.
406
+ self.counter_received = counter
394
407
  if self._debug:
395
408
  self.logger.debug(f"<- L{length} C{counter} ODT_Data[0:8] {hexDump(response[:8])}")
396
409
  if self.first_daq_timestamp is None:
@@ -399,6 +412,9 @@ class BaseTransport(metaclass=abc.ABCMeta):
399
412
  timestamp = recv_timestamp
400
413
  else:
401
414
  timestamp = 0
415
+ # DAQ activity indicates the slave is alive/busy; keep extending the wait window for any
416
+ # outstanding request, similar to EV_CMD_PENDING behavior on stacks that don't emit it.
417
+ self.timer_restart_event.set()
402
418
  with self.policy_lock:
403
419
  self.policy.feed(types.FrameCategory.DAQ, self.counter_received, timestamp, response)
404
420
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyxcp
3
- Version: 0.23.2
3
+ Version: 0.23.4
4
4
  Summary: Universal Calibration Protocol for Python
5
5
  License: LGPLv3
6
6
  Keywords: automotive,ecu,xcp,asam,autosar
@@ -1,4 +1,4 @@
1
- pyxcp/__init__.py,sha256=-HpTXqilFsVObvpAIP79hAGc6kypNxuSdR7lDsyFmN0,547
1
+ pyxcp/__init__.py,sha256=nzCciT2JSkYRVu-ITGnrOCESqGDQ3fgG6KnZxWKCqxc,547
2
2
  pyxcp/aml/EtasCANMonitoring.a2l,sha256=EJYwe3Z3H24vyWAa6lUgcdKnQY8pwFxjyCN6ZU1ST8w,1509
3
3
  pyxcp/aml/EtasCANMonitoring.aml,sha256=xl0DdyeiIaLW0mmmJNAyJS0CQdOLSxt9dxfgrdSlU8Y,2405
4
4
  pyxcp/aml/ifdata_CAN.a2l,sha256=NCUnCUEEgRbZYSLGtUGwL2e7zJ8hrp0SbmLHGv8uY58,612
@@ -24,23 +24,23 @@ pyxcp/constants.py,sha256=9yGfujC0ImTYQWfn41wyw8pluJTSrhMGWIVeIZTgsLg,1160
24
24
  pyxcp/cpp_ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  pyxcp/cpp_ext/bin.hpp,sha256=PwJloZek21la-RBSda2Hc0u_6gID0sfTduPeplaAyR4,2561
26
26
  pyxcp/cpp_ext/blockmem.hpp,sha256=ysaJwmTWGTfE54Outk3gJYOfAVFd_QaonBMtXLcXwCc,1242
27
- pyxcp/cpp_ext/cpp_ext.cp310-win_arm64.pyd,sha256=fbH0Q6QLOZckJJdVc0yxOP2NruBpzgawrqAkigdDHoI,314368
28
- pyxcp/cpp_ext/cpp_ext.cp311-win_arm64.pyd,sha256=iFTDQklhQELkrhUydPJEWdnqgUibjWM7LvmxrRuEU3U,314880
29
- pyxcp/cpp_ext/cpp_ext.cp312-win_arm64.pyd,sha256=C1nWz80g660VTxk4iiPG9bmhCv8DIHRcqx7QXM5HcF4,306176
27
+ pyxcp/cpp_ext/cpp_ext.cp310-win_arm64.pyd,sha256=7QxRN3JPIItrgePfnhJhy2b6FUzqo7xWxWCOkUYoB3o,317440
28
+ pyxcp/cpp_ext/cpp_ext.cp311-win_arm64.pyd,sha256=-BVX06VAoCQxgbhjpa3mXFMAWsEo4dFdIuvfPMziQS0,317952
29
+ pyxcp/cpp_ext/cpp_ext.cp312-win_arm64.pyd,sha256=rmNBjulARH8LFfnKsNWEhYmYJJqX63Bsv_FPO_MOIN8,311296
30
30
  pyxcp/cpp_ext/daqlist.hpp,sha256=g2hlxgoQorAGKHedZFZ0c2FQh1APMIA9sVB6M6hD_n8,7277
31
31
  pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
32
32
  pyxcp/cpp_ext/extension_wrapper.cpp,sha256=xFs3IcrvHPHA82-n11WPzt8HATGqcks02p84SjQ2BKM,4855
33
33
  pyxcp/cpp_ext/helper.hpp,sha256=ONAsVupIqqmNDp8bgGWS0TfSYeCFkk3kwwZbbqsh0HQ,7813
34
34
  pyxcp/cpp_ext/mcobject.hpp,sha256=A5GKcfjYMcfm3hfTQfFuS4JYNFTvfmzAcMXCe01GOs4,6429
35
35
  pyxcp/cpp_ext/tsqueue.hpp,sha256=FWMemzXNgV5dQ7gYmTCzC0QYfgl0VI9JCybYelBcCHU,1026
36
- pyxcp/daq_stim/__init__.py,sha256=2KsvP9RUV5gwFKTA1BBgsppAegR13ykrqjRtgY0zAx4,9560
36
+ pyxcp/daq_stim/__init__.py,sha256=Z4xyEko7VVCmzyRCHrtikN_Kcu905q3wD_3jYEm7qCQ,9530
37
37
  pyxcp/daq_stim/optimize/__init__.py,sha256=FUWK0GkNpNT-sUlhibp7xa2aSYpm6Flh5yA2w2IOJqg,2520
38
38
  pyxcp/daq_stim/optimize/binpacking.py,sha256=Iltho5diKlJG-ltbmx053U2vOFRlCISolXK61T14l_I,1257
39
39
  pyxcp/daq_stim/scheduler.cpp,sha256=NuNkAz3Dv849f51_T36YPck2dl-YsdDdG-cozc7XN9U,1504
40
40
  pyxcp/daq_stim/scheduler.hpp,sha256=U_6tUbebmzX5vVZS0EFSgTaPsyxMg6yRXHG_aPWA0x4,1884
41
- pyxcp/daq_stim/stim.cp310-win_arm64.pyd,sha256=MCOHN1KN8ELW9AZqwU-d-lDOwvgiavzolaFMhpTWUs8,210432
42
- pyxcp/daq_stim/stim.cp311-win_arm64.pyd,sha256=QC5l8_4uArkiFlw2zW7_OeH0G4u4nAyK1W2wRFkVVw0,210944
43
- pyxcp/daq_stim/stim.cp312-win_arm64.pyd,sha256=MTaYX32N00VVgp-PCUCCzatuinuqKN5k5LFkjZ-xJ24,211456
41
+ pyxcp/daq_stim/stim.cp310-win_arm64.pyd,sha256=qhkeXI3qXw29Le5BSqMjfNdVnJXZUuHdx0rjqyYgKB0,215552
42
+ pyxcp/daq_stim/stim.cp311-win_arm64.pyd,sha256=mmd5460ohUlXxAuvNNnZagD_80GTcoTSnFAo-a5hwdE,216576
43
+ pyxcp/daq_stim/stim.cp312-win_arm64.pyd,sha256=ZYIIPG_pS5vjFt0BZ_DpiDolE-1WnTCo2qTCzguZREE,216576
44
44
  pyxcp/daq_stim/stim.cpp,sha256=F2OG67W4KKwTTiUCxm-9egIv3TLFdOkRunX6xf7YOtc,177
45
45
  pyxcp/daq_stim/stim.hpp,sha256=U-uInRrA6OCdMl1l1SWbQ_KEPpnNYrWut924IvbW6R0,18508
46
46
  pyxcp/daq_stim/stim_wrapper.cpp,sha256=iT2yxJ3LRG7HoYC1bwhM3tCAxF9X_HHierBNsLRmTJg,1995
@@ -82,9 +82,9 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
82
82
  pyxcp/recorder/reader.hpp,sha256=rr9XZ_ciL6eF2_xEqyt9XYNqTIze9ytAsnf8uYukO9U,5201
83
83
  pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
84
84
  pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- pyxcp/recorder/rekorder.cp310-win_arm64.pyd,sha256=5dvgnCU80CTPOH5sgFyHeYnI5ohITEHfKNiWPqJ5Stg,410624
86
- pyxcp/recorder/rekorder.cp311-win_arm64.pyd,sha256=e7ViY8oULrU2py-a_CjtfIozPRAX3P_pgQhKkkwbI2M,411136
87
- pyxcp/recorder/rekorder.cp312-win_arm64.pyd,sha256=tcQgf3_h6Mm0teNRKeqOkjtgmX5dGC1MYQ4GHsaystM,400384
85
+ pyxcp/recorder/rekorder.cp310-win_arm64.pyd,sha256=DA8KfwlIVnyy5K8u5Ee0Rb-hrcCCjS0wI5qPENUYKro,415744
86
+ pyxcp/recorder/rekorder.cp311-win_arm64.pyd,sha256=-sxE9OUknjIGnolPAqSFoWiHqMSin6Mpq9yIBxYrirA,416256
87
+ pyxcp/recorder/rekorder.cp312-win_arm64.pyd,sha256=eKlg1HE0Vwz6gyzF3bCyO8Ur9PY4itrZDgQB9uizMuM,406016
88
88
  pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
89
89
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
90
90
  pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
@@ -113,7 +113,7 @@ pyxcp/tests/test_transport.py,sha256=vv7x7-rHPbmHc7BR8qcXx_Yy8STu1za1OzJmeuUSF14
113
113
  pyxcp/tests/test_utils.py,sha256=SrURAFc_6jtHng3PSZ5gpqXzVBVuPoMPB0YNvOvaIE0,880
114
114
  pyxcp/timing.py,sha256=zE6qPqOuidg6saNt7_zmbQgufxL9Id6akVYhAtpweQc,1705
115
115
  pyxcp/transport/__init__.py,sha256=31PaQLj76n5pXr68aJRWcYfrxEYWWgYoe9f_w3jZxsc,438
116
- pyxcp/transport/base.py,sha256=n_tCkebmpq3WXRZncOP5XWgUnSavaBBm3oGZhpeCF9U,16352
116
+ pyxcp/transport/base.py,sha256=M93HwtaFPHXbWCRLSrDaL987AvPl8AkZT3HSf3cjwtY,17530
117
117
  pyxcp/transport/base_transport.hpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  pyxcp/transport/can.py,sha256=Sm2qu5JOSZ-f-PdgHVknTm1JTAH_L2DNxTxb5OJUCpI,18806
119
119
  pyxcp/transport/eth.py,sha256=xPzN2oSALoPKJVvZpBljPSV1AxfpjRusOzymO-TD1Rw,8711
@@ -124,8 +124,8 @@ pyxcp/types.py,sha256=mjp3FhsTTbS3D5VuC-dfdbMql0lJwEfbZjf8a2pHi1o,26158
124
124
  pyxcp/utils.py,sha256=_ag2QMt0IxVhiCLG5BIO8JzIGt-rdqYrY7DRAPQ4AtA,3530
125
125
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
126
  pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
127
- pyxcp-0.23.2.dist-info/entry_points.txt,sha256=LkHsEwubm30s4oiyCy0cKj6k97ALvQ6KjAVdyEcqu7g,358
128
- pyxcp-0.23.2.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
129
- pyxcp-0.23.2.dist-info/METADATA,sha256=7lmeEiKcHTfPRCDm05kDoshM9ZhI9bRtenKb5pvDc0A,11688
130
- pyxcp-0.23.2.dist-info/WHEEL,sha256=Ca9zjT46y31Ut03rEER57hGhjj1wKsWlq-aros9fuJI,98
131
- pyxcp-0.23.2.dist-info/RECORD,,
127
+ pyxcp-0.23.4.dist-info/entry_points.txt,sha256=LkHsEwubm30s4oiyCy0cKj6k97ALvQ6KjAVdyEcqu7g,358
128
+ pyxcp-0.23.4.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
129
+ pyxcp-0.23.4.dist-info/METADATA,sha256=hFSek7Gb_hDy_HhSaLoPqtKp1C8p44CMs9KFdKuge1g,11688
130
+ pyxcp-0.23.4.dist-info/WHEEL,sha256=Ca9zjT46y31Ut03rEER57hGhjj1wKsWlq-aros9fuJI,98
131
+ pyxcp-0.23.4.dist-info/RECORD,,
File without changes