-
-
Save zefie/87fc4a3d469b38a7922aef93e1890edc to your computer and use it in GitHub Desktop.
Primitive script to scan satellite PIDs on minisatip using dumb chipset (eg no pids=all support)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
OLDIFS="${IFS}" | |
TIMEOUT=10 | |
HOST="192.168.11.77" | |
SRC=1 | |
FREQ=12145 | |
POL="V" | |
SYS="DVBS" | |
RATE=20000 | |
DEFAULT_PIDS="1,16,17,18,20,21,8191" | |
if [ ! -z "${*}" ]; then | |
while [ "${1:0:1}" == "-" ]; do | |
case "${1}" in | |
"-t"|"--timeout") | |
TIMEOUT="${2}" | |
shift 2; | |
;; | |
"-h"|"--host") | |
HOST="${2}" | |
shift 2; | |
;; | |
"-s"|"--src"|"--source") | |
SRC="${2}" | |
shift 2; | |
;; | |
"-f"|"--freq"|"--frequency") | |
FREQ="${2}" | |
shift 2; | |
;; | |
"-p"|"--pol"|"--polarity") | |
POL="${2}" | |
shift 2; | |
;; | |
"-sys"|"--sys"|"--system") | |
SYS="${2}" | |
shift 2; | |
;; | |
"-sr"|"--symbol-rate") | |
RATE="${2}" | |
shift 2; | |
;; | |
*) | |
echo "Help for ${0}:" | |
echo "" | |
echo "-t --timeout .. (int) Seconds to wait for data from a PID (Def: ${TIMEOUT})" | |
echo "-s --src, --source .. (int) DiSEqC Source" | |
echo "-f --freq, --frequency .. (int) Transponder Frequency" | |
echo "-p --pol, --polarity .. [H,V,L,R] LNB Polarization" | |
echo "-s --sys, --system .. [DVBS,DVBS2] DVB System Type" | |
echo "-sr --symbol-rate .. (int) Transponder Symbol Rate" | |
echo "" | |
echo "By default, the tool will search for the following PIDS:" | |
echo "${DEFAULT_PIDS}" | |
echo "You can specify a set of PIDs like above, or a range" | |
echo "such as 7400-7600. To scan a generated range of PIDs" | |
echo "you can specify a PID with a + sign, eg +7500, and the tool" | |
echo "will search for 7500-7530" | |
exit 1; | |
;; | |
esac | |
done | |
fi | |
FOUNDPIDS=(); | |
URL="http://${HOST}:8080/?src=1${SRC}&freq=${FREQ}&pol=${POL}&msys=${SYS}&sr=${RATE}&pids=" | |
TESTFILE="/mnt/d/test.ts" | |
scanpid() { | |
if [ -f "${TESTFILE}" ]; then | |
rm "${TESTFILE}" | |
touch "${TESTFILE}" | |
fi | |
echo "Scanning PID(s) on ${FREQ}${POL} @ ${RATE}sym/s (waiting to up ${TIMEOUT} seconds): ${1}... " | |
#curl --silent "${URL}${1}" --connect-timeout ${TIMEOUT} --max-time ${TIMEOUT} --max-filesize 1k -o "${TESTFILE}" | |
wget -q --show-progress --tries=1 --timeout ${TIMEOUT} -O - "${URL}${1}" | dd of=${TESTFILE} iflag=fullblock bs=4096 count=1 2>/dev/null | |
RES=$? | |
return ${RES} | |
} | |
runmain() { | |
scanpid "${1}" | |
local RES=$? | |
if [ ${RES} -eq 0 ]; then | |
local SIZE=$(stat --printf "%s" "${TESTFILE}"); | |
if [ ${SIZE} -gt 0 ]; then | |
if [ $(echo "${1}" | grep -c "\,") -eq 0 ]; then | |
FOUNDPIDS+=(${1}) | |
echo "Data detected on PID ${1}!" | |
else | |
local PIDA=($(echo "${1}" | tr ',' ' ')); | |
local PIDC=${#PIDA[@]}; | |
local PIDL=$(echo ${PIDC} | awk '{print int($1/2)}') | |
local PID1="" | |
local PID2="" | |
for f in $(seq 0 $((PIDL - 1))); do | |
PID1+="${PIDA[${f}]}," | |
done | |
for f in $(seq ${PIDL} $((PIDC - 1))); do | |
PID2+="${PIDA[${f}]}," | |
done | |
echo "" | |
runmain "${PID1::-1}" | |
runmain "${PID2::-1}" | |
# OLDIFS="${IFS}" | |
# IFS=$'\n' | |
# for f in $(echo "${PIDS}" | tr ',' '\n'); do | |
# runmain "${f}"; | |
# done | |
# IFS="${OLDIFS}" | |
fi | |
else | |
echo "" | |
fi | |
else | |
echo "" | |
fi | |
} | |
if [ ! -z "${1}" ]; then | |
if [ $(echo "${1}" | grep "\," -c) -gt 0 ]; then | |
PIDS="${1}" | |
else | |
MINPID=${1} | |
if [ "${MINPID:0:1}" == "+" ]; then | |
PIDS=$(seq -s"," ${MINPID} $((MINPID+30))) | |
elif [ $(echo "${MINPID}" | grep -c "\-") -gt 0 ]; then | |
MAXPID=$(echo "${MINPID}" | cut -d'-' -f2) | |
MINPID=$(echo "${MINPID}" | cut -d'-' -f1) | |
RANGE="${MINPID} - ${MAXPID}" | |
echo "Scanning range: ${RANGE}" | |
MAX30PID=${MINPID} | |
while [ ${MINPID} -le ${MAXPID} ]; do | |
MAX30PID=$((MINPID + 30)) | |
if [ ${MAX30PID} -gt ${MAXPID} ]; then | |
MAX30PID=${MAXPID} | |
fi | |
PIDS=$(seq -s"," ${MINPID} ${MAX30PID}) | |
MINPID=$((MAX30PID + 1)) | |
runmain "${PIDS}" | |
done | |
unset PIDS | |
elif [ ${MINPID} -gt 0 ]; then | |
PIDS="$(echo "${MINPID}" | sed "s|+||")" | |
else | |
echo "Usage: ${0} [pid|pids]" | |
exit 1; | |
fi | |
fi | |
else | |
PIDS="${DEFAULT_PIDS}" | |
fi | |
if [ ! -z "${PIDS}" ]; then | |
runmain "${PIDS}" | |
fi | |
if [ ${#FOUNDPIDS[@]} -gt 0 ]; then | |
echo "Found PIDS: ${FOUNDPIDS[*]}" | |
else | |
if [ -z "${RANGE}" ]; then | |
echo "Did not find any PIDs (Searched: ${PIDS})" | |
else | |
echo "Did not find any PIDs (Searched PID range: ${RANGE})" | |
fi | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment