pyxcp 0.22.2__cp313-cp313-win_amd64.whl → 0.22.8__cp313-cp313-win_amd64.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.22.2"
20
+ __version__ = "0.22.8"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -7,6 +7,7 @@
7
7
  #include <charconv>
8
8
  #include <cstring>
9
9
  #include <iostream>
10
+ #include <limits>
10
11
  #include <map>
11
12
  #if __has_include(<stdfloat>)
12
13
  #include <stdfloat>
@@ -637,6 +638,33 @@ struct MeasurementParameters {
637
638
  return m_first_pids;
638
639
  }
639
640
 
641
+ #undef max // Thanks to Windows.
642
+
643
+ auto get_overflow_value() const {
644
+ std::uint64_t ov_value{};
645
+ switch (m_ts_size) {
646
+ case 1:
647
+ ov_value = std::numeric_limits<std::uint8_t>::max();
648
+ break;
649
+ case 2:
650
+ ov_value = std::numeric_limits<std::uint16_t>::max();
651
+ break;
652
+ case 4:
653
+ ov_value = std::numeric_limits<std::uint32_t>::max();
654
+ break;
655
+ // case 8:
656
+ // ov_value = std::numeric_limits<std::uint64_t>::max() + 1;
657
+ // break;
658
+ default:
659
+ throw std::runtime_error("Invalid timestamp size");
660
+ }
661
+ ov_value++;
662
+ std::cout << "TS-V: " << ov_value << " scale: " << m_ts_scale_factor << std::endl;
663
+ ov_value = static_cast<std::uint64_t>(ov_value * m_ts_scale_factor);
664
+ std::cout << "OVRF-Value: " << ov_value << std::endl;
665
+ return ov_value;
666
+ }
667
+
640
668
  std::uint8_t m_byte_order;
641
669
  std::uint8_t m_id_field_size;
642
670
  bool m_timestamps_supported;
@@ -1050,6 +1078,9 @@ class DAQPolicyBase {
1050
1078
  }
1051
1079
 
1052
1080
  virtual void set_parameters(const MeasurementParameters& params) noexcept {
1081
+ m_overflow_value = params.get_overflow_value();
1082
+ m_overflow_counter = 0ULL;
1083
+ std::cout << "Overflow value: " << m_overflow_value << ", Overflow counter: " << m_overflow_counter << std::endl;
1053
1084
  initialize();
1054
1085
  }
1055
1086
 
@@ -1058,6 +1089,9 @@ class DAQPolicyBase {
1058
1089
  virtual void initialize() = 0;
1059
1090
 
1060
1091
  virtual void finalize() = 0;
1092
+ private:
1093
+ std::uint64_t m_overflow_value{};
1094
+ std::uint64_t m_overflow_counter{};
1061
1095
  };
1062
1096
 
