455 lines
7.8 KiB
Bash
455 lines
7.8 KiB
Bash
# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
|
|
# ex: ts=8 sw=8 noet filetype=sh
|
|
#
|
|
# bash completion for bluez-utils
|
|
|
|
have hcitool && {
|
|
_bluetooth_adresses()
|
|
{
|
|
if [ -n "${COMP_BLUETOOTH_SCAN:-}" ]; then
|
|
COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "$( hcitool scan | \
|
|
awk '/^\t/{print $1}' )" -- $cur ) )
|
|
fi
|
|
}
|
|
|
|
_bluetooth_devices()
|
|
{
|
|
COMPREPLY=( ${COMPREPLY[@]:-} $( compgen -W "$( hcitool dev | \
|
|
awk '/^\t/{print $1}' )" -- $cur ) )
|
|
}
|
|
|
|
_bluetooth_services()
|
|
{
|
|
COMPREPLY=( $( compgen -W 'DID SP DUN LAN FAX OPUSH FTP HS HF HFAG \
|
|
SAP NAP GN PANU HCRP HID CIP A2SRC A2SNK AVRCT AVRTG UDIUE \
|
|
UDITE SYNCML' -- $cur ) )
|
|
}
|
|
|
|
_bluetooth_packet_types()
|
|
{
|
|
COMPREPLY=( $( compgen -W 'DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3' -- \
|
|
$cur ) )
|
|
}
|
|
|
|
_get_command()
|
|
{
|
|
local i
|
|
|
|
command=
|
|
for (( i=1; i < COMP_CWORD; i++ )); do
|
|
if [[ "${COMP_WORDS[i]}" != -* ]]; then
|
|
command=${COMP_WORDS[i]}
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
_hcitool()
|
|
{
|
|
local cur prev split=false
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
|
_split_longopt && split=true
|
|
|
|
case $prev in
|
|
-i)
|
|
_bluetooth_devices
|
|
return 0;
|
|
;;
|
|
--role)
|
|
COMPREPLY=( $( compgen -W 'm s' -- $cur ) )
|
|
return 0;
|
|
;;
|
|
--pkt-type)
|
|
_bluetooth_packet_types
|
|
return 0;
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
_get_command
|
|
if [ -z $command ]; then
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h -i' -- $cur ) )
|
|
else
|
|
COMPREPLY=( $( compgen -W 'dev inq scan name info \
|
|
spinq epinq cmd con cc dc sr cpt rssi lq tpl \
|
|
afh lst auth enc key clkoff clock' -- $cur ) )
|
|
fi
|
|
else
|
|
case $command in
|
|
@(name|info|dc|rssi|lq|afh|auth|key|clkoff|lst))
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
fi
|
|
;;
|
|
cc)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '--role \
|
|
--pkt-type' -- $cur ) )
|
|
else
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
fi
|
|
fi
|
|
;;
|
|
sr)
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
else
|
|
COMPREPLY=( $( compgen -W \
|
|
'master slave' -- $cur ) )
|
|
fi
|
|
;;
|
|
cpt)
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
else
|
|
_bluetooth_packet_types
|
|
fi
|
|
;;
|
|
@(tpl|enc|clock))
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
else
|
|
COMPREPLY=( $( compgen -W \
|
|
'0 1' -- $cur ) )
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
complete -F _hcitool hcitool
|
|
|
|
_sdptool()
|
|
{
|
|
local cur prev split=false
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
|
_split_longopt && split=true
|
|
|
|
case $prev in
|
|
--bdaddr)
|
|
_bluetooth_adresses
|
|
return 0;
|
|
;;
|
|
esac
|
|
|
|
$split && return 0
|
|
|
|
_get_command
|
|
if [ -z $command ]; then
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '--help' -- $cur ) )
|
|
else
|
|
COMPREPLY=( $( compgen -W 'search browse records add \
|
|
del get setattr setseq' -- $cur ) )
|
|
fi
|
|
else
|
|
case $command in
|
|
search)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '--bdaddr \
|
|
--tree --raw --xml' -- $cur ) )
|
|
else
|
|
_bluetooth_services
|
|
fi
|
|
;;
|
|
@(browse|records))
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '--tree \
|
|
--raw --xml' -- $cur ) )
|
|
else
|
|
_bluetooth_adresses
|
|
fi
|
|
;;
|
|
add)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '--handle \
|
|
--channel' -- $cur ) )
|
|
else
|
|
_bluetooth_services
|
|
fi
|
|
;;
|
|
get)
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '--bdaddr \
|
|
--tree --raw --xml' -- $cur ) )
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
complete -F _sdptool sdptool
|
|
|
|
_l2ping()
|
|
{
|
|
local cur prev
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
|
case $prev in
|
|
-i)
|
|
_bluetooth_devices
|
|
return 0;
|
|
;;
|
|
esac
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-i -s -c -t -f -r' -- $cur ) )
|
|
else
|
|
_bluetooth_adresses
|
|
fi
|
|
|
|
}
|
|
complete -F _l2ping l2ping
|
|
|
|
_rfcomm()
|
|
{
|
|
local cur prev
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
|
case $prev in
|
|
-@(f|-config))
|
|
_filedir
|
|
return 0;
|
|
;;
|
|
-i)
|
|
_bluetooth_devices
|
|
_bluetooth_adresses
|
|
return 0;
|
|
;;
|
|
esac
|
|
|
|
_get_command
|
|
if [ -z $command ]; then
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h --help -a -r --raw -f \
|
|
--config -i -A --auth -E --encrypt -S --secure \
|
|
-M --master' -- $cur ) )
|
|
else
|
|
COMPREPLY=( $( compgen -W 'show connect listen watch \
|
|
bind release' -- $cur ) )
|
|
fi
|
|
else
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_devices
|
|
else
|
|
case $command in
|
|
@(connect|bind))
|
|
if [ $args -eq 3 ]; then
|
|
_bluetooth_adresses
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
}
|
|
complete -F _rfcomm rfcomm
|
|
|
|
_ciptool()
|
|
{
|
|
local cur prev
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
|
case $prev in
|
|
-i)
|
|
_bluetooth_devices
|
|
_bluetooth_adresses
|
|
return 0;
|
|
;;
|
|
esac
|
|
|
|
_get_command
|
|
if [ -z $command ]; then
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h --help -i' -- $cur ) )
|
|
else
|
|
COMPREPLY=( $( compgen -W 'show search connect release \
|
|
loopback' -- $cur ) )
|
|
fi
|
|
else
|
|
case $command in
|
|
@(connect|release|loopback))
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
complete -F _ciptool ciptool
|
|
|
|
_dfutool()
|
|
{
|
|
local cur prev
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
|
|
case $prev in
|
|
-@(d|-device))
|
|
_bluetooth_devices
|
|
return 0;
|
|
;;
|
|
esac
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h --help -d --device' -- $cur ) )
|
|
else
|
|
_count_args
|
|
case $args in
|
|
1)
|
|
COMPREPLY=( $( compgen -W 'verify modify \
|
|
upgrade archive' -- $cur ) )
|
|
;;
|
|
2)
|
|
_filedir
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
complete -F _dfutool dfutool
|
|
|
|
_hciconfig()
|
|
{
|
|
local cur
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
|
|
_get_command
|
|
if [ -z $command ]; then
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h --help -a --all' -- $cur ) )
|
|
else
|
|
COMPREPLY=( $( compgen -W 'up down reset rstat auth \
|
|
noauth encrypt noencrypt secmgr nosecmgr \
|
|
piscan noscan iscan pscan ptype name class \
|
|
voice iac inqmode inqdata inqtype inqparams \
|
|
pageparms pageto afhmode aclmtu scomtu putkey \
|
|
delkey commands features version revision lm' \
|
|
-- $cur ) )
|
|
fi
|
|
else
|
|
case $command in
|
|
@(putkey|delkey))
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_adresses
|
|
fi
|
|
;;
|
|
lm)
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
COMPREPLY=( $( compgen -W 'MASTER \
|
|
SLAVE NONE ACCEPT' -- $cur ) )
|
|
fi
|
|
;;
|
|
ptype)
|
|
_count_args
|
|
if [ $args -eq 2 ]; then
|
|
_bluetooth_packet_types
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
complete -F _hciconfig hciconfig
|
|
|
|
_hciattach()
|
|
{
|
|
local cur
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-n -p -t -b -s -l' -- $cur ) )
|
|
else
|
|
_count_args
|
|
case $args in
|
|
1)
|
|
COMPREPLY=( $( command ls /dev/tty* ) )
|
|
COMPREPLY=( $( compgen -W '${COMPREPLY[@]} \
|
|
${COMPREPLY[@]#/dev/}' -- $cur ) )
|
|
;;
|
|
2)
|
|
COMPREPLY=( $( compgen -W 'any ericsson digi \
|
|
xircom csr bboxes swave bcsp 0x0105 \
|
|
0x080a 0x0160 0x0002' -- $cur ) )
|
|
;;
|
|
3)
|
|
COMPREPLY=( $( compgen -W '9600 19200 38400 \
|
|
57600 115200 230400 460800 921600' \
|
|
-- $cur ) )
|
|
;;
|
|
4)
|
|
COMPREPLY=( $( compgen -W 'flow noflow' \
|
|
-- $cur ) )
|
|
;;
|
|
5)
|
|
_bluetooth_adresses
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
}
|
|
complete -F _hciattach hciattach
|
|
|
|
_hid2hci()
|
|
{
|
|
local cur
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h --help -q --quiet -0 --tohci -1 \
|
|
--tohid' -- $cur ) )
|
|
fi
|
|
}
|
|
complete -F _hid2hci hid2hci
|
|
|
|
_avctrl()
|
|
{
|
|
local cur
|
|
|
|
COMPREPLY=()
|
|
cur=`_get_cword`
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-h --help -q --quiet' -- $cur ) )
|
|
else
|
|
_count_args
|
|
if [ $args -eq 1 ]; then
|
|
COMPREPLY=( $( compgen -W 'discover switch' -- $cur ) )
|
|
fi
|
|
fi
|
|
}
|
|
complete -F _avctrl avctrl
|
|
}
|