pyxcp 0.25.1__cp314-cp314-macosx_11_0_arm64.whl → 0.25.9__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.
Files changed (64) hide show
  1. pyxcp/__init__.py +2 -2
  2. pyxcp/cmdline.py +14 -29
  3. pyxcp/config/__init__.py +1257 -1257
  4. pyxcp/cpp_ext/aligned_buffer.hpp +1 -1
  5. pyxcp/cpp_ext/cpp_ext.cpython-310-darwin.so +0 -0
  6. pyxcp/cpp_ext/cpp_ext.cpython-311-darwin.so +0 -0
  7. pyxcp/cpp_ext/cpp_ext.cpython-312-darwin.so +0 -0
  8. pyxcp/cpp_ext/cpp_ext.cpython-313-darwin.so +0 -0
  9. pyxcp/cpp_ext/cpp_ext.cpython-314-darwin.so +0 -0
  10. pyxcp/cpp_ext/extension_wrapper.cpp +79 -2
  11. pyxcp/cpp_ext/framing.hpp +1 -1
  12. pyxcp/cpp_ext/helper.hpp +280 -280
  13. pyxcp/cpp_ext/sxi_framing.hpp +1 -1
  14. pyxcp/daq_stim/__init__.py +95 -32
  15. pyxcp/daq_stim/optimize/binpacking.py +2 -2
  16. pyxcp/daq_stim/scheduler.cpp +8 -8
  17. pyxcp/errormatrix.py +2 -2
  18. pyxcp/examples/xcp_read_benchmark.py +2 -2
  19. pyxcp/examples/xcp_skel.py +1 -2
  20. pyxcp/examples/xcp_unlock.py +10 -12
  21. pyxcp/examples/xcp_user_supplied_driver.py +1 -2
  22. pyxcp/examples/xcphello.py +2 -15
  23. pyxcp/examples/xcphello_recorder.py +2 -2
  24. pyxcp/master/__init__.py +1 -0
  25. pyxcp/master/master.py +14 -20
  26. pyxcp/recorder/.idea/misc.xml +1 -1
  27. pyxcp/recorder/.idea/modules.xml +1 -1
  28. pyxcp/recorder/.idea/recorder.iml +1 -1
  29. pyxcp/recorder/.idea/vcs.xml +1 -1
  30. pyxcp/recorder/converter/__init__.py +4 -10
  31. pyxcp/recorder/reader.hpp +138 -138
  32. pyxcp/recorder/reco.py +1 -0
  33. pyxcp/recorder/rekorder.hpp +274 -274
  34. pyxcp/recorder/wrap.cpp +184 -184
  35. pyxcp/recorder/writer.hpp +302 -302
  36. pyxcp/scripts/xcp_daq_recorder.py +54 -0
  37. pyxcp/scripts/xcp_fetch_a2l.py +2 -2
  38. pyxcp/scripts/xcp_id_scanner.py +1 -2
  39. pyxcp/scripts/xcp_info.py +66 -51
  40. pyxcp/scripts/xcp_profile.py +1 -2
  41. pyxcp/tests/test_binpacking.py +1 -0
  42. pyxcp/tests/test_daq.py +1 -1
  43. pyxcp/tests/test_framing.py +1 -1
  44. pyxcp/tests/test_master.py +104 -83
  45. pyxcp/tests/test_transport.py +0 -1
  46. pyxcp/timing.py +1 -1
  47. pyxcp/transport/base.py +1 -1
  48. pyxcp/transport/can.py +1 -1
  49. pyxcp/transport/eth.py +1 -1
  50. pyxcp/transport/hdf5_policy.py +167 -0
  51. pyxcp/transport/sxi.py +1 -1
  52. pyxcp/transport/transport_ext.cpython-310-darwin.so +0 -0
  53. pyxcp/transport/transport_ext.cpython-311-darwin.so +0 -0
  54. pyxcp/transport/transport_ext.cpython-312-darwin.so +0 -0
  55. pyxcp/transport/transport_ext.cpython-313-darwin.so +0 -0
  56. pyxcp/transport/transport_ext.cpython-314-darwin.so +0 -0
  57. pyxcp/transport/usb_transport.py +1 -1
  58. pyxcp/{utils.py → utils/__init__.py} +1 -2
  59. pyxcp/utils/cli.py +78 -0
  60. {pyxcp-0.25.1.dist-info → pyxcp-0.25.9.dist-info}/METADATA +1 -1
  61. {pyxcp-0.25.1.dist-info → pyxcp-0.25.9.dist-info}/RECORD +64 -56
  62. {pyxcp-0.25.1.dist-info → pyxcp-0.25.9.dist-info}/WHEEL +1 -1
  63. {pyxcp-0.25.1.dist-info → pyxcp-0.25.9.dist-info}/entry_points.txt +0 -0
  64. {pyxcp-0.25.1.dist-info → pyxcp-0.25.9.dist-info}/licenses/LICENSE +0 -0
