--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btexample/example/discoverability/Discoverability.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,161 @@
+// 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 "Discoverability.h"
+
+
+
+_LIT(KInstructions, "Press I to be invisible, V to be visible\nL to be limited, G to be general\nC to change CoD\n");
+
+GLDEF_D RTest test(_L("Discoverability App"));
+
+void TestL()
+ {
+ test.Printf(_L("%S\n"), &KInstructions);
+
+ CDiscoverability* discoverability = CDiscoverability::NewL(test);
+
+ CActiveScheduler::Start();
+
+ delete discoverability;
+ }
+
+
+CDiscoverability* CDiscoverability::NewL(RTest& aTest)
+ {
+ CDiscoverability* s = new(ELeave) CDiscoverability(aTest);
+ CleanupStack::PushL(s);
+ s->ConstructL();
+ CleanupStack::Pop(s);
+ return s;
+ }
+
+CDiscoverability::CDiscoverability(RTest& aTest)
+: CActive(EPriorityStandard), iTest(aTest)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+CDiscoverability::~CDiscoverability()
+ {
+ Cancel();
+ }
+
+void CDiscoverability::ConstructL()
+ {
+ TInt err;
+
+
+ _LIT_SECURITY_POLICY_PASS(KPassPolicy);
+ err=iProperty.Define(KPropertyUidBluetoothCategory,
+ KPropertyKeyBluetoothSetScanningStatus,
+ RProperty::EInt,
+ KPassPolicy, // Read policy
+ KPassPolicy); // Write policy
+ if (err) test.Printf(_L("Error %d defining property, continuing anyway\n"),err);
+ err=iProperty.Define(KPropertyUidBluetoothCategory,
+ KPropertyKeyBluetoothSetLimitedDiscoverableStatus,
+ RProperty::EInt,
+ KPassPolicy, // Read policy
+ KPassPolicy); // Write policy
+ if (err) test.Printf(_L("Error %d defining property, continuing anyway\n"),err);
+ err=iProperty.Define(KPropertyUidBluetoothCategory,
+ KPropertyKeyBluetoothSetDeviceClass,
+ RProperty::EInt,
+ KPassPolicy, // Read policy
+ KPassPolicy); // Write policy
+
+ if (err) test.Printf(_L("Error %d defining property, continuing anyway\n"),err);
+
+ Start();
+ }
+
+void CDiscoverability::Start()
+ {
+ iTest.Console()->Read(iStatus);
+ SetActive();
+ }
+
+
+void CDiscoverability::RunL()
+ {
+ Start();
+
+ TChar ch = iTest.Console()->KeyCode();
+ TInt err = KErrNone;
+
+ switch (ch)
+ {
+ case 'i': case 'I':
+ err=iProperty.Set(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothSetScanningStatus, EPageScanOnly);
+ test.Printf(_L("Set Page Scan mode with result %d\n"),err);
+ break;
+
+ case 'v': case 'V':
+ err=iProperty.Set(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothSetScanningStatus, EInquiryAndPageScan);
+ test.Printf(_L("Set InquiryAndPage Scan mode with result %d\n"),err);
+ break;
+
+ case 'l': case 'L':
+ err=iProperty.Set(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothSetLimitedDiscoverableStatus, ETrue);
+ test.Printf(_L("Set Limited Discoverable mode ON with result %d\n"),err);
+ break;
+
+ case 'g': case 'G':
+ err=iProperty.Set(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothSetLimitedDiscoverableStatus, EFalse);
+ test.Printf(_L("Set Limited Discoverable mode OFF with result %d\n"),err);
+ break;
+
+ case 'c': case 'C':
+ {
+ TUint8 majorDeviceClass = User::TickCount() % 8;
+ TBTDeviceClass cod(0,majorDeviceClass,0);
+ err=iProperty.Set(KPropertyUidBluetoothCategory, KPropertyKeyBluetoothSetDeviceClass, cod.DeviceClass());
+ test.Printf(_L("Changed COD with result %d\n"),err);
+ break;
+ }
+
+ default:
+ break; // do nothing
+ }
+ }
+
+void CDiscoverability::DoCancel()
+ {
+ iTest.Console()->ReadCancel();
+ }
+
+
+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;
+ }