#!/system/bin/sh ESIM_SVC="vendor.oplus.hardware.esim.IOplusEsim/default" SUB_SVC="vendor.oplus.hardware.subsys_interface.subsys_radio.ISubsysRadio/slot1" LOG=/data/adb/euicc_daemon.log M1="i32 2 i32 1 i32 0 i32 0 i32 0 i32 1 i32 1 i32 0 i32 1 i32 1 i32 1" M2="i32 2 i32 1 i32 0 i32 0 i32 0 i32 1 i32 1 i32 0 i32 1 i32 1 i32 2" log() { echo "$(date '+%F %T') [manual] $*" >> "$LOG" echo "$*" } gpio_state() { service call "$ESIM_SVC" 1 2>/dev/null | grep -oE '[0-9a-f]{8} [0-9a-f]{8}' | head -1 | awk '{print $2}' } detected() { dumpsys isub 2>/dev/null | grep -c 'simSlotIndex=1 portIndex=0 isEmbedded=1' } log "=== manual cycle start ===" service call "$ESIM_SVC" 5 i32 0 >/dev/null 2>&1 service call "$SUB_SVC" 289 i32 91 i32 1 >/dev/null 2>&1 service call "$ESIM_SVC" 3 i32 1 >/dev/null 2>&1 service call "$ESIM_SVC" 5 i32 1 >/dev/null 2>&1 sleep 1 log "gpio=$(gpio_state)" logcat -c -b radio 2>/dev/null service call phone 175 $M1 >/dev/null 2>&1 sleep 2 log "SET_SIM_TYPE[1,1] sent, restarting qcrild..." setprop ctl.restart vendor.qcrild setprop ctl.restart vendor.qcrild2 t=0 while [ $t -lt 40 ]; do n=$(logcat -d -b radio 2>/dev/null | grep -c "Received GET_SIM_TYPE_INFO") [ "${n:-0}" -ge 1 ] 2>/dev/null && break sleep 1 t=$((t+1)) done log "ril sync after ${t}s" service call phone 175 $M2 >/dev/null 2>&1 log "SET_SIM_TYPE[1,2] sent, waiting for eSIM detection..." p=0 while [ $p -lt 15 ]; do sleep 3 p=$((p+1)) d=$(detected) [ "${d:-0}" -ge 1 ] 2>/dev/null && break done log "=== manual cycle done: detect=$(detected) ($((p * 3))s) ===" pgrep -f esimd.sh >/dev/null 2>&1 || setsid /system/bin/sh /data/adb/modules/euicc_slots_fix/esimd.sh >/dev/null 2>&1