12d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng#!/bin/bash 22d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 32d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# 42d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# Copyright 2015 The Android Open Source Project 52d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# 62d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# Licensed under the Apache License, Version 2.0 (the "License"); 72d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# you may not use this file except in compliance with the License. 82d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# You may obtain a copy of the License at 92d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# 102d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# http://www.apache.org/licenses/LICENSE-2.0 112d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# 122d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# Unless required by applicable law or agreed to in writing, software 132d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# distributed under the License is distributed on an "AS IS" BASIS, 142d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 152d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# See the License for the specific language governing permissions and 162d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# limitations under the License. 172d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# 182d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 192d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# Builds and pushes the test vendor library to a connected device and starts 202d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# logcat with project-specific tag filters. If the --test-channel flag is set, 212d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# logcat is started in a separate process and the test channel is run in the 228bb61fe28ac339276acf1b5b1616a6e56e2cccacDennis Cheng# current shell. The kTestChannelEnabled flag must be set in the vendor manager 238bb61fe28ac339276acf1b5b1616a6e56e2cccacDennis Cheng# if the test channel is to be used. Also ensure that 'lunch' has been run for 248bb61fe28ac339276acf1b5b1616a6e56e2cccacDennis Cheng# the appropriate device. 252d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 262d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Chengif [[ "$#" -ne 2 && "$#" -ne 4 ]]; then 272d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Usage:" 282d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "./build_and_run.sh [/path/to/aosp] [device_name] or" 292d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "./build_and_run.sh [/path/to/aosp] [device_name] --test-channel [port]" 302d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng exit 1 312d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Chengfi 322d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 332d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# Exit the script if any command fails. 342d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Chengset -e 352d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 362d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# The home directory for AOSP. 372d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengAOSP_ABS=$1 382d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# The name of the device to build for. 392d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengDEVICE=$2 402d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 412d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# The location of Bluetooth within AOSP. 422d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengBT_REL=/system/bt 432d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengBT_ABS=${AOSP_ABS}${BT_REL} 442d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 452d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# The location of the test vendor library. 462d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengTEST_VENDOR_LIB_REL=/vendor_libs/test_vendor_lib 472d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengTEST_VENDOR_LIB_ABS=${BT_ABS}${TEST_VENDOR_LIB_REL} 482d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 492d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengDEVICE_TARGET_REL=/out/target/product 502d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengDEVICE_TARGET_ABS=${AOSP_ABS}${DEVICE_TARGET_REL} 512d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 522d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengVENDOR_SYMBOLS_REL=/symbols/system/vendor/lib 532d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengVENDOR_SYMBOLS_ABS=${DEVICE_TARGET_ABS}/${DEVICE}/${VENDOR_SYMBOLS_REL} 542d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 552d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# The name of the object built by the test vendor library. 562d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengTEST_VENDOR_LIB=test-vendor.so 572d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng# The name of the regular vendor object to be replaced by $TEST_VENDOR_LIB. 582d96c88025c80d4d7e0e341cfdbf278596340b66Dennis ChengVENDOR_LIB=libbt-vendor.so 59bf7db3143fda4dc8391c92ec25dc93b9725ec225Dennis Cheng# The config file specifying controller properties. 60bf7db3143fda4dc8391c92ec25dc93b9725ec225Dennis ChengCONTROLLER_PROPERTIES=controller_properties.json 612d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 622d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Chengif [[ "$#" -eq 4 && $3 == "--test-channel" ]]; then 632d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng TEST_CHANNEL_PORT=$4 642d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng TEST_CHANNEL_REL=/scripts 652d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng TEST_CHANNEL_ABS=${TEST_VENDOR_LIB_ABS}${TEST_CHANNEL_REL} 662d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 672d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Start logcat in a subshell. 682d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng x-terminal-emulator -e "scripts/build_and_run.sh ${AOSP_ABS} ${DEVICE}" 692d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 702d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Setting up build environment." 712d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng cd ${AOSP_ABS} 722d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng source build/envsetup.sh 732d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 742d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Forward local port to the same port on the device. 752d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Forwarding port ${TEST_CHANNEL_PORT} to device." 762d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb forward tcp:${TEST_CHANNEL_PORT} tcp:${TEST_CHANNEL_PORT} 772d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 782d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Turn Bluetooth on. Requires user approval via a dialog on the device. 792d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Enabling Bluetooth. Please see dialog on device." 802d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE 812d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 822d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Start the test channel once Bluetooth is on and logcat has started. 832d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng read -p "Press [ENTER] once Bluetooth is enabling AND logcat has started." 842d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 852d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Start the test channel. 862d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng python ${TEST_CHANNEL_ABS}/test_channel.py localhost ${TEST_CHANNEL_PORT} 872d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Chengelse 882d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Setting up build environment." 892d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng cd ${AOSP_ABS} 902d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng source build/envsetup.sh 912d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 922d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Navigating to test vendor library: ${TEST_VENDOR_LIB_ABS}" 932d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng cd ${TEST_VENDOR_LIB_ABS} 942d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 952d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Building test vendor library." 962d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng mm 972d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 982d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Remounting device rootfs." 992d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb shell mount -o remount,rw / 1002d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb remount 1012d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 1022d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Replace the actual vendor library with the test vendor library. 1032d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng mv ${DEVICE_TARGET_ABS}/${DEVICE}/system/lib/${TEST_VENDOR_LIB} \ 1042d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng ${VENDOR_SYMBOLS_ABS}/${VENDOR_LIB} 1052d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 1062d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Push the test vendor library to the device. 1072d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Pushing the test vendor library to device: $DEVICE" 1082d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb push ${VENDOR_SYMBOLS_ABS}/${VENDOR_LIB} /vendor/lib 1092d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 110bf7db3143fda4dc8391c92ec25dc93b9725ec225Dennis Cheng echo "Pushing controller properties." 111bf7db3143fda4dc8391c92ec25dc93b9725ec225Dennis Cheng adb push ${TEST_VENDOR_LIB_ABS}/data/${CONTROLLER_PROPERTIES} /etc/bluetooth/ 112bf7db3143fda4dc8391c92ec25dc93b9725ec225Dennis Cheng 1132d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Pushing libevent." 1142d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb push ${DEVICE_TARGET_ABS}/${DEVICE}/system/lib/libevent.so /system/lib/ 1152d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 1162d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng echo "Pushing libchrome." 1172d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb push ${DEVICE_TARGET_ABS}/${DEVICE}/system/lib/libchrome.so /system/lib/ 1182d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 1192d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Clear logcat. 1202d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb logcat -c 1212d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng 1222d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng # Run logcat with filters. 1232d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng adb logcat bt_btif:D bt_btif_core:D bt_hci:D bt_main:D bt_vendor:D \ 1242d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Cheng bte_logmsg:D command_packet:D dual_mode_controller:D event_packet:D \ 1258bb61fe28ac339276acf1b5b1616a6e56e2cccacDennis Cheng hci_transport:D hci_handler:D packet:D packet_stream:D \ 1268bb61fe28ac339276acf1b5b1616a6e56e2cccacDennis Cheng test_channel_transport:D vendor_manager:D *:S 1272d96c88025c80d4d7e0e341cfdbf278596340b66Dennis Chengfi 128