Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 1 | #!/bin/bash -e |
| 2 | # |
| 3 | # Control step motor rotate of sled |
| 4 | |
| 5 | function set_gpio() |
| 6 | { |
| 7 | NET_NAME=$1 |
| 8 | OUT_VAL=$2 |
| 9 | mapfile -t -d " " GPIO_INFO < <(gpiofind "$NET_NAME") |
| 10 | if [ "${#GPIO_INFO[@]}" -ne 2 ]; then |
| 11 | echo "set_gpio: can not find gpio, $NET_NAME" |
| 12 | return 1 |
| 13 | fi |
| 14 | echo -n "set_gpio: set $NET_NAME = $OUT_VAL" |
| 15 | if ! gpioset "${GPIO_INFO[0]}" "${GPIO_INFO[1]%$'\n'}"="$OUT_VAL"; then |
| 16 | echo " failed" |
| 17 | return 1 |
| 18 | fi |
| 19 | echo " success" |
| 20 | return 0 |
| 21 | } |
| 22 | |
Allen.Wang | 78d1c32 | 2022-01-13 20:09:15 +0800 | [diff] [blame] | 23 | function get_gpio() |
| 24 | { |
| 25 | NET_NAME=$1 |
| 26 | RET_VAL=2 |
| 27 | |
| 28 | mapfile -t -d " " GPIO_INFO < <(gpiofind "$NET_NAME") |
| 29 | if [ "${#GPIO_INFO[@]}" -ne 2 ]; then |
| 30 | echo "get_gpio: can not find gpio, $NET_NAME" >&2 |
| 31 | return 1 |
| 32 | fi |
| 33 | if ! RET_VAL=$(gpioget "${GPIO_INFO[0]}" "${GPIO_INFO[1]%$'\n'}") ; then |
| 34 | echo "get_gpio: get ${NET_NAME} failed" >&2 |
| 35 | return 1 |
| 36 | fi |
| 37 | echo "${RET_VAL}" |
| 38 | return 0 |
| 39 | } |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 40 | ####################################### |
| 41 | # Setting step motor control pins to start/stop motor |
| 42 | # Arguments: |
| 43 | # 1. SLED NUMBER |
| 44 | # 2. Value of STBY RESET PIN |
| 45 | # 3. Value of ENABLE PIN |
| 46 | # 4. Value of DIRECTION PIN |
Allen.Wang | 6af0dff | 2021-12-28 20:23:05 +0800 | [diff] [blame] | 47 | # 5. Value of Motor Driver VREF PIN |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 48 | ####################################### |
| 49 | function set_motor() { |
| 50 | STBY_PIN="SLED${1}_MD_STBY_RESET" |
| 51 | EN_PIN="SLED${1}_MD_IOEXP_EN_FAULT" |
| 52 | DIR_PIN="SLED${1}_MD_DIR" |
Allen.Wang | 6af0dff | 2021-12-28 20:23:05 +0800 | [diff] [blame] | 53 | VREF_PIN="SLED${1}_MD_REF_PWM" |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 54 | set_gpio "$STBY_PIN" "$2" |
| 55 | set_gpio "$EN_PIN" "$3" |
| 56 | set_gpio "$DIR_PIN" "$4" |
Allen.Wang | 6af0dff | 2021-12-28 20:23:05 +0800 | [diff] [blame] | 57 | set_gpio "$VREF_PIN" "$5" |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 58 | } |
| 59 | |
| 60 | function show_usage(){ |
Allen.Wang | 5ff992e | 2022-01-04 21:00:38 +0800 | [diff] [blame] | 61 | echo "Usage: motor-ctrl [sled1 | sled2 | sled3 | sled4 | sled5 | sled6] [f r s]" |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 62 | echo " f : Step Motor go forward" |
| 63 | echo " r : Step Motor go reverse" |
| 64 | echo " s : Step Motor stop " |
| 65 | } |
| 66 | |
| 67 | if [ $# -ne 2 ]; then |
| 68 | show_usage |
| 69 | exit 1; |
| 70 | fi |
| 71 | |
Allen.Wang | 5ff992e | 2022-01-04 21:00:38 +0800 | [diff] [blame] | 72 | if [[ "$1" =~ ^(sled[1-6]{1})$ ]]; then |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 73 | SLED=$1 |
| 74 | SLED_NUM=${SLED:4} |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 75 | ACTION=$2 |
| 76 | else |
| 77 | echo "invalid sled name: $1" |
| 78 | exit 1; |
| 79 | fi |
| 80 | |
Allen.Wang | 78d1c32 | 2022-01-13 20:09:15 +0800 | [diff] [blame] | 81 | #Check if sled is present |
| 82 | SLED_PRESENT=$(get_gpio "presence-sled${SLED_NUM}") |
| 83 | if [ "$SLED_PRESENT" != 0 ];then |
| 84 | echo "${SLED} is not present!" |
| 85 | exit 1 |
| 86 | fi |
| 87 | |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 88 | if [[ "$ACTION" == "s" ]]; then |
| 89 | echo "stop motor" |
Allen.Wang | 6af0dff | 2021-12-28 20:23:05 +0800 | [diff] [blame] | 90 | set_motor "$SLED_NUM" 1 0 0 1 |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 91 | elif [[ "$ACTION" == "f" ]];then |
| 92 | echo "start motor, direction:forward" |
Allen.Wang | 6af0dff | 2021-12-28 20:23:05 +0800 | [diff] [blame] | 93 | set_motor "$SLED_NUM" 1 1 0 0 |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 94 | elif [[ "$ACTION" == "r" ]];then |
| 95 | echo "start motor, direction:reverse" |
Allen.Wang | 6af0dff | 2021-12-28 20:23:05 +0800 | [diff] [blame] | 96 | set_motor "$SLED_NUM" 1 1 1 0 |
Allen.Wang | 4a0948d | 2021-12-15 13:41:18 +0800 | [diff] [blame] | 97 | else |
| 98 | echo "Error: Unknown action!" |
| 99 | exit 1 |
| 100 | fi |
| 101 | |
| 102 | exit 0 |
| 103 | |