summaryrefslogtreecommitdiff
path: root/io-tool
diff options
context:
space:
mode:
authorJames Maki <jmaki@multitech.com>2010-04-23 15:10:19 -0500
committerJames Maki <jmaki@multitech.com>2010-04-23 15:10:19 -0500
commit34609050e110fdeaf9cd63888c5902031ca21b1f (patch)
tree1ac2e994ad8803c68d402a846111e7d19219ea63 /io-tool
downloadmts-io-34609050e110fdeaf9cd63888c5902031ca21b1f.tar.gz
mts-io-34609050e110fdeaf9cd63888c5902031ca21b1f.tar.bz2
mts-io-34609050e110fdeaf9cd63888c5902031ca21b1f.zip
initial commit
Diffstat (limited to 'io-tool')
-rwxr-xr-xio-tool/mts-io-sysfs241
-rw-r--r--io-tool/mts-io-sysfs-inc.sh92
-rwxr-xr-xio-tool/sysfs-tests181
3 files changed, 514 insertions, 0 deletions
diff --git a/io-tool/mts-io-sysfs b/io-tool/mts-io-sysfs
new file mode 100755
index 0000000..b32b005
--- /dev/null
+++ b/io-tool/mts-io-sysfs
@@ -0,0 +1,241 @@
+#!/usr/bin/env bash
+#
+# vim: set sw=2 ts=2 expandtab:
+#
+# Copyright (C) 2010 by Multi-Tech Systems
+#
+# Author: James Maki <jmaki@multitech.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+PATH=${PATH}:.
+
+source /usr/lib/mts-io-sysfs/mts-io-sysfs-inc.sh
+
+trap "exit_handler" EXIT
+exit_handler() {
+ local exit_code=$?
+ if [ ${exit_code} -ne 0 ]; then
+ log_error "exiting with ${exit_code}"
+ fi
+}
+
+reset_short_handler() {
+ echo "reset short signal received"
+}
+reset_long_handler() {
+ echo "reset long signal received"
+}
+RESET_SHORT_CMD="reset_short_handler"
+RESET_LONG_CMD="reset_long_handler"
+RESET_SHORT_SIGNAL=$(kill -l SIGUSR1)
+RESET_LONG_SIGNAL=$(kill -l SIGUSR2)
+
+PROGRAM=$(basename $0)
+VERSION="0.0.2"
+
+print_version() {
+ printf "${PROGRAM} ${VERSION}\n"
+ printf "Copyright (C) 2010 by Multi-Tech Systems\n"
+cat <<EOF
+This program is free software; you may redistribute it under the terms of
+the GNU General Public License version 2 or (at your option) any later version.
+This program has absolutely no warranty.
+EOF
+}
+
+usage() {
+ local out=1
+ if [ $# -eq 1 ]; then
+ out=${1}
+ fi
+
+ printf "Usage: ${PROGRAM} [ OPTIONS ] OBJECT [--] [ ARGUMENTS ]\n" >&${out}
+ printf "where OBJECT := {\n" >&${out}
+ printf " show SHOW-NAME |\n" >&${out}
+ printf " store STORE-NAME { value } |\n" >&${out}
+ printf " reset-monitor-trap [short-cmd cmd signame] [long-cmd cmd signame]\n" >&${out}
+ printf " }\n" >&${out}
+ printf "\n" >&${out}
+ printf " SHOW-NAME := {\n" >&${out}
+ printf " board-temperature |\n" >&${out}
+ printf " eth0-enabled |\n" >&${out}
+ printf " extserial-dcd |\n" >&${out}
+ printf " extserial-ri |\n" >&${out}
+ printf " led-cd |\n" >&${out}
+ printf " led-sdk-b |\n" >&${out}
+ printf " led-sig1 |\n" >&${out}
+ printf " led-sdk-c |\n" >&${out}
+ printf " led-sig2 |\n" >&${out}
+ printf " led-sdk-d |\n" >&${out}
+ printf " led-sig3 |\n" >&${out}
+ printf " led-sdk-e |\n" >&${out}
+if [ "${MTS_IO_CONTROLS_STATUS_LED}" = "true" ]; then
+ printf " led-status |\n" >&${out}
+ printf " led-sdk-a |\n" >&${out}
+fi
+if [ "${MTS_IO_CONTROLS_LS_LED}" = "true" ]; then
+ printf " led-ls |\n" >&${out}
+fi
+ printf " radio-reset |\n" >&${out}
+ printf " reset |\n" >&${out}
+ printf " reset-monitor\n" >&${out}
+ printf " }\n" >&${out}
+ printf "\n" >&${out}
+ printf " STORE-NAME := {\n" >&${out}
+ printf " eth0-enabled BOOLEAN |\n" >&${out}
+ printf " extserial-dcd BOOLEAN |\n" >&${out}
+ printf " extserial-ri BOOLEAN |\n" >&${out}
+ printf " led-cd BOOLEAN |\n" >&${out}
+ printf " led-sdk-b BOOLEAN |\n" >&${out}
+ printf " led-sig1 BOOLEAN |\n" >&${out}
+ printf " led-sdk-c BOOLEAN |\n" >&${out}
+ printf " led-sig2 BOOLEAN |\n" >&${out}
+ printf " led-sdk-d BOOLEAN |\n" >&${out}
+ printf " led-sig3 BOOLEAN |\n" >&${out}
+ printf " led-sdk-e BOOLEAN |\n" >&${out}
+if [ "${MTS_IO_CONTROLS_STATUS_LED}" = "true" ]; then
+ printf " led-status LED-VALUE |\n" >&${out}
+ printf " led-sdk-a LED-VALUE |\n" >&${out}
+fi
+if [ "${MTS_IO_CONTROLS_LS_LED}" = "true" ]; then
+ printf " led-ls BOOLEAN |\n" >&${out}
+fi
+ printf " radio-reset { 0 } |\n" >&${out}
+ printf " reset-monitor { pid short-signal long-signal }\n" >&${out}
+ printf " }\n" >&${out}
+ printf "\n" >&${out}
+ printf " OPTIONS := {\n" >&${out}
+ printf " --verbose\n" >&${out}
+ printf " }\n" >&${out}
+ printf "\n" >&${out}
+ printf " BOOLEAN := { OFF | ON }\n" >&${out}
+ printf " LED-VALUE := { OFF | ON | LED-FLASHING }\n" >&${out}
+ printf " OFF := 0\n" >&${out}
+ printf " ON := 1\n" >&${out}
+ printf " LED-FLASHING := 2\n" >&${out}
+ printf "\n" >&${out}
+}
+
+ARGS=$(getopt -o "" --long verbose,version,help -n $0 -- "$@")
+if [ $? != 0 ]; then
+ usage 2
+ exit 1
+fi
+eval set -- "${ARGS}"
+
+while true; do
+ case "$1" in
+ --version)
+ print_version
+ exit 0
+ shift
+ ;;
+
+ --help)
+ usage 1
+ exit 0
+ shift
+ ;;
+
+ --verbose)
+ VERBOSE=true
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ usage 2
+ exit 1
+ ;;
+ esac
+done
+
+if [ $# -lt 1 ]; then
+ usage 2
+ exit 1
+fi
+
+cmd=${1}
+shift
+
+case "${cmd}" in
+show)
+ show "$@"
+ ;;
+store)
+ store "$@"
+ ;;
+show-trigger)
+ show_trigger "$@"
+ ;;
+store-trigger)
+ store_trigger "$@"
+ ;;
+reset-monitor-trap)
+ while true; do
+ if [ $# -eq 0 ]; then
+ break
+ fi
+
+ if [ $# -ne 3 ]; then
+ usage 2
+ exit 1
+ fi
+
+ case "${1}" in
+ short-cmd)
+ RESET_SHORT_CMD=${2}
+ RESET_SHORT_SIGNAL=$(kill -l ${3})
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ ;;
+ long-cmd)
+ RESET_LONG_CMD=${2}
+ RESET_LONG_SIGNAL=$(kill -l ${3})
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ ;;
+ *)
+ usage 2
+ exit 1
+ ;;
+ esac
+
+ shift; shift; shift
+ done
+
+ trap "${RESET_SHORT_CMD}" ${RESET_SHORT_SIGNAL}
+ trap "${RESET_LONG_CMD}" ${RESET_LONG_SIGNAL}
+
+ store reset-monitor "$$ ${RESET_SHORT_SIGNAL} ${RESET_LONG_SIGNAL}"
+
+ while true; do
+ sleep 1
+ done
+ ;;
+*)
+ usage 2
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/io-tool/mts-io-sysfs-inc.sh b/io-tool/mts-io-sysfs-inc.sh
new file mode 100644
index 0000000..f3fde5f
--- /dev/null
+++ b/io-tool/mts-io-sysfs-inc.sh
@@ -0,0 +1,92 @@
+#!/usr/bin/env bash
+#
+# vim: set sw=2 ts=2 expandtab:
+#
+# Copyright (C) 2010 by Multi-Tech Systems
+#
+# Author: James Maki <jmaki@multitech.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+VERBOSE=false
+
+PLATFORM_NAME=sparkcell
+SYSFS_PLATFORM_DIR=/sys/devices/platform/${PLATFORM_NAME}
+
+MTS_IO_CONTROLS_STATUS_LED=true
+MTS_IO_CONTROLS_LS_LED=false
+
+LEDS_GPIO_DIR=/sys/devices/platform/leds-gpio/leds
+
+log_info() {
+ if [ "${VERBOSE}" = "true" ]; then
+ echo "info:" "$@"
+ fi
+}
+
+log_error() {
+ echo "error:" "$@" >&2
+}
+
+store() {
+ if [ $# -ne 2 ]; then
+ log_error "store name value"
+ exit 99
+ fi
+
+ local name=${1}
+ local value=${2}
+
+ log_info "setting ${name} to '${value}'"
+ echo -n "${value}" > ${SYSFS_PLATFORM_DIR}/${name}
+}
+
+show() {
+ if [ $# -ne 1 ]; then
+ log_error "show name"
+ exit 99
+ fi
+
+ local name=${1}
+
+ cat ${SYSFS_PLATFORM_DIR}/${name}
+}
+
+store_trigger() {
+ if [ $# -ne 2 ]; then
+ log_error "store_trigger name value"
+ exit 99
+ fi
+
+ local name=${1}
+ local value=${2}
+
+ log_info "setting ${name} to '${value}'"
+ echo -n "${value}" > cat ${LEDS_GPIO_DIR}/${name}/trigger
+}
+
+show_trigger() {
+ if [ $# -ne 1 ]; then
+ log_error "show_trigger name"
+ exit 99
+ fi
+
+ local name=${1}
+
+ cat ${LEDS_GPIO_DIR}/${name}/trigger
+}
+
+
diff --git a/io-tool/sysfs-tests b/io-tool/sysfs-tests
new file mode 100755
index 0000000..cb65c57
--- /dev/null
+++ b/io-tool/sysfs-tests
@@ -0,0 +1,181 @@
+#!/usr/bin/env bash
+
+PATH=${PATH}:.
+
+source /usr/lib/mts-io-sysfs/mts-io-sysfs-inc.sh
+
+yesno() {
+ if [ $# -ne 1 ]; then
+ echo "yesno question"
+ exit 99
+ fi
+
+ local question=${1}
+
+ while :
+ do
+ echo -n "${question}? [y/n] "
+ read line
+ local line=$(echo ${line} | tr A-Z a-z)
+ case "${line}" in
+ y)
+ return 0
+ ;;
+ n)
+ return 1
+ ;;
+ *)
+ ;;
+ esac
+ done
+}
+
+store_assert() {
+ if [ $# -ne 2 ]; then
+ log_error "store_assert name value"
+ exit 99
+ fi
+
+ local name=${1}
+ local value=${2}
+
+ local old_value="$(cat ${SYSFS_PLATFORM_DIR}/${name})"
+ store ${name} "${value}"
+ local new_value="$(cat ${SYSFS_PLATFORM_DIR}/${name})"
+
+ if [ "${new_value}" != "${value}" ]; then
+ log_error "${name}: '${new_value}' != '${value}'"
+ exit 1
+ fi
+}
+
+show_assert() {
+ if [ $# -ne 2 ]; then
+ log_error "show_assert name value"
+ exit 99
+ fi
+
+ local name=${1}
+ local expected_value=${2}
+
+ log_info "checking if ${name} is '${expected_value}'"
+
+ local actual_value="$(show ${name})"
+
+ if [ "${expected_value}" != "${actual_value}" ]; then
+ log_error "${name}: '${expected_value}' != '${actual_value}'"
+ exit 1
+ fi
+}
+
+show_assert_in_set() {
+ if [ $# -lt 2 ]; then
+ log_error "show_assert_in_set name value0 [value1 ...]"
+ exit 99
+ fi
+
+ local name=${1}
+ shift
+
+ log_info "checking if ${name} is in set [$*]"
+
+ local actual_value="$(show ${name})"
+
+ for value in "$@"; do
+ if [ "${value}" = "${actual_value}" ]; then
+ log_info "${name} is '${value}'"
+ return
+ fi
+ done
+
+ exit 1
+}
+
+VERBOSE=true
+
+echo none > /sys/devices/platform/leds-gpio/leds/status/trigger
+
+modprobe -r mts-io
+modprobe mts-io
+
+sleep 2
+
+show_assert radio-reset 1
+log_info "resetting radio..."
+store radio-reset 0
+sleep 2
+show_assert radio-reset 1
+log_info "radio reset"
+
+show_assert eth0-enabled 1
+store_assert eth0-enabled 0
+sleep 2
+if ! yesno "Are the ethernet LEDs off"; then
+ exit 1
+fi
+store_assert eth0-enabled 1
+sleep 2
+if ! yesno "Are the ethernet LEDs on"; then
+ exit 1
+fi
+
+show_assert extserial-dcd 0
+store_assert extserial-dcd 1
+store_assert extserial-dcd 0
+
+show_assert extserial-ri 0
+store_assert extserial-ri 1
+store_assert extserial-ri 0
+
+show_assert led-sig1 0
+store_assert led-sig1 1
+store_assert led-sig1 0
+
+show_assert led-sdk-c 0
+store_assert led-sdk-c 1
+store_assert led-sdk-c 0
+
+show_assert led-sig2 0
+store_assert led-sig2 1
+store_assert led-sig2 0
+
+show_assert led-sdk-d 0
+store_assert led-sdk-d 1
+store_assert led-sdk-d 0
+
+show_assert led-sig3 0
+store_assert led-sig3 1
+store_assert led-sig3 0
+
+show_assert led-sdk-e 0
+store_assert led-sdk-e 1
+store_assert led-sdk-e 0
+
+show_assert led-cd 0
+store_assert led-cd 1
+store_assert led-cd 0
+
+show_assert led-sdk-b 0
+store_assert led-sdk-b 1
+store_assert led-sdk-b 0
+
+show_assert led-status 0
+store_assert led-status 1
+store_assert led-status 0
+
+show_assert led-sdk-a 0
+store_assert led-sdk-a 1
+store_assert led-sdk-a 0
+
+show_assert reset 0
+store reset 1
+show_assert reset 0
+
+show_assert_in_set board-temperature {30..40}
+store board-temperature 1000
+show_assert_in_set board-temperature {30..40}
+
+show_assert reset-monitor "-1 10 12"
+
+exit 0
+