1063
1097
  class DaqRecorderPolicy : public DAQPolicyBase {
@@ -1164,6 +1198,38 @@ struct ValueHolder {
1164
1198
  std::any m_value;
1165
1199
  };
1166
1200
 
1201
+ class Overflow {
1202
+ public:
1203
+
1204
+ Overflow(std::uint64_t overflow_value) : m_overflow_value(overflow_value), m_overflow_counter(0ULL), m_previous_timestamp(0ULL) {
1205
+ }
1206
+
1207
+ auto get_previous_timestamp() const noexcept {
1208
+ return m_previous_timestamp;
1209
+ }
1210
+
1211
+ void set_previous_timestamp(std::uint64_t timestamp) noexcept {
1212
+ m_previous_timestamp = timestamp;
1213
+ }
1214
+
1215
+ void inc_overflow_counter() noexcept {
1216
+ m_overflow_counter++;
1217
+ }
1218
+
1219
+ auto get_overflow_counter() const noexcept {
1220
+ return m_overflow_counter;
1221
+ }
1222
+
1223
+ auto get_value() const noexcept {
1224
+ return m_overflow_value * m_overflow_counter;
1225
+ }
1226
+
1227
+ private:
1228
+ std::uint64_t m_overflow_value{};
1229
+ std::uint64_t m_overflow_counter{};
1230
+ std::uint64_t m_previous_timestamp{};
1231
+ };
1232
+
1167
1233
  class XcpLogFileDecoder {
1168
1234
  public:
1169
1235
 
@@ -1172,6 +1238,11 @@ class XcpLogFileDecoder {
1172
1238
  if (metadata != "") {
1173
1239
  auto des = Deserializer(metadata);
1174
1240
  m_params = des.run();
1241
+
1242
+ for (auto idx=0; idx < m_params.get_daq_lists().size(); ++idx) {
1243
+ m_overflows.emplace_back(Overflow(m_params.get_overflow_value()));
1244
+ }
1245
+
1175
1246
  m_decoder = std::make_unique<DAQProcessor>(m_params);
1176
1247
  } else {
1177
1248
  // cannot proceed!!!
@@ -1215,7 +1286,18 @@ class XcpLogFileDecoder {
1215
1286
  auto result = m_decoder->feed(timestamp, str_data);
1216
1287
  if (result) {
1217
1288
  const auto& [daq_list, ts0, ts1, meas] = *result;
1218
- on_daq_list(daq_list, ts0, ts1, meas);
1289
+
1290
+ auto& overflow = m_overflows[daq_list];
1291
+
1292
+ if (overflow.get_previous_timestamp() > ts1) {
1293
+ overflow.inc_overflow_counter();
1294
+ // Maybe on debug-level?
1295
+ // std::cout << "Overflow detected, counter: " << overflow.get_overflow_counter() << " " << overflow.get_previous_timestamp() << " " << ts1 << std::endl;
1296
+ }
1297
+
1298
+ on_daq_list(daq_list, ts0, ts1 + overflow.get_value(), meas);
1299
+
1300
+ overflow.set_previous_timestamp(ts1);
1219
1301
  }
1220
1302
  }
1221
1303
  }
@@ -1244,6 +1326,7 @@ class XcpLogFileDecoder {
1244
1326
  XcpLogFileReader m_reader;
1245
1327
  std::unique_ptr<DAQProcessor> m_decoder;
1246
1328
  MeasurementParameters m_params;
1329
+ std::vector<Overflow> m_overflows;
1247
1330
  };
1248
1331
 
1249
1332
  #endif // RECORDER_UNFOLDER_HPP
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env python
2
+
3
+ """
4
+ Copy pyXCP examples to a given directory.
5
+ """
6
+
7
+ import argparse
8
+ import sys
9
+ from pathlib import Path
10
+
11
+ from pyxcp import console
12
+
13
+
14
+ pyver = sys.version_info
15
+ if pyver.major == 3 and pyver.minor <= 9:
16
+ import pkg_resources
17
+
18
+ def copy_files_from_package(package_name: str, source_directory: str, args: argparse.Namespace) -> None:
19
+ destination_directory = args.output_directory
20
+ force = args.force
21
+ for fn in pkg_resources.resource_listdir(package_name, source_directory):
22
+ source_file = Path(pkg_resources.resource_filename(package_name, f"{source_directory}/{fn}"))
23
+ if source_file.suffix == ".py":
24
+ dest_file = Path(destination_directory) / fn
25
+ if dest_file.exists() and not force:
26
+ console.print(f"[white]Destination file [blue]{fn!r} [white]already exists. Skipping.")
27
+ continue
28
+ console.print(f"[blue]{source_file} [white]==> [green]{dest_file}")
29
+ data = source_file.read_text(encoding="utf-8")
30
+ dest_file.parent.mkdir(parents=True, exist_ok=True)
31
+ dest_file.write_text(data, encoding="utf-8")
32
+
33
+ else:
34
+ import importlib.resources
35
+
36
+ def copy_files_from_package(package_name: str, source_directory: str, args: argparse.Namespace) -> None:
37
+ destination_directory = args.output_directory
38
+ force = args.force
39
+ for fn in importlib.resources.files(f"{package_name}.{source_directory}").iterdir():
40
+ if fn.suffix == ".py":
41
+ data = fn.read_text(encoding="utf-8")
42
+ dest_file = Path(destination_directory) / fn.name
43
+ if dest_file.exists() and not force:
44
+ console.print(f"[white]Destination file [blue]{fn.name!r} [white]already exists. Skipping.")
45
+ continue
46
+ console.print(f"[blue]{fn} [white]==> [green]{dest_file}")
47
+ dest_file.parent.mkdir(parents=True, exist_ok=True)
48
+ dest_file.write_text(data, encoding="utf-8")
49
+
50
+
51
+ def main():
52
+ parser = argparse.ArgumentParser(description=__doc__)
53
+
54
+ parser.add_argument("output_directory", metavar="output_directory", type=Path, help="output directory")
55
+
56
+ parser.add_argument("-f", "--force", action="store_true", help="overwrite existing files.")
57
+
58
+ args = parser.parse_args()
59
+ print("Copying pyXCP examples...\n")
60
+ copy_files_from_package("pyxcp", "examples", args)
61
+
62
+
63
+ if __name__ == "__main__":
64
+ main()
pyxcp/transport/sxi.py CHANGED
@@ -109,7 +109,7 @@ class SxI(BaseTransport):
109
109
  while True:
110
110
  if self.closeEvent.is_set():
111
111
  return
112
- if not self.comm_port.in_waiting():
112
+ if not self.comm_port.in_waiting:
113
113
  continue
114
114
 
115
115
  recv_timestamp = self.timestamp.value
@@ -129,5 +129,5 @@ class SxI(BaseTransport):
129
129
  self.post_send_timestamp = self.timestamp.value
130
130
 
131
131
  def close_connection(self) -> None:
132
- if hasattr(self, "comm_port") and self.comm_port.is_open() and not self.has_user_supplied_interface:
132
+ if hasattr(self, "comm_port") and self.comm_port.is_open and not self.has_user_supplied_interface:
133
133
  self.comm_port.close()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxcp
3
- Version: 0.22.2
3
+ Version: 0.22.8
4
4
  Summary: Universal Calibration Protocol for Python
5
5
  Home-page: https://github.com/christoph2/pyxcp
6
6
  License: LGPLv3
@@ -1,4 +1,4 @@
1
- pyxcp/__init__.py,sha256=dWd-0mhqqHeqKqaSDFeRYxEgUTCGlD8QC6kUYKoIrb4,547
1
+ pyxcp/__init__.py,sha256=U-rXeTf4QzBHk-d_dEPJjgDiScf1TRpEvDl8-vejXIM,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,12 +24,12 @@ pyxcp/constants.py,sha256=9yGfujC0ImTYQWfn41wyw8pluJTSrhMGWIVeIZTgsLg,1160
24
24
  pyxcp/cpp_ext/__init__.py,sha256=iCsEqSZQIsaNSjQkgTp-DKvOCkRtV6QOydnSUDx5jVk,136
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_amd64.pyd,sha256=tOAKbuG3lEU2tB1qa8qdyT5BaZMHwevOJZM7_KZFocg,268288
28
- pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=JeOL-R8ep4MkqT9myBgPnPHF0QtbVPidNwLc8QfmB5E,270336
29
- pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd,sha256=9PsDK9kDALWTpzw1Gb4UARzpKcl3GrmLlhFEGWO162s,273408
30
- pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd,sha256=9U2Qf0pV-aMq49OJO6wYIX8zqpbwt7fM0B1ka7ojCvw,273920
31
- pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=VEKqOdMfTgJtql7AzV02MvnIVnzMcuiG9SkLQndPUQs,268288
32
- pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=8x9Qi2NfQlFE7rrizE03LlYmtkqccp46NkWWTszL_3c,250880
27
+ pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=Ty4RoQrpJF8KbTuHbGCG0GAU2TEugQaECYMq5nrMiQk,273920
28
+ pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=ciUVzvCe1v8Lx5z24PDqCrSYeGBsVQV1PcjYqWTKtkA,276480
29
+ pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd,sha256=2sf7j127-61Ec_sTqILFPsYKpYqnvGNqw4YIypWjrUA,280576
30
+ pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd,sha256=6VVW1MoslqLTsyDDKjfpgdny5zlxe25dLiaX2ZCWdd8,280064
31
+ pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=CbLeNvyOb2VG-0BurZJfewoV4cerrNpKEPQTKR7pM3U,273920
32
+ pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=gkLRVZ9JENr9blmv5MKHx1t-dKhrjOA0gNhwyZqvBBk,256512
33
33
  pyxcp/cpp_ext/daqlist.hpp,sha256=sgqodW4vnN82s05mFyXQnpQox4KR3VDhP5FB_VhsmQc,7075
34
34
  pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
35
35
  pyxcp/cpp_ext/extension_wrapper.cpp,sha256=3vEo7PljGHw6w1mNB08jHe4B6CMSg0jCWPJucpmhmDw,4438
@@ -41,12 +41,12 @@ pyxcp/daq_stim/optimize/__init__.py,sha256=E4HzY8P0aeegNgu71hUcbL-yR6Fzg5PGe8PSi
41
41
  pyxcp/daq_stim/optimize/binpacking.py,sha256=zTNjpt91MnGW5ha9Z07hQtuoJ7tspyRwRlLYbE6GMGs,1249
42
42
  pyxcp/daq_stim/scheduler.cpp,sha256=a7VK7kP2Hs8yMlcDAkXwJ0bH88lr_yz156sphcHS7Z4,715
43
43
  pyxcp/daq_stim/scheduler.hpp,sha256=U_6tUbebmzX5vVZS0EFSgTaPsyxMg6yRXHG_aPWA0x4,1884
44
- pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=CDzLe0700zMhIViduzFyuIYqWEJQyeUhdRZcPAjSydY,181248
45
- pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=chIGiox6ct6XBjFHGMt2jR31p1LH9QmQoQLpnI0rIvg,183808
46
- pyxcp/daq_stim/stim.cp312-win_amd64.pyd,sha256=eN2CpEQ_MsJZWC9oTBgzVsmU3M-vGUyJNeriGYUMuYQ,185344
47
- pyxcp/daq_stim/stim.cp313-win_amd64.pyd,sha256=5ekAH3vsSKuWl8t11dqM0VN3tSuw52-e1sc7gG8QWMc,185344
48
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=9ETHV6JKdEAhUy5Np4EWUYdGPfG2q5sDNaj1hR1Cxxc,181248
49
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=Ui-1OGZyWEC8J2fNptVWztxbJL0vt0KGzCb0nsi46w4,175104
44
+ pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=lHFzlfWynww-VU6gO-vJYO-aDPeEoVw-LssJ1UYqLq0,186880
45
+ pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=9cCCa56D9bZOBpIonPOnqH0G4PrQHXiEZryqFR3a3Cw,189440
46
+ pyxcp/daq_stim/stim.cp312-win_amd64.pyd,sha256=_8HtOXTikq0z6EK_5www90AP4cgkM4jS6FUIfGTpSu8,190976
47
+ pyxcp/daq_stim/stim.cp313-win_amd64.pyd,sha256=3KybsnxhVxFKjXBhDKF9lkFpAv4An0NX9xSHGSS2Ax4,190976
48
+ pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=CMzj7jyJ72v66aqw3GoMMl9wE9O6YrMAZrY1B3XZjTE,186880
49
+ pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=rsq112DVYvzSAl4oV4GCtACvXBAr__glgmtGs8LLm2A,181248
50
50
  pyxcp/daq_stim/stim.cpp,sha256=F2OG67W4KKwTTiUCxm-9egIv3TLFdOkRunX6xf7YOtc,177
51
51
  pyxcp/daq_stim/stim.hpp,sha256=U-uInRrA6OCdMl1l1SWbQ_KEPpnNYrWut924IvbW6R0,18508
52
52
  pyxcp/daq_stim/stim_wrapper.cpp,sha256=5LbWkK86h_4mHd83dnwCU7BRvVYit8ijxBMT7pthtOE,1830
@@ -91,21 +91,22 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
91
91
  pyxcp/recorder/reader.hpp,sha256=qbz-LFg87h4yLaGiv_8zP-95UebbwICei0tvgHu6uII,5190
92
92
  pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
93
93
  pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=GJ8vjxZgdGPCPQmEwbh6Tt6aMpcXAf8zlEgz3gvBRf4,370176
95
- pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=qA2puY2O0bpsnXnLYq91RAEPQIvoeiOmLgYKEgKFI00,371712
96
- pyxcp/recorder/rekorder.cp312-win_amd64.pyd,sha256=G6K71QbQ2f55MxVghHwtA1SislR2ve32SPGq7tDrbU8,374272
97
- pyxcp/recorder/rekorder.cp313-win_amd64.pyd,sha256=rO6p81yaDwmyq3FIDGcidMpbP5kz2AzdSAH6FkRSznY,374272
98
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=qZ4YHhO4l7YhhiyOF3b-IS9eCwdYXypZrtWoJAI6o40,369664
99
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=nTXGO-1YyrtzXJpx02c5ZaIUcCL02ssk6ctXIz18eME,356352
94
+ pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=nf82Ajn-gShv1tvZVItg4o1dRKSkZDZf2np5j_wXnVg,378880
95
+ pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=tDdihMCmKWjp0Tp092r7zvwk1ztAMbG-Mug8Tb8pucU,380416
96
+ pyxcp/recorder/rekorder.cp312-win_amd64.pyd,sha256=CRYjCenuzfOz8hy9rUSS1jFPoA652FzfBCT-PzvhLv0,383488
97
+ pyxcp/recorder/rekorder.cp313-win_amd64.pyd,sha256=jUW4Q_N1pSKg1tisxHXPJypQYCRo9ypRO4YsdvFKoQw,382976
98
+ pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=4Wq1cgT0RVqyXNwfrE195LI-u3OxUXMCzMxYl89_twU,378368
99
+ pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=End-lUEkXt7aYi08zGP1t8hD26vzUIHjqPeN1fnGwzo,364032
100
100
  pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
101
101
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
102
102
  pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
103
103
  pyxcp/recorder/test_reko.py,sha256=M8lfKBmBUl-28IMVoD6lU5Bnorz7fYFOvcAjfVZxuXA,1014
104
- pyxcp/recorder/unfolder.hpp,sha256=KrzZqXJgCr9tXD7k-2tWq1GT-A3SoThug4jyF4WLDWU,45177
104
+ pyxcp/recorder/unfolder.hpp,sha256=1DOjH3YlExYtJfQpmnyxWiQTgM87ON59tNlhC6o2ACE,48082
105
105
  pyxcp/recorder/wrap.cpp,sha256=S3frBevIrPE5m3kt_mXe9TDOwWPJFiVa7Rt9FGMCv2A,8909
106
106
  pyxcp/recorder/writer.hpp,sha256=rNjtRTtJes5z-BzKR2K56P_Kvc9MEVQgycu8J0wKf1g,11284
107
107
  pyxcp/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
108
108
  pyxcp/scripts/pyxcp_probe_can_drivers.py,sha256=P_gscDTAofbSVA_Wd1GATrnyWGTf1-Dz_oPdlRFfjuk,567
109
+ pyxcp/scripts/xcp_examples.py,sha256=q2wNXHVZu4GjcIlZwp2j9Sqm5QH39Olro4BQaLoIqiM,2583
109
110
  pyxcp/scripts/xcp_fetch_a2l.py,sha256=72818jdJiLsDuWWfkAPxekZ7fzRRz_A4RVSy06LQNe4,1239
110
111
  pyxcp/scripts/xcp_id_scanner.py,sha256=2P53qrvM-rYFTBbbm7eAKyOxESkKrorieND-KoZZ9mo,421
111
112
  pyxcp/scripts/xcp_info.py,sha256=pjI7EaT7I47b16VyFnrCxWtRjzmCO4HmVPdc0Q2YpvI,3945
@@ -126,15 +127,15 @@ pyxcp/transport/base.py,sha256=MQwdDpff34YOHyabP-NdV1Jq-w2umXMSMSNdc4nMGDU,16281
126
127
  pyxcp/transport/base_transport.hpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
128
  pyxcp/transport/can.py,sha256=cQ8lrwBL7Ar0GSf48987TztR9wqYS_UnXUngzhaHXe0,14909
128
129
  pyxcp/transport/eth.py,sha256=xPzN2oSALoPKJVvZpBljPSV1AxfpjRusOzymO-TD1Rw,8711
129
- pyxcp/transport/sxi.py,sha256=_r1aEeMVy1tNPVStHH0iaaHTqnC-Uy3FwWDrYpeByI8,4699
130
+ pyxcp/transport/sxi.py,sha256=vM8WZIKuu_dNuqkxZM_1n6iQkQCCzo4ykWpiG6ba8Fk,4695
130
131
  pyxcp/transport/transport_wrapper.cpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
132
  pyxcp/transport/usb_transport.py,sha256=JuYrwkWsUdibdVNA57LBEQT3a3ykOgWPdWcfqj96nDE,8343
132
133
  pyxcp/types.py,sha256=hY4Bb3qT3ZoabGnSKLY6S84MvVyuOCxwVONfs2skx2Y,26043
133
134
  pyxcp/utils.py,sha256=tujhw__jUSVIljHfHekN-nzERXC_1orVRBGKNyGqBuo,2961
134
135
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
136
  pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
136
- pyxcp-0.22.2.dist-info/entry_points.txt,sha256=hGDdVkAmhSdsUN_p1aIuhchORwtzkBIQ-HhPUfttXBs,262
137
- pyxcp-0.22.2.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
138
- pyxcp-0.22.2.dist-info/METADATA,sha256=0sffU2Eh2iGMohh8qCBicPAbz69-5QJpQz_1YoYAdVs,4075
139
- pyxcp-0.22.2.dist-info/WHEEL,sha256=RBxSuTKD__NDRUBZC1I4b5R6FamU3rQfymmsTgmeb3A,98
140
- pyxcp-0.22.2.dist-info/RECORD,,
137
+ pyxcp-0.22.8.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
138
+ pyxcp-0.22.8.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
139
+ pyxcp-0.22.8.dist-info/METADATA,sha256=Q12PIGTD3wxIYuDFBDn5PmwOVIHtbkVA4pylr2MKvt8,4075
140
+ pyxcp-0.22.8.dist-info/WHEEL,sha256=RBxSuTKD__NDRUBZC1I4b5R6FamU3rQfymmsTgmeb3A,98
141
+ pyxcp-0.22.8.dist-info/RECORD,,
@@ -1,5 +1,6 @@
1
1
  [console_scripts]
2
2
  pyxcp-probe-can-drivers=pyxcp.scripts.pyxcp_probe_can_drivers:main
3
+ xcp-examples=pyxcp.scripts.xcp_examples:main
3
4
  xcp-fetch-a2l=pyxcp.scripts.xcp_fetch_a2l:main
4
5
  xcp-id-scanner=pyxcp.scripts.xcp_id_scanner:main
5
6
  xcp-info=pyxcp.scripts.xcp_info:main
File without changes