Advertising Bluetooth services using Symbian C++
hamishwillee
(Talk | contribs) m (Hamishwillee - Bot change of template (Template:CodeSnippet) - now using Template:ArticleMetaData) |
hamishwillee
(Talk | contribs) m (Hamishwillee - Adding missing translation link) |
||
| (6 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| − | + | [[Category:Symbian C++]][[Category:Code Snippet]][[Category:Bluetooth]][[Category:Code Snippet]][[Category:S60 3rd Edition FP1]] | |
| − | + | {{Archived|timestamp=20120817133322|user=[[User:Lpvalente|Lpvalente]]}} | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | | | + | |
| − | | | + | |
| + | |||
| + | {{ArticleMetaData <!-- v1.2 --> | ||
|sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | |sourcecode= <!-- Link to example source code (e.g. [[Media:The Code Example ZIP.zip]]) --> | ||
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | |installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) --> | ||
| − | |sdk=<!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) --> | + | |devices= Nokia N95 |
| − | |devicecompatability=<!-- Compatible devices (e.g.: All* (must have GPS) ) --> | + | |sdk= <!-- SDK(s) built and tested against (e.g. [http://linktosdkdownload/ Nokia Qt SDK 1.1]) --> |
| − | |signing=<!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | + | |platform= S60 3rd Edition, MR |
| − | |capabilities=<!-- Capabilities required (e.g. Location, NetworkServices. -->) | + | |devicecompatability= <!-- Compatible devices (e.g.: All* (must have GPS) ) --> |
| − | |author=[[User:Tepaa]] | + | |dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 --> |
| + | |signing= <!-- Empty or one of Self-Signed, DevCert, Manufacturer --> | ||
| + | |capabilities= <!-- Capabilities required by the article/code example (e.g. Location, NetworkServices. --> | ||
| + | |keywords= RSdp, RSdpDatabase, TSdpServRecordHandle, RSdpDatabase::CreateServiceRecordL(), RSdpDatabase::UpdateAttributeL() | ||
| + | |language= <!-- Language category code for non-English topics - e.g. Lang-Chinese --> | ||
| + | |translated-by= <!-- [[User:XXXX]] --> | ||
| + | |translated-from-title= <!-- Title only --> | ||
| + | |translated-from-id= <!-- Id of translated revision --> | ||
| + | |review-by= <!-- After re-review: [[User:username]] --> | ||
| + | |review-timestamp= <!-- After re-review: YYYYMMDD --> | ||
| + | |update-by= <!-- After significant update: [[User:username]]--> | ||
| + | |update-timestamp= <!-- After significant update: YYYYMMDD --> | ||
| + | |creationdate= 20080425 | ||
| + | |author= [[User:Tepaa]] | ||
| + | <!-- The following are not in current metadata --> | ||
| + | |subcategory= Bluetooth | ||
| + | |id= CS000938 | ||
}} | }} | ||
==Overview== | ==Overview== | ||
| − | + | {{Icode|RSdp}} provides a session to the Service Discovery Database. It is used to create subsessions to database functionality. A client must create and connect a session before using a RSdpDatabase subsession to access the database. | |
| − | + | {{Icode|RSdpDatabase}} is a subsession of the SDP through which service records and their attributes can be added, deleted, and updated. | |
| − | The following example shows how to advertise a certain (KBT_serviceID 0x10ff) Bluetooth service. Discovering this particular service is explained in [[ | + | {{Abstract|The following example shows how to advertise a certain (KBT_serviceID 0x10ff) Bluetooth service. Discovering this particular service is explained in [[Archived:Discovering Bluetooth services using Symbian C++]].}} |
| − | Listening to the Bluetooth connection is explained in [[ | + | Listening to the Bluetooth connection is explained in [[Archived:Establishing a Bluetooth connection using Symbian C++]]. The channel number parameter in {{Icode|CMyServiceAdvertiser::StartAdvertiserL(TInt aChannel)}} method comes there. |
==MMP file== | ==MMP file== | ||
The following capabilities and libraries are required: | The following capabilities and libraries are required: | ||
<code cpp> | <code cpp> | ||
| − | CAPABILITY | + | CAPABILITY LocalServices |
| − | LIBRARY | + | LIBRARY sdpagent.lib |
| − | LIBRARY | + | LIBRARY sdpdatabase.lib |
</code> | </code> | ||
| Line 157: | Line 166: | ||
==Postconditions== | ==Postconditions== | ||
The Bluetooth service is advertised and can be discovered as explained in | The Bluetooth service is advertised and can be discovered as explained in | ||
| − | [[ | + | [[Archived:Discovering Bluetooth services using Symbian C++]]. |
==See also== | ==See also== | ||
| − | [[ | + | [[Archived:Discovering Bluetooth devices using Symbian C++]] |
| − | [[ | + | [[Archived:Discovering Bluetooth services using Symbian C++]] |
| − | [[ | + | [[Archived:Establishing a Bluetooth connection using Symbian C++]] |
| − | [[ | + | [[Archived:RHostResolver and redundant display of access point selection dialog (Known Issue)]] |
==Example application== | ==Example application== | ||
This code snippet has been used in the [http://www.developer.nokia.com/info/sw.nokia.com/id/e56fccb6-2d70-4a02-9008-7b3e97927057/S60_Platform_Bluetooth_Point_to_Multipoint_Example.html S60 Platform: Bluetooth Point-to-multipoint Example application]. | This code snippet has been used in the [http://www.developer.nokia.com/info/sw.nokia.com/id/e56fccb6-2d70-4a02-9008-7b3e97927057/S60_Platform_Bluetooth_Point_to_Multipoint_Example.html S60 Platform: Bluetooth Point-to-multipoint Example application]. | ||
| − | + | <!-- Translation --> [[zh-hans:广播蓝牙服务]] | |
| − | [[ | + | |
Revision as of 08:21, 18 September 2012
The article is believed to be still valid for the original topic scope.
Article Metadata
Tested with
Compatibility
Article
Contents |
Overview
RSdp provides a session to the Service Discovery Database. It is used to create subsessions to database functionality. A client must create and connect a session before using a RSdpDatabase subsession to access the database.
RSdpDatabase is a subsession of the SDP through which service records and their attributes can be added, deleted, and updated.
The following example shows how to advertise a certain (KBT_serviceID 0x10ff) Bluetooth service. Discovering this particular service is explained in Archived:Discovering Bluetooth services using Symbian C++.
Listening to the Bluetooth connection is explained in Archived:Establishing a Bluetooth connection using Symbian C++. The channel number parameter in CMyServiceAdvertiser::StartAdvertiserL(TInt aChannel) method comes there.
MMP file
The following capabilities and libraries are required:
CAPABILITY LocalServices
LIBRARY sdpagent.lib
LIBRARY sdpdatabase.lib
Header file
#include <btsdp.h>
#include <bt_sock.h>
// The service id that identifies the service. This id will be
// used when advertising the service and discovering the service.
#define KBT_serviceID 0x10ff
// Service name and description for our service
_LIT(KBTServiceName, "BTpmp");
_LIT(KBTServiceDesc, "BTpmp");
// Service discovery protocol session
RSdp iSdp;
// Service discovery database (sdp)
RSdpDatabase iSdpDB;
// Service record
TSdpServRecordHandle iRecord;
// Service record state
TInt iRecordState;
Source file
Start the service advertiser on a given channel. Entry to service discovery database will be entered describing the advertised service.
void CMyServiceAdvertiser::StartAdvertiserL(TInt aChannel)
{
// Open sdp session
User::LeaveIfError(iSdp.Connect());
// Open sdp database session
User::LeaveIfError(iSdpDB.Open(iSdp));
// Create a record of the correct service class
TUUID serviceUUID(KBT_serviceID);
iSdpDB.CreateServiceRecordL(serviceUUID, iRecord);
// Add a protocol to the record
CSdpAttrValueDES* protocolDescriptorList = CSdpAttrValueDES::NewDESL(NULL);
CleanupStack::PushL(protocolDescriptorList);
TBuf8<1> channel;
channel.Append((TChar)aChannel);
// Create protocol list for our service
protocolDescriptorList
->StartListL() // list of protocols required for this method
->BuildDESL()
->StartListL()
->BuildUUIDL(KL2CAP)
->EndListL()
->BuildDESL()
->StartListL()
->BuildUUIDL(KRFCOMM)
->BuildUintL(channel)
->EndListL()
->EndListL();
// Set protocol list to the record
iSdpDB.UpdateAttributeL(iRecord, KSdpAttrIdProtocolDescriptorList,
*protocolDescriptorList);
CleanupStack::PopAndDestroy(protocolDescriptorList);
// Add a name to the record
iSdpDB.UpdateAttributeL(iRecord,
KSdpAttrIdBasePrimaryLanguage +
KSdpAttrIdOffsetServiceName,
KBTServiceName);
// Add a description to the record
iSdpDB.UpdateAttributeL(iRecord,
KSdpAttrIdBasePrimaryLanguage +
KSdpAttrIdOffsetServiceDescription,
KBTServiceDesc);
// Set service available
UpdateAvailabilityL(ETrue);
}
Set the availability of the advertised service. The service record on the service discovery database will be updated accordingly.
void CMyServiceAdvertiser::UpdateAvailabilityL(TBool aAvailable)
{
TInt state = aAvailable ? 0xFF : 0x00;
// Set availability
iSdpDB.UpdateAttributeL(iRecord, KSdpAttrIdServiceAvailability, state);
// Mark record changed
iSdpDB.UpdateAttributeL(iRecord, KSdpAttrIdServiceRecordState,
++iRecordState);
}
Stop advertising the service
void CMyServiceAdvertiser::StopAdvertiserL()
{
if ( iRecord!=NULL )
{
// Delete record from service discovery database
iSdpDB.DeleteRecordL(iRecord);
// Close sdp and sdp db sessions
iSdpDB.Close();
iSdp.Close();
iRecord=NULL;
}
}
Postconditions
The Bluetooth service is advertised and can be discovered as explained in Archived:Discovering Bluetooth services using Symbian C++.
See also
Archived:Discovering Bluetooth devices using Symbian C++
Archived:Discovering Bluetooth services using Symbian C++
Archived:Establishing a Bluetooth connection using Symbian C++
Archived:RHostResolver and redundant display of access point selection dialog (Known Issue)
Example application
This code snippet has been used in the S60 Platform: Bluetooth Point-to-multipoint Example application.

