}
}
+modemmanager_check_state() {
+ local device="$1"
+ local modemstatus="$2"
+ local pincode="$3"
+
+ local state reason
+
+ state="$(modemmanager_get_field "${modemstatus}" "state")"
+ state="${state%% *}"
+ reason="$(modemmanager_get_field "${modemstatus}" "state-failed-reason")"
+
+ case "$state" in
+ "failed")
+ case "$reason" in
+ "sim-missing")
+ echo "SIM missing"
+ proto_notify_error "${interface}" MM_FAILED_REASON_SIM_MISSING
+ proto_block_restart "${interface}"
+ return 1
+ ;;
+ *)
+ proto_notify_error "${interface}" MM_FAILED_REASON_UNKNOWN
+ proto_block_restart "${interface}"
+ return 1
+ ;;
+ esac
+ ;;
+ "locked")
+ if [ -n "$pincode" ]; then
+ mmcli --modem="${device}" -i any --pin=${pincode} || {
+ proto_notify_error "${interface}" MM_PINCODE_WRONG
+ proto_block_restart "${interface}"
+ return 1
+ }
+ else
+ echo "PIN required"
+ proto_notify_error "${interface}" MM_PINCODE_REQUIRED
+ proto_block_restart "${interface}"
+ return 1
+ fi
+ ;;
+ esac
+}
+
modemmanager_set_preferred_mode() {
local device="$1"
local interface="$2"
}
echo "modem available at ${modempath}"
+ modemmanager_check_state "$device" "${modemstatus}" "$pincode"
+ [ "$?" -ne "0" ] && return 1
+
[ -z "${allowedmode}" ] || {
case "$allowedmode" in
"2g")
append_param "${cliauth:+allowed-auth=${cliauth}}"
append_param "${username:+user=${username}}"
append_param "${password:+password=${password}}"
- append_param "${pincode:+pin=${pincode}}"
mmcli --modem="${device}" --timeout 120 --simple-connect="${connectargs}" || {
proto_notify_error "${interface}" MM_CONNECT_FAILED