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