Return-Path: Message-ID: Date: Tue, 19 Dec 2006 12:25:22 -0800 From: "Mark S. Townsley" To: "BlueZ users" In-Reply-To: <45883E80.50703@gmail.com> MIME-Version: 1.0 References: <45883E80.50703@gmail.com> Subject: Re: [Bluez-users] minicom over /dev/rfcomm0 Reply-To: BlueZ users List-Id: BlueZ users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============1364455863==" Sender: bluez-users-bounces@lists.sourceforge.net Errors-To: bluez-users-bounces@lists.sourceforge.net --===============1364455863== Content-Type: multipart/alternative; boundary="----=_Part_15119_19792895.1166559922640" ------=_Part_15119_19792895.1166559922640 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Thanks for the code. I have something simular in the way how I open RFCOMM as a socket. So I think I am on the right track. However, in reading your code, what I do not understand is what part of it are "serial" in nature? In a quick glance, all are socket (and RFCOMM sockets) based. I don't see anything that is serial in nature in your code (like open() a serial port to get a file descriptor etc....) Sorry if I am asking stupid questions. Mark On 12/19/06, Manuel Naranjo wrote: > > Mark, > Here is a library I made on C++ based on the code from hcitool and some > other code I found on the web, that let's you use the RFcomm layer as a > serial port. It might need a lot of changes, it is just what I needed. > Thanks > Manuel > > > > Hi: > > > > In many examples that I found online where people are trying to make > > their cellphone surf web or somehow talk to their cellphone from > > Bluez, I notice that they can often do minicom over /dev/rfcomm0 in > > the setup. > > > > If I want to access the serial port service like that, but from my C > > program, do I just treat /dev/rfcomm0 as a serial device and use > > standard Unix serial programming libraries from my C program to do so? > > Just curious. Thanks in advanced for any tip. > > > > > > Mark > > ------------------------------------------------------------------------ > > > > > ------------------------------------------------------------------------- > > Take Surveys. Earn Cash. Influence the Future of IT > > Join SourceForge.net's Techsay panel and you'll get the chance to share > your > > opinions on IT & business topics through brief surveys - and earn cash > > > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Bluez-users mailing list > > Bluez-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/bluez-users > > > > > > > /*************************************************************************** > * Copyright (C) 2006 by Manuel Naranjo * > * manuel@aircable.net * > * > * > * This program is free software; you can redistribute it and/or > modify * > * it under the terms of the GNU Library 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 Library General Public > * > * License along with this program; if not, write to the > * > * Free Software Foundation, Inc., > * > * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > * > * > * > * > * > * This class is a C++ warper of a Bluetooth RFcomm > Socket * > > ***************************************************************************/ > > #include "rfcomm.h" > > #include > #include > #include > #include > #include > > #include > #include > #include > #include > > RfComm::RfComm(void){ > rfcommSocket = -1; > bt_addr = "00:00:00:00:00:00"; > } > > RfComm::RfComm(string addr){ > rfcommSocket = -1; > bt_addr = addr; > } > > RfComm::~RfComm(void){ > Close(); > } > > void RfComm::Close(void){ > if (rfcommSocket != -1) > close(rfcommSocket); > > } > > void RfComm::Open(void){ > bdaddr_t t_bdaddr; > str2ba(bt_addr.c_str(), &t_bdaddr); > > struct sockaddr_rc sockaddr; > sockaddr.rc_family = AF_BLUETOOTH; > sockaddr.rc_bdaddr = t_bdaddr; > sockaddr.rc_channel = (uint8_t) 1; > > rfcommSocket = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); > > if (connect(rfcommSocket, (struct sockaddr *) &sockaddr, > sizeof(sockaddr)) < 0) { > std::cerr << "Error While Openning RFComm Connection" > < rfcommSocket = -1; > } > } > > void RfComm::setAddress(string new_addr){ > Close(); > bt_addr = new_addr; > } > > int RfComm::Write(string message){ > int result = -1; > if (rfcommSocket==-1){ > std::cerr << "Not a valid socket, aborting"< return result; > } > > result = send(rfcommSocket, (void *)message.c_str(), message.size(), > 0); > > if (result < 0) > std::cerr << "There was an error when trying to > write"< > return result; > } > > string RfComm::Read(void){ > char response[64]; > string out = ""; > if (recv(rfcommSocket, response, 64, 0) < 0) { > std::cerr << "There was an error while trying to > read"< return NULL; > } > > out+=response; > return out; > } > > int RfComm::getLinkQuality(uint8_t * lq){ > struct hci_conn_info_req *cr; > bdaddr_t bdaddr; > > int dd; > int dev_id; > > str2ba(bt_addr.c_str(), &bdaddr); > > dev_id = hci_for_each_dev(HCI_UP, find_conn, (long) &bdaddr); > if (dev_id < 0) { > std::cerr <<"Not connected, can't read Link Quality" << > endl; > return -1; > } > > dd = hci_open_dev(dev_id); > if (dd < 0) { > std::cerr << "HCI device open failed"; > return -1; > } > > cr = (hci_conn_info_req*)malloc(sizeof(*cr) + sizeof(struct > hci_conn_info)); > if (!cr) { > std::cerr << "Can't allocate memory"; > return -1; > } > > bacpy(&cr->bdaddr, &bdaddr); > cr->type = ACL_LINK; > if (ioctl(dd, HCIGETCONNINFO, (unsigned long) cr) < 0) { > std::cerr << "Get connection info failed"; > return -1; > } > > if (hci_read_link_quality(dd, htobs(cr->conn_info->handle), lq, > 1000) < 0) { > std::cerr << "HCI read_link_quality request failed"; > return -1; > } > > close(dd); > free(cr); > return 0; > } > > int RfComm::getRSSI(int8_t * rssi){ > struct hci_conn_info_req *cr; > bdaddr_t bdaddr; > int dd, dev_id; > int8_t temp; > str2ba(bt_addr.c_str(), &bdaddr); > > if (dev_id < 0) { > dev_id = hci_for_each_dev(HCI_UP, find_conn, (long) > &bdaddr); > if (dev_id < 0) { > std::cerr << "Not connected, can't read RSSI." << > endl; > return -1; > } > } > > dd = hci_open_dev(dev_id); > if (dd < 0) { > std::cerr << "HCI device open failed" << endl; > return -1; > } > > cr = (hci_conn_info_req*)malloc(sizeof(*cr) + sizeof(struct > hci_conn_info)); > if (!cr) { > std::cerr << "Can't allocate memory" << endl; > return -1; > } > > bacpy(&cr->bdaddr, &bdaddr); > cr->type = ACL_LINK; > if (ioctl(dd, HCIGETCONNINFO, (unsigned long) cr) < 0) { > std::cerr << "Get connection info failed" << endl; > return -1; > } > > if (hci_read_rssi(dd, htobs(cr->conn_info->handle), &temp, 1000) < > 0) { > std::cerr << "Read RSSI failed" << endl; > return -1; > } > > *rssi = temp; > > close(dd); > free(cr); > return 0; > } > > int RfComm::getTransmitPowerLevel(int8_t * level, uint8_t * type){ > struct hci_conn_info_req *cr; > bdaddr_t bdaddr; > uint8_t temp; > int dd, dev_id; > > str2ba(bt_addr.c_str(), &bdaddr); > > if (dev_id < 0) { > dev_id = hci_for_each_dev(HCI_UP, find_conn, (long) > &bdaddr); > if (dev_id < 0) { > std::cerr << "Not connected. Can't read Transmit > Power Level." << endl; > return -1; > } > } > > dd = hci_open_dev(dev_id); > if (dd < 0) { > std::cerr << "HCI device open failed" << endl; > return -1; > } > > cr = (hci_conn_info_req*)malloc(sizeof(*cr) + sizeof(struct > hci_conn_info)); > if (!cr) { > std::cerr << "Can't allocate memory" << endl; > return -1; > } > > bacpy(&cr->bdaddr, &bdaddr); > cr->type = ACL_LINK; > if (ioctl(dd, HCIGETCONNINFO, (unsigned long) cr) < 0) { > std::cerr << "Get connection info failed" << endl; > return -1; > } > > if (hci_read_transmit_power_level(dd, > htobs(cr->conn_info->handle), temp, level, 1000) < 0) { > std::cerr << "HCI read transmit power level request > failed" << endl; > return -1; > } > > *type =temp; > > close(dd); > free(cr); > > return 0; > } > > static int find_conn(int s, int dev_id, long arg) > { > struct hci_conn_list_req *cl; > struct hci_conn_info *ci; > int i; > > if (!(cl = (hci_conn_list_req*)malloc(10 * sizeof(*ci) + > sizeof(*cl)))) { > std::cerr << "Can't allocate memory"; > exit(1); > } > cl->dev_id = dev_id; > cl->conn_num = 10; > ci = cl->conn_info; > > if (ioctl(s, HCIGETCONNLIST, (void *) cl)) { > std::cerr <<"Can't get connection list"; > exit(1); > } > > for (i = 0; i < cl->conn_num; i++, ci++) > if (!bacmp((bdaddr_t *) arg, &ci->bdaddr)) > return 1; > > return 0; > } > > > > > > > /*************************************************************************** > * Copyright (C) 2006 by Manuel Naranjo * > * manuel@aircable.net * > * > * > * This program is free software; you can redistribute it and/or > modify * > * it under the terms of the GNU Library 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 Library General Public > * > * License along with this program; if not, write to the > * > * Free Software Foundation, Inc., > * > * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > * > > ***************************************************************************/ > > #ifndef __AIRcableRFCOMM_h__ > #define __AIRcableRFCOMM_h__ > #include > > #define ERROR 0xFFFF > > using namespace std; > > extern "C++"{ > class RfComm{ > > private: > int rfcommSocket; > string bt_addr; > > public: > //constructor > RfComm(void); > > RfComm(string bt_addr); > > ~RfComm(void); > > void Open(void); > > void Close(void); > > int Write(string in); > > string Read(void); > > void setAddress(string new_addr); > > int getLinkQuality(uint8_t * lq); > > int getRSSI(int8_t * rssi); > > int getTransmitPowerLevel(int8_t * level, uint8_t > * type); > }; > }; //C++ > > static int find_conn(int s, int dev_id, long arg); > > #endif //__AIRcableRFCOMM_h__ > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share > your > opinions on IT & business topics through brief surveys - and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > > _______________________________________________ > Bluez-users mailing list > Bluez-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/bluez-users > > > ------=_Part_15119_19792895.1166559922640 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Thanks for the code.  I have something simular in the way how I open R= FCOMM as a socket.
So I think I am on the right track.

