2

Symbian で RFCOMM サーバーを構成しようとしています。

私のコードを見ると、何も欠けていないように見えますが、他のデバイスは私のサービスを見ることができません。

ノートブックを使用して、携帯電話で利用可能なすべての Bluetooth サービスを一覧表示しましたが、そのサービスはありませんでした。

誰か助けてくれませんか?

コードは次のとおりです。

void BtServer::StartServicoL()
{

   TProtocolDesc pdesc;
   User::LeaveIfError(iSocketServer.FindProtocol(NOMERFCOMM(), pdesc)); 

   iState = EFindingAvailablePort;
   User::LeaveIfError(iListeningSocket.Open(iSocketServer, NOMERFCOMM));

   User::LeaveIfError(iListeningSocket.GetOpt(KRFCOMMGetAvailableServerChannel, KSolBtRFCOMM, iPort));

   iState = EBinding;
   iBtSocketAddr.SetPort(iPort);
   User::LeaveIfError(iListeningSocket.Bind(iBtSocketAddr));
   User::LeaveIfError(iListeningSocket.Listen(1));  

   iServiceAdvertiser->StartL(iPort);

   iBtSocketAddr.SetSecurity(iBtSecurity);

   iAcceptingSocket.Close();

   User::LeaveIfError(iAcceptingSocket.Open(iSocketServer));

   iListeningSocket.Accept(iAcceptingSocket, iStatus);   

   SetActive();

}

void CBluetoothServiceAdvertiser::StartL(const TInt aPort)
{

   iPort = aPort; 

   iState = EConnecting;
   User::LeaveIfError(iSdpServ.Connect());
   User::LeaveIfError(iSdpDatabase.Open(iSdpServ));

   TUUID serviceUUID(UUID_SERVICE);

   iSdpDatabase.CreateServiceRecordL(serviceUUID, iRecordHandle);

   CSdpAttrValueDES* protocolDescriptorList = CSdpAttrValueDES::NewDESL(NULL);
   CleanupStack::PushL(protocolDescriptorList);

   TBuf8<TAM_MAX_NRO_PORTA> port; 
   port.Append((TChar)iPort);

   protocolDescriptorList
         ->StartListL()
            ->BuildDESL()
               ->StartListL()               
                  ->BuildUUIDL(KRFCOMM) 
                  ->BuildUintL(port)    
               ->EndListL()             
         ->EndListL();              


   iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdProtocolDescriptorList, *protocolDescriptorList);
   CleanupStack::PopAndDestroy(protocolDescriptorList);

   iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdBasePrimaryLanguage + KSdpAttrIdOffsetServiceName, NOME_SERV);

   iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdBasePrimaryLanguage + KSdpAttrIdOffsetServiceDescription, DESC_SERV);

   CSdpAttrValue* attrVal = NULL;

   TBuf8<TAM_MAX_SERV_DISP> avail;

   avail.FillZ(1); 

   avail[0]=0xff;  

   attrVal = CSdpAttrValueUint::NewUintL(avail);

   CleanupStack::PushL(attrVal);
   iSdpDatabase.UpdateAttributeL(iRecordHandle, KSdpAttrIdServiceAvailability, *attrVal);
   CleanupStack::PopAndDestroy(attrVal);

}
4

0 に答える 0