⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btserviceadvertiser.cpp

📁 symbian平台蓝牙程序,功能实现:搜索设备,指定时间间隔搜索,对指定的设备发送信息,也可指定时间间隔发送,日志操作,可通过mms,红外,蓝牙发送日志等
💻 CPP
字号:
/* Copyright (c) 2002, Nokia Mobile Phones. All rights reserved */

#include <bt_sock.h>
#include "BTServiceAdvertiser.h"

CBTServiceAdvertiser::CBTServiceAdvertiser()
:   iRecord(0), 
    iIsConnected(EFalse)
    {
    // no implementation required
    }

CBTServiceAdvertiser::~CBTServiceAdvertiser()
    {
    if (IsAdvertising()) 
        {
        TRAPD(err,StopAdvertisingL());
        if (err != KErrNone)
            {
            User::Panic(_L("BTServiceAdvertiser"), err);
            }
        }

    iSdpDatabase.Close();
    iSdpSession.Close();
    }

void CBTServiceAdvertiser::ConnectL()
    {
    if (!iIsConnected)
        {
        User::LeaveIfError(iSdpSession.Connect());
        User::LeaveIfError(iSdpDatabase.Open(iSdpSession));
        iIsConnected = ETrue;
        }
    }

void CBTServiceAdvertiser::StartAdvertisingL(TInt aPort)
    {
    if (IsAdvertising())
        {
        // could be advertising on a different port
        StopAdvertisingL(); 
        }
    if (! iIsConnected)
        {
        ConnectL();
        }
    iSdpDatabase.CreateServiceRecordL(ServiceClass(), iRecord);

    // add a Protocol to the record
    CSdpAttrValueDES* vProtocolDescriptor = CSdpAttrValueDES::NewDESL(NULL);
    CleanupStack::PushL(vProtocolDescriptor);
 
    BuildProtocolDescriptionL(vProtocolDescriptor,aPort);

    iSdpDatabase.UpdateAttributeL(iRecord, KSdpAttrIdProtocolDescriptorList, *vProtocolDescriptor);

    CleanupStack::PopAndDestroy(vProtocolDescriptor);

    // Add a name to the record
    iSdpDatabase.UpdateAttributeL(iRecord, 
                                  KSdpAttrIdBasePrimaryLanguage+KSdpAttrIdOffsetServiceName, 
                                  ServiceName());

    // Add a description to the record
    iSdpDatabase.UpdateAttributeL(iRecord, 
                                  KSdpAttrIdBasePrimaryLanguage+KSdpAttrIdOffsetServiceDescription, 
                                  ServiceDescription());

    }

void CBTServiceAdvertiser::UpdateAvailabilityL(TBool aIsAvailable)
    {
    TUint state;
    if (aIsAvailable)
        {
        state = 0xFF;  //  Fully unused
        }
    else
        {
        state = 0x00;  //  Fully used -> can't connect
        }

    //  Update the availibility attribute field
    iSdpDatabase.UpdateAttributeL(iRecord, KSdpAttrIdServiceAvailability, state);

    //  Mark the record as changed - by increasing its state number (version)
    iSdpDatabase.UpdateAttributeL(iRecord, KSdpAttrIdServiceRecordState, ++iRecordState);
    }

void CBTServiceAdvertiser::StopAdvertisingL()
    {
    if (IsAdvertising())
        {
        iSdpDatabase.DeleteRecordL(iRecord);
        iRecord = 0;
        }
    }

TBool CBTServiceAdvertiser::IsAdvertising()
    {
    return iRecord != 0;
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -