Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.

Upstream: https://github.com/ARMmbed/DAPLink

Revision:
0:01f31e923fe2
diff -r 000000000000 -r 01f31e923fe2 test/target.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/target.py	Tue Apr 07 12:55:42 2020 +0200
@@ -0,0 +1,162 @@
+#
+# DAPLink Interface Firmware
+# Copyright (c) 2009-2016, ARM Limited, All Rights Reserved
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+ 
+from __future__ import absolute_import
+import os
+import time
+import info
+import mbedapi
+from test_info import TestInfoStub
+from intelhex import IntelHex
+
+TEST_REPO = 'https://developer.mbed.org/users/c1728p9/code/daplink-validation/'
+
+
+def load_target_bundle(directory):
+    return TargetBundle(directory)
+
+
+class TargetBundle(object):
+
+    def __init__(self, directory):
+        dir_contents = os.listdir(directory)
+        name_to_target = {}
+        for name in dir_contents:
+            base_name, extension = os.path.splitext(name)
+            path = directory + os.sep + name
+            if os.path.isdir(path):
+                # Directories are unused
+                pass
+            elif os.path.isfile(path):
+                if extension not in ('.bin', '.hex'):
+                    continue
+                if base_name not in name_to_target:
+                    name_to_target[base_name] = Target(base_name)
+                if extension == '.bin':
+                    name_to_target[base_name].set_bin_path(path)
+                elif extension == '.hex':
+                    name_to_target[base_name].set_hex_path(path)
+                else:
+                    # Unsupported file type
+                    pass
+            else:
+                assert False
+        all_targets = list(name_to_target.values())
+        self._target_list = [target for target in all_targets if target.valid]
+
+    def get_target_list(self):
+        """Return the target objects associated with this bundle"""
+        return self._target_list
+
+
+def build_target_bundle(directory, username, password, parent_test=None):
+    """Build target firmware package"""
+    if parent_test is None:
+        parent_test = TestInfoStub()
+    target_names = info.TARGET_WITH_COMPILE_API_LIST
+    for build_name in target_names:
+        name_base = os.path.normpath(directory + os.sep + build_name)
+        target_hex_path = name_base + '.hex'
+        target_bin_path = name_base + '.bin'
+
+        # Build target test image
+        test_info = parent_test.create_subtest('Building target %s' %
+                                               build_name)
+        if not os.path.isdir(directory):
+            os.mkdir(directory)
+        # Remove previous build files
+        if os.path.isfile(target_hex_path):
+            os.remove(target_hex_path)
+        if os.path.isfile(target_bin_path):
+            os.remove(target_bin_path)
+        test_info.info('Starting remote build')
+        start = time.time()
+        built_file = mbedapi.build_repo(username, password,
+                                        TEST_REPO, build_name,
+                                        directory)
+        stop = time.time()
+        test_info.info("Build took %s seconds" % (stop - start))
+        extension = os.path.splitext(built_file)[1].lower()
+        assert extension == '.hex' or extension == '.bin'
+        if extension == '.hex':
+            intel_hex = IntelHex(built_file)
+            # Only supporting devices with the starting
+            # address at 0 currently
+            assert intel_hex.minaddr() == 0
+            intel_hex.tobinfile(target_bin_path)
+            os.rename(built_file, target_hex_path)
+        if extension == '.bin':
+            intel_hex = IntelHex()
+            intel_hex.loadbin(built_file, offset=0)
+            intel_hex.tofile(target_hex_path, 'hex')
+            os.rename(built_file, target_bin_path)
+
+        # Assert that required files are present
+        assert os.path.isfile(target_hex_path)
+        assert os.path.isfile(target_bin_path)
+
+
+class Target(object):
+
+    def __init__(self, name, hex_path=None, bin_path=None):
+        self._name = name
+        self._valid = False
+        self._hex_path = None
+        self._bin_path = None
+        if hex_path is not None:
+            self.set_hex_path(hex_path)
+        if bin_path is not None:
+            self.set_bin_path(bin_path)
+        self._valid = True
+
+    def __str__(self):
+        return "Name=%s" % self.name
+
+    def set_hex_path(self, path):
+        base_name = os.path.basename(path)
+        assert self._hex_path is None
+        assert base_name == self._name + '.hex'
+        path = os.path.abspath(path)
+        assert os.path.isfile(path)
+        self._hex_path = path
+
+    def set_bin_path(self, path):
+        base_name = os.path.basename(path)
+        assert self._bin_path is None
+        assert base_name == self._name + '.bin'
+        path = os.path.abspath(path)
+        assert os.path.isfile(path)
+        self._bin_path = path
+
+    @property
+    def valid(self):
+        hex_valid = self._hex_path is not None
+        bin_valid = self._bin_path is not None
+        return hex_valid and bin_valid and self._valid
+
+    @property
+    def name(self):
+        return self._name
+
+    @property
+    def hex_path(self):
+        return self._hex_path
+
+    @property
+    def bin_path(self):
+        return self._bin_path