#!/bin/sh
# ☠️☠️ POURQUOI CE CROCHET EXISTE — mesure du 19/08, journal a l'appui.
#
#   Le 13-bis : au reveil d'une veille de 3 h 35, le Wi-Fi ne revient pas, et
#   TOUTES les interfaces reseau tombent avec lui — le lien USB compris, donc on
#   ne peut meme plus relever le journal a chaud.
#
#   Le noyau nomme lui-meme le coupable, et ce n'est pas le modem :
#
#     WARNING: net/mac80211/util.c:1954 at ieee80211_reconfig+0x430/0x1844
#     Hardware became unavailable upon resume.
#     Call trace:
#        ieee80211_reconfig -> ieee80211_resume -> wiphy_resume
#        -> dpm_run_callback -> device_resume -> async_resume
#
#   C'est la REPRISE DE VEILLE. Un second WARN suit — drv_stop, driver-ops.c:41 :
#   mac80211 ARRETE le pilote. C'est ce stop qui laisse ar->state a OFF, l'etat
#   d'ou ath10k_core_start_recovery ne repart pas (core.c:2610 : un simple warn).
#
# ⛔ CE QUE CE CROCHET NE FAIT PAS, ET POURQUOI
#
#   Il ne relance PAS le modem. La proposition « detecter le plantage du modem et
#   le relancer » est refutee par le journal lui-meme : le modem est revenu SEUL
#   en 523 ms et le Wi-Fi est reste par terre SIX MINUTES. En plus, arreter le
#   modem ferait disparaitre le service QRTR 69, donc couperait la radio qu'on
#   veut sauver.
#
#   ✅ 19/08 AU SOIR — LE REMEDE EST MESURE, SUR UN VRAI 13-bis. C'est unbind
#   puis bind du pilote, et RIEN D'AUTRE. Les deux etages doux qui figuraient ici
#   ont ete essayes sur la panne reelle et REFUTES :
#
#     19:50:40  etage 1 : ip link set wlan0 up
#     19:51:12    RTNETLINK answers: Operation timed out      <- 32 s perdues
#     19:51:44  etage 2 : nmcli radio wifi off puis on
#     19:52:09    Erreur : NetworkManager n'est pas lance.
#     19:52:49  ECHEC des deux etages
#
#   ⚠️ Et « NetworkManager n'est pas lance » etait un FAUX MESSAGE : NRestarts=0,
#      NM actif sans interruption depuis la veille. nmcli parle par D-Bus, le bus
#      etait bloque, nmcli a expire — et il a accuse NM.
#
#   Le unbind/bind, lui, refait passer le pilote par probe() au lieu de start() :
#   le QMI repond, et l'association se refait en 6 s. SANS REDEMARRAGE.
#
# ⚠️ IL NE RETARDE JAMAIS LE REVEIL. systemd-sleep execute ces scripts EN SERIE
#    et ATTEND leur fin : tout ce qui dort ici rallonge la sortie de veille.
#    D'ou le systemd-run --no-block, qui rend la main tout de suite.

[ "$1" = "post" ] || exit 0

case "$2" in
	suspend|suspend-then-hibernate|hybrid-sleep) ;;
	*) exit 0 ;;
esac

systemd-run --no-block --collect \
	--unit=joyeuse-wifi-reveil-"$(date +%s)" \
	/usr/libexec/joyeuse-wifi-reveil-verifier

exit 0
