Re: cannot setup multiple connection using RFCOMM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 2, 2011 at 6:31 PM, Brad Midgley <bmidgley@xxxxxxxxx> wrote:
> Han
>
>> I have a client / server application running over bluetooth using
>> RFCOMM as transport.  I am using socket API in C with AF_BLUETOOTH,
>> SOCK_STREAM and BTPROTO_RFCOMM.
>
> rfcomm is the wrong protocol if you want to have multiple connections
> to one server.

Thanks Brad. What should be the right protocol to use?

>
> In case you have no choice, I've appended a very old howto suggesting
> a way to multiplex rfcomm for gps, but it's generally unreliable
> because clients cache sdp records unpredictably.

thanks for the detailed info.  It seems that rfcomm.conf has to
include one entry for each connection with different channel? In my
case, I really don't know how many (parallel)  client connections in
advance. It's all dynamic.

Han

>
> ================================
>
> Bluetooth & GPS
> I would like to have a multifunction GPS unit... logging, repeating
> gps location data over bluetooth for two clients. gpsd is running and
> receiving from the local gps.
>
> Next, to make it repeat the gps stream, I started by installing gpspipe.
>
> start with two rfcomm listeners in /etc/bluetooth/rfcomm.conf:
>
> #
> # cat /etc/bluetooth/rfcomm.conf
> #
> # RFCOMM configuration file.
> #
>
> rfcomm0 {
>        listen yes;
>
>        # Bluetooth address of the device
>        device hci0;
>
>        # RFCOMM channel for the connection
>        channel 1;
>
>        # Description of the connection
>        comment "gps repeater channel 1";
> }
>
> rfcomm1 {
>        listen yes;
>
>        # Bluetooth address of the device
>        device hci0;
>
>        # RFCOMM channel for the connection
>        channel 2;
>
>        # Description of the connection
>        comment "gps repeater channel 2";
> }
>
> next, in /etc/bluetooth/rfcomm/rfcomm-gps-repeater:
>
> #!/bin/sh
> # use: rfcomm-gps-repeater rfcommx next-port-number
> # eg: rfcomm-gps-repeater rfcomm0 2 & rfcomm-gps-repeater rfcomm1 1 &
> while true;
>        do
>        rfcomm show | grep $1 > /dev/null 2> /dev/null
>        if [ "$?" != "1" ] ; then
>                /usr/bin/sdptool add --channel=$2 SP
>                /usr/bin/gpspipe -r >/dev/$1;
>        fi
>        sleep 1;
> done
>
> I run two of these in parallel, pointing each one to the *next* rfcomm
> channel it should advertise via sdp. This is so the next bluetooth
> client to scan sdp will find the available repeater.
>
> It seems the rfcomm listener is not prepared to serve two ports. The
> new /etc/bluetooth/rfcomm/rfcomm-listen:
>
> #!/bin/sh
> while $1 -r -f $2 listen $3;do continue;done
>
> Finally, execute everything properly in /etc/init.d/S30bluetooth:
>
> ...
> RFCOMM_GPS_REPEATER=/etc/bluetooth/rfcomm/rfcomm-gps-repeater
> ...
>                #$RFCOMM_LISTEN $RFCOMM_EXEC $RFCOMM_CONFIG > /dev/null 2>&1 &
>                $RFCOMM_LISTEN $RFCOMM_EXEC $RFCOMM_CONFIG rfcomm0 > /dev/null 2>&1 &
>                $RFCOMM_LISTEN $RFCOMM_EXEC $RFCOMM_CONFIG rfcomm1 >
> /dev/null 2>&1 &
>                #$RFCOMM_GETTY > /dev/null 2>&1 &
>                $RFCOMM_GPS_REPEATER rfcomm0 2 > /dev/null 2>&1 &
>                $RFCOMM_GPS_REPEATER rfcomm1 1 > /dev/null 2>&1 &
> ...
>
> You may have to change hcid.conf to contain "lm accept,master" so the
> board insists on being the bluetooth master device. I was getting i/o
> errors before I did that.
>
> --
> Brad Midgley
>
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux