pyxcp 0.23.2__cp314-cp314-macosx_11_0_arm64.whl → 0.23.4__cp314-cp314-macosx_11_0_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
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
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
@@ -4,7 +4,7 @@ pyxcp/asamkeydll.sh,sha256=iema12sub6qNE0xAuzwGtx0FmkdaaOKoXalhrtWVaa8,57
4
4
  pyxcp/asamkeydll.c,sha256=l5RHYcEPY_Q07G-W5IjCq0xci8YfUR-3uYt84OOkOJI,2836
5
5
  pyxcp/constants.py,sha256=Yemk_Gi_m78EEU0v-sdGCAodb9dv_vqP969IU3izA2M,1113
6
6
  pyxcp/cmdline.py,sha256=EoN-_AJm0lz1egPzNcmIFO2Uqo4c0lBXSAB25Uc6N9Q,2441
7
- pyxcp/__init__.py,sha256=d4MeBvRnnWzPZjWHnab9epZrO1EbEx7BWRrp44wGN6k,527
7
+ pyxcp/__init__.py,sha256=IyyaS5_zWWbL0LDLYQGbYeYSk5m5OF7PdDajHj8cq_E,527
8
8
  pyxcp/types.py,sha256=XJxJUh9bK5Urfia8IHVLJ-NFgQACYBd_n73L-AaeZts,25158
9
9
  pyxcp/timing.py,sha256=hzeQZ3P7ij_bfskoVMi10Iv5S4i_6TQYfnB8PXTX6c4,1645
10
10
  pyxcp/utils.py,sha256=Ax3TNT4OotRdJs_MVz83i7gTinpbOWwPnNVIL9WYTW4,3402
@@ -12,17 +12,17 @@ pyxcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  pyxcp/errormatrix.py,sha256=cYcsJ11Qm39DPuaR4BJ9fMpS3Hkphd_ezIQOKjI-pQE,44586
13
13
  pyxcp/asam/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  pyxcp/asam/types.py,sha256=V4wSCGI1pXn0EsBemDyaHTBgY2wkV_BeLShnDIGGgDE,2310
15
- pyxcp/daq_stim/stim.cpython-314-darwin.so,sha256=laoWTr7yqt9o5wRuLeO9_B518IxxWYSkn-0SbJ261ho,237896
16
- pyxcp/daq_stim/stim.cpython-312-darwin.so,sha256=L9OoS4MPieqeyB-AkHf-lEp9vAw9sRH7HuVJr-i7sNI,237656
15
+ pyxcp/daq_stim/stim.cpython-314-darwin.so,sha256=_BcVq6nnG9iH2gl8M338rldygaRw80DR6ZjnQ-KqRuA,238120
16
+ pyxcp/daq_stim/stim.cpython-312-darwin.so,sha256=iCayaiyPuwlGaM_z9euCx5n0pjbSxI0ASw_OvS4V2PU,237880
17
17
  pyxcp/daq_stim/stim.cpp,sha256=sABgEfbQlt5kXbzAsndyhaDFWRWTJw3jJlNfanIVrRs,164
18
- pyxcp/daq_stim/__init__.py,sha256=HAfOpn4yeb4DYNZHr6pzpFGHisXbKEytXJ6KUatDMTk,9328
18
+ pyxcp/daq_stim/__init__.py,sha256=Lm-FCoXyY6Y51571nAa4OA4LU50NqCYffj_cnryjir4,9299
19
19
  pyxcp/daq_stim/scheduler.cpp,sha256=2XW9PmxrJR8DfYMVszGwBX-KANVviwPcUNBvnjw5MlM,1443
20
- pyxcp/daq_stim/stim.cpython-313-darwin.so,sha256=JckkNq4XWuV8DlLGKqhgeZFQhY3R_c7vqDScyInky0s,237896
20
+ pyxcp/daq_stim/stim.cpython-313-darwin.so,sha256=8LQQ_pMJ5zCwvg25Nel5fZ5TpoY1EpgeRJfTAU6UdpA,238120
21
21
  pyxcp/daq_stim/stim.hpp,sha256=1DwAhkY7XJN14aD2BxLJ4O1j4_a6RvpePIbAG1U8iOA,17904
22
- pyxcp/daq_stim/stim.cpython-310-darwin.so,sha256=RqFNsPbyPi8oHidN2ACHa6aPRQadF14q068jvjDhGKE,237576
22
+ pyxcp/daq_stim/stim.cpython-310-darwin.so,sha256=pE7imb11QMYyQv8HTO54EmnJrS5GsocxWJJT5vCPHyw,237784
23
23
  pyxcp/daq_stim/scheduler.hpp,sha256=H-kwyZBV3S8q6YlCq6OLUbaNXskyCOS4z3SRP32ikPY,1809
24
24
  pyxcp/daq_stim/stim_wrapper.cpp,sha256=7iL1-4BPavo5bfrph20Fvicn6HxGEZQqYLvdxniJBYU,1945
25
- pyxcp/daq_stim/stim.cpython-311-darwin.so,sha256=oN-S3od2B7sR4AiyS-Bg0l9gohjT7Ne5ouula-mTGF8,237656
25
+ pyxcp/daq_stim/stim.cpython-311-darwin.so,sha256=BH5vuWJS2JJsD1SBdfDSV-ze1_6YQ0ZHMzlukI4y3iE,237864
26
26
  pyxcp/daq_stim/optimize/__init__.py,sha256=joAKvAvlYQEi7VF2oVftn_ohgRO231wnc3e8fY231L4,2453
27
27
  pyxcp/daq_stim/optimize/binpacking.py,sha256=AZHABtAnzBVJ-MVUGLrxuAp_bAtv3C-gMxrXXXrgi-Y,1216
28
28
  pyxcp/transport/transport_wrapper.cpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -32,7 +32,7 @@ pyxcp/transport/base_transport.hpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3
32
32
  pyxcp/transport/__init__.py,sha256=wIeYkGygucYdXEzymJcDvimnwZgqJY8KRv7Mk__aUSU,428
33
33
  pyxcp/transport/usb_transport.py,sha256=27c19S67BMq1Eup6ViX-SiYpEq93bMTwe031RsE4Xm0,8130
34
34
  pyxcp/transport/can.py,sha256=uFPG_Caf1BwIo2pKheZLs0VfPth1KoEPxuKtI2qt9as,18250
35
- pyxcp/transport/base.py,sha256=i9VdWqGNqx5LMdFkD8SmmMQSRoDDXAjMRS3p6KD1A8E,15912
35
+ pyxcp/transport/base.py,sha256=_jjoTGEIbzxR5rsBbSmxnlvoUI-Kr4VomWhH58z4RBk,17074
36
36
  pyxcp/config/legacy.py,sha256=Uhu_6bp_W8yGmZ2s3TFzf8-5mGwLdeTss56BMYWpsZY,5100
37
37
  pyxcp/config/__init__.py,sha256=z9bXNb2Hp-h2ZtASCyGk3JWP3OGoOL5Hmvazl-L_ANE,45258
38
38
  pyxcp/tests/test_utils.py,sha256=gqv3bhhWfKKdKDkqnELqsOHCfpRRZwlReEy87Ya4Z2w,850
@@ -91,7 +91,7 @@ pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
91
  pyxcp/recorder/mio.hpp,sha256=emP4qMXTxOe1wRSkB_U0hgOVz4aMUgG5dqcCvNNkAjs,61632
92
92
  pyxcp/recorder/build_gcc.cmd,sha256=A1xt8AS7VZxjJq21VzX8cOT7wl9ap_AIXBWbcIEddCw,237
93
93
  pyxcp/recorder/writer.hpp,sha256=rNjtRTtJes5z-BzKR2K56P_Kvc9MEVQgycu8J0wKf1g,11284
94
- pyxcp/recorder/rekorder.cpython-310-darwin.so,sha256=_9fho09EvAI6zydNN-PFNkRADzMczO4caH0vh76m_pM,529744
94
+ pyxcp/recorder/rekorder.cpython-310-darwin.so,sha256=ibNGz9FIbkRqVm_uypRLTmMYDXk_slTGFX92NGJ_8zo,529952
95
95
  pyxcp/recorder/lz4hc.c,sha256=GhoLtpQF6ViHkhQ_TaLw9UCzSB_MO-fdflgjR_xFFfM,86829
96
96
  pyxcp/recorder/lz4.h,sha256=BkRLAtxukE15Z2yO0Pjrq-n6hw5W6jkGFR5f14MzpEU,45604
97
97
  pyxcp/recorder/rekorder.cpp,sha256=LtN3Ud_pigNZ70gJ5-tyFJZN-3PMDVwqbbH694--TxQ,1841
