--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btexample/testui/TBTNotifiersText/TBTNotifiersText.cpp Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,442 @@
+// Copyright (c) 2008-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 "TBTNotifiersText.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h> // Console
+
+#include <btextnotifiers.h>
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <btextnotifierspartner.h>
+#endif
+
+#include <utf.h>
+#include <btdevice.h>
+
+// Constants
+
+_LIT(KTextConsoleTitle, "Notifiers Test");
+
+LOCAL_C void DoStartL ()
+ {
+ // Create active scheduler (to run active objects)
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+ CleanupStack::PushL (scheduler);
+ CActiveScheduler::Install (scheduler);
+
+ CBTNotifierConsole* console = CBTNotifierConsole::NewLC();
+
+ CActiveScheduler::Current()->Start();
+ CleanupStack::PopAndDestroy (console);
+
+ // Delete active scheduler
+ CleanupStack::PopAndDestroy (scheduler);
+ }
+
+// Global Functions
+
+GLDEF_C TInt E32Main()
+ {
+ // Create cleanup stack
+ __UHEAP_MARK;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+
+ // Run application code inside TRAP harness, wait keypress when terminated
+ TRAPD(mainError, DoStartL());
+
+ delete cleanup;
+ __UHEAP_MARKEND;
+ return mainError;
+ }
+
+CBTNotifierConsole* CBTNotifierConsole::NewL()
+ {
+ CBTNotifierConsole* self = CBTNotifierConsole::NewLC();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CBTNotifierConsole* CBTNotifierConsole::NewLC()
+ {
+ CBTNotifierConsole* self = new(ELeave) CBTNotifierConsole;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CBTNotifierConsole::CBTNotifierConsole(): CActive(EPriorityStandard)
+ {
+ }
+
+CBTNotifierConsole::~CBTNotifierConsole()
+ {
+ Cancel();
+ delete iConsole;
+ }
+
+void CBTNotifierConsole::ConstructL()
+ {
+ iConsole = Console::NewL(KTextConsoleTitle, TSize(KConsFullScreen,KConsFullScreen));
+ CActiveScheduler::Add(this);
+ DrawMenu();
+ RequestKey();
+ }
+
+
+void CBTNotifierConsole::RunL()
+ {
+ switch (iConsole->KeyCode())
+ {
+ case 'a':
+ TestAuthorisationL();
+ break;
+ case 'p':
+ TestPinL();
+ break;
+ case 's':
+ TestDeviceSearchL();
+ break;
+ case 'n':
+ TestNumericComparisonL();
+ break;
+ case 'e':
+ TestPasskeyL();
+ break;
+ case 'l':
+ TestLegacyPinL();
+ break;
+
+ case 'x':
+ CActiveScheduler::Current()->Stop();
+ break;
+ default:
+ break;
+ }
+ DrawMenu();
+ RequestKey();
+ }
+
+void CBTNotifierConsole::DoCancel()
+ {
+ iConsole->ReadCancel();
+ }
+
+void CBTNotifierConsole::RequestKey()
+ {
+ iConsole->Read(iStatus);
+ SetActive();
+ }
+
+void CBTNotifierConsole::DrawMenu()
+ {
+ iConsole->ClearScreen();
+ iConsole->Write(_L("Test BT Notifiers\n\n"));
+
+ iConsole->Write(_L("p\tPIN Entry\n"));
+ iConsole->Write(_L("l\tLegacy PIN Entry\n"));
+ iConsole->Write(_L("s\tDevice Search\n"));
+ iConsole->Write(_L("a\tAuthorisation\n"));
+ iConsole->Write(_L("n\tNumeric Comparison\n"));
+ iConsole->Write(_L("e\tPasskey Entry\n"));
+
+ iConsole->Write(_L("\nx\tExit\n\n"));
+ }
+
+void CBTNotifierConsole::TestAuthorisationL()
+ {
+ TBTAuthorisationParamsPckg pckg;
+ pckg().iBDAddr = TInt64(0x12345678);
+ pckg().iUid.iUid = 0xabcd1234;
+ TPckgBuf<TBool> resultPckg;
+
+ RNotifier notif;
+ User::LeaveIfError(notif.Connect());
+ TRequestStatus stat;
+ notif.StartNotifierAndGetResponse(stat, KBTManAuthNotifierUid, pckg, resultPckg);
+ User::After(2000000);
+ //now send device name
+ TBuf<16> name16 = _L("Tam's Dongle");
+ TBTNotifierUpdateParamsPckg updpckg;
+ updpckg().iName = name16;
+ updpckg().iResult = KErrNone;
+
+ TBuf8<1> answer;
+ TInt err = notif.UpdateNotifier(KBTManAuthNotifierUid, updpckg, answer);
+ if (err)
+ {
+ TBuf<4> error;
+ error.Zero();
+ error.AppendNum(err);
+ iConsole->Write(_L("Error: "));
+ iConsole->Write(error);
+ iConsole->Write(_L("\n"));
+ }
+ User::WaitForRequest(stat);
+ notif.CancelNotifier(KBTManAuthNotifierUid);
+ notif.Close();
+ if (resultPckg())
+ {
+ iConsole->Write(_L("Authorisation Accepted"));
+ }
+ else
+ {
+ iConsole->Write(_L("Authorisation Denied"));
+ }
+ User::After(2000000);
+ }
+
+void CBTNotifierConsole::TestLegacyPinL()
+ {
+ TBTDevAddr devAddr(TInt64(0x1234));
+ TBTPasskeyNotifierParamsPckg pckg;
+ pckg().iPasskeyMinLength = 4;
+ pckg().iLocallyInitiated = ETrue;
+
+ TBTPinCode pin;
+
+ RNotifier notif;
+ User::LeaveIfError(notif.Connect());
+ TRequestStatus stat;
+ notif.StartNotifierAndGetResponse(stat, KBTManPinNotifierUid, pckg, pin);
+ User::After(2000000);
+ //now send device name
+ TBuf<16> name16 = _L("Nick's Dongle");
+ TBTNotifierUpdateParamsPckg updatePckg;
+ updatePckg().iName = name16;
+ updatePckg().iResult = KErrNone;
+
+ TBuf8<1> answer;
+ TInt err = notif.UpdateNotifier(KBTManPinNotifierUid, updatePckg, answer);
+ if (err)
+ {
+ TBuf<4> error;
+ error.Zero();
+ error.AppendNum(err);
+ //CEikonEnv::InfoWinL(_L("Error:"), error);
+ }
+ User::WaitForRequest(stat);
+ notif.CancelNotifier(KBTManPinNotifierUid);
+ notif.Close();
+
+ TBuf<16> buf16;
+ buf16.Zero();
+
+ if (stat.Int() == KErrNone)
+ {
+ TBuf8<16> buf8;
+ buf8.Zero();
+ for (TInt i=0; i<pin().iLength; i++)
+ {
+ buf8.Append(pin().iPIN[i]);
+ }
+ CnvUtfConverter::ConvertToUnicodeFromUtf8(buf16, buf8);
+ }
+ else
+ {
+ buf16.AppendFormat(_L("Error: %d"), stat.Int());
+ }
+ iConsole->Write(_L("Pin Input Complete: "));
+ iConsole->Write(buf16);
+ User::After(2000000);
+ }
+
+void CBTNotifierConsole::TestDeviceSearchL()
+ {
+ TBTDevAddr addr = TInt64(0x1234);
+ TBTDeviceResponseParamsPckg pckg;
+ pckg().SetDeviceAddress(addr);
+ pckg().SetDeviceName(_L(""));
+ pckg().SetDeviceClass(TBTDeviceClass());
+
+ RNotifier notif;
+ User::LeaveIfError(notif.Connect());
+
+ TRequestStatus stat;
+ TBuf8<1> dummy;
+ notif.StartNotifierAndGetResponse(stat, KDeviceSelectionNotifierUid, dummy, pckg);
+
+ User::WaitForRequest(stat);
+ notif.CancelNotifier(KDeviceSelectionNotifierUid);
+ notif.Close();
+
+ if (stat.Int() == KErrNone)
+ {
+ TBuf<14> addressText;
+ pckg().BDAddr().GetReadable(addressText, _L("0x"), KNullDesC, KNullDesC);
+ iConsole->Write(_L("Device Search Complete: "));
+ iConsole->Write(addressText);
+ }
+ else
+ {
+ iConsole->Write(_L("Device search cancelled"));
+ }
+ User::After(2000000);
+ }
+
+void CBTNotifierConsole::TestNumericComparisonL()
+ {
+ TBTDevAddr devAddr(TInt64(0x12345678));
+ TBTNumericComparisonParamsPckg pckg;
+ pckg() = TBTNumericComparisonParams(devAddr, _L("Test Device"), 0x12345678, TBTNumericComparisonParams::ERemoteCanConfirm, ETrue);
+
+ TPckgBuf<TBool> resultPckg;
+
+ RNotifier notif;
+ User::LeaveIfError(notif.Connect());
+
+ TRequestStatus stat;
+ notif.StartNotifierAndGetResponse(stat, KBTNumericComparisonNotifierUid, pckg, resultPckg);
+ User::WaitForRequest(stat);
+ notif.CancelNotifier(KBTNumericComparisonNotifierUid);
+
+ notif.Close();
+
+ if (resultPckg())
+ {
+ iConsole->Write(_L("Numeric comparison succeeded"));
+ }
+ else
+ {
+ iConsole->Write(_L("Numeric comparison failed"));
+ }
+
+ User::After(2000000);
+ }
+
+void CBTNotifierConsole::TestPasskeyL()
+ {
+ TBTDevAddr devAddr(TInt64(0x12345678));
+ TBTPasskeyDisplayParamsPckg pckg;
+ pckg() = TBTPasskeyDisplayParams(devAddr, _L("Test Device"), 0x12345678, ETrue);
+
+ TPckgBuf<TBool> resultPckg;
+
+ RNotifier notif;
+ User::LeaveIfError(notif.Connect());
+
+ TRequestStatus stat;
+ notif.StartNotifierAndGetResponse(stat, KBTPasskeyDisplayNotifierUid, pckg, resultPckg);
+
+ TBTPasskeyDisplayUpdateParamsPckg updatePckg;
+ TBuf8<1> answer;
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyEntryStarted);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitDeleted);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitDeleted);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyCleared);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyDigitEntered);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+
+ User::After(500000);
+ updatePckg() = TBTPasskeyDisplayUpdateParams(EPasskeyEntryCompleted);
+ notif.UpdateNotifier(KBTPasskeyDisplayNotifierUid, updatePckg, answer);
+
+
+ User::WaitForRequest(stat);
+ notif.CancelNotifier(KBTPasskeyDisplayNotifierUid);
+ notif.Close();
+
+ iConsole->Printf(_L("Notifier completed with error %d"), stat.Int());
+
+ User::After(2000000);
+ }
+
+
+void CBTNotifierConsole::TestPinL()
+ {
+ TBTPinCode pin;
+ TBTDevAddr devAddr(TInt64(0x12345678));
+
+ TBTPinCodeEntryNotifierParamsPckg pckg;
+ pckg() = TBTPinCodeEntryNotifierParams(devAddr, _L("Test Device"), 4, ETrue, ETrue, 4);
+
+ RNotifier notif;
+ User::LeaveIfError(notif.Connect());
+ CleanupClosePushL(notif);
+ TRequestStatus stat;
+ notif.StartNotifierAndGetResponse(stat, KBTPinCodeEntryNotifierUid, pckg, pin);
+ User::After(2000000);
+
+ //now send device name
+ TBTDeviceNameUpdateParamsPckg updatePckg;
+ updatePckg() = TBTDeviceNameUpdateParams(_L("New Device Name"), KErrNone);
+ TBuf8<1> answer;
+ User::LeaveIfError(notif.UpdateNotifier(KBTPinCodeEntryNotifierUid, updatePckg, answer));
+ User::WaitForRequest(stat);
+
+ notif.CancelNotifier(KBTPinCodeEntryNotifierUid);
+ CleanupStack::PopAndDestroy(¬if);
+
+ TBuf<16> buf16;
+ buf16.Zero();
+
+ if (stat.Int() == KErrNone)
+ {
+ TBuf8<16> buf8;
+ buf8.Zero();
+ for (TInt i=0; i<pin().iLength; i++)
+ {
+ buf8.Append(pin().iPIN[i]);
+ }
+ CnvUtfConverter::ConvertToUnicodeFromUtf8(buf16, buf8);
+ }
+ else
+ {
+ buf16.AppendFormat(_L("Error: %d"), stat.Int());
+ }
+ iConsole->Write(_L("Pin Input Complete: "));
+ iConsole->Write(buf16);
+ User::After(2000000);
+ }