00001
00002
00003
00004
00005
00006
00007 #include <e32base.h>
00008 #include <aknnotewrappers.h>
00009
00010 #include "..\inc\threadaoengine.h"
00011 #include "SharedIntermediator.h"
00012 #include "BluetoothRefreshTimer.h"
00013 #include "Devicelistcontainer.h"
00014
00015
00016 _LIT( KThreadOneName, "thread1" );
00017 const TInt KStackSize = 4096;
00018
00019
00020
00021
00022
00023
00024 CThreadAOEngine::CThreadAOEngine( CSharedIntermediator* aSMediator ) :
00025 iCreatedThreads(EFalse),
00026 iSMediator(aSMediator), iListener(0)
00027 {
00028 }
00029
00030
00031
00032
00033
00034
00035 CThreadAOEngine::~CThreadAOEngine()
00036 {
00037
00038
00039 iThreadOne.Kill(KErrNone);
00040
00041 iThreadOne.Close();
00042
00043 delete iListener;
00044 }
00045
00046 CThreadAOEngine* CThreadAOEngine::NewL(CSharedIntermediator* aSMediator)
00047 {
00048 CThreadAOEngine* self = CThreadAOEngine::NewLC(aSMediator);
00049 CleanupStack::Pop(self);
00050 return self;
00051 }
00052
00053 CThreadAOEngine* CThreadAOEngine::NewLC(CSharedIntermediator* aSMediator)
00054 {
00055 CThreadAOEngine* self = new (ELeave) CThreadAOEngine(aSMediator);
00056 CleanupStack::PushL(self);
00057 self->ConstructL();
00058 return self;
00059 }
00060
00061
00062 void CThreadAOEngine::ConstructL()
00063 {
00064 }
00065
00066
00067
00068
00069
00070
00071 void CThreadAOEngine::StartL()
00072 {
00073
00074
00075 if ( iCreatedThreads == false )
00076 {
00077 CreateThreadsL();
00078 }
00079 }
00080
00081
00082
00083
00084
00085
00086 void CThreadAOEngine::Stop()
00087 {
00088
00089 iSMediator->SetStopSearching(ETrue);
00090 }
00091
00092
00093
00094
00095
00096
00097 TInt CThreadAOEngine::ExecuteThreadOne(TAny *aPtr)
00098 {
00099 CSharedIntermediator* sharedMediator =
00100 static_cast<CSharedIntermediator*>( aPtr );
00101
00102
00103 CTrapCleanup* cleanupStack = CTrapCleanup::New();
00104
00105
00106
00107 TRAPD( error, CThreadAOEngine::CreateActiveSchedulerL( sharedMediator ) )
00108
00109 delete cleanupStack;
00110
00111 return 0;
00112 }
00113
00114
00115
00116
00117
00118
00119
00120 void CThreadAOEngine::CreateActiveSchedulerL(CSharedIntermediator* aSMediator)
00121 {
00122
00123 CActiveScheduler* activeScheduler = new (ELeave) CActiveScheduler;
00124 CleanupStack::PushL(activeScheduler);
00125
00126
00127 CActiveScheduler::Install(activeScheduler);
00128
00129 CActiveSchedulerWait* wait = new (ELeave) CActiveSchedulerWait;
00130 CleanupStack::PushL(wait);
00131
00132 CBluetoothRefreshTimer* timer = CBluetoothRefreshTimer::NewL(
00133 aSMediator, wait );
00134 CleanupStack::PushL(timer);
00135
00136 CActiveScheduler::Add(timer);
00137
00138
00139 timer->StartL();
00140 wait->Start();
00141
00142
00143 CleanupStack::PopAndDestroy(3);
00144 }
00145
00146
00147
00148
00149
00150
00151
00152 void CThreadAOEngine::CreateThreadsL()
00153 {
00154
00155 iThreadOne.Create( KThreadOneName, ExecuteThreadOne, KStackSize, NULL, iSMediator);
00156 iThreadOne.Resume();
00157
00158
00159 iListener = CThreadListener::NewL(iThreadOne);
00160
00161 iCreatedThreads = ETrue;
00162 }
00163