@@ -101,37 +101,37 @@ pyxcp/recorder/reader.hpp,sha256=rr9XZ_ciL6eF2_xEqyt9XYNqTIze9ytAsnf8uYukO9U,520
101
101
  pyxcp/recorder/__init__.py,sha256=jeTmKvfjIenxHxt7zn6HMjnDpuPQU0d9SdnYK_t3gdE,2850
102
102
  pyxcp/recorder/test_reko.py,sha256=sIM_BBY9sq1ZUTawoxmDzdtd5qHPT9w6eVYZoY4iFik,980
103
103
  pyxcp/recorder/build_clang.cmd,sha256=vIWwC1zF_WChakjfj8VaUCN6X8HwyqvGgFRdUub1TtE,174
104
- pyxcp/recorder/rekorder.cpython-311-darwin.so,sha256=EjeiXD_X-rt9sBfAbxrYnkVZCEMEIktJBaUnIVtgasw,529888
104
+ pyxcp/recorder/rekorder.cpython-311-darwin.so,sha256=yipq_IYZmbl9oZiQl3y2KMVDTwUZaR_eAj49pMO7y2Q,530096
105
105
  pyxcp/recorder/reco.py,sha256=SAO_XMKSBWHhdzxfkmV9ZoPvJjale4BGi8O9p5Sd_iE,8448
106
106
  pyxcp/recorder/setup.py,sha256=piwBqaIX6SY1CyjKlantmd3I_VS6rk56sELvmPguKNM,957
107
107
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
108
- pyxcp/recorder/rekorder.cpython-314-darwin.so,sha256=yOE0UMzl2FDOPkEPT-oqEj3MXmF5HOOnbCqLSvPsAEc,546672
108
+ pyxcp/recorder/rekorder.cpython-314-darwin.so,sha256=r7UKgdiR_mS7yKhVlqhBpJ22zHoUV6KNNlJa7jD250M,546880
109
109
  pyxcp/recorder/lz4hc.h,sha256=U_uN3Q2wIi3_dbEceJ16xHJZGotUiBTcnL6O5ARPi8M,20179
110
- pyxcp/recorder/rekorder.cpython-312-darwin.so,sha256=0O9Ptej3oQV0sXa7oMrpqCF1U0_geZUDZWysrp5znO8,529904
110
+ pyxcp/recorder/rekorder.cpython-312-darwin.so,sha256=oHDwC6EfLs_nubiPM1viGknTvjv_aR44o7PG9i_JXjk,546624
111
111
  pyxcp/recorder/lz4.c,sha256=k5b33lJ7yENd6cdWn7eZjlZUWoS088LYCMAjXAF3RTk,118145
112
112
  pyxcp/recorder/build_gcc.sh,sha256=uvMhL4faEJmhG_8rzSOxEBRRqrACC0kmZgaERN8GkUs,209
113
- pyxcp/recorder/rekorder.cpython-313-darwin.so,sha256=8f5kav7HAQZSfgBDnf412_wkZP7Ue3I6AwQjhC9LrSw,530144
113
+ pyxcp/recorder/rekorder.cpython-313-darwin.so,sha256=PVPZLLUZNJymgk7rw7a-OAmjcafy_HIklAfh50izYA4,546880
114
114
  pyxcp/recorder/unfolder.hpp,sha256=3gJKT2eMOZuT8o_M2NFLthdUIWd460vdwzlHaf-fQII,47998
115
115
  pyxcp/recorder/converter/__init__.py,sha256=mqzH3jxGpFrtS2dHyfDLCYKeJycav3_-6z8svlI07eU,14452
116
116
  pyxcp/stim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  pyxcp/vector/map.py,sha256=dSxM15eXvZh6izITdJmFxr1rplDUlfaJUbtrm2Xv-dE,2224
119
119
  pyxcp/cpp_ext/event.hpp,sha256=X2_ThYx8fzz-XR9McmsKM2Hb9I2x7XZeQGy1OyUs6iE,1133
120
- pyxcp/cpp_ext/cpp_ext.cpython-313-darwin.so,sha256=2uXRx7kmeWoO72pf6FeIYSV0Un1CDwg6j45hrIB89RE,321696
120
+ pyxcp/cpp_ext/cpp_ext.cpython-313-darwin.so,sha256=1BYTOrfgtRA3puKr4vLOiRruk8HiMsat0qe8ywXYRUs,321856
121
121
  pyxcp/cpp_ext/blockmem.hpp,sha256=wSUDTgwO9zNn0c29hZ_MRH7cHDIFKma2MYVxip9ARNE,1184
