uqmi: fix acquiring PIN status
authorDaniel Golle <daniel@makrotopia.org>
Thu, 24 Mar 2022 18:40:14 +0000 (18:40 +0000)
committerDaniel Golle <daniel@makrotopia.org>
Sun, 27 Mar 2022 15:14:00 +0000 (16:14 +0100)
Evaluating the return value of 'json_load' didn't work in the
intended way resulting in PIN status no longer being read on modems
where --get-pin-status doesn't fail.
Fix this by trying --get-pin-status first and checking if pin1_status
field exists in JSON, and if it doesn't try again with
--uim-get-sim-state.

Fixes: #9501
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
(cherry picked from commit ee7cb5e885118b78fb5f692d8ed6c93bb7e35853)

package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh

index ad577ea317f2703ab8e1a6c2475ffd93a3fc6429..c2c5fc1eca0baf714be018f7864e2ab1bdc07403 100755 (executable)
@@ -105,10 +105,12 @@ proto_qmi_setup() {
                        }
                }
        else
-               . /usr/share/libubox/jshn.sh
-               json_load "$(uqmi -s -d "$device" --get-pin-status)" 2>&1 | grep -q Failed &&
-                       json_load "$(uqmi -s -d "$device" --uim-get-sim-state)"
+               json_load "$(uqmi -s -d "$device" --get-pin-status)"
                json_get_var pin1_status pin1_status
+               if [ -z "$pin1_status" ]; then
+                       json_load "$(uqmi -s -d "$device" --uim-get-sim-state)"
+                       json_get_var pin1_status pin1_status
+               fi
                json_get_var pin1_verify_tries pin1_verify_tries
 
                case "$pin1_status" in
@@ -152,6 +154,7 @@ proto_qmi_setup() {
                                return 1
                        ;;
                esac
+               json_cleanup
        fi
 
        if [ -n "$plmn" ]; then
@@ -247,7 +250,8 @@ proto_qmi_setup() {
 
        echo "Starting network $interface"
 
-       pdptype=$(echo "$pdptype" | awk '{print tolower($0)}')
+       pdptype="$(echo "$pdptype" | awk '{print tolower($0)}')"
+
        [ "$pdptype" = "ip" -o "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] || pdptype="ip"
 
        if [ "$pdptype" = "ip" ]; then