# bash completion for bluez utils -*- shell-script -*- _bluetooth_addresses() { if [[ -n ${COMP_BLUETOOTH_SCAN:-} ]]; then COMPREPLY+=($(compgen -W "$(hcitool scan | awk '/^\t/{print $1}')" -- "$cur")) fi } _bluetooth_devices() { 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")) } _hcitool() { local cur prev words cword split _init_completion -s || return case $prev in -i) _bluetooth_devices return ;; --role) COMPREPLY=($(compgen -W 'm s' -- "$cur")) return ;; --pkt-type) _bluetooth_packet_types return ;; esac $split && return local arg _get_first_arg if [[ -z $arg ]]; then if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$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 local args case $arg in name | info | dc | rssi | lq | afh | auth | key | clkoff | lst) _count_args if ((args == 2)); then _bluetooth_addresses fi ;; cc) if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '--role --pkt-type' -- "$cur")) else _count_args if ((args == 2)); then _bluetooth_addresses fi fi ;; sr) _count_args if ((args == 2)); then _bluetooth_addresses else COMPREPLY=($(compgen -W 'master slave' -- "$cur")) fi ;; cpt) _count_args if ((args == 2)); then _bluetooth_addresses else _bluetooth_packet_types fi ;; tpl | enc | clock) _count_args if ((args == 2)); then _bluetooth_addresses else COMPREPLY=($(compgen -W '0 1' -- "$cur")) fi ;; esac fi } && complete -F _hcitool hcitool _sdptool() { local cur prev words cword split _init_completion -s || return case $prev in --bdaddr) _bluetooth_addresses return ;; esac $split && return local arg _get_first_arg if [[ -z $arg ]]; then if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) else COMPREPLY=($(compgen -W 'search browse records add del get setattr setseq' -- "$cur")) fi else case $arg 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_addresses 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 words cword _init_completion || return case $prev in -i) _bluetooth_devices return ;; -s | -c | -t | -d) return ;; esac if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur")) else _bluetooth_addresses fi } && complete -F _l2ping l2ping _rfcomm() { local cur prev words cword _init_completion || return case $prev in -f | --config) _filedir return ;; -i) _bluetooth_devices _bluetooth_addresses return ;; esac local arg _get_first_arg if [[ -z $arg ]]; then if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) else COMPREPLY=($(compgen -W 'show connect listen watch bind release' -- "$cur")) fi else local args _count_args if ((args == 2)); then _bluetooth_devices else case $arg in connect | bind) if ((args == 3)); then _bluetooth_addresses fi ;; esac fi fi } && complete -F _rfcomm rfcomm _ciptool() { local cur prev words cword _init_completion || return case $prev in -i) _bluetooth_devices _bluetooth_addresses return ;; esac local arg _get_first_arg if [[ -z $arg ]]; then if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) else COMPREPLY=($(compgen -W 'show search connect release loopback' \ -- "$cur")) fi else local args case $arg in connect | release | loopback) _count_args if ((args == 2)); then _bluetooth_addresses fi ;; esac fi } && complete -F _ciptool ciptool _dfutool() { local cur prev words cword _init_completion || return case $prev in -d | --device) _bluetooth_devices return ;; esac if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) else local args _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 prev words cword _init_completion || return local arg _get_first_arg if [[ -z $arg ]]; 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 local args case $arg in putkey | delkey) _count_args if ((args == 2)); then _bluetooth_addresses fi ;; lm) _count_args if ((args == 2)); then COMPREPLY=($(compgen -W 'MASTER SLAVE NONE ACCEPT' \ -- "$cur")) fi ;; ptype) _count_args if ((args == 2)); then _bluetooth_packet_types fi ;; esac fi } && complete -F _hciconfig hciconfig _hciattach() { local cur prev words cword _init_completion || return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '-n -p -t -b -s -l' -- "$cur")) else local args _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_addresses ;; esac fi } && complete -F _hciattach hciattach # ex: filetype=sh