#!/data/data/com.termux/files/usr/bin/bash set -e -u SCRIPTNAME=termux-sensor show_usage () { echo "Usage: $SCRIPTNAME" echo "Get information about types of sensors as well as live data" echo " -h, help Show this help" echo " -a, all Listen to all sensors (WARNING! may have battery impact)" echo " -c, cleanup Perform cleanup (release sensor resources)" echo " -l, list Show list of available sensors" echo " -s, sensors [,,,] Sensors to listen to (can contain just partial name)" echo " -d, delay [ms] Delay time in milliseconds before receiving new sensor update" echo " -n, limit [num] Number of times to read sensor(s) (default: continuous) (min: 1)" exit 0 } # ensure we properly release resources if needed on ^C trap handle_interrupt SIGTERM SIGINT if [ $# -eq 0 ]; then echo "No arguments supplied!" show_usage exit 1; fi SENSOR_FLAG=1 ALL_SENSORS_FLAG=2 LIST_FLAG=4 CLEANUP_FLAG=8 DELAY_FLAG=16 LIMIT_FLAG=32 FLAGS=0 handle_interrupt () { echo "Caught interrupt.. Finishing..." cleanup } cleanup () { if [ $((FLAGS & (ALL_SENSORS_FLAG | SENSOR_FLAG))) != 0 ]; then echo "Performing sensor cleanup" call_api -a cleanup else echo "No cleanup necessary" fi } get_sensors () { if [ $# -gt 1 ]; then usage_error "Sensor arg should be a comma delimited string!" fi } get_delay () { if [ $# -gt 1 ]; then usage_error "Too many arguments for -d delay" elif ! [[ $1 =~ ^[0-9]+$ ]]; then usage_error "Illegal argument! -d delay arg should be a number!" fi } get_limit () { if [ $# -gt 1 ]; then usage_error "Too many arguments for -n limit" elif ! [[ $1 =~ ^[0-9]+$ ]]; then usage_error "Illegal argument! -n limit arg should be a number!" fi } call_api () { /data/data/com.termux/files/usr/libexec/termux-api Sensor "$@" } set_flag () { FLAGS=$((FLAGS | $1)); } usage_error () { echo "ERROR: $@" show_usage exit 1 } PARAMS=() while getopts :h,a,c,l,s:d:n: option do case "$option" in h) show_usage ;; a) set_flag $ALL_SENSORS_FLAG; PARAMS+=(-a sensors --ez all true);; c) set_flag $CLEANUP_FLAG; PARAMS=(-a cleanup) ;; l) set_flag $LIST_FLAG; PARAMS=(-a list) ;; s) set_flag $SENSOR_FLAG; get_sensors "$OPTARG"; PARAMS+=(-a sensors --es sensors "$OPTARG") ;; d) set_flag $DELAY_FLAG; get_delay $OPTARG; PARAMS+=(--ei delay $OPTARG) ;; n) set_flag $LIMIT_FLAG; get_limit $OPTARG; PARAMS+=(--ei limit $OPTARG) ;; ?) echo "$SCRIPTNAME: illegal option -$OPTARG"; exit 1; esac done shift $((OPTIND -1)) # Validate options were set properly if [ $((FLAGS & CLEANUP_FLAG)) -ne 0 ] && [ $FLAGS -ne $CLEANUP_FLAG ]; then usage_error "No other options should be specified with -c cleanup!" elif [ $((FLAGS & LIST_FLAG)) -ne 0 ] && [ $FLAGS -ne $LIST_FLAG ]; then usage_error "No other options should be specified with -l list!" elif [ $((FLAGS & DELAY_FLAG)) -ne 0 ] && [ $((FLAGS & (ALL_SENSORS_FLAG | SENSOR_FLAG))) -eq 0 ]; then usage_error "Use -s or -a option when using -d delay!" elif [ $((FLAGS & ALL_SENSORS_FLAG)) -ne 0 ] && [ $((FLAGS & SENSOR_FLAG)) -ne 0 ]; then usage_error "Listed sensors will be ignored with -a all option!" fi call_api "${PARAMS[@]}"