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;