00001 /* 00002 * Copyright © 2008 Nokia Corporation. 00003 */ 00004 00005 00006 // INCLUDES 00007 #include "SharedIntermediator.h" 00008 #include "BluetoothInfo.h" 00009 #include "Devicelistcontainer.h" 00010 #include "BluetoothRefreshTimer.h" 00011 #include "ThreadAOAppUi.h" 00012 #include "btdiscoverer.h" 00013 00014 //CONSTANTS 00015 const TInt KRefreshTime = 20; 00016 00017 // ---------------------------------------------------------------------------- 00018 // CSharedIntermediator::CSharedIntermediator(CDeviceListContainer* 00019 // aDeviceListContainer) 00020 // 00021 // Constructor. 00022 // ---------------------------------------------------------------------------- 00023 CSharedIntermediator::CSharedIntermediator( 00024 CDeviceListContainer* aDeviceListContainer) 00025 : iDeviceListContainer(aDeviceListContainer), 00026 iStopSearching(false), 00027 iBTRefreshTimer(NULL), 00028 iInititialRefreshTime( KRefreshTime ) 00029 { 00030 } 00031 00032 // ---------------------------------------------------------------------------- 00033 // CSharedIntermediator::~CSharedIntermediator() 00034 // 00035 // Destructor. 00036 // ---------------------------------------------------------------------------- 00037 CSharedIntermediator::~CSharedIntermediator() 00038 { 00039 iMutex.Close(); 00040 if( iBluetoothInfoArray ) 00041 { 00042 iBluetoothInfoArray->Reset(); 00043 } 00044 delete iBluetoothInfoArray; 00045 } 00046 00047 CSharedIntermediator* CSharedIntermediator::NewL(CDeviceListContainer* aView) 00048 { 00049 CSharedIntermediator* self = CSharedIntermediator::NewLC(aView); 00050 CleanupStack::Pop(); 00051 return self; 00052 } 00053 00054 CSharedIntermediator* CSharedIntermediator::NewLC(CDeviceListContainer* aView) 00055 { 00056 CSharedIntermediator* self = new (ELeave) CSharedIntermediator(aView); 00057 CleanupStack::PushL(self); 00058 self->ConstructL(); 00059 return self; 00060 } 00061 00062 // Standard Symbian OS 2nd phase constructor 00063 void CSharedIntermediator::ConstructL() 00064 { 00065 iBluetoothInfoArray = new (ELeave) CArrayFixFlat <TBluetoothInfo>(1); 00066 iMutex.CreateLocal(); 00067 } 00068 00069 // ---------------------------------------------------------------------------- 00070 // CSharedIntermediator::AddBluetoothInfoL(TBluetoothInfo& btInfoElement) 00071 // 00072 // Add bluetooth info into bluetooth info array and add's new bluetooth 00073 // device's name into UI's list box. 00074 // ---------------------------------------------------------------------------- 00075 void CSharedIntermediator::AddBluetoothInfoL(TBluetoothInfo& aBtInfoElement) 00076 { 00077 iMutex.Wait(); 00078 00079 // Add new device data into array 00080 iBluetoothInfoArray->AppendL(aBtInfoElement); 00081 00082 TBuf <KBTDeviceLength> deviceName; 00083 aBtInfoElement.GetDeviceName(deviceName); 00084 // Show new device name in the list box. 00085 iDeviceListContainer->AddItemL(deviceName); 00086 00087 iMutex.Signal(); 00088 } 00089 00090 // ---------------------------------------------------------------------------- 00091 // CSharedIntermediator::ResetArray() 00092 // 00093 // Clears bluetooth info array. 00094 // ---------------------------------------------------------------------------- 00095 void CSharedIntermediator::ResetArray() 00096 { 00097 iMutex.Wait(); 00098 iBluetoothInfoArray->Reset(); 00099 iMutex.Signal(); 00100 } 00101 00102 // ---------------------------------------------------------------------------- 00103 // CSharedIntermediator::SetRefreshTimerInitlVal(TInt aRefreshTime) 00104 // 00105 // Set thread one's CBluetoothrefreshtimer initial value. 00106 // ---------------------------------------------------------------------------- 00107 void CSharedIntermediator::SetRefreshTimerInitlVal(TInt aRefreshTime) 00108 { 00109 if ( aRefreshTime < KRefreshTimeMin ) 00110 { 00111 aRefreshTime = KRefreshTimeDefault; 00112 } 00113 00114 iInititialRefreshTime = aRefreshTime; 00115 } 00116 00117 // ---------------------------------------------------------------------------- 00118 // CSharedIntermediator::RefreshTimerInitlVal() 00119 // 00120 // Get thread one's CBluetoothrefreshtimer initial value. 00121 // ---------------------------------------------------------------------------- 00122 TInt CSharedIntermediator::RefreshTimerInitlVal() 00123 { 00124 return iInititialRefreshTime; 00125 } 00126 00127 // ---------------------------------------------------------------------------- 00128 // CSharedIntermediator::GetAddress(TDes& aAddress, TInt aIndex) 00129 // 00130 // Get bluetooth device address from the bluetooth info array. 00131 // ---------------------------------------------------------------------------- 00132 void CSharedIntermediator::GetAddress(TDes& aAddress, TInt aIndex) 00133 { 00134 iMutex.Wait(); 00135 if ( aIndex < iBluetoothInfoArray->Count() ) 00136 { 00137 TBluetoothInfo& tempBTInfo = iBluetoothInfoArray->At(aIndex); 00138 tempBTInfo.GetAddressHex(aAddress); 00139 } 00140 iMutex.Signal(); 00141 } 00142 00143 // ---------------------------------------------------------------------------- 00144 // CSharedIntermediator::SetStopSearching(bool aStopSearhing) 00145 // 00146 // Set variable (iStopSearching), which tells to thread 00147 // that Activescheduler's wait loop should stop. After that thread cleans up 00148 // itself, the program is terminated "naturally". 00149 // ---------------------------------------------------------------------------- 00150 void CSharedIntermediator::SetStopSearching(bool aStopSearhing) 00151 { 00152 iStopSearching = aStopSearhing; 00153 } 00154 00155 00156 // ---------------------------------------------------------------------------- 00157 // TBool CSharedIntermediator::StopSearching() 00158 // 00159 // ---------------------------------------------------------------------------- 00160 TBool CSharedIntermediator::StopSearching() 00161 { 00162 return iStopSearching; 00163 } 00164 00165 // ---------------------------------------------------------------------------- 00166 // CSharedIntermediator::BTRefreshTimerPtr() 00167 // 00168 // Get pointer to thread's bluetooth refresh timer. New refresh time is set 00169 // in main program. Refresh time is time that has passed after bluetooth 00170 // discovery is started again. 00171 // ---------------------------------------------------------------------------- 00172 CBluetoothRefreshTimer* CSharedIntermediator::BTRefreshTimerPtr() 00173 { 00174 return iBTRefreshTimer; 00175 } 00176 00177 // ---------------------------------------------------------------------------- 00178 // CSharedIntermediator::SetBTRefreshTimerPtr(CBluetoothRefreshTimer* timer) 00179 // 00180 // Set pointer to thread's bluetooth refresh timer. New refresh time is set 00181 // in the main program by the user. 00182 // ---------------------------------------------------------------------------- 00183 void CSharedIntermediator::SetBTRefreshTimerPtr(CBluetoothRefreshTimer* aTimer) 00184 { 00185 iBTRefreshTimer = aTimer; 00186 } 00187 00188 // ---------------------------------------------------------------------------- 00189 // CSharedIntermediator::DeviceListContainer() 00190 // 00191 // Get pointer to listbox container. Function is used 00192 // when CBTRefreshTimer clears the listbox. 00193 // ---------------------------------------------------------------------------- 00194 CDeviceListContainer* CSharedIntermediator::DeviceListContainer() 00195 { 00196 return iDeviceListContainer; 00197 } 00198