2024-10-20 13:57:04 +08:00

134 lines
2.9 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
START=80
STOP=30
USE_PROCD=1
. /lib/functions.sh
start_service() {
config_load qmodem
config_foreach _mk_rundir modem-device
config_get block_auto_probe main block_auto_probe 0
config_get enable_pcie_scan main enable_pcie_scan 0
config_get enable_usb_scan main enable_usb_scan 0
config_get try_preset_usb main try_preset_usb 1
config_get try_preset_pcie main try_preset_pcie 1
#once enabled, skip all check or scan
[ "$block_auto_probe" -eq 1 ] && return
#enabled by default
if [ "$try_preset_pcie" -eq 1 ];then
_try_vendor_preset_pcie
fi
if [ "$try_preset_usb" -eq 1 ];then
_try_vendor_preset_usb
fi
#not enabled by default
if [ "$enable_usb_scan" -eq 1 ];then
_scan_usb
fi
if [ "$enable_pcie_scan" -eq 1 ];then
_scan_pcie
fi
}
_try_vendor_preset_usb()
{
config_foreach _try_usb_device modem-device
config_foreach _try_usb_slot modem-slot
}
_try_vendor_preset_pcie()
{
config_foreach _try_pcie_device modem-device
config_foreach _try_pcie_slot modem-slot
}
_try_pcie_slot()
{
config_get type "$1" type
[ "$type" == "pcie" ] && _try_slot $1
}
_try_usb_slot()
{
config_get type "$1" type
[ "$type" == "usb" ] && _try_slot $1
}
_try_usb_device()
{
config_get data_interface $1 data_interface
[ "$data_interface" == "usb" ] && _try_device
}
_try_pcie_device()
{
config_get data_interface $1 data_interface
[ "$data_interface" == "pcie" ] && _try_device
}
_scan_usb()
{
procd_open_instance "scan_usb"
#delay 15 second ,scan all usb device
procd_set_param command "ash" "/usr/share/qmodem/modem_scan.sh" "scan" "15" "usb"
procd_close_instance
}
_scan_pcie()
{
procd_open_instance "scan_pcie"
#delay 3 second ,scan all pcie device
procd_set_param command "ash" "/usr/share/qmodem/modem_scan.sh" "scan" "3" "pcie"
procd_close_instance
}
_mk_rundir()
{
modem_cfg="$1"
mkdir -p "/var/run/qmodem/${modem_cfg}_dir"
}
_try_slot()
{
config_get slot "$1" slot
config_get type "$1" type
case "$type" in
usb)
path="/sys/bus/usb/devices/${slot}"
;;
pcie)
path="/sys/bus/pci/devices/${slot}"
;;
esac
if [ -d "$path" ]; then
logger -t modem_init "try modem $1"
procd_open_instance "try_$1"
procd_set_param command "ash" "/usr/share/qmodem/modem_scan.sh" "add" "$slot" "$type"
procd_close_instance
else
/usr/share/qmodem/modem_scan.sh disable "$slot"
fi
}
_try_device()
{
config_get path "$1" path
config_get type "$1" type
case "$type" in
usb)
path="/sys/bus/usb/devices/${path}"
;;
pcie)
path="/sys/bus/pci/devices/${path}"
;;
esac
if [ ! -d "$path" ]; then
/usr/share/qmodem/modem_scan.sh disable "$1"
fi
}