public inbox for linux-bluetooth@vger.kernel.org
 help / color / mirror / Atom feed
From: "Horacio J. Peña" <horape@compendium.com.ar>
To: bluez-devel@lists.sourceforge.net
Subject: [Bluez-devel] bluetooth dies when trying to use 2 sco links
Date: Sun, 17 Sep 2006 17:25:58 -0300	[thread overview]
Message-ID: <20060917202558.GG21347@compendium.com.ar> (raw)

[-- Attachment #1: Type: text/plain, Size: 2583 bytes --]

Hello!

Attached you'll find the code for a test program that makes a call using
the hands-free profile connected to a cell phone and when the call is
answered it generates echo (so the person who answers the phone will
hear himself)

Running just one instance of it with just one phone, it works great.
When I try to run two instances, each connected to a different phone, it
works for a few seconds and then all the SCO data stops flowing (hcidump
shows nothing) The bluetooth dongle I'm using has a led indicating it's
working. That led gets off permanently and the phones display an
indication saying something like "bluebooth connection lost"

After that, trying to do an hcitool scan dies with:

Scanning ...
Inquiry failed: Connection timed out

On http://www.compendium.net.ar/2sco.hcidump.bz2 you can find an hcidump
of the tests.

The dongle i'm using is:

Bus 001 Device 004: ID 4851:1103

horape@nb:~$ hciconfig hci0 version
hci0:   Type: USB
        BD Address: 00:0E:A1:00:54:19 ACL MTU: 192:8 SCO MTU: 64:8
        HCI Ver: 1.1 (0x1) HCI Rev: 0x32e LMP Ver: 1.1 (0x1) LMP Subver: 0x32e
        Manufacturer: Cambridge Silicon Radio (10)
horape@nb:~$ hciconfig hci0 revision
hci0:   Type: USB
        BD Address: 00:0E:A1:00:54:19 ACL MTU: 192:8 SCO MTU: 64:8
        Build 814
horape@nb:~$ hciconfig hci0 features
hci0:   Type: USB
        BD Address: 00:0E:A1:00:54:19 ACL MTU: 192:8 SCO MTU: 64:8
        Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
                <3-slot packets> <5-slot packets> <encryption> <slot offset>
                <timing accuracy> <role switch> <hold mode> <sniff mode>
                <park state> <RSSI> <channel quality> <SCO link> <HV2 packets>
                <HV3 packets> <u-law log> <A-law log> <CVSD> <paging scheme>
                <power control> <transparent SCO>

Kernel is:

Linux nb 2.6.17 #4 SMP PREEMPT Wed May 10 13:53:45 CEST 2006 i686 GNU/Linux

Default with KNOPPIX 5.0.1 2006-06-01

I'm working on a toshiba satellite P105-S6024.

The phones i'm using are sony ericsson z520a. The code assumes rfcomm channel 3 is
hands free profile (line 50) and call indicator 10 is callsetup (line 67)

Is somebody able to help? Is there more info I could provide to help in the search
for a solution?

I'm looking forward to have 7 phones connected to a PC, making calls all
at once almost 24/7. Should I try with 7 dongles, one for each phone?
Would that work better?

Thanks!
					HoraPe
---
Horacio J. Peña
horape@compendium.com.ar
horape@uninet.edu

[-- Attachment #2: handsfree-echo.c --]
[-- Type: text/x-csrc, Size: 2195 bytes --]

#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
#include <bluetooth/rfcomm.h>
#include <bluetooth/sco.h>
#include <fcntl.h>
#include <assert.h>

int fd;

void send_line(char* line)
{
  write(fd, line, strlen(line));
  write(fd, "\xd", 1);
  fprintf(stderr, "send_line:<%s>\n", line);
}

const char* get_line()
{
  static char buf[1024];
  char *bufit=buf;
  while (read(fd, bufit, 1)==1 && *bufit!='\xd') {
    if (*bufit=='\xa')
      bufit = buf;
    else
      bufit++;
    }
  *bufit = '\x0';
  fprintf(stderr, "get_line:<%s>\n", buf);
  return buf;
}

int main(int argc, char *argv[])
{
  if (argc!=3) {
    fprintf(stderr, "argc!=3\n");
    return 1;
  }
  
  fd = socket(PF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
  if (fd<0) {
    perror("socket error");
    return 1;
  }
  struct sockaddr_rc addr;
  memset(&addr, 0, sizeof(addr));
  addr.rc_family = AF_BLUETOOTH;
  str2ba(argv[1], &addr.rc_bdaddr);
  addr.rc_channel = 3;
  if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
    perror("connect error");
    return 1;
  }
  send_line("AT+BRSF=22");
  while (strncmp(get_line(),"OK",2)!=0);
  send_line("AT+CIND=?");
  while (strncmp(get_line(),"OK",2)!=0);
  send_line("AT+CIND?");
  while (strncmp(get_line(),"OK",2)!=0);
  send_line("AT+CMER=3,0,0,1");
  while (strncmp(get_line(),"OK",2)!=0);

  char dialcmd[1024];
  sprintf(dialcmd, "ATD%s;", argv[2]);
  send_line(dialcmd);
  while (strcmp(get_line(),"+CIEV: 10,3")!=0);
  fprintf(stderr, "alerting! connecting SCO\n");
  
  int scofd = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO);
  if (scofd<0) {
    perror("scofd socket");
    return 1;
  }
  struct sockaddr_sco scoaddr;
  memset(&scoaddr, 0, sizeof(scoaddr));
  scoaddr.sco_family = AF_BLUETOOTH;
  str2ba(argv[1], &scoaddr.sco_bdaddr);
  if (connect(scofd, (struct sockaddr *)&scoaddr, sizeof(scoaddr))<0) {
    perror ("scofd connect");
    return 1;
  }

  char scobuf[100][48];
  int scoit=0;
  while (1) {
    while (read(scofd, scobuf[scoit], 48) == 48) {
      scoit = (scoit+1)%(sizeof(scobuf)/sizeof(scobuf[0]));
      write(scofd, scobuf[scoit], 48);
    }
  }
  return 0;
}

[-- Attachment #3: Type: text/plain, Size: 373 bytes --]

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

[-- Attachment #4: Type: text/plain, Size: 164 bytes --]

_______________________________________________
Bluez-devel mailing list
Bluez-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-devel

             reply	other threads:[~2006-09-17 20:25 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-09-17 20:25 Horacio J. Peña [this message]
2006-09-18  2:44 ` [Bluez-devel] bluetooth dies when trying to use 2 sco links Brad Midgley
2006-09-18  6:16 ` Marcel Holtmann
2006-11-07 23:58 ` Brad Midgley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060917202558.GG21347@compendium.com.ar \
    --to=horape@compendium.com.ar \
    --cc=bluez-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox