1 #!/bin/bash
2 #################################################################################
3 # Copyright(C) 2019 xxx Ltd. All rights reserved. #
4 # File Name :cel-led-test #
5 # Author :Bing Song #
6 # Created Time :12/2/2019 #
7 # Applied Porject :xx #
8 # How to Use :Copy this script into "root/" directory and run it directly.#
9 #################################################################################
10
11
12
13 #Defining variables
14 LED_PATH="/sys/bus/i2c/devices/15-0060"
15 FAN_TRARY_PATH="/sys/devices/platform/soc/fd880000.i2c-pld/i2c-0/i2c-4/i2c-5/i2c-10/10-0066"
16 DEVICE_ID=
17 COLOR=
18 TYPE=
19 function usage() #定义帮助内容样式
20 {
21 echo -e "Usage::\n"
22 echo -e "\t-a test all config"
23 echo -e "\t-r read operation"
24 echo -e "\t-w write operation"
25 echo -e "\t-d device id.Example with psu,-d 1 or 2"
26 echo -e "\t-t [system|fan|psu|sfp]"
27 echo -e "\t-c [red|green|off|bule|white]"
28 echo -e "\t-h display this help context and exit"
29 echo -e "Example: \n"
30 echo -e " -a #test all config"
31 echo -e " -r -t system -d 1 #get system led status"
32 echo -e " -r -t psu -d 1 #get psu1 led status"
33 echo -e " -w -t fan -d 1 -c red #set fan1 led to red"
34 }
35 function led_read(){
36
37
38
39 if [ "$TYPE" = "system" ];then#判断LED类型为system led
40
41 cat "$LED_PATH"/system_led > tmp.log
42 data=`cat tmp.log`
43 printf "Reading ($TYPE) LED,value:("$data") -- :Passed \n"
44 rm -rf tmp.log
45 elif [ "$TYPE" = "psu" ];then
46
47 cat "$LED_PATH"/pwr"$DEVICE_ID"_led > tmp.log
48 data=`cat tmp.log`
49 printf "Reading ($TYPE$DEVICE_ID) LED,value:("$data") -- :Passed \n"
50 rm -rf tmp.log
51 elif [ "$TYPE" = "fan" ];then
52 if [ "$DEVICE_ID" = "0" ];then
53
54 cat "$LED_PATH"/fan_led > tmp.log
55 data=`cat tmp.log`
56 printf "Reading ($TYPE) LED,value:("$data") -- :Passed \n"
57 rm -rf tmp.log
58 else
59 #echo "#cat $FAN_TRARY_PATH/fan"$DEVICE_ID"_led"
60 cat "$FAN_TRARY_PATH"/fan"$DEVICE_ID"_led > tmp.log
61 data=`cat tmp.log`
62 printf "Reading ($TYPE$DEVICE_ID) LED,value:("$data") -- :Passed \n"
63 rm -rf tmp.log
64
65 fi
66 else
67 check_type
68
69 fi
70 }
71
72 function led_write(){
73 #echo "function kcs:-$OPTARG and $OPTIND"
74 if [ "$TYPE" = "system" ];then
75 #echo "#echo $COLOR > $LED_PATH/system_led"
76 echo $COLOR > "$LED_PATH"/system_led
77 if [ $? -eq 0 ];then
78 printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Passed \n"
79 else
80 printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
81 fi
82 elif [ "$TYPE" = "psu" ];then
83 # echo "#echo $COLOR > $LED_PATH/pwr"$DEVICE_ID"_led"
84 echo $COLOR > "$LED_PATH"/pwr"$DEVICE_ID"_led
85 if [ $? -eq 0 ];then
86 printf "Wrinting ($TYPE$DEVICE_ID) LED,value:("$COLOR") -- :Passed \n"
87 else
88 printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
89 fi
90 elif [ "$TYPE" = "fan" ];then
91 if [ "$DEVICE_ID" = "0" ];then
92 #echo "#echo $COLOR > $LED_PATH/fan_led"
93 echo "$COLOR" > "$LED_PATH"/fan_led
94 if [ $? -eq 0 ];then
95 printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Passed \n"
96 else
97 printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
98 fi
99 else
100 #echo "#echo $COLOR > $FAN_TRARY_PATH/fan"$DEVICE_ID"_led"
101 echo $COLOR > "$FAN_TRARY_PATH"/fan"$DEVICE_ID"_led
102 if [ $? -eq 0 ];then
103 printf "Wrinting ($TYPE$DEVICE_ID) LED,value:("$COLOR") -- :Passed \n"
104 else
105 printf "Wrinting ($TYPE) LED,value:("$COLOR") -- :Failed \n"
106 fi
107 fi
108 else
109 check_type
110
111 fi
112
113 }
114 function check_type(){ #定义函数,校验led type
115 if [ "$TYPE" = "psu" ];then
116 return 0
117 elif [ "$TYPE" = "fan" ];then
118 return 0
119 elif [ "$TYPE" = "system" ];then
120 return 0
121 else
122 return 1
123 fi
124
125 }
126 function check_color_mode(){ #定义函数,校验led color 种类
127 if [ "$COLOR" = "red" ];then
128 return 0
129 elif [ "$COLOR" = "green" ];then
130 return 0
131 elif [ "$COLOR" = "off" ];then
132 return 0
133 else
134 return 1
135 fi
136
137 }
138
139 function check_device_id(){ #定义函数,校验device id
140 local psu_dev_arry=(1 2)
141 local fan_dev_arry=(0 1 2 3 4 5 6 7)
142 if [ "$TYPE" = "psu" ];then
143 for i in ${psu_dev_arry[@]}
144 do
145 if [ "$DEVICE_ID" = $i ];then
146 return 0
147 fi
148 done
149 return 1
150 elif [ "$TYPE" = "fan" ];then
151 for i in ${fan_dev_arry[@]}
152 do
153 if [ "$DEVICE_ID" = $i ];then
154 return 0
155 fi
156 done
157 return 1
158 fi
159 }
160
161 function all(){ #定义函数all()去执行带--all参数的选项
162 #system
163 local color_arry=(red green off)
164 local test_type=(system psu fan fan-tray)
165 local pid=1
166 local psu_id=(1 2)
167 local fan_id=(1 2 3 4 5 6 7 8 9 10 11 12 13 14)
168 local ERROR_COUNT=0
169 printf "==================================LED TEST ALL===========================================\n"#printf进行打印格式化
170 printf "Type:${test_type[0]}\n"
171 echo "-----------------------------------------------------------------------------------------"
172 printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result #printf打印格式化,%10表示字段间距\n表回车,s表示占位符,代替后面的实际字段
173 echo "-----------------------------------------------------------------------------------------"
174 printf "|%-10s|%10s|" 1 System
175 for i in ${color_arry[@]}
176 do
177 echo $i > "$LED_PATH"/system_led
178 sleep 1
179 if [ $? -eq 0 ];then #判断上条命令是否执行成功
180 printf "%10s|\033[32m%10s\033[0m|" $i Passed #Passed字体绿色显示32m
181
182 else
183 printf "%10s|\033[31m%10s\033[0m|" $i Failed #Failed 字体红色显示31m
184 ERROR_COUNT=$[$ERROR_COUNT+1]#TBD
185 exit 1
186 fi
187 done
188 printf "\n"
189 echo "-----------------------------------------------------------------------------------------"
190 printf "Type:${test_type[1]}\n"
191 echo "-----------------------------------------------------------------------------------------"
192 printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result
193 echo "-----------------------------------------------------------------------------------------"
194 #PSU
195
196 printf "|%-10s|%10s|" $pid ${test_type[1]}
197 for j in ${psu_id[*]}
198 do
199 for i in ${color_arry[*]}
200 do
201
202 echo $i > "$LED_PATH"/pwr"$j"_led
203 sleep 1
204 if [ $? -eq 0 ];then
205 printf "%10s|\033[32m%10s\033[0m|" $i Passed
206
207 else
208 printf "%10s|\033[31m%10s\033[0m|" $i Failed
209 ERROR_COUNT=$[$ERROR_COUNT+1]
210
211 exit 1
212 fi
213
214 done
215 printf "\n"
216 j=$[$j+1]
217 if [ "$j" = "2" ];then
218 printf "|%-10s|%10s|" $j ${test_type[1]$j}
219 else
220 continue
221 fi
222 done
223 printf "\n"
224 echo "-----------------------------------------------------------------------------------------"
225 #front panle fan
226 printf "Type:${test_type[2]}\n"
227 echo "-----------------------------------------------------------------------------------------"
228 printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result
229 echo "-----------------------------------------------------------------------------------------"
230 printf "|%-10s|%10s|" $pid ${test_type[2]}
231 for i in ${color_arry[@]}
232 do
233 echo $i > "$LED_PATH"/fan_led
234 sleep 1
235 if [ $? -eq 0 ];then
236 printf "%10s|\033[32m%10s\033[0m|" $i Passed
237
238 else
239 printf "%10s|\033[31m%10s\033[0m|" $i Failed
240 ERROR_COUNT=$[$ERROR_COUNT+1]
241
242 exit 1
243 fi
244
245 done
246 printf "\n"
247 echo "-----------------------------------------------------------------------------------------"
248 #fan-tray
249 printf "Type:${test_type[3]}\n"
250 echo "-----------------------------------------------------------------------------------------"
251 printf "|%-10s|%10s|%10s|%10s|%10s|%10s|%10s|%10s|\n" ID Name Value Result Value Restult Value Result
252 echo "-----------------------------------------------------------------------------------------"
253 printf "|%-10s|%10s|" $pid ${test_type[3]}
254
255 for j in ${fan_id[*]}
256 do
257 for i in ${color_arry[*]}
258 do
259 echo $i > "$FAN_TRARY_PATH"/fan"$j"_led
260 sleep 1
261 if [ $? -eq 0 ];then
262 printf "%10s|\033[32m%10s\033[0m|" $i Passed
263
264 else
265 printf "%10s|\033[31m%10s\033[0m|" $i Failed
266 ERROR_COUNT=$[$ERROR_COUNT+1]
267
268 exit 2
269 fi
270 done
271 printf "\n"
272 j=$[$j+1]
273 if [ "$j" = "14" ];then
274 break
275
276 else
277
278 printf "|%-10s|%10s|" $j ${test_type[3]}
279 continue
280 fi
281 done
282 printf "\n"
283 echo "-----------------------------------------------------------------------------------------"
284 if [ "$ERROR_COUNT" -eq 0 ];then
285 echo -e "All LED test results :--[ \033[32m Passed \033[0m ]"
286 else
287 echo "All LED test results :--[ \033[31m Failed \033[0m ]"
288 echo $ERROR_COUNT
289 fi
290 }
291
292
293
294 if [ $# -lt 1 ];then #判断是否输入至少一个参数
295 echo "argument is os few"
296 usage
297 exit
298 fi
299 while getopts ":arwd:t:c:h" opt #命令选项结构,:表示选项后面带参数
300 do
301 case $opt in
302 a|all )
303 test_mode=all
304 ;;
305 r|read )
306 test_mode=read
307 ;;
308 w|write )
309 test_mode=write
310 ;;
311 d|device )
312 DEVICE_ID=$OPTARG
313 ;;
314 t|type )
315 TYPE=$OPTARG
316 ;;
317 c|color )
318 COLOR=$OPTARG
319 ;;
320 h|help )
321 usage
322 exit 0
323 ;;
324 ?)
325 echo "invalid argument:-$OPTARG"
326 usage
327 exit 1
328 ;;
329
330 esac
331 done
332
333 if [ "$test_mode" = "all" ];then
334 all
335 elif [ "$test_mode" = "read" ];then
336
337 check_type
338 if [ $? -eq 1 ];then
339 echo "type $TYPE not be found"
340 exit 1
341 fi
342 check_device_id
343 if [ $? -eq 1 ];then
344 echo "device id[:-d] $DEVICE_ID not be found"
345 exit 1
346 fi
347 led_read
348 elif [ "$test_mode" = "write" ];then
349
350 check_type
351 if [ $? -eq 1 ];then
352 echo "type $TYPE not be found"
353 exit 1
354 fi
355 check_device_id
356 if [ $? -eq 1 ];then
357 echo "device id $DEVICE_ID not be found"
358 exit 1
359 fi
360 check_color_mode
361 if [ $? -eq 1 ];then
362 echo "not support $COLOR mode"
363 exit 1
364 fi
365
366 led_write
367 else
368 echo "unknow option"
369 fi