* [Bluez-users] minicom over /dev/rfcomm0
@ 2006-12-19 19:23 Mark S. Townsley
2006-12-19 19:33 ` Manuel Naranjo
2006-12-19 19:37 ` Bas Schulte
0 siblings, 2 replies; 8+ messages in thread
From: Mark S. Townsley @ 2006-12-19 19:23 UTC (permalink / raw)
To: BlueZ users
[-- Attachment #1.1: Type: text/plain, Size: 478 bytes --]
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
[-- Attachment #1.2: Type: text/html, Size: 517 bytes --]
[-- Attachment #2: Type: text/plain, Size: 347 bytes --]
-------------------------------------------------------------------------
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
[-- Attachment #3: Type: text/plain, Size: 164 bytes --]
_______________________________________________
Bluez-users mailing list
Bluez-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-users
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 19:23 [Bluez-users] minicom over /dev/rfcomm0 Mark S. Townsley
@ 2006-12-19 19:33 ` Manuel Naranjo
2006-12-19 20:25 ` Mark S. Townsley
2006-12-19 19:37 ` Bas Schulte
1 sibling, 1 reply; 8+ messages in thread
From: Manuel Naranjo @ 2006-12-19 19:33 UTC (permalink / raw)
To: BlueZ users
[-- Attachment #1: Type: text/plain, Size: 1436 bytes --]
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
>
[-- Attachment #2: rfcomm.cpp --]
[-- Type: text/plain, Size: 6608 bytes --]
/***************************************************************************
* 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 <string>
#include <iostream>
#include <sys/param.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
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" <<endl;
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"<<endl;
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"<<endl;
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"<<endl;
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;
}
[-- Attachment #3: rfcomm.h --]
[-- Type: text/plain, Size: 2043 bytes --]
/***************************************************************************
* 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 <string>
#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__
[-- Attachment #4: Type: text/plain, Size: 347 bytes --]
-------------------------------------------------------------------------
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
[-- Attachment #5: Type: text/plain, Size: 164 bytes --]
_______________________________________________
Bluez-users mailing list
Bluez-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-users
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 19:23 [Bluez-users] minicom over /dev/rfcomm0 Mark S. Townsley
2006-12-19 19:33 ` Manuel Naranjo
@ 2006-12-19 19:37 ` Bas Schulte
2006-12-19 19:46 ` Manuel Naranjo
2006-12-19 20:26 ` Mark S. Townsley
1 sibling, 2 replies; 8+ messages in thread
From: Bas Schulte @ 2006-12-19 19:37 UTC (permalink / raw)
To: BlueZ users
Hi,
On 19-dec-2006, at 20:23, Mark S. Townsley wrote:
> 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.
You sure can.
You can of course use the code provided by Manuel too but then your
code won't work without rfcomm/bluetooth. The nice thing is that if
you keep it generic you can test your application using any old
serial connection. Or use a pipe in the filesystem etc..
Caveat: I can't get mgetty to work by feeding it /dev/rfcommX though :
( It should work, must be one of those things ;)
-------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 19:37 ` Bas Schulte
@ 2006-12-19 19:46 ` Manuel Naranjo
2006-12-19 20:26 ` Mark S. Townsley
1 sibling, 0 replies; 8+ messages in thread
From: Manuel Naranjo @ 2006-12-19 19:46 UTC (permalink / raw)
To: BlueZ users
>
> You sure can.
>
> You can of course use the code provided by Manuel too but then your
> code won't work without rfcomm/bluetooth. The nice thing is that if
> you keep it generic you can test your application using any old
> serial connection. Or use a pipe in the filesystem etc..
>
The idea with mine is that I needed to measure RSSI and wanted some
control over the BlueZ Stack :D
> Caveat: I can't get mgetty to work by feeding it /dev/rfcommX though :
> ( It should work, must be one of those things ;)
>
>
> -------------------------------------------------------------------------
> 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
>
>
-------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 19:33 ` Manuel Naranjo
@ 2006-12-19 20:25 ` Mark S. Townsley
2006-12-19 20:33 ` Manuel Naranjo
0 siblings, 1 reply; 8+ messages in thread
From: Mark S. Townsley @ 2006-12-19 20:25 UTC (permalink / raw)
To: BlueZ users
[-- Attachment #1.1: Type: text/plain, Size: 13045 bytes --]
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 <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 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 <string>
> #include <iostream>
> #include <sys/param.h>
> #include <sys/socket.h>
> #include <sys/ioctl.h>
>
> #include <bluetooth/bluetooth.h>
> #include <bluetooth/rfcomm.h>
> #include <bluetooth/hci.h>
> #include <bluetooth/hci_lib.h>
>
> 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"
> <<endl;
> 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"<<endl;
> 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"<<endl;
>
> 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"<<endl;
> 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 <string>
>
> #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
>
>
>
[-- Attachment #1.2: Type: text/html, Size: 32386 bytes --]
[-- Attachment #2: Type: text/plain, Size: 347 bytes --]
-------------------------------------------------------------------------
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
[-- Attachment #3: Type: text/plain, Size: 164 bytes --]
_______________________________________________
Bluez-users mailing list
Bluez-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-users
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 19:37 ` Bas Schulte
2006-12-19 19:46 ` Manuel Naranjo
@ 2006-12-19 20:26 ` Mark S. Townsley
2006-12-19 20:39 ` Bas Schulte
1 sibling, 1 reply; 8+ messages in thread
From: Mark S. Townsley @ 2006-12-19 20:26 UTC (permalink / raw)
To: BlueZ users
[-- Attachment #1.1: Type: text/plain, Size: 1798 bytes --]
Hi Bas: thanks for your reply.
So are you implying that if I do not go through RFCOMM and all the sockets
stuff, I can
actually open /dev/rfcomm0 and get back a file descriptor just like any
other serial port?
Thanks
Mark
On 12/19/06, Bas Schulte <basschulte@gmail.com> wrote:
>
> Hi,
>
> On 19-dec-2006, at 20:23, Mark S. Townsley wrote:
>
> > 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.
>
> You sure can.
>
> You can of course use the code provided by Manuel too but then your
> code won't work without rfcomm/bluetooth. The nice thing is that if
> you keep it generic you can test your application using any old
> serial connection. Or use a pipe in the filesystem etc..
>
> Caveat: I can't get mgetty to work by feeding it /dev/rfcommX though :
> ( It should work, must be one of those things ;)
>
>
> -------------------------------------------------------------------------
> 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
>
[-- Attachment #1.2: Type: text/html, Size: 2434 bytes --]
[-- Attachment #2: Type: text/plain, Size: 347 bytes --]
-------------------------------------------------------------------------
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
[-- Attachment #3: Type: text/plain, Size: 164 bytes --]
_______________________________________________
Bluez-users mailing list
Bluez-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-users
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 20:25 ` Mark S. Townsley
@ 2006-12-19 20:33 ` Manuel Naranjo
0 siblings, 0 replies; 8+ messages in thread
From: Manuel Naranjo @ 2006-12-19 20:33 UTC (permalink / raw)
To: BlueZ users
You are right, I was going to add a SerialStream for this, but then I
decided it is useless, it is a socket indeed. If you want to open as a
serial port open the file /dev/rfcomm0 as if it is a normal serial port.
> 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* <naranjo.manuel@gmail.com
> <mailto: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 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
> <http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV>
> >
> ------------------------------------------------------------------------
>
> >
> > _______________________________________________
> > Bluez-users mailing list
> > Bluez-users@lists.sourceforge.net
> <mailto:Bluez-users@lists.sourceforge.net>
> > https://lists.sourceforge.net/lists/listinfo/bluez-users
> >
>
>
>
> /***************************************************************************
> * Copyright (C) 2006 by Manuel Naranjo *
> * manuel@aircable.net <mailto: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 <string>
> #include <iostream>
> #include <sys/param.h>
> #include <sys/socket.h>
> #include <sys/ioctl.h>
>
> #include <bluetooth/bluetooth.h>
> #include <bluetooth/rfcomm.h>
> #include <bluetooth/hci.h>
> #include <bluetooth/hci_lib.h>
>
> 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" <<endl;
> 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"<<endl;
> 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"<<endl;
>
> 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"<<endl;
> 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 <mailto: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 <string>
>
> #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
> <http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV>
>
> _______________________________________________
> Bluez-users mailing list
> Bluez-users@lists.sourceforge.net
> <mailto:Bluez-users@lists.sourceforge.net>
> https://lists.sourceforge.net/lists/listinfo/bluez-users
>
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> 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
>
-------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Bluez-users] minicom over /dev/rfcomm0
2006-12-19 20:26 ` Mark S. Townsley
@ 2006-12-19 20:39 ` Bas Schulte
0 siblings, 0 replies; 8+ messages in thread
From: Bas Schulte @ 2006-12-19 20:39 UTC (permalink / raw)
To: BlueZ users
Hi,
On 19-dec-2006, at 21:26, Mark S. Townsley wrote:
> Hi Bas: thanks for your reply.
>
> So are you implying that if I do not go through RFCOMM and all the
> sockets stuff, I can
> actually open /dev/rfcomm0 and get back a file descriptor just like
> any other serial port?
Yep. I actually just managed to get mgetty working ;)
Here's how:
# rfcomm listen 3 4
This creates /dev/rfcomm3, available on channel 4. It spits out
something like:
Waiting for connection on channel 4
Press CTRL-C for hangup
Just let this guy run.
Then start mgetty, in another terminal:
# mgetty -r -b /dev/rfcomm3
Before all of this, I did a "sdptool add --channel=4 SP" to let the
client know there's a Serial Port service on channel 4.
From another box, I connected to this channel and got a nice "login:
" prompt.
Minor thing is that mgetty complains a bit about some ioctl's didn't
go right, I don't think it likes being started from the command line,
but it does work.
I'd say this pretty much shows you can just use plain serial io
against these devices ;)
I don't (yet) understand exactly how rfcomm works and in what state
it creates the device, for instance, "rfcomm bind ..." doesn't work.
Cheers,
Bas.
-------------------------------------------------------------------------
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
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-12-19 20:39 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-19 19:23 [Bluez-users] minicom over /dev/rfcomm0 Mark S. Townsley
2006-12-19 19:33 ` Manuel Naranjo
2006-12-19 20:25 ` Mark S. Townsley
2006-12-19 20:33 ` Manuel Naranjo
2006-12-19 19:37 ` Bas Schulte
2006-12-19 19:46 ` Manuel Naranjo
2006-12-19 20:26 ` Mark S. Townsley
2006-12-19 20:39 ` Bas Schulte
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.