• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Still confuse about rfcomm send and receive.....
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Still confuse about rfcomm send and receive.....


  • Subject: Re: Still confuse about rfcomm send and receive.....
  • From: Yann Bizeul <email@hidden>
  • Date: Mon, 24 May 2004 20:19:48 +0200

Hi,

Personally, I changed the design to make a BTConnection =
singleton, and =20
use asynchronous calls to send data.
You should wait for a OK after each command to send the next one

If you set your object as the delegate for the RFCOMMChannel, =
your =20
(void)rfcommChannelData:(IOBluetoothRFCOMMChannel*)rfcommChanneldata:=20
(void *)dataPointer length:(size_t)dataLength; method will be called =20
with appropriate received data each time you get something from the =20
phone.

The method I use is feeding an NSMutableArray with commands I =
want to =20
use, and flush it everytime I receive a return code from the phone "OK" =20=

or "ERROR"
I can send you my BTConnection class, it is quite easy to use, =
you =20
just have to setDevice: with an NSString representation of the phone =20
address and use senString: method for each string you want to use. Here =20=

is an example :

[[ BTConnection sharedConnection ] setDelegate: self ];
[[ BTConnection sharedConnection ] setDevice: [[ NSUserDefaults =20
standardUserDefaults ] objectForKey: @"deviceID" ]];
[[ BTConnection sharedConnection ] connect ];

-(void)btDeviceConnected:(id)sender
{
if ([[[ NSUserDefaults standardUserDefaults ] objectForKey: =20
@"callerID" ] boolValue ])
{
[[BTConnection sharedConnection]sendString:@"AT*ECAM=3D1\r" ];
[[BTConnection sharedConnection]sendString:@"AT+CLIP=3D1\r" ];
}
}

Here is the method in my class the sends string to the phone. Notice =20
that it is important to take care of the channel MTU :

- (void)_sendData:(void*)buffer length:(UInt32)length ;
{
if ( mRFCOMMChannel !=3D nil )
{
UInt32 numBytesRemaining;
IOReturn result;
BluetoothRFCOMMMTU rfcommChannelMTU;

numBytesRemaining =3D length;
result =3D kIOReturnSuccess;

// Get the RFCOMM Channel's MTU. Each write can only contain =20=

up to the MTU size
// number of bytes.
rfcommChannelMTU =3D [mRFCOMMChannel getMTU];

// Loop through the data until we have no more to send.
while ( ( result =3D=3D kIOReturnSuccess ) && ( =
numBytesRemaining > =20
0 ) )
{
// finds how many bytes I can send:
UInt32 numBytesToSend =3D ( ( numBytesRemaining > =20
rfcommChannelMTU ) ? rfcommChannelMTU : numBytesRemaining );

// This method won't return until the buffer has been =20
passed to the Bluetooth hardware to be sent to the remote device.
// Alternatively, the asynchronous version of this method =20=

could be used which would queue up the buffer and return immediately.
result =3D [mRFCOMMChannel writeSync:buffer =20
length:numBytesToSend];

// Updates the position in the buffer:
numBytesRemaining -=3D numBytesToSend;
buffer +=3D numBytesToSend;
}
}
}

Le 24 mai 04, =E0 16:46, Nathanael P a =E9crit :

> Hi everyone..
> I am a student of a college in Indonesia, and I am
> currently doing a final task. I am a newbie in mac
> programming. For my final task, I want to build a
> bluetooth communication between my se t610 and my mac.
> I have built a rfcomm sync connection, but I do not
> how to receive the response from what I have sent. I
> have asked to bluetooth developer mailing list, they
> told me to set the callback from setdelegate: and use
> this function:
>
> (void)rfcommChannelData:(IOBluetoothRFCOMMChannel*)rfcommChannel
> data:(void *)dataPointer length:(size_t)dataLength;
>
> But I do not know how to use it both. Currently, this
> is what i have done:
>
> IOBluetoothDeviceSelectorController *deviceSelector;
> NSArray *deviceArray;
> deviceSelector =3D [IOBluetoothDeviceSelectorController
> deviceSelector];
> [deviceSelector runModal];
> deviceArray =3D [deviceSelector getResults];
> selectedDevice =3D [deviceArray objectAtIndex:0];
> [selectedDevice openRFCOMMChannelSync:&mRFCOMMChannel
> withChannelID:10 delegate:self];
> [mRFCOMMChannel retain];
> char *s1 =3D "at+cmgf=3D1\r"; =09
> [mRFCOMMChannel writeSync:s1 length:strlen(s1)];
> char *s2 =3D "at+cmgl=3D\"all\"\r";
> [mRFCOMMChannel writeSync:s2 length:strlen(s2)];
>
> These code is learned from the example that comes
> along with project builder. I'd be so grateful if
> anyone could explain me.
>
> Thanks a lot,
> Nathanael
>
>
> =09
> =09
> __________________________________
> Do you Yahoo!?
> Yahoo! Domains =16 Claim yours for only $14.70/year
> http://smallbusiness.promotions.yahoo.com/offer
> _______________________________________________
> bluetooth-dev mailing list | email@hidden
> Help/Unsubscribe/Archives: =20
> http://www.lists.apple.com/mailman/listinfo/bluetooth-dev
> Do not post admin requests to the list. They will be ignored.
>
>
>
--=20
Yann Bizeul - yann at tynsoe.org
http://projects.tynsoe.org/

[demime 0.98b removed an attachment of type application/pkcs7-signature which had a name of smime.p7s]
_______________________________________________
bluetooth-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/bluetooth-dev
Do not post admin requests to the list. They will be ignored.


References: 
 >Still confuse about rfcomm send and receive..... (From: Nathanael P <email@hidden>)

  • Prev by Date: Re: Still confuse about rfcomm send and receive.....
  • Next by Date: JSR-82 for Linux, Windows and OSX
  • Previous by thread: Re: Still confuse about rfcomm send and receive.....
  • Next by thread: JSR-82 for Linux, Windows and OSX
  • Index(es):
    • Date
    • Thread