Skip to contentSkip to conversation

Can't able to send data in both direction

Bluez-users Mohan K 3 participants 11 messages Feb 23, 2005 – Feb 24, 2005 Bluetooth drivers

lore
Share & tools
lore

Mohan K

author
#0 lore raw

Hi all,

I am trying to send data at L2CAP level. I am using
"Silicon Wave (11)" USB dongle in one PC and "Cambridge Silicon Radio (10)" USB dongle in another PC. Using my program I can able to send data from "Cambridge Silicon Radio" dongle side PC to "Silicon Wave" dongle side PC. But, vice-versa is not working. I am getting the following error when I try to send data from "Silicon Wave dongle".
Can any one tell me why this is happenning.

Regards
Mohan

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

#1 lore raw

Hi,

Quoted 7 lines

I am trying to send data at L2CAP level. I am using
"Silicon Wave (11)" USB dongle in one PC and "Cambridge Silicon Radio (10)" USB dongle in another PC. Using my program I can able to send data from "Cambridge Silicon Radio" dongle side PC to "Silicon Wave" dongle side PC. But, vice-versa is not working. I am getting the following error when I try to send data from "Silicon Wave dongle".
Can any one tell me why this is happenning.

You've forgotten to paste the error message. I think no one will be able to help you without it. Please capture the packets using `hcidump -X' when trying to connect from SiW to CSR dongle and post it including the error message(s) you see.

Best regards,
Sebastian

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

author
#2 lore raw

Hi,

When the sending program runs on the SiW dongle PC , HCI dump is
not displaying any thing and it is giving the following error.

Error message on the sending side:

[root@localhost ]# ./senddata

L2CAP socket opened successfully.

Can't connect: No route to host (113)

Can't send data.
: Bad file descriptor

When the same program is running on the CSR doungle side PC, I am
getting the following HCI dump and on the other side I can able to receive data.

HCI dump of send prog on the CSR dongle side:

HCIDump - HCI packet analyzer ver 1.16
device: hci0 snap_len: 1028 filter: 0xffffffff < HCI Command: Create Connection (0x01|0x0005) plen 13
F9 DA 33 0D 0B 00 18 CC 00 00 00 00 01

Quoted 1 line

HCI Event: Command Status (0x0f) plen 4

00 01 05 04

Quoted 1 line

HCI Event: Connect Complete (0x03) plen 11

00 28 00 F9 DA 33 0D 0B 00 01 00
< ACL data: handle 0x0028 flags 0x02 dlen 12

    L2CAP(s): Connect req: psm 10 scid 0x0040
Quoted 1 line

HCI Event: Number of Completed Packets (0x13) plen 5

01 28 00 01 00

Quoted 1 line

HCI Event: Max Slots Change (0x1b) plen 3

28 00 05

Quoted 1 line

ACL data: handle 0x0028 flags 0x02 dlen 16

    L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0040 result 0 status 0
< ACL data: handle 0x0028 flags 0x02 dlen 12
    L2CAP(s): Config req: dcid 0x0040 flags 0x0000 clen 0
Quoted 1 line

HCI Event: Number of Completed Packets (0x13) plen 5

01 28 00 01 00

Quoted 1 line

ACL data: handle 0x0028 flags 0x02 dlen 14

    L2CAP(s): Config rsp: scid 0x0040 flags 0x0000 result 0 clen 0
Quoted 1 line

ACL data: handle 0x0028 flags 0x02 dlen 12

    L2CAP(s): Config req: dcid 0x0040 flags 0x0000 clen 0
< ACL data: handle 0x0028 flags 0x02 dlen 14
    L2CAP(s): Config rsp: scid 0x0040 flags 0x0000 result 0 clen 0
< ACL data: handle 0x0028 flags 0x02 dlen 18
    L2CAP(d): cid 0x0040 len 14 [psm 10]
      7C 01 0A 61 62 63 64 65 66 7C 67 7C 69 7E
< ACL data: handle 0x0028 flags 0x02 dlen 12
    L2CAP(s): Disconn req: dcid 0x0040 scid 0x0040
Quoted 1 line

HCI Event: Number of Completed Packets (0x13) plen 5

01 28 00 01 00

Quoted 1 line

HCI Event: Number of Completed Packets (0x13) plen 5

01 28 00 01 00

Quoted 1 line

HCI Event: Number of Completed Packets (0x13) plen 5

01 28 00 01 00

Quoted 1 line

ACL data: handle 0x0028 flags 0x02 dlen 12

    L2CAP(s): Disconn rsp: dcid 0x0040 scid 0x0040

< HCI Command: Disconnect (0x01|0x0006) plen 3
28 00 13

Quoted 1 line

HCI Event: Command Status (0x0f) plen 4

00 01 06 04

Quoted 1 line

HCI Event: Disconn Complete (0x05) plen 4

00 28 00 16

Regards
Mohan

Quoted 17 lines · Sebastian Roth

Hi,

Quoted 7 lines

