initializing tree with aospdtgen just fr skeleton
This commit is contained in:
178
rootdir/bin/init.oem.fingerprint2.sh
Normal file
178
rootdir/bin/init.oem.fingerprint2.sh
Normal file
@ -0,0 +1,178 @@
|
||||
#!/vendor/bin/sh
|
||||
#
|
||||
# Start indicated fingerprint HAL service
|
||||
#
|
||||
# Copyright (c) 2019 Lenovo
|
||||
# All rights reserved.
|
||||
#
|
||||
# April 15, 2019 chengql2@lenovo.com Initial version
|
||||
# December 2, 2019 chengql2 Store fps_id into persist fs
|
||||
# November 19, 2020 zengzm refactor the code, support more than 3 fingerprint sensors; support config.
|
||||
|
||||
# get the filename, contains the file postfix
|
||||
script_name=${0##*/}
|
||||
# remove the file postfix
|
||||
script_name=${script_name%.*}
|
||||
function log {
|
||||
echo "$script_name: $*" > /dev/kmsg
|
||||
}
|
||||
|
||||
PROP_GKI_PATH=ro.vendor.mot.gki.path
|
||||
GKI_PATH=$(getprop $PROP_GKI_PATH)
|
||||
|
||||
# for new projects, only need to config varible vendor_list,kernel_so_list,kernel_so_name_list,hal_list
|
||||
# vendor_list: the array contains the sensor name, it will be used for system properties.
|
||||
# kernel_so_list: the array contains the kernel so's absolute path. It will be used at insmod.
|
||||
# kernel_so_name_list: the array contains the kernel so's name. It will be used at rmmod.
|
||||
# hal_list: the array contains the hal service name.
|
||||
#
|
||||
# note: all arrays should have the same size.
|
||||
vendor_list=('goodix' 'chipone')
|
||||
kernel_so_list=("/vendor/lib/modules/$GKI_PATH/goodix_fps_tee.ko" "/vendor/lib/modules/$GKI_PATH/fpsensor_mtk_spi.ko")
|
||||
kernel_so_name_list=("goodix_fps_tee.ko" "fpsensor_mtk_spi.ko")
|
||||
hal_list=('goodix_hal' 'chipone_fp_hal')
|
||||
last_vendor_index=`expr ${#vendor_list[@]} - 1`
|
||||
vendor_list_size=${#vendor_list[@]}
|
||||
|
||||
if [ $vendor_list_size != ${#kernel_so_list[@]} ]; then
|
||||
log "error, vendor_list.size is not equal to kernel_so_list"
|
||||
return 255
|
||||
fi
|
||||
|
||||
if [ $vendor_list_size != ${#kernel_so_name_list[@]} ]; then
|
||||
log "error, vendor_list.size is not equal to kernel_so_name_list"
|
||||
return 255
|
||||
fi
|
||||
|
||||
if [ $vendor_list_size != ${#hal_list[@]} ]; then
|
||||
log "error, vendor_list.size is not equal to hal_list"
|
||||
return 255
|
||||
fi
|
||||
|
||||
# At the current boot, what is the fingerprint sensor
|
||||
persist_fps_id=/mnt/vendor/persist/fps/vendor_id
|
||||
|
||||
# what is the fingerprint sensor successfully installed before.
|
||||
persist_fps_id2=/mnt/vendor/persist/fps/last_vendor_id
|
||||
|
||||
FPS_VENDOR_NONE=none
|
||||
MAX_TIMES=30
|
||||
|
||||
# this property store FPS_STATUS_NONE or FPS_STATUS_OK
|
||||
# after start fingerprint hal service, the hal service will set this property.
|
||||
prop_fps_status=vendor.hw.fingerprint.status
|
||||
|
||||
# use this to trigger init.mmi.rc
|
||||
prop_fps_ident=vendor.hw.fps.ident
|
||||
|
||||
# if $prop_fps_status=$FPS_STATUS_OK, then will set prop_persist_fps to the specific vendor name.
|
||||
prop_persist_fps=persist.vendor.hardware.fingerprint
|
||||
|
||||
FPS_STATUS_NONE=none
|
||||
FPS_STATUS_OK=ok
|
||||
|
||||
function find_vendor_index() {
|
||||
# param1: the specific vendor name
|
||||
# return: the vendor index in vendor_list. the valid index is from 0; if not found,return 255
|
||||
for temp_vendor_index in $(seq 0 $last_vendor_index)
|
||||
do
|
||||
if [ "${vendor_list[temp_vendor_index]}" = "$1" ]; then
|
||||
return $temp_vendor_index
|
||||
fi
|
||||
done
|
||||
return 255
|
||||
}
|
||||
|
||||
function start_hal_service(){
|
||||
# param1: the vendor index
|
||||
# return: 0 means success, will setprop $prop_persist_fps
|
||||
setprop $prop_fps_status $FPS_STATUS_NONE
|
||||
setprop $prop_fps_ident $FPS_STATUS_NONE
|
||||
|
||||
insmod ${kernel_so_list[$1]}
|
||||
sleep 1
|
||||
setprop $prop_fps_ident ${vendor_list[$1]}
|
||||
|
||||
log "start ${hal_list[$1]}"
|
||||
start ${hal_list[$1]}
|
||||
|
||||
for ii in $(seq 1 $MAX_TIMES)
|
||||
do
|
||||
sleep 0.1
|
||||
fps_status=$(getprop $prop_fps_status)
|
||||
# log "check fps vendor status: $fps_status"
|
||||
if [ $fps_status != $FPS_STATUS_NONE ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
log "fingerprint HAL status: $fps_status"
|
||||
if [ $fps_status == $FPS_STATUS_OK ]; then
|
||||
log "start ${hal_list[$1]} hal success"
|
||||
setprop $prop_persist_fps ${vendor_list[$1]}
|
||||
return 0
|
||||
fi
|
||||
|
||||
log "start ${hal_list[$1]} hal failed, remove kernel so: ${kernel_so_name_list[$1]} "
|
||||
setprop ctl.stop ${hal_list[$1]}
|
||||
rmmod ${kernel_so_name_list[$1]}
|
||||
sleep 0.1
|
||||
# if failed,return 255
|
||||
return 255
|
||||
}
|
||||
|
||||
# set last fingerprint sensor
|
||||
fps_vendor=$(cat $persist_fps_id)
|
||||
if [ -n "$fps_vendor" ] && [ "$fps_vendor" != $FPS_STATUS_NONE ]; then
|
||||
echo $fps_vendor > $persist_fps_id2
|
||||
fi
|
||||
|
||||
# get the identified fingerprint sensor
|
||||
fps_vendor2=$(cat $persist_fps_id2)
|
||||
if [ -z $fps_vendor2 ]; then
|
||||
fps_vendor2=$FPS_VENDOR_NONE
|
||||
fi
|
||||
log "FPS vendor (last): $fps_vendor2"
|
||||
|
||||
fps_vendor=$(cat $persist_fps_id)
|
||||
if [ -z $fps_vendor ]; then
|
||||
fps_vendor=$FPS_VENDOR_NONE
|
||||
fi
|
||||
log "FPS vendor (current): $fps_vendor"
|
||||
|
||||
vendor_index=255
|
||||
# try to start the most recent success launched sensor.
|
||||
if [ $fps_vendor != $FPS_STATUS_NONE ]; then
|
||||
find_vendor_index $fps_vendor
|
||||
vendor_index=$?
|
||||
if [ $vendor_index != 255 ]; then
|
||||
log "start $fps_vendor hal service"
|
||||
start_hal_service $vendor_index
|
||||
if [ $? != 255 ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# try all the fingerprint sensors
|
||||
for temp_vendor_index in $(seq 0 $last_vendor_index)
|
||||
do
|
||||
if [ $temp_vendor_index == $vendor_index ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ ! -e ${kernel_so_list[$temp_vendor_index]} ]; then
|
||||
log "does not exist ${kernel_so_list[$temp_vendor_index]},ignore this fingerprint sensor"
|
||||
continue
|
||||
fi
|
||||
|
||||
start_hal_service $temp_vendor_index
|
||||
if [ $? != 255 ]; then
|
||||
echo ${vendor_list[$temp_vendor_index]} > $persist_fps_id
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
log "error, no fingerprint sensor found"
|
||||
setprop $prop_persist_fps $FPS_VENDOR_NONE
|
||||
echo $FPS_VENDOR_NONE > $persist_fps_id
|
Reference in New Issue
Block a user