author | mikaruus |
Tue, 19 Oct 2010 13:16:20 +0300 | |
changeset 9 | 8486d82aef45 |
parent 7 | fa67e03b87df |
permissions | -rw-r--r-- |
0 | 1 |
/* |
2 |
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 |
* All rights reserved. |
|
4 |
* This component and the accompanying materials are made available |
|
5 |
* under the terms of the License "Eclipse Public License v1.0" |
|
6 |
* which accompanies this distribution, and is available |
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 |
* |
|
9 |
* Initial Contributors: |
|
10 |
* Nokia Corporation - initial contribution. |
|
11 |
* |
|
12 |
* Contributors: |
|
13 |
* |
|
14 |
* Description: |
|
15 |
* |
|
16 |
*/ |
|
17 |
||
18 |
||
19 |
#include <kernel.h> // For Kern |
|
9 | 20 |
#include <pn_const.h> // For PN_OBJ_ROUTING_REQ |
21 |
#include <phonetisi.h> // For ISI_HEADER_OFFSET_... |
|
0 | 22 |
#include "isirouter.h" // For DISIRouter |
23 |
#include "isiroutertrace.h" // For C_TRACE, ASSERT_RESET.. and fault codes |
|
24 |
#include "isidevice.h" // For DLogicalDevice |
|
25 |
#include "isihelpers.h" // For SET_SENDER_DEV... |
|
9 | 26 |
//#include "misirouterobjectif.h" // For MISIRouterObjectIf |
0 | 27 |
#include "isithreadcontainer.h" // For DISIThreadContainer |
28 |
#include "isicltransceiver.h" // For DISICLTransceiver |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
29 |
#include "misirouterobjectif.h" |
0 | 30 |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
31 |
const TUint32 KCommunicationManagerUID( 0x2002B3D0 ); |
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
32 |
const TUint32 KNameServiceUID( 0x2002A5A1 ); |
9 | 33 |
const TUint32 KIsiShRouterServiceUID( 0x20026FE7 ); |
34 |
const TUint32 KIsiShPipeHandlerUID( 0x2002E6E2 ); |
|
35 |
||
36 |
#define ROUTER_OBJECT_IDENTIFIER 0xFA // Only internally agreed inside isi router |
|
37 |
#define PIPEHANDLER_OBJECT_IDENTIFIER 0xFB // Only internally agreed inside isi router |
|
0 | 38 |
|
39 |
DISIRouter* DISIRouter::iSelfPtr = NULL; |
|
40 |
||
41 |
// Faults |
|
42 |
enum TISIRouterFaults |
|
43 |
{ |
|
44 |
EISIRouterMemAllocFailure = 0x01, |
|
45 |
EISIRouterMemAllocFailure1, |
|
46 |
EISIRouterMemAllocFailure2, |
|
47 |
EISIRouterNotUniqueUID, |
|
48 |
EISIRouterNULLObjId, |
|
49 |
EISIRouterNULLPtr, |
|
50 |
EISIRouterNULLPtr1, |
|
51 |
EISIRouterNULLPtr2, |
|
9 | 52 |
EISIRouterNULLPtr3, |
0 | 53 |
EISIRouterNULLThreadPointer, |
9 | 54 |
EISIRouterRouterServiceNULLPtr, |
55 |
EISiShPipeHandlerNULLPtr, |
|
56 |
EISIRouterCommunicationManagerNULLPtr, |
|
57 |
EISIRouterNameServiceNULLPtr, |
|
58 |
EISIWrongObjectApiClient, |
|
0 | 59 |
}; |
60 |
||
9 | 61 |
const TInt KDfcPriority( 5 ); |
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
62 |
|
9 | 63 |
// #define WITHOUT_WRAPPERS_IN_USE // to be defined on when wrappers are not used anymore |
64 |
#ifndef WITHOUT_WRAPPERS_IN_USE |
|
65 |
#include <iscnokiadefinitions.h> // Only allowed to include when wrappers are used |
|
66 |
const TUint16 KFirstUserChannel( EIscNokiaUpdateApplication ); |
|
67 |
const TUint16 KLastKernelChannel( EIscNokiaLastKernelChannel ); |
|
68 |
#endif |
|
0 | 69 |
|
70 |
void DISIRouter::Connect( |
|
71 |
const TInt32 aUID, |
|
72 |
TUint8& aObjId, |
|
9 | 73 |
MISIRouterObjectIf* aCallback |
0 | 74 |
) |
75 |
{ |
|
9 | 76 |
C_TRACE( ( _T( "DISIRouter::Connect 0x%x 0x%x 0x%x 0x%x>" ), aUID, aObjId, aCallback, this ) ); |
0 | 77 |
ASSERT_RESET_ALWAYS( aCallback, ( EISIRouterNULLPtr | EDISIRouterTraceId << KClassIdentifierShift ) ); |
78 |
TISIClient* tmp = new TISIClient(); |
|
79 |
ASSERT_RESET_ALWAYS( tmp, ( EISIRouterMemAllocFailure | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
9 | 80 |
tmp->iUID = aUID; |
0 | 81 |
tmp->iChannel = aCallback; |
9 | 82 |
TUint8 staticObjId = ReserveStaticObjId( aUID ); |
0 | 83 |
NKern::FMWait( iClientTableFastMutex ); |
9 | 84 |
TBool reserved = CheckUIDUniqueness( aUID ); |
85 |
#ifndef WITHOUT_WRAPPERS_IN_USE |
|
86 |
if( reserved ) |
|
0 | 87 |
{ |
9 | 88 |
NKern::FMSignal( iClientTableFastMutex ); |
89 |
aObjId = 0xEE; |
|
0 | 90 |
} |
91 |
else |
|
92 |
{ |
|
9 | 93 |
#endif //WITHOUT_WRAPPERS_IN_USE |
94 |
if( KNotInitializedId == staticObjId ) |
|
95 |
{ |
|
96 |
tmp->iObjId = ReserveNewDynamicObjId(); |
|
97 |
ASSERT_RESET_ALWAYS( tmp->iObjId, ( EISIRouterNULLObjId | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
98 |
} |
|
99 |
else |
|
100 |
{ |
|
101 |
tmp->iObjId = staticObjId;// check that dynamic allocation don't return statically reserved object identifiers |
|
102 |
} |
|
103 |
iClientTable[ tmp->iObjId ] = tmp; |
|
104 |
NKern::FMSignal( iClientTableFastMutex ); |
|
105 |
aObjId = tmp->iObjId; |
|
106 |
#ifndef WITHOUT_WRAPPERS_IN_USE |
|
0 | 107 |
} |
9 | 108 |
#endif |
109 |
C_TRACE( ( _T( "DISIRouter::Connect 0x%x 0x%x 0x%x<" ), aUID, aObjId, aCallback ) ); |
|
0 | 110 |
} |
111 |
||
9 | 112 |
TBool DISIRouter::CheckUIDUniqueness( const TInt32 aUID ) |
0 | 113 |
{ |
9 | 114 |
TBool ret(EFalse); |
0 | 115 |
// No tracing with mutex |
9 | 116 |
for( TInt i( 0 ); i < KMaxAmountOfObjId; i++ ) |
0 | 117 |
{ |
9 | 118 |
if( iClientTable[ i ] && ( iClientTable[ i ]->iUID == aUID ) ) |
119 |
{ |
|
120 |
#ifndef WITHOUT_WRAPPERS_IN_USE |
|
121 |
if( aUID <= KLastKernelChannel ) |
|
122 |
{ |
|
123 |
ret = ETrue; |
|
124 |
} |
|
125 |
else |
|
126 |
{ |
|
127 |
#endif //WITHOUT_WRAPPERS_IN_USE |
|
128 |
ASSERT_RESET_ALWAYS( 0, ( EISIRouterNotUniqueUID | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
129 |
#ifndef WITHOUT_WRAPPERS_IN_USE |
|
130 |
} |
|
131 |
#endif //WITHOUT_WRAPPERS_IN_USE |
|
132 |
} |
|
0 | 133 |
} |
9 | 134 |
return ret; |
0 | 135 |
} |
136 |
||
9 | 137 |
TUint8 DISIRouter::ReserveStaticObjId( const TInt32 aUID ) |
0 | 138 |
{ |
9 | 139 |
C_TRACE( ( _T( "DISIRouter::ReserveStaticObjId 0x%x 0x%x>" ), aUID ) ); |
0 | 140 |
for( TUint8 i = 0; i < iStaticObjIdTable.Count(); i++ ) |
141 |
{ |
|
142 |
if( iStaticObjIdTable[ i ]->iUID == aUID ) |
|
143 |
{ |
|
9 | 144 |
C_TRACE( ( _T( "DISIRouter::ReserveStaticObjId 0x%x 0x%x 0x%x<" ), aUID, iStaticObjIdTable[i]->iUID, iStaticObjIdTable[i]->iObjId ) ); |
0 | 145 |
return iStaticObjIdTable[i]->iObjId; |
146 |
} |
|
147 |
} |
|
148 |
return KNotInitializedId; |
|
149 |
} |
|
150 |
||
151 |
TUint8 DISIRouter::ReserveNewDynamicObjId() |
|
152 |
{ |
|
153 |
// No tracing with mutex |
|
9 | 154 |
#ifdef WITHOUT_WRAPPERS_IN_USE |
155 |
TUint8 firstAllowedObjId = KFirstAllowedObjId; |
|
156 |
#else |
|
157 |
TUint8 firstAllowedObjId = KLastKernelChannel; |
|
158 |
#endif |
|
159 |
||
160 |
for( TInt i(firstAllowedObjId); i < KMaxAmountOfObjId; i++ ) |
|
0 | 161 |
{ |
9 | 162 |
if( !iClientTable[ i ] ) |
163 |
{ |
|
164 |
TBool reserved( EFalse ); |
|
165 |
for( TUint8 j = 0; j < iStaticObjIdTable.Count(); j++ ) |
|
166 |
{ |
|
167 |
if( j == iStaticObjIdTable[ j ]->iObjId ) |
|
168 |
{ |
|
169 |
reserved = ETrue; |
|
170 |
break; |
|
171 |
} |
|
172 |
} |
|
173 |
if( !reserved ) |
|
174 |
{ |
|
175 |
return i; |
|
176 |
} |
|
177 |
} |
|
0 | 178 |
} |
9 | 179 |
return KNotInitializedId; |
0 | 180 |
} |
181 |
||
182 |
void DISIRouter::Disconnect( |
|
183 |
const TUint8 aObjId |
|
184 |
) |
|
185 |
{ |
|
186 |
C_TRACE( ( _T( "DISIRouter::Disconnect 0x%x>" ), aObjId ) ); |
|
187 |
TISIClient* tmp = iClientTable[ aObjId ]; |
|
188 |
NKern::FMWait( iClientTableFastMutex ); |
|
9 | 189 |
iClientTable[ aObjId ] = NULL; |
0 | 190 |
NKern::FMSignal( iClientTableFastMutex ); |
191 |
//Must exist |
|
192 |
delete tmp; |
|
9 | 193 |
tmp = NULL; |
0 | 194 |
C_TRACE( ( _T( "DISIRouter::Disconnect 0x%x<" ), aObjId ) ); |
195 |
} |
|
196 |
||
197 |
TDfcQue* DISIRouter::GetDfcThread( |
|
198 |
const TISIDfcQThreadType aType |
|
199 |
) |
|
200 |
{ |
|
201 |
C_TRACE( ( _T( "DISIRouter::GetDfcThread<>" ) ) ); |
|
9 | 202 |
return iShClientThreadContainer->AllocateThread( aType ); |
0 | 203 |
} |
204 |
||
205 |
void DISIRouter::FreeDfcThread( TDfcQue* aThread ) |
|
206 |
{ |
|
207 |
C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x>" ), aThread ) ); |
|
9 | 208 |
iShClientThreadContainer->DeallocateThread( aThread ); |
0 | 209 |
C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x<" ), aThread ) ); |
210 |
} |
|
211 |
||
9 | 212 |
EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::GetIf() |
0 | 213 |
{ |
9 | 214 |
C_TRACE( ( _T( "MISIObjectRouterIf::GetIf<>" ) ) ); |
0 | 215 |
return DISIRouter::GetRouter(); |
216 |
} |
|
217 |
||
218 |
DISIRouter::DISIRouter( |
|
219 |
// None |
|
220 |
) |
|
221 |
{ |
|
222 |
C_TRACE( ( _T( "DISIRouter::DISIRouter>" ) ) ); |
|
9 | 223 |
iShClientThreadContainer = new DISIThreadContainer(); |
224 |
ASSERT_RESET_ALWAYS( iShClientThreadContainer, ( EISIRouterMemAllocFailure1 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
225 |
iInitThread = iShClientThreadContainer->AllocateThread( MISIObjectRouterIf::EISIKernelMainThread ); |
|
0 | 226 |
ASSERT_RESET_ALWAYS( iInitThread, ( EISIRouterNULLThreadPointer | EDISIRouterTraceId << KClassIdentifierShift ) ); |
227 |
iInitializeDfc = new TDfc( InitializeDfc, this, iInitThread, KDfcPriority ); |
|
228 |
ASSERT_RESET_ALWAYS( iInitializeDfc, ( EISIRouterMemAllocFailure2 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
229 |
iInitializeDfc->Enque(); |
|
230 |
C_TRACE( ( _T( "DISIRouter::DISIRouter<" ) ) ); |
|
231 |
} |
|
232 |
||
233 |
void DISIRouter::InitializeDfc( |
|
234 |
TAny* aPtr |
|
235 |
) |
|
236 |
{ |
|
237 |
C_TRACE( ( _T( "DISIRouter::InitializeDfc>" ) ) ); |
|
238 |
DISIRouter* self = reinterpret_cast<DISIRouter*>( aPtr ); |
|
239 |
self->Initialize(); |
|
240 |
C_TRACE( ( _T( "DISIRouter::InitializeDfc<" ) ) ); |
|
241 |
} |
|
242 |
||
243 |
void DISIRouter::Initialize( |
|
244 |
// None |
|
245 |
) |
|
246 |
{ |
|
9 | 247 |
C_TRACE( ( _T( "DISIRouter::Initialize> this: 0x%x" ), this ) ); |
248 |
iSelfPtr = this; |
|
0 | 249 |
iClientTableFastMutex = new NFastMutex(); |
250 |
ASSERT_RESET_ALWAYS( iClientTableFastMutex, ( EISIRouterNULLPtr2 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
251 |
for( TInt i( 0 ); i < KMaxAmountOfObjId; i++) |
|
252 |
{ |
|
253 |
iClientTable[ i ] = NULL; |
|
254 |
} |
|
9 | 255 |
// comment improve hex or des |
256 |
// nameservice, communication manager, routerservice... |
|
0 | 257 |
// UID ObjId |
9 | 258 |
iStaticObjIdTable.Append( new TStaticId( 123, 0x70 ) ); // for testing ISI API |
259 |
iStaticObjIdTable.Append( new TStaticId( 200, 0x71 ) ); // for testing ISI API |
|
260 |
iStaticObjIdTable.Append( new TStaticId( 201, 0x72 ) ); // for testing ISI API |
|
261 |
iStaticObjIdTable.Append( new TStaticId( 202, 0x73 ) ); // for testing ISI API |
|
262 |
// |
|
263 |
#ifndef WITHOUT_WRAPPERS_IN_USE |
|
264 |
// Map all the kernel channels as they used to be |
|
265 |
for( TInt id( KFirstUserChannel ); id < KLastKernelChannel; id++ ) |
|
266 |
{ |
|
267 |
if ( ( id != KNotInitializedId ) && |
|
268 |
( id != PN_OBJ_EVENT_MULTICAST ) && |
|
269 |
( id != PN_OBJ_EVENT_MULTICAST ) && |
|
270 |
( id != ROUTER_OBJECT_IDENTIFIER ) && |
|
271 |
( id != PIPEHANDLER_OBJECT_IDENTIFIER ) ) |
|
272 |
{ |
|
273 |
iStaticObjIdTable.Append( new TStaticId( id, id ) ); |
|
274 |
} |
|
275 |
else |
|
276 |
{ |
|
277 |
iStaticObjIdTable.Append( new TStaticId( id, 0xEE ) ); |
|
278 |
} |
|
279 |
} |
|
280 |
// Map all the kernel channels as they used to be |
|
281 |
#endif // WITHOUT_WRAPPERS_IN_USE |
|
282 |
// ? vaikutus iShClientThreadContainer->DeallocateThread( iInitThread ); |
|
283 |
||
284 |
iStaticObjIdTable.Append( new TStaticId( 0xD11BADA1, KNotInitializedId ) );// Make sure no one can get KNotInitializedId obj id |
|
285 |
iStaticObjIdTable.Append( new TStaticId( KCommunicationManagerUID, PN_OBJ_EVENT_MULTICAST ) ); |
|
286 |
iStaticObjIdTable.Append( new TStaticId( KNameServiceUID, PN_OBJ_ROUTING_REQ ) ); |
|
287 |
iStaticObjIdTable.Append( new TStaticId( KIsiShRouterServiceUID, ROUTER_OBJECT_IDENTIFIER ) ); |
|
288 |
iStaticObjIdTable.Append( new TStaticId( KIsiShPipeHandlerUID, PIPEHANDLER_OBJECT_IDENTIFIER ) ); |
|
0 | 289 |
|
9 | 290 |
iShCLTransceiver = new DISICLTransceiver( *this, iInitThread ); |
291 |
ASSERT_RESET_ALWAYS( iShCLTransceiver, ( EISIRouterNULLPtr1 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
292 |
||
0 | 293 |
C_TRACE( ( _T( "DISIRouter::Initialize<" ) ) ); |
294 |
} |
|
295 |
||
296 |
DISIRouter::~DISIRouter( |
|
297 |
// None |
|
298 |
) |
|
299 |
{ |
|
300 |
C_TRACE( ( _T( "DISIRouter::~DISIRouter>" ) ) ); |
|
301 |
iSelfPtr = NULL; |
|
302 |
for( TUint8 i( 0 ); i < iStaticObjIdTable.Count(); i++) |
|
303 |
{ |
|
304 |
delete iStaticObjIdTable[ i ]; |
|
305 |
iStaticObjIdTable[ i ] = NULL; |
|
306 |
} |
|
307 |
iStaticObjIdTable.Reset(); |
|
308 |
for( TInt i( 0 ); i <= KMaxAmountOfObjId; i++) |
|
309 |
{ |
|
310 |
if( iClientTable[ i ] ) |
|
311 |
{ |
|
312 |
delete iClientTable[ i ]; |
|
313 |
iClientTable[ i ] = NULL; |
|
314 |
} |
|
315 |
} |
|
9 | 316 |
// All must exist otherways reseted. |
0 | 317 |
delete iInitializeDfc; |
318 |
iInitializeDfc = NULL; |
|
9 | 319 |
delete iShClientThreadContainer; |
320 |
iShClientThreadContainer = NULL; |
|
321 |
delete iShCLTransceiver; |
|
322 |
iShCLTransceiver = NULL; |
|
0 | 323 |
delete iClientTableFastMutex; |
324 |
iClientTableFastMutex = NULL; |
|
325 |
C_TRACE( ( _T( "DISIRouter::~DISIRouter<" ) ) ); |
|
326 |
} |
|
327 |
||
328 |
TInt DISIRouter::Send( |
|
329 |
TDes8& aMessage, |
|
330 |
const TUint8 aObjId |
|
331 |
) |
|
332 |
{ |
|
333 |
C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
334 |
|
9 | 335 |
if( ( ( aObjId == EIscNokiaUsbPhonetLink ) && ( GET_SENDER_DEV( aMessage.Ptr() ) == PN_DEV_PC ) ) || |
336 |
( aObjId == PN_OBJ_ROUTING_REQ ) || |
|
337 |
( aObjId == PN_OBJ_EVENT_MULTICAST ) || |
|
338 |
( aObjId == ROUTER_OBJECT_IDENTIFIER ) || |
|
339 |
( aObjId == PIPEHANDLER_OBJECT_IDENTIFIER ) ) |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
340 |
{ |
9 | 341 |
// No need to update sender dev and obj id |
342 |
C_TRACE( ( _T( "DISIRouter::Send message tx address not needed to updata 0x%x 0x%x>" ), aObjId, GET_SENDER_DEV( aMessage.Ptr() ) ) ); |
|
343 |
} |
|
344 |
else |
|
345 |
{ |
|
346 |
TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
347 |
SET_SENDER_DEV( messageBlockPtr, PN_DEV_OWN ); |
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
348 |
SET_SENDER_OBJ( messageBlockPtr, aObjId ); |
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
349 |
} |
9 | 350 |
TInt error = iShCLTransceiver->RouteISIMessage( aMessage ); |
351 |
C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x<" ), &aMessage, aObjId ) ); |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
352 |
return error; |
0 | 353 |
} |
354 |
||
355 |
TBool DISIRouter::Receive( TDes8& aMessage, const TUint8 aObjId ) |
|
356 |
{ |
|
357 |
C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
358 |
TBool error( EFalse ); |
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
359 |
TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); |
9 | 360 |
|
361 |
NKern::FMWait( iClientTableFastMutex ); |
|
362 |
if( iClientTable[ aObjId ] ) |
|
0 | 363 |
{ |
9 | 364 |
NKern::FMSignal( iClientTableFastMutex ); |
365 |
( iClientTable[ aObjId ]->iChannel )->Receive( aMessage ); //may not be safe, consider receive/delete sync |
|
366 |
C_TRACE( ( _T( "DISIRouter::Receive ok 0x%x 0x%x" ), &aMessage, aObjId ) ); |
|
367 |
error = ETrue; |
|
368 |
} |
|
369 |
else |
|
370 |
{ |
|
371 |
NKern::FMSignal( iClientTableFastMutex ); |
|
372 |
C_TRACE( ( _T( "DISIRouter::Receive failed 0x%x 0x%x" ), &aMessage, aObjId ) ); |
|
373 |
error = EFalse; |
|
374 |
} |
|
375 |
||
376 |
C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x %d<" ), &aMessage, aObjId, error ) ); |
|
377 |
return error; |
|
7
fa67e03b87df
New release based on our 2010wk08 release
mikaruus <mika.a.ruuskanen@nokia.com>
parents:
0
diff
changeset
|
378 |
|
0 | 379 |
} |
380 |
||
381 |
DECLARE_STANDARD_EXTENSION() |
|
382 |
{ |
|
9 | 383 |
Kern::Printf( "ISI Router kext>" ); |
0 | 384 |
// Create a container extension |
385 |
DISIRouter* extension = new DISIRouter(); |
|
386 |
TRACE_ASSERT( extension ); |
|
9 | 387 |
Kern::Printf( "ISI Router kext 0x%x<", extension ); |
0 | 388 |
return extension ? KErrNone : KErrNoMemory; |
389 |
} |
|
390 |
||
391 |
DECLARE_EXTENSION_LDD() |
|
392 |
{ |
|
9 | 393 |
Kern::Printf( "ISI Router kextldd>" ); |
0 | 394 |
DLogicalDevice* device = new DISIDevice; |
395 |
TRACE_ASSERT( device ); |
|
9 | 396 |
Kern::Printf( "ISI Router kextldd 0x%x<", device ); |
397 |
return device; |
|
0 | 398 |
} |