mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-15 13:03:00 +08:00
🎉 Sync 2026-10-14 03:01:37
This commit is contained in:
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 ]
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user