Skip to content

Commit d7bb900

Browse files
committed
Bluetooth: BT_SCAN: use helpers and CLI/env overrides
Add BT_ADAPTER/--adapter and BT_SCAN_TARGET_MAC/BT_TARGET_MAC/--target-mac. Use bt_ensure_controller_visible, bt_set_scan and bt_get_discovering consistently. Validate either generic visibility or user-provided target MAC from devices list. Preserve .res PASS/FAIL/SKIP semantics with detailed logging for CI. Signed-off-by: Srikanth Muppandam <[email protected]>
1 parent 82190da commit d7bb900

File tree

1 file changed

+236
-0
lines changed
  • Runner/suites/Connectivity/Bluetooth/BT_SCAN

1 file changed

+236
-0
lines changed
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
#!/bin/sh
2+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3+
# SPDX-License-Identifier: BSD-3-Clause-Clear
4+
# BT_SCAN – Bluetooth scanning validation (non-expect version)
5+
# ---------- Repo env + helpers ----------
6+
SCRIPT_DIR="$(
7+
cd "$(dirname "$0")" || exit 1
8+
pwd
9+
)"
10+
INIT_ENV=""
11+
SEARCH="$SCRIPT_DIR"
12+
13+
while [ "$SEARCH" != "/" ]; do
14+
if [ -f "$SEARCH/init_env" ]; then
15+
INIT_ENV="$SEARCH/init_env"
16+
break
17+
fi
18+
SEARCH=$(dirname "$SEARCH")
19+
done
20+
21+
if [ -z "$INIT_ENV" ]; then
22+
echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2
23+
exit 1
24+
fi
25+
26+
if [ -z "${__INIT_ENV_LOADED:-}" ]; then
27+
# shellcheck disable=SC1090
28+
. "$INIT_ENV"
29+
__INIT_ENV_LOADED=1
30+
fi
31+
32+
# shellcheck disable=SC1091
33+
. "$TOOLS/functestlib.sh"
34+
# shellcheck disable=SC1091
35+
. "$TOOLS/lib_bluetooth.sh"
36+
37+
# ---------- CLI / env parameters ----------
38+
BT_ADAPTER="${BT_ADAPTER-}"
39+
BT_SCAN_TARGET_MAC="${BT_SCAN_TARGET_MAC-}"
40+
BT_TARGET_MAC="${BT_TARGET_MAC-}"
41+
42+
while [ "$#" -gt 0 ]; do
43+
case "$1" in
44+
--adapter)
45+
BT_ADAPTER="$2"
46+
shift 2
47+
;;
48+
--target-mac)
49+
BT_TARGET_MAC="$2"
50+
shift 2
51+
;;
52+
*)
53+
log_warn "Unknown argument ignored: $1"
54+
shift 1
55+
;;
56+
esac
57+
done
58+
59+
TESTNAME="BT_SCAN"
60+
testpath="$(find_test_case_by_name "$TESTNAME")" || {
61+
log_fail "$TESTNAME : Test directory not found."
62+
echo "$TESTNAME FAIL" > "./$TESTNAME.res"
63+
exit 0
64+
}
65+
66+
cd "$testpath" || exit 1
67+
res_file="./$TESTNAME.res"
68+
rm -f "$res_file"
69+
70+
log_info "------------------------------------------------------------"
71+
log_info "Starting $TESTNAME Testcase"
72+
log_info "Checking dependency: bluetoothctl"
73+
74+
check_dependencies bluetoothctl pgrep
75+
76+
# -----------------------------
77+
# 1. Ensure bluetoothd is running
78+
# -----------------------------
79+
log_info "Checking if bluetoothd is running..."
80+
retry=0
81+
MAX_RETRIES=3
82+
RETRY_DELAY=5
83+
84+
while [ "$retry" -lt "$MAX_RETRIES" ]; do
85+
if pgrep bluetoothd >/dev/null 2>&1; then
86+
log_info "bluetoothd is running"
87+
break
88+
fi
89+
log_warn "bluetoothd not running, retrying in ${RETRY_DELAY}s..."
90+
sleep "$RETRY_DELAY"
91+
retry=$((retry + 1))
92+
done
93+
94+
if [ "$retry" -eq "$MAX_RETRIES" ]; then
95+
log_fail "bluetoothd not detected after $MAX_RETRIES attempts."
96+
echo "$TESTNAME FAIL" > "$res_file"
97+
exit 0
98+
fi
99+
100+
# -----------------------------
101+
# 2. Detect adapter (CLI/ENV > auto-detect)
102+
# -----------------------------
103+
if [ -n "$BT_ADAPTER" ]; then
104+
ADAPTER="$BT_ADAPTER"
105+
log_info "Using adapter from BT_ADAPTER/CLI: $ADAPTER"
106+
elif findhcisysfs >/dev/null 2>&1; then
107+
ADAPTER="$(findhcisysfs 2>/dev/null || true)"
108+
else
109+
ADAPTER=""
110+
fi
111+
112+
if [ -n "$ADAPTER" ]; then
113+
log_info "Using adapter: $ADAPTER"
114+
else
115+
log_warn "No HCI adapter found; skipping test."
116+
echo "$TESTNAME SKIP" > "$res_file"
117+
exit 0
118+
fi
119+
120+
# -----------------------------
121+
# 3. Ensure controller is visible
122+
# -----------------------------
123+
if ! bt_ensure_controller_visible "$ADAPTER"; then
124+
log_warn "SKIP — controller not visible to bluetoothctl."
125+
echo "$TESTNAME SKIP" > "$res_file"
126+
exit 0
127+
fi
128+
129+
# -----------------------------
130+
# 4. Ensure power is ON
131+
# -----------------------------
132+
pw="$(btgetpower "$ADAPTER" 2>/dev/null || true)"
133+
if [ "$pw" = "yes" ]; then
134+
log_pass "Power ON verified before scan."
135+
else
136+
log_info "Controller Power=$pw — enabling now..."
137+
if ! btpower "$ADAPTER" on; then
138+
log_fail "Failed to power ON controller."
139+
echo "$TESTNAME FAIL" > "$res_file"
140+
exit 0
141+
fi
142+
log_pass "Power ON successful."
143+
fi
144+
145+
# -----------------------------
146+
# 5. Determine scan target MAC
147+
# -----------------------------
148+
TARGET_MAC="${BT_SCAN_TARGET_MAC:-$BT_TARGET_MAC}"
149+
150+
if [ -n "$TARGET_MAC" ]; then
151+
log_info "Target MAC provided: $TARGET_MAC — will validate its presence after scan."
152+
else
153+
log_info "No target MAC provided, BT_SCAN will check for generic device visibility."
154+
fi
155+
156+
# -----------------------------
157+
# 6. Scan ON via helper
158+
# -----------------------------
159+
log_info "Testing scan ON..."
160+
if ! bt_set_scan on "$ADAPTER"; then
161+
log_warn "bt_set_scan(on) returned non-zero will still inspect devices list."
162+
fi
163+
164+
# Optional: single Discovering snapshot after scan-on window
165+
dstate_on="$(bt_get_discovering 2>/dev/null || true)"
166+
[ -z "$dstate_on" ] && dstate_on="unknown"
167+
log_info "Discovering state after scan ON window: $dstate_on"
168+
169+
# -----------------------------
170+
# 7. Get devices list after scan ON
171+
# -----------------------------
172+
devices_out="$(
173+
bluetoothctl devices 2>/dev/null \
174+
| sanitize_bt_output
175+
)"
176+
177+
if [ -n "$TARGET_MAC" ]; then
178+
mac_up=$(printf '%s\n' "$TARGET_MAC" | tr '[:lower:]' '[:upper:]')
179+
if printf '%s\n' "$devices_out" \
180+
| awk '/^Device /{print toupper($2)}' \
181+
| grep -q "$mac_up"
182+
then
183+
log_pass "Target MAC $TARGET_MAC detected."
184+
else
185+
log_fail "Target MAC $TARGET_MAC missing after scan ON window."
186+
echo "$TESTNAME FAIL" > "$res_file"
187+
exit 0
188+
fi
189+
else
190+
if [ -n "$devices_out" ]; then
191+
log_info "Devices seen by bluetoothctl after scan ON:"
192+
printf '%s\n' "$devices_out" | while IFS= read -r line; do
193+
[ -n "$line" ] && log_info " $line"
194+
done
195+
log_pass "At least one device discovered."
196+
else
197+
log_fail "No devices discovered in bluetoothctl devices after scan ON."
198+
echo "$TESTNAME FAIL" > "$res_file"
199+
exit 0
200+
fi
201+
fi
202+
203+
# -----------------------------
204+
# 8. Scan OFF via helper + Discovering check
205+
# -----------------------------
206+
log_info "Testing scan OFF..."
207+
if ! bt_set_scan off "$ADAPTER"; then
208+
log_warn "bt_set_scan(off) returned non-zero continuing with Discovering check."
209+
fi
210+
211+
SCAN_OFF_OK=0
212+
ITER=10
213+
i=1
214+
while [ "$i" -le "$ITER" ]; do
215+
dstate_off="$(bt_get_discovering 2>/dev/null || true)"
216+
[ -z "$dstate_off" ] && dstate_off="unknown"
217+
218+
log_info "Discovering state during scan OFF wait (iteration $i/$ITER): $dstate_off"
219+
220+
if [ "$dstate_off" = "no" ]; then
221+
SCAN_OFF_OK=1
222+
break
223+
fi
224+
225+
sleep 2
226+
i=$((i + 1))
227+
done
228+
229+
if [ "$SCAN_OFF_OK" -eq 1 ]; then
230+
log_pass "Discovering=no observed after scan OFF polling."
231+
else
232+
log_warn "Discovering did not transition to 'no' after scan OFF window."
233+
fi
234+
235+
echo "$TESTNAME PASS" > "$res_file"
236+
exit 0

0 commit comments

Comments
 (0)