From 3fc9362a9148c01e4ea42ceaefa680d8b3878143 Mon Sep 17 00:00:00 2001 From: Miguel Fuertes Date: Fri, 10 Oct 2025 09:51:45 +0200 Subject: [PATCH] wifi works! --- packages/sp970-tweaks/Makefile | 3 + packages/sp970-tweaks/files/uim_selection | 100 ++++++++++++++++++++++ sp970_diffconfig | 5 +- 3 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 packages/sp970-tweaks/files/uim_selection diff --git a/packages/sp970-tweaks/Makefile b/packages/sp970-tweaks/Makefile index e855978..fd2d922 100644 --- a/packages/sp970-tweaks/Makefile +++ b/packages/sp970-tweaks/Makefile @@ -33,6 +33,9 @@ define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/root/ $(INSTALL_BIN) ./files/luci-app-tailscale*.apk $(1)/root/ + + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/uim_selection $(1)/etc/init.d/ endef define Package/$(PKG_NAME)/postinst diff --git a/packages/sp970-tweaks/files/uim_selection b/packages/sp970-tweaks/files/uim_selection new file mode 100644 index 0000000..f31062e --- /dev/null +++ b/packages/sp970-tweaks/files/uim_selection @@ -0,0 +1,100 @@ +#!/bin/sh /etc/rc.common + +# This script tries to automatically configure UIM application for Qualcomm QMI +# modems with more than one sim slot. + +# Adapted from pmOS: +# https://gitlab.com/postmarketOS/pmaports/-/blob/master/modem/msm-modem/msm-modem-uim-selection.initd + +eend() { echo $@; } +veinfo() { echo $@; } +ewarn() { echo $@; } + +# Must run after rmtfs but before ModemManager +START=30 + +start() { + case "$(cat /sys/devices/soc0/machine)" in + APQ*) + eend 0 'Skipping SIM configuration on APQ SoC.' + return 0 + esac + + # libqmi must be present to use this script. + if ! [ -x "$(command -v qmicli)" ] + then + eend 1 'qmicli is not installed.' + return 1 + fi + + # Prepare a qmicli command with desired modem path. + # The modem may appear after some delay, wait for it. + count=0 + while [ -z "$QMICLI_MODEM" ] && [ "$count" -lt "45" ] + do + # Check if legacy rpmsg exported device exists. + if [ -e "/dev/modem" ] + then + QMICLI_MODEM="qmicli --silent -d /dev/modem" + veinfo "Using /dev/modem" + # Check if the qmi device from wwan driver exists. + elif [ -e "/dev/wwan0qmi0" ] + then + # Using --device-open-qmi flag as we may have libqmi + # version that can't automatically detect the type yet. + QMICLI_MODEM="qmicli --silent -d /dev/wwan0qmi0 --device-open-qmi" + veinfo "Using /dev/wwan0qmi0" + # Check if QRTR is available for new devices. + elif qmicli --silent -pd qrtr://0 --uim-noop > /dev/null + then + QMICLI_MODEM="qmicli --silent -pd qrtr://0" + veinfo "Using qrtr://0" + fi + sleep 1 + count=$((count+1)) + done + veinfo "Waited $count seconds for modem device to appear" + + if [ -z "$QMICLI_MODEM" ] + then + eend 2 'No modem available.' + return 2 + fi + + QMI_CARDS=$($QMICLI_MODEM --uim-get-card-status) + + # Fail if all slots are empty but wait a bit for the sim to appear. + count=0 + while ! printf "%s" "$QMI_CARDS" | grep -Fq "Card state: 'present'" + do + if [ "$count" -ge "$sim_wait_time" ] + then + eend 4 "No sim detected after $sim_wait_time seconds." + return 4 + fi + + sleep 1 + count=$((count+1)) + QMI_CARDS=$($QMICLI_MODEM --uim-get-card-status) + done + veinfo "Waited $count seconds for modem to come up" + + # Clear the selected application in case the modem is in a bugged state + if ! printf "%s" "$QMI_CARDS" | grep -Fq "Primary GW: session doesn't exist" + then + ewarn 'Application was already selected.' + $QMICLI_MODEM --uim-change-provisioning-session='activate=no,session-type=primary-gw-provisioning' > /dev/null + fi + + # Extract first available slot number and AID for usim application + # on it. This should select proper slot out of two if only one UIM is + # present or select the first one if both slots have UIM's in them. + FIRST_PRESENT_SLOT=$(printf "%s" "$QMI_CARDS" | grep "Card state: 'present'" -m1 -B1 | head -n1 | cut -c7-7) + FIRST_PRESENT_AID=$(printf "%s" "$QMI_CARDS" | grep "usim (2)" -m1 -A3 | tail -n1 | awk '{print $1}') + + veinfo "Selecting $FIRST_PRESENT_AID on slot $FIRST_PRESENT_SLOT" + + # Finally send the new configuration to the modem. + $QMICLI_MODEM --uim-change-provisioning-session="slot=$FIRST_PRESENT_SLOT,activate=yes,session-type=primary-gw-provisioning,aid=$FIRST_PRESENT_AID" > /dev/null + eend $? +} diff --git a/sp970_diffconfig b/sp970_diffconfig index 08b8ef6..dddec6c 100644 --- a/sp970_diffconfig +++ b/sp970_diffconfig @@ -1,7 +1,7 @@ CONFIG_TARGET_msm89xx=y CONFIG_TARGET_msm89xx_msm8916=y CONFIG_TARGET_msm89xx_msm8916_DEVICE_generic-sp970=y -CONFIG_LIBQMI_COLLECTION_BASIC=y +CONFIG_LIBQMI_COLLECTION_FULL=y CONFIG_LIBQMI_WITH_MBIM_QMUX=y CONFIG_LIBQMI_WITH_QRTR_GLIB=y CONFIG_MODEMMANAGER_WITH_MBIM=y @@ -47,7 +47,6 @@ CONFIG_PACKAGE_lua=y CONFIG_PACKAGE_luci=y CONFIG_PACKAGE_luci-app-firewall=y CONFIG_PACKAGE_luci-app-package-manager=y -CONFIG_PACKAGE_luci-app-usb-gadget=y CONFIG_PACKAGE_luci-base=y CONFIG_PACKAGE_luci-lib-base=y CONFIG_PACKAGE_luci-lib-ip=y @@ -71,6 +70,7 @@ CONFIG_PACKAGE_modemmanager=y CONFIG_PACKAGE_mount-utils=y CONFIG_PACKAGE_mtools=y CONFIG_PACKAGE_nano=y +CONFIG_PACKAGE_qmi-utils=y CONFIG_PACKAGE_resize2fs=y CONFIG_PACKAGE_resolveip=y CONFIG_PACKAGE_rpcd=y @@ -88,5 +88,6 @@ CONFIG_PACKAGE_ucode-mod-lua=y CONFIG_PACKAGE_ucode-mod-math=y CONFIG_PACKAGE_uhttpd=y CONFIG_PACKAGE_uhttpd-mod-ubus=y +CONFIG_PACKAGE_uz801-tweaks=y CONFIG_PACKAGE_wireguard-tools=y # CONFIG_TARGET_ROOTFS_EXT4FS is not set