Skip to content

Commit

Permalink
Merge pull request #117 from still-learnin/master
Browse files Browse the repository at this point in the history
Bug fixes for generalized downloader and program reset enhancement
  • Loading branch information
christoph2 committed Sep 18, 2022
2 parents 647bf5d + fbe5eaa commit 5571610
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions pyxcp/master/master.py
Original file line number Diff line number Diff line change
Expand Up @@ -680,13 +680,21 @@ def _generalized_downloader(
chunk_size = max_payload
chunks = range(total_length // chunk_size)
remaining = total_length % chunk_size
percent_complete = 1
callback_remaining = total_length
for _ in chunks:
block = data[offset : offset + max_payload]
self.download(block, max_payload)
dl_func(block, max_payload, last=True)
offset += max_payload
callback_remaining -= chunk_size
if callback and callback_remaining <= total_length - (total_length / 100) * percent_complete:
callback(percent_complete)
percent_complete += 1
if remaining:
block = data[offset : offset + remaining]
self.download(block, remaining)
dl_func(block, remaining, last=True)
if callback:
callback(percent_complete)

def _block_downloader(self, data: bytes, dl_func=None, dl_next_func=None, minSt=0):
"""Re-usable block downloader.
Expand Down Expand Up @@ -732,7 +740,7 @@ def _block_downloader(self, data: bytes, dl_func=None, dl_next_func=None, minSt=
delay(minSt)

@wrapped
def download(self, data: bytes, blockModeLength=None, **kwargs):
def download(self, data: bytes, blockModeLength=None, last=False):
"""Transfer data from master to slave.
Parameters
Expand All @@ -749,7 +757,7 @@ def download(self, data: bytes, blockModeLength=None, **kwargs):
Adress is set via :meth:`setMta`
"""

if blockModeLength is None:
if blockModeLength is None or last:
# standard mode
length = len(data)
response = self.transport.request(types.Command.DOWNLOAD, length, *data)
Expand Down Expand Up @@ -1281,9 +1289,12 @@ def program(self, data: bytes, blockLength, last=False):
return None

@wrapped
def programReset(self):
def programReset(self, wait_for_optional_response=True):
"""Indicate the end of a programming sequence."""
return self.transport.request_optional_response(types.Command.PROGRAM_RESET)
if wait_for_optional_response:
return self.transport.request_optional_response(types.Command.PROGRAM_RESET)
else:
return self.transport.block_request(types.Command.PROGRAM_RESET)

@wrapped
def getPgmProcessorInfo(self):
Expand Down

0 comments on commit 5571610

Please sign in to comment.