#!/bin/sh # B4a: exactly ONE state-changing QMI command (--dms-set-operating-mode=online); everything else is GET. # No scan, no registration command, no bearer, no BAM-DMUX. Output -> /tmp/b4a-*.txt (RAM). D=/dev/wwan0qmi0; Q="qmicli -p -d $D" g() { echo "### $(cat /proc/uptime | cut -d' ' -f1) $*"; timeout 30 $Q "$@" 2>&1; echo "### rc=$?"; } nv() { for want in modemst1 modemst2 fsg fsc persist; do for p in /sys/class/block/mmcblk0p*; do [ "$(sed -n 's/^PARTNAME=//p' $p/uevent)" = "$want" ] && echo "$want $(sha256sum /dev/$(basename $p) | cut -d' ' -f1)"; done; done; } # 1. safety snapshot { g --dms-get-operating-mode; g --uim-get-card-status; g --nas-get-serving-system; g --nas-get-system-info g --nas-get-signal-info; g --nas-get-system-selection-preference; } > /tmp/b4a-pre.txt nv > /tmp/b4a-nv-before.txt; cat /sys/block/mmcblk0/stat > /tmp/b4a-stat-before.txt wc -l < /tmp/rmtfs.log > /tmp/b4a-rmtfs-offset.txt; cp /tmp/rmtfs.log /tmp/b4a-rmtfs-before.log # 2. the single SET { echo "### $(cat /proc/uptime | cut -d' ' -f1) SET --dms-set-operating-mode=online"; timeout 30 $Q --dms-set-operating-mode=online 2>&1; echo "### rc=$?"; } > /tmp/b4a-set.txt grep -q "^### rc=0" /tmp/b4a-set.txt || { echo "SET FAILED - STOP" >> /tmp/b4a-set.txt; echo B4A-STOPPED; exit 1; } # 3. confirm g --dms-get-operating-mode > /tmp/b4a-mode-after.txt # 4. passive observation (~120 s, GET only) : > /tmp/b4a-obs.txt; t0=$(cut -d. -f1 /proc/uptime) while [ $(( $(cut -d. -f1 /proc/uptime) - t0 )) -lt 120 ]; do { g --nas-get-serving-system; g --nas-get-system-info; g --nas-get-signal-info; } >> /tmp/b4a-obs.txt sleep 3 done # 5. final one-shot GETs + NV after { g --dms-get-operating-mode; g --uim-get-card-status; g --nas-get-home-network; g --nas-get-rf-band-info g --nas-get-cell-location-info; g --nas-get-serving-system; g --nas-get-signal-info; } > /tmp/b4a-final.txt nv > /tmp/b4a-nv-after.txt; cat /sys/block/mmcblk0/stat > /tmp/b4a-stat-after.txt cat /sys/class/remoteproc/remoteproc0/state > /tmp/b4a-rproc.txt tail -n +$(( $(cat /tmp/b4a-rmtfs-offset.txt) + 1 )) /tmp/rmtfs.log > /tmp/b4a-rmtfs-delta.log cmp -s /tmp/b4a-nv-before.txt /tmp/b4a-nv-after.txt && echo "NV BEFORE==AFTER" > /tmp/b4a-nv-result.txt || echo "NV DIFFERENT" > /tmp/b4a-nv-result.txt echo B4A-DONE