From 4cd824325b14b679a244fb665a8e2c4bd1d16b50 Mon Sep 17 00:00:00 2001 From: Albert I Date: Mon, 21 Jun 2021 23:55:13 +0800 Subject: [PATCH] sm6375-common: Set Bluetooth MAC address using persist property The idea is to allow us to not depend on stock QTI Bluetooth HAL, as MAC addresses fetched from NVRAM by nv_mac script will be saved as hex-encoded files. We can decode back saved files to then the Bluetooth one be set using persist property so it can be read by Bluetooth HAL. This is loosely based on similar techniques used on Mi 9 and ZenFone Max Pro M2. Signed-off-by: Albert I Change-Id: I74d07c3c3125a04962c37fe8bfcc8385d1fd3398 --- holi.mk | 1 + rootdir/Android.mk | 9 +++++++++ rootdir/bin/init.mi.btmac.sh | 21 +++++++++++++++++++++ rootdir/etc/init.target.rc | 10 ++++++++++ sepolicy/vendor/file_contexts | 3 +++ sepolicy/vendor/vendor_qti_init_shell.te | 4 ++++ 6 files changed, 48 insertions(+) create mode 100755 rootdir/bin/init.mi.btmac.sh create mode 100644 sepolicy/vendor/vendor_qti_init_shell.te diff --git a/holi.mk b/holi.mk index 756dc38..188721b 100644 --- a/holi.mk +++ b/holi.mk @@ -375,6 +375,7 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ init.batterysecret.rc \ init.class_main.sh \ + init.mi.btmac.sh \ init.kernel.post_boot.sh \ init.kernel.post_boot-blair.sh \ init.kernel.post_boot-holi.sh \ diff --git a/rootdir/Android.mk b/rootdir/Android.mk index fce29dd..7552c69 100644 --- a/rootdir/Android.mk +++ b/rootdir/Android.mk @@ -9,6 +9,15 @@ LOCAL_SRC_FILES := bin/init.class_main.sh LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES) include $(BUILD_PREBUILT) +include $(CLEAR_VARS) +LOCAL_MODULE := init.mi.btmac.sh +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := ETC +LOCAL_SRC_FILES := bin/init.mi.btmac.sh +LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES) +include $(BUILD_PREBUILT) + + include $(CLEAR_VARS) LOCAL_MODULE := init.kernel.post_boot.sh LOCAL_MODULE_TAGS := optional diff --git a/rootdir/bin/init.mi.btmac.sh b/rootdir/bin/init.mi.btmac.sh new file mode 100755 index 0000000..66ec4b2 --- /dev/null +++ b/rootdir/bin/init.mi.btmac.sh @@ -0,0 +1,21 @@ +#!/vendor/bin/sh +# Copyright (C) 2021 KudProject Development +# SPDX-License-Identifier: GPL-3.0-or-later OR Apache-2.0 + +LOG_TAG="MiSetBtMac" +logi () { log -t "$LOG_TAG" -p i "$@"; } + +# hex binary containing mac address +BT_MAC_HEX_PATH="/data/vendor/mac_addr/bt.mac"; +if [ ! -f "$BT_MAC_HEX_PATH" ]; then + logi "bt.mac file not found, exiting" + exit +fi + +# raw mac address without colons +RAW_MAC=$(xxd -p "$BT_MAC_HEX_PATH"); +# convert it into format recognized by bluetooth hal +DEC_MAC=$(echo "$RAW_MAC" | sed 's!^M$!!;s!\-!!g;s!\.!!g;s!\(..\)!\1:!g;s!:$!!') +# set the mac address using persist property +setprop persist.vendor.service.bdroid.bdaddr "$DEC_MAC" +logi "bt.mac file found, setting mac addr" diff --git a/rootdir/etc/init.target.rc b/rootdir/etc/init.target.rc index 913f981..2156cd3 100644 --- a/rootdir/etc/init.target.rc +++ b/rootdir/etc/init.target.rc @@ -259,6 +259,16 @@ service svi_on /vendor/bin/ppd "svi:on" oneshot disabled +on property:init.svc.vendor.nv_mac=stopped + start vendor.btmac-sh + +service vendor.btmac-sh /vendor/bin/init.mi.btmac.sh + class late_start + user system + group system bluetooth wifi + oneshot + disabled + on property:ro.vendor.display.svi=1 && property:sys.boot_completed=1 start svi_on diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts index 83b054e..7afaa3a 100644 --- a/sepolicy/vendor/file_contexts +++ b/sepolicy/vendor/file_contexts @@ -9,6 +9,9 @@ /vendor/bin/batterysecret u:object_r:batterysecret_exec:s0 /mnt/vendor/persist/subsys(/.*)? u:object_r:persist_subsys_file:s0 +# Bluetooth +/vendor/bin/init\.mi\.btmac\.sh u:object_r:vendor_qti_init_shell_exec:s0 + # Camera /mnt/vendor/persist/camera(/.*)? u:object_r:camera_persist_file:s0 diff --git a/sepolicy/vendor/vendor_qti_init_shell.te b/sepolicy/vendor/vendor_qti_init_shell.te new file mode 100644 index 0000000..1b25678 --- /dev/null +++ b/sepolicy/vendor/vendor_qti_init_shell.te @@ -0,0 +1,4 @@ +# allow init.mi.btmac.sh to read hex-encoded mac address and set it +allow vendor_qti_init_shell vendor_bluetooth_prop:property_service set; +allow vendor_qti_init_shell vendor_wifi_vendor_data_file:dir search; +allow vendor_qti_init_shell vendor_wifi_vendor_data_file:file r_file_perms;