diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btexample/example/btsocket/tsrc/tservice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btexample/example/btsocket/tsrc/tservice.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,259 @@ +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include + +#ifdef __EPOC32__ +#include +#endif + +#include "cbtservice.h" + +class CMySCOService; +class CMyService: public CBase, MConnectionObserver, MBluetoothSocketNotifier + { + public: + void ConstructL(); + ~CMyService(); + virtual void HandleNewConnection(CBluetoothSocket* aConnection); + virtual void HandleConnectFailed(TInt aError); + //Virtual functions from MBluetoothSocketNotifier + virtual void HandleConnectCompleteL(TInt aErr); + virtual void HandleAcceptCompleteL(TInt aErr); + virtual void HandleShutdownCompleteL(TInt aErr); + virtual void HandleSendCompleteL(TInt aErr); + virtual void HandleReceiveCompleteL(TInt aErr); + virtual void HandleIoctlCompleteL(TInt aErr); + virtual void HandleActivateBasebandEventNotifierCompleteL(TInt aErr, TBTBasebandEventNotification& aEventNotification); + CBtService* iBtService; + RSdp iSdpSession; + RSocketServ iSocketServ; + CBluetoothSocket* iConnection; + CMySCOService* iSCOConnection; + }; + +class CMySCOService: MBluetoothSynchronousLinkNotifier + { + public: + void ConstructL(); + CMySCOService(RSocketServ& aSocketServ); + ~CMySCOService(); + //virtual functions from MBluetoothSynchronousLinkNotifier + virtual void HandleSetupConnectionCompleteL(TInt aErr); + virtual void HandleDisconnectionCompleteL(TInt aErr); + virtual void HandleAcceptConnectionCompleteL(TInt aErr); + virtual void HandleSendCompleteL(TInt aErr); + virtual void HandleReceiveCompleteL(TInt aErr); + CBluetoothSynchronousLink *iConnection; + RSocketServ& iSocketServ; + }; + +RTest test(_L("tservice")); +CMyService *TheService; + +void CMyService::ConstructL() + { + User::LeaveIfError(iSocketServ.Connect()); + iSCOConnection = new(ELeave) CMySCOService(iSocketServ); + iSCOConnection->ConstructL(); + User::LeaveIfError(iSdpSession.Connect()); + TBTServiceSecurity sec; + sec.SetAuthentication(EMitmNotRequired); + sec.SetAuthorisation(EFalse); + sec.SetEncryption(EFalse); + sec.SetDenied(EFalse); + iBtService = CBtService::NewL(TUUID(KSerialPortUUID), //register as a serial port so we can be easily seen + iSdpSession, + iSocketServ, + *this, + KRFCOMM, + &sec); + iConnection = CBluetoothSocket::NewL(*this, iSocketServ); + iBtService->AcceptConnection(*iConnection); + } + +CMyService::~CMyService() + { + delete iBtService; + delete iConnection; + delete iSCOConnection; + iSdpSession.Close(); + iSocketServ.Close(); + } + +void CMyService::HandleNewConnection(CBluetoothSocket* aConnection) + { + test(aConnection==iConnection); + delete iConnection; + iConnection = NULL; + CActiveScheduler::Stop(); + } + +void CMyService::HandleConnectFailed(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleConnectCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleAcceptCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleShutdownCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleSendCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleReceiveCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleIoctlCompleteL(TInt /*aErr*/) + { + test(0); + } + +void CMyService::HandleActivateBasebandEventNotifierCompleteL(TInt /*aErr*/, TBTBasebandEventNotification& /*aEventNotification*/) + { + test(0); + } + +CMySCOService::CMySCOService(RSocketServ& aSS) : + iSocketServ(aSS) + { + } + +CMySCOService::~CMySCOService() + { + delete iConnection; + } + +void CMySCOService::ConstructL() + { + iConnection = CBluetoothSynchronousLink::NewL(*this, iSocketServ); + iConnection->AcceptConnection(); + } + +void CMySCOService::HandleSetupConnectionCompleteL(TInt /*aErr*/) + { + test(0); + } +void CMySCOService::HandleDisconnectionCompleteL(TInt /*aErr*/) + { + } +void CMySCOService::HandleAcceptConnectionCompleteL(TInt aErr) + { + test(aErr == KErrNone); + } +void CMySCOService::HandleSendCompleteL(TInt /*aErr*/) + { + test(0); + } +void CMySCOService::HandleReceiveCompleteL(TInt /*aErr*/) + { + test(0); + } + + +void RunTestL() + { + CActiveScheduler *sched = new(ELeave)CActiveScheduler; + CleanupStack::PushL(sched); + CActiveScheduler::Install(sched); + TheService = new(ELeave) CMyService; + CleanupStack::PushL(TheService); + TheService->ConstructL(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(TheService); + CleanupStack::PopAndDestroy(sched); + } + +#if defined (__WINS__) +#define PDD_NAME _L("ECDRV") +#define LDD_NAME _L("ECOMM") +#else // __GCC32__ +#define PDD_NAME _L("EUART1") +#define LDD_NAME _L("ECOMM") +// #define ETNA_PDD_NAME _L("EUART2") // for debugging over com2 +#endif + +//this is not needed with a UI, only text shell +void LoadLDD_PDD() + { + TInt r; +#ifdef __EPOC32__ + r=StartC32(); + if (r!=KErrNone && r!=KErrAlreadyExists) + { + test.Printf(_L("Failed %d!\n\r"),r); + test(r==KErrNone); + } + else + test.Printf(_L("Started C32\n")); +#endif + test.Printf(_L("Loading PDD\n")); + r=User::LoadPhysicalDevice(PDD_NAME); + if (r!=KErrNone && r!=KErrAlreadyExists) + { + test.Printf(_L("Failed %d!\n\r"),r); + test(r==KErrNone); + } + else + test.Printf(_L("Loaded LDD\n")); + test.Printf(_L("Loading LDD\n")); + r=User::LoadLogicalDevice(LDD_NAME); + if (r!=KErrNone && r!=KErrAlreadyExists) + { + test.Printf(_L("Failed %d!\n\r"),r); + test(r==KErrNone); + } + else + test.Printf(_L("Loaded PDD\n")); + } + + +TInt E32Main() + { + User::SetJustInTime(ETrue); + __UHEAP_MARK; + CTrapCleanup* cleanupStack=CTrapCleanup::New(); + + LoadLDD_PDD(); + TRAPD(err,RunTestL()); // Ignore err + + if (err != KErrNone) + { + test.Printf(_L("Error %d"), err); + test.Getch(); + } + + test.Close(); + delete cleanupStack; + __UHEAP_MARKEND; + + return err; + } +