pyxcp 0.22.23__cp310-cp310-win_amd64.whl → 0.22.25__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.23"
20
+ __version__ = "0.22.25"
Binary file
Binary file
Binary file
pyxcp/cpp_ext/daqlist.hpp CHANGED
@@ -15,10 +15,9 @@ class DaqList {
15
15
 
16
16
  DaqList(
17
17
  std::string_view meas_name, std::uint16_t event_num, bool stim, bool enable_timestamps,
18
- const std::vector<daq_list_initialzer_t>& measurements
18
+ const std::vector<daq_list_initialzer_t>& measurements, std::uint8_t priority=0x00, std::uint8_t prescaler=0x01
19
19
  ) :
20
- m_name(meas_name), m_event_num(event_num), m_stim(stim), m_enable_timestamps(enable_timestamps) {
21
- // std::cout << "DAQ-List: " << meas_name << " " << event_num << " " << stim << " " << enable_timestamps << std::endl;
20
+ m_name(meas_name), m_event_num(event_num), m_priority(priority), m_prescaler(prescaler), m_stim(stim), m_enable_timestamps(enable_timestamps) {
22
21
  for (const auto& measurement : measurements) {
23
22
  auto const& [name, address, ext, dt_name] = measurement;
24
23
  m_measurements.emplace_back(McObject(name, address, static_cast<std::uint8_t>(ext), 0, dt_name));
@@ -37,6 +36,14 @@ class DaqList {
37
36
  return m_event_num;
38
37
  }
39
38
 
39
+ std::uint8_t get_priority() const {
40
+ return m_priority;
41
+ }
42
+
43
+ std::uint8_t get_prescaler() const {
44
+ return m_prescaler;
45
+ }
46
+
40
47
  void set_event_num(std::uint16_t event_num) {
41
48
  m_event_num = event_num;
42
49
  }
@@ -171,9 +178,6 @@ class DaqList {
171
178
  ss << "\"" << header << "\",";
172
179
  }
173
180
  ss << "\n]";
174
-
175
- // using flatten_odts_t = std::vector<std::vector<std::tuple<std::string, std::uint32_t, std::uint8_t, std::uint16_t,
176
- // std::int16_t>>>;
177
181
  ss << ")";
178
182
  return ss.str();
179
183
  }
@@ -185,6 +189,8 @@ class DaqList {
185
189
 
186
190
  std::string m_name;
187
191
  std::uint16_t m_event_num;
192
+ std::uint8_t m_priority;
193
+ std::uint8_t m_prescaler;
188
194
  bool m_stim;
189
195
  bool m_enable_timestamps;
190
196
  std::vector<McObject> m_measurements;
@@ -59,12 +59,15 @@ PYBIND11_MODULE(cpp_ext, m) {
59
59
 
60
60
  py::class_<DaqList>(m, "DaqList")
61
61
  .def(
62
- py::init<std::string_view, std::uint16_t, bool, bool, const std::vector<DaqList::daq_list_initialzer_t>&>(), "name"_a,
63
- "event_num"_a, "stim"_a, "enable_timestamps"_a, "measurements"_a
62
+ py::init<std::string_view, std::uint16_t, bool, bool, const std::vector<DaqList::daq_list_initialzer_t>&,
63
+ std::uint8_t, std::uint8_t>(), "name"_a, "event_num"_a, "stim"_a, "enable_timestamps"_a, "measurements"_a,
64
+ "priority"_a=0, "prescaler"_a=1
64
65
  )
65
66
  .def("__repr__", [](const DaqList& self) { return self.to_string(); })
66
67
  .def_property("name", &DaqList::get_name, nullptr)
67
68
  .def_property("event_num", &DaqList::get_event_num, &DaqList::set_event_num)
69
+ .def_property("priority", &DaqList::get_priority, nullptr)
70
+ .def_property("prescaler", &DaqList::get_prescaler, nullptr)
68
71
  .def_property("stim", &DaqList::get_stim, nullptr)
69
72
  .def_property("enable_timestamps", &DaqList::get_enable_timestamps, nullptr)
70
73
  .def_property("measurements", &DaqList::get_measurements, nullptr)
@@ -38,7 +38,7 @@ class DaqProcessor:
38
38
  def setup(self, start_datetime: Optional[CurrentDatetime] = None, write_multiple: bool = True):
39
39
  if not self.xcp_master.slaveProperties.supportsDaq:
40
40
  raise RuntimeError("DAQ functionality is not supported.")
41
- self.daq_info = self.xcp_master.getDaqInfo()
41
+ self.daq_info = self.xcp_master.getDaqInfo(include_event_lists=False)
42
42
  if start_datetime is None:
43
43
  start_datetime = CurrentDatetime(time_ns())
44
44
  self.start_datetime = start_datetime
@@ -134,7 +134,11 @@ class DaqProcessor:
134
134
  ## mode |= 0x20
135
135
  ###
136
136
  self.xcp_master.setDaqListMode(
137
- daqListNumber=i, mode=mode, eventChannelNumber=daq_list.event_num, prescaler=1, priority=0xFF
137
+ daq_list_number=i,
138
+ mode=mode,
139
+ event_channel_number=daq_list.event_num,
140
+ prescaler=daq_list.prescaler,
141
+ priority=daq_list.priority,
138
142
  )
139
143
  res = self.xcp_master.startStopDaqList(0x02, i)
140
144
  self._first_pids.append(res.firstPid)
Binary file
Binary file
Binary file
@@ -15,7 +15,9 @@ using namespace py::literals;
15
15
 
16
16
  PYBIND11_MODULE(stim, m) {
17
17
  py::class_<DaqEventInfo>(m, "DaqEventInfo")
18
- .def(py::init<const std::string&, std::int8_t, std::size_t, std::size_t, std::size_t, std::string_view, bool, bool, bool>()
18
+ .def(py::init<const std::string&, std::int8_t, std::size_t, std::size_t, std::size_t, std::string_view, bool, bool, bool>(),
19
+ "name"_a, "type_code"_a, "cycle"_a, "max_daq_lists"_a, "priority"_a, "consistency"_a, "daq_supported"_a,
20
+ "stim_supported"_a, "packed_supported"_a
19
21
  );
20
22
 
21
23
  py::class_<Stim>(m, "Stim")
pyxcp/examples/run_daq.py CHANGED
@@ -8,7 +8,7 @@ from pyxcp.daq_stim import DaqList, DaqRecorder, DaqToCsv # noqa: F401
8
8
 
9
9
  ap = ArgumentParser(description="DAQ test")
10
10
 
11
- XCP_LITE = True
11
+ XCP_LITE = False
12
12
 
13
13
  #
14
14
  # NOTE: UPDATE TO CORRECT ADDRESSES BEFORE RUNNING!!!
@@ -17,40 +17,44 @@ if XCP_LITE:
17
17
  # Vectorgrp XCPlite.
18
18
  DAQ_LISTS = [
19
19
  DaqList(
20
- "part_1",
21
- 0,
22
- False,
23
- False,
24
- [
20
+ name="part_1",
21
+ event_num=0,
22
+ stim=False,
23
+ enable_timestamps=False,
24
+ measurements=[
25
25
  ("byteCounter", 0x00023648, 0, "U8"),
26
26
  ("wordCounter", 0x0002364C, 0, "U16"),
27
27
  ("dwordCounter", 0x00023650, 0, "U32"),
28
28
  ("sbyteCounter", 0x00023649, 0, "I8"),
29
29
  ],
30
+ priority=0,
31
+ prescaler=1,
30
32
  ),
31
33
  DaqList(
32
- "part_2",
33
- 7,
34
- False,
35
- False,
36
- [
34
+ name="part_2",
35
+ event_num=7,
36
+ stim=False,
37
+ enable_timestamps=False,
38
+ measurements=[
37
39
  ("swordCounter", 0x00023654, 0, "I16"),
38
40
  ("sdwordCounter", 0x00023658, 0, "I32"),
39
41
  ("channel1", 0x00023630, 0, "F64"),
40
42
  ("channel2", 0x00023638, 0, "F64"),
41
43
  ("channel3", 0x00023640, 0, "F64"),
42
44
  ],
45
+ priority=0,
46
+ prescaler=1,
43
47
  ),
44
48
  ]
45
49
  else:
46
50
  # XCPsim from CANape.
47
51
  DAQ_LISTS = [
48
52
  DaqList(
49
- "pwm_stuff",
50
- 2,
51
- False,
52
- True,
53
- [
53
+ name="pwm_stuff",
54
+ event_num=2,
55
+ stim=False,
56
+ enable_timestamps=True,
57
+ measurements=[
54
58
  ("channel1", 0x1BD004, 0, "F32"),
55
59
  ("period", 0x001C0028, 0, "F32"),
56
60
  ("channel2", 0x1BD008, 0, "F32"),
@@ -58,13 +62,15 @@ else:
58
62
  ("PWM", 0x1BDDDF, 0, "U8"),
59
63
  ("Triangle", 0x1BDDDE, 0, "I8"),
60
64
  ],
65
+ priority=0,
66
+ prescaler=1,
61
67
  ),
62
68
  DaqList(
63
- "bytes",
64
- 1,
65
- False,
66
- True,
67
- [
69
+ name="bytes",
70
+ event_num=1,
71
+ stim=False,
72
+ enable_timestamps=True,
73
+ measurements=[
68
74
  ("TestByte_000", 0x1BE11C, 0, "U8"),
69
75
  ("TestByte_015", 0x1BE158, 0, "U8"),
70
76
  ("TestByte_016", 0x1BE15C, 0, "U8"),
@@ -97,13 +103,15 @@ else:
97
103
  ("TestByte_344", 0x1BE67C, 0, "U8"),
98
104
  ("TestByte_346", 0x1BE684, 0, "U8"),
99
105
  ],
106
+ priority=0,
107
+ prescaler=1,
100
108
  ),
101
109
  DaqList(
102
- "words",
103
- 3,
104
- False,
105
- True,
106
- [
110
+ name="words",
111
+ event_num=3,
112
+ stim=False,
113
+ enable_timestamps=True,
114
+ measurements=[
107
115
  ("TestWord_001", 0x1BE120, 0, "U16"),
108
116
  ("TestWord_003", 0x1BE128, 0, "U16"),
109
117
  ("TestWord_004", 0x1BE12C, 0, "U16"),
@@ -114,6 +122,8 @@ else:
114
122
  ("TestWord_009", 0x1BE140, 0, "U16"),
115
123
  ("TestWord_011", 0x1BE148, 0, "U16"),
116
124
  ],
125
+ priority=0,
126
+ prescaler=1,
117
127
  ),
118
128
  ]
119
129
 
pyxcp/master/master.py CHANGED
@@ -310,7 +310,7 @@ class Master:
310
310
  return result
311
311
 
312
312
  @wrapped
313
- def setRequest(self, mode: int, sessionConfigurationId: int):
313
+ def setRequest(self, mode: int, session_configuration_id: int):
314
314
  """Request to save to non-volatile memory.
315
315
 
316
316
  Parameters
@@ -326,8 +326,8 @@ class Master:
326
326
  return self.transport.request(
327
327
  types.Command.SET_REQUEST,
328
328
  mode,
329
- sessionConfigurationId >> 8,
330
- sessionConfigurationId & 0xFF,
329
+ session_configuration_id >> 8,
330
+ session_configuration_id & 0xFF,
331
331
  )
332
332
 
333
333
  @wrapped
@@ -394,7 +394,7 @@ class Master:
394
394
  return result
395
395
 
396
396
  @wrapped
397
- def setMta(self, address: int, addressExt: int = 0x00):
397
+ def setMta(self, address: int, address_ext: int = 0x00):
398
398
  """Set Memory Transfer Address in slave.
399
399
 
400
400
  Parameters
@@ -409,9 +409,9 @@ class Master:
409
409
  and :meth:`programMax`.
410
410
 
411
411
  """
412
- self.mta = types.MtaType(address, addressExt) # Keep track of MTA (needed for error-handling).
412
+ self.mta = types.MtaType(address, address_ext) # Keep track of MTA (needed for error-handling).
413
413
  addr = self.DWORD_pack(address)
414
- return self.transport.request(types.Command.SET_MTA, 0, 0, addressExt, *addr)
414
+ return self.transport.request(types.Command.SET_MTA, 0, 0, address_ext, *addr)
415
415
 
416
416
  @wrapped
417
417
  def upload(self, length: int):
@@ -450,7 +450,7 @@ class Master:
450
450
  return response
451
451
 
452
452
  @wrapped
453
- def shortUpload(self, length: int, address: int, addressExt: int = 0x00):
453
+ def shortUpload(self, length: int, address: int, address_ext: int = 0x00):
454
454
  """Transfer data from slave to master.
455
455
  As opposed to :meth:`upload` this service also includes address information.
456
456
 
@@ -470,7 +470,7 @@ class Master:
470
470
  max_byte_count = self.slaveProperties.maxCto - 1
471
471
  if byte_count > max_byte_count:
472
472
  self.logger.warn(f"SHORT_UPLOAD: {byte_count} bytes exceeds the maximum value of {max_byte_count}.")
473
- response = self.transport.request(types.Command.SHORT_UPLOAD, length, 0, addressExt, *addr)
473
+ response = self.transport.request(types.Command.SHORT_UPLOAD, length, 0, address_ext, *addr)
474
474
  return response[:byte_count]
475
475
 
476
476
  @wrapped
@@ -496,7 +496,7 @@ class Master:
496
496
  return types.BuildChecksumResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
497
497
 
498
498
  @wrapped
499
- def transportLayerCmd(self, subCommand: int, *data: List[bytes]):
499
+ def transportLayerCmd(self, sub_command: int, *data: List[bytes]):
500
500
  """Execute transfer-layer specific command.
501
501
 
502
502
  Parameters
@@ -508,10 +508,10 @@ class Master:
508
508
  ----
509
509
  For details refer to XCP specification.
510
510
  """
511
- return self.transport.request_optional_response(types.Command.TRANSPORT_LAYER_CMD, subCommand, *data)
511
+ return self.transport.request_optional_response(types.Command.TRANSPORT_LAYER_CMD, sub_command, *data)
512
512
 
513
513
  @wrapped
514
- def userCmd(self, subCommand: int, data: bytes):
514
+ def userCmd(self, sub_command: int, data: bytes):
515
515
  """Execute proprietary command implemented in your XCP client.
516
516
 
517
517
  Parameters
@@ -523,7 +523,7 @@ class Master:
523
523
  .. note:: For details refer to your XCP client vendor.
524
524
  """
525
525
 
526
- response = self.transport.request(types.Command.USER_CMD, subCommand, *data)
526
+ response = self.transport.request(types.Command.USER_CMD, sub_command, *data)
527
527
  return response
528
528
 
529
529
  @wrapped
@@ -547,7 +547,7 @@ class Master:
547
547
  self.slaveProperties.transportMinor = result.transportMinor
548
548
  return result
549
549
 
550
- def fetch(self, length: int, limitPayload: int = None): # TODO: pull
550
+ def fetch(self, length: int, limit_payload: int = None): # TODO: pull
551
551
  """Convenience function for data-transfer from slave to master
552
552
  (Not part of the XCP Specification).
553
553
 
@@ -565,21 +565,21 @@ class Master:
565
565
  ----
566
566
  address is not included because of services implicitly setting address information like :meth:`getID` .
567
567
  """
568
- if limitPayload and limitPayload < 8:
569
- raise ValueError(f"Payload must be at least 8 bytes - given: {limitPayload}")
568
+ if limit_payload and limit_payload < 8:
569
+ raise ValueError(f"Payload must be at least 8 bytes - given: {limit_payload}")
570
570
 
571
- slaveBlockMode = self.slaveProperties.slaveBlockMode
572
- if slaveBlockMode:
573
- maxPayload = 255
571
+ slave_block_mode = self.slaveProperties.slaveBlockMode
572
+ if slave_block_mode:
573
+ max_payload = 255
574
574
  else:
575
- maxPayload = self.slaveProperties.maxCto - 1
576
- payload = min(limitPayload, maxPayload) if limitPayload else maxPayload
577
- chunkSize = payload
578
- chunks = range(length // chunkSize)
579
- remaining = length % chunkSize
575
+ max_payload = self.slaveProperties.maxCto - 1
576
+ payload = min(limit_payload, max_payload) if limit_payload else max_payload
577
+ chunk_size = payload
578
+ chunks = range(length // chunk_size)
579
+ remaining = length % chunk_size
580
580
  result = []
581
581
  for _ in chunks:
582
- data = self.upload(chunkSize)
582
+ data = self.upload(chunk_size)
583
583
  result.extend(data)
584
584
  if remaining:
585
585
  data = self.upload(remaining)
@@ -588,7 +588,7 @@ class Master:
588
588
 
589
589
  pull = fetch # fetch() may be completely replaced by pull() someday.
590
590
 
591
- def push(self, address: int, address_ext: int, data: bytes, callback=None):
591
+ def push(self, address: int, address_ext: int, data: bytes, callback: Optional[Callable] = None):
592
592
  """Convenience function for data-transfer from master to slave.
593
593
  (Not part of the XCP Specification).
594
594
 
@@ -615,7 +615,7 @@ class Master:
615
615
  callback=callback,
616
616
  )
617
617
 
618
- def flash_program(self, address: int, data: bytes, callback=None):
618
+ def flash_program(self, address: int, data: bytes, callback: Optional[Callable] = None):
619
619
  """Convenience function for flash programing.
620
620
  (Not part of the XCP Specification).
621
621
 
@@ -707,7 +707,9 @@ class Master:
707
707
  if callback:
708
708
  callback(percent_complete)
709
709
 
710
- def _block_downloader(self, data: bytes, dl_func=None, dl_next_func=None, minSt=0):
710
+ def _block_downloader(
711
+ self, data: bytes, dl_func: Optional[Callable] = None, dl_next_func: Optional[Callable] = None, minSt: int = 0
712
+ ):
711
713
  """Re-usable block downloader.
712
714
 
713
715
  Parameters
@@ -751,14 +753,14 @@ class Master:
751
753
  delay(minSt)
752
754
 
753
755
  @wrapped
754
- def download(self, data: bytes, blockModeLength=None, last=False):
756
+ def download(self, data: bytes, block_mode_length: Optional[int] = None, last: bool = False):
755
757
  """Transfer data from master to slave.
756
758
 
757
759
  Parameters
758
760
  ----------
759
761
  data : bytes
760
762
  Data to send to slave.
761
- blockModeLength : int or None
763
+ block_mode_length : int or None
762
764
  for block mode, the download request must contain the length of the whole block,
763
765
  not just the length in the current packet. The whole block length can be given here for block-mode
764
766
  transfers. For normal mode, the length indicates the actual packet's payload length.
@@ -768,20 +770,20 @@ class Master:
768
770
  Adress is set via :meth:`setMta`
769
771
  """
770
772
 
771
- if blockModeLength is None or last:
773
+ if block_mode_length is None or last:
772
774
  # standard mode
773
775
  length = len(data)
774
776
  response = self.transport.request(types.Command.DOWNLOAD, length, *data)
775
777
  return response
776
778
  else:
777
779
  # block mode
778
- if not isinstance(blockModeLength, int):
779
- raise TypeError("blockModeLength must be int!")
780
- self.transport.block_request(types.Command.DOWNLOAD, blockModeLength, *data)
780
+ if not isinstance(block_mode_length, int):
781
+ raise TypeError("block_mode_length must be int!")
782
+ self.transport.block_request(types.Command.DOWNLOAD, block_mode_length, *data)
781
783
  return None
782
784
 
783
785
  @wrapped
784
- def downloadNext(self, data: bytes, remainingBlockLength, last=False):
786
+ def downloadNext(self, data: bytes, remaining_block_length: int, last: bool = False):
785
787
  """Transfer data from master to slave (block mode).
786
788
 
787
789
  Parameters
@@ -796,12 +798,12 @@ class Master:
796
798
 
797
799
  if last:
798
800
  # last DOWNLOAD_NEXT packet in a block: the slave device has to send the response after this.
799
- response = self.transport.request(types.Command.DOWNLOAD_NEXT, remainingBlockLength, *data)
801
+ response = self.transport.request(types.Command.DOWNLOAD_NEXT, remaining_block_length, *data)
800
802
  return response
801
803
  else:
802
804
  # the slave device won't respond to consecutive DOWNLOAD_NEXT packets in block mode,
803
805
  # so we must not wait for any response
804
- self.transport.block_request(types.Command.DOWNLOAD_NEXT, remainingBlockLength, *data)
806
+ self.transport.block_request(types.Command.DOWNLOAD_NEXT, remaining_block_length, *data)
805
807
  return None
806
808
 
807
809
  @wrapped
@@ -815,21 +817,21 @@ class Master:
815
817
  return self.transport.request(types.Command.DOWNLOAD_MAX, *data)
816
818
 
817
819
  @wrapped
818
- def shortDownload(self, address, addressExt, data):
820
+ def shortDownload(self, address: int, address_ext: int, data: bytes):
819
821
  length = len(data)
820
822
  addr = self.DWORD_pack(address)
821
- return self.transport.request(types.Command.SHORT_DOWNLOAD, length, 0, addressExt, *addr, *data)
823
+ return self.transport.request(types.Command.SHORT_DOWNLOAD, length, 0, address_ext, *addr, *data)
822
824
 
823
825
  @wrapped
824
- def modifyBits(self, shiftValue, andMask, xorMask):
826
+ def modifyBits(self, shift_value: int, and_mask: int, xor_mask: int):
825
827
  # A = ( (A) & ((~((dword)(((word)~MA)<<S))) )^((dword)(MX<<S)) )
826
- am = self.WORD_pack(andMask)
827
- xm = self.WORD_pack(xorMask)
828
- return self.transport.request(types.Command.MODIFY_BITS, shiftValue, *am, *xm)
828
+ am = self.WORD_pack(and_mask)
829
+ xm = self.WORD_pack(xor_mask)
830
+ return self.transport.request(types.Command.MODIFY_BITS, shift_value, *am, *xm)
829
831
 
830
832
  # Page Switching Commands (PAG)
831
833
  @wrapped
832
- def setCalPage(self, mode: int, logicalDataSegment: int, logicalDataPage: int):
834
+ def setCalPage(self, mode: int, logical_data_segment: int, logical_data_page: int):
833
835
  """Set calibration page.
834
836
 
835
837
  Parameters
@@ -841,10 +843,10 @@ class Master:
841
843
  logicalDataSegment : int
842
844
  logicalDataPage : int
843
845
  """
844
- return self.transport.request(types.Command.SET_CAL_PAGE, mode, logicalDataSegment, logicalDataPage)
846
+ return self.transport.request(types.Command.SET_CAL_PAGE, mode, logical_data_segment, logical_data_page)
845
847
 
846
848
  @wrapped
847
- def getCalPage(self, mode: int, logicalDataSegment: int):
849
+ def getCalPage(self, mode: int, logical_data_segment: int):
848
850
  """Get calibration page
849
851
 
850
852
  Parameters
@@ -852,7 +854,7 @@ class Master:
852
854
  mode : int
853
855
  logicalDataSegment : int
854
856
  """
855
- response = self.transport.request(types.Command.GET_CAL_PAGE, mode, logicalDataSegment)
857
+ response = self.transport.request(types.Command.GET_CAL_PAGE, mode, logical_data_segment)
856
858
  return response[2]
857
859
 
858
860
  @wrapped
@@ -867,7 +869,7 @@ class Master:
867
869
  return types.GetPagProcessorInfoResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
868
870
 
869
871
  @wrapped
870
- def getSegmentInfo(self, mode, segmentNumber, segmentInfo, mappingIndex):
872
+ def getSegmentInfo(self, mode: int, segment_number: int, segment_info: int, mapping_index: int):
871
873
  """Get specific information for a segment.
872
874
 
873
875
  Parameters
@@ -900,9 +902,9 @@ class Master:
900
902
  response = self.transport.request(
901
903
  types.Command.GET_SEGMENT_INFO,
902
904
  mode,
903
- segmentNumber,
904
- segmentInfo,
905
- mappingIndex,
905
+ segment_number,
906
+ segment_info,
907
+ mapping_index,
906
908
  )
907
909
  if mode == 0:
908
910
  return types.GetSegmentInfoMode0Response.parse(response, byteOrder=self.slaveProperties.byteOrder)
@@ -912,7 +914,7 @@ class Master:
912
914
  return types.GetSegmentInfoMode2Response.parse(response, byteOrder=self.slaveProperties.byteOrder)
913
915
 
914
916
  @wrapped
915
- def getPageInfo(self, segmentNumber, pageNumber):
917
+ def getPageInfo(self, segment_number: int, page_number: int):
916
918
  """Get specific information for a page.
917
919
 
918
920
  Parameters
@@ -920,14 +922,14 @@ class Master:
920
922
  segmentNumber : int
921
923
  pageNumber : int
922
924
  """
923
- response = self.transport.request(types.Command.GET_PAGE_INFO, 0, segmentNumber, pageNumber)
925
+ response = self.transport.request(types.Command.GET_PAGE_INFO, 0, segment_number, page_number)
924
926
  return (
925
927
  types.PageProperties.parse(bytes([response[0]]), byteOrder=self.slaveProperties.byteOrder),
926
928
  response[1],
927
929
  )
928
930
 
929
931
  @wrapped
930
- def setSegmentMode(self, mode, segmentNumber):
932
+ def setSegmentMode(self, mode: int, segment_number: int):
931
933
  """Set mode for a segment.
932
934
 
933
935
  Parameters
@@ -936,21 +938,22 @@ class Master:
936
938
  1 = enable FREEZE Mode
937
939
  segmentNumber : int
938
940
  """
939
- return self.transport.request(types.Command.SET_SEGMENT_MODE, mode, segmentNumber)
941
+ return self.transport.request(types.Command.SET_SEGMENT_MODE, mode, segment_number)
940
942
 
941
943
  @wrapped
942
- def getSegmentMode(self, segmentNumber):
944
+ def getSegmentMode(self, segment_number: int):
943
945
  """Get mode for a segment.
944
946
 
945
947
  Parameters
946
948
  ----------
947
949
  segmentNumber : int
948
950
  """
949
- response = self.transport.request(types.Command.GET_SEGMENT_MODE, 0, segmentNumber)
950
- return response[1]
951
+ response = self.transport.request(types.Command.GET_SEGMENT_MODE, 0, segment_number)
952
+ if response:
953
+ return response[1]
951
954
 
952
955
  @wrapped
953
- def copyCalPage(self, srcSegment, srcPage, dstSegment, dstPage):
956
+ def copyCalPage(self, src_segment: int, src_page: int, dst_segment: int, dst_page: int):
954
957
  """Copy page.
955
958
 
956
959
  Parameters
@@ -960,33 +963,33 @@ class Master:
960
963
  dstSegment : int
961
964
  dstPage : int
962
965
  """
963
- return self.transport.request(types.Command.COPY_CAL_PAGE, srcSegment, srcPage, dstSegment, dstPage)
966
+ return self.transport.request(types.Command.COPY_CAL_PAGE, src_segment, src_page, dst_segment, dst_page)
964
967
 
965
968
  # DAQ
966
969
 
967
970
  @wrapped
968
- def setDaqPtr(self, daqListNumber: int, odtNumber: int, odtEntryNumber: int):
969
- self.currentDaqPtr = types.DaqPtr(daqListNumber, odtNumber, odtEntryNumber) # Needed for errorhandling.
970
- daqList = self.WORD_pack(daqListNumber)
971
- response = self.transport.request(types.Command.SET_DAQ_PTR, 0, *daqList, odtNumber, odtEntryNumber)
972
- self.stim.setDaqPtr(daqListNumber, odtNumber, odtEntryNumber)
971
+ def setDaqPtr(self, daq_list_number: int, odt_number: int, odt_entry_number: int):
972
+ self.currentDaqPtr = types.DaqPtr(daq_list_number, odt_number, odt_entry_number) # Needed for errorhandling.
973
+ daq_list = self.WORD_pack(daq_list_number)
974
+ response = self.transport.request(types.Command.SET_DAQ_PTR, 0, *daq_list, odt_number, odt_entry_number)
975
+ self.stim.setDaqPtr(daq_list_number, odt_number, odt_entry_number)
973
976
  return response
974
977
 
975
978
  @wrapped
976
- def clearDaqList(self, daqListNumber: int):
979
+ def clearDaqList(self, daq_list_number: int):
977
980
  """Clear DAQ list configuration.
978
981
 
979
982
  Parameters
980
983
  ----------
981
984
  daqListNumber : int
982
985
  """
983
- daqList = self.WORD_pack(daqListNumber)
984
- result = self.transport.request(types.Command.CLEAR_DAQ_LIST, 0, *daqList)
985
- self.stim.clearDaqList(daqListNumber)
986
+ daq_list = self.WORD_pack(daq_list_number)
987
+ result = self.transport.request(types.Command.CLEAR_DAQ_LIST, 0, *daq_list)
988
+ self.stim.clearDaqList(daq_list_number)
986
989
  return result
987
990
 
988
991
  @wrapped
989
- def writeDaq(self, bitOffset: int, entrySize: int, addressExt: int, address: int):
992
+ def writeDaq(self, bit_offset: int, entry_size: int, address_ext: int, address: int):
990
993
  """Write element in ODT entry.
991
994
 
992
995
  Parameters
@@ -999,19 +1002,19 @@ class Master:
999
1002
  address : int
1000
1003
  """
1001
1004
  addr = self.DWORD_pack(address)
1002
- result = self.transport.request(types.Command.WRITE_DAQ, bitOffset, entrySize, addressExt, *addr)
1003
- self.stim.writeDaq(bitOffset, entrySize, addressExt, address)
1005
+ result = self.transport.request(types.Command.WRITE_DAQ, bit_offset, entry_size, address_ext, *addr)
1006
+ self.stim.writeDaq(bit_offset, entry_size, address_ext, address)
1004
1007
  return result
1005
1008
 
1006
1009
  @wrapped
1007
- def setDaqListMode(self, mode, daqListNumber, eventChannelNumber, prescaler, priority):
1008
- dln = self.WORD_pack(daqListNumber)
1009
- ecn = self.WORD_pack(eventChannelNumber)
1010
- self.stim.setDaqListMode(mode, daqListNumber, eventChannelNumber, prescaler, priority)
1010
+ def setDaqListMode(self, mode: int, daq_list_number: int, event_channel_number: int, prescaler: int, priority: int):
1011
+ dln = self.WORD_pack(daq_list_number)
1012
+ ecn = self.WORD_pack(event_channel_number)
1013
+ self.stim.setDaqListMode(mode, daq_list_number, event_channel_number, prescaler, priority)
1011
1014
  return self.transport.request(types.Command.SET_DAQ_LIST_MODE, mode, *dln, *ecn, prescaler, priority)
1012
1015
 
1013
1016
  @wrapped
1014
- def getDaqListMode(self, daqListNumber):
1017
+ def getDaqListMode(self, daq_list_number: int):
1015
1018
  """Get mode from DAQ list.
1016
1019
 
1017
1020
  Parameters
@@ -1022,12 +1025,12 @@ class Master:
1022
1025
  -------
1023
1026
  `pyxcp.types.GetDaqListModeResponse`
1024
1027
  """
1025
- dln = self.WORD_pack(daqListNumber)
1028
+ dln = self.WORD_pack(daq_list_number)
1026
1029
  response = self.transport.request(types.Command.GET_DAQ_LIST_MODE, 0, *dln)
1027
1030
  return types.GetDaqListModeResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1028
1031
 
1029
1032
  @wrapped
1030
- def startStopDaqList(self, mode: int, daqListNumber: int):
1033
+ def startStopDaqList(self, mode: int, daq_list_number: int):
1031
1034
  """Start /stop/select DAQ list.
1032
1035
 
1033
1036
  Parameters
@@ -1038,15 +1041,15 @@ class Master:
1038
1041
  2 = select
1039
1042
  daqListNumber : int
1040
1043
  """
1041
- dln = self.WORD_pack(daqListNumber)
1044
+ dln = self.WORD_pack(daq_list_number)
1042
1045
  response = self.transport.request(types.Command.START_STOP_DAQ_LIST, mode, *dln)
1043
- self.stim.startStopDaqList(mode, daqListNumber)
1044
- firstPid = types.StartStopDaqListResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1045
- self.stim.set_first_pid(daqListNumber, firstPid.firstPid)
1046
- return firstPid
1046
+ self.stim.startStopDaqList(mode, daq_list_number)
1047
+ first_pid = types.StartStopDaqListResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1048
+ self.stim.set_first_pid(daq_list_number, first_pid.firstPid)
1049
+ return first_pid
1047
1050
 
1048
1051
  @wrapped
1049
- def startStopSynch(self, mode):
1052
+ def startStopSynch(self, mode: int):
1050
1053
  """Start/stop DAQ lists (synchronously).
1051
1054
 
1052
1055
  Parameters
@@ -1061,20 +1064,20 @@ class Master:
1061
1064
  return res
1062
1065
 
1063
1066
  @wrapped
1064
- def writeDaqMultiple(self, daqElements):
1067
+ def writeDaqMultiple(self, daq_elements: dict):
1065
1068
  """Write multiple elements in ODT.
1066
1069
 
1067
1070
  Parameters
1068
1071
  ----------
1069
1072
  daqElements : list of `dict` containing the following keys: *bitOffset*, *size*, *address*, *addressExt*.
1070
1073
  """
1071
- if len(daqElements) > self.slaveProperties.maxWriteDaqMultipleElements:
1074
+ if len(daq_elements) > self.slaveProperties.maxWriteDaqMultipleElements:
1072
1075
  raise ValueError(f"At most {self.slaveProperties.maxWriteDaqMultipleElements} daqElements are permitted.")
1073
1076
  data = bytearray()
1074
- data.append(len(daqElements))
1077
+ data.append(len(daq_elements))
1075
1078
 
1076
- for daqElement in daqElements:
1077
- data.extend(types.DaqElement.build(daqElement, byteOrder=self.slaveProperties.byteOrder))
1079
+ for daq_element in daq_elements:
1080
+ data.extend(types.DaqElement.build(daq_element, byteOrder=self.slaveProperties.byteOrder))
1078
1081
 
1079
1082
  return self.transport.request(types.Command.WRITE_DAQ_MULTIPLE, *data)
1080
1083
 
@@ -1126,19 +1129,19 @@ class Master:
1126
1129
  return types.GetDaqResolutionInfoResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1127
1130
 
1128
1131
  @wrapped
1129
- def getDaqListInfo(self, daqListNumber):
1132
+ def getDaqListInfo(self, daq_list_number: int):
1130
1133
  """Get specific information for a DAQ list.
1131
1134
 
1132
1135
  Parameters
1133
1136
  ----------
1134
1137
  daqListNumber : int
1135
1138
  """
1136
- dln = self.WORD_pack(daqListNumber)
1139
+ dln = self.WORD_pack(daq_list_number)
1137
1140
  response = self.transport.request(types.Command.GET_DAQ_LIST_INFO, 0, *dln)
1138
1141
  return types.GetDaqListInfoResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1139
1142
 
1140
1143
  @wrapped
1141
- def getDaqEventInfo(self, eventChannelNumber):
1144
+ def getDaqEventInfo(self, event_channel_number: int):
1142
1145
  """Get specific information for an event channel.
1143
1146
 
1144
1147
  Parameters
@@ -1149,12 +1152,12 @@ class Master:
1149
1152
  -------
1150
1153
  `pyxcp.types.GetEventChannelInfoResponse`
1151
1154
  """
1152
- ecn = self.WORD_pack(eventChannelNumber)
1155
+ ecn = self.WORD_pack(event_channel_number)
1153
1156
  response = self.transport.request(types.Command.GET_DAQ_EVENT_INFO, 0, *ecn)
1154
1157
  return types.GetEventChannelInfoResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1155
1158
 
1156
1159
  @wrapped
1157
- def dtoCtrProperties(self, modifier, eventChannel, relatedEventChannel, mode):
1160
+ def dtoCtrProperties(self, modifier: int, event_channel: int, related_event_channel: int, mode: int):
1158
1161
  """DTO CTR properties
1159
1162
 
1160
1163
  Parameters
@@ -1170,14 +1173,16 @@ class Master:
1170
1173
  """
1171
1174
  data = bytearray()
1172
1175
  data.append(modifier)
1173
- data.extend(self.WORD_pack(eventChannel))
1174
- data.extend(self.WORD_pack(relatedEventChannel))
1176
+ data.extend(self.WORD_pack(event_channel))
1177
+ data.extend(self.WORD_pack(related_event_channel))
1175
1178
  data.append(mode)
1176
1179
  response = self.transport.request(types.Command.DTO_CTR_PROPERTIES, *data)
1177
1180
  return types.DtoCtrPropertiesResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1178
1181
 
1179
1182
  @wrapped
1180
- def setDaqPackedMode(self, daqListNumber, daqPackedMode, dpmTimestampMode=None, dpmSampleCount=None):
1183
+ def setDaqPackedMode(
1184
+ self, daq_list_number: int, daq_packed_mode: int, dpm_timestamp_mode: int = None, dpm_sample_count: int = None
1185
+ ):
1181
1186
  """Set DAQ List Packed Mode.
1182
1187
 
1183
1188
  Parameters
@@ -1186,19 +1191,19 @@ class Master:
1186
1191
  daqPackedMode : int
1187
1192
  """
1188
1193
  params = []
1189
- dln = self.WORD_pack(daqListNumber)
1194
+ dln = self.WORD_pack(daq_list_number)
1190
1195
  params.extend(dln)
1191
- params.append(daqPackedMode)
1196
+ params.append(daq_packed_mode)
1192
1197
 
1193
- if daqPackedMode == 1 or daqPackedMode == 2:
1194
- params.append(dpmTimestampMode)
1195
- dsc = self.WORD_pack(dpmSampleCount)
1198
+ if daq_packed_mode == 1 or daq_packed_mode == 2:
1199
+ params.append(dpm_timestamp_mode)
1200
+ dsc = self.WORD_pack(dpm_sample_count)
1196
1201
  params.extend(dsc)
1197
1202
 
1198
1203
  return self.transport.request(types.Command.SET_DAQ_PACKED_MODE, *params)
1199
1204
 
1200
1205
  @wrapped
1201
- def getDaqPackedMode(self, daqListNumber):
1206
+ def getDaqPackedMode(self, daq_list_number: int):
1202
1207
  """Get DAQ List Packed Mode.
1203
1208
 
1204
1209
  This command returns information of the currently active packed mode of
@@ -1208,7 +1213,7 @@ class Master:
1208
1213
  ----------
1209
1214
  daqListNumber : int
1210
1215
  """
1211
- dln = self.WORD_pack(daqListNumber)
1216
+ dln = self.WORD_pack(daq_list_number)
1212
1217
  response = self.transport.request(types.Command.GET_DAQ_PACKED_MODE, *dln)
1213
1218
  return types.GetDaqPackedModeResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1214
1219
 
@@ -1221,7 +1226,7 @@ class Master:
1221
1226
  return result
1222
1227
 
1223
1228
  @wrapped
1224
- def allocDaq(self, daqCount: int):
1229
+ def allocDaq(self, daq_count: int):
1225
1230
  """Allocate DAQ lists.
1226
1231
 
1227
1232
  Parameters
@@ -1229,23 +1234,23 @@ class Master:
1229
1234
  daqCount : int
1230
1235
  number of DAQ lists to be allocated
1231
1236
  """
1232
- dq = self.WORD_pack(daqCount)
1237
+ dq = self.WORD_pack(daq_count)
1233
1238
  result = self.transport.request(types.Command.ALLOC_DAQ, 0, *dq)
1234
- self.stim.allocDaq(daqCount)
1239
+ self.stim.allocDaq(daq_count)
1235
1240
  return result
1236
1241
 
1237
1242
  @wrapped
1238
- def allocOdt(self, daqListNumber: int, odtCount: int):
1239
- dln = self.WORD_pack(daqListNumber)
1240
- result = self.transport.request(types.Command.ALLOC_ODT, 0, *dln, odtCount)
1241
- self.stim.allocOdt(daqListNumber, odtCount)
1243
+ def allocOdt(self, daq_list_number: int, odt_count: int):
1244
+ dln = self.WORD_pack(daq_list_number)
1245
+ result = self.transport.request(types.Command.ALLOC_ODT, 0, *dln, odt_count)
1246
+ self.stim.allocOdt(daq_list_number, odt_count)
1242
1247
  return result
1243
1248
 
1244
1249
  @wrapped
1245
- def allocOdtEntry(self, daqListNumber: int, odtNumber: int, odtEntriesCount: int):
1246
- dln = self.WORD_pack(daqListNumber)
1247
- result = self.transport.request(types.Command.ALLOC_ODT_ENTRY, 0, *dln, odtNumber, odtEntriesCount)
1248
- self.stim.allocOdtEntry(daqListNumber, odtNumber, odtEntriesCount)
1250
+ def allocOdtEntry(self, daq_list_number: int, odt_number: int, odt_entries_count: int):
1251
+ dln = self.WORD_pack(daq_list_number)
1252
+ result = self.transport.request(types.Command.ALLOC_ODT_ENTRY, 0, *dln, odt_number, odt_entries_count)
1253
+ self.stim.allocOdtEntry(daq_list_number, odt_number, odt_entries_count)
1249
1254
  return result
1250
1255
 
1251
1256
  # PGM
@@ -1270,7 +1275,7 @@ class Master:
1270
1275
  return result
1271
1276
 
1272
1277
  @wrapped
1273
- def programClear(self, mode: int, clearRange: int):
1278
+ def programClear(self, mode: int, clear_range: int):
1274
1279
  """Clear a part of non-volatile memory.
1275
1280
 
1276
1281
  Parameters
@@ -1280,18 +1285,18 @@ class Master:
1280
1285
  0x01 = the functional access mode is active
1281
1286
  clearRange : int
1282
1287
  """
1283
- cr = self.DWORD_pack(clearRange)
1288
+ cr = self.DWORD_pack(clear_range)
1284
1289
  response = self.transport.request(types.Command.PROGRAM_CLEAR, mode, 0, 0, *cr)
1285
1290
  # ERR_ACCESS_LOCKED
1286
1291
  return response
1287
1292
 
1288
1293
  @wrapped
1289
- def program(self, data: bytes, blockLength, last=False):
1294
+ def program(self, data: bytes, block_length: int, last: bool = False):
1290
1295
  """Parameters
1291
1296
  ----------
1292
1297
  data : bytes
1293
1298
  Data to send to slave.
1294
- blockModeLength : int
1299
+ block_mode_length : int
1295
1300
  the program request must contain the length of the whole block, not just the length
1296
1301
  in the current packet.
1297
1302
  last : bool
@@ -1310,12 +1315,12 @@ class Master:
1310
1315
  # d.extend(self.AG_pack(e))
1311
1316
  if last:
1312
1317
  # last PROGRAM_NEXT packet in a block: the slave device has to send the response after this.
1313
- response = self.transport.request(types.Command.PROGRAM, blockLength, *data)
1318
+ response = self.transport.request(types.Command.PROGRAM, block_length, *data)
1314
1319
  return response
1315
1320
  else:
1316
1321
  # the slave device won't respond to consecutive PROGRAM_NEXT packets in block mode,
1317
1322
  # so we must not wait for any response
1318
- self.transport.block_request(types.Command.PROGRAM, blockLength, *data)
1323
+ self.transport.block_request(types.Command.PROGRAM, block_length, *data)
1319
1324
  return None
1320
1325
 
1321
1326
  @wrapped
@@ -1336,9 +1341,9 @@ class Master:
1336
1341
  return result
1337
1342
 
1338
1343
  @wrapped
1339
- def getSectorInfo(self, mode, sectorNumber):
1344
+ def getSectorInfo(self, mode: int, sector_number: int):
1340
1345
  """Get specific information for a sector."""
1341
- response = self.transport.request(types.Command.GET_SECTOR_INFO, mode, sectorNumber)
1346
+ response = self.transport.request(types.Command.GET_SECTOR_INFO, mode, sector_number)
1342
1347
  if mode == 0 or mode == 1:
1343
1348
  return types.GetSectorInfoResponseMode01.parse(response, byteOrder=self.slaveProperties.byteOrder)
1344
1349
  elif mode == 2:
@@ -1351,17 +1356,17 @@ class Master:
1351
1356
  return self.transport.request(types.Command.PROGRAM_PREPARE, 0x00, *cs)
1352
1357
 
1353
1358
  @wrapped
1354
- def programFormat(self, compressionMethod, encryptionMethod, programmingMethod, accessMethod):
1359
+ def programFormat(self, compression_method: int, encryption_method: int, programming_method: int, access_method: int):
1355
1360
  return self.transport.request(
1356
1361
  types.Command.PROGRAM_FORMAT,
1357
- compressionMethod,
1358
- encryptionMethod,
1359
- programmingMethod,
1360
- accessMethod,
1362
+ compression_method,
1363
+ encryption_method,
1364
+ programming_method,
1365
+ access_method,
1361
1366
  )
1362
1367
 
1363
1368
  @wrapped
1364
- def programNext(self, data: bytes, remainingBlockLength: int, last: bool = False):
1369
+ def programNext(self, data: bytes, remaining_block_length: int, last: bool = False):
1365
1370
  # d = bytearray()
1366
1371
  # d.append(len(data))
1367
1372
  # if self.slaveProperties.addressGranularity == types.AddressGranularity.DWORD:
@@ -1370,16 +1375,16 @@ class Master:
1370
1375
  # d.extend(self.AG_pack(e))
1371
1376
  if last:
1372
1377
  # last PROGRAM_NEXT packet in a block: the slave device has to send the response after this.
1373
- response = self.transport.request(types.Command.PROGRAM_NEXT, remainingBlockLength, *data)
1378
+ response = self.transport.request(types.Command.PROGRAM_NEXT, remaining_block_length, *data)
1374
1379
  return response
1375
1380
  else:
1376
1381
  # the slave device won't respond to consecutive PROGRAM_NEXT packets in block mode,
1377
1382
  # so we must not wait for any response
1378
- self.transport.block_request(types.Command.PROGRAM_NEXT, remainingBlockLength, *data)
1383
+ self.transport.block_request(types.Command.PROGRAM_NEXT, remaining_block_length, *data)
1379
1384
  return None
1380
1385
 
1381
1386
  @wrapped
1382
- def programMax(self, data):
1387
+ def programMax(self, data: bytes):
1383
1388
  d = bytearray()
1384
1389
  if self.slaveProperties.addressGranularity == types.AddressGranularity.WORD:
1385
1390
  d.extend(b"\x00") # alignment bytes
@@ -1390,11 +1395,11 @@ class Master:
1390
1395
  return self.transport.request(types.Command.PROGRAM_MAX, *d)
1391
1396
 
1392
1397
  @wrapped
1393
- def programVerify(self, verMode, verType, verValue):
1398
+ def programVerify(self, ver_mode: int, ver_type: int, ver_value: int):
1394
1399
  data = bytearray()
1395
- data.extend(self.WORD_pack(verType))
1396
- data.extend(self.DWORD_pack(verValue))
1397
- return self.transport.request(types.Command.PROGRAM_VERIFY, verMode, *data)
1400
+ data.extend(self.WORD_pack(ver_type))
1401
+ data.extend(self.DWORD_pack(ver_value))
1402
+ return self.transport.request(types.Command.PROGRAM_VERIFY, ver_mode, *data)
1398
1403
 
1399
1404
  # DBG
1400
1405
 
@@ -1617,9 +1622,9 @@ class Master:
1617
1622
  return types.DbgLlbtResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1618
1623
 
1619
1624
  @wrapped
1620
- def timeCorrelationProperties(self, setProperties, getPropertiesRequest, clusterId):
1625
+ def timeCorrelationProperties(self, set_properties: int, get_properties_request: int, cluster_id: int):
1621
1626
  response = self.transport.request(
1622
- types.Command.TIME_CORRELATION_PROPERTIES, setProperties, getPropertiesRequest, 0, *self.WORD_pack(clusterId)
1627
+ types.Command.TIME_CORRELATION_PROPERTIES, set_properties, get_properties_request, 0, *self.WORD_pack(cluster_id)
1623
1628
  )
1624
1629
  return types.TimeCorrelationPropertiesResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1625
1630
 
@@ -1631,14 +1636,14 @@ class Master:
1631
1636
  response = self.transportLayerCmd(types.TransportLayerCommands.GET_SLAVE_ID, ord("X"), ord("C"), ord("P"), mode)
1632
1637
  return types.GetSlaveIdResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1633
1638
 
1634
- def getDaqId(self, daqListNumber: int):
1635
- response = self.transportLayerCmd(types.TransportLayerCommands.GET_DAQ_ID, *self.WORD_pack(daqListNumber))
1639
+ def getDaqId(self, daq_list_number: int):
1640
+ response = self.transportLayerCmd(types.TransportLayerCommands.GET_DAQ_ID, *self.WORD_pack(daq_list_number))
1636
1641
  # if response:
1637
1642
  return types.GetDaqIdResponse.parse(response, byteOrder=self.slaveProperties.byteOrder)
1638
1643
 
1639
- def setDaqId(self, daqListNumber: int, identifier: int):
1644
+ def setDaqId(self, daq_list_number: int, identifier: int):
1640
1645
  response = self.transportLayerCmd(
1641
- types.TransportLayerCommands.SET_DAQ_ID, *self.WORD_pack(daqListNumber), *self.DWORD_pack(identifier)
1646
+ types.TransportLayerCommands.SET_DAQ_ID, *self.WORD_pack(daq_list_number), *self.DWORD_pack(identifier)
1642
1647
  )
1643
1648
  return response
1644
1649
 
@@ -1665,7 +1670,7 @@ class Master:
1665
1670
  self.logger.debug(f"Our checksum : 0x{cc:08X}")
1666
1671
  return cs.checksum == cc
1667
1672
 
1668
- def getDaqInfo(self):
1673
+ def getDaqInfo(self, include_event_lists=True):
1669
1674
  """Get DAQ information: processor, resolution, events."""
1670
1675
  result = {}
1671
1676
  dpi = self.getDaqProcessorInfo()
@@ -1706,45 +1711,46 @@ class Master:
1706
1711
  result["resolution"] = resolutionInfo
1707
1712
  channels = []
1708
1713
  daq_events = []
1709
- for ecn in range(dpi.maxEventChannel):
1710
- eci = self.getDaqEventInfo(ecn)
1711
- cycle = eci["eventChannelTimeCycle"]
1712
- maxDaqList = eci["maxDaqList"]
1713
- priority = eci["eventChannelPriority"]
1714
- time_unit = eci["eventChannelTimeUnit"]
1715
- consistency = eci["daqEventProperties"]["consistency"]
1716
- daq_supported = eci["daqEventProperties"]["daq"]
1717
- stim_supported = eci["daqEventProperties"]["stim"]
1718
- packed_supported = eci["daqEventProperties"]["packed"]
1719
- name = self.fetch(eci.eventChannelNameLength)
1720
- if name:
1721
- name = decode_bytes(name)
1722
- channel = {
1723
- "name": name,
1724
- "priority": eci["eventChannelPriority"],
1725
- "unit": eci["eventChannelTimeUnit"],
1726
- "cycle": eci["eventChannelTimeCycle"],
1727
- "maxDaqList": eci["maxDaqList"],
1728
- "properties": {
1729
- "consistency": consistency,
1730
- "daq": daq_supported,
1731
- "stim": stim_supported,
1732
- "packed": packed_supported,
1733
- },
1734
- }
1735
- daq_event_info = DaqEventInfo(
1736
- name,
1737
- types.EVENT_CHANNEL_TIME_UNIT_TO_EXP[time_unit],
1738
- cycle,
1739
- maxDaqList,
1740
- priority,
1741
- consistency,
1742
- daq_supported,
1743
- stim_supported,
1744
- packed_supported,
1745
- )
1746
- daq_events.append(daq_event_info)
1747
- channels.append(channel)
1714
+ if include_event_lists:
1715
+ for ecn in range(dpi.maxEventChannel):
1716
+ eci = self.getDaqEventInfo(ecn)
1717
+ cycle = eci["eventChannelTimeCycle"]
1718
+ maxDaqList = eci["maxDaqList"]
1719
+ priority = eci["eventChannelPriority"]
1720
+ time_unit = eci["eventChannelTimeUnit"]
1721
+ consistency = eci["daqEventProperties"]["consistency"]
1722
+ daq_supported = eci["daqEventProperties"]["daq"]
1723
+ stim_supported = eci["daqEventProperties"]["stim"]
1724
+ packed_supported = eci["daqEventProperties"]["packed"]
1725
+ name = self.fetch(eci.eventChannelNameLength)
1726
+ if name:
1727
+ name = decode_bytes(name)
1728
+ channel = {
1729
+ "name": name,
1730
+ "priority": eci["eventChannelPriority"],
1731
+ "unit": eci["eventChannelTimeUnit"],
1732
+ "cycle": eci["eventChannelTimeCycle"],
1733
+ "maxDaqList": eci["maxDaqList"],
1734
+ "properties": {
1735
+ "consistency": consistency,
1736
+ "daq": daq_supported,
1737
+ "stim": stim_supported,
1738
+ "packed": packed_supported,
1739
+ },
1740
+ }
1741
+ daq_event_info = DaqEventInfo(
1742
+ name,
1743
+ types.EVENT_CHANNEL_TIME_UNIT_TO_EXP[time_unit],
1744
+ cycle,
1745
+ maxDaqList,
1746
+ priority,
1747
+ consistency,
1748
+ daq_supported,
1749
+ stim_supported,
1750
+ packed_supported,
1751
+ )
1752
+ daq_events.append(daq_event_info)
1753
+ channels.append(channel)
1748
1754
  result["channels"] = channels
1749
1755
  self.stim.setDaqEventInfo(daq_events)
1750
1756
  return result
@@ -1970,15 +1976,26 @@ class Master:
1970
1976
  extra_msg: Optional[str] = kws.get("extra_msg")
1971
1977
  if extra_msg:
1972
1978
  kws.pop("extra_msg")
1979
+ else:
1980
+ extra_msg = ""
1981
+ silent: Optional[bool] = kws.get("silent")
1982
+ if silent:
1983
+ kws.pop("silent")
1984
+ else:
1985
+ silent = False
1973
1986
  res = cmd(*args, **kws)
1974
1987
  except SystemExit as e:
1988
+ # print(f"\tUnexpected error while executing command {cmd.__name__!r}: {e!r}")
1975
1989
  if e.error_code == types.XcpError.ERR_CMD_UNKNOWN:
1976
1990
  # This is a rather common use-case, so let the user know that there is some functionality missing.
1977
- if extra_msg:
1978
- self.logger.warning(f"Optional command {cmd.__name__!r} not implemented -- {extra_msg!r}")
1979
- else:
1980
- self.logger.warning(f"Optional command {cmd.__name__!r} not implemented.")
1981
- return (types.TryCommandResult.XCP_ERROR, e)
1991
+ if not silent:
1992
+ if extra_msg:
1993
+ self.logger.warning(f"Optional command {cmd.__name__!r} not implemented -- {extra_msg!r}")
1994
+ else:
1995
+ self.logger.warning(f"Optional command {cmd.__name__!r} not implemented.")
1996
+ return (types.TryCommandResult.NOT_IMPLEMENTED, e)
1997
+ else:
1998
+ return (types.TryCommandResult.XCP_ERROR, e)
1982
1999
  except Exception as e:
1983
2000
  return (types.TryCommandResult.OTHER_ERROR, e)
1984
2001
  else:
Binary file
Binary file
Binary file
pyxcp/types.py CHANGED
@@ -990,4 +990,5 @@ class TryCommandResult(enum.IntEnum):
990
990
 
991
991
  OK = 0
992
992
  XCP_ERROR = 1
993
- OTHER_ERROR = 2
993
+ NOT_IMPLEMENTED = 2
994
+ OTHER_ERROR = 3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyxcp
3
- Version: 0.22.23
3
+ Version: 0.22.25
4
4
  Summary: Universal Calibration Protocol for Python
5
5
  License: LGPLv3
6
6
  Keywords: automotive,ecu,xcp,asam,autosar
@@ -1,4 +1,4 @@
1
- pyxcp/__init__.py,sha256=V3SXLv-pZNUllrYboyAoZk3eD9vuF4VXt4X0fPnENOw,548
1
+ pyxcp/__init__.py,sha256=NDu785DrhpFkKcUgVKRBeBhp6NC9yp9DVxG_MGx_3Dg,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
@@ -24,26 +24,26 @@ pyxcp/constants.py,sha256=9yGfujC0ImTYQWfn41wyw8pluJTSrhMGWIVeIZTgsLg,1160
24
24
  pyxcp/cpp_ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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=yCj8PLbgIuWiN7UA5rNjNc1qVpVxzks8E-bXUd5QAZ8,279040
28
- pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=cRafRoCE7udgdFWX5Yj_9ZDDaIAG1gfpX2eWumxUgig,279040
29
- pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=diNwWzCQm0i75EsOkLHG0VZ0pqnor3bHcQDyy5_1GhM,260096
30
- pyxcp/cpp_ext/daqlist.hpp,sha256=5JEYQK96qac4ZsoMVnmVGsrH_4uuqbHwcNGiH4j5FAU,7167
27
+ pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=VWNTkyiub_-mX4OXAsEROyUfJz3fOSuyz_clzlwaYTo,279552
28
+ pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd,sha256=FvxLTjwiAyCQBEoqKOZ-fci6t1caxfVchOpwv7ruPzY,279552
29
+ pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd,sha256=Jx5MDTdx6bNKSEvJjd_Wa-TnVHmexbmdjPqQARmVYx8,260096
30
+ pyxcp/cpp_ext/daqlist.hpp,sha256=g2hlxgoQorAGKHedZFZ0c2FQh1APMIA9sVB6M6hD_n8,7277
31
31
  pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
32
- pyxcp/cpp_ext/extension_wrapper.cpp,sha256=-r1YYgJD4dJiiMeA0HEmIQQfsXrzDozLonCrbpKUXiA,4544
32
+ pyxcp/cpp_ext/extension_wrapper.cpp,sha256=FXFjyruBjQYqjCYZZcajdYv6dvNnCggMAbWLqJmfuTM,4756
33
33
  pyxcp/cpp_ext/helper.hpp,sha256=ONAsVupIqqmNDp8bgGWS0TfSYeCFkk3kwwZbbqsh0HQ,7813
34
34
  pyxcp/cpp_ext/mcobject.hpp,sha256=A5GKcfjYMcfm3hfTQfFuS4JYNFTvfmzAcMXCe01GOs4,6429
35
35
  pyxcp/cpp_ext/tsqueue.hpp,sha256=FWMemzXNgV5dQ7gYmTCzC0QYfgl0VI9JCybYelBcCHU,1026
36
- pyxcp/daq_stim/__init__.py,sha256=OXit9yuI3Aresbnz1yGsOJ6OavL_LkeX8d5bMOMdCag,9404
36
+ pyxcp/daq_stim/__init__.py,sha256=xQNF6MlVnPHtjj5fKEvXnLWxIJs_Fqd5XVMN4lcFaC8,9532
37
37
  pyxcp/daq_stim/optimize/__init__.py,sha256=FUWK0GkNpNT-sUlhibp7xa2aSYpm6Flh5yA2w2IOJqg,2520
38
38
  pyxcp/daq_stim/optimize/binpacking.py,sha256=Iltho5diKlJG-ltbmx053U2vOFRlCISolXK61T14l_I,1257
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=TwmMXXgHYOh-aVi-yKGAm8Z3ONjR_v8Y5vYUIcPowtY,186880
42
- pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=YBtdP7RHlzQ-OwEmVK-VJYRktF5YdASMKGHiqYmhPfY,186880
43
- pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=N1u0GASMkD4lWjT1q4uKHW8xBxe3rCQ4TGksf06niUE,181248
41
+ pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=DD7ufKxaaRW5DmBBsAe4whg6qoi8GQ62VT7IS7U8KlA,189440
42
+ pyxcp/daq_stim/stim.cp38-win_amd64.pyd,sha256=X_ftCGxwZ4slT40A21gSUwJq8J-vB8Q_VUvZgQkRB2c,189440
43
+ pyxcp/daq_stim/stim.cp39-win_amd64.pyd,sha256=nM37yO0Em1w_FxpT4mL5a8IVkYT5wsKLON1b1lI6C6w,183296
44
44
  pyxcp/daq_stim/stim.cpp,sha256=F2OG67W4KKwTTiUCxm-9egIv3TLFdOkRunX6xf7YOtc,177
45
45
  pyxcp/daq_stim/stim.hpp,sha256=U-uInRrA6OCdMl1l1SWbQ_KEPpnNYrWut924IvbW6R0,18508
46
- pyxcp/daq_stim/stim_wrapper.cpp,sha256=5LbWkK86h_4mHd83dnwCU7BRvVYit8ijxBMT7pthtOE,1830
46
+ pyxcp/daq_stim/stim_wrapper.cpp,sha256=iT2yxJ3LRG7HoYC1bwhM3tCAxF9X_HHierBNsLRmTJg,1995
47
47
  pyxcp/dllif.py,sha256=nXzD5toh_z9Zjj3x3trigURfwE98fYaL4RmUlI7FaqY,3308
48
48
  pyxcp/errormatrix.py,sha256=iY3VlAem7pNfpK4scD_087wxMlLxNuidB7bbpiUiAyc,45464
49
49
  pyxcp/examples/conf_can.toml,sha256=4o-M4xmh7pCzuQLfXnIOLIXqx5aZjMAZ6jtjYJ8hLBQ,370
@@ -60,7 +60,7 @@ pyxcp/examples/ex_csv.py,sha256=GNWQ3IatXj3Kg5MUX6p8tzJRUppGreON9dkrNiqdTtk,2461
60
60
  pyxcp/examples/ex_excel.py,sha256=VpoqRTv-rHz-MnaFKt5f7MqDrK9OLYyRJvVWzCFsayc,2828
61
61
  pyxcp/examples/ex_mdf.py,sha256=zfivlNkbbsfvwqsISttaoQk1R888r7UUtwSqocE60sU,3759
62
62
  pyxcp/examples/ex_sqlite.py,sha256=ludD0EIziBhBNnC3MOrQTGs06cl7iNyL2yefwe53zNc,4268
63
- pyxcp/examples/run_daq.py,sha256=kpy5aFKOFaQnwWmyE_--54NuDeaLEISQX8CKmuQEpHc,5007
63
+ pyxcp/examples/run_daq.py,sha256=KXL9myK3w7RCIgjZblU2i1XOP5l4V0YRQKNRXF7ISIo,5518
64
64
  pyxcp/examples/xcp_policy.py,sha256=io9tS2W-7PvR8ZzU203KolFrDp67eorUlwNWvA4kC5k,1921
65
65
  pyxcp/examples/xcp_read_benchmark.py,sha256=zOG0Yrji10vA0vhHa27KK7zgc3JDpzXzXsFnIU4C_AM,956
66
66
  pyxcp/examples/xcp_skel.py,sha256=YXLQC8nn8aAwYSVuBGhr1dvmdMBjmO1Ee1w3e5sy16s,1159
@@ -70,7 +70,7 @@ pyxcp/examples/xcphello.py,sha256=xbcWq8StRJyUZBLUvknsXv7VkEBD5SU0SJjlZTHsSzs,26
70
70
  pyxcp/examples/xcphello_recorder.py,sha256=QHWJsq5h5CI9t5qEmMSorZyzirTpoXz4nzuKTMzbZCA,3409
71
71
  pyxcp/master/__init__.py,sha256=QQbkUJM1WQ-5p2MiNFYxLAmHhNsCQLzDp-S4aoOFxoA,318
72
72
  pyxcp/master/errorhandler.py,sha256=U5QuvGRDM9kRNwY5kbkTOnthp19RHoXEGCsaBNiFTps,14973
73
- pyxcp/master/master.py,sha256=mdsktxzkLABj0Rz011qJ3ifxDWiAP3M81cAQ7DN5lXc,76959
73
+ pyxcp/master/master.py,sha256=y5i5HTw5g4HKHW8tXfpNc0hmaQjle-3dsUkVFqPjUXc,78365
74
74
  pyxcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
75
  pyxcp/recorder/__init__.py,sha256=pg-cdOaoj-D-woFxFb2p6SpFTNTdpQEIknHdDaQ9ROE,2695
76
76
  pyxcp/recorder/build_clang.cmd,sha256=JvFngSnb28XcBGXxC6MGrcOCGYfahOIvHpgRpqbA6HQ,175
@@ -87,9 +87,9 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
87
87
  pyxcp/recorder/reader.hpp,sha256=rr9XZ_ciL6eF2_xEqyt9XYNqTIze9ytAsnf8uYukO9U,5201
88
88
  pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
89
89
  pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=EmaWdZr0m2M5WMRGBCxmdAvODxK4fAnZwmF3XyPnfeY,377856
91
- pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=KOsfruA8xsAkhHjEUIctg4PAUPpSMhGcMnWTXxvzgh8,377856
92
- pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=oPeJ5yQrV0-hamFjBBVLUdneZJqxJteGq7E22QqjfbA,364032
90
+ pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=CGdvShmnyjesXbPTQ8rM_bqpftDtXRZ1A7NjsGhkrDc,377856
91
+ pyxcp/recorder/rekorder.cp38-win_amd64.pyd,sha256=_XW8GKdICxi0mzTRHwZ7Fc_afbCMOPrCQpNa-EozKnE,377856
92
+ pyxcp/recorder/rekorder.cp39-win_amd64.pyd,sha256=IlUPHXqh86T7fBmgHC8EE7nTMuCkJMYTggM9u52LSwU,364032
93
93
  pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
94
94
  pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
95
95
  pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
@@ -123,12 +123,12 @@ pyxcp/transport/eth.py,sha256=xPzN2oSALoPKJVvZpBljPSV1AxfpjRusOzymO-TD1Rw,8711
123
123
  pyxcp/transport/sxi.py,sha256=vM8WZIKuu_dNuqkxZM_1n6iQkQCCzo4ykWpiG6ba8Fk,4695
124
124
  pyxcp/transport/transport_wrapper.cpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  pyxcp/transport/usb_transport.py,sha256=JuYrwkWsUdibdVNA57LBEQT3a3ykOgWPdWcfqj96nDE,8343
126
- pyxcp/types.py,sha256=hY4Bb3qT3ZoabGnSKLY6S84MvVyuOCxwVONfs2skx2Y,26043
126
+ pyxcp/types.py,sha256=wm3tOocuAln4jpH_mDguPRYtIzHSQ_KQBYNATFB2WXc,26068
127
127
  pyxcp/utils.py,sha256=unlg0CoNwcWYfd-BE0hZJ93uhlAoW_nryv9tS_R3C44,2969
128
128
  pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
130
- pyxcp-0.22.23.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
131
- pyxcp-0.22.23.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
132
- pyxcp-0.22.23.dist-info/METADATA,sha256=1E_6DzNfgDYZ1ok-YoAaXZYrhItROse3QrRAJhXSS6c,4088
133
- pyxcp-0.22.23.dist-info/WHEEL,sha256=GX2ImTsBnuQB1-UeuYbhJUp8NYXMHTQONElBI_kxGe0,98
134
- pyxcp-0.22.23.dist-info/RECORD,,
130
+ pyxcp-0.22.25.dist-info/entry_points.txt,sha256=2JbL-pWn9UxpBrS64aWiFFkq9x2A7y-dkrxYlfQqIJU,307
131
+ pyxcp-0.22.25.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
132
+ pyxcp-0.22.25.dist-info/METADATA,sha256=oUrQTmW0BB6APl8u-j-RKbfm75jwXGBVnr72VmiaOjo,4088
133
+ pyxcp-0.22.25.dist-info/WHEEL,sha256=GX2ImTsBnuQB1-UeuYbhJUp8NYXMHTQONElBI_kxGe0,98
134
+ pyxcp-0.22.25.dist-info/RECORD,,