1*90c8c64dSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project 2*90c8c64dSAndroid Build Coastguard Worker# 3*90c8c64dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*90c8c64dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*90c8c64dSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*90c8c64dSAndroid Build Coastguard Worker# 7*90c8c64dSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*90c8c64dSAndroid Build Coastguard Worker# 9*90c8c64dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*90c8c64dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*90c8c64dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*90c8c64dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*90c8c64dSAndroid Build Coastguard Worker# limitations under the License. 14*90c8c64dSAndroid Build Coastguard Worker 15*90c8c64dSAndroid Build Coastguard Workerscript_name="${0##*/}" 16*90c8c64dSAndroid Build Coastguard Workerscript_dir="${0%/*}" 17*90c8c64dSAndroid Build Coastguard Worker 18*90c8c64dSAndroid Build Coastguard Worker# Exit with 1 with printing a given message on stderr. 19*90c8c64dSAndroid Build Coastguard Workerfunction die() { 20*90c8c64dSAndroid Build Coastguard Worker echo "$script_name: ERROR: $@" 1>&2 21*90c8c64dSAndroid Build Coastguard Worker exit 1 22*90c8c64dSAndroid Build Coastguard Worker} 23*90c8c64dSAndroid Build Coastguard Worker 24*90c8c64dSAndroid Build Coastguard Worker# Print a given message on stderr. 25*90c8c64dSAndroid Build Coastguard Workerfunction warn() { 26*90c8c64dSAndroid Build Coastguard Worker echo "$script_name: WARN: $@" 1>&2 27*90c8c64dSAndroid Build Coastguard Worker} 28*90c8c64dSAndroid Build Coastguard Worker 29*90c8c64dSAndroid Build Coastguard Worker# Print a given message on stderr. 30*90c8c64dSAndroid Build Coastguard Workerfunction info() { 31*90c8c64dSAndroid Build Coastguard Worker echo "$script_name: $@" 1>&2 32*90c8c64dSAndroid Build Coastguard Worker} 33*90c8c64dSAndroid Build Coastguard Worker 34*90c8c64dSAndroid Build Coastguard Worker# Wrapper around "adb". 35*90c8c64dSAndroid Build Coastguard Workerfunction do_adb() { 36*90c8c64dSAndroid Build Coastguard Worker adb $ADB_OPTIONS "$@" 37*90c8c64dSAndroid Build Coastguard Worker} 38*90c8c64dSAndroid Build Coastguard Worker 39*90c8c64dSAndroid Build Coastguard Worker# Return the timestamp of the most recent log line, which can be later used with logcat -t or -T. 40*90c8c64dSAndroid Build Coastguard Workerfunction get_last_logcat_timestamp() { 41*90c8c64dSAndroid Build Coastguard Worker # Output will be like this. Extract the timestamp. 42*90c8c64dSAndroid Build Coastguard Worker #--------- beginning of main 43*90c8c64dSAndroid Build Coastguard Worker #06-14 00:04:43.909 3993 3993 E QtiImsExtUtils: isCarrierConfigEnabled bundle is null 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker do_adb logcat -t 1 | awk '(match($0, "^[0-9]")){print $1 " " $2}' 46*90c8c64dSAndroid Build Coastguard Worker} 47*90c8c64dSAndroid Build Coastguard Worker 48*90c8c64dSAndroid Build Coastguard Worker# If $1 is a number, just print it. Otherwise use adb shell pidof to try to resolve it into a pid. 49*90c8c64dSAndroid Build Coastguard Workerfunction resolve_pid() { 50*90c8c64dSAndroid Build Coastguard Worker local name="$1" 51*90c8c64dSAndroid Build Coastguard Worker 52*90c8c64dSAndroid Build Coastguard Worker if [[ -z "$name" ]] ;then 53*90c8c64dSAndroid Build Coastguard Worker return 1 54*90c8c64dSAndroid Build Coastguard Worker fi 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Worker if [[ "$name" =~ ^[0-9]+$ ]] ; then 57*90c8c64dSAndroid Build Coastguard Worker echo "$name" 58*90c8c64dSAndroid Build Coastguard Worker return 0 59*90c8c64dSAndroid Build Coastguard Worker fi 60*90c8c64dSAndroid Build Coastguard Worker local pid="$(do_adb shell pidof "$name")" 61*90c8c64dSAndroid Build Coastguard Worker if [[ -z "$pid" ]] ; then 62*90c8c64dSAndroid Build Coastguard Worker die "unknown process: $name" 63*90c8c64dSAndroid Build Coastguard Worker fi 64*90c8c64dSAndroid Build Coastguard Worker echo "$pid" 65*90c8c64dSAndroid Build Coastguard Worker} 66*90c8c64dSAndroid Build Coastguard Worker 67*90c8c64dSAndroid Build Coastguard Worker# Find available local port. Optionally take the starting port from $1. 68*90c8c64dSAndroid Build Coastguard Workerfunction find_open_port() { 69*90c8c64dSAndroid Build Coastguard Worker local port="${1:-10000}" # Take the start port from $1 with 10000 as the default. 70*90c8c64dSAndroid Build Coastguard Worker 71*90c8c64dSAndroid Build Coastguard Worker while true; do 72*90c8c64dSAndroid Build Coastguard Worker if netstat -an | grep -qw "$port"; then 73*90c8c64dSAndroid Build Coastguard Worker port=$(( $port + 1 )) 74*90c8c64dSAndroid Build Coastguard Worker continue 75*90c8c64dSAndroid Build Coastguard Worker fi 76*90c8c64dSAndroid Build Coastguard Worker break # Found 77*90c8c64dSAndroid Build Coastguard Worker done 78*90c8c64dSAndroid Build Coastguard Worker 79*90c8c64dSAndroid Build Coastguard Worker echo "$port" 80*90c8c64dSAndroid Build Coastguard Worker} 81*90c8c64dSAndroid Build Coastguard Worker 82*90c8c64dSAndroid Build Coastguard Worker# Create a temp file name with a timestamp. 83*90c8c64dSAndroid Build Coastguard Workerfunction make_temp_file() { 84*90c8c64dSAndroid Build Coastguard Worker local suffix="$1" 85*90c8c64dSAndroid Build Coastguard Worker local dir="${TMPDIR:-${TEMP:-/tmp}}" 86*90c8c64dSAndroid Build Coastguard Worker 87*90c8c64dSAndroid Build Coastguard Worker while true; do 88*90c8c64dSAndroid Build Coastguard Worker local file="$dir/temp-$(date '+%Y%m%d-%H%M%S')-$$$suffix" 89*90c8c64dSAndroid Build Coastguard Worker if ! [[ -e "$file" ]] ; then 90*90c8c64dSAndroid Build Coastguard Worker touch "$file" # Note it's a bit racy.. 91*90c8c64dSAndroid Build Coastguard Worker echo "$file" 92*90c8c64dSAndroid Build Coastguard Worker return 0 93*90c8c64dSAndroid Build Coastguard Worker fi 94*90c8c64dSAndroid Build Coastguard Worker sleep 0.5 # Ugh. 95*90c8c64dSAndroid Build Coastguard Worker done 96*90c8c64dSAndroid Build Coastguard Worker}