blob: d74909cec814408cd26a84a903902a06883e748c [file] [log] [blame]
Allen.Wang4a0948d2021-12-15 13:41:18 +08001#!/bin/bash -e
2#
3# Control step motor rotate of sled
4
5function 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.Wang78d1c322022-01-13 20:09:15 +080023function 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.Wang4a0948d2021-12-15 13:41:18 +080040#######################################
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.Wang6af0dff2021-12-28 20:23:05 +080047# 5. Value of Motor Driver VREF PIN
Allen.Wang4a0948d2021-12-15 13:41:18 +080048#######################################
49function 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.Wang6af0dff2021-12-28 20:23:05 +080053 VREF_PIN="SLED${1}_MD_REF_PWM"
Allen.Wang4a0948d2021-12-15 13:41:18 +080054 set_gpio "$STBY_PIN" "$2"
55 set_gpio "$EN_PIN" "$3"
56 set_gpio "$DIR_PIN" "$4"
Allen.Wang6af0dff2021-12-28 20:23:05 +080057 set_gpio "$VREF_PIN" "$5"
Allen.Wang4a0948d2021-12-15 13:41:18 +080058}
59
60function show_usage(){
Allen.Wang5ff992e2022-01-04 21:00:38 +080061 echo "Usage: motor-ctrl [sled1 | sled2 | sled3 | sled4 | sled5 | sled6] [f r s]"
Allen.Wang4a0948d2021-12-15 13:41:18 +080062 echo " f : Step Motor go forward"
63 echo " r : Step Motor go reverse"
64 echo " s : Step Motor stop "
65}
66
67if [ $# -ne 2 ]; then
68 show_usage
69 exit 1;
70fi
71
Allen.Wang5ff992e2022-01-04 21:00:38 +080072if [[ "$1" =~ ^(sled[1-6]{1})$ ]]; then
Allen.Wang4a0948d2021-12-15 13:41:18 +080073 SLED=$1
74 SLED_NUM=${SLED:4}
Allen.Wang4a0948d2021-12-15 13:41:18 +080075 ACTION=$2
76else
77 echo "invalid sled name: $1"
78 exit 1;
79fi
80
Allen.Wang78d1c322022-01-13 20:09:15 +080081#Check if sled is present
82SLED_PRESENT=$(get_gpio "presence-sled${SLED_NUM}")
83if [ "$SLED_PRESENT" != 0 ];then
84 echo "${SLED} is not present!"
85 exit 1
86fi
87
Allen.Wang4a0948d2021-12-15 13:41:18 +080088if [[ "$ACTION" == "s" ]]; then
89 echo "stop motor"
Allen.Wang6af0dff2021-12-28 20:23:05 +080090 set_motor "$SLED_NUM" 1 0 0 1
Allen.Wang4a0948d2021-12-15 13:41:18 +080091elif [[ "$ACTION" == "f" ]];then
92 echo "start motor, direction:forward"
Allen.Wang6af0dff2021-12-28 20:23:05 +080093 set_motor "$SLED_NUM" 1 1 0 0
Allen.Wang4a0948d2021-12-15 13:41:18 +080094elif [[ "$ACTION" == "r" ]];then
95 echo "start motor, direction:reverse"
Allen.Wang6af0dff2021-12-28 20:23:05 +080096 set_motor "$SLED_NUM" 1 1 1 0
Allen.Wang4a0948d2021-12-15 13:41:18 +080097else
98 echo "Error: Unknown action!"
99 exit 1
100fi
101
102exit 0
103