| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/usr/bin/env python3
- # Copyright (c) 2021 Project CHIP Authors
- #
- # 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.
- """Flash an CYW30739 device.
- This is layered so that a caller can perform individual operations
- through an `Flasher` instance, or operations according to a command line.
- For `Flasher`, see the class documentation.
- """
- import sys
- import firmware_utils
- # Additional options that can be use to configure an `Flasher`
- # object (as dictionary keys) and/or passed as command line options.
- CYW30739_OPTIONS = {
- # Configuration options define properties used in flashing operations.
- "configuration": {
- "direct": {
- "help": "Set 1 to enable direct load",
- "default": 0,
- "argparse": {"action": "store"},
- },
- "sdk_scripts_dir": {
- "help": "The SDK scripts directory",
- "default": None,
- "argparse": {"action": "store"},
- },
- "sdk_tools_dir": {
- "help": "The SDK tools directory",
- "default": None,
- "argparse": {"action": "store"},
- },
- "program": {
- "help": "The script to program the flash.",
- "command": [
- "bash",
- "--norc",
- "--noprofile",
- "{sdk_scripts_dir}/bt_program.bash",
- "--tools={sdk_tools_dir}",
- "--scripts={sdk_scripts_dir}",
- "--elf={application}",
- "--direct={direct}",
- (),
- ],
- },
- "port": {
- "help": "The serial port of device to flash",
- "default": None,
- "argparse": {},
- },
- },
- }
- class Flasher(firmware_utils.Flasher):
- """Manage CYW30739 flashing."""
- def __init__(self, **options):
- super().__init__(platform="CYW30739", module=__name__, **options)
- self.define_options(CYW30739_OPTIONS)
- def erase(self):
- """Not supported"""
- self.log(0, "Do not support erasing device.")
- self.err = 1
- return self
- def verify(self):
- """Not supported"""
- self.log(0, "Do not support verifying image.")
- self.err = 1
- return self
- def flash(self):
- """Flash image."""
- arguments = [
- "--hex={}/{}_download.hex".format(
- self.option.application.parent, self.option.application.stem
- ),
- ]
- if self.option.port:
- arguments.append("--uart={port}")
- if self.option.verbose > 0:
- arguments.append("--verbose")
- return self.run_tool("program", arguments, name="Flash")
- def reset(self):
- """Not supported"""
- self.log(0, "Do not support resetting device.")
- self.err = 1
- return self
- def actions(self):
- """Perform actions on the device according to self.option."""
- self.log(3, "Options:", self.option)
- if self.option.erase:
- if self.erase().err:
- return self
- if self.option.verify_application:
- if self.verify().err:
- return self
- if self.option.reset:
- if self.reset().err:
- return self
- if self.option.application:
- if self.flash().err:
- return self
- return self
- if __name__ == "__main__":
- sys.exit(Flasher().flash_command(sys.argv))
|