Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.
Upstream: https://github.com/ARMmbed/DAPLink
Diff: tools/make_update_yml.py
- Revision:
- 0:01f31e923fe2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/make_update_yml.py Tue Apr 07 12:55:42 2020 +0200 @@ -0,0 +1,176 @@ +# +# DAPLink Interface Firmware +# Copyright (c) 2009-2018, 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. +# + +import logging + +logging.basicConfig(format='Line: %(lineno)d %(message)s') +logger = logging.getLogger('yaml gen') +logger.setLevel(logging.DEBUG) + + +class DefaultList(list): + def sort(self, *args, **kwargs): + pass + +class TargetList(list): + def sort(self, *args, **kwargs): + pass + +class InstructionList(list): + def sort(self, *args, **kwargs): + pass + + +#instruction steps for firmware +InstructionsText = { + 'default':InstructionList([ + ('windows', [ + '1. Download the firmware file.', + '2. While holding down the boards reset button, connect the boards USB debug port to the computer. It should enumerate and mount as `BOOTLOADER` or `MAINTENANCE`. For boards that enumerate as `BOOTLOADER` [see our blog to determine if an update for the DAPLink bootloader is available.](https://os.mbed.com/blog/entry/DAPLink-bootloader-update/)', + '3. Drag-and-drop the firmware file onto the mounted drive.', + '4. Wait for the file copy operation to complete.', + '5. Power cycle the board. It will now enumerate and mount as `DAPLINK` or the name of the board.' + ]), + ('osx', [ + '1. Download the firmware file.', + '2. While holding down the boards reset button, connect the boards USB debug port to the computer. It should enumerate as `BOOTLOADER` or `MAINTENANCE`. For boards that enumerate as `BOOTLOADER` [see our blog to determine if an update for the DAPLink bootloader is available.](https://os.mbed.com/blog/entry/DAPLink-bootloader-update/)', + '3. In a terminal execute', + ' - `sudo mount -u -w -o sync /Volumes/MAINTENANCE ; cp -X <path to firmware file> /Volumes/MAINTENANCE/`', + ' - Note: If your drive does not mount as `MAINTENANCE` make sure to change this to match the name of the mounted disk attached to your system.', + '4. Wait for the file copy operation to complete.', + '5. Power cycle the board. It will now enumerate and mount as `DAPLINK` or the name of the board.' + ]), + ('linux', [ + '1. Download the firmware file.', + '2. While holding down the boards reset button, connect the boards USB debug port to the computer. It should enumerate as `BOOTLOADER` or `MAINTENANCE`. For boards that enumerate as `BOOTLOADER` [see our blog to determine if an update for the DAPLink bootloader is available.](https://os.mbed.com/blog/entry/DAPLink-bootloader-update/)', + '3. In a terminal execute', + ' - `cp <path to firmware file> <MAINTENANCE> && sync`', + ' - Note: make sure to change `MAINTENANCE` to the name of the mount point of the drive on your system.', + '4. Power cycle the board. It will now enumerate and mount as `DAPLINK` or the name of the board.' + ]) + ]), + 'lpc11u35':InstructionList([ + ('windows', [ + '1. Download the firmware file.', + '2. While holding down the boards reset button, connect the boards USB debug port to the computer. It should enumerate and mount as `CRP DISABLD`', + '3. Delete the file named `firmware.bin`, then drag and drop or copy the new bin file', + '4. Wait for the file copy operation to complete.', + '5. Power cycle the board. It will now enumerate and mount as `DAPLINK` or the name of the board.' + ]), + ('osx', [ + '1. Download the firmware file.', + '2. While holding down the boards reset button, connect the boards USB debug port to the computer. It should enumerate and mount as `CRP DISABLD`', + '3. Delete the file named `firmware.bin`', + '4. In a terminal execute', + ' - `sudo mount -u -w -o sync /Volumes/CRP\ DISABLD ; rm /Volumes/CRP\ DISABLD/firmware.bin && cp -X <path to firmware file> /Volumes/CRP\ DISABLD/`', + '5. Wait for the file copy operation to complete.', + '6. Power cycle the board. It will now enumerate and mount as `DAPLINK` or the name of the board.' + ]), + ('linux', [ + '1. Download the firmware file.', + '2. While holding down the boards reset button, connect the boards USB debug port to the computer. It should enumerate and mount as `CRP DISABLD`', + '3. Delete the file named `firmware.bin`', + '4. In a terminal execute', + ' - `cp <path to firmware file> <CRP DISABLD> && sync`', + ' - Note: make sure to change `CRP DISABLD` to the name of the mount point on your system.', + '5. Power cycle the board. It will now enumerate and mount as `DAPLINK` or the name of the board.' + ]) + ]) + +} + + +def string_writer(element): + if type(element) is str: + return element + elif type(element) is int: + return "_0x%04i" % element + else: + return None + + +def yml_object_parser(f, entry, level, tabs): + header = " " * level * tabs + if type(entry) is list: + for element in entry: + yml_object_parser(f, element, level, tabs); + + elif type(entry) is dict: + for key in entry: + f.write('-' + ' ' * (level * tabs -1) + string_writer(key) + ": "); + value = string_writer(entry[key]) + if value is not None: + f.write(value) + f.write('\n') + else: + f.write('\n') + yml_object_parser(f, entry[key], level + 1, tabs); + + + elif type(entry) is DefaultList: + for target in entry: + if type(target) is tuple: + #print target + f.write(" " * level * tabs + string_writer(target[0]) + ": "); + value = string_writer(target[1]) + if value is not None: + f.write(value) + f.write('\n') + else: + f.write('\n') + yml_object_parser(f, target[1], level + 1, tabs); + else: + logger.error("Not expecting input type %s %s " % (type(target), str(target))) + + elif type(entry) is TargetList: + #print "found TargetList" + for target in entry: + if type(target) is tuple: + #print target + f.write(" " * (level-1) * tabs + string_writer(target[0]) + ": "); + value = string_writer(target[1]) + if value is not None: + f.write(value) + f.write('\n') + else: + f.write('\n') + yml_object_parser(f, target[1], level, tabs); + else: + logger.error("Not expecting input type %s %s " % (type(target), str(target))) + + elif type(entry) is InstructionList: + #print "found InstructionList" + for target in entry: + if type(target) is tuple: + f.write(" " * level * tabs + string_writer(target[0]) + ": |\n") + if type(target[1]) is list: + for texts in target[1]: + f.write(" " * (level + 1) * tabs + string_writer(texts) + "\n") + else: + logger.error("Not expecting input type %s %s " % (type(target[1]), str(target[1]))) + else: + logger.error("Not expecting input type %s %s " % (type(target), str(target))) + else: + logger.error("Not expecting input type %s %s " % (type(entry), str(entry))) + + +def make_update_yml_file(file_loc, entries, explicit_start=False, tab=2): + with open(file_loc, "w") as yml_file: + if explicit_start is True: + yml_file.write("---\n") + yml_object_parser(yml_file, entries, 1, tab);