From 1f3c574fcfefa85b53a66fbeb3e0161f36331ccd Mon Sep 17 00:00:00 2001 From: Robert Lubos Date: Mon, 4 Dec 2017 09:41:02 +0100 Subject: [PATCH] Update Thread DFU logging (#112) * Improve Thread DFU logging * Add progress bar to Thread multicast DFU operation --- nordicsemi/__main__.py | 12 +++++++----- nordicsemi/thread/dfu_server.py | 13 ++++++++++++- nordicsemi/thread/tncp.py | 1 + 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/nordicsemi/__main__.py b/nordicsemi/__main__.py index 99f54b3..5e60d9a 100644 --- a/nordicsemi/__main__.py +++ b/nordicsemi/__main__.py @@ -132,10 +132,11 @@ def int_as_text_to_int(value): raise NordicSemiException('%s is not a valid integer' % value) def pause(): - try: - raw_input() - except (KeyboardInterrupt, EOFError): - pass + while True: + try: + raw_input() + except (KeyboardInterrupt, EOFError): + break class BasedIntOrNoneParamType(click.ParamType): name = 'Integer' @@ -944,9 +945,10 @@ def thread(package, port, address, server_port, panid, channel, jlink_snr, flash transport.open() # Delay DFU trigger until NCP promotes to a router (6 seconds by default) + click.echo("Waiting for NCP to promote to a router...") time.sleep(6.0) dfu.trigger(address, 3) - click.echo("Press to terminate") + click.echo("Thread DFU server is running... Press to stop.") pause() click.echo("Terminating") diff --git a/nordicsemi/thread/dfu_server.py b/nordicsemi/thread/dfu_server.py index a43fb3c..189c5e0 100644 --- a/nordicsemi/thread/dfu_server.py +++ b/nordicsemi/thread/dfu_server.py @@ -190,7 +190,6 @@ def _handle_image_request(self, request): total_block_count = _block_count(len(self.image_resource.data), block_szx) - self._update_progress_bar(request.remote.addr, self.clients[request.remote], block_num, @@ -262,6 +261,13 @@ def _upload(self, remote, bitmap): logger.debug("Uploading resource {} block {} to {}".format(resource.path, num, remote.addr)) + total_block_count = _block_count(len(resource.data), ThreadDfuServer.BLOCK_SZX) + + self._update_progress_bar(remote.addr, + self.clients[remote], + num, + total_block_count) + self._send_block(remote, resource.path, num, @@ -269,6 +275,9 @@ def _upload(self, remote, bitmap): ThreadDfuServer.BLOCK_SZX, payload) + if (self.clients[remote].last_block is None) or (self.clients[remote].last_block < num): + self.clients[remote].last_block = num + self.bmp_received_event.clear() if len(bitmap): if (num % ThreadDfuServer.SPBLK_SIZE == 0) or (((num + 1) % ThreadDfuServer.SPBLK_SIZE) == 0): @@ -354,6 +363,8 @@ def _multicast_upload(self, remote, num_of_requests): self.missing_blocks.extend(_make_bitmap(self.init_resource)) self.missing_blocks.extend(_make_bitmap(self.image_resource)) + self.clients[remote] = ThreadDfuClient() + self._send_trigger(remote, num_of_requests) self.trig_done_event.wait() diff --git a/nordicsemi/thread/tncp.py b/nordicsemi/thread/tncp.py index 5df03c4..2f484a8 100644 --- a/nordicsemi/thread/tncp.py +++ b/nordicsemi/thread/tncp.py @@ -170,6 +170,7 @@ def add_ip_address(self, ipaddr): logger.debug("Added") def print_addresses(self): + logger.info("NCP Thread IPv6 addresses:") for addr in self._wpan.get_ipaddrs(): logger.info(unicode(addr))