--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btexample/example/btproperties/BTProperties.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,180 @@
+// 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 <e32base.h>
+#include <e32std.h>
+#include <e32test.h>
+#include <bt_subscribe.h>
+#include <bt_sock.h>
+#include "BTProperties.h"
+
+_LIT(KNumLinks, "Number of links:");
+_LIT(KConnecting, "Connecting...");
+_LIT(KRegistry, "Registry changed.");
+_LIT(KLimited, "Limited discoverable:");
+_LIT(KScanning, "Scans:"); // could resolve this into discoverable/connectable
+_LIT(KDeviceClass, "DeviceClass:");
+_LIT(KDeviceName, "DeviceName:");
+_LIT(KCorruptRegistry, "Registry reset at this point:");
+_LIT(KDiscovering, "Discovering...");
+
+GLDEF_D RTest test(_L("Bluetooth P&S Subscription Tests"));
+
+void ShowAddress()
+/**
+ Shows the example of using a synchronous Get to retrieve local BTAddr
+
+*/
+ {
+ RProperty property;
+ TBuf8<6> addr;
+
+ TInt err = property.Get(KPropertyUidBluetoothCategory,
+ KPropertyKeyBluetoothGetLocalDeviceAddress, addr);
+
+ if (err)
+ test.Printf(_L("P&S: ERROR retrieving local address\n"));
+ else
+ {
+ TBTDevAddr localAddress(addr);
+ TBuf<20> dispBuf;
+ localAddress.GetReadable(dispBuf);
+ test.Printf(_L("Local address = 0x%S\n"),&dispBuf);
+ }
+ }
+
+void TestL()
+ {
+ // first do a sync test
+ ShowAddress();
+
+ RPointerArray<CSubscriber> subscribers;
+
+ //ignoring errors!
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetPHYCount, KNumLinks));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetRegistryTableChange, KRegistry));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetConnectingStatus, KConnecting));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetScanningStatus, KScanning));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetLimitedDiscoverableStatus, KLimited));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetDeviceClass, KDeviceClass));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothGetCorruptRegistryResetIndication, KCorruptRegistry));
+ subscribers.Append(CDeviceNameSubscriber::NewL(test, KPropertyKeyBluetoothGetDeviceName, KDeviceName));
+ subscribers.Append(CSubscriber::NewL(test, KPropertyKeyBluetoothHostResolverActive, KDiscovering));
+
+ test.Printf(_L("%d Subscribers\n"), subscribers.Count());
+
+ for (TInt i=0; i<subscribers.Count(); i++)
+ subscribers[i]->Start();
+
+ CActiveScheduler::Start();
+ subscribers.ResetAndDestroy();
+ }
+
+
+CSubscriber* CSubscriber::NewL(RTest& aTest, TUint aKey, const TDesC& aString)
+ {
+ CSubscriber* s = new(ELeave) CSubscriber(aTest, aString);
+ CleanupStack::PushL(s);
+ s->ConstructL(aKey);
+ CleanupStack::Pop(s);
+ return s;
+ }
+
+CSubscriber::CSubscriber(RTest& aTest, const TDesC& aString)
+: CActive(EPriorityStandard), iTest(aTest), iString(aString)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+CSubscriber::~CSubscriber()
+ {
+ Cancel();
+ }
+
+void CSubscriber::ConstructL(TUint aKey)
+ {
+ User::LeaveIfError(iProperty.Attach(KPropertyUidBluetoothCategory, aKey));
+ }
+
+void CSubscriber::Start()
+ {
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ }
+
+void CSubscriber::RunL()
+ {
+ Start();
+ TInt val;
+ iProperty.Get(val);
+
+ iTest.Printf(_L("%S = %d\n"), &iString, val);
+ }
+
+void CSubscriber::DoCancel()
+ {
+ iProperty.Cancel();
+ }
+
+/*************************************************************************/
+//
+// CDeviceNameSubscriber Implementation
+//
+CDeviceNameSubscriber* CDeviceNameSubscriber::NewL(RTest& aTest, TUint aKey, const TDesC& aString)
+ {
+ CDeviceNameSubscriber* s = new(ELeave) CDeviceNameSubscriber(aTest, aString);
+ CleanupStack::PushL(s);
+ s->ConstructL(aKey);
+ CleanupStack::Pop(s);
+ return s;
+ }
+
+CDeviceNameSubscriber::CDeviceNameSubscriber(RTest& aTest, const TDesC& aString)
+: CSubscriber(aTest,aString)
+ {
+ }
+
+CDeviceNameSubscriber::~CDeviceNameSubscriber()
+ {
+ // No need to cancel since it's done in the base class
+ }
+
+void CDeviceNameSubscriber::RunL()
+ {
+ Start();
+
+ TBuf16<KHCILocalDeviceNameMaxLength> val;
+ iProperty.Get(val);
+
+ iTest.Printf(_L("%S = %S\n"), &iString, &val);
+ }
+
+
+TInt E32Main()
+ {
+ CTrapCleanup* cleanupStack=CTrapCleanup::New();
+ CActiveScheduler::Install(new CActiveScheduler);
+
+ TRAPD(err,TestL()); // Ignore err
+
+ if (err != KErrNone)
+ {
+ test.Printf(_L("Error %d"), err);
+ test.Getch();
+ }
+
+ delete cleanupStack;
+ return err;
+ }