ADD: [ti-wl18xx-calibrator] add TI calbirator tool for TI testing

BugzId: 67860
This commit is contained in:
Patrick Walther 2021-11-23 12:07:23 +01:00
parent d6b436754e
commit 6211eece49
4 changed files with 7578 additions and 0 deletions

View File

@ -0,0 +1,288 @@
#!/bin/sh
BTGOD=$(basename $0)
BT_CHANNEL=""
BT_INTERFACE="hci0"
BT_TESTMODE=0
BT_POWER=7
BT_MODULATION=4
BT_RXMODE=0
BT_FREQMODE=1
BT_ACLMODE=1
BT_SINGLEFREQ=2
die_here() {
echo "$BTGOD: $1"
exit 1
}
usage() {
echo "usage: $BTGOD [OPTION] start/stop"
echo ""
echo "General Options"
echo " -c bt channel (2402-2480, 0-39)"
echo " -t test mode BT test mode:"
echo " tx=1, rx=2, txrx=3"
echo " -p power (0-7) -> default: 7"
echo " -i hci interface -> default: hci0"
echo ""
echo "Tx Mode Options:"
echo ""
echo " -m modulation"
echo " 0 = CW"
echo " 1 = BT BR (GFSK)"
echo " 2 = BT EDR2MB(PI/4-DQPSK)"
echo " 3 = BT EDR3MB(8-DPSK)"
echo " 4 = BT LE (BLE,GFSK) -> default"
echo " 5 = ANT(GFSK)"
echo ""
echo "Rx Mode Options:"
echo ""
echo " -m modulation"
echo " 0 = CW"
echo " 1 = BT BR (GFSK)"
echo " 2 = BT EDR2MB(PI/4-DQPSK)"
echo " 3 = BT EDR3MB(8-DPSK)"
echo " 4 = BT LE (BLE,GFSK) -> default"
echo " 5 = ANT(GFSK)"
echo " -r Rx mode"
echo " 0 = Connection Mode -> default"
echo " 1 = Scan Mode"
echo ""
echo "TxRx Mode Options:"
echo ""
echo " -a ACL Tx Packet Type"
echo " 0 = DM1"
echo " 1 = DH1 -> default"
echo " 2 = DM3"
echo " 3 = DH3"
echo " 4 = DM5"
echo " 5 = DH5"
echo " 6 = 2-DH1"
echo " 7 = 2-DH3"
echo " 8 = 2-DH5"
echo " 9 = 3-DH1"
echo " a = 3-DH3"
echo " b = 3-DH5"
echo " -f Frequency Mode"
echo " 0 = Hopping"
echo " 1 = Single Frequency -> default"
echo " -s Single Frequency"
echo " 0 = only Tx on channel"
echo " 1 = only Rx on channel"
echo " 2 = TX and Rx on channel -> default"
echo ""
exit 0
}
channel_2_hex() {
local channel=$1
case "$channel" in
2402|37) channel="0x62 0x09";;
2404|0) channel="0x64 0x09";;
2406|1) channel="0x66 0x09";;
2408|2) channel="0x68 0x09";;
2410|3) channel="0x6A 0x09";;
2412|4) channel="0x6C 0x09";;
2414|5) channel="0x6E 0x09";;
2416|6) channel="0x70 0x09";;
2418|7) channel="0x72 0x09";;
2420|8) channel="0x74 0x09";;
2422|9) channel="0x76 0x09";;
2424|10) channel="0x78 0x09";;
2426|38) channel="0x7A 0x09";;
2428|11) channel="0x7C 0x09";;
2430|12) channel="0x7E 0x09";;
2432|13) channel="0x80 0x09";;
2434|14) channel="0x82 0x09";;
2436|15) channel="0x84 0x09";;
2438|16) channel="0x86 0x09";;
2440|17) channel="0x88 0x09";;
2442|18) channel="0x8A 0x09";;
2444|19) channel="0x8C 0x09";;
2446|20) channel="0x8E 0x09";;
2448|21) channel="0x90 0x09";;
2450|22) channel="0x92 0x09";;
2452|23) channel="0x94 0x09";;
2454|24) channel="0x96 0x09";;
2456|25) channel="0x98 0x09";;
2458|26) channel="0x9A 0x09";;
2460|27) channel="0x9C 0x09";;
2462|28) channel="0x9E 0x09";;
2464|29) channel="0xA0 0x09";;
2466|30) channel="0xA2 0x09";;
2468|31) channel="0xA4 0x09";;
2470|32) channel="0xA6 0x09";;
2472|33) channel="0xA8 0x09";;
2474|34) channel="0xAA 0x09";;
2476|35) channel="0xAC 0x09";;
2478|36) channel="0xAE 0x09";;
2480|39) channel="0xB0 0x09";;
*) channel="";;
esac
echo "$channel"
}
btgod_sanity_check() {
if [ $BT_TESTMODE -eq 1 ]; then
case $BT_MODULATION in
0|1|2|3|4|5) ;;
*) die_here "wrong BT Modulation given";;
esac
elif [ $BT_TESTMODE -eq 2 ]; then
case $BT_RXMODE in
0);;
1) BT_RXMODE=3;;
*) die_here "wrong BT RX mode given (0-1)";;
esac
case $BT_MODULATION in
0|1|2|3|4|5) ;;
*) die_here "wrong BT Modulation given (0-5)";;
esac
elif [ $BT_TESTMODE -eq 3 ]; then
case $BT_FREQMODE in
0) ;;
1) BT_FREQMODE=3;;
*) die_here "wrong BT Frequency mode given (0-1)";;
esac
case $BT_ACLMODE in
0|1|2|3|4|5|6|7|8|9|a|b) ;;
*) die_here "wrong BT ACL mode given (0-a)";;
esac
case $BT_SINGLEFREQ in
0|1|2) ;;
*) die_here "wrong BT single fequency mode given (0-2)";;
esac
else
die_here "wrong BT Testmode given (1-3)"
fi
BT_CHANNEL=$(channel_2_hex $BT_CHANNEL )
if [ "x$BT_CHANNEL" = "x" ]; then
die_here "wrong channel given (2402-2480, 0-39)"
fi
case $BT_POWER in
0|1|2|3|4|5|6|7) ;;
*) die_here "wrong BT Power given (0-7)";;
esac
}
btgod_stop() {
echo "--> run stop sequence"
# STOP
sleep 1
hcitool -i $BT_INTERFACE cmd 0x3f 0x0188
}
btgod_start_tx() {
echo ""
echo "Tx Mode: Modulation: $BT_MODULATION"
echo ""
echo "--> run start Tx sequence"
hcitool -i $BT_INTERFACE cmd 0x3f 0x01ca $BT_CHANNEL 0x0"$BT_MODULATION" 0x00 0x"$BT_POWER" 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
}
btgod_start_rx() {
echo ""
echo "Rx Mode: $BT_RXMODE, Modulation: $BT_MODULATION"
echo ""
echo "--> run start Rx sequence"
hcitool -i $BT_INTERFACE cmd 0x3f 0x01cb $BT_CHANNEL 0x0"$BT_RXMODE" 0x0"$BT_MODULATION"
}
btgod_start_txrx() {
local rxchan="0xFF 0xFF"
local txchan="0xFF 0xFF"
case $BT_SINGLEFREQ in
0) txchan=$BT_CHANNEL;;
1) rxchan=$BT_CHANNEL;;
2) txchan=$BT_CHANNEL; rxchan=$BT_CHANNEL;;
esac
echo ""
echo "ACL Tx packet type: $BT_ACLMODE, frequency mode: $BT_FREQMODE, Tx Channel: $txchan, Rx Channel: $rxchan, single freq: $BT_SINGLEFREQ"
echo ""
echo "--> run start txrx sequence"
hcitool -i $BT_INTERFACE cmd 0x3f 0x01cc 0x0"$BT_ACLMODE" 0x0"$BT_FREQMODE" $txchan \
$rxchan 0x02 0x00 0x1b 0x00 0x0"$BT_POWER" 0x01 0xff 0x01
}
btgod_start() {
hcitool -i $BT_INTERFACE cmd 0x03 0x001a 0x00
sleep 1
hcitool -i $BT_INTERFACE cmd 0x3f 0x01fb 0x01 0xff 0x00 0x00 0x00 0x00 0x01
sleep 1
case $BT_TESTMODE in
1) btgod_start_tx;;
2) btgod_start_rx;;
3) btgod_start_txrx;;
esac
}
if [ $# -le 0 ]; then
usage
fi
while getopts a:c:f:hi:m:p:r:s:t: OPT; do
case $OPT in
a) BT_ACLMODE=$OPTARG;;
c) BT_CHANNEL=$OPTARG;;
f) BT_FREQMODE=$OPTARG;;
h) usage;;
i) BT_INTERFACE="$OPTARG";;
m) BT_MODULATION=$OPTARG;;
p) BT_POWER=$OPTARG;;
r) BT_RXMODE=$OPTARG;;
s) BT_SINGLEFREQ=$OPTARG;;
t) BT_TESTMODE=$OPTARG;;
*) ;;
esac
done
shift $(expr $OPTIND - 1)
cli set bluez.0.status=2 bluez.1.status=2
sleep 1
echo "configure hci interface please wait"
for i in $(seq 0 240); do
cnt=$(ls /tmp/progress | wc -l)
if [ $cnt -eq 0 ]; then
break
fi
echo -n ".."
sleep 1
done
btgod_stop
if [ "$1" != "start" ]; then
exit 0
fi
btgod_sanity_check
echo "channel: $BT_CHANNEL, test mode: $BT_TESTMODE, power: $BT_POWER"
echo ""
btgod_start

