.\"
.\"	This program is free software; you can redistribute it and/or modify
.\"	it under the terms of the GNU General Public License as published by
.\"	the Free Software Foundation; either version 2 of the License, or
.\"	(at your option) any later version.
.\"
.\"	This program is distributed in the hope that it will be useful,
.\"	but WITHOUT ANY WARRANTY; without even the implied warranty of
.\"	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
.\"	GNU General Public License for more details.
.\"
.\"	You should have received a copy of the GNU General Public License
.\"	along with this program; if not, write to the Free Software
.\"	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
.\"
.\"
.TH RFCOMM 1 "APRIL 28, 2002" "" ""

.SH NAME
rfcomm \- RFCOMM configuration utility
.SH SYNOPSIS
.BR "rfcomm
[
.I options
] <
.I command
> <
.I dev
>
.SH DESCRIPTION
.B rfcomm
is used to set up, maintain, and inspect the RFCOMM configuration
of the Bluetooth subsystem in the Linux kernel. If no
.B command
is given, or if the option
.B -a
is used,
.B rfcomm
prints information about the configured RFCOMM devices.
.SH OPTIONS
.TP
.BI -h
Gives a list of possible commands.
.TP
.BI -a
Prints information about all configured RFCOMM devices.
.TP
.BI -r
Switch TTY into raw mode (doesn't work with "bind").
.TP
.BI -f " [file]"
Specify alternate config file.
.TP
.BI -i " <hciX> | <bdaddr>"
The command is applied to device
.I
hciX
, which must be the name or the address of an installed Bluetooth
device. If not specified, the command will be use the first
available Bluetooth device.
.SH COMMANDS
.TP
.BI show " <dev>"
Display the information about the specified device.
.TP
.BI connect " <dev> [bdaddr] [channel]"
Connect the RFCOMM device to the remote Bluetooth device on the
specified channel. If no channel is specified, it will use the
channel number 1. If also the Bluetooth address is left out, it
tries to read the data from the config file. This command can
be terminated with the key sequence CTRL-C.
.TP 
.BI listen " <dev> [channel]"
Listen on a specified RFCOMM channel for incoming connections.
If no channel is specified, it will use the channel number 1.
This command can be terminated with the key sequence CTRL-C.
.TP
.BI bind " <dev> [bdaddr] [channel]"
This binds the RFCOMM device to a remote Bluetooth device. The
command did not establish a connection to the remote device, it
only creates the binding. The connection will be established right
after an application tries to open the RFCOMM device. If no channel
number is specified, it uses the channel number 1. If the Bluetooth
address is also left out, it tries to read the data from the config
file.

If
.B all
is specified for the RFCOMM device, then all devices that have
.B "bind yes"
set in the config will be bound.
.TP
.BI release " <dev>"
This command releases a defined RFCOMM binding.

If
.B all
is specified for the RFCOMM device, then all bindings will be removed.
This command didn't care about the settings in the config file.
.SH AUTHOR
Written by Marcel Holtmann <marcel@holtmann.org>.
.br
