pyxcp 0.22.9__cp313-cp313-win_amd64.whl → 0.22.11__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.

Files changed (33) hide show
  1. pyxcp/__init__.py +1 -1
  2. pyxcp/config/__init__.py +4 -1
  3. pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd +0 -0
  4. pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd +0 -0
  5. pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd +0 -0
  6. pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd +0 -0
  7. pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd +0 -0
  8. pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd +0 -0
  9. pyxcp/cpp_ext/extension_wrapper.cpp +3 -1
  10. pyxcp/cpp_ext/mcobject.hpp +6 -1
  11. pyxcp/daq_stim/stim.cp310-win_amd64.pyd +0 -0
  12. pyxcp/daq_stim/stim.cp311-win_amd64.pyd +0 -0
  13. pyxcp/daq_stim/stim.cp312-win_amd64.pyd +0 -0
  14. pyxcp/daq_stim/stim.cp313-win_amd64.pyd +0 -0
  15. pyxcp/daq_stim/stim.cp38-win_amd64.pyd +0 -0
  16. pyxcp/daq_stim/stim.cp39-win_amd64.pyd +0 -0
  17. pyxcp/examples/ex_csv.py +85 -0
  18. pyxcp/examples/ex_excel.py +95 -0
  19. pyxcp/master/master.py +4 -2
  20. pyxcp/recorder/rekorder.cp310-win_amd64.pyd +0 -0
  21. pyxcp/recorder/rekorder.cp311-win_amd64.pyd +0 -0
  22. pyxcp/recorder/rekorder.cp312-win_amd64.pyd +0 -0
  23. pyxcp/recorder/rekorder.cp313-win_amd64.pyd +0 -0
  24. pyxcp/recorder/rekorder.cp38-win_amd64.pyd +0 -0
  25. pyxcp/recorder/rekorder.cp39-win_amd64.pyd +0 -0
  26. pyxcp/tests/test_binpacking.py +42 -40
  27. pyxcp/tests/test_daq.py +27 -22
  28. pyxcp/tests/test_frame_padding.py +5 -2
  29. {pyxcp-0.22.9.dist-info → pyxcp-0.22.11.dist-info}/METADATA +1 -1
  30. {pyxcp-0.22.9.dist-info → pyxcp-0.22.11.dist-info}/RECORD +33 -31
  31. {pyxcp-0.22.9.dist-info → pyxcp-0.22.11.dist-info}/LICENSE +0 -0
  32. {pyxcp-0.22.9.dist-info → pyxcp-0.22.11.dist-info}/WHEEL +0 -0
  33. {pyxcp-0.22.9.dist-info → pyxcp-0.22.11.dist-info}/entry_points.txt +0 -0
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.9"
20
+ __version__ = "0.22.11"
pyxcp/config/__init__.py CHANGED
@@ -933,7 +933,10 @@ class PyXCP(Application):
933
933
  exit(2)
934
934
  else:
935
935
  self._read_configuration(self.config_file)
936
- self._setup_logger()
936
+ if logging.getLogger().hasHandlers():
937
+ self.log = logging.getLogger()
938
+ else:
939
+ self._setup_logger()
937
940
 
938
941
  def _setup_logger(self):
939
942
  from pyxcp.types import Command
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -40,7 +40,9 @@ PYBIND11_MODULE(cpp_ext, m) {
40
40
  .def_property_readonly("components", &McObject::get_components)
41
41
 
42
42
  .def("add_component", &McObject::add_component, "component"_a)
43
- .def("__repr__", [](const McObject& self) { return to_string(self); });
43
+ .def("__repr__", [](const McObject& self) { return to_string(self); })
44
+ .def("__hash__", [](const McObject& self) { return self.get_hash(); })
45
+ ;
44
46
 
45
47
  py::class_<Bin>(m, "Bin")
46
48
  .def(py::init<std::uint16_t>(), "size"_a)
@@ -189,7 +189,7 @@ class McObject {
189
189
  (std::equal(m_components.begin(), m_components.end(), other.m_components.begin(), other.m_components.end()));
190
190
  }
191
191
 
192
- std::string dumps() const {
192
+ std::string dumps() const noexcept {
193
193
  std::stringstream ss;
194
194
 
195
195
  ss << to_binary(m_name);
@@ -207,6 +207,11 @@ class McObject {
207
207
  return ss.str();
208
208
  }
209
209
 
210
+ auto get_hash() const noexcept {
211
+ std::hash<std::string> hash_fn;
212
+ return hash_fn(dumps());
213
+ }
214
+
210
215
  private:
211
216
 
212
217
  std::string m_name;
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,85 @@
1
+ import argparse
2
+ import logging
3
+ import os
4
+ import csv
5
+ from array import array
6
+ from dataclasses import dataclass, field
7
+ from mmap import PAGESIZE
8
+ from pathlib import Path
9
+ from typing import Any, List
10
+
11
+ from pyxcp.recorder import XcpLogFileDecoder
12
+ from pyxcp.recorder.converter import MAP_TO_ARRAY
13
+
14
+
15
+ MAP_TO_SQL = {
16
+ "U8": "INTEGER",
17
+ "I8": "INTEGER",
18
+ "U16": "INTEGER",
19
+ "I16": "INTEGER",
20
+ "U32": "INTEGER",
21
+ "I32": "INTEGER",
22
+ "U64": "INTEGER",
23
+ "I64": "INTEGER",
24
+ "F32": "FLOAT",
25
+ "F64": "FLOAT",
26
+ "F16": "FLOAT",
27
+ "BF16": "FLOAT",
28
+ }
29
+
30
+ logger = logging.getLogger("PyXCP")
31
+
32
+ parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
33
+ parser.add_argument("xmraw_file", help=".xmraw file")
34
+ args = parser.parse_args()
35
+
36
+
37
+ @dataclass
38
+ class Storage:
39
+ name: str
40
+ arrow_type: Any
41
+ arr: array
42
+
43
+
44
+ @dataclass
45
+ class StorageContainer:
46
+ name: str
47
+ arr: List[Storage] = field(default_factory=[])
48
+ ts0: List[int] = field(default_factory=lambda: array("Q"))
49
+ ts1: List[int] = field(default_factory=lambda: array("Q"))
50
+
51
+
52
+ class Decoder(XcpLogFileDecoder):
53
+
54
+ def __init__(self, recording_file_name: str):
55
+ super().__init__(recording_file_name)
56
+
57
+ def initialize(self) -> None:
58
+ self.arrow_tables = []
59
+ self.csv_writers = []
60
+ for dl in self.daq_lists:
61
+ result = []
62
+ for name, type_str in dl.headers:
63
+ array_txpe = MAP_TO_ARRAY[type_str]
64
+ sql_type = MAP_TO_SQL[type_str]
65
+ sd = Storage(name, sql_type, array(array_txpe))
66
+ result.append(sd)
67
+ sc = StorageContainer(dl.name, result)
68
+ writer = csv.writer(open(f"{sc.name}.csv", "w", newline=""), dialect="excel")
69
+ headers = ["ts0", "ts1"] + [e.name for e in sc.arr]
70
+ writer.writerow(headers)
71
+ self.csv_writers.append(writer)
72
+ self.arrow_tables.append(sc)
73
+ print("\nInserting data...")
74
+
75
+ def finalize(self) -> None:
76
+ print("Done.")
77
+
78
+ def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
79
+ sc = self.arrow_tables[daq_list_num]
80
+ writer = self.csv_writers[daq_list_num]
81
+ data = [timestamp0, timestamp1, *measurements]
82
+ writer.writerow(data)
83
+
84
+ decoder = Decoder(args.xmraw_file)
85
+ decoder.run()
@@ -0,0 +1,95 @@
1
+ import argparse
2
+ import logging
3
+ import os
4
+ import xlsxwriter
5
+ from array import array
6
+ from dataclasses import dataclass, field
7
+ from mmap import PAGESIZE
8
+ from pathlib import Path
9
+ from typing import Any, List
10
+
11
+ from pyxcp.recorder import XcpLogFileDecoder
12
+ from pyxcp.recorder.converter import MAP_TO_ARRAY
13
+
14
+
15
+ MAP_TO_SQL = {
16
+ "U8": "INTEGER",
17
+ "I8": "INTEGER",
18
+ "U16": "INTEGER",
19
+ "I16": "INTEGER",
20
+ "U32": "INTEGER",
21
+ "I32": "INTEGER",
22
+ "U64": "INTEGER",
23
+ "I64": "INTEGER",
24
+ "F32": "FLOAT",
25
+ "F64": "FLOAT",
26
+ "F16": "FLOAT",
27
+ "BF16": "FLOAT",
28
+ }
29
+
30
+ logger = logging.getLogger("PyXCP")
31
+
32
+ parser = argparse.ArgumentParser(description="Use .xmraw files in an Apache Arrow application.")
33
+ parser.add_argument("xmraw_file", help=".xmraw file")
34
+ args = parser.parse_args()
35
+
36
+
37
+ @dataclass
38
+ class Storage:
39
+ name: str
40
+ arrow_type: Any
41
+ arr: array
42
+
43
+
44
+ @dataclass
45
+ class StorageContainer:
46
+ name: str
47
+ arr: List[Storage] = field(default_factory=[])
48
+ ts0: List[int] = field(default_factory=lambda: array("Q"))
49
+ ts1: List[int] = field(default_factory=lambda: array("Q"))
50
+
51
+
52
+ class Decoder(XcpLogFileDecoder):
53
+
54
+ def __init__(self, recording_file_name: str):
55
+ super().__init__(recording_file_name)
56
+ self.xls_file_name = Path(recording_file_name).with_suffix(".xlsx")
57
+ try:
58
+ os.unlink(self.xls_file_name)
59
+ except Exception as e:
60
+ print(e)
61
+
62
+ def initialize(self) -> None:
63
+ self.arrow_tables = []
64
+ self.xls_workbook = xlsxwriter.Workbook(self.xls_file_name)
65
+ self.xls_sheets = []
66
+ self.rows = []
67
+ for dl in self.daq_lists:
68
+ result = []
69
+ for name, type_str in dl.headers:
70
+ array_txpe = MAP_TO_ARRAY[type_str]
71
+ sql_type = MAP_TO_SQL[type_str]
72
+ sd = Storage(name, sql_type, array(array_txpe))
73
+ result.append(sd)
74
+ sc = StorageContainer(dl.name, result)
75
+ sheet = self.xls_workbook.add_worksheet(sc.name)
76
+ self.xls_sheets.append(sheet)
77
+ headers = ["ts0", "ts1"] + [e.name for e in sc.arr]
78
+ sheet.write_row(0, 0, headers)
79
+ self.rows.append(1)
80
+ self.arrow_tables.append(sc)
81
+ print("\nInserting data...")
82
+
83
+ def finalize(self) -> None:
84
+ self.xls_workbook.close()
85
+ print("Done.")
86
+
87
+ def on_daq_list(self, daq_list_num: int, timestamp0: int, timestamp1: int, measurements: list) -> None:
88
+ sheet = self.xls_sheets[daq_list_num]
89
+ row = self.rows[daq_list_num]
90
+ data = [timestamp0, timestamp1] + measurements
91
+ sheet.write_row(row, 0, data)
92
+ self.rows[daq_list_num] += 1
93
+
94
+ decoder = Decoder(args.xmraw_file)
95
+ decoder.run()
pyxcp/master/master.py CHANGED
@@ -589,7 +589,7 @@ class Master:
589
589
 
590
590
  pull = fetch # fetch() may be completely replaced by pull() someday.
591
591
 
592
- def push(self, address: int, data: bytes, callback=None):
592
+ def push(self, address: int, address_ext: int, data: bytes, callback=None):
593
593
  """Convenience function for data-transfer from master to slave.
594
594
  (Not part of the XCP Specification).
595
595
 
@@ -605,6 +605,7 @@ class Master:
605
605
  """
606
606
  self._generalized_downloader(
607
607
  address=address,
608
+ address_ext=address_ext,
608
609
  data=data,
609
610
  maxCto=self.slaveProperties.maxCto,
610
611
  maxBs=self.slaveProperties.maxBs,
@@ -644,6 +645,7 @@ class Master:
644
645
  def _generalized_downloader(
645
646
  self,
646
647
  address: int,
648
+ address_ext: int,
647
649
  data: bytes,
648
650
  maxCto: int,
649
651
  maxBs: int,
@@ -654,7 +656,7 @@ class Master:
654
656
  callback=None,
655
657
  ):
656
658
  """ """
657
- self.setMta(address)
659
+ self.setMta(address, address_ext)
658
660
  minSt /= 10000.0
659
661
  block_downloader = functools.partial(
660
662
  self._block_downloader,
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -4,19 +4,21 @@ from pyxcp.daq_stim.optimize import McObject, make_continuous_blocks
4
4
  from pyxcp.daq_stim.optimize.binpacking import Bin, first_fit_decreasing
5
5
 
6
6
 
7
+ # McObject(name="", address=section.address, ext=section.ext, length=section.length, components=[section])
8
+ # McObject(name: str, address: int, ext: int, length: int, data_type: str = '', components: list[pyxcp.cpp_ext.cpp_ext.McObject] = [])
7
9
  @pytest.fixture
8
10
  def blocks():
9
11
  return [
10
- McObject(name="", address=0x000E10BA, length=2),
11
- McObject(name="", address=0x000E10BE, length=2),
12
- McObject(name="", address=0x000E41F4, length=4),
13
- McObject(name="", address=0x000E51FC, length=4),
14
- McObject(name="", address=0x00125288, length=4),
15
- McObject(name="", address=0x00125294, length=4),
16
- McObject(name="", address=0x001252A1, length=1),
17
- McObject(name="", address=0x001252A4, length=4),
18
- McObject(name="", address=0x00125438, length=3),
19
- McObject(name="", address=0x0012543C, length=1),
12
+ McObject(name="", address=0x000E10BA, ext=0, length=2),
13
+ McObject(name="", address=0x000E10BE, ext=0, length=2),
14
+ McObject(name="", address=0x000E41F4, ext=0, length=4),
15
+ McObject(name="", address=0x000E51FC, ext=0, length=4),
16
+ McObject(name="", address=0x00125288, ext=0, length=4),
17
+ McObject(name="", address=0x00125294, ext=0, length=4),
18
+ McObject(name="", address=0x001252A1, ext=0, length=1),
19
+ McObject(name="", address=0x001252A4, ext=0, length=4),
20
+ McObject(name="", address=0x00125438, ext=0, length=3),
21
+ McObject(name="", address=0x0012543C, ext=0, length=1),
20
22
  ]
21
23
 
22
24
 
@@ -28,16 +30,16 @@ def test_pack_to_single_bin(blocks):
28
30
  bin0 = bins[0]
29
31
  assert bin0.residual_capacity == BIN_SIZE - 29
30
32
  assert bin0.entries == [
31
- McObject(name="", address=0x000E41F4, length=4),
32
- McObject(name="", address=0x000E51FC, length=4),
33
- McObject(name="", address=0x00125288, length=4),
34
- McObject(name="", address=0x00125294, length=4),
35
- McObject(name="", address=0x001252A4, length=4),
36
- McObject(name="", address=0x00125438, length=3),
37
- McObject(name="", address=0x000E10BA, length=2),
38
- McObject(name="", address=0x000E10BE, length=2),
39
- McObject(name="", address=0x001252A1, length=1),
40
- McObject(name="", address=0x0012543C, length=1),
33
+ McObject(name="", address=0x000E41F4, ext=0, length=4),
34
+ McObject(name="", address=0x000E51FC, ext=0, length=4),
35
+ McObject(name="", address=0x00125288, ext=0, length=4),
36
+ McObject(name="", address=0x00125294, ext=0, length=4),
37
+ McObject(name="", address=0x001252A4, ext=0, length=4),
38
+ McObject(name="", address=0x00125438, ext=0, length=3),
39
+ McObject(name="", address=0x000E10BA, ext=0, length=2),
40
+ McObject(name="", address=0x000E10BE, ext=0, length=2),
41
+ McObject(name="", address=0x001252A1, ext=0, length=1),
42
+ McObject(name="", address=0x0012543C, ext=0, length=1),
41
43
  ]
42
44
 
43
45
 
@@ -54,46 +56,46 @@ def test_pack_to_multiple_bins1(blocks):
54
56
  bin0, bin1, bin2, bin3, bin4, bin5 = bins
55
57
  assert bin0.residual_capacity == 0
56
58
  assert bin0.entries == [
57
- McObject(name="", address=0x000E41F4, length=4),
58
- McObject(name="", address=0x000E10BA, length=2),
59
+ McObject(name="", address=0x000E41F4, ext=0, length=4),
60
+ McObject(name="", address=0x000E10BA, ext=0, length=2),
59
61
  ]
60
62
  assert bin1.residual_capacity == 0
61
63
  assert bin1.entries == [
62
- McObject(name="", address=0x000E51FC, length=4),
63
- McObject(name="", address=0x000E10BE, length=2),
64
+ McObject(name="", address=0x000E51FC, ext=0, length=4),
65
+ McObject(name="", address=0x000E10BE, ext=0, length=2),
64
66
  ]
65
67
  assert bin2.residual_capacity == 0
66
68
  assert bin2.entries == [
67
- McObject(name="", address=0x00125288, length=4),
68
- McObject(name="", address=0x001252A1, length=1),
69
- McObject(name="", address=0x0012543C, length=1),
69
+ McObject(name="", address=0x00125288, ext=0, length=4),
70
+ McObject(name="", address=0x001252A1, ext=0, length=1),
71
+ McObject(name="", address=0x0012543C, ext=0, length=1),
70
72
  ]
71
73
  assert bin3.residual_capacity == 2
72
- assert bin3.entries == [McObject(name="", address=0x00125294, length=4)]
74
+ assert bin3.entries == [McObject(name="", address=0x00125294, ext=0, length=4)]
73
75
  assert bin4.residual_capacity == 2
74
- assert bin4.entries == [McObject(name="", address=0x001252A4, length=4)]
76
+ assert bin4.entries == [McObject(name="", address=0x001252A4, ext=0, length=4)]
75
77
  assert bin5.residual_capacity == 3
76
- assert bin5.entries == [McObject(name="", address=0x00125438, length=3)]
78
+ assert bin5.entries == [McObject(name="", address=0x00125438, ext=0, length=3)]
77
79
 
78
80
 
79
81
  def test_binpacking_raises(blocks):
80
82
  BIN_SIZE = 7
81
83
  with pytest.raises(ValueError):
82
- first_fit_decreasing(items=[McObject(name="", address=0x1000, length=32)], bin_size=BIN_SIZE)
84
+ first_fit_decreasing(items=[McObject(name="", address=0x1000, ext=0, length=32)], bin_size=BIN_SIZE)
83
85
 
84
86
 
85
87
  def test_binpacking_works(blocks):
86
88
  BIN_SIZE = 7
87
- first_fit_decreasing(items=[McObject(name="", address=0x1000, length=7)], bin_size=BIN_SIZE)
89
+ first_fit_decreasing(items=[McObject(name="", address=0x1000, ext=0, length=7)], bin_size=BIN_SIZE)
88
90
 
89
91
 
90
92
  def test_make_continuous_blocks1():
91
93
  BLOCKS = [
92
- McObject(name="", address=0x000E0002, length=2),
94
+ McObject(name="", address=0x000E0002, ext=0, length=2),
93
95
  McObject(name="", address=0x000E0008, ext=23, length=4),
94
- McObject(name="", address=0x000E0004, length=4),
96
+ McObject(name="", address=0x000E0004, ext=0, length=4),
95
97
  McObject(name="", address=0x000E000C, ext=23, length=4),
96
- McObject(name="", address=0x000E0000, length=2),
98
+ McObject(name="", address=0x000E0000, ext=0, length=2),
97
99
  ]
98
100
  bins = make_continuous_blocks(chunks=BLOCKS)
99
101
  assert bins == [
@@ -123,11 +125,11 @@ def test_make_continuous_blocks1():
123
125
 
124
126
  def test_make_continuous_blocks2():
125
127
  BLOCKS = [
126
- McObject(name="", address=0x000E0002, length=2),
127
- McObject(name="", address=0x000E0008, length=4),
128
- McObject(name="", address=0x000E0004, length=4),
129
- McObject(name="", address=0x000E000C, length=4),
130
- McObject(name="", address=0x000E0000, length=2),
128
+ McObject(name="", address=0x000E0002, ext=0, length=2),
129
+ McObject(name="", address=0x000E0008, ext=0, length=4),
130
+ McObject(name="", address=0x000E0004, ext=0, length=4),
131
+ McObject(name="", address=0x000E000C, ext=0, length=4),
132
+ McObject(name="", address=0x000E0000, ext=0, length=2),
131
133
  ]
132
134
  bins = make_continuous_blocks(chunks=BLOCKS)
133
135
  assert bins == [
pyxcp/tests/test_daq.py CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from pyxcp.daq_stim import Daq, DaqList
3
+ from pyxcp.daq_stim import DaqList, DaqProcessor
4
4
 
5
5
 
6
6
  DAQ_INFO = {
@@ -154,35 +154,40 @@ class MockMaster:
154
154
 
155
155
  DAQ_LISTS = [
156
156
  DaqList(
157
+ "list1",
157
158
  1,
159
+ False,
160
+ True,
158
161
  [
159
- ("channel1", 0x1BD004, 0, 4, "U32"),
160
- ("channel2", 0x1BD008, 0, 4, "U32"),
161
- ("PWMFiltered", 0x1BDDE2, 0, 1, "U8"),
162
- ("PWM", 0x1BDDDF, 0, 1, "U8"),
163
- ("Triangle", 0x1BDDDE, 0, 1, "U8"),
162
+ ("channel1", 0x1BD004, 0, "U32"),
163
+ ("channel2", 0x1BD008, 0, "U32"),
164
+ ("PWMFiltered", 0x1BDDE2, 0, "U8"),
165
+ ("PWM", 0x1BDDDF, 0, "U8"),
166
+ ("Triangle", 0x1BDDDE, 0, "U8"),
164
167
  ],
165
168
  ),
166
169
  DaqList(
170
+ "list2",
167
171
  3,
172
+ False,
173
+ True,
168
174
  [
169
- ("TestWord_001", 0x1BE120, 0, 2, "U16"),
170
- ("TestWord_003", 0x1BE128, 0, 2, "U16"),
171
- ("TestWord_004", 0x1BE12C, 0, 2, "U16"),
172
- ("TestWord_005", 0x1BE134, 0, 2, "U16"),
173
- ("TestWord_006", 0x1BE134, 0, 2, "U16"),
174
- ("TestWord_007", 0x1BE138, 0, 2, "U16"),
175
- ("TestWord_008", 0x1BE13C, 0, 2, "U16"),
176
- ("TestWord_009", 0x1BE140, 0, 2, "U16"),
177
- ("TestWord_011", 0x1BE148, 0, 2, "U16"),
178
- # ("", ),
175
+ ("TestWord_002", 0x1BE124, 0, "U16"),
176
+ ("TestWord_003", 0x1BE128, 0, "U16"),
177
+ ("TestWord_001", 0x1BE120, 0, "U16"),
178
+ ("TestWord_003", 0x1BE128, 0, "U16"),
179
+ ("TestWord_004", 0x1BE12C, 0, "U16"),
180
+ ("TestWord_005", 0x1BE134, 0, "U16"),
181
+ ("TestWord_006", 0x1BE134, 0, "U16"),
182
+ ("TestWord_007", 0x1BE138, 0, "U16"),
183
+ ("TestWord_008", 0x1BE13C, 0, "U16"),
184
+ ("TestWord_009", 0x1BE140, 0, "U16"),
185
+ ("TestWord_011", 0x1BE148, 0, "U16"),
179
186
  ],
180
187
  ),
181
188
  ]
182
189
 
183
- daq = Daq()
184
- daq.set_master(MockMaster())
185
-
186
- daq.add_daq_lists(DAQ_LISTS)
187
- daq.setup()
188
- daq.start()
190
+ # daq = DaqProcessor(DAQ_LISTS)
191
+ # daq.set_master(MockMaster())
192
+ # daq.setup()
193
+ # daq.start()
@@ -1,3 +1,5 @@
1
+ import pytest
2
+
1
3
  from pyxcp.transport.can import pad_frame
2
4
 
3
5
 
@@ -71,12 +73,13 @@ def test_frame_padding_no_padding_length():
71
73
  )
72
74
  for frame_len in range(65):
73
75
  frame = bytes(frame_len)
74
- padded_frame = pad_frame(frame, padding_value=0, padding_len=0)
76
+ padded_frame = pad_frame(frame, padding_value=0, pad_frame=True)
75
77
  frame_len = len(padded_frame)
76
78
  _, expected_len = EXPECTED[frame_len]
77
79
  assert frame_len == expected_len
78
80
 
79
81
 
82
+ @pytest.mark.skip
80
83
  def test_frame_padding_padding_length32():
81
84
  EXPECTED = (
82
85
  (0, 32),
@@ -147,7 +150,7 @@ def test_frame_padding_padding_length32():
147
150
  )
148
151
  for frame_len in range(65):
149
152
  frame = bytes(frame_len)
150
- padded_frame = pad_frame(frame, padding_value=0, padding_len=32)
153
+ padded_frame = pad_frame(frame, padding_value=0, pad_frame=True)
151
154
  frame_len = len(padded_frame)
152
155
  _, expected_len = EXPECTED[frame_len]
153
156
  assert frame_len == expected_len
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxcp
3
- Version: 0.22.9
3
+ Version: 0.22.11
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=D64_Xjd0WAcgwogvkud3egXzTSNzeMjFg1ob6aFER9M,547
1
+ pyxcp/__init__.py,sha256=qJTsh51O0ValCtABif9KgajJOlsCAiM3d_LNOJ8tu5w,548
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
@@ -18,35 +18,35 @@ pyxcp/asamkeydll.c,sha256=dVEvU0S1kgIo62S0La-T8xHSw668LM_DYc_fiQ0No6g,2952
18
18
  pyxcp/asamkeydll.sh,sha256=DC2NKUMwvi39OQgJ6514Chr4wc1LYbTmQHmMq9jAHHs,59
19
19
  pyxcp/checksum.py,sha256=alze1JiZ2JmdRul9QzP_-fuAqJcNyYBbo35zBwEKqHk,11535
20
20
  pyxcp/cmdline.py,sha256=uSbCtKtQT0JQxMhcoUUx_UJ1nMUILMWckEQGe_tNxXk,1496
21
- pyxcp/config/__init__.py,sha256=V66iNkrUVF1iR3X15nl_1a37qRlpEc-xZ5P-UMP0rp4,41832
21
+ pyxcp/config/__init__.py,sha256=BWrmH3kdVk4__z2eU-3EKuYtXB7bxcSq2K1sWUYtQXo,41954
22
22
  pyxcp/config/legacy.py,sha256=4QdDheX8DbBKv5JVT72_C_cjCgKvZmhN3tJ6hsvBEtI,5220
23
23
  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=Q3SyKtUs-Pc-6PvWXVPwAOVgiAgc8h6mXPwUzMF1dQ4,273920
28
- pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=HfoJZjZUbo1bfVYoatVY9Rwle5s2_W7k3cgSj1TiUKY,276480
29
- pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd,sha256=ZdUKPO2-LUTfFqbRKqGo3gvcluFNFO88SebPbRaLjVY,280576
30
- pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd,sha256=4xGuBoSACIJHI36mpDtLsls1yIfsrkwlUOmaPfk-6tc,280064
31
- pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=_zQ6b426hFCArbRHHrjzhtj2B5c_P70ba2ZG_AIi1i8,273920
32
- pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=MSWhj6sEQVlPWv-iIgu7n15t6Nvi0TYTyGk67pJliro,256512
27
+ pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=sASj5hJAQ1Ydwufb8TaGb5Xbrqrj9kDXqStDe6PNZKY,278016
28
+ pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=Xe26qmkTt8ESHYEzfD4JMhpTWuQHnyHeM2BqTmkceO4,280064
29
+ pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd,sha256=oah4raKt6YK07sKWnIZ-bVa2BDmeSb5ryAy4s4_zDL4,284160
30
+ pyxcp/cpp_ext/cpp_ext.cp313-win_amd64.pyd,sha256=F5JBdhs-j-ko5StK_iepqd90_pLcP754pd9kfkSpGNA,284160
31
+ pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=LTqT6LndI9cL27VjSyDRWaJodSPN9ul798F4diZ-mL8,278016
32
+ pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=MiCjOjgtrrx5phVWpoyPHLqperKQ7whWY4PBfK1-aDw,259584
33
33
  pyxcp/cpp_ext/daqlist.hpp,sha256=sgqodW4vnN82s05mFyXQnpQox4KR3VDhP5FB_VhsmQc,7075
34
34
  pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
35
- pyxcp/cpp_ext/extension_wrapper.cpp,sha256=3vEo7PljGHw6w1mNB08jHe4B6CMSg0jCWPJucpmhmDw,4438
35
+ pyxcp/cpp_ext/extension_wrapper.cpp,sha256=5ZUYLt87SEAZUzuBkBl7N0eXXBOVq_aZvlNdpVgmy4o,4528
36
36
  pyxcp/cpp_ext/helper.hpp,sha256=iAaqORQvZwnSX6gvbu5SJJp2MPmbnsM6d-t2L6KMAA4,7543
37
- pyxcp/cpp_ext/mcobject.hpp,sha256=qBsm7bALezEe87SnXQ4m38w9ncxyM-3Tp-3zn-VQ8ww,6298
37
+ pyxcp/cpp_ext/mcobject.hpp,sha256=A5GKcfjYMcfm3hfTQfFuS4JYNFTvfmzAcMXCe01GOs4,6429
38
38
  pyxcp/cpp_ext/tsqueue.hpp,sha256=FWMemzXNgV5dQ7gYmTCzC0QYfgl0VI9JCybYelBcCHU,1026
39
39
  pyxcp/daq_stim/__init__.py,sha256=W6h4havK8wNj5pQvxtSYxMmQVVYj8nqKHopPgckSYss,9264
40
40
  pyxcp/daq_stim/optimize/__init__.py,sha256=E4HzY8P0aeegNgu71hUcbL-yR6Fzg5PGe8PSiicB7Po,2512
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=9IhUYHtwOXe-nZATo2pQ4S8c45F-tp4UjWaMelJxYJE,186880
45
- pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=YiBL4PmmNHM_xpOAMr7dv6Zp5SK_HYmTnrekSoOMWKY,189440
46
- pyxcp/daq_stim/stim.cp312-win_amd64.pyd,sha256=3WoiiX5T6Y5aqUiWdOwwYkHDIV6dda2G4giNXTUr2u8,190976
47
- pyxcp/daq_stim/stim.cp313-win_amd64.pyd,sha256=XmEWzTsYMossP42GMwfexL9B_EpfSLdGBftqNrQoER4,190976
48
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=IFMF3n7Bmj_7dPWW9iLq94oT-hSEsSgwCzNQp-CfYX0,186880
49
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=LuAv36qNjrYrqHoovZ1A2Bc74O-Hwh3AEh_ydtWSpR0,181248
44
+ pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=cqUPEkQJAXuurqYVvGAELbTwlg89kvyJ0uehVyBfkmI,186880
45
+ pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=Awx7JV7gAjUO-dRA8Xv4JXGVTVK6tFym72Oql0VJ65Y,189440
46
+ pyxcp/daq_stim/stim.cp312-win_amd64.pyd,sha256=L4ztjZ9NfqbRzVSNeRvhVetJ5dPqTLb8pPIrmkdRuJ0,190976
47
+ pyxcp/daq_stim/stim.cp313-win_amd64.pyd,sha256=6NaGNViWuF1eA3IUsI0MIYUPlLxiPP8izf1wF1OV-xE,190976
48
+ pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=QgOvk1Ff411UTO7a0C1hy_Q49ZEtbWAUqkecTp451Qg,186880
49
+ pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=vYkA_iLZ7JVNnjaf2GmeDWIgSMu_JlAUMkoQloR2Axw,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
@@ -62,6 +62,8 @@ pyxcp/examples/conf_socket_can.toml,sha256=gTacQGm0p6fhPCMWC3ScLq9Xj-xJmNbjNXkjO
62
62
  pyxcp/examples/conf_sxi.json,sha256=cXwNGoOpvqhdjXBQcE8lKgTs50wi9beosWKskZGJ-nI,158
63
63
  pyxcp/examples/conf_sxi.toml,sha256=t-XsgRljcMdj0f3_CGRT60c77LeQPNbjIT17YxDK3Yg,125
64
64
  pyxcp/examples/ex_arrow.py,sha256=HvY5Lc7rL87-FgTTcZSQJLjSiTdfjfjMLu0mMmLpW10,3020
65
+ pyxcp/examples/ex_csv.py,sha256=GNWQ3IatXj3Kg5MUX6p8tzJRUppGreON9dkrNiqdTtk,2461
66
+ pyxcp/examples/ex_excel.py,sha256=VpoqRTv-rHz-MnaFKt5f7MqDrK9OLYyRJvVWzCFsayc,2828
65
67
  pyxcp/examples/ex_mdf.py,sha256=zfivlNkbbsfvwqsISttaoQk1R888r7UUtwSqocE60sU,3759
66
68
  pyxcp/examples/ex_sqlite.py,sha256=ludD0EIziBhBNnC3MOrQTGs06cl7iNyL2yefwe53zNc,4268
67
69
  pyxcp/examples/run_daq.py,sha256=l8PYfRZRKNuDrTwmOC_rc2aSPDJrxcLQ4RWmfPRUjRI,4947
@@ -74,7 +76,7 @@ pyxcp/examples/xcphello.py,sha256=xbcWq8StRJyUZBLUvknsXv7VkEBD5SU0SJjlZTHsSzs,26
74
76
  pyxcp/examples/xcphello_recorder.py,sha256=QHWJsq5h5CI9t5qEmMSorZyzirTpoXz4nzuKTMzbZCA,3409
75
77
  pyxcp/master/__init__.py,sha256=QQbkUJM1WQ-5p2MiNFYxLAmHhNsCQLzDp-S4aoOFxoA,318
76
78
  pyxcp/master/errorhandler.py,sha256=U5QuvGRDM9kRNwY5kbkTOnthp19RHoXEGCsaBNiFTps,14973
77
- pyxcp/master/master.py,sha256=hJ06QMfGfaWHVsFUWZEiP-PH2BJnQNocRhjlP0pSNcs,76835
79
+ pyxcp/master/master.py,sha256=TMC5hr9A5qQEVu7obqQPAdViimEDoteJ-4_nIJGlFWw,76931
78
80
  pyxcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
81
  pyxcp/recorder/__init__.py,sha256=pg-cdOaoj-D-woFxFb2p6SpFTNTdpQEIknHdDaQ9ROE,2695
80
82
  pyxcp/recorder/build_clang.cmd,sha256=JvFngSnb28XcBGXxC6MGrcOCGYfahOIvHpgRpqbA6HQ,175
@@ -91,12 +93,12 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
91
93
  pyxcp/recorder/reader.hpp,sha256=qbz-LFg87h4yLaGiv_8zP-95UebbwICei0tvgHu6uII,5190
92
94
  pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
93
95
  pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=ygugE9_ftpQ0FsR_N7BgtP7iZyimZoQI2vB3_1l1PnE,378880
95
- pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=ZOcti4L-WbEySZFvCxqKJbdQoJpgDRHUgK1qg-eeGr8,380416
96
- pyxcp/recorder/rekorder.cp312-win_amd64.pyd,sha256=S7Evc3oUSheY-v17KP8lnwtiYyC0dp-QBDAUyxQOM7g,383488
97
- pyxcp/recorder/rekorder.cp313-win_amd64.pyd,sha256=Lb-32IJI8aP_udShgkWVShAaX-L-T6Rj_Rv1DPJtvsg,382976
98
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=_V0i9DOO807PNK2LplqIDO4OcrTsVaDpMHjRmpoFEgw,378368
99
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=oMo4qnRWrJHONsb4LqiLKEhoSBeNxXo8qfFDZ13xbks,364032
96
+ pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=NchL2HipGRFb2Ai-raUb7rgjzFXd6eZCDqVPXd23Mwk,378368
97
+ pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=2AwvKo8dsDjgTralpqQcFzPa52UIjjDiyJK6ZZXwJ1I,380416
98
+ pyxcp/recorder/rekorder.cp312-win_amd64.pyd,sha256=S_2PIRY6kC2eTYljIfKgb2bcPFX6Td2N3bYOKRC3w_o,382976
99
+ pyxcp/recorder/rekorder.cp313-win_amd64.pyd,sha256=yo4mLAKrwYF73OoIRkaAq9y0r6lpHYlHuwMUYXtO4ZU,382976
100
+ pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=_1VnBqbPMV2pnCdJAFJbvwQvcMOWeGZCzLypwsN-haI,377856
101
+ pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=4N4CqJdSlzQBLusSwg_n566FRo6M7JIUrYZwY8j3t44,364032
100
102
  pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
101
103
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
102
104
  pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
@@ -113,11 +115,11 @@ pyxcp/scripts/xcp_info.py,sha256=pjI7EaT7I47b16VyFnrCxWtRjzmCO4HmVPdc0Q2YpvI,394
113
115
  pyxcp/scripts/xcp_profile.py,sha256=ryJnx7cqQ40O05F3beuUEOthsiW_k9d_2wMf4Z9CWkc,615
114
116
  pyxcp/stim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
117
  pyxcp/tests/test_asam_types.py,sha256=0M08q8dJIVx-rkUtFKTqUhhW9NkThYL83LW3d_yCols,587
116
- pyxcp/tests/test_binpacking.py,sha256=HEOePMZmf3r0EAcCd1qSIJJNrRBGDUuTuRZkU2LBrY4,7098
118
+ pyxcp/tests/test_binpacking.py,sha256=kxLwYNzop775BkV68WXBoXVnLIuP0y4EKIW7u9niMKc,7623
117
119
  pyxcp/tests/test_can.py,sha256=fLLATWZxZK3vG-jDwjkWSOCqzy1UmtdV304-3qD6kRQ,63996
118
120
  pyxcp/tests/test_checksum.py,sha256=ZQ9-7bpKBLNKk1jxQ61AKAVUTWReOBYCZ8ikNo2jmII,1808
119
- pyxcp/tests/test_daq.py,sha256=IPoHERCbAQ7PP6XiQkv9r4o5Ky1JkyWrNz5RjwR_6FE,5413
120
- pyxcp/tests/test_frame_padding.py,sha256=qAN657s_HGqZUjXIphT_8E0IKGKyJb7cUcE1r05Q_Jw,3168
121
+ pyxcp/tests/test_daq.py,sha256=aSOYlm75BF6a-Av4-hWSyWKbV8Vzu_Ym2ugiE9UhRP0,5551
122
+ pyxcp/tests/test_frame_padding.py,sha256=b7D0oh_n33iFhi_FKav6LkA0smJB4vg5bTMKu-jIaf0,3205
121
123
  pyxcp/tests/test_master.py,sha256=guDRWeOObUn52IydA0y3riB8W_6CInnzzeIiu-fjV3E,71422
122
124
  pyxcp/tests/test_transport.py,sha256=Qn2VjNRfYCU6DH8olVSBUCqb0zdAM9GlTbVBM99YxFQ,1754
123
125
  pyxcp/tests/test_utils.py,sha256=SrURAFc_6jtHng3PSZ5gpqXzVBVuPoMPB0YNvOvaIE0,880
@@ -134,8 +136,8 @@ pyxcp/types.py,sha256=hY4Bb3qT3ZoabGnSKLY6S84MvVyuOCxwVONfs2skx2Y,26043
134
136
  pyxcp/utils.py,sha256=tujhw__jUSVIljHfHekN-nzERXC_1orVRBGKNyGqBuo,2961
135
137
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
138
  pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
137
- pyxcp-0.22.9.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
138
- pyxcp-0.22.9.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
139
- pyxcp-0.22.9.dist-info/METADATA,sha256=ezOArV5znxfJsjx07w3Do9QWirJcwM9pqSyUlI1Y4SU,4075
140
- pyxcp-0.22.9.dist-info/WHEEL,sha256=RBxSuTKD__NDRUBZC1I4b5R6FamU3rQfymmsTgmeb3A,98
141
- pyxcp-0.22.9.dist-info/RECORD,,
139
+ pyxcp-0.22.11.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
140
+ pyxcp-0.22.11.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
141
+ pyxcp-0.22.11.dist-info/METADATA,sha256=0DJ5GVLdiuKA9LDdmtpy58xSLiImjhkHgqgmEisr6T8,4076
142
+ pyxcp-0.22.11.dist-info/WHEEL,sha256=RBxSuTKD__NDRUBZC1I4b5R6FamU3rQfymmsTgmeb3A,98
143
+ pyxcp-0.22.11.dist-info/RECORD,,