pyxcp/recorder/wrap.cpp CHANGED
@@ -1,184 +1,184 @@
1
-
2
- #include <pybind11/functional.h>
3
- #include <pybind11/numpy.h>
4
- #include <pybind11/pybind11.h>
5
- #include <pybind11/stl.h>
6
- #include <memory>
7
-
8
- #include <cstdint>
9
-
10
- #include "rekorder.hpp"
11
-
12
- namespace py = pybind11;
13
- using namespace pybind11::literals;
14
-
15
-
16
- class PyDaqOnlinePolicy : public DaqOnlinePolicy {
17
- public:
18
-
19
- using DaqOnlinePolicy::DaqOnlinePolicy;
20
-
21
- void on_daq_list(
22
- std::uint16_t daq_list_num, std::uint64_t timestamp0, std::uint64_t timestamp1,
23
- const std::vector<measurement_value_t>& measurement
24
- ) override {
25
- PYBIND11_OVERRIDE_PURE(void, DaqOnlinePolicy, on_daq_list, daq_list_num, timestamp0, timestamp1, measurement);
26
- }
27
-
28
- void initialize() override {
29
- PYBIND11_OVERRIDE(void, DaqOnlinePolicy, initialize);
30
- }
31
-
32
- void finalize() override {
33
- PYBIND11_OVERRIDE(void, DaqOnlinePolicy, finalize);
34
- }
35
- };
36
-
37
- class PyDaqRecorderPolicy : public DaqRecorderPolicy {
38
- public:
39
-
40
- using DaqRecorderPolicy::DaqRecorderPolicy;
41
-
42
- void initialize() override {
43
- PYBIND11_OVERRIDE(void, DaqRecorderPolicy, initialize);
44
- }
45
-
46
- void finalize() override {
47
- PYBIND11_OVERRIDE(void, DaqRecorderPolicy, finalize);
48
- }
49
- };
50
-
51
- class PyXcpLogFileDecoder : public XcpLogFileDecoder {
52
- public:
53
-
54
- using XcpLogFileDecoder::XcpLogFileDecoder;
55
-
56
- void on_daq_list(
57
- std::uint16_t daq_list_num, std::uint64_t timestamp0, std::uint64_t timestamp1,
58
- const std::vector<measurement_value_t>& measurement
59
- ) override {
60
- PYBIND11_OVERRIDE_PURE(void, XcpLogFileDecoder, on_daq_list, daq_list_num, timestamp0, timestamp1, measurement);
61
- }
62
-
63
- void initialize() override {
64
- PYBIND11_OVERRIDE(void, XcpLogFileDecoder, initialize);
65
- }
66
-
67
- void finalize() override {
68
- PYBIND11_OVERRIDE(void, XcpLogFileDecoder, finalize);
69
- }
70
- };
71
-
72
- PYBIND11_MODULE(rekorder, m) {
73
- m.doc() = "XCP raw frame recorder.";
74
- m.def("data_types", get_data_types);
75
-
76
- py::class_<FileHeaderType>(m, "FileHeaderType")
77
- .def(py::init<std::uint16_t, std::uint16_t, std::uint16_t, std::uint32_t, std::uint32_t, std::uint32_t, std::uint32_t>())
78
- .def("__repr__", [](const FileHeaderType& self) {
79
- std::stringstream ss;
80
- ss << "FileHeaderType(" << std::endl;
81
- ss << " hdr_size=" << self.hdr_size << "," << std::endl;
82
- ss << " version=" << self.version << "," << std::endl;
83
- ss << " options=" << self.options << "," << std::endl;
84
- ss << " num_containers=" << self.num_containers << "," << std::endl;
85
- ss << " record_count=" << self.record_count << "," << std::endl;
86
- ss << " size_compressed=" << self.size_compressed << "," << std::endl;
87
- ss << " size_uncompressed=" << self.size_uncompressed << "," << std::endl;
88
- ss << " compression_ratio="
89
- << (double)((std::uint64_t)(((double)self.size_uncompressed / (double)self.size_compressed * 100.0) + 0.5)) / 100.0
90
- << std::endl;
91
- ss << ")" << std::endl;
92
- return ss.str();
93
- });
94
-
95
- py::class_<Deserializer>(m, "Deserializer").def(py::init<const std::string&>()).def("run", &Deserializer::run);
96
-
97
- py::class_<XcpLogFileReader>(m, "_PyXcpLogFileReader")
98
- .def(py::init<const std::string&>())
99
- .def("next_block", &XcpLogFileReader::next_block)
100
- .def("reset", &XcpLogFileReader::reset)
101
- .def("get_header_as_tuple", &XcpLogFileReader::get_header_as_tuple)
102
- .def("get_metadata", [](const XcpLogFileReader& self) { return py::bytes(self.get_metadata()); });
103
-
104
- py::class_<XcpLogFileWriter>(m, "_PyXcpLogFileWriter")
105
- .def(
106
- py::init<const std::string&, std::uint32_t, std::uint32_t, std::string_view>(), py::arg("filename"),
107
- py::arg("prealloc"), py::arg("chunk_size"), py::arg("metadata") = ""
108
- )
109
- .def("finalize", &XcpLogFileWriter::finalize)
110
- .def("add_frame", &XcpLogFileWriter::add_frame);
111
-
112
- py::class_<MeasurementParameters>(m, "MeasurementParameters")
113
- .def(py::init<
114
- std::uint8_t, std::uint8_t, bool, bool, bool, bool, double, std::uint8_t, std::uint16_t, const TimestampInfo&,
115
- const std::vector<std::shared_ptr<DaqListBase>>&, const std::vector<std::uint16_t>&>())
116
- .def("dumps", [](const MeasurementParameters& self) { return py::bytes(self.dumps()); })
117
- .def(
118
- "__repr__",
119
- [](const MeasurementParameters& self) {
120
- std::stringstream ss;
121
- ss << "MeasurementParameters(";
122
- ss << "byte_order=\"" << byte_order_to_string(self.m_byte_order) << "\", ";
123
- ss << "id_field_size=" << static_cast<std::uint16_t>(self.m_id_field_size) << ", ";
124
- ss << "timestamps_supported=" << bool_to_string(self.m_timestamps_supported) << ", ";
125
- ss << "ts_fixed=" << bool_to_string(self.m_ts_fixed) << ", ";
126
- ss << "prescaler_supported=" << bool_to_string(self.m_prescaler_supported) << ", ";
127
- ss << "selectable_timestamps=" << bool_to_string(self.m_selectable_timestamps) << ", ";
128
- ss << "ts_scale_factor=" << self.m_ts_scale_factor << ", ";
129
- ss << "ts_size=" << static_cast<std::uint16_t>(self.m_ts_size) << ", ";
130
- ss << "min_daq=" << static_cast<std::uint16_t>(self.m_min_daq) << ", ";
131
- ss << "timestamp_info=" << self.get_timestamp_info().to_string() << ", ";
132
- ss << "daq_lists=[\n";
133
- for (const auto& dl : self.m_daq_lists) {
134
- ss << dl->to_string() << ",\n";
135
- }
136
- ss << "],\n";
137
- ss << "first_pids=[";
138
- for (auto fp : self.m_first_pids) {
139
- ss << fp << ", ";
140
- }
141
- ss << "]";
142
- return ss.str();
143
- }
144
- )
145
- .def_property_readonly("byte_order", &MeasurementParameters::get_byte_order)
146
- .def_property_readonly("id_field_size", &MeasurementParameters::get_id_field_size)
147
- .def_property_readonly("timestamps_supported", &MeasurementParameters::get_timestamps_supported)
148
- .def_property_readonly("ts_fixed", &MeasurementParameters::get_ts_fixed)
149
- .def_property_readonly("prescaler_supported", &MeasurementParameters::get_prescaler_supported)
150
- .def_property_readonly("selectable_timestamps", &MeasurementParameters::get_selectable_timestamps)
151
- .def_property_readonly("ts_scale_factor", &MeasurementParameters::get_ts_scale_factor)
152
- .def_property_readonly("ts_size", &MeasurementParameters::get_ts_size)
153
- .def_property_readonly("min_daq", &MeasurementParameters::get_min_daq)
154
- .def_property_readonly("timestamp_info", &MeasurementParameters::get_timestamp_info)
155
- .def_property_readonly("daq_lists", &MeasurementParameters::get_daq_lists)
156
- .def_property_readonly("first_pids", &MeasurementParameters::get_first_pids)
157
- .def_property_readonly("timestamp_info", &MeasurementParameters::get_timestamp_info);
158
-
159
- py::class_<DaqRecorderPolicy, PyDaqRecorderPolicy>(m, "DaqRecorderPolicy", py::dynamic_attr())
160
- .def(py::init<>())
161
- .def("create_writer", &DaqRecorderPolicy::create_writer)
162
- .def("feed", &DaqRecorderPolicy::feed)
163
- .def("set_parameters", &DaqRecorderPolicy::set_parameters)
164
- .def("initialize", &DaqRecorderPolicy::initialize)
165
- .def("finalize", &DaqRecorderPolicy::finalize);
166
-
167
- py::class_<DaqOnlinePolicy, PyDaqOnlinePolicy>(m, "DaqOnlinePolicy", py::dynamic_attr())
168
- .def(py::init<>())
169
- .def("on_daq_list", &DaqOnlinePolicy::on_daq_list)
170
- .def("feed", &DaqOnlinePolicy::feed)
171
- .def("finalize", &DaqOnlinePolicy::finalize)
172
- .def("set_parameters", &DaqOnlinePolicy::set_parameters)
173
- .def("initialize", &DaqOnlinePolicy::initialize);
174
-
175
- py::class_<XcpLogFileDecoder, PyXcpLogFileDecoder>(m, "XcpLogFileDecoder", py::dynamic_attr())
176
- .def(py::init<const std::string&>())
177
- .def("run", &XcpLogFileDecoder::run)
178
- .def("on_daq_list", &XcpLogFileDecoder::on_daq_list)
179
- .def_property_readonly("parameters", &XcpLogFileDecoder::get_parameters)
180
- .def_property_readonly("daq_lists", &XcpLogFileDecoder::get_daq_lists)
181
- .def("get_header", &XcpLogFileDecoder::get_header)
182
- .def("initialize", &XcpLogFileDecoder::initialize)
183
- .def("finalize", &XcpLogFileDecoder::finalize);
184
- }
1
+
2
+ #include <pybind11/functional.h>
3
+ #include <pybind11/numpy.h>
4
+ #include <pybind11/pybind11.h>
5
+ #include <pybind11/stl.h>
6
+ #include <memory>
7
+
8
+ #include <cstdint>
9
+
10
+ #include "rekorder.hpp"
11
+
12
+ namespace py = pybind11;
13
+ using namespace pybind11::literals;
14
+
15
+
16
+ class PyDaqOnlinePolicy : public DaqOnlinePolicy {
17
+ public:
18
+
19
+ using DaqOnlinePolicy::DaqOnlinePolicy;
20
+
21
+ void on_daq_list(
22
+ std::uint16_t daq_list_num, std::uint64_t timestamp0, std::uint64_t timestamp1,
23
+ const std::vector<measurement_value_t>& measurement
24
+ ) override {
25
+ PYBIND11_OVERRIDE_PURE(void, DaqOnlinePolicy, on_daq_list, daq_list_num, timestamp0, timestamp1, measurement);
26
+ }
27
+
28
+ void initialize() override {
29
+ PYBIND11_OVERRIDE(void, DaqOnlinePolicy, initialize);
30
+ }
31
+
32
+ void finalize() override {
33
+ PYBIND11_OVERRIDE(void, DaqOnlinePolicy, finalize);
34
+ }
35
+ };
36
+
37
+ class PyDaqRecorderPolicy : public DaqRecorderPolicy {
38
+ public:
39
+
40
+ using DaqRecorderPolicy::DaqRecorderPolicy;
41
+
42
+ void initialize() override {
43
+ PYBIND11_OVERRIDE(void, DaqRecorderPolicy, initialize);
44
+ }
45
+
46
+ void finalize() override {
47
+ PYBIND11_OVERRIDE(void, DaqRecorderPolicy, finalize);
48
+ }
49
+ };
50
+
51
+ class PyXcpLogFileDecoder : public XcpLogFileDecoder {
52
+ public:
53
+
54
+ using XcpLogFileDecoder::XcpLogFileDecoder;
55
+
56
+ void on_daq_list(
57
+ std::uint16_t daq_list_num, std::uint64_t timestamp0, std::uint64_t timestamp1,
58
+ const std::vector<measurement_value_t>& measurement
59
+ ) override {
60
+ PYBIND11_OVERRIDE_PURE(void, XcpLogFileDecoder, on_daq_list, daq_list_num, timestamp0, timestamp1, measurement);
61
+ }
62
+
63
+ void initialize() override {
64
+ PYBIND11_OVERRIDE(void, XcpLogFileDecoder, initialize);
65
+ }
66
+
67
+ void finalize() override {
68
+ PYBIND11_OVERRIDE(void, XcpLogFileDecoder, finalize);
69
+ }
70
+ };
71
+
72
+ PYBIND11_MODULE(rekorder, m) {
73
+ m.doc() = "XCP raw frame recorder.";
74
+ m.def("data_types", get_data_types);
75
+
76
+ py::class_<FileHeaderType>(m, "FileHeaderType")
77
+ .def(py::init<std::uint16_t, std::uint16_t, std::uint16_t, std::uint32_t, std::uint32_t, std::uint32_t, std::uint32_t>())
78
+ .def("__repr__", [](const FileHeaderType& self) {
79
+ std::stringstream ss;
80
+ ss << "FileHeaderType(" << std::endl;
81
+ ss << " hdr_size=" << self.hdr_size << "," << std::endl;
82
+ ss << " version=" << self.version << "," << std::endl;
83
+ ss << " options=" << self.options << "," << std::endl;
84
+ ss << " num_containers=" << self.num_containers << "," << std::endl;
85
+ ss << " record_count=" << self.record_count << "," << std::endl;
86
+ ss << " size_compressed=" << self.size_compressed << "," << std::endl;
87
+ ss << " size_uncompressed=" << self.size_uncompressed << "," << std::endl;
88
+ ss << " compression_ratio="
89
+ << (double)((std::uint64_t)(((double)self.size_uncompressed / (double)self.size_compressed * 100.0) + 0.5)) / 100.0
90
+ << std::endl;
91
+ ss << ")" << std::endl;
92
+ return ss.str();
93
+ });
94
+
95
+ py::class_<Deserializer>(m, "Deserializer").def(py::init<const std::string&>()).def("run", &Deserializer::run);
96
+
97
+ py::class_<XcpLogFileReader>(m, "_PyXcpLogFileReader")
98
+ .def(py::init<const std::string&>())
99
+ .def("next_block", &XcpLogFileReader::next_block)
100
+ .def("reset", &XcpLogFileReader::reset)
101
+ .def("get_header_as_tuple", &XcpLogFileReader::get_header_as_tuple)
102
+ .def("get_metadata", [](const XcpLogFileReader& self) { return py::bytes(self.get_metadata()); });
103
+
104
+ py::class_<XcpLogFileWriter>(m, "_PyXcpLogFileWriter")
105
+ .def(
106
+ py::init<const std::string&, std::uint32_t, std::uint32_t, std::string_view>(), py::arg("filename"),
107
+ py::arg("prealloc"), py::arg("chunk_size"), py::arg("metadata") = ""
108
+ )
109
+ .def("finalize", &XcpLogFileWriter::finalize)
110
+ .def("add_frame", &XcpLogFileWriter::add_frame);
111
+
112
+ py::class_<MeasurementParameters>(m, "MeasurementParameters")
113
+ .def(py::init<
114
+ std::uint8_t, std::uint8_t, bool, bool, bool, bool, double, std::uint8_t, std::uint16_t, const TimestampInfo&,
115
+ const std::vector<std::shared_ptr<DaqListBase>>&, const std::vector<std::uint16_t>&>())
116
+ .def("dumps", [](const MeasurementParameters& self) { return py::bytes(self.dumps()); })
117
+ .def(
118
+ "__repr__",
119
+ [](const MeasurementParameters& self) {
120
+ std::stringstream ss;
121
+ ss << "MeasurementParameters(";
122
+ ss << "byte_order=\"" << byte_order_to_string(self.m_byte_order) << "\", ";
123
+ ss << "id_field_size=" << static_cast<std::uint16_t>(self.m_id_field_size) << ", ";
124
+ ss << "timestamps_supported=" << bool_to_string(self.m_timestamps_supported) << ", ";
125
+ ss << "ts_fixed=" << bool_to_string(self.m_ts_fixed) << ", ";
126
+ ss << "prescaler_supported=" << bool_to_string(self.m_prescaler_supported) << ", ";
127
+ ss << "selectable_timestamps=" << bool_to_string(self.m_selectable_timestamps) << ", ";
128
+ ss << "ts_scale_factor=" << self.m_ts_scale_factor << ", ";
129
+ ss << "ts_size=" << static_cast<std::uint16_t>(self.m_ts_size) << ", ";
130
+ ss << "min_daq=" << static_cast<std::uint16_t>(self.m_min_daq) << ", ";
131
+ ss << "timestamp_info=" << self.get_timestamp_info().to_string() << ", ";
132
+ ss << "daq_lists=[\n";
133
+ for (const auto& dl : self.m_daq_lists) {
134
+ ss << dl->to_string() << ",\n";
135
+ }
136
+ ss << "],\n";
137
+ ss << "first_pids=[";
138
+ for (auto fp : self.m_first_pids) {
139
+ ss << fp << ", ";
140
+ }
141
+ ss << "]";
142
+ return ss.str();
143
+ }
144
+ )
145
+ .def_property_readonly("byte_order", &MeasurementParameters::get_byte_order)
146
+ .def_property_readonly("id_field_size", &MeasurementParameters::get_id_field_size)
147
+ .def_property_readonly("timestamps_supported", &MeasurementParameters::get_timestamps_supported)
148
+ .def_property_readonly("ts_fixed", &MeasurementParameters::get_ts_fixed)
149
+ .def_property_readonly("prescaler_supported", &MeasurementParameters::get_prescaler_supported)
150
+ .def_property_readonly("selectable_timestamps", &MeasurementParameters::get_selectable_timestamps)
151
+ .def_property_readonly("ts_scale_factor", &MeasurementParameters::get_ts_scale_factor)
152
+ .def_property_readonly("ts_size", &MeasurementParameters::get_ts_size)
153
+ .def_property_readonly("min_daq", &MeasurementParameters::get_min_daq)
154
+ .def_property_readonly("timestamp_info", &MeasurementParameters::get_timestamp_info)
155
+ .def_property_readonly("daq_lists", &MeasurementParameters::get_daq_lists)
156
+ .def_property_readonly("first_pids", &MeasurementParameters::get_first_pids)
157
+ .def_property_readonly("timestamp_info", &MeasurementParameters::get_timestamp_info);
158
+
159
+ py::class_<DaqRecorderPolicy, PyDaqRecorderPolicy>(m, "DaqRecorderPolicy", py::dynamic_attr())
160
+ .def(py::init<>())
161
+ .def("create_writer", &DaqRecorderPolicy::create_writer)
162
+ .def("feed", &DaqRecorderPolicy::feed)
163
+ .def("set_parameters", &DaqRecorderPolicy::set_parameters)
164
+ .def("initialize", &DaqRecorderPolicy::initialize)
165
+ .def("finalize", &DaqRecorderPolicy::finalize);
166
+
167
+ py::class_<DaqOnlinePolicy, PyDaqOnlinePolicy>(m, "DaqOnlinePolicy", py::dynamic_attr())
168
+ .def(py::init<>())
169
+ .def("on_daq_list", &DaqOnlinePolicy::on_daq_list)
170
+ .def("feed", &DaqOnlinePolicy::feed)
171
+ .def("finalize", &DaqOnlinePolicy::finalize)
172
+ .def("set_parameters", &DaqOnlinePolicy::set_parameters)
173
+ .def("initialize", &DaqOnlinePolicy::initialize);
174
+
175
+ py::class_<XcpLogFileDecoder, PyXcpLogFileDecoder>(m, "XcpLogFileDecoder", py::dynamic_attr())
176
+ .def(py::init<const std::string&>())
177
+ .def("run", &XcpLogFileDecoder::run)
178
+ .def("on_daq_list", &XcpLogFileDecoder::on_daq_list)
179
+ .def_property_readonly("parameters", &XcpLogFileDecoder::get_parameters)
180
+ .def_property_readonly("daq_lists", &XcpLogFileDecoder::get_daq_lists)
181
+ .def("get_header", &XcpLogFileDecoder::get_header)
182
+ .def("initialize", &XcpLogFileDecoder::initialize)
183
+ .def("finalize", &XcpLogFileDecoder::finalize);
184
+ }