pyxcp 0.22.2__cp310-cp310-win_amd64.whl → 0.22.8__cp310-cp310-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 +1 -1
- pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd +0 -0
- pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd +0 -0
- pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp310-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd +0 -0
- pyxcp/recorder/unfolder.hpp +84 -1
- pyxcp/scripts/xcp_examples.py +64 -0
- pyxcp/transport/sxi.py +2 -2
- {pyxcp-0.22.2.dist-info → pyxcp-0.22.8.dist-info}/METADATA +1 -1
- {pyxcp-0.22.2.dist-info → pyxcp-0.22.8.dist-info}/RECORD +18 -17
- {pyxcp-0.22.2.dist-info → pyxcp-0.22.8.dist-info}/entry_points.txt +1 -0
- {pyxcp-0.22.2.dist-info → pyxcp-0.22.8.dist-info}/LICENSE +0 -0
- {pyxcp-0.22.2.dist-info → pyxcp-0.22.8.dist-info}/WHEEL +0 -0
pyxcp/__init__.py
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
pyxcp/recorder/unfolder.hpp
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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,4 +1,4 @@
|
|
|
1
|
-
pyxcp/__init__.py,sha256=
|
|
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,9 +24,9 @@ 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=
|
|
28
|
-
pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=
|
|
29
|
-
pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=
|
|
27
|
+
pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=Ty4RoQrpJF8KbTuHbGCG0GAU2TEugQaECYMq5nrMiQk,273920
|
|
28
|
+
pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=CbLeNvyOb2VG-0BurZJfewoV4cerrNpKEPQTKR7pM3U,273920
|
|
29
|
+
pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=gkLRVZ9JENr9blmv5MKHx1t-dKhrjOA0gNhwyZqvBBk,256512
|
|
30
30
|
pyxcp/cpp_ext/daqlist.hpp,sha256=sgqodW4vnN82s05mFyXQnpQox4KR3VDhP5FB_VhsmQc,7075
|
|
31
31
|
pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
|
|
32
32
|
pyxcp/cpp_ext/extension_wrapper.cpp,sha256=3vEo7PljGHw6w1mNB08jHe4B6CMSg0jCWPJucpmhmDw,4438
|
|
@@ -38,9 +38,9 @@ pyxcp/daq_stim/optimize/__init__.py,sha256=E4HzY8P0aeegNgu71hUcbL-yR6Fzg5PGe8PSi
|
|
|
38
38
|
pyxcp/daq_stim/optimize/binpacking.py,sha256=zTNjpt91MnGW5ha9Z07hQtuoJ7tspyRwRlLYbE6GMGs,1249
|
|
39
39
|
pyxcp/daq_stim/scheduler.cpp,sha256=a7VK7kP2Hs8yMlcDAkXwJ0bH88lr_yz156sphcHS7Z4,715
|
|
40
40
|
pyxcp/daq_stim/scheduler.hpp,sha256=U_6tUbebmzX5vVZS0EFSgTaPsyxMg6yRXHG_aPWA0x4,1884
|
|
41
|
-
pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=
|
|
42
|
-
pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=
|
|
43
|
-
pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=
|
|
41
|
+
pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=lHFzlfWynww-VU6gO-vJYO-aDPeEoVw-LssJ1UYqLq0,186880
|
|
42
|
+
pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=CMzj7jyJ72v66aqw3GoMMl9wE9O6YrMAZrY1B3XZjTE,186880
|
|
43
|
+
pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=rsq112DVYvzSAl4oV4GCtACvXBAr__glgmtGs8LLm2A,181248
|
|
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=5LbWkK86h_4mHd83dnwCU7BRvVYit8ijxBMT7pthtOE,1830
|
|
@@ -85,18 +85,19 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
|
|
|
85
85
|
pyxcp/recorder/reader.hpp,sha256=qbz-LFg87h4yLaGiv_8zP-95UebbwICei0tvgHu6uII,5190
|
|
86
86
|
pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
|
|
87
87
|
pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
-
pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=
|
|
89
|
-
pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=
|
|
90
|
-
pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=
|
|
88
|
+
pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=nf82Ajn-gShv1tvZVItg4o1dRKSkZDZf2np5j_wXnVg,378880
|
|
89
|
+
pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=4Wq1cgT0RVqyXNwfrE195LI-u3OxUXMCzMxYl89_twU,378368
|
|
90
|
+
pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=End-lUEkXt7aYi08zGP1t8hD26vzUIHjqPeN1fnGwzo,364032
|
|
91
91
|
pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
|
|
92
92
|
pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
|
|
93
93
|
pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
|
|
94
94
|
pyxcp/recorder/test_reko.py,sha256=M8lfKBmBUl-28IMVoD6lU5Bnorz7fYFOvcAjfVZxuXA,1014
|
|
95
|
-
pyxcp/recorder/unfolder.hpp,sha256=
|
|
95
|
+
pyxcp/recorder/unfolder.hpp,sha256=1DOjH3YlExYtJfQpmnyxWiQTgM87ON59tNlhC6o2ACE,48082
|
|
96
96
|
pyxcp/recorder/wrap.cpp,sha256=S3frBevIrPE5m3kt_mXe9TDOwWPJFiVa7Rt9FGMCv2A,8909
|
|
97
97
|
pyxcp/recorder/writer.hpp,sha256=rNjtRTtJes5z-BzKR2K56P_Kvc9MEVQgycu8J0wKf1g,11284
|
|
98
98
|
pyxcp/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
99
99
|
pyxcp/scripts/pyxcp_probe_can_drivers.py,sha256=P_gscDTAofbSVA_Wd1GATrnyWGTf1-Dz_oPdlRFfjuk,567
|
|
100
|
+
pyxcp/scripts/xcp_examples.py,sha256=q2wNXHVZu4GjcIlZwp2j9Sqm5QH39Olro4BQaLoIqiM,2583
|
|
100
101
|
pyxcp/scripts/xcp_fetch_a2l.py,sha256=72818jdJiLsDuWWfkAPxekZ7fzRRz_A4RVSy06LQNe4,1239
|
|
101
102
|
pyxcp/scripts/xcp_id_scanner.py,sha256=2P53qrvM-rYFTBbbm7eAKyOxESkKrorieND-KoZZ9mo,421
|
|
102
103
|
pyxcp/scripts/xcp_info.py,sha256=pjI7EaT7I47b16VyFnrCxWtRjzmCO4HmVPdc0Q2YpvI,3945
|
|
@@ -117,15 +118,15 @@ pyxcp/transport/base.py,sha256=MQwdDpff34YOHyabP-NdV1Jq-w2umXMSMSNdc4nMGDU,16281
|
|
|
117
118
|
pyxcp/transport/base_transport.hpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
118
119
|
pyxcp/transport/can.py,sha256=cQ8lrwBL7Ar0GSf48987TztR9wqYS_UnXUngzhaHXe0,14909
|
|
119
120
|
pyxcp/transport/eth.py,sha256=xPzN2oSALoPKJVvZpBljPSV1AxfpjRusOzymO-TD1Rw,8711
|
|
120
|
-
pyxcp/transport/sxi.py,sha256=
|
|
121
|
+
pyxcp/transport/sxi.py,sha256=vM8WZIKuu_dNuqkxZM_1n6iQkQCCzo4ykWpiG6ba8Fk,4695
|
|
121
122
|
pyxcp/transport/transport_wrapper.cpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
123
|
pyxcp/transport/usb_transport.py,sha256=JuYrwkWsUdibdVNA57LBEQT3a3ykOgWPdWcfqj96nDE,8343
|
|
123
124
|
pyxcp/types.py,sha256=hY4Bb3qT3ZoabGnSKLY6S84MvVyuOCxwVONfs2skx2Y,26043
|
|
124
125
|
pyxcp/utils.py,sha256=tujhw__jUSVIljHfHekN-nzERXC_1orVRBGKNyGqBuo,2961
|
|
125
126
|
pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
127
|
pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
|
|
127
|
-
pyxcp-0.22.
|
|
128
|
-
pyxcp-0.22.
|
|
129
|
-
pyxcp-0.22.
|
|
130
|
-
pyxcp-0.22.
|
|
131
|
-
pyxcp-0.22.
|
|
128
|
+
pyxcp-0.22.8.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
|
|
129
|
+
pyxcp-0.22.8.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
|
|
130
|
+
pyxcp-0.22.8.dist-info/METADATA,sha256=Q12PIGTD3wxIYuDFBDn5PmwOVIHtbkVA4pylr2MKvt8,4075
|
|
131
|
+
pyxcp-0.22.8.dist-info/WHEEL,sha256=Jr_qyVDoEAnAI5RcZqNdiGEGsXCke4YuTFjHKZdYyb4,98
|
|
132
|
+
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
|
|
File without changes
|