However, i= n reading your code, what I do not understand is what part of it are "= serial" in nature?
In a quick glance, all are socket (and RFCOMM sockets) based.  I d= on't see anything
that is serial in nature in your code (like open(= ) a serial port to get a file descriptor etc....)

Sorry if I am aski= ng stupid questions.


Mark


On 12/19/06, <= b class=3D"gmail_sendername">Manuel Naranjo <naranjo.manuel@gmail.com> wrote: Mark,
Here is a library I made on C++ based on the code from hcitool and= some
other code I found on the web, that let's you use the RFcomm l= ayer as a
serial port. It might need a lot of changes, it is just what I= needed.
Thanks
Manuel
>
> Hi:
>
> In many examples t= hat I found online where people are trying to make
> their cellphone = surf web or somehow talk to their cellphone from
> Bluez, I notice th= at they can often do minicom over /dev/rfcomm0 in
> the setup.
>
> If I want to access the serial port ser= vice like that, but from my C
> program, do I just treat /dev/rfcomm0= as a serial device and use
> standard Unix serial programming librar= ies from my C program to do so?
> Just curious.  Thanks in advanced for any tip.
>>
> Mark
> -----------------------------------------------= -------------------------
>
> ---------------------------------= ----------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join S= ourceForge.net's Techsay panel and you'll get the chance to share y= our
> opinions on IT & business topics through brief surveys - an= d earn cash
> http://www.techsay.com/default.php?page= =3Djoin.php&p=3Dsourceforge&CID=3DDEVDEV
> --------------= ----------------------------------------------------------
>
> _______________________________________________
> Bl= uez-users mailing list
> Bluez-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bluez-users
>


/*****************************************************************= **********
*   Copyright (C) 2006 by Manuel Naranjo &nbs= p; *
*   manuel@aircable.net   *
*     &n= bsp;            = ;            &n= bsp;            = ;            &n= bsp;            = ;     *
*   This program is free software= ; you can redistribute it and/or modify  *
*   it u= nder the terms of the GNU Library General Public License as  &nbs= p;    *
*   published by the Free Software Foundation; either versio= n 2 of the    *
*   License, or (at your = option) any later version.        &= nbsp;           &nbs= p;  *
*          = ;            &n= bsp;            = ;            &n= bsp;            = ;             *
*   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.  =             &nb= sp;           *
= *            &n= bsp;            = ;            &n= bsp;            = ;            &n= bsp;          *
* &nb= sp; You should have received a copy of the GNU Library General Public =     *
*   License along with this program; if not, write to the&nb= sp;            =     *
*   Free Software Foundation, Inc., = ;            &n= bsp;            = ;             *=
*   59 Temple Place - Suite 330, Boston, MA  02111= -1307, USA.          &nbs= p;  *
*           &nb= sp;            =             &nb= sp;            =             &nb= sp;            =             &nb= sp;            =             &nb= sp;            =             &nb= sp;        *
*   &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;   *
*   This class is a C++ warper of a Bluetooth RFcomm Socket&= nbsp;           &nbs= p;          *
************= ***************************************************************/

#in= clude "rfcomm.h"

#include <string>
#include <iostream>
#include <sys/param.h>
#include &= lt;sys/socket.h>
#include <sys/ioctl.h>

#include <blu= etooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
#include &= lt;bluetooth/hci.h>
#include <bluetooth/hci_lib.h>

RfComm::RfComm(void){
&n= bsp;       rfcommSocket =3D -1;
 = ;       bt_addr =3D "00:00:00:00:00= :00";
}

RfComm::RfComm(string addr){
   &n= bsp;    rfcommSocket =3D -1;
        bt_addr =3D addr;
}<= br>
RfComm::~RfComm(void){
       =  Close();
}

void RfComm::Close(void){
   &= nbsp;    if (rfcommSocket !=3D -1)
   = ;            &n= bsp;close(rfcommSocket);

}

void RfComm::Open(void){
        bdaddr_t t_bdaddr;
&= nbsp;       str2ba(bt_addr.c_str(), &= ;t_bdaddr);

        struct s= ockaddr_rc sockaddr;
        soc= kaddr.rc_family =3D AF_BLUETOOTH;
      &n= bsp; sockaddr.rc_bdaddr =3D t_bdaddr;
     = ;    sockaddr.rc_channel =3D (uint8_t) 1;

     &= nbsp;  rfcommSocket =3D socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO= _RFCOMM);

        if (connec= t(rfcommSocket, (struct sockaddr *) &sockaddr, sizeof(sockaddr)) < 0= ) {
            &nb= sp;   std::cerr << "Error While Openning RFComm C= onnection" <<endl;
       =  rfcommSocket =3D -1;
       &nb= sp;}
}

void RfComm::setAddress(string new_addr){
  &= nbsp;     Close();
    &nbs= p;   bt_addr =3D new_addr;
}

int RfComm::Write(string message){
    =     int result =3D -1;
     = ;   if (rfcommSocket=3D=3D-1){
    &n= bsp;           std::= cerr << "Not a valid socket, aborting"<<endl;
&nbs= p;            &= nbsp;  return result;
        }

  &n= bsp;     result =3D send(rfcommSocket, (void *)mes= sage.c_str(), message.size(), 0);

     &nbs= p;  if (result < 0)
      &nb= sp;         std::cerr <<= "There was an error when trying to write"<<endl;

        return result;
}=

string RfComm::Read(void){
      &= nbsp; char response[64];
       =  string out =3D "";
      &= nbsp; if (recv(rfcommSocket, response, 64, 0) < 0) {
  = ;            &n= bsp; std::cerr << "There was an error while trying to read&= quot;<<endl;
            = ;    return NULL;
     &nbs= p;  }

        out+= =3Dresponse;
        return out;=
}

int RfComm::getLinkQuality(uint8_t * lq){
   = ;     struct hci_conn_info_req *cr;
  = ;      bdaddr_t bdaddr;

        int dd;
 &n= bsp;      int dev_id;

  &nbs= p;     str2ba(bt_addr.c_str(), &bdaddr);
        dev_id =3D hci_for_each_d= ev(HCI_UP, find_conn, (long) &bdaddr);
     = ;   if (dev_id < 0) {
     &n= bsp;          std::cerr &= lt;<"Not connected, can't read Link Quality" << endl= ;
            = ;    return -1;
      =   }

        dd =3D= hci_open_dev(dev_id);
        i= f (dd < 0) {
         &n= bsp;      std::cerr << "HCI device= open failed";
        &nbs= p;       return -1;
        }

   =      cr =3D (hci_conn_info_req*)malloc(sizeof(*cr)= + sizeof(struct hci_conn_info));
      &n= bsp; if (!cr) {
        &nb= sp;       std::cerr << "Can&#= 39;t allocate memory";
       &n= bsp;        return -1;
        }

  &n= bsp;     bacpy(&cr->bdaddr, &bdaddr);        cr->type =3D ACL_LINK;=
        if (ioctl(dd, HCIGETCON= NINFO, (unsigned long) cr) < 0) {
      = ;          std::cerr <= < "Get connection info failed";
            = ;    return -1;
      =   }

        if (hc= i_read_link_quality(dd, htobs(cr->conn_info->handle), lq, 1000) < = 0) {
           &= nbsp;    std::cerr << "HCI read_link_quality= request failed";
            = ;    return -1;
      =   }

        close(= dd);
        free(cr);
 =        return 0;
}

