# Blueport specific init.rc

# When ro.vendor.factory=1, add vendor/bin/factory to default path
on init && property:ro.vendor.factory=1
    export PATH /product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin:/vendor/bin/factory
    import /vendor/etc/init/hw/init.factory.rc

on init
    # logbuffer
    chown system system /dev/logbuffer_2-0057
    chown system system /dev/logbuffer_6-0057
    # register/nvmem dump
    chown system system /sys/bus/nvmem/devices/5-00500/nvmem
    # NFC streset tool name
    setprop persist.vendor.nfc.streset libstreset21
    setprop persist.vendor.se.streset libstreset21

on early-boot
    # Wait for insmod_sh to finish all common modules
    wait_for_prop vendor.common.modules.ready 1
    start insmod_sh_blueport

# Overrides fingerprint antispoof if following persist sysprops are set
on boot && property:ro.build.type=userdebug && \
           property:persist.vendor.fingerprint.disable.fake.override=0
    setprop vendor.fingerprint.disable.fake ${persist.vendor.fingerprint.disable.fake.override}

on boot && property:ro.build.type=userdebug && \
           property:persist.vendor.fingerprint.disable.fake.override=1
    setprop vendor.fingerprint.disable.fake ${persist.vendor.fingerprint.disable.fake.override}

on boot && property:ro.build.type=userdebug && \
           property:persist.vendor.fingerprint.disable.fake.override=100
    setprop vendor.fingerprint.disable.fake ${persist.vendor.fingerprint.disable.fake.override}

service insmod_sh_blueport /vendor/bin/init.insmod.sh /vendor/etc/init.insmod.${ro.hardware}.cfg
    class main
    user root
    group root system
    disabled
    oneshot

on boot && property:ro.vendor.factory=1
    # FTM log folder
    mkdir /data/ftmlog 0775 system system

    # Audio test folder
    mkdir /data/AudioTest 0775 system system
