Compare commits
No commits in common. "5eb94d830e40dc57ee4abf8f7dc94c5710a3a332" and "03ef238a33bd37d5045b64da23164e4b66a6dd59" have entirely different histories.
5eb94d830e
...
03ef238a33
|
@ -0,0 +1,20 @@
|
|||
cn-fwupd() {
|
||||
local addr="$1"
|
||||
local puf="$2"
|
||||
local ext="${puf##*.}"
|
||||
|
||||
case $ext in
|
||||
|
||||
zip)
|
||||
printf 'put %q firmware/update.zip' "$puf" | cnsftp $addr
|
||||
cnssh $addr pushupdate FULL
|
||||
;;
|
||||
puf)
|
||||
printf 'put %q firmware/' "$puf" | cnsftp $addr
|
||||
cnssh $addr puf
|
||||
;;
|
||||
*)
|
||||
echo "Error: Bad file type. Currently, only'.zip' and '.puf' file types are supported."
|
||||
;;
|
||||
esac
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
cn-progload() {
|
||||
local addr="$1"
|
||||
local project="$2" # /foo/bar/baz.bunk
|
||||
local ext="${project##*.}" # bunk
|
||||
local projfname="${project%.*}" # /foo/bar/baz
|
||||
local projfnamebase="${projfname##*/}" # baz
|
||||
local zigstash
|
||||
zigstash="$(mktemp /tmp/$projfnamebase.XXXX.zig)"
|
||||
# Add a zero in front of the 3rd arg
|
||||
local slot="0${3}"
|
||||
# expand only to the last 2 digits of $slot
|
||||
slot="${slot: -2}"
|
||||
|
||||
|
||||
case $ext in
|
||||
|
||||
vtz)
|
||||
if [[ -n $slot ]]; then
|
||||
echo "==NOTICE== Ignoring slot number for touchpanel project..."
|
||||
fi
|
||||
printf 'put %q %q' "$project" "/display/"| cnsftp "$addr"
|
||||
cnssh "$addr" projectload
|
||||
;;
|
||||
|
||||
lpz)
|
||||
if [[ -z $slot ]]; then
|
||||
echo "==NOTICE== No target program slot defined. Assuming Slot 01..."
|
||||
slot=01
|
||||
fi
|
||||
# Stop and delete current program in $slot
|
||||
cnssh "$addr" killprog -P$slot
|
||||
# Upload
|
||||
printf 'put %q %q' "$project" "/Program$slot" | cnsftp "$addr"
|
||||
# Load the program
|
||||
cnssh "$addr" progload -p:$slot
|
||||
# Zip up the sig file in a temporary location
|
||||
zip -j - "$projfname.sig" > "$zigstash"
|
||||
# Upload the zig
|
||||
printf 'put %q %q' "$zigstash" "/Program$slot/$projfnamebase.zig" | cnsftp "$addr"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Error: Bad file type. Currently only supports vtz and lpz projects."
|
||||
;;
|
||||
esac
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
cn-scp() {
|
||||
|
||||
shopt -q extglob; local extglob_set=$?
|
||||
if ((extglob_set)); then
|
||||
echo "cn-scp: extglob must be set for this function to work properly."
|
||||
return 1
|
||||
fi
|
||||
local source="$1"
|
||||
local dest="$2"
|
||||
local sep=":"
|
||||
local host sourcefile destfile
|
||||
|
||||
|
||||
if [[ -z $source ]]; then
|
||||
echo "Error: No source provided"
|
||||
return 1
|
||||
elif [[ -z $dest ]]; then
|
||||
echo "Error: No destination provided"
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
# Host determination:
|
||||
local loopcount=0
|
||||
for i in "$source" "$dest"; do
|
||||
case "$i" in
|
||||
# Will match if $sep exists in string once
|
||||
*@("$sep")* )
|
||||
# Check if $host is unset
|
||||
if [[ -z $host ]]; then
|
||||
host="${i%%:*}"
|
||||
sourcefile="${source#*:}"
|
||||
destfile="${dest#*:}"
|
||||
# If this is the first run of the loop, the remote is the source
|
||||
if [[ "$loopcount" == 0 ]]; then
|
||||
operation="get"
|
||||
# If this is the second run of the loop, the remote is the dest
|
||||
elif [[ "$loopcount" == 1 ]]; then
|
||||
operation="put"
|
||||
# If this is anything other than the first or second loop, GTFO
|
||||
else
|
||||
echo "Error: Loop counting error."
|
||||
return 1
|
||||
fi
|
||||
continue
|
||||
else
|
||||
echo "Error: Remote path for *both* source and destination is not supported."
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
((loopcount++))
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
((loopcount++))
|
||||
done
|
||||
# END: Host determination
|
||||
|
||||
|
||||
printf '%q %q %q' "$operation" "$sourcefile" "$destfile" | cnsftp "$host"
|
||||
|
||||
}
|
|
@ -0,0 +1,154 @@
|
|||
cnssh() { # Helper for sshing into Crestron devices
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# cnssh <ip address> [command]
|
||||
#
|
||||
#
|
||||
# OPTIONS
|
||||
#
|
||||
# -u <username> Specify the username to use with ssh
|
||||
# Default: "Crestron"
|
||||
#
|
||||
# CONFIG ARRAY: cnssh_conf
|
||||
#
|
||||
#
|
||||
# | Option | Valid Args | Default | Description |
|
||||
# | ------------- | ------------- | ------------- | --------------------------------------------- |
|
||||
# | uname | <string> | "Crestron" | The username for use with ssh |
|
||||
# | pass | <string> | "" | The password for use with ssh (via sshpass) |
|
||||
# | addr | <string> | <ip address> | The address of the remote device |
|
||||
# | cmd | <string> | [command] | The command to execute on the remote device |
|
||||
|
||||
|
||||
####
|
||||
# Config init
|
||||
|
||||
# Initialize runtime config array
|
||||
declare -A conf
|
||||
|
||||
# Initialize config array if it doesn't already exist
|
||||
if [[ ! -v cnssh_conf[@] ]]; then
|
||||
declare -A cnssh_conf
|
||||
else
|
||||
for opt in "${!cnssh_conf[@]}"; do
|
||||
conf[$opt]=${cnssh_conf[$opt]}
|
||||
done
|
||||
fi
|
||||
|
||||
# Initialize and populate default config array
|
||||
declare -A dconf
|
||||
dconf=(
|
||||
[method]="ssh"
|
||||
[uname]="Crestron"
|
||||
[pass]=""
|
||||
)
|
||||
|
||||
# Apply defaults to running config
|
||||
for opt in "${!dconf[@]}"; do
|
||||
# Don't apply the default if it's already set
|
||||
if [[ ! -v conf[$opt] ]]; then
|
||||
conf[$opt]=${dconf[$opt]}
|
||||
fi
|
||||
done
|
||||
|
||||
declare -A sshopts
|
||||
sshopts=(
|
||||
[StrictHostKeyChecking]="no"
|
||||
[GlobalKnownHostsFile]="/dev/null"
|
||||
[UserKnownHostsFile]="/dev/null"
|
||||
[LogLevel]="ERROR"
|
||||
)
|
||||
|
||||
# Config init
|
||||
####
|
||||
|
||||
|
||||
####
|
||||
# Option Parsing
|
||||
|
||||
while getopts ":u:" opt; do
|
||||
case $opt in
|
||||
u)
|
||||
conf[uname]="$OPTARG"
|
||||
;;
|
||||
\?)
|
||||
echo "Unknown option -$OPTARG"
|
||||
return 1
|
||||
;;
|
||||
:)
|
||||
echo "Option requires argument: -$OPTARG"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Remove parsed options from $@
|
||||
shift $((OPTIND -1))
|
||||
|
||||
# Set the address based on the first
|
||||
# arg if not already set in config array
|
||||
if [[ ! -v conf[addr] ]]; then
|
||||
conf[addr]="$1"
|
||||
shift 1
|
||||
fi
|
||||
|
||||
# Set the command as the rest of argv
|
||||
# if not already set in config array
|
||||
if [[ ! -v conf[cmd] ]]; then
|
||||
conf[cmd]="$*"
|
||||
fi
|
||||
|
||||
# Set ssh user name
|
||||
sshopts[User]="${conf[uname]}"
|
||||
|
||||
# Set ssh host if not using sftp mode
|
||||
case ${conf[method]} in
|
||||
ssh)
|
||||
:
|
||||
;;
|
||||
sftp)
|
||||
unset "conf[cmd]"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown method: ${conf[method]}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Option Parsing
|
||||
####
|
||||
|
||||
|
||||
####
|
||||
# Main
|
||||
|
||||
sshpass -p "${conf[pass]}" \
|
||||
"${conf[method]}" \
|
||||
$( # Format sshopts as a string that an ssh program understands
|
||||
for opt in "${!sshopts[@]}"; do
|
||||
printf '%s %s=%s ' "-o" "$opt" "${sshopts[$opt]}"
|
||||
done
|
||||
) \
|
||||
"${conf[addr]}" \
|
||||
"${conf[cmd]}"
|
||||
|
||||
# Main
|
||||
####
|
||||
}
|
||||
|
||||
|
||||
cnsftp() {
|
||||
# Initialize config array if it doesn't already exist
|
||||
if [[ ! -v cnssh_conf[@] ]]; then
|
||||
declare -A cnssh_conf
|
||||
fi
|
||||
|
||||
# Set sftp mode instead of ssh
|
||||
cnssh_conf[method]="sftp"
|
||||
cnssh_conf[addr]="$*"
|
||||
|
||||
cnssh
|
||||
|
||||
unset "cnssh_conf[method]"
|
||||
unset "cnssh_conf[addr]"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
mkcdtemp() {
|
||||
cd "$(mktemp -d)" || return
|
||||
}
|
Loading…
Reference in New Issue