pyxcp 0.22.9__cp310-cp310-win_amd64.whl → 0.22.11__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 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
@@ -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
@@ -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
@@ -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,29 +18,29 @@ 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.cp38-win_amd64.pyd,sha256=_zQ6b426hFCArbRHHrjzhtj2B5c_P70ba2ZG_AIi1i8,273920
29
- 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.cp38-win_amd64.pyd,sha256=LTqT6LndI9cL27VjSyDRWaJodSPN9ul798F4diZ-mL8,278016
29
+ pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=MiCjOjgtrrx5phVWpoyPHLqperKQ7whWY4PBfK1-aDw,259584
30
30
  pyxcp/cpp_ext/daqlist.hpp,sha256=sgqodW4vnN82s05mFyXQnpQox4KR3VDhP5FB_VhsmQc,7075
31
31
  pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
32
- pyxcp/cpp_ext/extension_wrapper.cpp,sha256=3vEo7PljGHw6w1mNB08jHe4B6CMSg0jCWPJucpmhmDw,4438
32
+ pyxcp/cpp_ext/extension_wrapper.cpp,sha256=5ZUYLt87SEAZUzuBkBl7N0eXXBOVq_aZvlNdpVgmy4o,4528
33
33
  pyxcp/cpp_ext/helper.hpp,sha256=iAaqORQvZwnSX6gvbu5SJJp2MPmbnsM6d-t2L6KMAA4,7543
34
- pyxcp/cpp_ext/mcobject.hpp,sha256=qBsm7bALezEe87SnXQ4m38w9ncxyM-3Tp-3zn-VQ8ww,6298
34
+ pyxcp/cpp_ext/mcobject.hpp,sha256=A5GKcfjYMcfm3hfTQfFuS4JYNFTvfmzAcMXCe01GOs4,6429
35
35
  pyxcp/cpp_ext/tsqueue.hpp,sha256=FWMemzXNgV5dQ7gYmTCzC0QYfgl0VI9JCybYelBcCHU,1026
36
36
  pyxcp/daq_stim/__init__.py,sha256=W6h4havK8wNj5pQvxtSYxMmQVVYj8nqKHopPgckSYss,9264
37
37
  pyxcp/daq_stim/optimize/__init__.py,sha256=E4HzY8P0aeegNgu71hUcbL-yR6Fzg5PGe8PSiicB7Po,2512
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=9IhUYHtwOXe-nZATo2pQ4S8c45F-tp4UjWaMelJxYJE,186880
42
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=IFMF3n7Bmj_7dPWW9iLq94oT-hSEsSgwCzNQp-CfYX0,186880
43
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=LuAv36qNjrYrqHoovZ1A2Bc74O-Hwh3AEh_ydtWSpR0,181248
41
+ pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=cqUPEkQJAXuurqYVvGAELbTwlg89kvyJ0uehVyBfkmI,186880
42
+ pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=QgOvk1Ff411UTO7a0C1hy_Q49ZEtbWAUqkecTp451Qg,186880
43
+ pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=vYkA_iLZ7JVNnjaf2GmeDWIgSMu_JlAUMkoQloR2Axw,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
@@ -56,6 +56,8 @@ pyxcp/examples/conf_socket_can.toml,sha256=gTacQGm0p6fhPCMWC3ScLq9Xj-xJmNbjNXkjO
56
56
  pyxcp/examples/conf_sxi.json,sha256=cXwNGoOpvqhdjXBQcE8lKgTs50wi9beosWKskZGJ-nI,158
57
57
  pyxcp/examples/conf_sxi.toml,sha256=t-XsgRljcMdj0f3_CGRT60c77LeQPNbjIT17YxDK3Yg,125
58
58
  pyxcp/examples/ex_arrow.py,sha256=HvY5Lc7rL87-FgTTcZSQJLjSiTdfjfjMLu0mMmLpW10,3020
59
+ pyxcp/examples/ex_csv.py,sha256=GNWQ3IatXj3Kg5MUX6p8tzJRUppGreON9dkrNiqdTtk,2461
60
+ pyxcp/examples/ex_excel.py,sha256=VpoqRTv-rHz-MnaFKt5f7MqDrK9OLYyRJvVWzCFsayc,2828
59
61
  pyxcp/examples/ex_mdf.py,sha256=zfivlNkbbsfvwqsISttaoQk1R888r7UUtwSqocE60sU,3759
60
62
  pyxcp/examples/ex_sqlite.py,sha256=ludD0EIziBhBNnC3MOrQTGs06cl7iNyL2yefwe53zNc,4268
61
63
  pyxcp/examples/run_daq.py,sha256=l8PYfRZRKNuDrTwmOC_rc2aSPDJrxcLQ4RWmfPRUjRI,4947
@@ -68,7 +70,7 @@ pyxcp/examples/xcphello.py,sha256=xbcWq8StRJyUZBLUvknsXv7VkEBD5SU0SJjlZTHsSzs,26
68
70
  pyxcp/examples/xcphello_recorder.py,sha256=QHWJsq5h5CI9t5qEmMSorZyzirTpoXz4nzuKTMzbZCA,3409
69
71
  pyxcp/master/__init__.py,sha256=QQbkUJM1WQ-5p2MiNFYxLAmHhNsCQLzDp-S4aoOFxoA,318
70
72
  pyxcp/master/errorhandler.py,sha256=U5QuvGRDM9kRNwY5kbkTOnthp19RHoXEGCsaBNiFTps,14973