int RfComm:= :getRSSI(int8_t * rssi){
        = ;struct hci_conn_info_req *cr;
       = ; bdaddr_t bdaddr;
        int dd, dev_id;
&nbs= p;       int8_t temp;
  &nb= sp;     str2ba(bt_addr.c_str(), &bdaddr);
<= br>        if (dev_id < 0) {
=             &nb= sp;   dev_id =3D hci_for_each_dev(HCI_UP, find_conn, (long) = &bdaddr);
            = ;    if (dev_id < 0) {
    &n= bsp;            = ;       std::cerr << "Not con= nected, can't read RSSI." << endl;
   &nbs= p;            &= nbsp;       return -1;
  &n= bsp;            = ; }
        }

        dd =3D hci_open_dev= (dev_id);
        if (dd < 0)= {
           &nb= sp;    std::cerr << "HCI device open failed&= quot; << endl;
        &nb= sp;       return -1;
  &nbs= p;     }

     &nbs= p;  cr =3D (hci_conn_info_req*)malloc(sizeof(*cr) + sizeof(struct= hci_conn_info));
        if (!cr) {
 &nb= sp;            =   std::cerr << "Can't allocate memory" <&l= t; endl;
          &nb= sp;     return -1;
    &nbs= p;   }

       &nbs= p;bacpy(&cr->bdaddr, &bdaddr);
     =    cr->type =3D ACL_LINK;
        if (ioctl(dd, HCIGETCON= NINFO, (unsigned long) cr) < 0) {
      = ;          std::cerr <= < "Get connection info failed" << endl;
  &= nbsp;           &nbs= p; return -1;
        }
=
        if (hci_read_rssi(dd, h= tobs(cr->conn_info->handle), &temp, 1000) < 0) {
            = ;    std::cerr << "Read RSSI failed" &l= t;< endl;
          = ;      return -1;
    =     }

       =  *rssi =3D temp;

       &nbs= p;close(dd);
        free(cr);        return 0;
}

int RfComm::getTransmitPowerLevel(int8_t * level, uint8_t * ty= pe){
        struct hci_conn_inf= o_req *cr;
        bdaddr_t bdad= dr;
        uint8_t temp;
&nb= sp;       int dd, dev_id;

 &= nbsp;      str2ba(bt_addr.c_str(), &bdadd= r);

        if (dev_id < 0) = {
           &nbs= p;    dev_id =3D hci_for_each_dev(HCI_UP, find_conn, (l= ong) &bdaddr);
         = ;       if (dev_id < 0) {
 &n= bsp;            = ;          std::cerr <= < "Not connected. Can't read Transmit Power Level." <&l= t; endl;
            = ;            re= turn -1;
          &nb= sp;     }
      &= nbsp; }

        dd =3D = hci_open_dev(dev_id);
        if= (dd < 0) {
         &nb= sp;      std::cerr << "HCI device = open failed" << endl;
            = ;    return -1;
      =   }

        cr =3D= (hci_conn_info_req*)malloc(sizeof(*cr) + sizeof(struct hci_conn_info));        if (!cr) {
  =             &nb= sp; std::cerr << "Can't allocate memory" << = endl;
            = ;    return -1;
      =   }

        bacpy(= &cr->bdaddr, &bdaddr);
      &n= bsp; cr->type =3D ACL_LINK;
      =   if (ioctl(dd, HCIGETCONNINFO, (unsigned long) cr) < 0) {
=             &nb= sp;   std::cerr << "Get connection info failed&qu= ot; << endl;
            = ;    return -1;
      =   }

        if (hc= i_read_transmit_power_level(dd, htobs(cr->conn_info->handle), temp, l= evel, 1000) < 0) {
        &n= bsp;       std::cerr << "HCI = read transmit power level request failed" << endl;
            = ;    return -1;
      =   }

        *type = =3Dtemp;

        close(dd);<= br>        free(cr);

 &= nbsp;      return 0;
}

static int f= ind_conn(int s, int dev_id, long arg)
{
     = ;   struct hci_conn_list_req *cl;
        struct hci_conn_info *c= i;
        int i;

 &= nbsp;      if (!(cl =3D (hci_conn_list_req*)m= alloc(10 * sizeof(*ci) + sizeof(*cl)))) {
     =            std::cerr= << "Can't allocate memory";
            = ;    exit(1);
      &n= bsp; }
        cl->dev_i= d =3D dev_id;
        cl->con= n_num =3D 10;
        ci =3D cl-= >conn_info;

        if (i= octl(s, HCIGETCONNLIST, (void *) cl)) {
     &n= bsp;          std::cerr &= lt;<"Can't get connection list";
            = ;    exit(1);
      &n= bsp; }

        for (i = =3D 0; i < cl->conn_num; i++, ci++)
     =            if (!bacm= p((bdaddr_t *) arg, &ci->bdaddr))
     &= nbsp;           &nbs= p;      return 1;

   &n= bsp;    return 0;
}





/*********************************************= ******************************
*   Copyright (C) 2006 by Manu= el Naranjo   *
*   manuel@aircable.net    *
*         &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p;            &= nbsp;           &nbs= p; *
*   This program is free software; you can redistribute = it and/or modify  *
*   it under the terms of the G= NU Library General Public License as       *
*   published by the Free Software Foundation; either versio= n 2 of the    *
*   License, or (at your = option) any later version.        &= nbsp;           &nbs= p;  *
*          = ;            &n= bsp;            = ;            &n= bsp;            = ;             *
*   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.  =             &nb= sp;           *
= *            &n= bsp;            = ;            &n= bsp;            = ;            &n= bsp;          *
* &nb= sp; You should have received a copy of the GNU Library General Public =     *
*   License along with this program; if not, write to the&nb= sp;            =     *
*   Free Software Foundation, Inc., = ;            &n= bsp;            = ;             *=
*   59 Temple Place - Suite 330, Boston, MA  02111= -1307, USA.          &nbs= p;  *
**********************************************************************= *****/

#ifndef __AIRcableRFCOMM_h__
#define __AIRcableRFCOMM_h__<= br>#include <string>

#define ERROR 0xFFFF

using namespa= ce std;

extern "C++"{
      &nbs= p; class RfComm{

       &nbs= p;        private:
  &= nbsp;           &nbs= p;         int  &nbs= p;          rfcommSocket;
&= nbsp;           &nbs= p;           string&= nbsp; bt_addr;

        =         public:
            &nb= sp;           //cons= tructor
          &nbs= p;            &= nbsp;RfComm(void);

        &= nbsp;           &nbs= p;   RfComm(string bt_addr);

    =             &nb= sp;       ~RfComm(void);

 &n= bsp;            = ;          void Open(void= );

           &= nbsp;           &nbs= p;void Close(void);

        =             &nb= sp;   int Write(string in);

    &= nbsp;           &nbs= p;       string Read(void);

 = ;            &n= bsp;          void setAdd= ress(string new_addr);

            = ;            in= t getLinkQuality(uint8_t * lq);

      =             &nb= sp;     int getRSSI(int8_t * rssi);

 &= nbsp;           &nbs= p;          int getTransm= itPowerLevel(int8_t * level, uint8_t * type);
    &n= bsp;   };
}; //C++

static int find_conn(int s, int dev_id, long arg);
<= br>#endif //__AIRcableRFCOMM_h__


-------------------------------= ------------------------------------------
Take Surveys. Earn Cash. Infl= uence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance = to share your
opinions on IT & business topics through brief surveys= - and earn cash
http://www.techsay.com/default.php?page=3Djoin.php&p=3Dsourceforge&= CID=3DDEVDEV

_______________________________________________
= Bluez-users mailing list
Bluez-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/list= info/bluez-users



------=_Part_15119_19792895.1166559922640-- --===============1364455863== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV --===============1364455863== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Bluez-users mailing list Bluez-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bluez-users --===============1364455863==--