uqmi: fix network registration loop
With some debug in qmi.sh using following patch, some errors are visible in the registration step @@ -29,6 +29,7 @@ proto_qmi_init_config() { } proto_qmi_setup() { + set -x local interface="$1" local dataformat connstat plmn_mode mcc mnc local device apn auth username password pincode delay modes pdptype @@ -224,6 +225,8 @@ proto_qmi_setup() { fi done + registration=$(uqmi -s -d "$device" --get-serving-system) + [ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1 echo "Starting network $interface" During the boot of the system, modem could not start automatically its network registration. netifd: wan (9235): + echo 'Waiting for network registration' netifd: wan (9235): Waiting for network registration netifd: wan (9235): + local 'registration_timeout=0' netifd: wan (9235): + uqmi -s -d /dev/cdc-wdm1 --get-serving-system netifd: wan (9235): + grep '"searching"' netifd: wan (9235): + uqmi -s -d /dev/cdc-wdm1 --get-serving-system netifd: wan (9235): + registration='{"registration":"not_registered","plmn_mcc":208,"plmn_mnc":20,"plmn_description":"","roaming":true}' netifd: wan (9235): + '[' -n ] netifd: wan (9235): + echo 'Starting network wan' As the while loop checks only "searching" pattern, uqmi.sh script quits searching loop and continues whereas the modem is not registered Other issue, after X seconds modem stops searching. netifd: wan (9213): + uqmi -s -d /dev/cdc-wdm0 --get-serving-system netifd: wan (9213): + grep '"searching"' netifd: wan (9213): + '[' -e /dev/cdc-wdm0 ] netifd: wan (9213): + '[' 3 -lt 0 -o 0 '=' 0 ] netifd: wan (9213): + let registration_timeout++ netifd: wan (9213): + sleep 1 netifd: wan (9213): + uqmi -s -d /dev/cdc-wdm0 --get-serving-system netifd: wan (9213): + grep '"searching"' netifd: wan (9213): + uqmi -s -d /dev/cdc-wdm0 --get-serving-system netifd: wan (9213): + registration='{"registration":"not_registered"}' netifd: wan (9213): + '[' -n ] netifd: wan (9213): + echo 'Starting network wan' netifd: wan (9213): Starting network wan If registration_timeout is not expired, registration can be restarted Signed-off-by: Thomas Richard <thomas.richard@kontron.com> Tested-by: Florian Eckert <fe@dev.tdt.de>
This commit is contained in:
parent
979f406366
commit
2eda042d55
@ -1,7 +1,7 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=uqmi
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git
|
||||
|
@ -209,19 +209,36 @@ proto_qmi_setup() {
|
||||
|
||||
uqmi -s -d "$device" --sync > /dev/null 2>&1
|
||||
|
||||
uqmi -s -d "$device" --network-register > /dev/null 2>&1
|
||||
|
||||
echo "Waiting for network registration"
|
||||
sleep 1
|
||||
local registration_timeout=0
|
||||
while uqmi -s -d "$device" --get-serving-system | grep '"searching"' > /dev/null; do
|
||||
[ -e "$device" ] || return 1
|
||||
if [ "$registration_timeout" -lt "$timeout" -o "$timeout" = "0" ]; then
|
||||
let registration_timeout++
|
||||
sleep 1;
|
||||
local registration_state=""
|
||||
while true; do
|
||||
registration_state=$(uqmi -s -d "$device" --get-serving-system 2>/dev/null | jsonfilter -e "@.registration" 2>/dev/null)
|
||||
|
||||
[ "$registration_state" = "registered" ] && break
|
||||
|
||||
if [ "$registration_state" = "searching" ] || [ "$registration_state" = "not_registered" ]; then
|
||||
if [ "$registration_timeout" -lt "$timeout" ] || [ "$timeout" = "0" ]; then
|
||||
[ "$registration_state" = "searching" ] || {
|
||||
echo "Device stopped network registration. Restart network registration"
|
||||
uqmi -s -d "$device" --network-register > /dev/null 2>&1
|
||||
}
|
||||
let registration_timeout++
|
||||
sleep 1
|
||||
continue
|
||||
fi
|
||||
echo "Network registration failed, registration timeout reached"
|
||||
else
|
||||
echo "Network registration failed"
|
||||
proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED
|
||||
proto_block_restart "$interface"
|
||||
return 1
|
||||
# registration_state is 'registration_denied' or 'unknown' or ''
|
||||
echo "Network registration failed (reason: '$registration_state')"
|
||||
fi
|
||||
|
||||
proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED
|
||||
proto_block_restart "$interface"
|
||||
return 1
|
||||
done
|
||||
|
||||
[ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1
|
||||
|
Loading…
Reference in New Issue
Block a user