From 34609050e110fdeaf9cd63888c5902031ca21b1f Mon Sep 17 00:00:00 2001 From: James Maki Date: Fri, 23 Apr 2010 15:10:19 -0500 Subject: initial commit --- io-tool/mts-io-sysfs | 241 ++++++++++++++++++++++++++++++++++++++++++++ io-tool/mts-io-sysfs-inc.sh | 92 +++++++++++++++++ io-tool/sysfs-tests | 181 +++++++++++++++++++++++++++++++++ 3 files changed, 514 insertions(+) create mode 100755 io-tool/mts-io-sysfs create mode 100644 io-tool/mts-io-sysfs-inc.sh create mode 100755 io-tool/sysfs-tests (limited to 'io-tool') 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 +# +# 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 <&${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 +# +# 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 + -- cgit v1.2.3