# 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 '--help -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 '--help -a --raw \ --config -i --auth --encrypt --secure --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 '--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 '--help --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 '--help --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=( $( printf '%s\n' /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 '--help --quiet -0 --tohci -1 \ --tohid' -- "$cur" ) ) fi } complete -F _hid2hci hid2hci _avctrl() { local cur COMPREPLY=() cur=`_get_cword` if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--help --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