All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.