View File

@ -0,0 +1,189 @@
#!/bin/sh
WGOD=$(basename $0)
W_INTERFACE="wlan0"
W_TESTMODE=0
W_SRCADDR="00:11:22:33:44:55"
W_DSTADDR="55:44:33:22:11:00"
W_BANDWIDTH=1
W_CHANNEL=1
W_POWER=20
W_ANTENNA=0
W_RATE=19
W_SGI=0
die_here() {
echo "$WGOD: $1"
exit 1
}
usage() {
echo "usage: $WGOD [OPTION] start/stop"
echo ""
echo "General Options"
echo " -b bandwidth"
echo " 1 = 20MHz -> default"
echo " 2 = 40MHz-"
echo " 3 = 40MHz+"
echo " -c channel -> default: 1"
echo " -s source address -> default: 00:11:22:33:44:55"
echo " -d destination address -> default: 55:44:33:22:11:00"
echo " -t test mode test mode:"
echo " tx=1, rx=2"
echo " -i wlan interface -> default: wlan0"
echo ""
echo "Tx Mode Options:"
echo ""
echo " -a antenna selection"
echo " 0 = auto mode -> default"
echo " 1 = 1st antenna"
echo " 2 = 2nd antenna"
echo " 3 = both antennas"
echo " -g guard interval"
echo " 0 = long -> default"
echo " 1 = short"
echo " -p power 0-20 -> default: 20"
echo " -r rate"
echo " 0 = 1.0 Mbps"
echo " 1 = 2.0 Mbps"
echo " 2 = 5.0 Mbps"
echo " 3 = 11.0 Mbps"
echo " 4 = 6.0 Mbps"
echo " 5 = 9.0 Mbps"
echo " 6 = 12.0 Mbps"
echo " 7 = 18.0 Mbps"
echo " 8 = 24.0 Mbps"
echo " 9 = 36.0 Mbps"
echo " 10 = 48.0 Mbps"
echo " 11 = 54.0 Mbps"
echo " 12 = 6.5 Mbps"
echo " 13 = 13.0 Mbps"
echo " 14 = 19.5 Mbps"
echo " 15 = 26.0 Mbps"
echo " 16 = 39.0 Mbps"
echo " 17 = 52.0 Mbps"
echo " 18 = 58.5 Mbps"
echo " 19 = 65.0 Mbps -> default"
echo " 20 = MCS8 / MCS4 at 40MHz"
echo " 21 = MCS9 / MCS5 at 40MHz "
echo " 22 = MCS10 / MCS6 at 40MHz "
echo " 23 = MCS11 / MCS7 at 40MHz "
echo " 24 = MCS12 / MCS7,40MHz SGI "
echo " 25 = MCS13"
echo " 26 = MCS14"
echo " 27 = MCS15"
echo ""
exit 0
}
wgod_get_band() {
local channel=$1
local band=0
if [ $channel -gt 30 ]; then
band=1
fi
echo $band
}
wget_set_channel() {
local band=$(wgod_get_band $W_CHANNEL)
calibrator wlan0 wl18xx_plt tune_channel $W_CHANNEL $band $W_BANDWIDTH
}
wget_set_power() {
local band=$(wgod_get_band $W_CHANNEL)
local power=$(expr $W_POWER * 1000)
local bandwidth=0
if [ $W_BANDWIDTH -eq 2 ]; then
bandwidth=1
elif [ $W_BANDWIDTH -eq 3 ]; then
bandwidth=-1
fi
calibrator wlan0 wl18xx_plt set_tx_power $power 0 $band $W_CHANNEL $W_BANDWIDTH $W_ANTENNA \
0 0 0 0 0 0
}
wgod_stop_rx() {
echo "--> run stop Rx sequence"
calibrator $W_INTERFACE wl18xx_plt get_rx_stats 2> /dev/null
calibrator $W_INTERFACE wl18xx_plt stop_rx > /dev/null 2>&1
}
wgod_stop() {
echo "--> run stop sequence"
if [ $W_TESTMODE -eq 2 ]; then
wgod_stop_rx
fi
calibrator $W_INTERFACE plt power_mode off > /dev/null 2>&1
}
wgod_start_tx() {
local bandwidth=0
echo "--> run start Tx sequence"
wget_set_power
if [ $W_BANDWIDTH -gt 1 ]; then
bandwidth=1
fi
calibrator $W_INTERFACE wl18xx_plt start_tx 400 $W_RATE 3000 0 0 $W_SGI 0 0 \
$W_SRCADDR $W_DSTADDR $bandwidth
}
wgod_start_rx() {
echo "--> run start Rx sequence"
calibrator $W_INTERFACE wl18xx_plt start_rx $SRCADDR $DSTADDR > /dev/null 2>&1
}
wgod_start() {
calibrator $W_INTERFACE plt power_mode on
wget_set_channel
case $W_TESTMODE in
1) wgod_start_tx;;
2) wgod_start_rx;;
esac
}
if [ $# -le 0 ]; then
usage
fi
while getopts a:b:c:d:g:hi:r:s:t: OPT; do
case $OPT in
a) W_ANTENNA=$OPTARG;;
b) W_BANDWIDTH=$OPTARG;;
c) W_CHANNEL=$OPTARG;;
d) W_DSTADDR="$OPTARG";;
g) W_SGI="$OPTARG";;
h) usage;;
i) W_INTERFACE="$OPTARG";;
p) W_POWER=$OPTARG;;
r) W_RATE=$OPTARG;;
s) W_SRCADDR="$OPTARG";;
t) W_TESTMODE=$OPTARG;;
*) usage;;
esac
done
shift $(expr $OPTIND - 1)
wgod_stop
if [ "$1" != "start" ]; then
exit 0
fi
wgod_start