122
122
  pyxcp/cpp_ext/mcobject.hpp,sha256=A5GKcfjYMcfm3hfTQfFuS4JYNFTvfmzAcMXCe01GOs4,6429
123
- pyxcp/cpp_ext/cpp_ext.cpython-314-darwin.so,sha256=zVx558XaDAUJ_o6amtwDnhzCLxXtLSBqkt6MCICBl3E,321712
123
+ pyxcp/cpp_ext/cpp_ext.cpython-314-darwin.so,sha256=uCuGfKLzVdrnOKGhJ5M1mELXY7Pf3IKF1A5KjFP98WY,338368
124
124
  pyxcp/cpp_ext/tsqueue.hpp,sha256=PuDd0kmj61afjW0yva6T8pZL3m4fPCeWsuvEyx2M-80,980
125
125
  pyxcp/cpp_ext/extension_wrapper.cpp,sha256=XHpMp0e1gNwAiNquAXuyd2fXnlqbEu5V7zCP_SNvWKs,4755
126
- pyxcp/cpp_ext/cpp_ext.cpython-312-darwin.so,sha256=bQzwe_FuXE0nfXcJAuK2Ot6y5uhbTlT7Z_x6o4ZXd3w,321456
126
+ pyxcp/cpp_ext/cpp_ext.cpython-312-darwin.so,sha256=eIk77ElRY2MpQOD0_dtT8BuvSffqHUZN1VHyjkXazcM,321600
127
127
  pyxcp/cpp_ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  pyxcp/cpp_ext/helper.hpp,sha256=ONAsVupIqqmNDp8bgGWS0TfSYeCFkk3kwwZbbqsh0HQ,7813
129
129
  pyxcp/cpp_ext/bin.hpp,sha256=0CatarJ7jFewlg9EIxsDPxC4wnORHutx-1PLHpf9iqw,2457
130
- pyxcp/cpp_ext/cpp_ext.cpython-311-darwin.so,sha256=C9qO_m2DNXOuFNFd2gZQ0NnX-wD9geUR1g7fIgESKh0,321456
130
+ pyxcp/cpp_ext/cpp_ext.cpython-311-darwin.so,sha256=fzNGtnJwuLv2Ner1sg8quHySZ5yh4SqjHM0-I8oHqP8,321600
131
131
  pyxcp/cpp_ext/daqlist.hpp,sha256=Q1Gejo8i1rP2PzyUh4UHJ2z-kG0WNnkbBj7N8DAdzaM,7071
132
- pyxcp/cpp_ext/cpp_ext.cpython-310-darwin.so,sha256=qlnVkp7k-ci_gds4AynKJrN8drfwE1wuZwuZhne0cig,321376
133
- pyxcp-0.23.2.dist-info/RECORD,,
134
- pyxcp-0.23.2.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
135
- pyxcp-0.23.2.dist-info/WHEEL,sha256=liYdTCLVexOWAG0gG4YcAbkur62UTvR8Bty2aoz0VVg,134
136
- pyxcp-0.23.2.dist-info/entry_points.txt,sha256=LkHsEwubm30s4oiyCy0cKj6k97ALvQ6KjAVdyEcqu7g,358
137
- pyxcp-0.23.2.dist-info/METADATA,sha256=7lmeEiKcHTfPRCDm05kDoshM9ZhI9bRtenKb5pvDc0A,11688
132
+ pyxcp/cpp_ext/cpp_ext.cpython-310-darwin.so,sha256=5sPtzwLXzXBbJ2zI2kGk0gF83xnDHvKbt0XasjPfe1c,321520
133
+ pyxcp-0.23.4.dist-info/RECORD,,
134
+ pyxcp-0.23.4.dist-info/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
135
+ pyxcp-0.23.4.dist-info/WHEEL,sha256=liYdTCLVexOWAG0gG4YcAbkur62UTvR8Bty2aoz0VVg,134
136
+ pyxcp-0.23.4.dist-info/entry_points.txt,sha256=LkHsEwubm30s4oiyCy0cKj6k97ALvQ6KjAVdyEcqu7g,358
137
+ pyxcp-0.23.4.dist-info/METADATA,sha256=hFSek7Gb_hDy_HhSaLoPqtKp1C8p44CMs9KFdKuge1g,11688
File without changes