#!/bin/bash -e # # Control step motor rotate of sled function set_gpio() { NET_NAME=$1 OUT_VAL=$2 mapfile -t -d " " GPIO_INFO < <(gpiofind "$NET_NAME") if [ "${#GPIO_INFO[@]}" -ne 2 ]; then echo "set_gpio: can not find gpio, $NET_NAME" return 1 fi echo -n "set_gpio: set $NET_NAME = $OUT_VAL" if ! gpioset "${GPIO_INFO[0]}" "${GPIO_INFO[1]%$'\n'}"="$OUT_VAL"; then echo " failed" return 1 fi echo " success" return 0 } #Get i2c bus number for sledN function get_bus_num() { SLED_NUM=$1 local bus=0 if [[ "$SLED_NUM" = [0-5] ]]; then bus="$SLED_NUM" fi echo "$bus" } #Enable sledN Motor VRef function open_vref() { i2cset -f -y "${1}" 0x67 0x06 0x95 } #Disable sledN Motor VRef function close_vref() { i2cset -f -y "${1}" 0x67 0x06 0x55 } ####################################### # Setting step motor control pins to start/stop motor # Arguments: # 1. SLED NUMBER # 2. Value of STBY RESET PIN # 3. Value of ENABLE PIN # 4. Value of DIRECTION PIN ####################################### function set_motor() { STBY_PIN="SLED${1}_MD_STBY_RESET" EN_PIN="SLED${1}_MD_IOEXP_EN_FAULT" DIR_PIN="SLED${1}_MD_DIR" set_gpio "$STBY_PIN" "$2" set_gpio "$EN_PIN" "$3" set_gpio "$DIR_PIN" "$4" } function show_usage(){ echo "Usage: motor-ctrl [sled0 | sled1 | sled2 | sled3 | sled4 | sled5] [f r s]" echo " f : Step Motor go forward" echo " r : Step Motor go reverse" echo " s : Step Motor stop " } if [ $# -ne 2 ]; then show_usage exit 1; fi if [[ "$1" =~ ^(slot[0-5]{1})$ ]] || [[ "$1" =~ ^(sled[0-5]{1})$ ]]; then SLED=$1 SLED_NUM=${SLED:4} I2C_NUM=$(get_bus_num "$SLED_NUM") ACTION=$2 else echo "invalid sled name: $1" exit 1; fi if [[ "$ACTION" == "s" ]]; then echo "stop motor" set_motor "$SLED_NUM" 1 0 0 close_vref "$I2C_NUM" elif [[ "$ACTION" == "f" ]];then echo "start motor, direction:forward" set_motor "$SLED_NUM" 1 1 0 open_vref "$I2C_NUM" elif [[ "$ACTION" == "r" ]];then echo "start motor, direction:reverse" set_motor "$SLED_NUM" 1 1 1 open_vref "$I2C_NUM" else echo "Error: Unknown action!" exit 1 fi exit 0