View File

@ -0,0 +1,50 @@
SUMMARY = "TI wl18xx calibrator tool"
DESCRIPTION = "TI wl18xx calibrator tool"
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://COPYING;md5=4725015cb0be7be389cf06deeae3683d"
SRC_URI = "git://git.ti.com/git/wilink8-wlan/18xx-ti-utils.git;protocol=http \
file://wgod-ng \
file://btgod-ng \
file://0001-FIX-port-to-OE.patch \
"
PV = "1.0+git${SRCPV}"
SRCREV = "87af888fe6f7b8fa5926a38a752f65451afe5f24"
inherit pkgconfig
S = "${WORKDIR}/git"
DEPENDS = "libnl-tiny"
LDFLAGS += " -Wl,--gc-sections -flto"
export CROSS_COMPILE = "${TARGET_PREFIX}"
EXTRA_OEMAKE = " \
CFLAGS="${CFLAGS} -I${STAGING_DIR_TARGET}/usr/include/libnl-tiny -DCONFIG_LIBNL20 -D_GNU_SOURCE -DCONFIG_LIBNL_TINY -ffunction-sections -fdata-sections" \
LDFLAGS="${LDFLAGS} -L${STAGING_LIBDIR} -Wl,--gc-sections -flto" \
LIBS="${LIBS} -lnl-tiny" \
CC="${CC}" \
NLVER=2" \
NL1FOUND="" NL2FOUND=Y \
NLLIBNAME="libnl-tiny"
#export EXTRA_OEMAKE = " \
# ${CFLAGS} \
# -I${STAGING_DIR_TARGET}/usr/include/libnl-tiny \
# -lnl-tiny \
# -DCONFIG_LIBNL20 \
# -DCONFIG_LIBNL_TINY \
# -D_GNU_SOURCE \
#"
do_install () {
install -d ${D}${bindir}
install -m 755 ${S}/calibrator ${D}${bindir}/.
install -m 755 ${WORKDIR}/wgod-ng ${D}${bindir}/.
install -m 755 ${WORKDIR}/btgod-ng ${D}${bindir}/.
}
FILES_${PN} += "${bindir}/*"