2.15.26
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
|
||||
# The application supplies its own PID. Refuse broad or malformed targets.
|
||||
TARGET_PID="$1"
|
||||
LASER_DEVICE="${2:-/dev/ttyS1}"
|
||||
LASER_BAUD="${3:-9600}"
|
||||
|
||||
turn_off_laser() {
|
||||
if [ ! -c "$LASER_DEVICE" ]; then
|
||||
echo "[CHARGE] laser serial device not found: $LASER_DEVICE" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
stty -F "$LASER_DEVICE" "$LASER_BAUD" raw -echo 2>/dev/null || return 1
|
||||
printf '\252\000\001\276\000\001\000\000\300' > "$LASER_DEVICE"
|
||||
}
|
||||
|
||||
case "$TARGET_PID" in
|
||||
''|*[!0-9]*)
|
||||
echo "[CHARGE] invalid application pid: $TARGET_PID" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$TARGET_PID" -le 1 ]; then
|
||||
echo "[CHARGE] refusing to terminate pid: $TARGET_PID" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# First request laser-off while the application still owns the initialized UART.
|
||||
turn_off_laser || true
|
||||
|
||||
kill -TERM "$TARGET_PID" 2>/dev/null || true
|
||||
|
||||
# Wait up to two seconds for a graceful exit, then force termination.
|
||||
WAIT_COUNT=0
|
||||
while kill -0 "$TARGET_PID" 2>/dev/null && [ "$WAIT_COUNT" -lt 20 ]; do
|
||||
sleep 0.1
|
||||
WAIT_COUNT=$((WAIT_COUNT + 1))
|
||||
done
|
||||
if kill -0 "$TARGET_PID" 2>/dev/null; then
|
||||
kill -KILL "$TARGET_PID" 2>/dev/null || true
|
||||
sleep 0.1
|
||||
fi
|
||||
|
||||
# Send laser-off again after the application releases the UART.
|
||||
turn_off_laser || true
|
||||
Reference in New Issue
Block a user