blob: be5a2aca9d3a877a41d3eb4db6374bb7e5541166 [file] [log] [blame]
developer3abe1ad2022-01-24 11:13:32 +08001#!/bin/ash
2
3interface=$1
4cmd_type=$2
5full_cmd=$3
6
7work_mode="RUN" # RUN/PRINT/DEBUG
8tmp_file="$HOME/.tmp_ate_config"
9phy_idx=$(echo ${interface} | tr -dc '0-9')
10
11cmd=$(echo ${full_cmd} | sed s/=/' '/g | cut -d " " -f 1)
12param=$(echo ${full_cmd} | sed s/=/' '/g | cut -d " " -f 2)
13
14function do_cmd() {
15 case ${work_mode} in
16 "RUN")
17 eval "$1"
18 ;;
19 "PRINT")
20 echo "$1"
21 ;;
22 "DEBUG")
23 eval "$1"
24 echo "$1"
25 ;;
26 esac
27}
28
29function record_config() {
30 if [ -f ${tmp_file} ]; then
31 if grep -q $1 ${tmp_file}; then
32 sed -i "/$1/c\\$1=$2" ${tmp_file}
33 else
34 echo "$1=$2" >> ${tmp_file}
35 fi
36 else
37 echo "$1=$2" >> ${tmp_file}
38 fi
39}
40
41function get_config() {
42 echo "$(cat ${tmp_file} | grep $1 | sed s/=/' '/g | cut -d " " -f 2)"
43}
44
45function do_ate_work() {
46 local ate_cmd=$1
47
48 case ${ate_cmd} in
49 "ATESTART")
50 local if_str=$(ifconfig | grep mon${phy_idx})
51
52 if [ ! -z "${if_str}" -a "${if_str}" != " " ]; then
53 echo "ATE already starts."
54 else
55 do_cmd "iw phy ${interface} interface add mon${phy_idx} type monitor"
56 do_cmd "iw dev wlan${phy_idx} del"
57 do_cmd "ifconfig mon${phy_idx} up"
58 fi
59 ;;
60 "ATESTOP")
61 local if_str=$(ifconfig | grep mon${phy_idx})
62
63 if [ -z "${if_str}" -a "${if_str}" != " " ]; then
64 echo "ATE does not start."
65 else
66 do_cmd "mt76-test ${interface} set state=off"
67 do_cmd "iw dev mon${phy_idx} del"
68 do_cmd "iw phy ${interface} interface add wlan${phy_idx} type managed"
69 do_cmd "ifconfig wlan${phy_idx} up"
70 fi
71 ;;
72 "TXFRAME")
73 do_cmd "mt76-test ${interface} set state=tx_frames"
74 ;;
75 "TXSTOP")
76 do_cmd "mt76-test ${interface} set state=idle"
77 ;;
78 "RXFRAME")
79 do_cmd "mt76-test ${interface} set state=rx_frames"
80 ;;
81 "RXSTOP")
82 do_cmd "mt76-test ${interface} set state=idle"
83 ;;
84 "TXCONT")
85 do_cmd "mt76-test ${interface} set state=tx_cont"
86 ;;
87 esac
88}
89
90function simple_convert() {
91 if [ "$1" = "ATETXCNT" ]; then
92 echo "tx_count"
93 elif [ "$1" = "ATETXLEN" ]; then
94 echo "tx_length"
95 elif [ "$1" = "ATETXMCS" ]; then
96 echo "tx_rate_idx"
97 elif [ "$1" = "ATEVHTNSS" ]; then
98 echo "tx_rate_nss"
99 elif [ "$1" = "ATETXLDPC" ]; then
100 echo "tx_rate_ldpc"
101 elif [ "$1" = "ATETXSTBC" ]; then
102 echo "tx_rate_stbc"
103 elif [ "$1" = "ATEPKTTXTIME" ]; then
104 echo "tx_time"
105 elif [ "$1" = "ATEIPG" ]; then
106 echo "tx_ipg"
107 elif [ "$1" = "ATEDUTYCYCLE" ]; then
108 echo "tx_duty_cycle"
109 elif [ "$1" = "ATETXFREQOFFSET" ]; then
110 echo "freq_offset"
111 else
112 echo "unknown"
113 fi
114}
115
116function convert_tx_mode() {
117 if [ "$1" = "0" ]; then
118 echo "cck"
119 elif [ "$1" = "1" ]; then
120 echo "ofdm"
121 elif [ "$1" = "2" ]; then
122 echo "ht"
123 elif [ "$1" = "4" ]; then
124 echo "vht"
125 elif [ "$1" = "8" ]; then
126 echo "he_su"
127 elif [ "$1" = "9" ]; then
128 echo "he_er"
129 elif [ "$1" = "10" ]; then
130 echo "he_tb"
131 elif [ "$1" = "11" ]; then
132 echo "he_mu"
133 else
134 echo "unknown"
135 fi
136}
137
138function convert_gi {
139 local tx_mode=$1
140 local val=$2
141 local sgi="0"
142 local he_ltf="0"
143
144 case ${tx_mode} in
145 "ht"|"vht")
146 sgi=${val}
147 ;;
148 "he_su"|"he_er")
149 case ${val} in
150 "0")
151 ;;
152 "1")
153 he_ltf="1"
154 ;;
155 "2")
156 sgi="1"
157 he_ltf="1"
158 ;;
159 "3")
160 sgi="2"
161 he_ltf="2"
162 ;;
163 "4")
164 he_ltf="2"
165 ;;
166 *)
167 echo "unknown gi"
168 esac
169 ;;
170 "he_mu")
171 case ${val} in
172 "0")
173 he_ltf="2"
174 ;;
175 "1")
176 he_ltf="1"
177 ;;
178 "2")
179 sgi="1"
180 he_ltf="1"
181 ;;
182 "3")
183 sgi="2"
184 he_ltf="2"
185 ;;
186 *)
187 echo "unknown gi"
188 esac
189 ;;
190 "he_tb")
191 case ${val} in
192 "0")
193 sgi="1"
194 ;;
195 "1")
196 sgi="1"
197 he_ltf="1"
198 ;;
199 "2")
200 sgi="2"
201 he_ltf="2"
202 ;;
203 *)
204 echo "unknown gi"
205 esac
206 ;;
207 *)
208 echo "unknown tx_rate_mode, can't transform gi"
209 esac
210
211 do_cmd "mt76-test ${interface} set tx_rate_sgi=${sgi} tx_ltf=${he_ltf}"
212}
213
214function convert_channel {
215 local band=$(echo $1 | sed s/:/' '/g | cut -d " " -f 2)
216 local ch=$(echo $1 | sed s/:/' '/g | cut -d " " -f 1)
217 local bw=$(get_config "ATETXBW" | cut -d ":" -f 1)
218
219 if [ "${band}" = "0" ]; then
220 case ${bw} in
221 "1")
222 if [ "${ch}" -ge "1" ] && [ "${ch}" -le "7" ]; then
223 local bw_str="HT40+"
224 else
225 local bw_str="HT40-"
226 fi
227 ;;
228 "0")
229 local bw_str="HT20"
230 ;;
231 esac
232 else
233 case ${bw} in
234 "2")
235 local bw_str="80MHz"
236 ;;
237 "1")
238 if [ "${ch}" == "36" ] || [ "${ch}" == "44" ] || [ "${ch}" == "52" ] || [ "${ch}" == "60" ] || \
239 [ "${ch}" == "100" ] || [ "${ch}" == "108" ] || [ "${ch}" == "116" ] || [ "${ch}" == "124" ] || \
240 [ "${ch}" == "132" ] || [ "${ch}" == "132" ] || [ "${ch}" == "140" ] || [ "${ch}" == "149" ] || \
241 [ "${ch}" == "157" ]
242 then
243 local bw_str="HT40+"
244 else
245 local bw_str="HT40-"
246 fi
247 ;;
248 "0")
249 local bw_str="HT20"
250 ;;
251 esac
252 fi
253
254 do_cmd "iw dev mon${phy_idx} set channel ${ch} ${bw_str}"
255}
256
257if [ "${cmd_type}" = "set" ]; then
258 skip=0
259 use_ated=0
260 case ${cmd} in
261 "ATE")
262 do_ate_work ${param}
263
264 skip=1
265 ;;
266 "ATETXCNT"|"ATETXLEN"|"ATETXMCS"|"ATEVHTNSS"|"ATETXLDPC"|"ATETXSTBC"| \
267 "ATEPKTTXTIME"|"ATEIPG"|"ATEDUTYCYCLE"|"ATETXFREQOFFSET")
268 cmd_new=$(simple_convert ${cmd})
269 param_new=${param}
270 ;;
271 "ATETXANT"|"ATERXANT")
272 cmd_new="tx_antenna"
273 param_new=${param}
274 ;;
275 "ATETXGI")
276 tx_mode=$(convert_tx_mode $(get_config "ATETXMODE"))
277 convert_gi ${tx_mode} ${param}
278 skip=1
279 ;;
280 "ATETXMODE")
281 cmd_new="tx_rate_mode"
282 param_new=$(convert_tx_mode ${param})
283 record_config ${cmd} ${param}
284 ;;
285 "ATETXPOW0"|"ATETXPOW1"|"ATETXPOW2"|"ATETXPOW3")
286 cmd_new="tx_power"
287 param_new="${param},0,0,0"
288 ;;
289 "ATETXBW")
290 record_config ${cmd} ${param}
291 skip=1
292 ;;
293 "ATECHANNEL")
294 convert_channel ${param}
295 skip=1
296 ;;
297 "ATECTRLBANDIDX")
298 echo "Unused command, please use phy0/phy1 to switch"
299 skip=1
300 ;;
301 "bufferMode")
302 if [ "${param}" = "2" ]; then
303 do_cmd "ated -i ${interface} -c \"eeprom update\""
304 fi
305 skip=1
306 ;;
307 *)
308 echo "Unknown command to set"
309 skip=1
310 esac
311
312 if [ "${skip}" != "1" ]; then
313 do_cmd "mt76-test ${interface} set ${cmd_new}=${param_new}"
314 fi
315elif [ "${cmd_type}" = "show" ]; then
316 do_cmd "mt76-test ${interface} dump"
317 do_cmd "mt76-test ${interface} dump stats"
318elif [ "${cmd_type}" = "e2p" ]; then
319 v1=$(do_cmd "ated -i ${interface} -c \"eeprom read ${param}\"")
320 v1=$(echo "${v1}" | grep "val =" | cut -d '(' -f 2 | grep -o -E '[0-9]+')
321
322 param2=$(expr ${param} + "1")
323 v2=$(do_cmd "ated -i ${interface} -c \"eeprom read ${param2}\"")
324 v2=$(echo "${v2}" | grep "val =" | cut -d '(' -f 2 | grep -o -E '[0-9]+')
325 printf "[0x%04x]:0x%02x%02x\n" ${param} ${v2} ${v1}
326else
327 echo "Unknown command"
328fi
329