🎉 Sync 2026-10-14 03:01:37

This commit is contained in:
github-actions[bot] committed 2026-10-14 03:01:37 +08:00
1 parent 57ac656612
commit ef45574e85
78 files changed
+2683 -3911

No files matched your search

@@ -79,13 +79,43 @@ fi
# Fast path: Prioritize native sms_tool engine if installed (zero echo loop, robust termios)
if command -v sms_tool >/dev/null 2>&1; then
if [ -n "$SMS_TO" ]; then
OUT=$(sms_tool -d "$DEVICE" -b "$BAUDRATE" send "$SMS_TO" "$SMS_MSG" 2>&1)
RC=$?
TMP_OUT="/tmp/at_sms_$$.tmp"
TMP_DONE="/tmp/at_sms_$$.done"
rm -f "$TMP_OUT" "$TMP_DONE"
(
if [ -n "$SMS_TO" ]; then
sms_tool -d "$DEVICE" -b "$BAUDRATE" send "$SMS_TO" "$SMS_MSG" > "$TMP_OUT" 2>&1
else
sms_tool -d "$DEVICE" -b "$BAUDRATE" at "$COMMAND" > "$TMP_OUT" 2>&1
fi
echo $? > "$TMP_DONE"
) &
CHILD_PID=$!
elapsed=0
while [ $elapsed -lt "$TIMEOUT" ]; do
if [ -f "$TMP_DONE" ] || ! kill -0 "$CHILD_PID" 2>/dev/null; then
break
fi
sleep 1
elapsed=$((elapsed + 1))
done
if [ ! -f "$TMP_DONE" ] && kill -0 "$CHILD_PID" 2>/dev/null; then
kill -9 "$CHILD_PID" 2>/dev/null || true
for p in $(pgrep -f "sms_tool.*$DEVICE" 2>/dev/null); do
kill -9 "$p" 2>/dev/null || true
done
RC=124
OUT="ERROR: Command timed out after ${TIMEOUT}s"
else
OUT=$(sms_tool -d "$DEVICE" -b "$BAUDRATE" at "$COMMAND" 2>&1)
RC=$?
wait "$CHILD_PID" 2>/dev/null
RC=$(cat "$TMP_DONE" 2>/dev/null || echo 0)
OUT=$(cat "$TMP_OUT" 2>/dev/null)
fi
rm -f "$TMP_OUT" "$TMP_DONE"
flock -u 9 2>/dev/null || true
CLEAN_OUT=$(echo "$OUT" | tr -d "\r")
if [ $RC -eq 0 ] && ! echo "$CLEAN_OUT" | grep -qE "ERROR|\+CME ERROR|\+CMS ERROR"; then
@@ -100,6 +130,14 @@ if command -v sms_tool >/dev/null 2>&1; then
fi
exit 0
else
case "$COMMAND" in
*CFUN=1,1*|*CFUN=16*|*QPOWD*)
if ! echo "$CLEAN_OUT" | grep -qE "ERROR|\+CME ERROR|\+CMS ERROR"; then
[ -z "$CLEAN_OUT" ] && echo "OK" || echo "$CLEAN_OUT"
exit 0
fi
;;
esac
echo "$CLEAN_OUT"
exit ${RC:-1}
fi
@@ -39,11 +39,14 @@ collect_single() {
let devs_data = plugin.get_devices.call();
let dev = (devs_data?.devices && length(devs_data.devices) > 0) ? devs_data.devices[0] : null;
let user_port = "'"$user_port"'";
let target_port = (user_port && user_port != "") ? user_port : (dev?.primary_port || null);
let target_port = dev?.primary_port || user_port || null;
if (dev?.driver !== "cdc_mbim" && user_port && user_port != "") {
target_port = user_port;
}
if (target_port) {
let status = plugin.collect_raw_status.call({ args: { port: target_port, primary_net: dev?.primary_net || "usb0" } });
if (status) {
if (status && status.success) {
let tmp = "/tmp/run/modem-manager/status.json.tmp";
fs.writefile(tmp, sprintf("%J\n", status));
fs.rename(tmp, "/tmp/run/modem-manager/status.json");
@@ -116,6 +116,19 @@ detect_all() {
local PROD=$(get_sys_attr "$dev/product")
local SER=$(get_sys_attr "$dev/serial")
local DRIVER="option"
for net_iface in $NETS; do
if [ -e "/sys/class/net/$net_iface/device/driver" ]; then
local drv_target=$(basename "$(readlink -f "/sys/class/net/$net_iface/device/driver" 2>/dev/null)")
case "$drv_target" in
cdc_ncm|cdc_ether|cdc_mbim|qmi_wwan)
DRIVER="$drv_target"
break
;;
esac
fi
done
local PRIMARY_TTY=""
for t in $TTYS; do
case "$t" in
@@ -125,20 +138,19 @@ detect_all() {
;;
esac
done
if [ -z "$PRIMARY_TTY" ]; then
for t in $TTYS; do
case "$t" in
*ttyUSB3)
PRIMARY_TTY="$t"
break
;;
esac
done
fi
[ -z "$PRIMARY_TTY" ] && PRIMARY_TTY=$(echo "$TTYS" | awk '{print $1}')
local PRIMARY_NET=$(echo "$NETS" | awk '{print $1}')
local DRIVER="option"
for drv in $(find "$dev" -name "driver" 2>/dev/null); do
local drv_target=$(basename "$(readlink -f "$drv" 2>/dev/null)")
case "$drv_target" in
cdc_mbim|cdc_ncm|qmi_wwan|cdc_ether|rndis_host)
DRIVER="$drv_target"
break
;;
esac
done
[ $FIRST -eq 1 ] || echo ","
FIRST=0
@@ -154,6 +166,8 @@ detect_all() {
NET_JSON="$NET_JSON\"$n\""
done
local MODES_JSON="\"ncm\", \"ecm\""
cat <<EOF
{
"id": "$DEVNAME",
@@ -165,6 +179,7 @@ detect_all() {
"driver": "$DRIVER",
"primary_port": "$PRIMARY_TTY",
"primary_net": "$PRIMARY_NET",
"supported_modes": [ $MODES_JSON ],
"ports": [ $TTY_JSON ],
"nets": [ $NET_JSON ]
}