I am trying to send data at L2CAP level. I am using
"Silicon Wave (11)" USB dongle in one PC and "Cambridge Silicon Radio (10)" USB dongle in another PC. Using my program I can able to send data from "Cambridge Silicon Radio" dongle side PC to "Silicon Wave" dongle side PC. But, vice-versa is not working. I am getting the following error when I try to send data from "Silicon Wave dongle".
Can any one tell me why this is happenning.

You've forgotten to paste the error message. I think no one will be able to help you without it. Please capture the packets using `hcidump -X' when trying to connect from SiW to CSR dongle and post it including the error message(s) you see.

Best regards,
Sebastian

Quoted 10 lines

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

#3 lore raw

[Bluez-users] pan and brctl addif question

Sorry to keep asking hciemu related question. The reason I like hciemu so much is not only I am poor :-), but also I was supposed to set up a virtual environment of multiple piconets, so my team members can play around with some scatternet routing stuff. I've seen someone from this list achieved that. Now, I am following the Pan Howto, but I have some problems:

1. After running

#pand -s -r GN -i 7F:00:00:01:00:0A
#pand -i 7F:00:00:01:00:0B -c 7F:00:00:01:00:0A

I am hoping 7F:00:00:01:00:0A to be GN, and 7F:00:00:01:00:0B to be PANU, but when I run pand -l, I got the following:

bnep1 7F:00:00:01:00:0B GN
bnep0 7F:00:00:01:00:0A PANU

So, it seems 7F:00:00:01:00:0B being GN

2. I cannot add bnepX to pan0 using brctl, although I can add my eth0 to it. After running:

#brctl addif pan0 bnep0

I got:

can't add bnep0 to bridge pan0: Cannot assign requested address

Could you give me some hints about possible reasons for this? Is this because that all the bnepX's are generated by hciemu, or of some firewall setting issues?

Is this the right way to set up a piconet? I feel brctl shouldn't be required for setting a piconet, and bnep0 should be reused for new connections if it already exists as GN. Seems brctl is something for scatternet.

Regards,
Jack

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

#4 lore raw
In reply to Mohan K

Hi,

Quoted 10 lines

When the sending program runs on the SiW dongle PC , HCI dump is
not displaying any thing and it is giving the following error.

Error message on the sending side:

[root@localhost ]# ./senddata

L2CAP socket opened successfully.

Can't connect: No route to host (113)

I have no clue why this happens. Please post the sourcecode of your application.

Quoted 2 lines

Can't send data.
: Bad file descriptor

This happens because it can't connect.
No connection, not able to send data!

Maybe there is a problem in the program. Or the needed kernel modules are not loaded (just a guess).

# lsmod | grep -e l2cap -e rfcomm

Best regards,
Sebastian

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

author
#5 lore raw

Hi Sebastian,
The same program works for CSR dongle. I derived the
function from l2test.c
Regards
Mohan

Quoted 27 lines · Sebastian Roth

Hi,

Quoted 10 lines

When the sending program runs on the SiW dongle PC , HCI dump is
not displaying any thing and it is giving the following error.

Error message on the sending side:

[root@localhost ]# ./senddata

L2CAP socket opened successfully.

Can't connect: No route to host (113)

I have no clue why this happens. Please post the sourcecode of your application.

Quoted 2 lines

Can't send data.
: Bad file descriptor

This happens because it can't connect.
No connection, not able to send data!

Maybe there is a problem in the program. Or the needed kernel modules are not loaded (just a guess).

# lsmod | grep -e l2cap -e rfcomm

Best regards,
Sebastian

Quoted 10 lines

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

/*
*
* BlueZ - Bluetooth protocol stack for Linux
*

 *  Copyright (C) 2000-2001  Qualcomm Incorporated
 *  Copyright (C) 2002-2003  Maxim Krasnyansky <[email protected]>
 *  Copyright (C) 2002-2005  Marcel Holtmann <[email protected]>
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation;
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
 *  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
 *  CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
 *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
 *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
 *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 *  ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
 *  COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
 *  SOFTWARE IS DISCLAIMED.

*
*
* $Id: l2test.c,v 1.16 2005/01/11 21:42:38 holtmann Exp $ */

			/*Bluetooth Receive program*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
#include <syslog.h>
#include <signal.h>
#include <sys/time.h>
#include <sys/socket.h>

#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
#include <bluetooth/l2cap.h>

static unsigned char *buf;

/* Default mtu */
static int imtu = 672;
static int omtu = 0;

/* Default data size */
static long data_size = 672;

/* Default addr and psm */
static bdaddr_t bdaddr;
static unsigned short psm = 10;

static int master = 0;
static int auth = 0;
static int encrypt = 0;
static int secure = 0;
static int socktype = SOCK_SEQPACKET;

static int linger = 0;
static int reliable = 0;

unsigned char packet[256];
unsigned char sbuf[256]={'a','b','c','d','e','f',0x7c,'g',0x7c,'i'};

