diff options
Diffstat (limited to 'contrib/bluez-utils')
-rw-r--r-- | contrib/bluez-utils | 452 |
1 files changed, 452 insertions, 0 deletions
diff --git a/contrib/bluez-utils b/contrib/bluez-utils new file mode 100644 index 00000000..f4d56ea5 --- /dev/null +++ b/contrib/bluez-utils @@ -0,0 +1,452 @@ +# 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 +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh |