Fix mobile data static IP bearer, call recording, earpiece audio, and ringtone/vibration
This commit is contained in:
@@ -30,5 +30,12 @@ start() {
|
||||
if [ -n "$QMICLI_MODEM" ]; then
|
||||
$QMICLI_MODEM --dpm-open-port=hw-data-ep-type=bam-dmux,hw-data-ep-iface-number=1,hw-data-rx-id=1,hw-data-tx-id=1 >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
for f in /etc/NetworkManager/system-connections/*.nmconnection; do
|
||||
[ -f "$f" ] || continue
|
||||
if grep -q "^type=gsm" "$f" 2>/dev/null; then
|
||||
sed -i '/^\[ipv6\]/,/^\[/ s/^method=auto$/method=ignore/' "$f" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
eend 0
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
SXMO_RINGTIME=20
|
||||
SXMO_RINGNUMBER=10
|
||||
SXMO_VIBRATE_STRENGTH=2
|
||||
SXMO_RINGVOL=100
|
||||
@@ -0,0 +1 @@
|
||||
/usr/share/sxmo/ringtones/Banana_Chime.wav
|
||||
@@ -2,6 +2,8 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
export PATH="${XDG_CONFIG_HOME:-${HOME:-/home/user}/.config}/sxmo/hooks:/usr/share/sxmo/default_hooks:$PATH"
|
||||
|
||||
# include common definitions
|
||||
# shellcheck source=configs/default_hooks/sxmo_hook_icons.sh
|
||||
. sxmo_hook_icons.sh
|
||||
@@ -107,9 +109,10 @@ checkforfinishedcalls() {
|
||||
# If it was the last call
|
||||
if ! sxmo_modemcall.sh list_active_calls | grep -q .; then
|
||||
# Cleanup
|
||||
sxmo_jobs.sh stop ringing
|
||||
rm -f "$XDG_RUNTIME_DIR/sxmo_calls/"* 2>/dev/null || true
|
||||
if [ "$STATE" != muted ]; then
|
||||
sxmo_vibrate 1000 "${SXMO_VIBRATE_STRENGTH:-1}" &
|
||||
if [ "$STATE" != muted ] && [ ! -f "$XDG_CONFIG_HOME/sxmo/.novibrate" ]; then
|
||||
sxmo_vibrate 600 &
|
||||
fi
|
||||
sxmo_jobs.sh stop incall_menu
|
||||
sxmo_jobs.sh stop proximity_lock
|
||||
|
||||
@@ -6,19 +6,26 @@ export PATH="${XDG_CONFIG_HOME:-$HOME/.config}/sxmo/hooks:/usr/share/sxmo/defaul
|
||||
. sxmo_common.sh
|
||||
|
||||
enable_call_audio_mode() {
|
||||
pactl set-card-profile alsa_card.comprC0 off >/dev/null 2>&1 || true
|
||||
pactl set-card-profile alsa_card.platform-7702000.sound "HiFi (Earpiece, Mic1)" >/dev/null 2>&1 || true
|
||||
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 >/dev/null 2>&1 || true
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ 100% >/dev/null 2>&1 || true
|
||||
if command -v amixer >/dev/null 2>&1; then
|
||||
amixer -c 0 sset 'SPK DAC Switch' off >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX3 MIX1 INP1' 'ZERO' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'PRI_MI2S_RX Voice Mixer VoiceMMode1' on >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'VoiceMMode1 Capture Mixer TERT_MI2S_TX' on >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'MultiMedia2 Mixer TERT_MI2S_TX' on >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX1 MIX1 INP1' 'RX1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RDAC2 MUX' 'RX1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'EAR_S' 'Switch' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'CIC1 MUX' 'AMIC' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'DEC1 MUX' 'ADC1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'ADC1 Volume' 6 >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX1 Digital Volume' 84 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='SPK DAC Switch'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 MIX1 INP1'" 'ZERO' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 Digital Volume'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='PRI_MI2S_RX Voice Mixer VoiceMMode1'" 1 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='VoiceMMode1 Capture Mixer TERT_MI2S_TX'" 1 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='MultiMedia2 Mixer TERT_MI2S_TX'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX1 MIX1 INP1'" 'RX1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RDAC2 MUX'" 'RX1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='EAR_S'" 'Switch' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX1 Mute Switch'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX1 Digital Volume'" 88 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='CIC1 MUX'" 'AMIC' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='DEC1 MUX'" 'ADC1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='ADC1 Volume'" 8 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='TX1 Digital Volume'" 88 >/dev/null 2>&1 || true
|
||||
fi
|
||||
sxmo_log "Enabled ALSA voice call audio mode (Earpiece)."
|
||||
sxmo_hook_statusbar.sh volume >/dev/null 2>&1 || true
|
||||
@@ -38,18 +45,21 @@ disable_call_audio_mode() {
|
||||
pactl set-card-profile alsa_card.platform-7702000.sound "HiFi (Mic1, Speaker)" >/dev/null 2>&1 || true
|
||||
fi
|
||||
if command -v amixer >/dev/null 2>&1; then
|
||||
amixer -c 0 sset 'PRI_MI2S_RX Voice Mixer VoiceMMode1' off >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'VoiceMMode1 Capture Mixer TERT_MI2S_TX' off >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'EAR_S' 'ZERO' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX1 MIX1 INP1' 'ZERO' >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX3 MIX1 INP1' 'RX1' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='PRI_MI2S_RX Voice Mixer VoiceMMode1'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='VoiceMMode1 Capture Mixer TERT_MI2S_TX'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='MultiMedia2 Mixer TERT_MI2S_TX'" 1 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='EAR_S'" 'ZERO' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX1 MIX1 INP1'" 'ZERO' >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX1 Digital Volume'" 84 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='TX1 Digital Volume'" 84 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 MIX1 INP1'" 'RX1' >/dev/null 2>&1 || true
|
||||
if [ "$spk_vol" -gt 0 ]; then
|
||||
rx3_hw=$(( 60 + spk_vol * 32 / 100 ))
|
||||
amixer -c 0 sset 'SPK DAC Switch' on >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX3 Digital Volume' "$rx3_hw" >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='SPK DAC Switch'" 1 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 Digital Volume'" "$rx3_hw" >/dev/null 2>&1 || true
|
||||
else
|
||||
amixer -c 0 sset 'SPK DAC Switch' off >/dev/null 2>&1 || true
|
||||
amixer -c 0 sset 'RX3 Digital Volume' 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='SPK DAC Switch'" 0 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 Digital Volume'" 0 >/dev/null 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
wpctl set-mute @DEFAULT_AUDIO_SINK@ "$([ "$spk_vol" -le 0 ] && echo 1 || echo 0)" >/dev/null 2>&1 || true
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
SectionDevice."Earpiece" {
|
||||
Comment "Earpiece playback"
|
||||
|
||||
ConflictingDevice [
|
||||
"Headphones"
|
||||
]
|
||||
|
||||
EnableSequence [
|
||||
cset "name='RX1 MIX1 INP1' RX1"
|
||||
cset "name='RDAC2 MUX' RX1"
|
||||
cset "name='EAR_S' 1"
|
||||
## gain to +6dB
|
||||
cset "name='RX1 Digital Volume' 90"
|
||||
]
|
||||
|
||||
DisableSequence [
|
||||
cset "name='RX1 Digital Volume' 0"
|
||||
cset "name='EAR_S' 0"
|
||||
cset "name='RX1 MIX1 INP1' ZERO"
|
||||
]
|
||||
|
||||
Value {
|
||||
PlaybackPCM "${var:WcdPlaybackPCM}"
|
||||
PlaybackChannels 2
|
||||
PlaybackPriority 100
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,14 @@
|
||||
# Copyright 2022 Sxmo Contributors
|
||||
|
||||
# This script is executed (asynchronously) when you get an incoming call
|
||||
# You can use it to play a ring tone
|
||||
|
||||
# $1 = Contact Name or Number (if not in contacts)
|
||||
|
||||
# shellcheck source=scripts/core/sxmo_common.sh
|
||||
. sxmo_common.sh
|
||||
|
||||
export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME:-/home/user}/.config}"
|
||||
export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
|
||||
|
||||
if [ -z "${SXMO_VIBRATE_DEV:-}" ] && [ ! -e /dev/input/by-path/platform-vibrator-event ]; then
|
||||
for vdev in /dev/input/by-path/*vibrator*-event; do
|
||||
if [ -e "$vdev" ]; then
|
||||
@@ -25,33 +26,61 @@ if [ -f "$XDG_CONFIG_HOME/sxmo/ringsettings" ]; then
|
||||
. "$XDG_CONFIG_HOME/sxmo/ringsettings"
|
||||
fi
|
||||
|
||||
# pm8xxx-vib shifts FF_RUMBLE strong_magnitude right by 8 bits (valid 256..65535)
|
||||
case "${SXMO_VIBRATE_STRENGTH:-}" in
|
||||
1) SXMO_VIBRATE_STRENGTH=8000 ;;
|
||||
2|"") SXMO_VIBRATE_STRENGTH=32000 ;;
|
||||
3) SXMO_VIBRATE_STRENGTH=65535 ;;
|
||||
case "${SXMO_VIBRATE_STRENGTH:-2}" in
|
||||
1) SXMO_VIBRATE_STRENGTH=1 ;;
|
||||
3) SXMO_VIBRATE_STRENGTH=3 ;;
|
||||
*)
|
||||
if [ "${SXMO_VIBRATE_STRENGTH:-2}" -gt 45000 ] 2>/dev/null; then
|
||||
SXMO_VIBRATE_STRENGTH=3
|
||||
elif [ "${SXMO_VIBRATE_STRENGTH:-2}" -gt 3 ] && [ "${SXMO_VIBRATE_STRENGTH:-2}" -le 16000 ] 2>/dev/null; then
|
||||
SXMO_VIBRATE_STRENGTH=1
|
||||
else
|
||||
SXMO_VIBRATE_STRENGTH=2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
export SXMO_VIBRATE_STRENGTH
|
||||
|
||||
if [ -f "$XDG_CONFIG_HOME/sxmo/ringtone" ]; then
|
||||
custom_ring="$(head -n 1 "$XDG_CONFIG_HOME/sxmo/ringtone" 2>/dev/null)"
|
||||
custom_ring="$(head -n 1 "$XDG_CONFIG_HOME/sxmo/ringtone" 2>/dev/null | tr -d '\r')"
|
||||
if [ -n "$custom_ring" ] && [ -f "$custom_ring" ]; then
|
||||
SXMO_RINGTONE="$custom_ring"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Only vibrate if you already got an active call
|
||||
if sxmo_modemcall.sh list_active_calls \
|
||||
| grep -v ringing-in \
|
||||
| grep -q .; then
|
||||
sxmo_vibrate 1500 "${SXMO_VIBRATE_STRENGTH:-1}"
|
||||
exit
|
||||
if [ -z "${SXMO_RINGTONE:-}" ] || [ ! -f "${SXMO_RINGTONE:-}" ]; then
|
||||
if [ -f /usr/share/sxmo/ringtones/Banana_Chime.wav ]; then
|
||||
SXMO_RINGTONE="/usr/share/sxmo/ringtones/Banana_Chime.wav"
|
||||
elif [ -f /usr/share/sxmo/ring.ogg ]; then
|
||||
SXMO_RINGTONE="/usr/share/sxmo/ring.ogg"
|
||||
else
|
||||
for f in /usr/share/sxmo/ringtones/*; do
|
||||
if [ -f "$f" ]; then
|
||||
SXMO_RINGTONE="$f"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
export SXMO_RINGTONE
|
||||
|
||||
# DND / BUSY MODE
|
||||
if [ -f "$XDG_RUNTIME_DIR/sxmo.busy" ]; then
|
||||
exit 0
|
||||
fi
|
||||
if [ -f "$XDG_CONFIG_HOME/sxmo/.busy" ]; then
|
||||
end="$(cat "$XDG_CONFIG_HOME/sxmo/.busy" 2>/dev/null)"
|
||||
if [ -z "$end" ] || [ "$(date +%s)" -lt "$end" ]; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Shallow if you have more than one ringing call
|
||||
if ! sxmo_modemcall.sh list_active_calls \
|
||||
| grep -c ringing-in \
|
||||
| grep -q 1; then
|
||||
exit
|
||||
# Only vibrate once if a call is already active
|
||||
if [ "$(cat /tmp/sxmo_active_call 2>/dev/null)" = "2" ]; then
|
||||
if [ ! -f "$XDG_CONFIG_HOME/sxmo/.novibrate" ]; then
|
||||
sxmo_vibrate 1500 "$SXMO_VIBRATE_STRENGTH"
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "${SXMO_RINGVOL:-100}" in
|
||||
@@ -59,90 +88,167 @@ case "${SXMO_RINGVOL:-100}" in
|
||||
esac
|
||||
[ "$SXMO_RINGVOL" -gt 100 ] && SXMO_RINGVOL=100
|
||||
|
||||
SAVED_RX3="$(amixer -c 0 cget "name='RX3 Digital Volume'" 2>/dev/null | awk -F= '/: values=/ {print $2; exit}')"
|
||||
SAVED_SPK_VOL=100
|
||||
SAVED_SPK_VOL=85
|
||||
if [ -r "$XDG_CONFIG_HOME/sxmo/speaker_vol" ]; then
|
||||
read -r SAVED_SPK_VOL < "$XDG_CONFIG_HOME/sxmo/speaker_vol" 2>/dev/null || SAVED_SPK_VOL=100
|
||||
read -r SAVED_SPK_VOL < "$XDG_CONFIG_HOME/sxmo/speaker_vol" 2>/dev/null || SAVED_SPK_VOL=85
|
||||
fi
|
||||
case "$SAVED_SPK_VOL" in ''|*[!0-9]*) SAVED_SPK_VOL=100 ;; esac
|
||||
case "$SAVED_SPK_VOL" in ''|*[!0-9]*) SAVED_SPK_VOL=85 ;; esac
|
||||
SAVED_RX3=$(( 60 + SAVED_SPK_VOL * 32 / 100 ))
|
||||
|
||||
RING_PID=""
|
||||
VIB_PID=""
|
||||
|
||||
is_call_picked_up() {
|
||||
[ "$(cat /tmp/sxmo_active_call 2>/dev/null)" = "2" ] && return 0
|
||||
for f in "$XDG_RUNTIME_DIR"/sxmo_calls/*.pickedupcall "$XDG_RUNTIME_DIR"/sxmo_calls/*.initiatedcall; do
|
||||
[ -e "$f" ] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
finish() {
|
||||
trap - INT TERM EXIT
|
||||
jobs -p | xargs -r kill 2>/dev/null || true
|
||||
wait 2>/dev/null || true
|
||||
if [ -n "${SAVED_RX3:-}" ]; then
|
||||
[ -n "$RING_PID" ] && pkill -TERM -P "$RING_PID" 2>/dev/null || true
|
||||
[ -n "$VIB_PID" ] && pkill -TERM -P "$VIB_PID" 2>/dev/null || true
|
||||
[ -n "$RING_PID" ] && kill -TERM "$RING_PID" 2>/dev/null || true
|
||||
[ -n "$VIB_PID" ] && kill -TERM "$VIB_PID" 2>/dev/null || true
|
||||
pkill -TERM -P "$$" 2>/dev/null || true
|
||||
if ! is_call_picked_up; then
|
||||
amixer -c 0 cset "name='RX3 Digital Volume'" "$SAVED_RX3" >/dev/null 2>&1 || true
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ "${SAVED_SPK_VOL}%" >/dev/null 2>&1 || true
|
||||
fi
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ "${SAVED_SPK_VOL}%" >/dev/null 2>&1 || true
|
||||
exit
|
||||
exit 0
|
||||
}
|
||||
|
||||
pause_media_async() {
|
||||
if [ -p /tmp/dwm_plugin_music.fifo ]; then
|
||||
echo "PAUSE" > /tmp/dwm_plugin_music.fifo 2>/dev/null || true
|
||||
fi
|
||||
mpc -q pause >/dev/null 2>&1 &
|
||||
sxmo_playerctl.sh pause_all >/dev/null 2>&1 &
|
||||
}
|
||||
|
||||
ring() {
|
||||
if [ "${SXMO_RINGVOL:-100}" -le 0 ]; then
|
||||
if [ "${SXMO_RINGVOL:-100}" -le 0 ] || [ -z "${SXMO_RINGTONE:-}" ] || [ ! -f "$SXMO_RINGTONE" ]; then
|
||||
return 0
|
||||
fi
|
||||
ring_rx3=$(( 60 + SXMO_RINGVOL * 34 / 100 ))
|
||||
mpv_vol=$(( SXMO_RINGVOL * 130 / 100 ))
|
||||
amixer -c 0 cset "name='SPK DAC Switch'" 1 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 MIX1 INP1'" 3 >/dev/null 2>&1 || true
|
||||
amixer -c 0 cset "name='RX3 Digital Volume'" "$ring_rx3" >/dev/null 2>&1 || true
|
||||
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 >/dev/null 2>&1 || true
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ 100% >/dev/null 2>&1 || true
|
||||
mpv --no-resume-playback --quiet --no-video \
|
||||
--ao=pipewire,pulse,alsa --audio-channels=stereo --audio-samplerate=48000 \
|
||||
--volume-max=150 --volume="$mpv_vol" \
|
||||
--loop="${SXMO_RINGNUMBER:-10}" "$SXMO_RINGTONE" >/dev/null &
|
||||
pw_vol="$(awk -v v="$SXMO_RINGVOL" 'BEGIN { printf "%.2f", v / 100.0 }')"
|
||||
|
||||
(
|
||||
rchild=""
|
||||
vhelper=""
|
||||
trap '[ -n "$rchild" ] && kill -TERM "$rchild" 2>/dev/null; [ -n "$vhelper" ] && kill -TERM "$vhelper" 2>/dev/null; exit 0' INT TERM EXIT
|
||||
|
||||
amixer -c 0 -s >/dev/null 2>&1 <<EOF || true
|
||||
cset "name='EAR_S'" 0
|
||||
cset "name='RX1 MIX1 INP1'" 0
|
||||
cset "name='PRI_MI2S_RX Audio Mixer MultiMedia1'" 1
|
||||
cset "name='SPK DAC Switch'" 1
|
||||
cset "name='RX3 MIX1 INP1'" 3
|
||||
cset "name='RX3 Digital Volume'" $ring_rx3
|
||||
EOF
|
||||
wpctl set-mute @DEFAULT_AUDIO_SINK@ 0 >/dev/null 2>&1 || true
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ "${SXMO_RINGVOL}%" >/dev/null 2>&1 || true
|
||||
|
||||
(
|
||||
for d in 0.15 0.40; do
|
||||
sleep "$d" || exit 0
|
||||
is_call_picked_up && exit 0
|
||||
amixer -c 0 -s >/dev/null 2>&1 <<EOF || true
|
||||
cset "name='SPK DAC Switch'" 1
|
||||
cset "name='RX3 MIX1 INP1'" 3
|
||||
cset "name='RX3 Digital Volume'" $ring_rx3
|
||||
EOF
|
||||
wpctl set-volume @DEFAULT_AUDIO_SINK@ "${SXMO_RINGVOL}%" >/dev/null 2>&1 || true
|
||||
done
|
||||
) &
|
||||
vhelper="$!"
|
||||
|
||||
ext="$(printf '%s' "${SXMO_RINGTONE##*.}" | tr '[:upper:]' '[:lower:]')"
|
||||
use_pw=0
|
||||
case "$ext" in
|
||||
wav|ogg|oga|mp3|flac|aiff|aif)
|
||||
command -v pw-play >/dev/null 2>&1 && use_pw=1
|
||||
;;
|
||||
esac
|
||||
|
||||
loops="${SXMO_RINGNUMBER:-10}"
|
||||
if [ "$use_pw" -eq 1 ]; then
|
||||
i=0
|
||||
while [ "$i" -lt "$loops" ]; do
|
||||
is_call_picked_up && break
|
||||
pw-play --volume="$pw_vol" "$SXMO_RINGTONE" >/dev/null 2>&1 &
|
||||
rchild="$!"
|
||||
wait "$rchild" 2>/dev/null
|
||||
rc="$?"
|
||||
rchild=""
|
||||
if [ "$rc" -ne 0 ]; then
|
||||
use_pw=0
|
||||
break
|
||||
fi
|
||||
i=$(( i + 1 ))
|
||||
sleep 0.2 &
|
||||
rchild="$!"
|
||||
wait "$rchild" 2>/dev/null || break
|
||||
rchild=""
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$use_pw" -eq 0 ] && ! is_call_picked_up; then
|
||||
mpv --no-config --no-terminal --no-resume-playback --quiet --vo=null --no-video \
|
||||
--ao=pipewire,pulse,alsa --audio-channels=stereo --audio-samplerate=48000 \
|
||||
--volume-max=150 --volume="$SXMO_RINGVOL" \
|
||||
--loop="$loops" "$SXMO_RINGTONE" </dev/null >/dev/null 2>&1 &
|
||||
rchild="$!"
|
||||
wait "$rchild" 2>/dev/null || true
|
||||
rchild=""
|
||||
fi
|
||||
) &
|
||||
RING_PID="$!"
|
||||
}
|
||||
|
||||
vibrate() {
|
||||
while : ; do
|
||||
trap 'finish' INT TERM EXIT
|
||||
sxmo_vibrate 1500 "${SXMO_VIBRATE_STRENGTH:-1}" &
|
||||
wait "$!"
|
||||
(
|
||||
vchild=""
|
||||
trap '[ -n "$vchild" ] && kill -TERM "$vchild" 2>/dev/null; exit 0' INT TERM EXIT
|
||||
while : ; do
|
||||
is_call_picked_up && exit 0
|
||||
sxmo_vibrate 1500 "$SXMO_VIBRATE_STRENGTH" &
|
||||
vchild="$!"
|
||||
wait "$vchild" 2>/dev/null || exit 0
|
||||
vchild=""
|
||||
|
||||
sleep 0.5 &
|
||||
wait "$!"
|
||||
done &
|
||||
sleep 0.5 &
|
||||
vchild="$!"
|
||||
wait "$vchild" 2>/dev/null || exit 0
|
||||
vchild=""
|
||||
done
|
||||
) &
|
||||
VIB_PID="$!"
|
||||
}
|
||||
|
||||
# SILENT MODE
|
||||
if [ -f "$XDG_CONFIG_HOME"/sxmo/.busy ]; then
|
||||
end="$(cat "$XDG_CONFIG_HOME"/sxmo/.busy)"
|
||||
if [ -z "$end" ] || [ "$(date +%s)" -lt "$end" ]; then
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
trap 'finish' INT TERM EXIT
|
||||
|
||||
# RING & VIBRATE MODE (DEFAULT)
|
||||
if [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
|
||||
sxmo_log "RING AND VIBRATE"
|
||||
|
||||
sxmo_playerctl.sh pause_all
|
||||
if [ -p /tmp/dwm_plugin_music.fifo ]; then
|
||||
echo "PAUSE" > /tmp/dwm_plugin_music.fifo 2>/dev/null || true
|
||||
fi
|
||||
|
||||
ring
|
||||
if [ ! -f "$XDG_CONFIG_HOME/sxmo/.noring" ] && [ ! -f "$XDG_CONFIG_HOME/sxmo/.novibrate" ]; then
|
||||
sxmo_log "RING AND VIBRATE ($SXMO_RINGTONE, vol=${SXMO_RINGVOL}%, vib=${SXMO_VIBRATE_STRENGTH})"
|
||||
pause_media_async
|
||||
vibrate
|
||||
ring
|
||||
|
||||
# RING-ONLY MODE
|
||||
elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.noring ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ]; then
|
||||
sxmo_log "RING ONLY"
|
||||
|
||||
sxmo_playerctl.sh pause_all
|
||||
if [ -p /tmp/dwm_plugin_music.fifo ]; then
|
||||
echo "PAUSE" > /tmp/dwm_plugin_music.fifo 2>/dev/null || true
|
||||
fi
|
||||
|
||||
elif [ ! -f "$XDG_CONFIG_HOME/sxmo/.noring" ] && [ -f "$XDG_CONFIG_HOME/sxmo/.novibrate" ]; then
|
||||
sxmo_log "RING ONLY ($SXMO_RINGTONE, vol=${SXMO_RINGVOL}%)"
|
||||
pause_media_async
|
||||
ring
|
||||
|
||||
# VIBRATE-ONLY MODE
|
||||
elif [ ! -f "$XDG_CONFIG_HOME"/sxmo/.novibrate ] && [ -f "$XDG_CONFIG_HOME"/sxmo/.noring ]; then
|
||||
sxmo_log "VIBRATE ONLY"
|
||||
|
||||
elif [ ! -f "$XDG_CONFIG_HOME/sxmo/.novibrate" ] && [ -f "$XDG_CONFIG_HOME/sxmo/.noring" ]; then
|
||||
sxmo_log "VIBRATE ONLY (vib=${SXMO_VIBRATE_STRENGTH})"
|
||||
vibrate
|
||||
fi
|
||||
|
||||
trap 'finish' INT TERM EXIT
|
||||
sleep "${SXMO_RINGTIME:-20}" &
|
||||
wait "$!"
|
||||
finish
|
||||
|
||||
Reference in New Issue
Block a user