71
- pyxcp/master/master.py,sha256=hJ06QMfGfaWHVsFUWZEiP-PH2BJnQNocRhjlP0pSNcs,76835
73
+ pyxcp/master/master.py,sha256=TMC5hr9A5qQEVu7obqQPAdViimEDoteJ-4_nIJGlFWw,76931
72
74
  pyxcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
75
  pyxcp/recorder/__init__.py,sha256=pg-cdOaoj-D-woFxFb2p6SpFTNTdpQEIknHdDaQ9ROE,2695
74
76
  pyxcp/recorder/build_clang.cmd,sha256=JvFngSnb28XcBGXxC6MGrcOCGYfahOIvHpgRpqbA6HQ,175
@@ -85,9 +87,9 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
85
87
  pyxcp/recorder/reader.hpp,sha256=qbz-LFg87h4yLaGiv_8zP-95UebbwICei0tvgHu6uII,5190
86
88
  pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
87
89
  pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=ygugE9_ftpQ0FsR_N7BgtP7iZyimZoQI2vB3_1l1PnE,378880
89
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=_V0i9DOO807PNK2LplqIDO4OcrTsVaDpMHjRmpoFEgw,378368
90
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=oMo4qnRWrJHONsb4LqiLKEhoSBeNxXo8qfFDZ13xbks,364032
90
+ pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=NchL2HipGRFb2Ai-raUb7rgjzFXd6eZCDqVPXd23Mwk,378368
91
+ pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=_1VnBqbPMV2pnCdJAFJbvwQvcMOWeGZCzLypwsN-haI,377856
92
+ pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=4N4CqJdSlzQBLusSwg_n566FRo6M7JIUrYZwY8j3t44,364032
91
93
  pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
92
94
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
93
95
  pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
@@ -104,11 +106,11 @@ pyxcp/scripts/xcp_info.py,sha256=pjI7EaT7I47b16VyFnrCxWtRjzmCO4HmVPdc0Q2YpvI,394
104
106
  pyxcp/scripts/xcp_profile.py,sha256=ryJnx7cqQ40O05F3beuUEOthsiW_k9d_2wMf4Z9CWkc,615
105
107
  pyxcp/stim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
108
  pyxcp/tests/test_asam_types.py,sha256=0M08q8dJIVx-rkUtFKTqUhhW9NkThYL83LW3d_yCols,587
107
- pyxcp/tests/test_binpacking.py,sha256=HEOePMZmf3r0EAcCd1qSIJJNrRBGDUuTuRZkU2LBrY4,7098
109
+ pyxcp/tests/test_binpacking.py,sha256=kxLwYNzop775BkV68WXBoXVnLIuP0y4EKIW7u9niMKc,7623
108
110
  pyxcp/tests/test_can.py,sha256=fLLATWZxZK3vG-jDwjkWSOCqzy1UmtdV304-3qD6kRQ,63996
109
111
  pyxcp/tests/test_checksum.py,sha256=ZQ9-7bpKBLNKk1jxQ61AKAVUTWReOBYCZ8ikNo2jmII,1808
110
- pyxcp/tests/test_daq.py,sha256=IPoHERCbAQ7PP6XiQkv9r4o5Ky1JkyWrNz5RjwR_6FE,5413
111
- pyxcp/tests/test_frame_padding.py,sha256=qAN657s_HGqZUjXIphT_8E0IKGKyJb7cUcE1r05Q_Jw,3168
112
+ pyxcp/tests/test_daq.py,sha256=aSOYlm75BF6a-Av4-hWSyWKbV8Vzu_Ym2ugiE9UhRP0,5551
113
+ pyxcp/tests/test_frame_padding.py,sha256=b7D0oh_n33iFhi_FKav6LkA0smJB4vg5bTMKu-jIaf0,3205
112
114
  pyxcp/tests/test_master.py,sha256=guDRWeOObUn52IydA0y3riB8W_6CInnzzeIiu-fjV3E,71422
113
115
  pyxcp/tests/test_transport.py,sha256=Qn2VjNRfYCU6DH8olVSBUCqb0zdAM9GlTbVBM99YxFQ,1754
114
116
  pyxcp/tests/test_utils.py,sha256=SrURAFc_6jtHng3PSZ5gpqXzVBVuPoMPB0YNvOvaIE0,880
@@ -125,8 +127,8 @@ pyxcp/types.py,sha256=hY4Bb3qT3ZoabGnSKLY6S84MvVyuOCxwVONfs2skx2Y,26043
125
127
  pyxcp/utils.py,sha256=tujhw__jUSVIljHfHekN-nzERXC_1orVRBGKNyGqBuo,2961
126
128
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
129
  pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
128
- pyxcp-0.22.9.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
129
- pyxcp-0.22.9.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
130
- pyxcp-0.22.9.dist-info/METADATA,sha256=ezOArV5znxfJsjx07w3Do9QWirJcwM9pqSyUlI1Y4SU,4075
131
- pyxcp-0.22.9.dist-info/WHEEL,sha256=Jr_qyVDoEAnAI5RcZqNdiGEGsXCke4YuTFjHKZdYyb4,98
132
- pyxcp-0.22.9.dist-info/RECORD,,
130
+ pyxcp-0.22.11.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
131
+ pyxcp-0.22.11.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
132
+ pyxcp-0.22.11.dist-info/METADATA,sha256=0DJ5GVLdiuKA9LDdmtpy58xSLiImjhkHgqgmEisr6T8,4076
133
+ pyxcp-0.22.11.dist-info/WHEEL,sha256=Jr_qyVDoEAnAI5RcZqNdiGEGsXCke4YuTFjHKZdYyb4,98
134
+ pyxcp-0.22.11.dist-info/RECORD,,