unsigned char formpacket(unsigned char device, unsigned char len ); void send_data(int);

static void hexdump(unsigned char *s, unsigned long l)

{
	unsigned long i;
	unsigned char j,k;
	unsigned char temp=0x00;

	/*for(i=0;i<l;i++)
	{
		printf("\r\n0x");
		printf("%x",s[i]);
	}
	printf("\r\n");*/
	
	for(i=0;i<l;i++)
	{
		if((s[i]== 0x7C)) 	//&& (s[i+1] != 0x7C))
		{
			temp=temp ^ s[i];
			temp=temp ^ s[i+1];
			temp=temp ^ s[i+2];
			
			for(k=i;k<(i+s[i+2]);k++)
				temp=temp ^ s[k+3];

					
				if(s[s[i+2]+3]==temp)
					printf("\nPacket recevied correctly\n");
				else
				{
					printf("\nPacket corrupted\n");
					return;
				}

				
			if(s[i+1]==0x01)
			{
				printf("\nKeyboard data packet\n");
				printf("\nNo. of bytes in Keyboard packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
				
			if(s[i+1]==0x02)
			{
				printf("\nMouse data packet\n");
				printf("\nNo. of bytes in Mouse packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
			
			if(s[i+1]==0x03)
			{
				printf("\nFinger print data packet\n");
				printf("\nNo. of bytes in Finger print packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
			
			if(s[i+1]==0x04)
			{
				printf("\nControl packet\n");
				printf("\nNo. of bytes in Control packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
		break;
		}
	}

}

static void dump_mode(int s)

{
	int len;
	int opt, optl;
	
	

	printf("\r\nReceiving ...\r\n");

	while (1) {
		fd_set rset;

		FD_ZERO(&rset);
		FD_SET(s, &rset);

		if (select(s + 1, &rset, NULL, NULL, NULL) < 0)
			return;

		if (!FD_ISSET(s, &rset))
			continue;

		len = read(s, buf, data_size);
		if (len <= 0) {
			if (len < 0) {	bacpy(&bdaddr, BDADDR_ANY);

				if (reliable && (errno == ECOMM)) {
					printf("\r\nL2CAP Error ECOMM - clearing error and continuing.\r\n");
					optl = sizeof(opt);
					if (getsockopt(s, SOL_SOCKET, SO_ERROR, &opt, &optl ) < 0) { // Clear error
						printf("\r\nCouldn't getsockopt(SO_ERROR): %s (%d)\r\n",
							strerror(errno), errno);
						return;
					}
					continue;
				} else {
					printf("\r\nRead error: %s(%d)\n", strerror(errno), errno);
				}
			}
		//	return;
			break;
		//	continue;
		}
		else if(len > 0)
		{			
			printf("\nRecevied %d bytes\n", len);
		static int omtu = 0;
	hexdump(buf,len);
		}
	
	
	}
}

static void do_listen(void)

{
	struct sockaddr_l2 loc_addr, rem_addr;
	struct l2cap_options opts;
	int s, s1, opt;
	char ba[18];

	if ((s = socket(PF_BLUETOOTH, socktype, BTPROTO_L2CAP)) < 0) {
		printf("\nCan't create socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	loc_addr.l2_family = AF_BLUETOOTH;
	bacpy(&loc_addr.l2_bdaddr, &bdaddr);
	loc_addr.l2_psm = htobs(psm);
	
	if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) {
		printf("\nCan't bind socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Set link mode */
	opt = 0;
	if (reliable)
		opt |= L2CAP_LM_RELIABLE;
	if (master)
		opt |= L2CAP_LM_MASTER;
	if (auth)
		opt |= L2CAP_LM_AUTH;
	if (encrypt)
		opt |= L2CAP_LM_ENCRYPT;
	if (secure)
		opt |= L2CAP_LM_SECURE;

	if (setsockopt(s, SOL_L2CAP, L2CAP_LM, &opt, sizeof(opt)) < 0) {
		printf("\nCan't set L2CAP link mode: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Get default options */
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get default L2CAP options: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Set new options */
	opts.imtu = imtu;
	if (setsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, opt) < 0) {
		printf("\nCan't set L2CAP options: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}
/*	if (socktype == SOCK_DGRAM) {
		handler(s);
		return;
	}*/

	if (listen(s, 10)) {
		printf("\nCan not listen on the socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	printf("\nWaiting for connection on psm %d ...\n", psm);

	while(1) {
		opt = sizeof(rem_addr);
		if ((s1 = accept(s, (struct sockaddr *) &rem_addr, &opt)) < 0) {
			printf("\nAccept failed: %s (%d)\n", strerror(errno), errno);
			exit(1);
		}

		opt = sizeof(opts);
		if (getsockopt(s1, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
			printf("\nCan't get L2CAP options: %s (%d)\n", strerror(errno), errno);
			exit(1);
		}

		ba2str(&rem_addr.l2_bdaddr, ba);
		printf("\nConnect from %s [imtu %d, omtu %d, flush_to %d]\n",ba, opts.imtu, opts.omtu, opts.flush_to);

		/* Enable SO_LINGER */
		if (linger) {
			struct linger l = { .l_onoff = 1, .l_linger = linger };
			if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) {
				printf("\nCan't enable SO_LINGER: %s (%d)\n",
					strerror(errno), errno);
				exit(1);
			}
		}

	
		
		dump_mode(s1);
		close(s1);

		printf("\nDisconnect: %m\n");
	}
}

// Sending part at the receving end

unsigned char formpacket(unsigned char device, unsigned char len )

{
	unsigned char temp=0x00;
	unsigned char i,j,pdlen;
	
	packet[0]=0x7c;
	switch(device)
	{
		case 1:
			packet[1]=0x01;
			break;
		case 2:
			packet[1]=0x02;
			break;
		case 3:
			packet[1]=0x03;
			break;
		case 4:
			packet[1]=0x04;
			break;
	}
		
	pdlen=len;
	for(i=3,j=0;j<len;i++,j++)
	{
		/*if(buf[j]==0x7c)
		{
			packet[i]=0x7c;
			packet[++i]=buf[j];
			pdlen++;			
		}
		else*/
			packet[i]=sbuf[j];
		
	}
	
	packet[2]=pdlen;

	temp=temp ^ packet[0];
	temp=temp ^ packet[1];
	temp=temp ^ packet[2];
	for(i=0;i<pdlen;i++)
		temp=temp ^ packet[i+3];

	packet[pdlen+3]=temp;
	
	return pdlen;	

}

void send_data(int s)

{
	size_t datlen;
	int i,nb;
	datlen=formpacket(0x04,0x0a);

	if ((nb=send(s,&packet[0],(datlen+4),MSG_DONTWAIT))< 0)
			perror("\nCan't send data.\n");
	else
	{
			printf("\nNo. of bytes sent=%d\n",nb);
			printf("\nPacket:\n");
			for(i=0;i<datlen+4;i++)
				printf(" %x ",packet[i]);	
				printf("\n\n");

			//return 0;
	}
}	

static int remote_connect(char *svr)

{
	struct sockaddr_l2 rem_addr, loc_addr;
	struct l2cap_options opts;
	struct l2cap_conninfo conn;
	int s, opt;

	if ((s = socket(PF_BLUETOOTH, socktype, BTPROTO_L2CAP)) < 0) {
		printf("\nCan't create socket: %s (%d)\n", strerror(errno), errno);
		return -1;
	}
	else 
		printf("\nL2CAP socket opened successfully.\n");


	memset(&loc_addr, 0, sizeof(loc_addr));
	loc_addr.l2_family = AF_BLUETOOTH;
	bacpy(&loc_addr.l2_bdaddr, &bdaddr);
	if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) {
		printf("\nCan't bind socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Get default options */
	memset(&opts, 0, sizeof(opts));
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get default L2CAP options: %s (%d)\n", strerror(errno), errno);
		return -1;	
	}

	/* Set new options */
	opts.omtu = omtu;
	opts.imtu = imtu;
	if (setsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, opt) < 0) {
		printf("\nCan't set L2CAP options: %s (%d)\n", strerror(errno), errno);
		return -1;
	}

	/* Enable SO_LINGER */
	if (linger) {
		struct linger l = { .l_onoff = 1, .l_linger = linger };
		if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) {
			printf("\nCan't enable SO_LINGER: %s (%d)\n",
				strerror(errno), errno);
			return -1;
		}
	}

	/* Set link mode */
	opt = 0;
	if (reliable)
		opt |= L2CAP_LM_RELIABLE;

	if (setsockopt(s, SOL_L2CAP, L2CAP_LM, &opt, sizeof(opt)) < 0) {
		printf("\nCan't set L2CAP link mode: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	memset(&rem_addr, 0, sizeof(rem_addr));
	rem_addr.l2_family = AF_BLUETOOTH;
	str2ba(svr, &rem_addr.l2_bdaddr);
	rem_addr.l2_psm = htobs(psm);
	if (connect(s, (struct sockaddr *) &rem_addr, sizeof(rem_addr)) < 0 ) {
		printf("\nCan't connect: %s (%d)\n", strerror(errno), errno);
		close(s);
		return -1;
	}

	memset(&opts, 0, sizeof(opts));
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get L2CAP options: %s (%d)\n", strerror(errno), errno);
		close(s);
		return -1;
	}

	memset(&conn, 0, sizeof(conn));
	opt = sizeof(conn);
	if (getsockopt(s, SOL_L2CAP, L2CAP_CONNINFO, &conn, &opt) < 0) {
		printf("\nCan't get L2CAP connection information: %s (%d)\n", strerror(errno), errno);
		close(s);
		return -1;
	}

	printf("\nConnected [imtu %d, omtu %d, flush_to %d, mode %d, handle %d, class 0x%02x%02x%02x]\n",
		opts.imtu, opts.omtu, opts.flush_to, opts.mode, conn.hci_handle,
		conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]);

	return s;
}

int main(void)
{

	int fd;
	bacpy(&bdaddr, BDADDR_ANY);

	if (!(buf = malloc(data_size))) {
		perror("Can't allocate data buffer");
		exit(1);
	}

	do_listen();

// fd=remote_connect("01:5A:4B:20:07:DB");
// send_data(fd);

	return 0;
}

/*
*
* BlueZ - Bluetooth protocol stack for Linux
*

 *  Copyright (C) 2000-2001  Qualcomm Incorporated
 *  Copyright (C) 2002-2003  Maxim Krasnyansky <[email protected]>
 *  Copyright (C) 2002-2005  Marcel Holtmann <[email protected]>
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation;
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
 *  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
 *  CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
 *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
 *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
 *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 *  ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
 *  COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
 *  SOFTWARE IS DISCLAIMED.

*
*
* $Id: l2test.c,v 1.16 2005/01/11 21:42:38 holtmann Exp $ */

			/*Send program*/

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>

#include <sys/ioctl.h>
#include <fcntl.h>

#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
#include <bluetooth/l2cap.h>
#include <errno.h>
#include "csr.h"

unsigned char packet[256];
unsigned char buf[256]={'a','b','c','d','e','f',0x7c,'g',0x7c,'i'};

static unsigned char *rbuf;

static int master = 0;
static int auth = 0;
static int encrypt = 0;
static int secure = 0;

static int reliable = 0;
static int socktype = SOCK_SEQPACKET;

/* Default mtu */
static int imtu = 672;
static int omtu = 0;
static int linger = 0;

/* Default data size */
static long data_size = 672;

/* Default addr and psm */
static bdaddr_t bdaddr;
static unsigned short psm = 10;

//const char str[18]="00:0B:0D:33:DA:F9";

void dump_mode(int);
static int listen_connection(void);
void accept_connection(int);
static void do_listen(void);

unsigned char formpacket(unsigned char device, unsigned char len )

{
	unsigned char temp=0x00;
	unsigned char i,j,pdlen;
	
	packet[0]=0x7c;
	switch(device)
	{
		case 1:
			packet[1]=0x01;
			break;
		case 2:
			packet[1]=0x02;
			break;
		case 3:
			packet[1]=0x03;
			break;
		case 4:
			packet[1]=0x04;
			break;
	}
		
	pdlen=len;
	for(i=3,j=0;j<len;i++,j++)
	{
		/*if(buf[j]==0x7c)
		{
			packet[i]=0x7c;
			packet[++i]=buf[j];
			pdlen++;			
		}
		else*/
			packet[i]=buf[j];
		
	}
	
	packet[2]=pdlen;

	temp=temp ^ packet[0];
	temp=temp ^ packet[1];
	temp=temp ^ packet[2];
	for(i=0;i<pdlen;i++)
		temp=temp ^ packet[i+3];

	packet[pdlen+3]=temp;
	
	return pdlen;	

}

void send_data(int s)

{
	size_t datlen;
	int i,nb;
	datlen=formpacket(0x01,0x0a);

	if ((nb=send(s,&packet[0],(datlen+4),MSG_DONTWAIT))< 0)
			perror("\nCan't send data.\n");
	else
	{
			printf("\nNo. of bytes sent=%d\n",nb);
			printf("\nPacket:\n");
			for(i=0;i<datlen+4;i++)
				printf(" %x ",packet[i]);	
				printf("\n\n");

			//return 0;
	}
}	

static int remote_connect(char *svr)

{
	struct sockaddr_l2 rem_addr, loc_addr;
	struct l2cap_options opts;
	struct l2cap_conninfo conn;
	int s, opt;

	if ((s = socket(PF_BLUETOOTH, socktype, BTPROTO_L2CAP)) < 0) {
		printf("\nCan't create socket: %s (%d)\n", strerror(errno), errno);
		return -1;
	}
	else 
		printf("\nL2CAP socket opened successfully.\n");


	memset(&loc_addr, 0, sizeof(loc_addr));
	loc_addr.l2_family = AF_BLUETOOTH;
	bacpy(&loc_addr.l2_bdaddr, &bdaddr);
	if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) {
		printf("\nCan't bind socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Get default options */
	memset(&opts, 0, sizeof(opts));
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get default L2CAP options: %s (%d)\n", strerror(errno), errno);
		return -1;	
	}

	/* Set new options */
	opts.omtu = omtu;
	opts.imtu = imtu;
	if (setsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, opt) < 0) {
		printf("\nCan't set L2CAP options: %s (%d)\n", strerror(errno), errno);
		return -1;
	}

	/* Enable SO_LINGER */
	if (linger) {
		struct linger l = { .l_onoff = 1, .l_linger = linger };
		if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) {
			printf("\nCan't enable SO_LINGER: %s (%d)\n",
				strerror(errno), errno);
			return -1;
		}
	}

	/* Set link mode */
	opt = 0;
	if (reliable)
		opt |= L2CAP_LM_RELIABLE;

	if (setsockopt(s, SOL_L2CAP, L2CAP_LM, &opt, sizeof(opt)) < 0) {
		printf("\nCan't set L2CAP link mode: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	memset(&rem_addr, 0, sizeof(rem_addr));
	rem_addr.l2_family = AF_BLUETOOTH;
	str2ba(svr, &rem_addr.l2_bdaddr);
	rem_addr.l2_psm = htobs(psm);
	if (connect(s, (struct sockaddr *) &rem_addr, sizeof(rem_addr)) < 0 ) {
		printf("\nCan't connect: %s (%d)\n", strerror(errno), errno);
		close(s);
		return -1;
	}

	memset(&opts, 0, sizeof(opts));
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get L2CAP options: %s (%d)\n", strerror(errno), errno);
		close(s);
		return -1;
	}

	memset(&conn, 0, sizeof(conn));
	opt = sizeof(conn);
	if (getsockopt(s, SOL_L2CAP, L2CAP_CONNINFO, &conn, &opt) < 0) {
		printf("\nCan't get L2CAP connection information: %s (%d)\n", strerror(errno), errno);
		close(s);
		return -1;
	}

	printf("\nConnected [imtu %d, omtu %d, flush_to %d, mode %d, handle %d, class 0x%02x%02x%02x]\n",
		opts.imtu, opts.omtu, opts.flush_to, opts.mode, conn.hci_handle,
		conn.dev_class[2], conn.dev_class[1], conn.dev_class[0]);

	return s;
}

// Recevie part at the sending end

#if 0
static int listen_connection(void)

{
	struct sockaddr_l2 loc_addr, rem_addr;
	struct l2cap_options opts;
	int s, s1, opt;
	char ba[18];

	
	bacpy(&bdaddr, BDADDR_ANY);


	if ((s = socket(PF_BLUETOOTH, socktype, BTPROTO_L2CAP)) < 0) {
		printf("\nCan't create socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	loc_addr.l2_family = AF_BLUETOOTH;
	bacpy(&loc_addr.l2_bdaddr, &bdaddr);
	loc_addr.l2_psm = htobs(psm);
	
	if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) {
		printf("\nCan't bind socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Set link mode */
	opt = 0;
	if (reliable)
		opt |= L2CAP_LM_RELIABLE;
	if (master)
		opt |= L2CAP_LM_MASTER;
	if (auth)
		opt |= L2CAP_LM_AUTH;
	if (encrypt)
		opt |= L2CAP_LM_ENCRYPT;
	if (secure)
		opt |= L2CAP_LM_SECURE;

	if (setsockopt(s, SOL_L2CAP, L2CAP_LM, &opt, sizeof(opt)) < 0) {
		printf("\nCan't set L2CAP link mode: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Get default options */
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get default L2CAP options: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Set new options */
	opts.imtu = imtu;
	if (setsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, opt) < 0) {
		printf("\nCan't set L2CAP options: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

		
	return s;

}

void accept_connection(int s)

{
	struct sockaddr_l2 loc_addr, rem_addr;
	struct l2cap_options opts;
	int s1, opt;
	char ba[18];

		if (listen(s, 10)) {
		printf("\nCan not listen on the socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
		}

		printf("\nWaiting for connection on psm %d ...\n", psm);
	

		while(1) {
		opt = sizeof(rem_addr);
		if ((s1 = accept(s, (struct sockaddr *) &rem_addr, &opt)) < 0) {
			printf("\nAccept failed: %s (%d)\n", strerror(errno), errno);
			exit(1);
		}

		opt = sizeof(opts);
		if (getsockopt(s1, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
			printf("\nCan't get L2CAP options: %s (%d)\n", strerror(errno), errno);
			exit(1);
		}

		ba2str(&rem_addr.l2_bdaddr, ba);
		printf("\nConnect from %s [imtu %d, omtu %d, flush_to %d]\n",ba, opts.imtu, opts.omtu, opts.flush_to);

		/* Enable SO_LINGER */
		if (linger) {
			struct linger l = { .l_onoff = 1, .l_linger = linger };
			if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) {
				printf("\nCan't enable SO_LINGER: %s (%d)\n",
					strerror(errno), errno);
				exit(1);
			}
		}

	
		
		dump_mode(s1);
		close(s1);

		printf("\nDisconnect: %m\n");
	}
}

#endif

static void do_listen(void)

{
	struct sockaddr_l2 loc_addr, rem_addr;
	struct l2cap_options opts;
	int s, s1, opt;
	char ba[18];

	if ((s = socket(PF_BLUETOOTH, socktype, BTPROTO_L2CAP)) < 0) {
		printf("\nCan't create socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	loc_addr.l2_family = AF_BLUETOOTH;
	bacpy(&loc_addr.l2_bdaddr, &bdaddr);
	loc_addr.l2_psm = htobs(psm);
	
	if (bind(s, (struct sockaddr *) &loc_addr, sizeof(loc_addr)) < 0) {
		printf("\nCan't bind socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Set link mode */
	opt = 0;
	if (reliable)
		opt |= L2CAP_LM_RELIABLE;
	if (master)
		opt |= L2CAP_LM_MASTER;
	if (auth)
		opt |= L2CAP_LM_AUTH;
	if (encrypt)
		opt |= L2CAP_LM_ENCRYPT;
	if (secure)
		opt |= L2CAP_LM_SECURE;

	if (setsockopt(s, SOL_L2CAP, L2CAP_LM, &opt, sizeof(opt)) < 0) {
		printf("\nCan't set L2CAP link mode: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Get default options */
	opt = sizeof(opts);
	if (getsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
		printf("\nCan't get default L2CAP options: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	/* Set new options */
	opts.imtu = imtu;
	if (setsockopt(s, SOL_L2CAP, L2CAP_OPTIONS, &opts, opt) < 0) {
		printf("\nCan't set L2CAP options: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}
/*	if (socktype == SOCK_DGRAM) {
		handler(s);
		return;
	}*/

	if (listen(s, 10)) {
		printf("\nCan not listen on the socket: %s (%d)\n", strerror(errno), errno);
		exit(1);
	}

	printf("\nWaiting for connection on psm %d ...\n", psm);

	while(1) {
		opt = sizeof(rem_addr);
		if ((s1 = accept(s, (struct sockaddr *) &rem_addr, &opt)) < 0) {
			printf("\nAccept failed: %s (%d)\n", strerror(errno), errno);
			exit(1);
		}

		opt = sizeof(opts);
		if (getsockopt(s1, SOL_L2CAP, L2CAP_OPTIONS, &opts, &opt) < 0) {
			printf("\nCan't get L2CAP options: %s (%d)\n", strerror(errno), errno);
			exit(1);
		}

		ba2str(&rem_addr.l2_bdaddr, ba);
		printf("\nConnect from %s [imtu %d, omtu %d, flush_to %d]\n",ba, opts.imtu, opts.omtu, opts.flush_to);

		/* Enable SO_LINGER */
		if (linger) {
			struct linger l = { .l_onoff = 1, .l_linger = linger };
			if (setsockopt(s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)) < 0) {
				printf("\nCan't enable SO_LINGER: %s (%d)\n",
					strerror(errno), errno);
				exit(1);
			}
		}

	
		
		dump_mode(s1);
		close(s1);

		printf("\nDisconnect: %m\n");
	}
}

static void hexdump(unsigned char *s, unsigned long l)

{
	unsigned long i;
	unsigned char j,k;
	unsigned char temp=0x00;

	/*for(i=0;i<l;i++)
	{
		printf("\r\n0x");
		printf("%x",s[i]);
	}
	printf("\r\n");*/
	
	for(i=0;i<l;i++)
	{
		if((s[i]== 0x7C)) 	//&& (s[i+1] != 0x7C))
		{
			temp=temp ^ s[i];
			temp=temp ^ s[i+1];
			temp=temp ^ s[i+2];
			
			for(k=i;k<(i+s[i+2]);k++)
				temp=temp ^ s[k+3];

					
				if(s[s[i+2]+3]==temp)
					printf("\nPacket recevied correctly\n");
				else
				{
					printf("\nPacket corrupted\n");
					return;
				}

				
			if(s[i+1]==0x01)
			{
				printf("\nKeyboard data packet\n");
				printf("\nNo. of bytes in Keyboard packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
				
			if(s[i+1]==0x02)
			{
				printf("\nMouse data packet\n");
				printf("\nNo. of bytes in Mouse packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
			
			if(s[i+1]==0x03)
			{
				printf("\nFinger print data packet\n");
				printf("\nNo. of bytes in Finger print packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
			
			if(s[i+1]==0x04)
			{
				printf("\nControl packet\n");
				printf("\nNo. of bytes in Control packet:%x\n",s[2]);
				for(j=3;j<(s[i+2]+3);j++)
					printf(" %x ",s[j]);
			}
		break;
		}
	}

}

void dump_mode(int s)

{
	int len;
	int opt, optl;


	printf("\r\nReceiving ...\r\n");

	while (1) {
		fd_set rset;

		FD_ZERO(&rset);
		FD_SET(s, &rset);

		if (select(s + 1, &rset, NULL, NULL, NULL) < 0)
			return;

		if (!FD_ISSET(s, &rset))
			continue;

		len = read(s, rbuf, data_size);
		printf("\nRecevied %d bytes\n", len);

		if (len <= 0) {
			if (len < 0) {
				if (reliable && (errno == ECOMM)) {
					printf("\r\nL2CAP Error ECOMM - clearing error and continuing.\r\n");
					optl = sizeof(opt);
					if (getsockopt(s, SOL_SOCKET, SO_ERROR, &opt, &optl ) < 0) { // Clear error
						printf("\r\nCouldn't getsockopt(SO_ERROR): %s (%d)\r\n",
							strerror(errno), errno);
						return;
					}
					continue;
				} else {
					printf("\r\nRead error: %s(%d)\n", strerror(errno), errno);
				}
			}
		//	return;
			break;
		//	continue;
		}
	//	else if(len > 0)
		{			
			printf("\nRecevied %d bytes\n", len);
			hexdump(rbuf,len);
		}
	}
	close(s);
}

int main(void)

{
	int fd;
	fd=remote_connect("00:0B:0D:33:DA:F9");
	send_data(fd);
	//fd=listen_connection();
	//accept_connection(fd);

// do_listen();

}

#6 lore raw

Hi,

I compiled and tested your applications. Had the (exact) same problem when tried to send from a SiW dongle to one with CSR chip. But... This was because I forgot to starup the interface. What does `hciconfig -a' for the SiW dongle show? Is it up?

Best regards,
Sebastian

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

author
#7 lore raw

Hi Sebastian,
Yes. hciconfig -a is showing up. The following is
the result I am getting for hciconfig -a. I can't move forward from this problem.

SiW Dongle:
[root@localhost ~]# hciconfig -a
hci0: Type: USB

        BD Address: 00:0B:0D:33:DA:F9 ACL MTU: 120:20  SCO MTU: 64:0
        UP RUNNING PSCAN ISCAN
        RX bytes:1679 acl:42 sco:0 events:98 errors:0
        TX bytes:723 acl:30 sco:0 commands:29 errors:0
        Features: 0xff 0xff 0x05 0x38 0x18 0x18 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy:
        Link mode: SLAVE ACCEPT
        Name: ''
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous,
        HCI Ver: 1.2 (0x2) HCI Rev: 0x0 LMP Ver: 1.2 (0x2) LMP Subver: 0x757
        Manufacturer: Silicon Wave (11)

CSR dongle:
[root@localhost root]# hciconfig -a
hci0: Type: USB

        BD Address: 01:5A:4B:20:07:DB ACL MTU: 192:8 SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN
        RX bytes:273 acl:5 sco:0 events:24 errors:0
        TX bytes:175 acl:6 sco:0 commands:11 errors:0
        Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy:
        Link mode: SLAVE ACCEPT
        Name: 'BlueZ (0)'
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous,
        HCI Ver: 1.1 (0x1) HCI Rev: 0x110 LMP Ver: 1.1 (0x1) LMP Subver: 0x110
        Manufacturer: Cambridge Silicon Radio (10)

Regards
Mohan

Quoted 10 lines · Sebastian Roth

Hi,

I compiled and tested your applications. Had the (exact) same problem when tried to send from a SiW dongle to one with CSR chip. But... This was because I forgot to starup the interface. What does `hciconfig -a' for the SiW dongle show? Is it up?

Best regards,
Sebastian

Quoted 10 lines

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

author
#8 lore raw
In reply to Sebastian Roth

Hi Sebastian,
Can you tell me whether the send program is working
after making the device up using "hciconfig hci0 up" on the SiW dongle side?

Regards
Mohan

Quoted 10 lines · Sebastian Roth

Hi,

I compiled and tested your applications. Had the (exact) same problem when tried to send from a SiW dongle to one with CSR chip. But... This was because I forgot to starup the interface. What does `hciconfig -a' for the SiW dongle show? Is it up?

Best regards,
Sebastian

Quoted 10 lines

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

#9 lore raw

Hi Mohan,

I'm sorry. I have not made this point clear!

Quoted 3 lines

Can you tell me whether the send program is working
after making the device up using "hciconfig hci0 up" on the SiW dongle side?

Yes, after starting hcid' (or using hciconfig hci0 up') I was able to connect and send data in both directions.

Wugh? What's this? hciconfig shows a "Transilica, Inc." chip to me. Don't know why but I thought that this dongle has a SiW chip in it.

Are you able to send data using another programm? Please try l2ping to see if both directions work.

Best regards,
Sebastian

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

author
#10 lore raw

Hi Sebastian,
The l2ping is working on both side. I uncommented
the send functions in the recvdata.c and tried. That even not working in SiW dongle and giving the same error.

Thanks & Regards
Mohan

Quoted 19 lines · Sebastian Roth

Hi Mohan,

I'm sorry. I have not made this point clear!

Quoted 3 lines

Can you tell me whether the send program is working
after making the device up using "hciconfig hci0 up" on the SiW dongle side?

Yes, after starting hcid' (or using hciconfig hci0 up') I was able to connect and send data in both directions.

Wugh? What's this? hciconfig shows a "Transilica, Inc." chip to me. Don't know why but I thought that this dongle has a SiW chip in it.

Are you able to send data using another programm? Please try l2ping to see if both directions work.

Best regards,
Sebastian

Quoted 10 lines

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Bluez-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-users