Source code for adb.fastboot_debug

#!/usr/bin/env python
# Copyright 2014 Google Inc. All rights reserved.
#
# 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.

"""Fastboot in python.

Call it similar to how you call android's fastboot, but this only accepts usb paths and no serials.


.. rubric:: Contents

* :func:`_InfoCb`
* :func:`Devices`

"""

import argparse
import inspect
import logging
import sys

from adb import common_cli
from adb import fastboot

try:
    import progressbar
except ImportError:
    # progressbar is optional.
    progressbar = None


[docs]def Devices(): """Lists the available devices. :: List of devices attached 015DB7591102001A device .. seealso:: :meth:`adb.fastboot.FastbootCommands.Devices` .. image:: _static/adb.fastboot_debug.Devices.CALLER_GRAPH.svg Returns ------- int 0 """ for device in fastboot.FastbootCommands.Devices(): print('%s\tdevice' % device.serial_number) return 0
[docs]def _InfoCb(message): """Print a message to stdout. Parameters ---------- message : adb.fastboot.FastbootMessage A :class:`~adb.fastboot.FastbootMessage` with ``header`` and ``message`` attributes """ # Use an unbuffered version of stdout. if not message.message: return sys.stdout.write('%s: %s\n' % (message.header, message.message)) sys.stdout.flush()
[docs]def main(): """TODO""" common = common_cli.GetCommonArguments() device = common_cli.GetDeviceArguments() device.add_argument('--chunk_kb', type=int, default=1024, metavar='1024', help='Size of packets to write in Kb. For older devices, it may be required to use 4.') parents = [common, device] parser = argparse.ArgumentParser(description=sys.modules[__name__].__doc__, parents=[common]) subparsers = parser.add_subparsers(title='Commands', dest='command_name') subparser = subparsers.add_parser(name='help', help='Prints the commands available') # pylint: disable=unused-variable subparser = subparsers.add_parser(name='devices', help='Lists the available devices', parents=[common]) # noqa: F841 common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Continue) common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Download, {'source_file': 'Filename on the host to push'}) common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Erase) common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Flash) common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Getvar) common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Oem) common_cli.MakeSubparser(subparsers, parents, fastboot.FastbootCommands.Reboot) if len(sys.argv) == 1: parser.print_help() return 2 args = parser.parse_args() if args.verbose: logging.basicConfig(level=logging.DEBUG) if args.command_name == 'devices': return Devices() if args.command_name == 'help': parser.print_help() return 0 kwargs = {} argspec = inspect.getfullargspec(args.method) if 'info_cb' in argspec.args: kwargs['info_cb'] = _InfoCb if 'progress_callback' in argspec.args and progressbar: bar = progressbar.ProgessBar(widgets=[progressbar.Bar(), progressbar.Percentage()]) # pylint: disable=blacklisted-name bar.start() def SetProgress(current, total): bar.update(current / total * 100.0) if current == total: bar.finish() kwargs['progress_callback'] = SetProgress return common_cli.StartCli( args, fastboot.FastbootCommands, chunk_kb=args.chunk_kb, extra=kwargs)
if __name__ == '__main__': sys.exit(main())