| Index: devil/devil/utils/battor_device_mapping.py
|
| diff --git a/devil/devil/utils/battor_device_mapping.py b/devil/devil/utils/battor_device_mapping.py
|
| index b41e71e08343ede7178d0a15bb1b4c4e886326d5..901d3794d114f7de8b750571d0a6b496c9d0ba90 100644
|
| --- a/devil/devil/utils/battor_device_mapping.py
|
| +++ b/devil/devil/utils/battor_device_mapping.py
|
| @@ -3,6 +3,79 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +
|
| +'''
|
| +This script provides tools to map BattOrs to phones.
|
| +
|
| +Phones are identified by the following string:
|
| +
|
| +"Phone serial number" - Serial number of the phone. This can be
|
| +obtained via 'adb devices' or 'usb-devices', and is not expected
|
| +to change for a given phone.
|
| +
|
| +BattOrs are identified by the following two strings:
|
| +
|
| +"BattOr serial number" - Serial number of the BattOr. This can be
|
| +obtained via 'usb-devices', and is not expected to change for
|
| +a given BattOr.
|
| +
|
| +"BattOr path" - The path of the form '/dev/ttyUSB*' that is used
|
| +to communicate with the BattOr (the battor_agent binary takes
|
| +this BattOr path as a parameter). The BattOr path is frequently
|
| +reassigned by the OS, most often when the device is disconnected
|
| +and then reconnected. Thus, the BattOr path cannot be expected
|
| +to be stable.
|
| +
|
| +In a typical application, the user will require the BattOr path
|
| +for the BattOr that is plugged into a given phone. For instance,
|
| +the user will be running tracing on a particular phone, and will
|
| +need to know which BattOr path to use to communicate with the BattOr
|
| +to get the corresponding power trace.
|
| +
|
| +Getting this mapping requires two steps: (1) determining the
|
| +mapping between phone serial numbers and BattOr serial numbers, and
|
| +(2) getting the BattOr path corresponding to a given BattOr serial
|
| +number.
|
| +
|
| +For step (1), we generate a JSON file giving this mapping. This
|
| +JSON file consists of a list of items of the following form:
|
| +[{'phone': <phone serial 1>, 'battor': <battor serial 1>},
|
| +{'phone': <phone serial 2>, 'battor': <battor serial 2>}, ...]
|
| +
|
| +The default way to generate this JSON file is using the function
|
| +GenerateSerialMapFile, which generates a mapping based on assuming
|
| +that the system has two identical USB hubs connected to it, and
|
| +the phone plugged into physical port number 1 on one hub corresponds
|
| +to the BattOr plugged into physical port number 1 on the other hub,
|
| +and similarly with physical port numbers 2, 3, etc. This generates
|
| +the map file based on the structure at the time GenerateSerialMapFile called.
|
| +Note that after the map file is generated, port numbers are no longer used;
|
| +the user could move around the devices in the ports without affecting
|
| +which phone goes with which BattOr. (Thus, if the user wanted to update the
|
| +mapping to match the new port connections, the user would have to
|
| +re-generate this file.)
|
| +
|
| +The script update_mapping.py will do this updating from the command line.
|
| +
|
| +If the user wanted to specify a custom mapping, the user could instead
|
| +create the JSON file manually. (In this case, hubs would not be necessary
|
| +and the physical ports connected would be irrelevant.)
|
| +
|
| +Step (2) is conducted through the function GetBattorPathFromPhoneSerial,
|
| +which takes a serial number mapping generated via step (1) and a phone
|
| +serial number, then gets the corresponding BattOr serial number from the
|
| +map and determines its BattOr path (e.g. /dev/ttyUSB0). Since BattOr paths
|
| +can change if devices are connected and disconnected (even if connected
|
| +or disconnected via the same port) this function should be called to
|
| +determine the BattOr path every time before connecting to the BattOr.
|
| +
|
| +Note that if there is only one BattOr connected to the system, then
|
| +GetBattorPathFromPhoneSerial will always return that BattOr and will ignore
|
| +the mapping file. Thus, if the user never has more than one BattOr connected
|
| +to the system, the user will not need to generate mapping files.
|
| +'''
|
| +
|
| +
|
| import json
|
| import collections
|
|
|
| @@ -10,6 +83,7 @@ from devil import base_error
|
| from devil.utils import find_usb_devices
|
| from devil.utils import usb_hubs
|
|
|
| +
|
| def GetBattorList(device_tree_map):
|
| return [x for x in find_usb_devices.GetTTYList()
|
| if IsBattor(x, device_tree_map)]
|
|
|