Revision: 201007
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:48:52 +0200
changeset 25 8c311f9acc5e
parent 8 7e15987c4500
child 26 0ae0f29418cd
Revision: 201007 Kit: 201011
layers.sysdef.xml
sysdef_1_4_0.dtd
sysdef_1_5_1.dtd
tsrc/group/bld.inf
usbclasses/usbmscpersonality/inc/CUsbActiveMscHandlerMdrv.h
usbclasses/usbmscpersonality/src/CUsbActiveMscHandlerMdrv.cpp
usbengines/usbotgwatcher/group/usbotgwatcher.mmp
usbengines/usbotgwatcher/inc/cusbbusactivityobserver.h
usbengines/usbotgwatcher/inc/cusbhosteventnotificationobserver.h
usbengines/usbotgwatcher/inc/cusbidpinobserver.h
usbengines/usbotgwatcher/inc/cusbindicatornotifier.h
usbengines/usbotgwatcher/inc/cusbmessagenotificationobserver.h
usbengines/usbotgwatcher/inc/cusbnotenotifier.h
usbengines/usbotgwatcher/inc/cusbnotifier.h
usbengines/usbotgwatcher/inc/cusbnotifmanager.h
usbengines/usbotgwatcher/inc/cusbotgstateobserver.h
usbengines/usbotgwatcher/inc/cusbotgwatcher.h
usbengines/usbotgwatcher/inc/cusbpersonalityswitch.h
usbengines/usbotgwatcher/inc/cusbservicecontrol.h
usbengines/usbotgwatcher/inc/cusbstate.h
usbengines/usbotgwatcher/inc/cusbstatehostabase.h
usbengines/usbotgwatcher/inc/cusbstatehostahost.h
usbengines/usbotgwatcher/inc/cusbstatehostaidle.h
usbengines/usbotgwatcher/inc/cusbstatehostainitiate.h
usbengines/usbotgwatcher/inc/cusbstatehostainitiatebase.h
usbengines/usbotgwatcher/inc/cusbstatehostaperipheral.h
usbengines/usbotgwatcher/inc/cusbstatehostdelayattachedhandle.h
usbengines/usbotgwatcher/inc/cusbstatehostdelayhandle.h
usbengines/usbotgwatcher/inc/cusbstatehostdelaynotattachedhandle.h
usbengines/usbotgwatcher/inc/cusbstatehosthandle.h
usbengines/usbotgwatcher/inc/cusbstatehosthandledropping.h
usbengines/usbotgwatcher/inc/cusbstatehostundefined.h
usbengines/usbotgwatcher/inc/cusbtimer.h
usbengines/usbotgwatcher/inc/cusbvbusobserver.h
usbengines/usbotgwatcher/inc/cusbwaitnotifier.h
usbengines/usbotgwatcher/inc/cusbwarningnotifier.h
usbengines/usbotgwatcher/inc/debug.h
usbengines/usbotgwatcher/inc/definitions.h
usbengines/usbotgwatcher/inc/errors.h
usbengines/usbotgwatcher/inc/panic.h
usbengines/usbotgwatcher/src/cusbbusactivityobserver.cpp
usbengines/usbotgwatcher/src/cusbhosteventnotificationobserver.cpp
usbengines/usbotgwatcher/src/cusbidpinobserver.cpp
usbengines/usbotgwatcher/src/cusbindicatornotifier.cpp
usbengines/usbotgwatcher/src/cusbmessagenotificationobserver.cpp
usbengines/usbotgwatcher/src/cusbnotenotifier.cpp
usbengines/usbotgwatcher/src/cusbnotifier.cpp
usbengines/usbotgwatcher/src/cusbnotifmanager.cpp
usbengines/usbotgwatcher/src/cusbotgstateobserver.cpp
usbengines/usbotgwatcher/src/cusbotgwatcher.cpp
usbengines/usbotgwatcher/src/cusbpersonalityswitch.cpp
usbengines/usbotgwatcher/src/cusbservicecontrol.cpp
usbengines/usbotgwatcher/src/cusbstate.cpp
usbengines/usbotgwatcher/src/cusbstatehostabase.cpp
usbengines/usbotgwatcher/src/cusbstatehostahost.cpp
usbengines/usbotgwatcher/src/cusbstatehostaidle.cpp
usbengines/usbotgwatcher/src/cusbstatehostainitiate.cpp
usbengines/usbotgwatcher/src/cusbstatehostainitiatebase.cpp
usbengines/usbotgwatcher/src/cusbstatehostaperipheral.cpp
usbengines/usbotgwatcher/src/cusbstatehostdelayattachedhandle.cpp
usbengines/usbotgwatcher/src/cusbstatehostdelayhandle.cpp
usbengines/usbotgwatcher/src/cusbstatehostdelaynotattachedhandle.cpp
usbengines/usbotgwatcher/src/cusbstatehosthandle.cpp
usbengines/usbotgwatcher/src/cusbstatehosthandledropping.cpp
usbengines/usbotgwatcher/src/cusbstatehostundefined.cpp
usbengines/usbotgwatcher/src/cusbtimer.cpp
usbengines/usbotgwatcher/src/cusbvbusobserver.cpp
usbengines/usbotgwatcher/src/cusbwaitnotifier.cpp
usbengines/usbotgwatcher/src/cusbwarningnotifier.cpp
usbengines/usbotgwatcher/src/panic.cpp
usbengines/usbremotepersonality/src/csetpersonality.cpp
usbengines/usbwatcher/group/bld.inf
usbengines/usbwatcher/inc/cusbactivepersonalityhandler.h
usbengines/usbwatcher/inc/cusbwatcher.h
usbengines/usbwatcher/inc/cusbwatcher.inl
usbengines/usbwatcher/inc/debug.h
usbengines/usbwatcher/rom/mtp_symbian_temp.iby
usbengines/usbwatcher/rom/usbacmconfiguration.hby
usbengines/usbwatcher/src/cusbactivepersonalityhandler.cpp
usbengines/usbwatcher/src/cusbwatcher.cpp
usbengines/usbwatcher/src/usbman_pcsmtppam.rss
usbservices_plat/usb_notifier_api/inc/usbuinotif.h
usbuis/group/bld.inf
usbuis/usbui/help/data/xhtml.zip
usbuis/usbui/help/inc/usb.hlp.hrh
usbuis/usbui/tsrc/usbuiapitest/bmarm/usbuiapitestu.def
usbuis/usbui/tsrc/usbuiapitest/bwins/usbuiapitestu.def
usbuis/usbui/tsrc/usbuiapitest/conf/ui_usbuiapitest.cfg
usbuis/usbui/tsrc/usbuiapitest/eabi/usbuiapitestu.def
usbuis/usbui/tsrc/usbuiapitest/group/Bld.inf
usbuis/usbui/tsrc/usbuiapitest/group/build_sis_ats.bat
usbuis/usbui/tsrc/usbuiapitest/group/build_sis_phone.bat
usbuis/usbui/tsrc/usbuiapitest/group/usbuiapitest.mmp
usbuis/usbui/tsrc/usbuiapitest/group/usbuiapitest.pkg
usbuis/usbui/tsrc/usbuiapitest/group/usbuiapitest_phone.pkg
usbuis/usbui/tsrc/usbuiapitest/inc/usbuiapitest.h
usbuis/usbui/tsrc/usbuiapitest/inc/usbuiapitestdebug.inl
usbuis/usbui/tsrc/usbuiapitest/init/usbuiapitest.ini
usbuis/usbui/tsrc/usbuiapitest/init/usbuiapitest_phone.ini
usbuis/usbui/tsrc/usbuiapitest/src/usbuiapitest.cpp
usbuis/usbui/tsrc/usbuiapitest/src/usbuiapitestblocks.cpp
usbuis/usbuinotif/BWINS/usbuinotifu.def
usbuis/usbuinotif/EABI/usbuinotifu.def
usbuis/usbuinotif/data/usbuinotif.rss
usbuis/usbuinotif/group/bld.inf
usbuis/usbuinotif/group/usbavkonnotif.mmp
usbuis/usbuinotif/group/usbuinotif.mmp
usbuis/usbuinotif/inc/usbuincableconnectednotifier.h
usbuis/usbuinotif/inc/usbuinotifdialerwatcher.h
usbuis/usbuinotif/inc/usbuinotifmsmmerror.h
usbuis/usbuinotif/inc/usbuinotifotgerror.h
usbuis/usbuinotif/inc/usbuinqueriesnotifier.h
usbuis/usbuinotif/inc/usbuinqueriesnotifiermdrv.h
usbuis/usbuinotif/loc/usbuinotif.loc
usbuis/usbuinotif/rom/usbuinotif.iby
usbuis/usbuinotif/src/usbavkonmain.cpp
usbuis/usbuinotif/src/usbuincableconnectednotifier.cpp
usbuis/usbuinotif/src/usbuinmain.cpp
usbuis/usbuinotif/src/usbuinotifdialerwatcher.cpp
usbuis/usbuinotif/src/usbuinotifmsmmerror.cpp
usbuis/usbuinotif/src/usbuinotifotgerror.cpp
usbuis/usbuinotif/src/usbuinotifotgwarning.cpp
usbuis/usbuinotif/src/usbuinqueriesnotifiermdrv.cpp
usbuis/usbuinotif/tsrc/usbuinotifapitest/bmarm/usbuinotifapitestu.def
usbuis/usbuinotif/tsrc/usbuinotifapitest/bwins/usbuinotifapitestu.def
usbuis/usbuinotif/tsrc/usbuinotifapitest/conf/ui_usbuinotifapitest.cfg
usbuis/usbuinotif/tsrc/usbuinotifapitest/eabi/usbuinotifapitestu.def
usbuis/usbuinotif/tsrc/usbuinotifapitest/group/bld.inf
usbuis/usbuinotif/tsrc/usbuinotifapitest/group/build_sis_ats.bat
usbuis/usbuinotif/tsrc/usbuinotifapitest/group/build_sis_phone.bat
usbuis/usbuinotif/tsrc/usbuinotifapitest/group/usbuinotifapitest.mmp
usbuis/usbuinotif/tsrc/usbuinotifapitest/group/usbuinotifapitest.pkg
usbuis/usbuinotif/tsrc/usbuinotifapitest/group/usbuinotifapitest_phone.pkg
usbuis/usbuinotif/tsrc/usbuinotifapitest/inc/usbuinotifapitest.h
usbuis/usbuinotif/tsrc/usbuinotifapitest/inc/usbuinotifapitestdebug.inl
usbuis/usbuinotif/tsrc/usbuinotifapitest/init/usbuinotifapitest.ini
usbuis/usbuinotif/tsrc/usbuinotifapitest/init/usbuinotifapitest_phone.ini
usbuis/usbuinotif/tsrc/usbuinotifapitest/src/usbuinotifapitest.cpp
usbuis/usbuinotif/tsrc/usbuinotifapitest/src/usbuinotifapitestblocks.cpp
usbuis/usbuiqt/icons/usb_icon_mode_2.svg
usbuis/usbuiqt/icons/usb_icon_mode_4.svg
usbuis/usbuiqt/icons/usb_icon_mode_5.svg
usbuis/usbuiqt/inc/mydebug.h
usbuis/usbuiqt/inc/usbmainview.h
usbuis/usbuiqt/inc/usbuimodelactive.h
usbuis/usbuiqt/inc/usbuisettingmodel.h
usbuis/usbuiqt/inc/usbviewmanager.h
usbuis/usbuiqt/rom/usbsettings.iby
usbuis/usbuiqt/rom/usbsettingsresources.iby
usbuis/usbuiqt/src/main.cpp
usbuis/usbuiqt/src/usbapplication.qm
usbuis/usbuiqt/src/usbapplication.qrc
usbuis/usbuiqt/src/usbapplication.ts
usbuis/usbuiqt/src/usbapplication.xls
usbuis/usbuiqt/src/usbapplication_reg.rss
usbuis/usbuiqt/src/usbicons.qrc
usbuis/usbuiqt/src/usbmainview.cpp
usbuis/usbuiqt/src/usbuimodelactive.cpp
usbuis/usbuiqt/src/usbuisettingmodel.cpp
usbuis/usbuiqt/src/usbviewmanager.cpp
usbuis/usbuiqt/usbapplication.pro
--- a/layers.sysdef.xml	Tue Feb 02 00:52:37 2010 +0200
+++ b/layers.sysdef.xml	Fri Mar 19 09:48:52 2010 +0200
@@ -1,24 +1,23 @@
 <?xml version="1.0"?>
-<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
   <!ENTITY layer_real_source_path "sf/mw/usbservices" >
 ]>
 
-<SystemDefinition name="usbservices" schema="1.4.0">
+<SystemDefinition name="usbservices" schema="1.5.1">
   <systemModel>
     <layer name="mw_layer">
       <module name="usbservices">
         <unit unitID="lcdo.usbservices" mrp="" bldFile="&layer_real_source_path;/group" name="usbservices" />
       </module>
-      <module name="">
+      <module name="non_sf_components">
         <unit unitID="lcdo.usbservices.usbclasses.usbosdescriptorhandler" mrp="" bldFile="&layer_real_source_path;/usbclasses/usbosdescriptorhandler/group" filter="!sf_build" name="usbservices_usbclasses_usbosdescriptorhandler" />
         <unit unitID="lcdo.usbservices.usbclasses.msmmplugin" mrp="" bldFile="&layer_real_source_path;/usbclasses/msmmplugin/group" filter="!sf_build" name="usbservices_usbclasses_msmmplugin" />
         <unit unitID="lcdo.usbservices.usbclasses.usbhidclassdriver" mrp="" bldFile="&layer_real_source_path;/usbclasses/usbhidclassdriver/group" filter="!sf_build" name="usbservices_usbclasses_usbhidclassdriver" />
-      </module>      
+        <unit unitID="lcdo.usbservices.usbuis.rndisui" mrp="" bldFile="&layer_real_source_path;/usbuis/rndisui/group" filter="!sf_build" name="usbservices_usbuis_rndisui" />
+      </module>
+      <module name="usbuiqt">
+        <unit unitID="lcdo.usbservices.usbclasses.usbuiqt" mrp="" bldFile="&layer_real_source_path;/usbuis/usbuiqt" name="usbservices_usbuis_usbapplication" proFile="usbapplication.pro" qmakeArgs="" />
+      </module>
     </layer>
-    <layer name="api_test_layer">
-      <module name="usbservices_test">
-        <unit unitID="lcdo.usbservices_test" mrp="" bldFile="&layer_real_source_path;/tsrc/group" name="usbservices_test" />
-      </module>
-    </layer>    
   </systemModel>
 </SystemDefinition>
--- a/sysdef_1_4_0.dtd	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
- <!ELEMENT SystemDefinition (systemModel?, build?)>
- <!ATTLIST SystemDefinition
-  name CDATA #REQUIRED
-  schema CDATA #REQUIRED>
- <!ELEMENT systemModel (layer+)>
- <!ELEMENT layer (logicalset* | module*)*>
- <!ATTLIST layer
-  name CDATA #REQUIRED
-  levels CDATA #IMPLIED
-  span CDATA #IMPLIED>
- <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalset name CDATA #REQUIRED>
- <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
- <!ATTLIST logicalsubset name CDATA #REQUIRED>
- <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
- <!ATTLIST module
-  name CDATA #REQUIRED
-  level CDATA #IMPLIED>
- <!ELEMENT component (unit* | package* | prebuilt*)*>
- <!ATTLIST component name CDATA #REQUIRED>
- <!ELEMENT unit EMPTY>
- <!ATTLIST unit
-  unitID ID #REQUIRED
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  bldFile CDATA #REQUIRED
-  priority CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT package EMPTY>
- <!ATTLIST package
-  name CDATA #REQUIRED
-  mrp CDATA #REQUIRED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT prebuilt EMPTY>
- <!ATTLIST prebuilt
-  name CDATA #REQUIRED
-  version CDATA #REQUIRED
-  late (Y|N) #IMPLIED
-  filter CDATA #IMPLIED
-  contract CDATA #IMPLIED>
- <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
- <!ELEMENT unitList (unitRef+)>
- <!ATTLIST unitList
-  name ID #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT unitRef EMPTY>
- <!ATTLIST unitRef unit IDREF #REQUIRED>
- <!ELEMENT targetList EMPTY>
- <!ATTLIST targetList
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  target IDREFS #REQUIRED>
- <!ELEMENT target EMPTY>
- <!ATTLIST target
-  name ID #REQUIRED
-  abldTarget CDATA #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT option EMPTY>
- <!ATTLIST option
-  name ID #REQUIRED
-  abldOption CDATA #REQUIRED
-  description CDATA #REQUIRED
-  enable (Y | N | y | n) #REQUIRED>
- <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
- <!ATTLIST configuration
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  filter CDATA #REQUIRED>
- <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
- <!ELEMENT unitListRef EMPTY>
- <!ATTLIST unitListRef unitList IDREF #REQUIRED>
- <!ELEMENT layerRef EMPTY>
- <!ATTLIST layerRef layerName CDATA #REQUIRED>
- <!ELEMENT buildLayer EMPTY>
- <!ATTLIST buildLayer
-  command CDATA #REQUIRED
-  targetList IDREFS #IMPLIED
-  unitParallel (Y | N | y | n) #REQUIRED
-  targetParallel (Y | N | y | n) #IMPLIED>
- <!ELEMENT specialInstructions EMPTY>
- <!ATTLIST specialInstructions
-  name CDATA #REQUIRED
-  cwd CDATA #REQUIRED
-  command CDATA #REQUIRED>  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_5_1.dtd	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,88 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+  name CDATA #REQUIRED
+  schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+  name CDATA #REQUIRED
+  levels CDATA #IMPLIED
+  span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+  name CDATA #REQUIRED
+  level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+  unitID ID #REQUIRED
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  bldFile CDATA #REQUIRED
+  priority CDATA #IMPLIED
+  contract CDATA #IMPLIED
+  proFile CDATA #IMPLIED
+  qmakeArgs CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+  name CDATA #REQUIRED
+  mrp CDATA #REQUIRED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+  name CDATA #REQUIRED
+  version CDATA #REQUIRED
+  late (Y|N) #IMPLIED
+  filter CDATA #IMPLIED
+  contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+  name ID #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+  name ID #REQUIRED
+  abldTarget CDATA #REQUIRED
+  description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+  name ID #REQUIRED
+  abldOption CDATA #REQUIRED
+  description CDATA #REQUIRED
+  enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+  name ID #REQUIRED
+  description CDATA #REQUIRED
+  filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+  command CDATA #REQUIRED
+  targetList IDREFS #IMPLIED
+  unitParallel (Y | N | y | n) #REQUIRED
+  targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+  name CDATA #REQUIRED
+  cwd CDATA #REQUIRED
+  command CDATA #REQUIRED>  
--- a/tsrc/group/bld.inf	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* Copyright (c) 2006 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:  Build information file for project 
-*
-*/
-
-
-PRJ_PLATFORMS
-DEFAULT
-
-//build files for shortlinkconn
-#include "../../../shortlinkconn/localconnectivityservice/lcstylustap/tsrc/LcStylusTapTest/group/bld.inf"
-#include "../../../shortlinkconn/localconnectivityservice/generichid/tsrc/GenericHidTest/group/bld.inf"
-
-//build files for usb
-#include "../../usbclasses/msmmplugin/tsrc/MsmmPluginTest/group/bld.inf"
-#include "../../usbuis/usbui/tsrc/USBUiApiTest/group/bld.inf"
-#include "../../usbuis/usbuinotif/tsrc/USBUiNotifApiTest/group/bld.inf"
-#include "../../usbclasses/usbhidclassdriver/tsrc/UsbHidClassDriverTest/group/bld.inf"
-
-
-PRJ_EXPORTS
-
-
-PRJ_MMPFILES
-
-PRJ_TESTMMPFILES
-
-PRJ_TESTEXPORTS
--- a/usbclasses/usbmscpersonality/inc/CUsbActiveMscHandlerMdrv.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbclasses/usbmscpersonality/inc/CUsbActiveMscHandlerMdrv.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 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"
@@ -415,6 +415,11 @@
     TBool iMountChanged;
 
     /**
+     * If query note shown by us
+     */
+    TBool iIsQueryNoteShown;
+    
+    /**
      * Used to load devenccommonutils.dll and check the device encryption status
      */
     RLibrary iLibrary;
--- a/usbclasses/usbmscpersonality/src/CUsbActiveMscHandlerMdrv.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbclasses/usbmscpersonality/src/CUsbActiveMscHandlerMdrv.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 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"
@@ -47,7 +47,9 @@
 // ----------------------------------------------------------------------------
 //
 CUsbActiveMscHandler::CUsbActiveMscHandler(TUsbPersonalityParams& aPersonalityParams)
-    : CUsbPersonalityPlugin(aPersonalityParams), iMountChanged(EFalse)
+    : CUsbPersonalityPlugin(aPersonalityParams), 
+      iMountChanged(EFalse),
+      iIsQueryNoteShown(EFalse)
     {
     CActiveScheduler::Add( this );
     }
@@ -256,9 +258,13 @@
         
     RemoveMassStorageFileSystem();
 
-    // Remove all queries shown by this personality
-    iPersonalityParams.PersonalityNotifier().CancelQuery(KQueriesNotifier);
-
+    if (iIsQueryNoteShown)
+        {
+        // Remove all queries shown by this personality
+        iPersonalityParams.PersonalityNotifier().CancelQuery(KQueriesNotifier);
+        iIsQueryNoteShown = EFalse;
+        }
+        
     iMscState = EUsbMscStateIdle;
 
     iRequestStatus = &aStatus;
@@ -295,6 +301,7 @@
                     {
                     if ( GlobalSystemState() == EUsbGSStateCategoryNormal )
                         {
+                        iIsQueryNoteShown = ETrue;
                         // if the error is something abnormal, note still needs to be shown
                         iQueryParams().iQuery = EUSBStorageMediaFailure;
                         iPersonalityParams.PersonalityNotifier().ShowQuery(
@@ -491,6 +498,7 @@
         {
         FLOG( _L( "[USBWATCHER]\tCUsbActiveMscHandler::GetDrives: No removable drives found." ) );
 
+        iIsQueryNoteShown = ETrue;
         iQueryParams().iQuery = EUSBStorageMediaFailure;
         iPersonalityParams.PersonalityNotifier().ShowQuery(KQueriesNotifier, iQueryParams, iDummy);
 
--- a/usbengines/usbotgwatcher/group/usbotgwatcher.mmp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/group/usbotgwatcher.mmp	Fri Mar 19 09:48:52 2010 +0200
@@ -39,16 +39,18 @@
 
 SOURCE                  cusbotgwatcher.cpp
 SOURCE					cusbservicecontrol.cpp
-SOURCE					cusbpersonalityswitch.cpp
 
 SOURCE					cusbstate.cpp
 SOURCE                  cusbstatehostabase.cpp
-SOURCE                  cusbstatehostainitiatebase.cpp
 SOURCE                  cusbstatehostainitiate.cpp
 SOURCE                  cusbstatehostahost.cpp
 SOURCE                  cusbstatehostaperipheral.cpp
-SOURCE                  cusbstatehostaidle.cpp
-SOURCE                  cusbstatehosthandle.cpp
+SOURCE					cusbstatehosthandle.cpp
+SOURCE					cusbstatehostdelayhandle.cpp
+SOURCE					cusbstatehostdelayattachedhandle.cpp
+SOURCE                  cusbstatehostdelaynotattachedhandle.cpp
+SOURCE                  cusbstatehosthandledropping.cpp
+SOURCE					cusbstatehostundefined.cpp
 
 SOURCE					cusbwaitnotifier.cpp
 SOURCE					cusbnotifmanager.cpp
--- a/usbengines/usbotgwatcher/inc/cusbbusactivityobserver.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbbusactivityobserver.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Monitors USB activity
+ * 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:  Monitors USB activity
+ *
+ */
 
 #ifndef C_USBBUSACTIVITYOBSERVER_H
 #define C_USBBUSACTIVITYOBSERVER_H
@@ -39,13 +38,13 @@
      * Called when when bus is in Idle, and some activity appears on the bus
      */
     virtual void BusActiveL() = 0;
-    
+
     /**
-      * Called when when error happened
-      * @param aError errorcode
-      */
-     virtual void BusActivityErrorL(TInt aError) = 0;   
-    
+     * Called when when error happened
+     * @param aError errorcode
+     */
+    virtual void BusActivityErrorL(TInt aError) = 0;
+
     };
 
 /**
@@ -82,13 +81,13 @@
      * Adds subscriber for the notification
      * @param aObserver Observer
      */
-    void SubscribeL(MUsbBusActivityObserver* aObserver);
+    void SubscribeL(MUsbBusActivityObserver& aObserver);
 
     /**
      * Removes observer
      * @param aObserver Observer
      */
-    void UnsubscribeL(MUsbBusActivityObserver* aObserver);
+    void UnsubscribeL(MUsbBusActivityObserver& aObserver);
 
 private:
 
@@ -126,7 +125,7 @@
 
     /**
      * The observer reports state changes to own observers
-     * Owns
+     * Not owns
      */
     RPointerArray<MUsbBusActivityObserver> iObservers;
 
--- a/usbengines/usbotgwatcher/inc/cusbhosteventnotificationobserver.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbhosteventnotificationobserver.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Monitors host events
+ * 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:  Monitors host events
+ *
+ */
 
 #ifndef C_USBHOSTEVENTNOTIFICATIONOBSERVER_H
 #define C_USBHOSTEVENTNOTIFICATIONOBSERVER_H
@@ -63,11 +62,11 @@
      *  @param aInfo additional information
      */
     virtual void DriverLoadFailureL(TDeviceEventInformation aInfo) = 0;
-    
+
     /**
-      *  Called when error happens while observing
-      *  @param aError error code
-      */
+     *  Called when error happens while observing
+     *  @param aError error code
+     */
     virtual void HostEventNotificationErrorL(TInt aError) = 0;
 
     };
@@ -96,13 +95,13 @@
      * Add observer to list of observers
      * @param aObserver observer
      */
-    void SubscribeL(MUsbHostEventNotificationObserver* aObserver);
+    void SubscribeL(MUsbHostEventNotificationObserver& aObserver);
 
     /**
      * Removes observer from list of observers 
      * @param aObserver Observer
      */
-    void UnsubscribeL(MUsbHostEventNotificationObserver* aObserver);
+    void UnsubscribeL(MUsbHostEventNotificationObserver& aObserver);
 
 private:
 
@@ -142,7 +141,7 @@
 
     /**
      * The observer reports changes to own observers
-     * Owns
+     * Not owns
      */
     RPointerArray<MUsbHostEventNotificationObserver> iObservers;
 
--- a/usbengines/usbotgwatcher/inc/cusbidpinobserver.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbidpinobserver.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Monitors ID pin change
+ * 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:  Monitors ID pin change
+ *
+ */
 
 #ifndef C_USBIDPINOBSERVER_H
 #define C_USBIDPINOBSERVER_H
@@ -39,13 +38,12 @@
      * IdPin appeared
      */
     virtual void IdPinOnL() = 0;
-    
+
     /**
      * IdPin error
      * @param aError error code
      */
     virtual void IdPinErrorL(TInt aError) = 0;
-    
 
     };
 
@@ -67,7 +65,7 @@
      * @return instance of the objects of this class
      */
     static CUsbIdPinObserver* NewL();
-    
+
     /**
      * Destructor.
      */
@@ -83,13 +81,13 @@
      * Add observer
      * @param aObserver Observer
      */
-    void SubscribeL(MUsbIdPinObserver* aObserver);
+    void SubscribeL(MUsbIdPinObserver& aObserver);
 
     /**
      * Remove observer
      * @param aObserver Observer
      */
-    void UnsubscribeL(MUsbIdPinObserver* aObserver);
+    void UnsubscribeL(MUsbIdPinObserver& aObserver);
 
 private:
 
@@ -128,7 +126,7 @@
 
     /**
      *  The observer reports state changes to its own observers
-     * Own
+     * Not own
      */
     RPointerArray<MUsbIdPinObserver> iObservers;
 
--- a/usbengines/usbotgwatcher/inc/cusbindicatornotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbindicatornotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 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:  Blink/show Usb indicator notifier implementation
+ * Copyright (c) 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:  Blink/show Usb indicator notifier implementation
+ *
+ */
 
 #ifndef C_USBINDICATORNOTIFIER_H
 #define C_USBINDICATORNOTIFIER_H
@@ -23,13 +22,11 @@
 #include <AknNotifyStd.h>       // SAknSmallIndicatorParams
 #include <AknNotifySignature.h> // SAknNotifierPackage
 #include <avkon.hrh>            // EAknIndicatorUSBConnection
-
 #include "cusbtimer.h"
 #include "cusbnotifier.h"
 #include "cusbvbusobserver.h"
 #include "cusbotgwatcher.h"
 
-
 /**
  * Class implements functionality of showing/blinking usb indicator
  * Class does not provide method to get response from the user
@@ -43,7 +40,7 @@
      * @param aOtgWatcher provides VBus observer and usb otg watcher state notifications
      * @return Pointer to the new instance of CUsbIndicatorNotifier
      */
-    static CUsbIndicatorNotifier* NewL(CUsbNotifManager* aNotifManager, CUsbOtgWatcher* aOtgWatcher);
+    static CUsbIndicatorNotifier* NewL(CUsbNotifManager& aNotifManager, CUsbOtgWatcher& aOtgWatcher);
 
     /**
      * Destructor.
@@ -56,7 +53,7 @@
      * @param aState new state
      */
     virtual void OtgWatcherStateChangedL(TUsbStateIds aState);
-    
+
     // From MUsbVBusObserver
     /**
      * VBus down event received
@@ -69,10 +66,9 @@
     /**
      * error handler
      * @param aError error code
-     */   
+     */
     virtual void VBusObserverErrorL(TInt aError);
-    
-    
+
     // From base class CUsbNotifier
     /**
      * Start to show notifier
@@ -98,7 +94,7 @@
      * @param aNotifManger parent
      * @param aOtgWatcher Otg watcher
      */
-    CUsbIndicatorNotifier(CUsbNotifManager* aNotifManager, CUsbOtgWatcher* aOtgWatcher);
+    CUsbIndicatorNotifier(CUsbNotifManager& aNotifManager, CUsbOtgWatcher& aOtgWatcher);
 
     /**
      * 2nd phase constructor.
@@ -110,7 +106,7 @@
      * @param aState Indicator states 
      */
     void SetIndicatorStateL(const TInt aState);
-    
+
     /**
      * Show/hide static icon of the indicator. 
      * If the indicator is blinking, stop blinking it and show/hide the static 
@@ -118,17 +114,17 @@
      * @param aVisible ETrue - Show the indicator, EFalse - Hide the indicator 
      */
     void ShowStaticL(TBool aVisible);
-    
+
     /**
      * Blinks indicator
      */
     void BlinkL();
-    
+
     /**
      * Sets indicator accordingly
      */
     void SetIndicatorL();
-    
+
 private:
     // data
 
@@ -136,8 +132,8 @@
      * OtgWatcher
      * not own
      */
-    CUsbOtgWatcher* iOtgWatcher;
-    
+    CUsbOtgWatcher& iOtgWatcher;
+
     /**
      * Switch timer for showing/hiding the usb indicator interleavingly for 
      * animating the indicator. 
--- a/usbengines/usbotgwatcher/inc/cusbmessagenotificationobserver.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbmessagenotificationobserver.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Observes notifications from usb
+ * 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:  Observes notifications from usb
+ *
+ */
 
 #ifndef C_USBMESSAGENOTIFICATIONOBSERVER_H
 #define C_USBMESSAGENOTIFICATIONOBSERVER_H
@@ -58,12 +57,12 @@
      * Called when session requested
      */
     virtual void SessionRequestedL() = 0;
-    
+
     /**
-      * Called when error happened
-      * @param aError error code
-      */
-     virtual void MessageNotificationErrorL(TInt aError) = 0;    
+     * Called when error happened
+     * @param aError error code
+     */
+    virtual void MessageNotificationErrorL(TInt aError) = 0;
     };
 
 /**
@@ -90,13 +89,13 @@
      * Subscribes for notifications
      * @param aObserver observer
      */
-    void SubscribeL(MUsbMessageNotificationObserver* aObserver);
+    void SubscribeL(MUsbMessageNotificationObserver& aObserver);
 
     /**
      * Unsubscribe from notifications
      * @param aObserver Observer
      */
-    void UnsubscribeL(MUsbMessageNotificationObserver* aObserver);
+    void UnsubscribeL(MUsbMessageNotificationObserver& aObserver);
 
 private:
 
@@ -139,7 +138,7 @@
 
     /**
      * The observer reports to own observers
-     * Owns
+     * Not owns
      */
     RPointerArray<MUsbMessageNotificationObserver> iObservers;
 
--- a/usbengines/usbotgwatcher/inc/cusbnotenotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbnotenotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2008 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:  Base classes for Usb notifier wrapper  
+ * Copyright (c) 2008 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:  Base classes for Usb notifier wrapper  
+ *
+ */
 
 #ifndef C_CUSBNOTENOTIFIER_H
 #define C_CUSBNOTENOTIFIER_H
@@ -38,62 +37,67 @@
      */
     class CNotifierActive : public CActive
         {
-        public:
-            /**
-             * Default constructor
-             * @param aNotifier RNotifier API
-             * @param aUsbNoteNotifier the note notifier container
-             */
-            CNotifierActive(RNotifier& aNotifier, CUsbNoteNotifier* aUsbNoteNotifier);
-            
-            /**
-             * Destructor
-             */
-            virtual ~CNotifierActive();
-        
-            /**
-             * Start to show the notifier
-             */
-            void StartL();
-            
-        protected:
-            // From base class CActive
-            /**
-             * Caled when outstanding request completed
-             */
-            void RunL();
+    public:
+        /**
+         * Default constructor
+         * @param aNotifier RNotifier API
+         * @param aUsbNoteNotifier the note notifier container
+         */
+        CNotifierActive(RNotifier& aNotifier, CUsbNoteNotifier& aUsbNoteNotifier);
+
+        /**
+         * Destructor
+         */
+        virtual ~CNotifierActive();
+
+        /**
+         * Start to show the notifier
+         */
+        void StartL();
+
+    protected:
+        // From base class CActive
+        /**
+         * Caled when outstanding request completed
+         */
+        void RunL();
 
-            /**
-             * Called when outstanding request cancelled
-             */
-            void DoCancel();
+        /**
+         * Called when outstanding request cancelled
+         */
+        void DoCancel();
 
-            /**
-             * Called when RunL leaves   
-             * @param aError errorcode
-             * @return errorcode 
-             */
-            TInt RunError(TInt aError);
+        /**
+         * Called when RunL leaves   
+         * @param aError errorcode
+         * @return errorcode 
+         */
+        TInt RunError(TInt aError);
 
-        private:
-            // data
+    private:
+        // data
 
-            /**
-             * The note notifier container 
-             * Not Own 
-             */
-            CUsbNoteNotifier* iUsbNoteNotifier;
-            
-            /**
-             * RNotifier API
-             * Not Own 
-             */
-            RNotifier& iNotifier;
+        /**
+         * The note notifier container 
+         * Not Own 
+         */
+        CUsbNoteNotifier& iUsbNoteNotifier;
+
+        /**
+         * RNotifier API
+         * Not Own 
+         */
+        RNotifier& iNotifier;
 
             /**
              * Response from notifier 
              */
             TPckg<TInt> iRes;
+            
+            /**
+             * Notifier id pckg buffer
+             */
+            TPckgBuf<TInt> iNotifIdPckg;
         };
 public:
 
@@ -122,14 +126,14 @@
      * @param acat Category
      * @param aNotidId id 
      */
-    CUsbNoteNotifier(RNotifier& aNotifier, CUsbNotifManager* aNotifManager,
+    CUsbNoteNotifier(RNotifier& aNotifier, CUsbNotifManager& aNotifManager,
             TUid aCat, TUint aNotifId);
 
     /**
      * 2nd phase constructor.
      */
     void ConstructL();
-    
+
 private:
     // data
 
@@ -138,7 +142,7 @@
      * Own 
      */
     CNotifierActive* iNotifierActive;
-    
+
     /**
      * RNotifier API
      * Not Own 
--- a/usbengines/usbotgwatcher/inc/cusbnotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbnotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2008 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:  Base classes for Usb notifier wrapper  
+ * Copyright (c) 2008 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:  Base classes for Usb notifier wrapper  
+ *
+ */
 
 #ifndef C_CUSBNOTIFIER_H
 #define C_CUSBNOTIFIER_H
@@ -62,7 +61,7 @@
      * @param acat Category
      * @param aNotidId id 
      */
-    CUsbNotifier(CUsbNotifManager* aNotifManager, TUid aCat, TUint aNotifId);
+    CUsbNotifier(CUsbNotifManager& aNotifManager, TUid aCat, TUint aNotifId);
 
     /**
      * Set by child-class if the concrete notifier needs feedback from end-user
@@ -77,7 +76,7 @@
      * All notifiers are created, destroied and manupulated by the manager.  
      * Not own 
      */
-    CUsbNotifManager* iNotifManager;
+    CUsbNotifManager& iNotifManager;
 
     /**
      * Category of the notifier. Needed for cancelling 
--- a/usbengines/usbotgwatcher/inc/cusbnotifmanager.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbnotifmanager.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Manages notifiers
+ * 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:  Manages notifiers
+ *
+ */
 
 #ifndef C_USBNOTIFMANAGER_H
 #define C_USBNOTIFMANAGER_H
@@ -58,7 +57,7 @@
      * aObserver will receive notification when completed 
      */
     static CWaitNotifierInfo* NewL(CUsbNotifier* aWaitNotifier,
-            MWaitNotifierObserver* aObserver);
+            MWaitNotifierObserver& aObserver);
 
     /**
      * Destructor
@@ -83,7 +82,7 @@
      * @param aObserver Observer
      */
     CWaitNotifierInfo(CUsbNotifier* aWaitNotifier,
-            MWaitNotifierObserver* aObserver);
+            MWaitNotifierObserver& aObserver);
 
     /**
      * 2nd phase construction
@@ -102,7 +101,7 @@
      * observer
      * not owns
      */
-    MWaitNotifierObserver* iObserver;
+    MWaitNotifierObserver& iObserver;
     };
 
 /**
@@ -119,7 +118,7 @@
      * 2phase construction
      * @param aOtgWatcher OtgWatcher is a parent class
      */
-    static CUsbNotifManager* NewL(CUsbOtgWatcher* aOtgWatcher);
+    static CUsbNotifManager* NewL(CUsbOtgWatcher& aOtgWatcher);
 
     /**
      * Destructor
@@ -133,20 +132,20 @@
      * @param aObserver will receive notifications
      */
     void ShowNotifierL(TUid aCat, TUint aNotifId,
-            MWaitNotifierObserver* aObserver = NULL);
+            MWaitNotifierObserver* aObserver);
 
     /**
      * Closes and deletes all the notifiers
      */
     void CloseAllNotifiers();
-    
+
     /** 
      * Calls back Notifier show is over
      * @param aWaitNotifier wait notifier
      * @param aResult result (was any errors or not)
      * @param aFeedback user press (cancel or any other) 
      */
-    void NotifierShowCompletedL(CUsbNotifier* aWaitNotifier, TInt aResult,
+    void NotifierShowCompletedL(CUsbNotifier& aWaitNotifier, TInt aResult,
             TInt aFeedback);
 
 private:
@@ -160,7 +159,7 @@
     /**
      * Second phase construction
      */
-    void ConstructL(CUsbOtgWatcher* aOtgWatcher);
+    void ConstructL(CUsbOtgWatcher& aOtgWatcher);
 
 private:
     // data
--- a/usbengines/usbotgwatcher/inc/cusbotgstateobserver.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbotgstateobserver.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Observes OTG states
+ * 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:  Observes OTG states
+ *
+ */
 
 #ifndef C_USBOTGSTATEOBSERVER_H
 #define C_USBOTGSTATEOBSERVER_H
@@ -64,12 +63,12 @@
      * Local device is B, and get to Host state
      */
     virtual void BHostL() = 0;
-    
+
     /**
      * Error handler
      * @param aError error code
      */
-    virtual void OtgStateErrorL(TInt aError) = 0;    
+    virtual void OtgStateErrorL(TInt aError) = 0;
     };
 
 /**
@@ -101,13 +100,13 @@
      * Subscribes for getting notifications
      * @param aObserver Observer
      */
-    void SubscribeL(MUsbOtgStateObserver* aObserver);
+    void SubscribeL(MUsbOtgStateObserver& aObserver);
 
     /**
      * Unsubscribes from getting notifications
      * @param aObserver Observer
      */
-    void UnsubscribeL(MUsbOtgStateObserver* aObserver);
+    void UnsubscribeL(MUsbOtgStateObserver& aObserver);
 
 private:
 
@@ -151,7 +150,7 @@
 
     /**
      * The observer reports state changes to own observers
-     * Owns
+     * Not owns
      */
     RPointerArray<MUsbOtgStateObserver> iObservers;
 
--- a/usbengines/usbotgwatcher/inc/cusbotgwatcher.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbotgwatcher.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  OTG watcher state machine owner
+ * 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:  OTG watcher state machine owner
+ *
+ */
 
 #ifndef C_USBOTGWATCHER_H
 #define C_USBOTGWATCHER_H
@@ -88,17 +87,20 @@
     friend class CtUsbOtgWatcher;
 
 public:
+
     /**
      * Two-phased constructor.
      * @param aUsb usbman API
      */
-    IMPORT_C static CUsbOtgWatcher* NewL(RUsb& aUsb);
+    IMPORT_C
+    static CUsbOtgWatcher* NewL(RUsb& aUsb);
 
     /**
      * Check ID-Pin state
      * @return ETrue if the ID-Pin is present (A-Device)
      */
-    IMPORT_C TBool IsDeviceA();
+    IMPORT_C
+    TBool IsDeviceA();
 
     /**
      * Destructor.
@@ -159,7 +161,7 @@
     /**
      * Id Pin On
      * @param aError
-     */    
+     */
     void IdPinErrorL(TInt aError);
 
     // From VBus observer
@@ -225,7 +227,7 @@
     /**
      * error
      * @param aError error happened
-     */    
+     */
     void BusActivityErrorL(TInt aError);
 
     // From Host Event notification observer
@@ -257,7 +259,7 @@
     /**
      * Error happened during observing
      * @param aError error code
-     */    
+     */
     void HostEventNotificationErrorL(TInt aError);
 
     // From message notification observer
@@ -285,9 +287,9 @@
     /**
      * Error handler
      * @param error code
-     */    
+     */
     void MessageNotificationErrorL(TInt aError);
-    
+
     // From CUsbServiceControl
     /**
      * called when request for usb services is completed
@@ -348,32 +350,34 @@
     CUsbNotifManager* NotifManager();
     /**
      * @return Handle state 
+     * @param aStateId state id 
      */
-    CUsbStateHostHandle* HostHandle() const;
+    CUsbStateHostHandle* HostHandle(TUsbStateIds aStateId) const;
 
     /**
      * Handles problems in host functioning
      * @param aWhatKindOf problem Id to be handled
+     * @param aInState state id where to handle
      */
-    void HandleHostProblemL(TInt aWhatKindOf);
-    
+    void HandleHostProblemL(TInt aWhatKindOf, TUsbStateIds aInState);
+
     /**
      * Add observer to USb Otg state machine
      * @param aObserver Observer
      */
-    void SubscribeL(MUsbOtgWatcherStateObserver* aObserver);
+    void SubscribeL(MUsbOtgWatcherStateObserver& aObserver);
 
     /**
      * Remove observer from UsbOtg state observer
      * @param aObserver Observer
      */
-    void UnsubscribeL(MUsbOtgWatcherStateObserver* aObserver);
+    void UnsubscribeL(MUsbOtgWatcherStateObserver& aObserver);
 
     /**
      * Used for test purposes
      */
     void PrintStateToLog();
-    
+
 private:
 
     /**
@@ -405,12 +409,12 @@
      * @param aNewStateId new host state (id)
      */
     void ChangeHostStateL(TUsbStateIds aNewStateId);
-    
+
     /**
      * Used for test purposes
      * @return KErrNone if test is OK, otherwise errorcode
      */
-     TInt SelfTestL();
+    TInt SelfTestL();
 
 private:
     // data
@@ -491,12 +495,18 @@
      * Own.  
      */
     CUsbServiceControl* iUsbServiceControl;
-    
+
     /**
      * The observer reports state changes to its own observers
      * Not Own
      */
     RPointerArray<MUsbOtgWatcherStateObserver> iOtgStateObservers;
+
+    /**
+     * The observer reports state changes to its own observers
+     * Not Own
+     */
+    CUsbServiceControl::TUsbServiceRequest iUsbServiceRequest;
     };
 
 #endif //  C_USBOTGWATCHER_H
--- a/usbengines/usbotgwatcher/inc/cusbpersonalityswitch.h	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
-* 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:  Personality switch function.
- *
-*/
-
-#ifndef C_USBPERSONALITYSWITCH_H
-#define C_USBPERSONALITYSWITCH_H
-
-#include <e32base.h>
-#include <d32usbdi.h> 
-
-const TInt KGetAllPersonalitiesReq = 0x82;
-const TInt KSetPersonalityReq = 0x89;
-
-const TInt KNumOfPersShift = 3;
-const TInt KCurrPersShift = 2;
-const TInt KFirstPersonalityIdShift = 4;
-const TInt KLenghtOfPersonalityData = 2;
-
-class MUsbPersonalitySwitchObserver
-    {
-public:
-    enum TState
-        {
-        EIdle = 0,
-        ERequestingAllPersonalities,
-        ERequestingSetPersonality,
-        EGetAllPersonalitiesCompleted,
-        ESetPersonalityCompleted,
-        ERequestCancelled,
-        ERequestFailed
-        };
-public:
-    virtual void UsbPersonalitySwitchStateChangedL(TState aState, TInt aData) = 0;
-    };
-
-/* *
- * Reads personalities, if possible, switches peripheral to mass storage.
- * It is assumed that USB is started already
- */
-NONSHARABLE_CLASS(CUsbPersonalitySwitch) : public CActive
-    {
-    enum TState
-    {
-    EIdle = 0,
-    EGetAllPersonalities,
-    ESetPersonality /*,
-    EGetAllPersResult,
-    EGetSetPersResult*/
-    };
-    
-public:
-
-    /**
-     * Two-phased constructor
-     *
-     * @param aObserver will get call back
-     * @param aTimerId timer id
-     */
-    static CUsbPersonalitySwitch * NewL(MUsbPersonalitySwitchObserver* aObserver);
-
-    /**
-     * Destructor.
-     */
-    virtual ~CUsbPersonalitySwitch();
-
-    /**
-     * calls RunL after aMilliseconds
-     * @param aMilliseconds time in millisecs
-     */
-    TInt SwitchPersonalityL(TUint32 aDeviceId, TInt aPersonalityToBeSet);
-    
-    void CancelSwitchPersonalityL();
-
-public:
-
-    // from base class CActive
-    /**
-     * Called when request is completed
-     */
-    void RunL();
-
-    /**
-     * called when RunL leaves
-     * @param aError error code
-     * @return error code
-     */
-    TInt RunError(TInt aError);
-
-    /**
-     * Called when request is cancelled
-     */
-    void DoCancel();
-
-private:
-
-    /**
-     * Default constructor
-     * @param aObserver will get call back
-     * @param aTimerId timer id 
-     */
-    CUsbPersonalitySwitch(MUsbPersonalitySwitchObserver* aObserver);
-
-    /**
-     * 2nd phase construction
-     */
-    void ConstructL();
-    
-    void Reset();
-
-private:
-    // data
-
-    /**
-     * Observer
-     * not own
-     */
-    MUsbPersonalitySwitchObserver* iObserver;
-    
-    RUsbInterface iUsbInterface;
-
-    /**
-     * timer id
-     */
-    TInt iPersonalityToBeSet;
-    
-    RUsbInterface::TUsbTransferRequestDetails iTransfer;
-    
-    RBuf8 iSendData;
-    
-    RBuf8 iRcvData;
-    
-    TState iState;
-    };
-
-#endif //  C_USBPERSONALITYSWITCH_H
--- a/usbengines/usbotgwatcher/inc/cusbservicecontrol.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbservicecontrol.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation 
+ * 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:  Implementation 
+ *
+ */
 
 #ifndef C_USBSERVICECONTROL_H
 #define C_USBSERVICECONTROL_H
@@ -50,12 +49,19 @@
 
 public:
 
+    enum TUsbServiceRequest
+        {
+        ERequestUndefined,
+        EStartUsbService,
+        EStopUsbService
+        };
+
     /**
      * Two-phased constructor.
      * @param aObserver Observer
      * @param aUsb RUsb API
      */
-    static CUsbServiceControl* NewL(MUsbServiceControlObserver* aObserver,
+    static CUsbServiceControl* NewL(MUsbServiceControlObserver& aObserver,
             RUsb& aUsb);
 
     /**
@@ -107,7 +113,7 @@
      * @param aObserver receives call back when service started or stopped
      * @param aUsb usbman API
      */
-    CUsbServiceControl(MUsbServiceControlObserver* aObserver, RUsb& aUsb);
+    CUsbServiceControl(MUsbServiceControlObserver& aObserver, RUsb& aUsb);
 
     /**
      * 2nd phase construction
@@ -120,7 +126,7 @@
      * Observer
      * not own
      */
-    MUsbServiceControlObserver* iObserver;
+    MUsbServiceControlObserver& iObserver;
 
     /**
      * RUsb API
--- a/usbengines/usbotgwatcher/inc/cusbstate.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbstate.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Base class for states in state machine
+ * 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:  Base class for states in state machine
+ *
+ */
 
 #ifndef C_USBSTATE_H
 #define C_USBSTATE_H
@@ -70,25 +69,25 @@
      * This might be used in switching states in watcher. New state object searched by its id
      * @return Id
      */
-    virtual TUsbStateIds Id();
-    
+    virtual TUsbStateIds Id() = 0;
+
     /**
      * Destruction
      */
     virtual ~CUsbState();
-    
+
     /**
      * Two-phased constructor.
      * @param aWatcher owner
      */
-    static CUsbState* NewL(CUsbOtgWatcher* aWatcher);
+    //static CUsbState* NewL(CUsbOtgWatcher& aWatcher);
 
 protected:
     /**
      * default constructor is protected to be able to be inherited be child classes
      * @param aOwner owner of the state
      */
-    CUsbState(CUsbOtgWatcher* aOwner);
+    CUsbState(CUsbOtgWatcher& aOwner);
 
     /* *
      * Changes state in Device state machine
@@ -102,12 +101,12 @@
      */
     void ChangeHostStateL(TUsbStateIds aNewStateId);
 
-private:
-    
     /**
-     * 2nd phase construction
+     * Handles special situation (error, or something else)
+     * @param aWhat to hande (id)
+     * @param aWhereTohandle state id where to handle
      */
-    void ConstructL();
+    virtual void HandleL(TInt aWhat, TUsbStateIds aWhereTohandle);
 
     /**
      * State machine calls this, state object to perform any initial  
@@ -129,6 +128,11 @@
      */
 
     /**
+     * 2nd phase construction
+     */
+    void ConstructL();
+
+    /**
      * Sets personality
      */
     virtual void SetPersonalityL();
@@ -271,7 +275,7 @@
      * Owner
      * Not own.  
      */
-    CUsbOtgWatcher* iWatcher;
+    CUsbOtgWatcher& iWatcher;
 
     };
 
--- a/usbengines/usbotgwatcher/inc/cusbstatehostabase.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostabase.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,25 +1,25 @@
 /*
-* 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:  Implementation of the conctet state
+ * 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:  Implementation of the conctet state
+ *
+ */
 
 #ifndef C_USBSTATEHOSTABASE_H
 #define C_USBSTATEHOSTABASE_H
 
 #include "cusbstate.h"
+#include "definitions.h"
 
 class CUsbOtgWatcher;
 /**
@@ -40,20 +40,13 @@
      * default construction
      * @param aWatcher owner
      */
-    CUsbStateHostABase(CUsbOtgWatcher* aWatcher);
+    CUsbStateHostABase(CUsbOtgWatcher& aWatcher);
 
     /**
      * second phase construction
      */
     void ConstructL();
 
-    /**
-     * Handles special situation (error, or something else)
-     * @param aWhat to hande (id)
-     */
-    virtual void HandleL(TInt aWhat);
-
-    //from CUsbState
     // From VBus observer
     /**
      * VBus down
@@ -71,6 +64,16 @@
      */
     virtual void AVBusErrorL();
 
+    /**
+     * VBus error happen
+     */
+    virtual void AHostL();
+
+    /**
+     * VBus error happen
+     */
+    virtual void APeripheralL();
+
     // From bus activity observer
     /**
      * Bus is in idle
@@ -88,6 +91,10 @@
      */
     virtual void MessageNotificationReceivedL(TInt aMessage);
     /**
+     * SRP request received
+     */
+    virtual void SrpReceivedL();
+    /**
      * Connected to hub in wrong level 
      */
     virtual void BadHubPositionL();
--- a/usbengines/usbotgwatcher/inc/cusbstatehostahost.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostahost.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,31 +1,26 @@
 /*
-* 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:  Implementation of the concret state
+ * 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:  Implementation of the concret state
+ *
+ */
 
 #ifndef C_USBSTATEHOSTAHOST_H
 #define C_USBSTATEHOSTAHOST_H
 
-#include "cusbotgwatcher.h"
 #include "cusbstatehostabase.h"
-#ifndef STIF
-#include "cusbtimer.h"
-#else
-#include "mockcusbtimer.h"
-#endif
+
+class CUsbOtgWatcher;
 
 /**
  *  This class implements behaviour in Host state (Drivers loaded, device is in Host role)
@@ -39,7 +34,7 @@
      * Two-phased constructor.
      * @param aWatcher Owner
      */
-    static CUsbStateHostAHost* NewL(CUsbOtgWatcher* aWatcher);
+    static CUsbStateHostAHost* NewL(CUsbOtgWatcher& aWatcher);
 
     /**
      * Destructor.
@@ -52,7 +47,7 @@
      * Default construction
      * @param aWatcher owner
      */
-    CUsbStateHostAHost(CUsbOtgWatcher* aWatcher);
+    CUsbStateHostAHost(CUsbOtgWatcher& aWatcher);
 
     /**
      * 2nd phase construction
@@ -72,38 +67,27 @@
      * trigger it and transition will not happen. This forces the transition in such cases.
      *
      */
-    void JustAdvancedToThisStateL();
+    virtual void JustAdvancedToThisStateL();
 
     /**
      * State machine calls this, state object to perform any initial  
      * activity, just before leaving this state
      *
      */
-    void JustBeforeLeavingThisStateL();
+    virtual void JustBeforeLeavingThisStateL();
 
-    // From OTG state observer
-    /**
-     * Became a Host when A
-     */
-    void AHostL();
-
-    /**
-     * Became a Peripheral when A
-     */
-    void APeripheralL();
-    
     // From Host Event notification observer
     /**
      * Device is detached
      * @param aInfo Device event data
      */
-    void DeviceDetachedL(TDeviceEventInformation aInfo);
+    virtual void DeviceDetachedL(TDeviceEventInformation aInfo);
 
     // From message notification observer
     /**
      * Connected to hub in wrong level 
      */
-    void BadHubPositionL();
+    virtual void BadHubPositionL();
 
 private:
     // data
--- a/usbengines/usbotgwatcher/inc/cusbstatehostaidle.h	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
-* 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:  Iplementation of the concret state
- *
-*/
-
-
-#ifndef C_USBSTATEHOSTAIDLE_H
-#define C_USBSTATEHOSTAIDLE_H
-
-#include "cusbotgwatcher.h"
-#include "cusbstatehostainitiatebase.h"
-#ifndef STIF
-#include "cusbtimer.h"
-#else
-#include "mockcusbtimer.h"
-#endif
-
-/**
- *  This class implements basic behaviour in Idle state (VBus down, IdPin on)
- *
- */
-NONSHARABLE_CLASS( CUsbStateHostAIdle ) : public CUsbStateHostAInitiateBase
-
-    {
-
-public:
-
-    /**
-     * Two-phased constructor.
-     * @param aWatcher owner
-     */
-    static CUsbStateHostAIdle* NewL(CUsbOtgWatcher* aWatcher);
-
-    /**
-     * Destructor.
-     */
-    virtual ~CUsbStateHostAIdle();
-
-private:
-
-    /**
-     * Default construction
-     * @param aWatcher owner
-     */
-    CUsbStateHostAIdle(CUsbOtgWatcher* aWatcher);
-
-    /**
-     * 2nd phase construction
-     */
-    void ConstructL();
-
-    //from CUsbState
-    /**
-     * State id
-     * @return state id
-     */
-    TUsbStateIds Id();
-
-    /**
-     * This is called when switched to this state, 
-     * because If all conditions for transition to another state exist, nothing will 
-     * trigger it and transition will not happen. This forces the transition in such cases.
-     *
-     */
-    void JustAdvancedToThisStateL();
-
-    };
-
-#endif //  C_USBSTATEHOSTAIDLE_H
--- a/usbengines/usbotgwatcher/inc/cusbstatehostainitiate.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostainitiate.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,37 +1,39 @@
 /*
-* 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:  Implementation of the concret state
+ * 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:  Implementation of the concret state
+ *
+ */
 
 #ifndef C_USBSTATEHOSTAINITIATE_H
 #define C_USBSTATEHOSTAINITIATE_H
 
-#include "cusbotgwatcher.h"
-#include "cusbstatehostainitiatebase.h"
+#include "cusbstatehostabase.h"
+
 #ifndef STIF
 #include "cusbtimer.h"
 #else
 #include "mockcusbtimer.h"
 #endif
 
+class CUsbOtgWatcher;
+
 /**
  *  This class implements behaviour when Id pin just detected (initiating host role, loading drivers)
  *
  */
-NONSHARABLE_CLASS( CUsbStateHostAInitiate ) : public CUsbStateHostAInitiateBase
+NONSHARABLE_CLASS( CUsbStateHostAInitiate ) : public CUsbStateHostABase,
+MUsbTimerObserver
     {
     friend class CtUsbOtgWatcher;
 
@@ -41,7 +43,7 @@
      * Two-phased constructor.
      * @param aWatcher owner
      */
-    static CUsbStateHostAInitiate* NewL(CUsbOtgWatcher* aWatcher);
+    static CUsbStateHostAInitiate* NewL(CUsbOtgWatcher& aWatcher);
 
     /**
      * Destructor.
@@ -50,11 +52,18 @@
 
 private:
 
+    // From MUsbTimerObserver
+    /**
+     * timer expired call back
+     * @param aTimerId timer id
+     */
+    void TimerElapsedL(TUsbTimerId aTimerId);
+
     /**
      * default construction
      * @param aWatcher owner
      */
-    CUsbStateHostAInitiate(CUsbOtgWatcher* aWatcher);
+    CUsbStateHostAInitiate(CUsbOtgWatcher& aWatcher);
 
     /**
      * 2nd phase construction
@@ -75,14 +84,54 @@
      *
      */
     void JustAdvancedToThisStateL();
-    
+
     /**
      * This is called when switched to this state, 
      * because If all conditions for transition to another state exist, nothing will 
      * trigger it and transition will not happen. This forces the transition in such cases.
      *
      */
-    virtual void JustBeforeLeavingThisStateL();
+    void JustBeforeLeavingThisStateL();
+
+    // From VBus observer
+    /**
+     * VBus up
+     */
+    void VBusUpL();
+
+    // From Host Event notification observer
+    /**
+     * Device is attached
+     * @param Device event data
+     */
+    void DeviceAttachedL(TDeviceEventInformation);
+
+    /**
+     * Device is detached
+     * @param Device event data
+     */
+    void DriverLoadSuccessL(TDeviceEventInformation);
+
+    /**
+     * Drivers loaded partially
+     * @param Device event data
+     */
+    void DriverLoadPartialSuccessL(TDeviceEventInformation);
+
+    /**
+     * Drivers loading failed
+     * @param Device event data
+     */
+    void DriverLoadFailureL(TDeviceEventInformation);
+
+private:
+    // data
+
+    /*
+     * attachment timer
+     * own
+     */
+    CUsbTimer* iAttachmentTimer;
 
     };
 
--- a/usbengines/usbotgwatcher/inc/cusbstatehostainitiatebase.h	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,140 +0,0 @@
-/*
-* Copyright (c) 2008-2008 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:  Implements concrete state
- *
-*/
-
-
-#ifndef C_USBSTATEHOSTAINITIATEBASE_H
-#define C_USBSTATEHOSTAINITIATEBASE_H
-
-#include "cusbotgwatcher.h"
-#include "cusbstatehostabase.h"
-#include "cusbpersonalityswitch.h"
-#ifndef STIF
-#include "cusbtimer.h"
-#else
-#include "mockcusbtimer.h"
-#endif
-
-/**
- *  This class implements besic behaviour when Id pin on, and vbus just turned down or just turned on,
- *  specific concrete case/state is implemented in subclass
- */
-NONSHARABLE_CLASS( CUsbStateHostAInitiateBase ) : public CUsbStateHostABase,
-        MUsbTimerObserver, MUsbPersonalitySwitchObserver
-
-    {
-    friend class CTestUsbOtgWatcher;
-
-public:
-
-    /**
-     * Destructor.
-     */
-    virtual ~CUsbStateHostAInitiateBase();
-
-    // From MUsbTimerObserver
-    /**
-     * timer expired call back
-     * @param aTimerId timer id
-     */
-    void TimerElapsedL(TUsbTimerId aTimerId);
-    
-    void UsbPersonalitySwitchStateChangedL(MUsbPersonalitySwitchObserver::TState aState, TInt aData);
-
-protected:
-
-    /**
-     * Default construction
-     * @param aWatcher owner
-     */
-    CUsbStateHostAInitiateBase(CUsbOtgWatcher* aWatcher);
-
-    /**
-     * 2nd phase construction
-     */
-    void ConstructL();
-
-    //from CUsbState
-
-    /**
-     * This is called when switched to this state, 
-     * because If all conditions for transition to another state exist, nothing will 
-     * trigger it and transition will not happen. This forces the transition in such cases.
-     *
-     */
-    virtual void JustBeforeLeavingThisStateL();
-
-    // From VBus observer
-    /**
-     * VBus down
-     */
-    virtual void VBusDownL();
-    /**
-     * VBus UP
-     */
-    virtual void VBusUpL();
-
-    /**
-     * AHost
-     */
-    virtual void AHostL();
-
-    /**
-     * APeripheral
-     */
-    virtual void APeripheralL();
-
-    // From Host Event notification observer
-    /**
-     * Device is attached
-     * @param Device event data
-     */
-    virtual void DeviceAttachedL(TDeviceEventInformation);
-    /**
-     * Device is detached
-     * @param Device event data
-     */
-    virtual void DriverLoadSuccessL(TDeviceEventInformation);
-    /**
-     * Drivers loaded partially
-     * @param Device event data
-     */
-    virtual void DriverLoadPartialSuccessL(TDeviceEventInformation);
-    /**
-     * Drivers loading failed
-     * @param Device event data
-     */
-    virtual void DriverLoadFailureL(TDeviceEventInformation);
-
-    // From message notification observer
-    /**
-     * SRP request received
-     */
-    virtual void SrpReceivedL();
-
-protected:
-    // data
-
-    /*
-     * attachment timer
-     * own
-     */
-    CUsbTimer* iAttachmentTimer;
-    
-    CUsbPersonalitySwitch* iUsbPersonalitySwitch;
-    };
-
-#endif //  C_USBSTATEHOSTAINITIATEBASE_H
--- a/usbengines/usbotgwatcher/inc/cusbstatehostaperipheral.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostaperipheral.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,31 +1,26 @@
 /*
-* 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:  Implements concrete state
+ * 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:  Implements concrete state
+ *
+ */
 
 #ifndef C_USBSTATEHOSTAPERIPHERAL_H
 #define C_USBSTATEHOSTAPERIPHERAL_H
 
-#include "cusbotgwatcher.h"
 #include "cusbstatehostabase.h"
-#ifndef STIF
-#include "cusbtimer.h"
-#else
-#include "mockcusbtimer.h"
-#endif
+
+class CUsbOtgWatcher;
 
 /**
  *  This class implements behaviour when A device performs peripheral role, from OTG point of view
@@ -40,7 +35,7 @@
      * Two-phased constructor.
      * @param aWatcher owner
      */
-    static CUsbStateHostAPeripheral* NewL(CUsbOtgWatcher* aWatcher);
+    static CUsbStateHostAPeripheral* NewL(CUsbOtgWatcher& aWatcher);
 
     /**
      * Destructor.
@@ -53,20 +48,13 @@
      * default constructor
      * @param aWatcher owner
      */
-    CUsbStateHostAPeripheral(CUsbOtgWatcher* aWatcher);
+    CUsbStateHostAPeripheral(CUsbOtgWatcher& aWatcher);
 
     /**
      * 2nd phase construction
      */
     void ConstructL();
 
-    /**
-     * State machine calls this, state object to perform any initial  
-     * activity, once just entered this state
-     *
-     */
-    void JustAdvancedToThisStateL();
-
     //from CUsbState
     /**
      * state id
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostdelayattachedhandle.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,108 @@
+/*
+ * 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:  Implements concrete state
+ *
+ */
+
+#ifndef C_USBSTATEHOSTDALAYATTACHEDHANDLE_H
+#define C_USBSTATEHOSTDALAYATTACHEDHANDLE_H
+
+#include "cusbstatehostdelayhandle.h"
+
+#ifndef STIF
+#include "cusbtimer.h"
+#else
+#include "mockcusbtimer.h"
+#endif
+
+class CUsbOtgWatcher;
+
+/**
+ *  problem handling, device is attached, vbus not dropping
+ *
+ */
+NONSHARABLE_CLASS( CUsbStateHostDelayAttachedHandle ) : public CUsbStateHostDelayHandle,
+public MUsbTimerObserver
+    {
+    friend class CtUsbOtgWatcher;
+    friend class CUsbOtgWatcher;
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aWatcher owner
+     */
+    static CUsbStateHostDelayAttachedHandle* NewL(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CUsbStateHostDelayAttachedHandle();
+
+protected:
+
+    // From MUsbTimerObserver
+    /**
+     * Call back when timer expired
+     * @param aTimerId timer id
+     */
+    void TimerElapsedL(TUsbTimerId aTimerId);
+
+    /**
+     * Device is detached
+     * @param aInfo Device event data
+     */
+    virtual void DeviceDetachedL(TDeviceEventInformation aInfo);
+
+    //from CUsbState
+    /**
+     * State id
+     * @return state id
+     */
+    virtual TUsbStateIds Id();
+
+    /**
+     * This is called when leaving this state, 
+     *
+     */
+    virtual void JustBeforeLeavingThisStateL();
+
+    /**
+     * handles issue
+     */
+    virtual void DoHandleL();
+
+    /**
+     * Default constructor
+     * @param aWatcher owner
+     */
+    CUsbStateHostDelayAttachedHandle(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * 2nd phase construction
+     */
+    void ConstructL();
+
+    // data
+
+private:
+    /** 
+     * drivers not found
+     * own
+     */
+    CUsbTimer* iDriversNotFoundTimer;
+    };
+
+#endif //  C_USBSTATEHOSTDELAYATTACHEDHANDLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostdelayhandle.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,72 @@
+/*
+ * 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:  Implements concrete state
+ *
+ */
+
+#ifndef C_USBSTATEHOSTDELAYHANDLE_H
+#define C_USBSTATEHOSTDELAYHANDLE_H
+
+#include "cusbstatehosthandle.h"
+
+class CUsbOtgWatcher;
+
+/**
+ *  problem handling, vbus not dropping
+ *
+ */
+NONSHARABLE_CLASS( CUsbStateHostDelayHandle ) : public CUsbStateHostHandle
+    {
+    friend class CtUsbOtgWatcher;
+    friend class CUsbOtgWatcher;
+
+public:
+
+    /**
+     * Destructor.
+     */
+    virtual ~CUsbStateHostDelayHandle();
+
+protected:
+
+    // From VBus observer
+    /**
+     * VBus up
+     */
+    virtual void VBusUpL();
+
+    // From Host Event notification observer
+    /**
+     * Device is attached
+     * @param aInfo Device event data
+     */
+    virtual void DeviceAttachedL(TDeviceEventInformation aInfo);
+
+    /**
+     * Default constructor
+     * @param aWatcher owner
+     */
+    CUsbStateHostDelayHandle(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * 2nd phase construction
+     */
+    void ConstructL();
+
+    // data
+
+private:
+    };
+
+#endif //  C_USBSTATEHOSTDELAYHANDLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostdelaynotattachedhandle.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,113 @@
+/*
+ * 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:  Implements concrete state
+ *
+ */
+
+#ifndef C_USBSTATEHOSTDELAYANOTTTACHEDHANDLE_H
+#define C_USBSTATEHOSTDELAYNOTATTACHEDHANDLE_H
+
+#include "cusbstatehostdelayattachedhandle.h"
+
+#ifndef STIF
+#include "cusbtimer.h"
+#else
+#include "mockcusbtimer.h"
+#endif
+
+class CUsbOtgWatcher;
+/**
+ *  problem handling, device is not attached, vbus not dropping
+ *
+ */
+NONSHARABLE_CLASS( CUsbStateHostDelayNotAttachedHandle ) : public CUsbStateHostDelayHandle,
+MUsbTimerObserver
+    {
+    friend class CtUsbOtgWatcher;
+    friend class CUsbOtgWatcher;
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aWatcher owner
+     */
+    static CUsbStateHostDelayNotAttachedHandle* NewL(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CUsbStateHostDelayNotAttachedHandle();
+
+private:
+
+    // From MUsbTimerObserver
+    /**
+     * Call back when timer expired
+     * @param aTimerId timer id
+     */
+    void TimerElapsedL(TUsbTimerId aTimerId);
+
+    /**
+     * Device is detached
+     * @param aInfo Device event data
+     */
+    void DeviceDetachedL(TDeviceEventInformation aInfo);
+
+    // From OTG state observer
+    /**
+     * Became to Idle when A
+     */
+    void AIdleL();
+
+    //from CUsbState
+    /**
+     * State id
+     * @return state id
+     */
+    TUsbStateIds Id();
+
+    /**
+     * This is called when leaving this state, 
+     *
+     */
+    void JustBeforeLeavingThisStateL();
+
+    /**
+     * handles issue
+     */
+    void DoHandleL();
+
+    /**
+     * Default constructor
+     * @param aWatcher owner
+     */
+    CUsbStateHostDelayNotAttachedHandle(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * 2nd phase construction
+     */
+    void ConstructL();
+
+    // data
+
+    /** 
+     * too much power timer
+     * own
+     */
+    CUsbTimer* iTooMuchPowerTimer;
+
+    };
+
+#endif //  C_USBSTATEHOSTDELAYNOTATTACHEDHANDLE_H
--- a/usbengines/usbotgwatcher/inc/cusbstatehosthandle.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbstatehosthandle.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,43 +1,32 @@
 /*
-* 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:  Implements concrete state
+ * 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:  Implements concrete state
+ *
+ */
 
 #ifndef C_USBSTATEHOSTHANDLE_H
 #define C_USBSTATEHOSTHANDLE_H
 
-#include "cusbotgwatcher.h"
-#include "cusbstate.h"
+#include "cusbstatehostabase.h"
 
-#ifndef STIF
-#include "cusbnotifmanager.h"
-#include "cusbtimer.h"
-#else
-#include "mockcusbnotifmanager.h"
-#include "mockcusbtimer.h"
-#endif
+class CUsbOtgWatcher;
 
 /**
- *  This class implements behaviour when some problem needs vbus drop, and mostly, user action.
+ *  problem handling base class
  *
  */
-NONSHARABLE_CLASS( CUsbStateHostHandle ) : public CUsbState,
-        MWaitNotifierObserver,
-        MUsbTimerObserver
-// this means only one wait notifier at a time can be shown by this state, might be redesigned
+NONSHARABLE_CLASS( CUsbStateHostHandle ) : public CUsbStateHostABase
     {
     friend class CtUsbOtgWatcher;
     friend class CUsbOtgWatcher;
@@ -45,12 +34,6 @@
 public:
 
     /**
-     * Two-phased constructor.
-     * @param aWatcher owner
-     */
-    static CUsbStateHostHandle* NewL(CUsbOtgWatcher* aWatcher);
-
-    /**
      * Destructor.
      */
     virtual ~CUsbStateHostHandle();
@@ -61,136 +44,19 @@
      */
     void SetWhat(TInt aWhat);
 
-    // from MWaitNotifierObserver
-    /**
-     * Callback when notifier is completed
-     * @param aFeedback how notifier completed
-     */
-    void WaitNotifierCompletedL(TInt aFeedback);
-
-    // From MUsbTimerObserver
-    /**
-     * Call back when timer expired
-     * @param aTimerId timer id
-     */
-    void TimerElapsedL(TUsbTimerId aTimerId);
-
-private:
-
-    // From VBus observer
-    /**
-     * VBus down
-     */
-    void VBusDownL();
-
-    // From OTG state observer
-    /**
-     * Became to Idle when A
-     */
-    void AIdleL();
-    /**
-     * Became a Host when A
-     */
-    void AHostL();
-    /**
-     * Became a peripheral when A
-     */
-    void APeripheralL();
-    /**
-     * VBus error happen
-     */
-    void AVBusErrorL();
-    /**
-     * Became to Idle when B
-     */
-    void BIdleL();
-    /**
-     * Became a peripheral when B
-     */
-    void BPeripheralL();
-    /**
-     * Became a Host when B
-     */
-    void BHostL();
-
-    // From bus activity observer
-    /**
-     * Bus is in idle
-     */
-    void BusIdleL();
-    /**
-     * Bus active
-     */
-    void BusActiveL();
-
-    // From Host Event notification observer
-    /**
-     * Device is attached
-     * @param aInfo Device event data
-     */
-    void DeviceAttachedL(TDeviceEventInformation aInfo);
-    /**
-     * Device is detached
-     * @param aInfo Device event data
-     */
-    void DeviceDetachedL(TDeviceEventInformation aInfo);
-    
-    /**
-      * Drivers successfully loaded
-      * @param aInfo Device event data
-      */
-     virtual void DriverLoadSuccessL(TDeviceEventInformation aInfo);
-     /**
-      * Drivers loaded partially
-      * @param aInfo Device event data
-      */
-     virtual void DriverLoadPartialSuccessL(TDeviceEventInformation aInfo);
-     /**
-      * Drivers loading failed
-      * @param aInfo Device event data
-      */
-     virtual void DriverLoadFailureL(TDeviceEventInformation aInfo);
+protected:
 
     // From message notification observer
     /**
      * Message received
      * @param aMessage message id
      */
-    void MessageNotificationReceivedL(TInt aMessage);
-    /**
-     * Connected to hub in wrong level 
-     */
-    void BadHubPositionL();
-    /**
-     * VBus error happened
-     */
-    void VBusErrorL();
-    /**
-     * SRP request received
-     */
-    void SrpReceivedL();
+    virtual void MessageNotificationReceivedL(TInt aMessage);
+
     /**
      * Session request received
      */
-    void SessionRequestedL();
-
-    /**
-     * Default constructor
-     * @param aWatcher owner
-     */
-    CUsbStateHostHandle(CUsbOtgWatcher* aWatcher);
-
-    /**
-     * 2nd phase construction
-     */
-    void ConstructL();
-
-    //from CUsbState
-    /**
-     * State id
-     * @return state id
-     */
-    TUsbStateIds Id();
+    virtual void SessionRequestedL();
 
     /**
      * This is called when switched to this state, 
@@ -198,20 +64,24 @@
      * trigger it and transition will not happen. This forces the transition in such cases.
      *
      */
-    void JustAdvancedToThisStateL();
-
-    /**
-     * This is called when leaving this state, 
-     *
-     */
-    void JustBeforeLeavingThisStateL();
+    virtual void JustAdvancedToThisStateL();
 
     /**
      * handles issue
      */
-    void DoHandleL();
+    virtual void DoHandleL() = 0;
 
-private:
+    /**
+     * Default constructor
+     * @param aWatcher owner
+     */
+    CUsbStateHostHandle(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * 2nd phase construction
+     */
+    void ConstructL();
+
     // data
 
     /**
@@ -219,17 +89,7 @@
      */
     TInt iWhat;
 
-    /** 
-     * too much power timer
-     * own
-     */
-    CUsbTimer* iTooMuchPowerTimer;
-    
-    /** 
-     * drivers not found
-     * own
-     */
-    CUsbTimer* iDriversNotFoundTimer;
+private:
     };
 
 #endif //  C_USBSTATEHOSTHANDLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/inc/cusbstatehosthandledropping.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,145 @@
+/*
+ * 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:  Implements concrete state
+ *
+ */
+
+#ifndef C_USBSTATEHOSTHANDLEDROPPING_H
+#define C_USBSTATEHOSTHANDLEDROPPING_H
+
+#include "cusbstatehosthandle.h"
+
+#ifndef STIF
+#include "cusbnotifmanager.h"
+#else
+#include "mockcusbnotifmanager.h"
+#endif
+
+class CUsbOtgWatcher;
+
+/**
+ *  problem handling class, dropping vbus
+ *
+ */
+NONSHARABLE_CLASS( CUsbStateHostHandleDropping ) : public CUsbStateHostHandle,
+MWaitNotifierObserver
+// this means only one wait notifier at a time can be shown by this state, might be redesigned
+
+    {
+    friend class CtUsbOtgWatcher;
+    friend class CUsbOtgWatcher;
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aWatcher owner
+     */
+    static CUsbStateHostHandleDropping* NewL(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * Destructor.
+     */
+    virtual ~CUsbStateHostHandleDropping();
+
+private:
+
+    // from MWaitNotifierObserver
+    /**
+     * Callback when notifier is completed
+     * @param aFeedback how notifier completed
+     */
+    void WaitNotifierCompletedL(TInt aFeedback);
+
+    // From VBus observer
+    /**
+     * VBus up
+     */
+    void VBusUpL();
+
+    /**
+     * VBus down
+     */
+    void VBusDownL();
+
+    // From Host Event notification observer
+    /**
+     * Device is attached
+     * @param aInfo Device event data
+     */
+    void DeviceAttachedL(TDeviceEventInformation aInfo);
+
+    /**
+     * Device is detached
+     * @param aInfo Device event data
+     */
+    void DeviceDetachedL(TDeviceEventInformation aInfo);
+
+    /**
+     * Drivers successfully loaded
+     * @param aInfo Device event data
+     */
+    void DriverLoadSuccessL(TDeviceEventInformation aInfo);
+
+    /**
+     * Drivers loaded partially
+     * @param aInfo Device event data
+     */
+    void DriverLoadPartialSuccessL(TDeviceEventInformation aInfo);
+
+    /**
+     * Drivers loading failed
+     * @param aInfo Device event data
+     */
+    void DriverLoadFailureL(TDeviceEventInformation aInfo);
+
+    // From message notification observer
+    /**
+     * Message received
+     * @param aMessage message id
+     */
+    void MessageNotificationReceivedL(TInt aMessage);
+
+    //from CUsbState
+    /**
+     * State id
+     * @return state id
+     */
+    virtual TUsbStateIds Id();
+
+    /**
+     * This is called when leaving this state, 
+     *
+     */
+    void JustBeforeLeavingThisStateL();
+
+    /**
+     * handles issue
+     */
+    void DoHandleL();
+
+    /**
+     * Default constructor
+     * @param aWatcher owner
+     */
+    CUsbStateHostHandleDropping(CUsbOtgWatcher& aWatcher);
+
+    /**
+     * 2nd phase construction
+     */
+    void ConstructL();
+
+    };
+
+#endif //  C_USBSTATEHOSTDROPPINGHANDLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/inc/cusbstatehostundefined.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,122 @@
+/*
+ * 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:  Implementation of the concret state
+ *
+ */
+
+#ifndef C_USBSTATEHOSTUNDEFINED_H
+#define C_USBSTATEHOSTUNDEFINED_H
+
+#include "cusbstatehostabase.h"
+class CUsbOtgWatcher;
+/**
+ *  This class implements behaviour in undefined state (when host)
+ *
+ */
+NONSHARABLE_CLASS( CUsbStateHostUndefined ) : public CUsbStateHostABase
+    {
+public:
+
+    /**
+     * Destruction
+     */
+    virtual ~CUsbStateHostUndefined();
+
+    /**
+     * Two-phased constructor.
+     * @param aWatcher owner
+     */
+    static CUsbStateHostUndefined* NewL(CUsbOtgWatcher& aWatcher);
+
+private:
+    /**
+     * default constructor is protected to be able to be inherited by child classes
+     * @param aOwner owner of the state
+     */
+    CUsbStateHostUndefined(CUsbOtgWatcher& aOwner);
+
+    /**
+     * Second phase construction
+     */
+    void ConstructL();
+
+    /**
+     * This function is needed to find a real state by id
+     * This might be used in switching states in watcher. New state object searched by its id
+     * @return Id
+     */
+    virtual TUsbStateIds Id();
+
+    // From VBus observer
+    /**
+     * VBus down
+     */
+    virtual void VBusDownL();
+
+    /**
+     * VBus UP
+     */
+    virtual void VBusUpL();
+
+    /**
+     * VBus error
+     */
+    virtual void VBusErrorL();
+
+    /**
+     * AVBus Error
+     */
+    virtual void AVBusErrorL();
+
+    /**
+     * Became to Idle when B
+     */
+    virtual void BIdleL();
+
+    /**
+     * Became to Peripheral when B
+     */
+    virtual void BPeripheralL();
+
+    // From Host Event notification observer
+    /**
+     * Device is detached
+     * @param aInfo Device event data
+     */
+    virtual void DeviceDetachedL(TDeviceEventInformation aInfo);
+
+    // From message notification observer
+    /**
+     * Message received
+     * @param aMessage message id
+     */
+    virtual void MessageNotificationReceivedL(TInt aMessage);
+    /**
+     * SRP request received
+     */
+    virtual void SrpReceivedL();
+    /**
+     * Connected to hub in wrong level 
+     */
+    virtual void BadHubPositionL();
+    /**
+     * Session request received
+     */
+    virtual void SessionRequestedL();
+
+private:
+    // data
+    };
+
+#endif //  C_USBSTATEHOSTUNDEFINED_H
--- a/usbengines/usbotgwatcher/inc/cusbtimer.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbtimer.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,19 +1,19 @@
 /*
-* 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:  timer
+ * 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:  timer
+ *
+ */
 
 #ifndef C_USBTIMER_H
 #define C_USBTIMER_H
@@ -65,7 +65,7 @@
      * @param aObserver will get call back
      * @param aTimerId timer id
      */
-    static CUsbTimer * NewL(MUsbTimerObserver* aObserver,
+    static CUsbTimer * NewL(MUsbTimerObserver& aObserver,
             TUsbTimerId aTimerId);
 
     /**
@@ -106,7 +106,7 @@
      * @param aObserver will get call back
      * @param aTimerId timer id 
      */
-    CUsbTimer(MUsbTimerObserver* aObserver, TUsbTimerId aTimerId);
+    CUsbTimer(MUsbTimerObserver& aObserver, TUsbTimerId aTimerId);
 
     /**
      * 2nd phase construction
@@ -120,7 +120,7 @@
      * Observer
      * not own
      */
-    MUsbTimerObserver* iObserver;
+    MUsbTimerObserver& iObserver;
 
     /**
      * RTimer API
--- a/usbengines/usbotgwatcher/inc/cusbvbusobserver.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbvbusobserver.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2008-2008 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:  Implements VBus observer
+ * Copyright (c) 2008-2008 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:  Implements VBus observer
+ *
+ */
 
 #ifndef C_USBVBUSOBSERVER_H
 #define C_USBVBUSOBSERVER_H
@@ -41,7 +40,7 @@
     /**
      * error handler
      * @param aError error code
-     */   
+     */
     virtual void VBusObserverErrorL(TInt aError)=0;
 
     };
@@ -80,13 +79,13 @@
      * Adds observer to a list
      * @param aObserver observer
      */
-    void SubscribeL(MUsbVBusObserver* aObserver);
+    void SubscribeL(MUsbVBusObserver& aObserver);
 
     /**
      * removes observer from list
      * @param aObserver observer
      */
-    void UnsubscribeL(MUsbVBusObserver* aObserver);
+    void UnsubscribeL(MUsbVBusObserver& aObserver);
 
 private:
 
@@ -128,7 +127,7 @@
 
     /**
      * The observer reports state changes to own observers
-     * Own
+     * Not owns
      */
     RPointerArray<MUsbVBusObserver> iObservers;
 
--- a/usbengines/usbotgwatcher/inc/cusbwaitnotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbwaitnotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2008-2008 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:  Usb waiting notifier implementation
+ * Copyright (c) 2008-2008 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:  Usb waiting notifier implementation
+ *
+ */
 
 #ifndef C_USBWAITNOTIFIER_H
 #define C_USBWAITNOTIFIER_H
@@ -39,7 +38,7 @@
      * @return Pointer to the new instance of CUsbWaitNotifier
      */
     static CUsbWaitNotifier* NewL(RNotifier& aNotifier,
-            CUsbNotifManager* aNotifManager, TUint aNotifId);
+            CUsbNotifManager& aNotifManager, TUint aNotifId);
 
     /**
      * Destructor.
@@ -54,7 +53,7 @@
      * @param aNotifManager Owner of the class, will destroy the object when needed
      * @param aNotifId Id of the notifier
      */
-    CUsbWaitNotifier(RNotifier& aNotifier, CUsbNotifManager* aNotifManager,
+    CUsbWaitNotifier(RNotifier& aNotifier, CUsbNotifManager& aNotifManager,
             TUint aNotifId);
 
     /**
--- a/usbengines/usbotgwatcher/inc/cusbwarningnotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/cusbwarningnotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 2008-2008 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:  Usb warning notifier implementation
+ * Copyright (c) 2008-2008 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:  Usb warning notifier implementation
+ *
+ */
 
 #ifndef C_USBWARNINGNOTIFIER_H
 #define C_USBWARNINGNOTIFIER_H
@@ -40,7 +39,7 @@
      * @return Pointer to the new instance of CUsbWarningNotifier
      */
     static CUsbWarningNotifier* NewL(RNotifier& aNotifier,
-            CUsbNotifManager* aNotifManager, TUint aNotifId);
+            CUsbNotifManager& aNotifManager, TUint aNotifId);
 
     /**
      * Destructor.
@@ -56,7 +55,7 @@
      * @param aNotifId Id of the notifier
      */
     CUsbWarningNotifier(RNotifier& aNotifier,
-            CUsbNotifManager* aNotifManager, TUint aNotifId);
+            CUsbNotifManager& aNotifManager, TUint aNotifId);
 
     /**
      * 2nd phase construction
--- a/usbengines/usbotgwatcher/inc/debug.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/debug.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,118 +1,161 @@
 /*
-* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-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".
+* This material, including documentation and any related computer
+* programs, is protected by copyright controlled by Nokia. All
+* rights are reserved. Copying, including reproducing, storing
+* adapting or translating, any or all of this material requires the
+* prior written consent of Nokia. This material also contains
+* confidential information which may not be disclosed to others
+* without the prior written consent of Nokia.
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
-* Description:  Central place for debug-type macros & functions
+* Description: Debug macros and declarations. 
 *
 */
 
+#ifndef DEBUG_H
+#define DEBUG_H
 
-#ifndef _USBWATCHER_DEBUG_H
-#define _USBWATCHER_DEBUG_H
+//////////////////////////////////////////////////////////////////////////////
+// Here are parameters need to be modified. 
+// Component name 
+#define MODULE_NAME "USBOTGWATCHER"
+//////////////////////////////////////////////////////////////////////////////
+
+
+// For handling unicode strings as L##MACRO is interpreted as LMACRO
+#define WIDEN2( x ) L##x
+#define WIDEN( x ) WIDEN2( x )
+
+_LIT( KUsbPanicModule, ""WIDEN( MODULE_NAME ) );
 
 #ifdef _DEBUG
 
-// Enable this to enable memory tracing
-//#define MEMTRACE
-
-// Following define is to enable OOM
-// situations in SRCS
-// SHOULD NEVER BE IN RELEASES.
-//#define TEST_OOM
-
-#ifdef __WINS__
-
-// File logging for WINS
-#define __FLOGGING__
+// Comment this line out if using real-time debugging
+//#define LOG_TO_FILE 
+// ===========================================================================
+#if defined ( LOG_TO_FILE )
+// ===========================================================================
+// Add corresponding libabry in mmp file
+// LIBRARY    flogger.lib    
+// The log file is located at  
+// c:\logs\usb\MODULE_NAME.txt
 
-#else
-
-// Logging with RDebug for target HW
-#define __CLOGGING__
-
-#endif //__WINS__
-
-#endif // Debug
-
-#if defined ( __FLOGGING__ )
-
-_LIT( KLogFile,"UsbWatcher.txt" );
-_LIT( KLogDir,"usb" );
-
-#include <f32file.h>
 #include <flogger.h>
 
-#define FLOG( a ) { FPrint( a ); }
-
-#define FLOGHEX( value, len ) { RFileLogger::HexDump( KLogDir, KLogFile, EFileLoggingModeAppend, "", " ",value, len ); }
-
-#define FTRACE( a ) { a; }
+#define DESC( x ) TPtrC( ( const TText* ) ( x ) )
+#define DESC8( x ) TPtrC8( ( const TUint8* ) ( x ) )
+_LIT( KUsbLogDir, "USB" );
+_LIT( KUsbLogFile, ""WIDEN(MODULE_NAME)L".txt" );
 
-inline void FPrint( const TRefByValue<const TDesC> aFmt, ... )
-{
-    VA_LIST list;
-    VA_START( list, aFmt );
-    RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list );
+// s: c string. 
+#define LOG(s) RFileLogger::WriteFormat( KUsbLogDir, \
+                KUsbLogFile, EFileLoggingModeAppend, \
+                DESC8( "["MODULE_NAME"] "##s ) )
 
-    // If memory tracing is activated.
-#ifdef MEMTRACE
-    TInt size;
-    User::Heap().AllocSize( size );
-    RFileLogger::WriteFormat( KLogDir, KLogFile, EFileLoggingModeAppend, _L( "[USBWATCHER]\tmemory\tMemory usage: %d high: %d" ), size, User::Heap().Size() );
-#endif
-}
+// s: c string contains "%x"
+// v: varaible corresponding to %x
+#define LOG1(s, v) RFileLogger::WriteFormat( KUsbLogDir, \
+                KUsbLogFile, EFileLoggingModeAppend, \
+                DESC8( "["MODULE_NAME"] "##s ), v)
+// s: c string contains "%x%y"
+// v1: varaible corresponding to %x
+// v2: varaible corresponding to %y
+#define LOG2(s, v1, v2) RFileLogger::WriteFormat( KUsbLogDir, \
+                KUsbLogFile, EFileLoggingModeAppend, \
+                DESC8( "["MODULE_NAME"] "##s ), v1, v2)
 
-inline void FHex( const TUint8* aPtr, TInt aLen )
-{
-    RFileLogger::HexDump( KLogDir, KLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen );
-}
+// s: c string contains "%x%y%z"
+// v1: varaible corresponding to %x
+// v2: varaible corresponding to %y
+// v3: varaible corresponding to %z
+#define LOG3(s, v1, v2, v3) RFileLogger::WriteFormat( KUsbLogDir, \
+            KUsbLogFile, EFileLoggingModeAppend, \
+            DESC8( "["MODULE_NAME"] "##s ), v1, v2, v3 )
 
-inline void FHex( const TDesC8& aDes )
-{
-    FHex( aDes.Ptr(), aDes.Length() );
-}
+class TFuncLogger
+    {
+public:
+    TFuncLogger(const TDesC8& aFuncName)
+        {
+        iFuncName.Set( aFuncName );
+        RFileLogger::WriteFormat( KUsbLogDir, KUsbLogFile, EFileLoggingModeAppend, 
+                DESC8( "["MODULE_NAME"] >>%s" ), iFuncName.Ptr() );
+        }
+    ~TFuncLogger()
+        {
+        RFileLogger::WriteFormat( KUsbLogDir, KUsbLogFile, 
+                EFileLoggingModeAppend, 
+                DESC8( "["MODULE_NAME"] <<%s" ), iFuncName.Ptr() );
+        }
+private:
+    TPtrC8 iFuncName;
+    };
+// ===========================================================================
+#else //Real-time logging
+// ===========================================================================
+#include <e32debug.h>
 
-// RDebug logging
-#elif defined(__CLOGGING__)
+// Paramters same as above.
+#define LOG( str ) { RDebug::Printf( "["MODULE_NAME"] %s", str  ); }
 
-#include <e32svr.h>
-
-#define FLOG( a ) { RDebug::Print( a ); }
-
-#define FLOGHEX( a )
+#define LOG1( s, v ) { RDebug::Printf( "["MODULE_NAME"] "##s , v ); }
 
-#define FTRACE( a ) { a; }
+#define LOG2( s, v1,v2 ) { RDebug::Printf( "["MODULE_NAME"] "##s , v1, v2 ); }
 
-// Declare the FPrint function
+#define LOG3( s, v1, v2, v3 ) { RDebug::Printf( "["MODULE_NAME"] "##s , \
+        v1, v2, v3); }
 
-inline void FPrint( const TRefByValue<const TDesC> aFmt, ... )
-{
-    VA_LIST list;
-    VA_START( list,aFmt );
-    TInt tmpInt = VA_ARG( list, TInt );
-    TInt tmpInt2 = VA_ARG( list, TInt );
-    TInt tmpInt3 = VA_ARG( list, TInt );
-    VA_END( list );
-    RDebug::Print( aFmt, tmpInt, tmpInt2, tmpInt3 );
-}
+class TFuncLogger
+    {
+public:
+    TFuncLogger(const TPtrC8& aFuncName) : iFuncName( aFuncName )
+        {
+        RDebug::Printf( "["MODULE_NAME"] >>%s", iFuncName.Ptr());
+        }
+    ~TFuncLogger()
+        {
+        RDebug::Printf( "["MODULE_NAME"] <<%s", iFuncName.Ptr());
+        }
+private:
+    TPtrC8 iFuncName;
+    };
+#endif // LOG_TO_FILE
+
+#define LEAVE( exp )  {volatile TInt err = exp; \
+            LOG3( "LEAVE(%d) @file: %s, line: %d", err, __FILE__, __LINE__ );\
+            User::Leave( err );}
+
+#define LEAVEIFERROR( exp ) {volatile TInt err = exp; if(err < 0) LEAVE(err);}
+
+#define PANIC( exp ) {volatile TInt err = exp; \
+            LOG3( "PANIC(%d) @file: %s, line: %d", err, __FILE__, __LINE__ );\
+            User::Panic( KUsbPanicModule, err );}
 
 
-#else   // No loggings --> reduced code size
+#define LOG_FUNC TFuncLogger __instrument(TPtrC8((TUint8*)__PRETTY_FUNCTION__));
+
+#else // _DEBUG   
+// ===========================================================================
 
-#define FLOG( a )
-#define FLOGHEX( a )
-#define FTRACE( a )
+#define LOG( s )
+#define LOG1( s, v ) 
+#define LOG2( s, v1, v2 )
+#define LOG3( s, v1, v2, v3 )
+#define LOG_FUNC_ENTRY 
+#define LOG_FUNC_EXIT 
+#define LEAVE( exp ) User::Leave( exp );
+#define LEAVEIFERROR( exp ) User::LeaveIfError( exp );
+#define PANIC( err ) User::Panic( KUsbPanicModule, err );
+#define LOG_FUNC
+// ===========================================================================
+#endif // _DEBUG
+// ===========================================================================
+#endif // DEBUG_H
 
-#endif //_DEBUG
-
-#endif // USBDEVCON_DEBUG_H
-
+// End of File
--- a/usbengines/usbotgwatcher/inc/definitions.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/definitions.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Definitions for otgwatcher
+ * 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:  Definitions for otgwatcher
+ *
+ */
 
 #ifndef DEFENITIONS_H
 #define DEFENITIONS_H
@@ -38,14 +37,15 @@
  */
 enum TUsbStateIds
     {
-    EUsbStateUndefined,
-    
+    EUsbStateHostUndefined,
+
     EUsbStateHostAInitiate,
     EUsbStateHostAHost,
     EUsbStateHostAPeripheral,
-    EUsbStateHostAIdle,
 
-    EUsbStateHostHandle
+    EUsbStateHostDelayAttachedHandle,
+    EUsbStateHostDelayNotAttachedHandle,
+    EUsbStateHostHandleDropping
     };
 
 const TInt KUsbWatcherPeripheralIsNotConnected = 0; // means not(KUsbWatcherPeripheralIsConnected)
--- a/usbengines/usbotgwatcher/inc/errors.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/errors.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  File contains error codes, from Watcher perspective
+ * 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:  File contains error codes, from Watcher perspective
+ *
+ */
 
 #ifndef ERRORS_H
 #define ERRORS_H
@@ -38,7 +37,11 @@
     EUsbWatcherVBusObserverError,
     EUsbWatcherHostEventNotificationError,
     EUsbWatcherOtgStateError,
-    EUsbWatcherMessageNotificationError
+    EUsbWatcherMessageNotificationError,
+    EUsbWatcherCanNotStartSession,
+    EUsbWatcherCanNotEnableDriverLoading,
+    EUsbWatcherCanNotClearBusError,
+    EUsbWatcherCanNotRaiseVBus
 
     };
 
--- a/usbengines/usbotgwatcher/inc/panic.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/inc/panic.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Central place for debug-type macros & functions
+ * 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:  Central place for debug-type macros & functions
+ *
+ */
 #ifndef USBWATCHER_PANIC_H
 #define USBWATCHER_PANIC_H
 #include <e32base.h>
@@ -107,10 +106,15 @@
     EWrongTimerId, //66
     EUnexpectedNotifId, //67
     EUnknownUsbServiceState, //68
-    EUnexpectedUsbServiceState,    //69
+    EUnexpectedUsbServiceState, //69
     EUnexpectedUsbSwitchPersonalityState, //70
-    
-    ECanNotFindUsbOtgWatcherStateObserver //71
+
+    ECanNotFindUsbOtgWatcherStateObserver, //71
+    ENoObserverToUnsubscribe, // 72
+    EObserverAlreadyExists, //73
+    EIdForNotDefinedStateRequested, //74
+    ECanNotFindHostEventNotificationObserver, //75
+    ENoTimersDefinedForThisClass    //76
 
     };
 
--- a/usbengines/usbotgwatcher/src/cusbbusactivityobserver.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbbusactivityobserver.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbotgdefs.h>
 
@@ -40,8 +39,7 @@
 //
 void CUsbBusActivityObserver::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::ConstructL" ) );
+    LOG_FUNC
 
     User::LeaveIfError(iBusActivity.Attach(KUidUsbManCategory,
             KUsbOtgConnectionIdleProperty));
@@ -54,8 +52,7 @@
 //
 CUsbBusActivityObserver* CUsbBusActivityObserver::NewL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::NewL" ) );
+    LOG_FUNC
 
     CUsbBusActivityObserver* self = new (ELeave) CUsbBusActivityObserver();
     CleanupStack::PushL(self);
@@ -71,8 +68,7 @@
 CUsbBusActivityObserver::~CUsbBusActivityObserver()
 
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::~CUsbBusActivityObserver" ) );
+    LOG_FUNC
 
     Cancel();
 
@@ -89,20 +85,16 @@
 CUsbBusActivityObserver::TBusActivity CUsbBusActivityObserver::BusActivity()
     {
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::BusActivity" ) );
-
     TInt val(0);
 
     TInt err = iBusActivity.Get(val);
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::BusActivity CanNotGetBusActivityProperty" ) );
-        Panic(ECanNotGetBusActivityProperty);
+        LOG("ECanNotGetBusActivityProperty" );
+        Panic( ECanNotGetBusActivityProperty);
         }
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::State = %d" ), val ));
-
     return (0 == val ? EBusActive : EBusIdle);
 
     }
@@ -111,11 +103,18 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbBusActivityObserver::SubscribeL(MUsbBusActivityObserver* aObserver)
+void CUsbBusActivityObserver::SubscribeL(MUsbBusActivityObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iObservers.Append(aObserver));
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iObservers.Find(&aObserver))
+        {
+        LOG( "Observer already exists" );
+        Panic( EObserverAlreadyExists);
+        return;
+        }
+    iObservers.AppendL(&aObserver);
 
     if (KFirst == iObservers.Count()) // first item
         {
@@ -129,31 +128,21 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbBusActivityObserver::UnsubscribeL(MUsbBusActivityObserver* aObserver)
+void CUsbBusActivityObserver::UnsubscribeL(MUsbBusActivityObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::UnsubscribeL" ) );
+    LOG_FUNC
 
-    if (0 == iObservers.Count()) // no items
+    TInt i(iObservers.Find(&aObserver));
+    if (KErrNotFound == i)
         {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::UnsubscribeL No observers" ) );
+        LOG( "Observer not found" );
+        Panic( ECanNotFindBusActivityObserver);
         return;
         }
-        
-    TInt i(0);
-    while (i < iObservers.Count() && aObserver != iObservers[i])
-        ++i;
 
-    if (aObserver == iObservers[i]) // found
-        {
-        iObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::UnsubscribeL CanNotFindBusActivityObserver " ) );
-        Panic(ECanNotFindBusActivityObserver);
-        }
+    iObservers.Remove(i);
 
-    if (0 == iObservers.Count()) // no items
+    if (0 == iObservers.Count()) // no observers anymore
         {
         // cancel pending request
         Cancel();
@@ -166,15 +155,17 @@
 //
 void CUsbBusActivityObserver::RunL()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::RunL iStatus = %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1( "iStatus = %d" , iStatus.Int());
 
     // if error occured, inform observers
-    if(KErrNone != iStatus.Int())
+    if (KErrNone != iStatus.Int())
         {
         for (TInt i(0); i < iObservers.Count(); ++i)
-                    {
-                    iObservers[i]->BusActivityErrorL(iStatus.Int());
-                    }
+            {
+            iObservers[i]->BusActivityErrorL(iStatus.Int());
+            }
         }
 
     // re-issue request first
@@ -188,7 +179,7 @@
         {
         case EBusIdle:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::RunL BusIdle" ) );
+            LOG("BusIdle");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -199,7 +190,7 @@
 
         case EBusActive:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::RunL BusActive" ) );
+            LOG("BusActive");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -210,8 +201,8 @@
 
         default:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::RunL BusActive WrongBusState" ) );
-            Panic(EWrongBusState);
+            LOG("WrongBusState" );
+            Panic( EWrongBusState);
             }
         }
 
@@ -232,9 +223,10 @@
 //
 TInt CUsbBusActivityObserver::RunError(TInt aError)
     {
+    LOG_FUNC
 
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbBusActivityObserver::RunError aError = %d" ), aError));
-                  
+    LOG1( "aError = %d", aError );
+
     // try to continue	
     return KErrNone;
 
--- a/usbengines/usbotgwatcher/src/cusbhosteventnotificationobserver.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbhosteventnotificationobserver.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbman.h>
 
@@ -41,8 +40,7 @@
 //
 void CUsbHostEventNotificationObserver::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::ConstructL" ) );
+    LOG_FUNC
 
     }
 
@@ -53,8 +51,7 @@
 CUsbHostEventNotificationObserver* CUsbHostEventNotificationObserver::NewL(
         RUsb* aUsb)
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::NewL" ) );
+    LOG_FUNC
 
     CUsbHostEventNotificationObserver* self =
             new (ELeave) CUsbHostEventNotificationObserver(aUsb);
@@ -70,8 +67,7 @@
 //
 CUsbHostEventNotificationObserver::~CUsbHostEventNotificationObserver()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::~CUsbHostEventNotificationObserver" ) );
+    LOG_FUNC
 
     Cancel();
 
@@ -84,11 +80,19 @@
 // ---------------------------------------------------------------------------
 //
 void CUsbHostEventNotificationObserver::SubscribeL(
-        MUsbHostEventNotificationObserver* aObserver)
+        MUsbHostEventNotificationObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iObservers.Append(aObserver));
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iObservers.Find(&aObserver))
+        {
+        LOG("Observer already exists" );
+        Panic( EObserverAlreadyExists);
+        return;
+        }
+
+    iObservers.AppendL(&aObserver);
 
     if (KFirst == iObservers.Count()) // first item
         {
@@ -103,30 +107,21 @@
 // ---------------------------------------------------------------------------
 //
 void CUsbHostEventNotificationObserver::UnsubscribeL(
-        MUsbHostEventNotificationObserver* aObserver)
+        MUsbHostEventNotificationObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::UnsubscribeL" ) );
-    if (0 == iObservers.Count()) // no items
+    LOG_FUNC
+
+    TInt i(iObservers.Find(&aObserver));
+    if (KErrNotFound == i)
         {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::UnsubscribeL No observers" ) );
+        LOG("Observer not found");
+        Panic( ECanNotFindHostEventNotificationObserver);
         return;
         }
-        
-    TInt i(0);
-    while (i < iObservers.Count() && aObserver != iObservers[i])
-        ++i;
 
-    if (aObserver == iObservers[i]) // found
-        {
-        iObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::UnsubscribeL CanNotFindIdPinObserver" ) );
-        Panic(ECanNotFindIdPinObserver);
-        }
+    iObservers.Remove(i);
 
-    if (0 == iObservers.Count()) // no items
+    if (0 == iObservers.Count()) // no observers anymore
         {
         // cancel pending request
         Cancel();
@@ -139,17 +134,19 @@
 //
 void CUsbHostEventNotificationObserver::RunL()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iStatus = %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1( "iStatus = %d", iStatus.Int());
 
-        // if error occured, tell to Observers
-        if(KErrNone != iStatus.Int()) 
+    // if error occured, tell to Observers
+    if (KErrNone != iStatus.Int())
+        {
+        for (TInt i(0); i < iObservers.Count(); ++i)
             {
-            for (TInt i(0); i < iObservers.Count(); ++i)
-                 {
-                 iObservers[i]->HostEventNotificationErrorL(iStatus.Int());
-                 }
-            return;
+            iObservers[i]->HostEventNotificationErrorL(iStatus.Int());
             }
+        return;
+        }
 
     TDeviceEventInformation dei(iEventInfo);
 
@@ -157,20 +154,20 @@
     iUsb->HostEventNotification(iStatus, iEventInfo);
     SetActive();
 
-        // Log the event
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iEventInfo.iDeviceId         = %d" ), dei.iDeviceId));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iEventInfo.iEventType        = %d" ), dei.iEventType));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iEventInfo.iError            = %d" ), dei.iError));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iEventInfo.iDriverLoadStatus = %d" ), dei.iDriverLoadStatus));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iEventInfo.iVid              = %d" ), dei.iVid));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL iEventInfo.iPid              = %d" ), dei.iPid));
+    // Log the event
+    LOG1( "iEventInfo.iDeviceId         = %d" , dei.iDeviceId);
+    LOG1( "iEventInfo.iEventType        = %d" , dei.iEventType);
+    LOG1( "iEventInfo.iError            = %d" , dei.iError);
+    LOG1( "iEventInfo.iDriverLoadStatus = %d" , dei.iDriverLoadStatus);
+    LOG1( "iEventInfo.iVid              = %d" , dei.iVid);
+    LOG1( "iEventInfo.iPid              = %d" , dei.iPid);
 
     // then process property change
     switch (dei.iEventType)
         {
         case EDeviceAttachment:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL DeviceAttachment" ) );
+            LOG("DeviceAttachment" );
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -181,7 +178,7 @@
 
         case EDeviceDetachment:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL DeviceDetachment" ) );
+            LOG( "DeviceDetachment" );
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -196,7 +193,7 @@
                 {
                 case EDriverLoadSuccess:
                     {
-                        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL DriverLoadSuccess" ) );
+                    LOG( "DriverLoadSuccess" );
 
                     for (TInt i(0); i < iObservers.Count(); ++i)
                         {
@@ -207,7 +204,7 @@
                     }
                 case EDriverLoadPartialSuccess:
                     {
-                        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL DriverLoadPartialSuccess" ) );
+                    LOG( "DriverLoadPartialSuccess" );
 
                     for (TInt i(0); i < iObservers.Count(); ++i)
                         {
@@ -218,7 +215,7 @@
                     }
                 case EDriverLoadFailure:
                     {
-                        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL DriverLoadFailure" ) );
+                    LOG( "DriverLoadFailure");
 
                     for (TInt i(0); i < iObservers.Count(); ++i)
                         {
@@ -228,8 +225,8 @@
                     }
                 default:
                     {
-                        FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL DriverLoadFailure WrongDriverLoadStatus" ) );
-                    Panic(EWrongDriverLoadStatus);
+                    LOG("WrongDriverLoadStatus" );
+                    Panic( EWrongDriverLoadStatus);
                     }
                 }
             break;
@@ -237,8 +234,8 @@
             }
         default:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunL WrongHostEventNotification" ) );
-            Panic(EWrongHostEventNotification);
+            LOG( "WrongHostEventNotification" );
+            Panic( EWrongHostEventNotification);
             }
 
         }
@@ -260,8 +257,9 @@
 //
 TInt CUsbHostEventNotificationObserver::RunError(TInt aError)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbHostEventNotificationObserver::RunError aError = %d" ), aError));
+    LOG1( "aError = %d" , aError);
 
     // try to recover and continue	
     return KErrNone;
--- a/usbengines/usbotgwatcher/src/cusbidpinobserver.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbidpinobserver.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbotgdefs.h>
 
@@ -40,8 +39,7 @@
 //
 void CUsbIdPinObserver::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::ConstructL" ) );
+    LOG_FUNC
 
     User::LeaveIfError(iIdPin.Attach(KUidUsbManCategory,
             KUsbOtgIdPinPresentProperty));
@@ -54,8 +52,7 @@
 //
 CUsbIdPinObserver* CUsbIdPinObserver::NewL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::NewL" ) );
+    LOG_FUNC
 
     CUsbIdPinObserver* self = new (ELeave) CUsbIdPinObserver();
     CleanupStack::PushL(self);
@@ -70,8 +67,7 @@
 //
 CUsbIdPinObserver::~CUsbIdPinObserver()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::~CUsbIdPinObserver" ) );
+    LOG_FUNC
 
     Cancel();
 
@@ -89,33 +85,35 @@
 /* this getter is not const, because for some reason RProperty::Get is not const */
     {
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::IdPin" ) );
-
     TInt val(0);
 
     TInt err = iIdPin.Get(val);
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::IdPin CanNotGetIdPinProperty" ) );
-        Panic(ECanNotGetIdPinProperty);
+        LOG("CanNotGetIdPinProperty" );
+        Panic( ECanNotGetIdPinProperty);
         }
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbIdPinObserver::IdPin = %d" ), val ));
-
-    // not found in docs clear definition of this property. Verification is needed   
-    return (0 == val ? EIdPinOff : EIdPinOn);
+    return (EFalse == val ? EIdPinOff : EIdPinOn);
     }
 
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //   
-void CUsbIdPinObserver::SubscribeL(MUsbIdPinObserver* aObserver)
+void CUsbIdPinObserver::SubscribeL(MUsbIdPinObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iObservers.Append(aObserver));
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iObservers.Find(&aObserver))
+        {
+        LOG("Observer already exists" );
+        Panic( EObserverAlreadyExists);
+        return;
+        }
+    iObservers.AppendL(&aObserver);
 
     if (KFirst == iObservers.Count()) // first item
         {
@@ -129,30 +127,21 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbIdPinObserver::UnsubscribeL(MUsbIdPinObserver* aObserver)
+void CUsbIdPinObserver::UnsubscribeL(MUsbIdPinObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::UnsubscribeL" ) );
-    if (0 == iObservers.Count()) // no items
+    LOG_FUNC
+
+    TInt i(iObservers.Find(&aObserver));
+    if (KErrNotFound == i)
         {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::UnsubscribeL No observers" ) );
+        LOG("Observer not found");
+        Panic( ECanNotFindIdPinObserver);
         return;
         }
-    
-    TInt i(0);
-    while (i < iObservers.Count() && aObserver != iObservers[i])
-        ++i;
 
-    if (aObserver == iObservers[i]) // found
-        {
-        iObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbIdPinObserver::UnsubscribeL CanNotGetIdPinObserver" ) );
-        Panic(ECanNotFindIdPinObserver);
-        }
+    iObservers.Remove(i);
 
-    if (0 == iObservers.Count()) // no items
+    if (0 == iObservers.Count()) // no observers anymore
         {
         // cancel pending request
         Cancel();
@@ -165,17 +154,19 @@
 //
 void CUsbIdPinObserver::RunL()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbIdPinObserver::RunL iStatus = %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1( "iStatus = %d" , iStatus.Int());
 
-        // if error occured, tell to Observers
-        if(KErrNone != iStatus.Int()) 
+    // if error occured, tell to Observers
+    if (KErrNone != iStatus.Int())
+        {
+        for (TInt i(0); i < iObservers.Count(); ++i)
             {
-            for (TInt i(0); i < iObservers.Count(); ++i)
-                 {
-                 iObservers[i]->IdPinErrorL(iStatus.Int());
-                 }
-            return;
+            iObservers[i]->IdPinErrorL(iStatus.Int());
             }
+        return;
+        }
 
     // re-issue request first
     iIdPin.Subscribe(iStatus);
@@ -189,7 +180,7 @@
         {
         case EIdPinOn:
             {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbIdPinObserver::RunL IdPin ON"));
+            LOG("IdPin ON");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -201,7 +192,7 @@
 
         case EIdPinOff:
             {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbIdPinObserver::RunL IdPin OFF"));
+            LOG("IdPin OFF");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -213,8 +204,8 @@
 
         default:
             {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbIdPinObserver::RunL WrongIdPinState"));
-            Panic(EWrongIdPinState);
+            LOG("WrongIdPinState");
+            Panic( EWrongIdPinState);
             }
         }
 
@@ -235,8 +226,9 @@
 //
 TInt CUsbIdPinObserver::RunError(TInt aError)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbIdPinObserver::RunError aError = %d" ), aError));
+    LOG1( "aError = %d", aError);
 
     // try to continue	
     return KErrNone;
--- a/usbengines/usbotgwatcher/src/cusbindicatornotifier.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbindicatornotifier.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 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:  Blink/show Usb indicator notifier implementation
+ * Copyright (c) 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:  Blink/show Usb indicator notifier implementation
+ *
+ */
 
 #include <AknSmallIndicator.h>
 #include <avkon.hrh>
@@ -33,11 +32,13 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CUsbIndicatorNotifier* CUsbIndicatorNotifier::NewL(CUsbNotifManager* aNotifManager, CUsbOtgWatcher* aOtgWatcher)
+CUsbIndicatorNotifier* CUsbIndicatorNotifier::NewL(
+        CUsbNotifManager& aNotifManager, CUsbOtgWatcher& aOtgWatcher)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::NewL" ));
+    LOG_FUNC
 
-    CUsbIndicatorNotifier* self = new (ELeave) CUsbIndicatorNotifier(aNotifManager, aOtgWatcher);
+    CUsbIndicatorNotifier* self = new (ELeave) CUsbIndicatorNotifier(
+            aNotifManager, aOtgWatcher);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self);
@@ -50,34 +51,30 @@
 //
 CUsbIndicatorNotifier::~CUsbIndicatorNotifier()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::~CUsbIndicatorNotifier" ) );
-        
+    LOG_FUNC
+
     Close();
     delete iIconBlinkingTimer;
-    
-    // Unsubscribe from VBus change notifications
-    if(iOtgWatcher)
+
+    if (iOtgWatcher.VBusObserver())
         {
-        if(iOtgWatcher->VBusObserver())
-            {
-            TRAPD(err, iOtgWatcher->VBusObserver()->UnsubscribeL(this));
-            err=err; // to avoid warning;
-            }
-        
-        // Unsubscribe from otg watcher states change notifications
-        TRAPD(err, iOtgWatcher->UnsubscribeL(this));
-        err=err; // to avoid warning; 
+        TRAP_IGNORE(iOtgWatcher.VBusObserver()->UnsubscribeL(*this));
         }
+
+    // Unsubscribe from otg watcher states change notifications
+    TRAP_IGNORE(iOtgWatcher.UnsubscribeL(*this));
     }
 
 // ---------------------------------------------------------------------------
 // C++ constructor
 // ---------------------------------------------------------------------------
 //
-CUsbIndicatorNotifier::CUsbIndicatorNotifier(CUsbNotifManager* aNotifManager, CUsbOtgWatcher* aOtgWatcher) :
-    CUsbNotifier(aNotifManager, KUsbUiNotifOtgIndicator, NULL), iOtgWatcher(aOtgWatcher)
+CUsbIndicatorNotifier::CUsbIndicatorNotifier(CUsbNotifManager& aNotifManager,
+        CUsbOtgWatcher& aOtgWatcher) :
+    CUsbNotifier(aNotifManager, KUsbUiNotifOtgIndicator, NULL), iOtgWatcher(
+            aOtgWatcher)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::CUsbIndicatorNotifier" ) );
+    LOG_FUNC
 
     //To be changed to EAknIndicatorStateAnimate and remove iIconBlinkingTimer
     //when AVKON implements animation form of usb indicator.
@@ -90,16 +87,16 @@
 //
 void CUsbIndicatorNotifier::ConstructL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::ConstructL" ) );
-    
+    LOG_FUNC
+
     // Subscribe for VBus change notifications
-    iOtgWatcher->VBusObserver()->SubscribeL(this);
-    
+    iOtgWatcher.VBusObserver()->SubscribeL(*this);
+
     // Subscribe for otg watcher states change notifications
-    iOtgWatcher->SubscribeL(this);
+    iOtgWatcher.SubscribeL(*this);
 
-    iIconBlinkingTimer = CUsbTimer::NewL(this, EIconBlinkingTimer);
-    
+    iIconBlinkingTimer = CUsbTimer::NewL(*this, EIconBlinkingTimer);
+
     // check here for condition to set usb indicator
     SetIndicatorL();
 
@@ -113,11 +110,15 @@
 //
 void CUsbIndicatorNotifier::ShowStaticL(TBool aVisible)
     {
-    FTRACE( FPrint (_L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::ShowStaticL, aVisible=%d" ), aVisible));
+    LOG_FUNC
+
+    LOG1("aVisible = %d" , aVisible);
 
     iIconBlinkingTimer->Cancel();
 
-    SetIndicatorStateL(aVisible ? EAknIndicatorStateOn : EAknIndicatorStateOff);    
+    SetIndicatorStateL(aVisible
+                                ? EAknIndicatorStateOn
+                                   : EAknIndicatorStateOff);
     }
 
 // ---------------------------------------------------------------------------
@@ -126,7 +127,7 @@
 //
 void CUsbIndicatorNotifier::BlinkL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::BlinkL" ));
+    LOG_FUNC
 
     // Will be canceled if active in After()
     iIconBlinkingTimer->After(0);
@@ -138,8 +139,8 @@
 //
 void CUsbIndicatorNotifier::ShowL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::ShowL" ) );
-    
+    LOG_FUNC
+
     ShowStaticL(ETrue);
     }
 
@@ -149,8 +150,8 @@
 //
 void CUsbIndicatorNotifier::Close()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::Close" ) );
-    
+    LOG_FUNC
+
     iIconBlinkingTimer->Cancel();
     TRAP_IGNORE( ShowStaticL(EFalse) );
     }
@@ -165,10 +166,14 @@
         {
         case EIconBlinkingTimer:
             {
-            SetIndicatorStateL(iIndicatorState ? EAknIndicatorStateOn : EAknIndicatorStateOff);    
+            SetIndicatorStateL(iIndicatorState
+                                               ? EAknIndicatorStateOn
+                                                  : EAknIndicatorStateOff);
 
-            iIndicatorState = (iIndicatorState == EAknIndicatorStateOn
-                                    ? EAknIndicatorStateOff : EAknIndicatorStateOn);
+            iIndicatorState
+                    = (iIndicatorState == EAknIndicatorStateOn
+                                                               ? EAknIndicatorStateOff
+                                                                  : EAknIndicatorStateOn);
 
             // Will be canceled if active in After()
             iIconBlinkingTimer->After(KUsbIndicatorBlinkingInterval);
@@ -176,8 +181,7 @@
             }
         default:
             {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::TimerElapsedL - Unknown timer" ) );
-            
+            LOG1("Unknown timer id = %d", aTimerId)
             Panic(EWrongTimerId);
             }
         }
@@ -189,11 +193,13 @@
 //
 void CUsbIndicatorNotifier::SetIndicatorStateL(const TInt aState)
     {
-    FTRACE( FPrint (_L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::SetIndicatorStateL - aState=%d" ), aState));
+
+    LOG1( "USB indicator State = %d" , aState);
 
-    CAknSmallIndicator* indicator = CAknSmallIndicator::NewLC(TUid::Uid(EAknIndicatorUSBConnection));
-    indicator->SetIndicatorStateL( aState );
-    CleanupStack::PopAndDestroy( indicator ); //indicator    
+    CAknSmallIndicator* indicator = CAknSmallIndicator::NewLC(TUid::Uid(
+            EAknIndicatorUSBConnection));
+    indicator->SetIndicatorStateL(aState);
+    CleanupStack::PopAndDestroy(indicator); //indicator    
     }
 
 // ---------------------------------------------------------------------------
@@ -202,7 +208,6 @@
 //
 void CUsbIndicatorNotifier::OtgWatcherStateChangedL(TUsbStateIds aState)
     {
-    FTRACE( FPrint (_L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::OtgWatcherStateChangedL - aState=%d" ), aState));
     SetIndicatorL();
     }
 
@@ -212,7 +217,6 @@
 //
 void CUsbIndicatorNotifier::VBusDownL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::VBusDownL" ) );
     SetIndicatorL();
     }
 
@@ -222,7 +226,6 @@
 //
 void CUsbIndicatorNotifier::VBusUpL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::VBusUpL" ) );
     SetIndicatorL();
     }
 
@@ -232,8 +235,7 @@
 //  
 void CUsbIndicatorNotifier::VBusObserverErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::VBusObserverErrorL" ) );
-    // do not care
+    // do nothing
     }
 
 // ---------------------------------------------------------------------------
@@ -242,24 +244,22 @@
 //  
 void CUsbIndicatorNotifier::SetIndicatorL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbIndicatorNotifier::SetIndicatorL" ) );
-    
-    if (!(iOtgWatcher->IsDeviceA()))
+    if (!(iOtgWatcher.IsDeviceA()))
         {
         // if B, than other party (usbwatcher) takes care of usb indicator
         // in combined usbwatcher (if role swap allowed) one class has to manage usb indicator 
         return;
         }
-    
+
     // if VBus Up and we are host -> show indicator
-    if ((iOtgWatcher->VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp) &&
-            (iOtgWatcher->CurrentHostState()->Id() == EUsbStateHostAHost))
+    if ((iOtgWatcher.VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp)
+            && (iOtgWatcher.CurrentHostState()->Id() == EUsbStateHostAHost))
         {
         ShowStaticL(ETrue);
         }
     // if VBus up and we are not host -> Blink indicator
-    else if((iOtgWatcher->VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp) &&
-            (iOtgWatcher->CurrentHostState()->Id() != EUsbStateHostAHost))
+    else if ((iOtgWatcher.VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp)
+            && (iOtgWatcher.CurrentHostState()->Id() != EUsbStateHostAHost))
         {
         BlinkL();
         }
--- a/usbengines/usbotgwatcher/src/cusbmessagenotificationobserver.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbmessagenotificationobserver.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbman.h>
 #include <d32usbdi_errors.h>
@@ -22,7 +21,7 @@
 
 #include "cusbmessagenotificationobserver.h"
 
-#include "definitions.h"
+#include "definitions.h" 
 #include "debug.h"
 #include "panic.h"
 
@@ -42,8 +41,7 @@
 //
 void CUsbMessageNotificationObserver::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::ConstructL" ) );
+    LOG_FUNC
 
     }
 
@@ -54,8 +52,7 @@
 CUsbMessageNotificationObserver* CUsbMessageNotificationObserver::NewL(
         RUsb* aUsb)
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::NewL" ) );
+    LOG_FUNC
 
     CUsbMessageNotificationObserver* self =
             new (ELeave) CUsbMessageNotificationObserver(aUsb);
@@ -71,8 +68,7 @@
 //
 CUsbMessageNotificationObserver::~CUsbMessageNotificationObserver()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::~CUsbMessageNotificationObserver" ) );
+    LOG_FUNC
 
     Cancel();
 
@@ -85,11 +81,18 @@
 // ---------------------------------------------------------------------------
 //
 void CUsbMessageNotificationObserver::SubscribeL(
-        MUsbMessageNotificationObserver* aObserver)
+        MUsbMessageNotificationObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iObservers.Append(aObserver));
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iObservers.Find(&aObserver))
+        {
+        LOG("Observer already exists");
+        Panic( EObserverAlreadyExists);
+        return;
+        }
+    iObservers.AppendL(&aObserver);
 
     if (KFirst == iObservers.Count()) // first item
         {
@@ -103,29 +106,19 @@
 // ---------------------------------------------------------------------------
 //
 void CUsbMessageNotificationObserver::UnsubscribeL(
-        MUsbMessageNotificationObserver* aObserver)
+        MUsbMessageNotificationObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::UnsubscribeL" ) );
+    LOG_FUNC
 
-        if (0 == iObservers.Count()) // no items
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::UnsubscribeL No observers" ) );
-            return;
-            }
-        
-    TInt i(0);
-    while (i < iObservers.Count() && aObserver != iObservers[i])
-        ++i;
+    TInt i(iObservers.Find(&aObserver));
+    if (KErrNotFound == i)
+        {
+        LOG("Observer not found" )
+        Panic( ECanNotFindMessageNotificationObserver);
+        return;
+        }
 
-    if (aObserver == iObservers[i]) // found
-        {
-        iObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::UnsubscribeL CanNotFindMessageNotificationObserver" ) );
-        Panic(ECanNotFindMessageNotificationObserver);
-        }
+    iObservers.Remove(i);
 
     if (0 == iObservers.Count()) // no items
         {
@@ -140,13 +133,16 @@
 //
 void CUsbMessageNotificationObserver::RunL()
     {
+    // Log the event
+    LOG1( "Message notification observer iMessage = %d" , iMessage);
+
     // if error occured, tell to Observers
-    if(KErrNone != iStatus.Int()) 
+    if (KErrNone != iStatus.Int())
         {
         for (TInt i(0); i < iObservers.Count(); ++i)
-             {
-             iObservers[i]->MessageNotificationErrorL(iStatus.Int());
-             }
+            {
+            iObservers[i]->MessageNotificationErrorL(iStatus.Int());
+            }
         return;
         }
 
@@ -156,15 +152,12 @@
     iUsb->MessageNotification(iStatus, iMessage);
     SetActive();
 
-        // Log the event
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::RunL iMessage = %d" ), message));
-
     // then process property change
     switch (message)
         {
         case KErrUsbBadHubPosition:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::RunL HubBadPosition" ) );
+            LOG("HubBadPosition" );
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -174,7 +167,7 @@
             }
         case KErrUsbOtgVbusError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::RunL VBusError" ) );
+            LOG( "VBusError");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -184,7 +177,7 @@
             }
         case KUsbMessageSrpReceived:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::RunL SRP received" ) );
+            LOG("SRP received" );
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -194,7 +187,7 @@
             }
         case KUsbMessageRequestSession:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::RunL Session Requested" ) );
+            LOG("Session requested" );
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -205,6 +198,7 @@
             // notify states with other messages  
         default:
             {
+
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->MessageNotificationReceivedL(message);
@@ -231,8 +225,9 @@
 //
 TInt CUsbMessageNotificationObserver::RunError(TInt aError)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbMessageNotificationObserver::RunError aError = %d" ), aError));
+    LOG1( "aError = %d" , aError);
 
     // try to recover and continue	
     return KErrNone;
--- a/usbengines/usbotgwatcher/src/cusbnotenotifier.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbnotenotifier.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* Copyright (c) 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:  Base classes for Usb notifier wrapper
+ * Copyright (c) 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:  Base classes for Usb notifier wrapper
+ *
+ */
 
 #include "cusbnotifmanager.h"
 #include "cusbnotenotifier.h"
@@ -29,12 +28,9 @@
 // ---------------------------------------------------------------------------
 //
 CUsbNoteNotifier::CUsbNoteNotifier(RNotifier& aNotifier,
-        CUsbNotifManager* aNotifManager, TUid aCat, TUint aNotifId) :
-    CUsbNotifier(aNotifManager, aCat, aNotifId),
-    iNotifier(aNotifier)
+        CUsbNotifManager& aNotifManager, TUid aCat, TUint aNotifId) :
+    CUsbNotifier(aNotifManager, aCat, aNotifId), iNotifier(aNotifier)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbNoteNotifier::CUsbNoteNotifier" ) );
-    
     }
 
 // ---------------------------------------------------------------------------
@@ -43,9 +39,10 @@
 //
 void CUsbNoteNotifier::ConstructL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbNoteNotifier::ConstructL" ) );
+    LOG_FUNC
 
-    iNotifierActive = new(ELeave)CUsbNoteNotifier::CNotifierActive(iNotifier, this);
+    iNotifierActive = new (ELeave) CUsbNoteNotifier::CNotifierActive(
+            iNotifier, *this);
     }
 
 // ---------------------------------------------------------------------------
@@ -54,8 +51,8 @@
 //
 CUsbNoteNotifier::~CUsbNoteNotifier()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbNoteNotifier::~CUsbNoteNotifier" ) );
-    
+    LOG_FUNC
+
     delete iNotifierActive;
     }
 
@@ -65,7 +62,9 @@
 //
 void CUsbNoteNotifier::ShowL()
     {
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbNoteNotifier::ShowL aCat = 0x%X aNotifId = 0x%X" ), iCat, iNotifId));
+    LOG_FUNC
+
+    LOG2( "aCat = 0x%X aNotifId = 0x%X" , iCat, iNotifId);
 
     iNotifierActive->StartL();
     }
@@ -76,22 +75,18 @@
 //
 void CUsbNoteNotifier::Close()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbNoteNotifier::Close" ) );
     }
 
-
 // ======== MEMBER FUNCTIONS ========
 
 // ---------------------------------------------------------------------------
 // C++ default constructor
 // ---------------------------------------------------------------------------
 //
-CUsbNoteNotifier::CNotifierActive::CNotifierActive(RNotifier& aNotifier, 
-        CUsbNoteNotifier* aUsbNoteNotifier) :
-        CUsbNoteNotifier::CNotifierActive::CActive(EPriorityStandard), 
-        iUsbNoteNotifier(aUsbNoteNotifier), 
-        iNotifier(aNotifier), 
-        iRes(0)
+CUsbNoteNotifier::CNotifierActive::CNotifierActive(RNotifier& aNotifier,
+        CUsbNoteNotifier& aUsbNoteNotifier) :
+    CUsbNoteNotifier::CNotifierActive::CActive(EPriorityStandard),
+            iUsbNoteNotifier(aUsbNoteNotifier), iNotifier(aNotifier), iRes(0)
     {
     CActiveScheduler::Add(this);
     }
@@ -111,19 +106,16 @@
 //
 void CUsbNoteNotifier::CNotifierActive::StartL()
     {
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbNoteNotifier::CNotifierActive::ShowL aCat = 0x%X aNotifId = 0x%X" ), 
-            iUsbNoteNotifier->iCat, iUsbNoteNotifier->iNotifId));
+    LOG_FUNC
 
     if (IsActive())
         {
-        Panic(ENotifierIsActiveAlready);
+        Panic( ENotifierIsActiveAlready);
         return;
-        }
-
-    TPckgBuf<TInt> pckg;
-    pckg() = iUsbNoteNotifier->iNotifId;
-
-    iNotifier.StartNotifierAndGetResponse(iStatus, iUsbNoteNotifier->iCat, pckg, iRes);
+        }    
+		
+    iNotifIdPckg() = iUsbNoteNotifier.iNotifId;
+    iNotifier.StartNotifierAndGetResponse(iStatus, iUsbNoteNotifier.iCat, iNotifIdPckg, iRes);
     SetActive();
     }
 
@@ -133,15 +125,18 @@
 //
 void CUsbNoteNotifier::CNotifierActive::RunL()
     {
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCCUsbNoteNotifier::CNotifierActive::RunL iStatus = %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1( "iStatus = %d" , iStatus.Int());
 
     // if error occured, deal with it in RunError
     User::LeaveIfError(iStatus.Int());
 
-    iNotifier.CancelNotifier(iUsbNoteNotifier->iCat);
+    iNotifier.CancelNotifier(iUsbNoteNotifier.iCat);
 
     // report to owner that show is over
-    iUsbNoteNotifier->iNotifManager->NotifierShowCompletedL(iUsbNoteNotifier, KErrNone, iRes());
+    iUsbNoteNotifier.iNotifManager.NotifierShowCompletedL(iUsbNoteNotifier,
+            KErrNone, iRes());
     }
 
 // ---------------------------------------------------------------------------
@@ -150,9 +145,7 @@
 //
 void CUsbNoteNotifier::CNotifierActive::DoCancel()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbNoteNotifier::CNotifierActive::DoCancel" ) );
-
-    iNotifier.CancelNotifier(iUsbNoteNotifier->iCat);
+    iNotifier.CancelNotifier(iUsbNoteNotifier.iCat);
     }
 
 // ---------------------------------------------------------------------------
@@ -161,9 +154,11 @@
 //
 TInt CUsbNoteNotifier::CNotifierActive::RunError(TInt aError)
     {
-    FTRACE( FPrint(_L("[USBOTGWATCHER]\tCUsbNoteNotifier::CNotifierActive::RunError aError = %d" ), aError));
+    LOG_FUNC
 
-    iNotifier.CancelNotifier(iUsbNoteNotifier->iCat);
+    LOG1("aError = %d" , aError);
+
+    iNotifier.CancelNotifier(iUsbNoteNotifier.iCat);
 
     // try to continue  
     return KErrNone;
--- a/usbengines/usbotgwatcher/src/cusbnotifier.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbnotifier.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,24 +1,23 @@
 /*
-* Copyright (c) 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:  Base classes for Usb notifier wrapper
+ * Copyright (c) 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:  Base classes for Usb notifier wrapper
+ *
+ */
 
 #include "cusbnotifmanager.h"
 #include "cusbnotifier.h"
- 
+
 #include "debug.h"
 #include "panic.h"
 
@@ -30,7 +29,7 @@
 //
 CUsbNotifier::~CUsbNotifier()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifier::~CUsbNotifier" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -46,12 +45,11 @@
 // C++ constructor
 // ---------------------------------------------------------------------------
 //
-CUsbNotifier::CUsbNotifier(CUsbNotifManager* aNotifManager, TUid aCat,
+CUsbNotifier::CUsbNotifier(CUsbNotifManager& aNotifManager, TUid aCat,
         TUint aNotifId) :
     iNotifManager(aNotifManager), iCat(aCat), iNotifId(aNotifId),
             iIsFeedbackNeeded(EFalse)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifier::CUsbNotifier" ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -60,7 +58,6 @@
 //
 void CUsbNotifier::SetFeedbackNeeded()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifier::SetFeedbackNeeded" ) );
     iIsFeedbackNeeded = ETrue;
     }
 
--- a/usbengines/usbotgwatcher/src/cusbnotifmanager.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbnotifmanager.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,19 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbuinotif.h> 
 
@@ -30,7 +30,7 @@
 // ---------------------------------------------------------------------------
 //
 CWaitNotifierInfo::CWaitNotifierInfo(CUsbNotifier* aWaitNotifier,
-        MWaitNotifierObserver* aObserver) :
+        MWaitNotifierObserver& aObserver) :
     iWaitNotifier(aWaitNotifier), iObserver(aObserver)
     {
     }
@@ -41,7 +41,7 @@
 //
 void CWaitNotifierInfo::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCWaitNotifierInfo::ConstructL" ) );
+    LOG_FUNC
     // owenrship for iWaitNotifier transferred in default constructor.
     // this object is responsible for deletion of the iWaitNotifier then	
     }
@@ -51,9 +51,10 @@
 // ---------------------------------------------------------------------------
 //
 CWaitNotifierInfo* CWaitNotifierInfo::NewL(CUsbNotifier* aWaitNotifier,
-        MWaitNotifierObserver* aObserver)
+        MWaitNotifierObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCWaitNotifierInfo::NewL" ) );
+    LOG_FUNC
+
     CWaitNotifierInfo* self = new (ELeave) CWaitNotifierInfo(aWaitNotifier,
             aObserver);
     CleanupStack::PushL(self);
@@ -68,7 +69,7 @@
 //
 CWaitNotifierInfo::~CWaitNotifierInfo()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCWaitNotifierInfo::~CWaitNotifierInfo" ) );
+    LOG_FUNC
     delete iWaitNotifier;
     }
 
@@ -87,18 +88,16 @@
 //
 MWaitNotifierObserver* CWaitNotifierInfo::Observer() const
     {
-    return iObserver;
+    return &iObserver;
     }
 
-
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbNotifManager* CUsbNotifManager::NewL(CUsbOtgWatcher* aOtgWatcher)
+CUsbNotifManager* CUsbNotifManager::NewL(CUsbOtgWatcher& aOtgWatcher)
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifManager::NewL" ) );
+    LOG_FUNC
 
     CUsbNotifManager* self = new (ELeave) CUsbNotifManager();
     CleanupStack::PushL(self);
@@ -111,14 +110,13 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbNotifManager::ConstructL(CUsbOtgWatcher* aOtgWatcher)
+void CUsbNotifManager::ConstructL(CUsbOtgWatcher& aOtgWatcher)
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifManager::ConstructL" ) );
+    LOG_FUNC
 
     User::LeaveIfError(iNotifier.Connect());
-    
-    iIndicatorNotifier = CUsbIndicatorNotifier::NewL(this, aOtgWatcher);
+
+    iIndicatorNotifier = CUsbIndicatorNotifier::NewL(*this, aOtgWatcher);
 
     }
 
@@ -128,7 +126,6 @@
 //
 CUsbNotifManager::CUsbNotifManager()
     {
-
     }
 
 // ---------------------------------------------------------------------------
@@ -137,13 +134,12 @@
 //
 CUsbNotifManager::~CUsbNotifManager()
     {
-
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifManager::~CUsbNotifManager" ) );
+    LOG_FUNC
 
     CloseAllNotifiers();
-    
+
     delete iIndicatorNotifier;
-    
+
     iNotifier.Close();
 
     }
@@ -155,16 +151,17 @@
 void CUsbNotifManager::ShowNotifierL(TUid aCat, TUint aNotifId,
         MWaitNotifierObserver* aObserver)
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbNotifManager::ShowNotifier aCat = 0x%X aNotifId = %d, aObserver=0x%X" ),
-                        aCat, aNotifId, aObserver));
+    LOG_FUNC
+
+    LOG3( "aCat = 0x%X aNotifId = %d, aObserver=0x%X" , aCat, aNotifId, aObserver);
 
     // remove non-feedback notifiers from the list
     for (TUint i(0); i < iWaitNotifiers.Count(); ++i)
         {
-        CWaitNotifierInfo* waitNotifier = iWaitNotifiers[i];
-        if (!(waitNotifier->WaitNotifier()->IsFeedbackNeeded()))
+        CWaitNotifierInfo* waitNotifierInfo = iWaitNotifiers[i];
+        if (!(waitNotifierInfo->WaitNotifier()->IsFeedbackNeeded()))
             {
-            delete waitNotifier;
+            delete waitNotifierInfo;
             iWaitNotifiers.Remove(i);
             }
         }
@@ -183,41 +180,42 @@
     if (aCat == KUsbUiNotifOtgError)
         {
         __ASSERT_ALWAYS(aObserver != NULL, Panic(EWrongNotifierCategory));
-        notifier = CUsbWaitNotifier::NewL(iNotifier, this, aNotifId);
+        notifier = CUsbWaitNotifier::NewL(iNotifier, *this, aNotifId);
         }
     else if (aCat == KUsbUiNotifOtgWarning)
         {
-        notifier = CUsbWarningNotifier::NewL(iNotifier, this, aNotifId);
+        notifier = CUsbWarningNotifier::NewL(iNotifier, *this, aNotifId);
         }
     else
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifManager::ShowNotifierL - Unexpected aCat" ) );
+        LOG1("Unexpected aCat = 0x%X", aCat );
         Panic(EWrongNotifierCategory);
         }
 
     CleanupStack::PushL(notifier);
-    
-    iWaitNotifiers.AppendL(CWaitNotifierInfo::NewL(notifier, aObserver));
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifManager::ShowNotifierL - Start to show note" ) );
+    iWaitNotifiers.AppendL(CWaitNotifierInfo::NewL(notifier, *aObserver));
+
     notifier->ShowL();
 
-    CleanupStack::Pop(notifier);    
+    CleanupStack::Pop(notifier);
     }
 
 // ---------------------------------------------------------------------------
 //
 // ---------------------------------------------------------------------------
 //
-void CUsbNotifManager::NotifierShowCompletedL(CUsbNotifier* aWaitNotifier,
+void CUsbNotifManager::NotifierShowCompletedL(CUsbNotifier& aWaitNotifier,
         TInt aResult, TInt aFeedback)
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbNotifManager::NotifierShowCompleted aResult = %d" ), aResult));
+    LOG_FUNC
+
+    LOG1( "aResult = %d", aResult);
 
     // remove Notifier from the list
     for (TUint i(0); i < iWaitNotifiers.Count(); ++i)
         {
-        if (aWaitNotifier == iWaitNotifiers[i]->WaitNotifier())
+        if (&aWaitNotifier == iWaitNotifiers[i]->WaitNotifier())
             {
             MWaitNotifierObserver* observer = iWaitNotifiers[i]->Observer();
 
@@ -236,7 +234,7 @@
 //
 void CUsbNotifManager::CloseAllNotifiers()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbNotifManager::CloseAllNotifiers" ) );
+    LOG_FUNC
 
     iWaitNotifiers.ResetAndDestroy();
     iIndicatorNotifier->Close();
--- a/usbengines/usbotgwatcher/src/cusbotgstateobserver.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbotgstateobserver.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include "cusbotgstateobserver.h"
 
@@ -38,8 +37,7 @@
 //
 void CUsbOtgStateObserver::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::ConstructL" ) );
+    LOG_FUNC
 
     User::LeaveIfError(iOtgState.Attach(KUidUsbManCategory,
             KUsbOtgStateProperty));
@@ -52,8 +50,7 @@
 //
 CUsbOtgStateObserver* CUsbOtgStateObserver::NewL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::NewL" ) );
+    LOG_FUNC
 
     CUsbOtgStateObserver* self = new (ELeave) CUsbOtgStateObserver();
     CleanupStack::PushL(self);
@@ -68,8 +65,7 @@
 //
 CUsbOtgStateObserver::~CUsbOtgStateObserver()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::~CUsbOtgStateObserver" ) );
+    LOG_FUNC
 
     Cancel();
 
@@ -85,21 +81,16 @@
 //
 TUsbOtgState CUsbOtgStateObserver::OtgState()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::OtgState" ) );
-
     TInt val(0);
 
     TInt err = iOtgState.Get(val);
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::StOtgState CanNotGetOtgStateProperty" ) );
-        Panic(ECanNotGetOtgStateProperty);
+        LOG("CanNotGetOtgStateProperty" );
+        Panic( ECanNotGetOtgStateProperty);
         }
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::OtgState = %d" ), val ));
-
     return (TUsbOtgState) val;
 
     }
@@ -108,11 +99,18 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbOtgStateObserver::SubscribeL(MUsbOtgStateObserver* aObserver)
+void CUsbOtgStateObserver::SubscribeL(MUsbOtgStateObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iObservers.Append(aObserver));
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iObservers.Find(&aObserver))
+        {
+        LOG( "Observer already exists"  );
+        Panic( EObserverAlreadyExists);
+        return;
+        }
+    iObservers.AppendL(&aObserver);
 
     if (KFirst == iObservers.Count()) // first item
         {
@@ -126,31 +124,21 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbOtgStateObserver::UnsubscribeL(MUsbOtgStateObserver* aObserver)
+void CUsbOtgStateObserver::UnsubscribeL(MUsbOtgStateObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::UnsubscribeL" ) );
+    LOG_FUNC
 
-        if (0 == iObservers.Count()) // no items
-                {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::UnsubscribeL No observers" ) );
-                return;
-                }
-        
-    TInt i(0);
-    while (i < iObservers.Count() && aObserver != iObservers[i])
-        ++i;
-
-    if (aObserver == iObservers[i]) // found
+    TInt i(iObservers.Find(&aObserver));
+    if (KErrNotFound == i)
         {
-        iObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::UnsubscribeL CanNotFindOtgStateObserver" ) );
-        Panic(ECanNotFindOtgStateObserver);
+        LOG("Observer not found");
+        Panic( ECanNotFindOtgStateObserver);
+        return;
         }
 
-    if (0 == iObservers.Count()) // no items
+    iObservers.Remove(i);
+
+    if (0 == iObservers.Count()) // no observers anymore
         {
         // cancel pending request
         Cancel();
@@ -163,18 +151,20 @@
 //
 void CUsbOtgStateObserver::RunL()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::RunL iStatus = %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1( "iStatus = %d" , iStatus.Int());
 
     // if error occured, tell to Observers
-    if(KErrNone != iStatus.Int()) 
+    if (KErrNone != iStatus.Int())
         {
         for (TInt i(0); i < iObservers.Count(); ++i)
-             {
-             iObservers[i]->OtgStateErrorL(iStatus.Int());
-             }
+            {
+            iObservers[i]->OtgStateErrorL(iStatus.Int());
+            }
         return;
         }
-    
+
     // re-issue request first
     iOtgState.Subscribe(iStatus);
     SetActive();
@@ -186,12 +176,12 @@
         {
         case EUsbOtgStateReset:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == RESET" ) );
+            LOG("OTGState == RESET" );
             break;
             }
         case EUsbOtgStateAIdle:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == AIdle" ) );
+            LOG("OTGState == AIdle" );
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->AIdleL();
@@ -200,7 +190,7 @@
             }
         case EUsbOtgStateAHost:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == AHost" ) );
+            LOG( "OTGState == AHost");
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->AHostL();
@@ -209,7 +199,7 @@
             }
         case EUsbOtgStateAPeripheral:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == APeripheral" ) );
+            LOG("OTGState == APeripheral" );
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->APeripheralL();
@@ -218,7 +208,7 @@
             }
         case EUsbOtgStateAVbusError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == AVBusError" ) );
+            LOG("OTGState == AVBusError" );
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->AVBusErrorL();
@@ -227,7 +217,7 @@
             }
         case EUsbOtgStateBIdle:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == BIdle" ) );
+            LOG( "OTGState == BIdle" );
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->BIdleL();
@@ -236,7 +226,7 @@
             }
         case EUsbOtgStateBPeripheral:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == BPeripheral" ) );
+            LOG("OTGState == BPeripheral" );
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->BPeripheralL();
@@ -245,7 +235,7 @@
             }
         case EUsbOtgStateBHost:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL OTGState == BHost" ) );
+            LOG("OTGState == BHost" );
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
                 iObservers[i]->BHostL();
@@ -254,8 +244,8 @@
             }
         default:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOTGStateObserver::RunL WrongOtgState" ) );
-            Panic(EWrongOtgState);
+            LOG("WrongOtgState" );
+            Panic( EWrongOtgState);
             }
         }
 
@@ -276,8 +266,9 @@
 //
 TInt CUsbOtgStateObserver::RunError(TInt aError)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgStateObserver::RunError aError = %d" ), aError));
+    LOG1( "aError = %d" , aError);
 
     // try to continue	
     return KErrNone;
--- a/usbengines/usbotgwatcher/src/cusbotgwatcher.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbotgwatcher.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,46 +1,42 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 #include <usbpersonalityids.h>
 #include <usbuinotif.h>
 #include <UsbWatcherInternalPSKeys.h>
-
 #include "cusbotgwatcher.h"
 #include "cusbstate.h"
-
 #include "cusbstatehostainitiate.h"
 #include "cusbstatehostahost.h"
 #include "cusbstatehostaperipheral.h"
-#include "cusbstatehostaidle.h"
 #include "cusbstatehosthandle.h"
-
+#include "cusbstatehostdelayhandle.h"
+#include "cusbstatehostdelayattachedhandle.h"
+#include "cusbstatehostdelaynotattachedhandle.h"
+#include "cusbstatehosthandledropping.h"
+#include "cusbstatehostundefined.h"
 #include "cusbwarningnotifier.h"
-
 #ifndef STIF
 #include "cusbnotifmanager.h"
 #else
 #include "mockcusbnotifmanager.h"
 #endif
-
 #include "errors.h"
 #include "debug.h"
 #include "panic.h"
-
 _LIT_SECURITY_POLICY_PASS( KAlwaysPassPolicy );
 _LIT_SECURITY_POLICY_C1( KLocalServicesPolicy, ECapabilityLocalServices );
 
@@ -49,9 +45,10 @@
 // ---------------------------------------------------------------------------
 //
 CUsbOtgWatcher::CUsbOtgWatcher(RUsb& aUsbMan) :
-    iUsb(aUsbMan), iPersonalityId(KUsbPersonalityIdMTP)
+    iUsb(aUsbMan), iPersonalityId(KUsbPersonalityIdMTP), iUsbServiceRequest(
+            CUsbServiceControl::ERequestUndefined)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::CUsbOtgWatcher" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -60,31 +57,35 @@
 //
 void CUsbOtgWatcher::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::ConstructL" ) );
+    LOG_FUNC
 
 #ifdef _DEBUG
     SelfTestL();
 #endif
 
 #ifndef STIF
-    User::LeaveIfError(RProperty::Define( KPSUidUsbWatcher,
-            KUsbWatcherIsPeripheralConnected, RProperty::EInt, KAlwaysPassPolicy,
-                KLocalServicesPolicy ) );
+    User::LeaveIfError(RProperty::Define(KPSUidUsbWatcher,
+            KUsbWatcherIsPeripheralConnected, RProperty::EInt,
+            KAlwaysPassPolicy, KLocalServicesPolicy));
 
-    User::LeaveIfError( RProperty::Set( KPSUidUsbWatcher,
+    User::LeaveIfError(RProperty::Set(KPSUidUsbWatcher,
             KUsbWatcherIsPeripheralConnected,
-            KUsbWatcherPeripheralIsNotConnected ) );
+            KUsbWatcherPeripheralIsNotConnected));
 #endif
-    
-    iUsbServiceControl = CUsbServiceControl::NewL(this, iUsb);
+
+    iUsbServiceControl = CUsbServiceControl::NewL(*this, iUsb);
 
-    User::LeaveIfError(iStates.Append(CUsbState::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAIdle::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostHandle::NewL(this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostUndefined::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(*this)));
+
+    User::LeaveIfError(iStates.Append(CUsbStateHostDelayAttachedHandle::NewL(
+            *this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostDelayNotAttachedHandle::NewL(*this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostHandleDropping::NewL(*this)));
 
     iIdPinObserver = CUsbIdPinObserver::NewL();
     iVBusObserver = CUsbVBusObserver::NewL();
@@ -94,14 +95,19 @@
             &iUsb);
     iMessageNotificationObserver = CUsbMessageNotificationObserver::NewL(
             &iUsb);
-    
-    iHostState = iStates[EUsbStateUndefined];
-    
+
+    iHostState = iStates[EUsbStateHostUndefined];
+
     // Notif manager must be created at least after VBus observer and iHostState initialization
     // to allow USb indicator subscribe to its notifications at construction and check their's current states
-    iNotifManager = CUsbNotifManager::NewL(this);
+    iNotifManager = CUsbNotifManager::NewL(*this);
 
-    iIdPinObserver->SubscribeL(this);
+    iVBusObserver->SubscribeL(*this);
+    iOtgStateObserver->SubscribeL(*this);
+    iBusActivityObserver->SubscribeL(*this);
+    iHostEventNotificationObserver->SubscribeL(*this);
+    iMessageNotificationObserver->SubscribeL(*this);
+    iIdPinObserver->SubscribeL(*this);
 
     if (CUsbIdPinObserver::EIdPinOn == iIdPinObserver->IdPin())
         {
@@ -128,7 +134,7 @@
 //
 EXPORT_C CUsbOtgWatcher* CUsbOtgWatcher::NewL(RUsb& aUsbMan)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::NewL" ) );
+    LOG_FUNC
 
     CUsbOtgWatcher* self = new (ELeave) CUsbOtgWatcher(aUsbMan);
     CleanupStack::PushL(self);
@@ -143,15 +149,41 @@
 //
 CUsbOtgWatcher::~CUsbOtgWatcher()
     {
-		FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::~CUsbOtgWatcher" ) );
-        
+    LOG_FUNC
+
 #ifndef STIF
-    RProperty::Delete( KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected );
+    RProperty::Delete(KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected);
 #endif
-    
+
     // delete Notif manager before VBus observer, due to USB indicator observes VBus
     delete iNotifManager;
-    
+
+    if (iIdPinObserver)
+        {
+        TRAP_IGNORE(iIdPinObserver->UnsubscribeL(*this));
+        }
+
+    if (iVBusObserver)
+        {
+        TRAP_IGNORE(iVBusObserver->UnsubscribeL(*this));
+        }
+    if (iOtgStateObserver)
+        {
+        TRAP_IGNORE(iOtgStateObserver->UnsubscribeL(*this));
+        }
+    if (iBusActivityObserver)
+        {
+        TRAP_IGNORE(iBusActivityObserver->UnsubscribeL(*this));
+        }
+    if (iHostEventNotificationObserver)
+        {
+        TRAP_IGNORE(iHostEventNotificationObserver->UnsubscribeL(*this));
+        }
+    if (iMessageNotificationObserver)
+        {
+        TRAP_IGNORE(iMessageNotificationObserver->UnsubscribeL(*this));
+        }
+
     delete iIdPinObserver;
     delete iVBusObserver;
     delete iOtgStateObserver;
@@ -160,11 +192,11 @@
     delete iMessageNotificationObserver;
 
     iOtgStateObservers.Close();
-    
+
     // Destroy states
     iStates.ResetAndDestroy();
     iStates.Close();
-    
+
     delete iUsbServiceControl;
 
     iUsb.Close();
@@ -178,8 +210,9 @@
 void CUsbOtgWatcher::SetPersonalityL(TRequestStatus& /*aStatus*/,
         TInt aPersonality)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPersonalityL aPersonality = %d" ), aPersonality));
+    LOG1( "aPersonality = %d" , aPersonality);
 
     // watcher keeps this value, no need to pass it to request object
     // state can read it from watcher when needed
@@ -199,7 +232,7 @@
 //
 void CUsbOtgWatcher::CancelSetPersonalityL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::CancelSetPersonalityL" ) );
+    LOG_FUNC
 
     iState->CancelSetPersonalityL();
     }
@@ -210,7 +243,7 @@
 //
 void CUsbOtgWatcher::SetPreviousPersonalityL(TRequestStatus& /*aStatus*/)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPreviousPersonalityL" ) );
+    LOG_FUNC
 
     // maybe more complex processing needed here
     iState->SetPreviousPersonalityL();
@@ -222,7 +255,7 @@
 //
 void CUsbOtgWatcher::SetPreviousPersonalityL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPreviousPersonalityL" ) );
+    LOG_FUNC
 
     iState->SetPreviousPersonalityL();
     }
@@ -233,7 +266,7 @@
 //
 void CUsbOtgWatcher::CancelSetPreviousPersonalityL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::CancelSetPreviousPersonalityL" ) );
+    LOG_FUNC
 
     iState->CancelSetPreviousPersonalityL();
     }
@@ -244,7 +277,7 @@
 //
 void CUsbOtgWatcher::SetPreviousPreviousPersonalityOnDisconnectL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SetPreviousPreviousPersonalityOnDisconnectL" ) );
+    LOG_FUNC
 
     }
 
@@ -255,19 +288,22 @@
 //
 void CUsbOtgWatcher::StartSessionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::StartSessionL" ) );
+    LOG_FUNC
 
     if (!CanStartSessionL())
         {
-        HandleHostProblemL(EUsbWatcherErrorInConnection);
+        HandleHostProblemL(EUsbWatcherCanNotStartSession,
+                EUsbStateHostHandleDropping);
         return;
         }
 
+    iUsbServiceRequest = CUsbServiceControl::EStartUsbService;
     TInt err = iUsbServiceControl->StartL(iPersonalityId);
     if (KErrNone != err)
         {
-            FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::StartSessionL Can not start usb services. reason = %d" ), err));
-        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices);
+        LOG1( "Can not start usb services. err = %d" , err);
+        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices,
+                EUsbStateHostHandleDropping);
         return;
         }
 
@@ -280,11 +316,12 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbOtgWatcher::HandleHostProblemL(TInt aWhatKindOf)
+void CUsbOtgWatcher::HandleHostProblemL(TInt aWhatKindOf,
+        TUsbStateIds aInState)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::HandleProblemL" ) );
-    HostHandle()->SetWhat(aWhatKindOf);
-    ChangeHostStateL(EUsbStateHostHandle);
+    LOG_FUNC
+    HostHandle(aInState)->SetWhat(aWhatKindOf);
+    ChangeHostStateL(aInState);
     }
 
 // ---------------------------------------------------------------------------
@@ -293,7 +330,7 @@
 //
 void CUsbOtgWatcher::IdPinOnL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOnL" ) );
+    LOG_FUNC
     StartSessionL();
     }
 
@@ -303,37 +340,24 @@
 //
 void CUsbOtgWatcher::IdPinOffL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL" ) );
-
-    // for example, USB failed to start    
-    if(NULL == iHostState) return;
+    LOG_FUNC
 
-    iVBusObserver->UnsubscribeL(this);
-    iOtgStateObserver->UnsubscribeL(this);
-    iBusActivityObserver->UnsubscribeL(this);
-    iHostEventNotificationObserver->UnsubscribeL(this);
-    iMessageNotificationObserver->UnsubscribeL(this);
-
-    iHostState->JustBeforeLeavingThisStateL();
-
-    iHostState = NULL;
+    ChangeHostStateL(EUsbStateHostUndefined);
 
     iNotifManager->CloseAllNotifiers();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL Before DisableFunctionDriverLoad " ) );
     Usb().DisableFunctionDriverLoading();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL Before TryStop" ) );
+    iUsbServiceRequest = CUsbServiceControl::EStopUsbService;
+    TInt err = iUsbServiceControl->StopL();
 
-    TInt err = iUsbServiceControl->StopL();
+    LOG1( "iUsbServiceControl->Stop() err = %d", err );
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOnL ErrorStoppingUsbServices" ) );
+        LOG( "ErrorStoppingUsbServices" );
         Panic(ECanNotStopUsbServices);
         }
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinOffL iUsbServiceControl->Stop() OK" ) );
     }
 
 // ---------------------------------------------------------------------------
@@ -342,9 +366,8 @@
 //
 void CUsbOtgWatcher::IdPinErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::IdPinErrorL" ) );
-    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));  
-    HandleHostProblemL(EUsbWatcherIdPinError);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherIdPinError, EUsbStateHostHandleDropping);
 
     }
 
@@ -355,7 +378,6 @@
 //
 void CUsbOtgWatcher::VBusDownL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusDownL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->VBusDownL();
     }
@@ -366,7 +388,6 @@
 //
 void CUsbOtgWatcher::VBusUpL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusUpL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->VBusUpL();
     }
@@ -377,9 +398,9 @@
 //
 void CUsbOtgWatcher::VBusObserverErrorL(TInt aError)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusObserverErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
-    HandleHostProblemL(EUsbWatcherVBusObserverError);
+    HandleHostProblemL(EUsbWatcherVBusObserverError,
+            EUsbStateHostHandleDropping);
     }
 
 // From OTG state observer
@@ -389,7 +410,6 @@
 //
 void CUsbOtgWatcher::AIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::AIdleL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->AIdleL();
     }
@@ -400,7 +420,6 @@
 //
 void CUsbOtgWatcher::AHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::AHostL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->AHostL();
     }
@@ -411,7 +430,6 @@
 //
 void CUsbOtgWatcher::APeripheralL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::APeripheralL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->APeripheralL();
     }
@@ -422,7 +440,6 @@
 //
 void CUsbOtgWatcher::AVBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::AVBusErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->AVBusErrorL();
     }
@@ -433,7 +450,6 @@
 //
 void CUsbOtgWatcher::BIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BIdleL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BIdleL();
     }
@@ -444,7 +460,6 @@
 //
 void CUsbOtgWatcher::BPeripheralL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BPeripheralL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BPeripheralL();
     }
@@ -455,7 +470,6 @@
 //
 void CUsbOtgWatcher::BHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BHostL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BHostL();
     }
@@ -466,9 +480,8 @@
 //
 void CUsbOtgWatcher::OtgStateErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::OtgStateErrorL" ) );
-__ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));  
-HandleHostProblemL(EUsbWatcherOtgStateError);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherOtgStateError, EUsbStateHostHandleDropping);
     }
 
 // From bus activity observer
@@ -478,7 +491,6 @@
 //
 void CUsbOtgWatcher::BusIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BusIdleL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BusIdleL();
     }
@@ -489,7 +501,6 @@
 //
 void CUsbOtgWatcher::BusActiveL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BusActiveL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BusActiveL();
     }
@@ -500,7 +511,6 @@
 //
 void CUsbOtgWatcher::BusActivityErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BusActivityErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     // no action, continue
     }
@@ -512,7 +522,6 @@
 //
 void CUsbOtgWatcher::DeviceAttachedL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DeviceAttachedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DeviceAttachedL(aTdi);
     }
@@ -523,7 +532,6 @@
 //
 void CUsbOtgWatcher::DeviceDetachedL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DeviceDetachedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DeviceDetachedL(aTdi);
     }
@@ -534,7 +542,6 @@
 //
 void CUsbOtgWatcher::DriverLoadSuccessL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DriverLoadSuccessL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DriverLoadSuccessL(aTdi);
     }
@@ -545,7 +552,6 @@
 //
 void CUsbOtgWatcher::DriverLoadPartialSuccessL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DriverLoadPartialSuccessL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DriverLoadPartialSuccessL(aTdi);
     }
@@ -556,7 +562,6 @@
 //
 void CUsbOtgWatcher::DriverLoadFailureL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::DriverLoadFailureL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->DriverLoadFailureL(aTdi);
     }
@@ -567,9 +572,9 @@
 //
 void CUsbOtgWatcher::HostEventNotificationErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::HostEventNotificationErrorL" ) );
-__ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));  
-HandleHostProblemL(EUsbWatcherHostEventNotificationError);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherHostEventNotificationError,
+            EUsbStateHostHandleDropping);
     }
 
 // From message notification observer
@@ -579,7 +584,6 @@
 //
 void CUsbOtgWatcher::MessageNotificationReceivedL(TInt aMessage)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::MessageNotificationReceivedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->MessageNotificationReceivedL(aMessage);
     }
@@ -590,7 +594,6 @@
 //
 void CUsbOtgWatcher::BadHubPositionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::BadHubPositionL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->BadHubPositionL();
     }
@@ -601,7 +604,6 @@
 //
 void CUsbOtgWatcher::VBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::VBusErrorL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->VBusErrorL();
     }
@@ -612,7 +614,6 @@
 //
 void CUsbOtgWatcher::SrpReceivedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SrpReceivedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->SrpReceivedL();
     }
@@ -623,7 +624,6 @@
 //
 void CUsbOtgWatcher::SessionRequestedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SessionRequestedL" ) );
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
     iHostState->SessionRequestedL();
     }
@@ -634,9 +634,9 @@
 //
 void CUsbOtgWatcher::MessageNotificationErrorL(TInt aError)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::MessageNotificationErrorL" ) );
-    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));    
-    HandleHostProblemL(EUsbWatcherMessageNotificationError);
+    __ASSERT_DEBUG(iHostState != NULL, Panic(EBadHostState));
+    HandleHostProblemL(EUsbWatcherMessageNotificationError,
+            EUsbStateHostHandleDropping);
     }
 
 // ---------------------------------------------------------------------------
@@ -735,11 +735,11 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostHandle* CUsbOtgWatcher::HostHandle() const
+CUsbStateHostHandle* CUsbOtgWatcher::HostHandle(TUsbStateIds aInState) const
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::HostHandle" ) );
-    __ASSERT_DEBUG(iStates[EUsbStateHostHandle] != NULL, Panic(EBadState));
-    return (CUsbStateHostHandle*) iStates[EUsbStateHostHandle];
+    __ASSERT_DEBUG(iStates[aInState] != NULL, Panic(EBadState));
+
+    return (CUsbStateHostHandle*) iStates[aInState];
     }
 
 // ---------------------------------------------------------------------------
@@ -748,20 +748,13 @@
 //
 void CUsbOtgWatcher::ChangeStateL(TUsbStateIds aNewStateId)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::ChangeStateL aNewState = %d" ), aNewStateId));
+    LOG1( "aNewState = %d" , aNewStateId);
 
     if (NULL != iState)
         {
-        if (aNewStateId == iState->Id())
-            {
-            return; // we already in the target state
-            }
-        else
-            {
-
-            iState->JustBeforeLeavingThisStateL();
-            }
+        iState->JustBeforeLeavingThisStateL();
         }
 
     // sets new state	
@@ -785,20 +778,13 @@
 //
 void CUsbOtgWatcher::ChangeHostStateL(TUsbStateIds aNewStateId)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::ChangeHostStateL aNewState = %d" ), aNewStateId));
+    LOG1( "aNewState = %d", aNewStateId);
 
     if (NULL != iHostState)
         {
-        if (aNewStateId == iHostState->Id())
-            {
-            return; // we already in the target state
-            }
-        else
-            {
-
-            iHostState->JustBeforeLeavingThisStateL();
-            }
+        iHostState->JustBeforeLeavingThisStateL();
         }
 
     // set new state	
@@ -813,7 +799,7 @@
     __ASSERT_DEBUG(iHostState != NULL, Panic(EBadState));
 
     iHostState->JustAdvancedToThisStateL(); // checks if there are conditions for advancing to another state(s)
-    
+
     // notify state change to observers
     for (TInt i(0); i < iOtgStateObservers.Count(); ++i)
         {
@@ -837,18 +823,19 @@
 //
 void CUsbOtgWatcher::PrintStateToLog()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog IdPin       = %d" ), iIdPinObserver->IdPin()));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog VBus        = %d" ), iVBusObserver->VBus()));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog OtgState    = %d" ), iOtgStateObserver->OtgState()));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog BusActivity = %d" ), iBusActivityObserver->BusActivity()));
-        
-        TInt isPeripheralConnected(KUsbWatcherPeripheralIsNotConnected);
-        
-        RProperty::Get( KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected,
-                isPeripheralConnected  );
-        
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::PrintStateToLog IsPeripheralConnected = %d" ), isPeripheralConnected));
-        
+    LOG1( "Current state id  = %d" , iHostState->Id());
+    LOG1( "IdPin             = %d" , iIdPinObserver->IdPin());
+    LOG1( "VBus              = %d" , iVBusObserver->VBus());
+    LOG1( "OtgState          = %d" , iOtgStateObserver->OtgState());
+    LOG1( "BusActivity       = %d" , iBusActivityObserver->BusActivity());
+
+    TInt isPeripheralConnected(KUsbWatcherPeripheralIsNotConnected);
+
+    RProperty::Get(KPSUidUsbWatcher, KUsbWatcherIsPeripheralConnected,
+            isPeripheralConnected);
+
+    LOG1( "IsPeripheralConnected = %d" , isPeripheralConnected);
+
     }
 
 // ---------------------------------------------------------------------------
@@ -866,35 +853,46 @@
 //
 void CUsbOtgWatcher::UsbServiceControlReqCompletedL(TInt aError)
     {
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompleted Error returned by UsbServiceControl = %d" ), aError));    
-    
-    switch(aError)
-    {
-    case KErrInUse: 
-    // usb services already started (this might happen if more than one idpin on event come)
+    LOG_FUNC
+
+    LOG1( "aError = %d" , aError);
+
+    switch (aError)
         {
-        return;
+        case KErrInUse:
+            // usb services already started (this might happen if more than one idpin on event come)
+            {
+            return;
+            }
+
+        case KErrNone:
+            {
+            break; // do normal routine
+            }
+
+        default: // handle the issue
+            {
+            if (iUsbServiceRequest == CUsbServiceControl::EStartUsbService) // Handle only start issues
+                {
+                HandleHostProblemL(EUsbWatcherCanNotStartUsbServices,
+                        EUsbStateHostHandleDropping);
+                }
+
+            iUsbServiceRequest = CUsbServiceControl::ERequestUndefined;
+            return;
+            }
         }
-        
-    case KErrNone:
-        {
-        break; // do normal routine
-        }
-        
-    default: // handle the issue
-        {
-        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices);
-        return;
-        }
-    }
+
+    iUsbServiceRequest = CUsbServiceControl::ERequestUndefined;
 
     TUsbServiceState serviceState;
     TInt err = iUsb.GetServiceState(serviceState);
 
     if (KErrNone != err)
         {
-            FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompleted Error when requesting GetServiceState = %d" ), err));
-        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices);
+        LOG1( "Error when requesting GetServiceState = %d" , err);
+        HandleHostProblemL(EUsbWatcherCanNotStartUsbServices,
+                EUsbStateHostHandleDropping);
         return;
         }
 
@@ -902,42 +900,36 @@
         {
         case EUsbServiceIdle: // just stopped usb service
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceIdle" ) );
+            LOG("UsbServiceState == EUsbServiceIdle" );
             // do nothing
             break;
             }
 
         case EUsbServiceStarted: // just started usb service
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceStarted" ) );
-
-            iHostState = iStates[EUsbStateHostAInitiate];
-
-            iHostState->JustAdvancedToThisStateL(); // do any initial activity, once advanced to the state 
+            LOG( "UsbServiceState == EUsbServiceStarted" );
 
-            iVBusObserver->SubscribeL(this);
-            iOtgStateObserver->SubscribeL(this);
-            iBusActivityObserver->SubscribeL(this);
-            iHostEventNotificationObserver->SubscribeL(this);
-            iMessageNotificationObserver->SubscribeL(this);
+            ChangeHostStateL(EUsbStateHostAInitiate);
 
             break;
             }
         case EUsbServiceStarting:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceStarting" ) );
+            LOG("UsbServiceState == EUsbServiceStarting" );
             // should not receive that, due to call back is called when service stopped or started
             // therefore scream
+            // no break statement here
             }
         case EUsbServiceStopping:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceStopping" ) );
+            LOG("UsbServiceState == EUsbServiceStopping" );
             // should not receive that, due to call back is called when service stopped or started
             // therefore scream
+            // no break statement here
             }
         case EUsbServiceFatalError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UsbServiceControlReqCompletedL UsbServiceState == EUsbServiceFatalError" ) );
+            LOG( "UsbServiceState == EUsbServiceFatalError" );
             Panic(EUnexpectedUsbServiceState);
             break;
             }
@@ -947,7 +939,6 @@
             Panic(EUnknownUsbServiceState);
             }
         }
-
     }
 
 // ---------------------------------------------------------------------------
@@ -957,21 +948,19 @@
 TInt CUsbOtgWatcher::SelfTestL()
     {
 #ifdef _DEBUG
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Creating observers." ) );
+    LOG_FUNC
 
     // create all the observers
     iIdPinObserver = CUsbIdPinObserver::NewL();
     iVBusObserver = CUsbVBusObserver::NewL();
     iOtgStateObserver = CUsbOtgStateObserver::NewL();
-    iBusActivityObserver =
-            CUsbBusActivityObserver::NewL();
-    iHostEventNotificationObserver =
-            CUsbHostEventNotificationObserver::NewL(&iUsb);
-    iMessageNotificationObserver =
-            CUsbMessageNotificationObserver::NewL(&iUsb);
+    iBusActivityObserver = CUsbBusActivityObserver::NewL();
+    iHostEventNotificationObserver = CUsbHostEventNotificationObserver::NewL(
+            &iUsb);
+    iMessageNotificationObserver = CUsbMessageNotificationObserver::NewL(
+            &iUsb);
 
-         FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Observers getters." ) );
+    LOG( "Observers getters" );
 
     if (iIdPinObserver != IdPinObserver())
         {
@@ -998,11 +987,11 @@
         User::Leave(KErrGeneral);
         }
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Observers destructors." ) );
+    LOG( "Observers destructors" );
 
     // idpinobserver is deleted later        
     // Vbus observer is deleted later
-    
+
     delete iOtgStateObserver;
     iOtgStateObserver = 0;
     delete iBusActivityObserver;
@@ -1012,68 +1001,72 @@
     delete iMessageNotificationObserver;
     iMessageNotificationObserver = 0;
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Creating states." ) );
+    LOG("Creating states");
 
-    User::LeaveIfError(iStates.Append(CUsbState::NewL(this)));    
-    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostAIdle::NewL(this)));
-    User::LeaveIfError(iStates.Append(CUsbStateHostHandle::NewL(this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostUndefined::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAInitiate::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAHost::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostAPeripheral::NewL(*this)));
+    User::LeaveIfError(iStates.Append(CUsbStateHostDelayAttachedHandle::NewL(
+            *this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostDelayNotAttachedHandle::NewL(*this)));
+    User::LeaveIfError(iStates.Append(
+            CUsbStateHostHandleDropping::NewL(*this)));
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Check State()" ) );
+    LOG("Check State()" );
 
     if (iStates[EUsbStateHostAInitiate] != State(EUsbStateHostAInitiate))
         {
         User::Leave(KErrGeneral);
         }
-        
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Check CurrentHostState()" ) );    
-        
+
+    LOG("Check CurrentHostState()" );
+
     iHostState = iStates[EUsbStateHostAInitiate];
-		
-		if (iStates[EUsbStateHostAInitiate] != CurrentHostState())
+
+    if (iStates[EUsbStateHostAInitiate] != CurrentHostState())
         {
         User::Leave(KErrGeneral);
         }
-		
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL NotifManager and WarningNotifier." ) );
 
-    CUsbNotifManager* usbnotifmanager = CUsbNotifManager::NewL(this);
+    LOG("NotifManager and WarningNotifier." );
+
+    CUsbNotifManager* usbnotifmanager = CUsbNotifManager::NewL(*this);
     RNotifier rnotifier;
     User::LeaveIfError(rnotifier.Connect());
     CUsbWarningNotifier* usbnotifier = CUsbWarningNotifier::NewL(rnotifier,
-            usbnotifmanager, EUsbOtgPartiallySupportedDevice);
+            *usbnotifmanager, EUsbOtgPartiallySupportedDevice);
     usbnotifier->IsFeedbackNeeded();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL NotifManager and WarningNotifier destruction." ) );
+    LOG( "NotifManager and WarningNotifier destruction." );
 
     delete usbnotifier;
     rnotifier.Close();
-    delete usbnotifmanager; 
-    
+    delete usbnotifmanager;
+
     // VBus observer is deleted here, due to it is used by usbnotifmanager.usbindicatornotifier
     delete iVBusObserver;
     iVBusObserver = 0;
-    
+
     // id pin observer is deleted here due to it is used by usbnotifmanager.usbindicatornotifier
     delete iIdPinObserver;
     iIdPinObserver = 0;
-        
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Destructing states." ) );
-        
+
+    LOG("Destructing states");
+
     iStates.ResetAndDestroy();
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL Check UsbServiceControl" ) );
+    LOG( "Check UsbServiceControl" );
 
-    CUsbServiceControl* usbServiceControl = CUsbServiceControl::NewL(this,
+    CUsbServiceControl* usbServiceControl = CUsbServiceControl::NewL(*this,
             iUsb);
     usbServiceControl->RunError(KErrNone);
     delete usbServiceControl;
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SelfTestL All completed OK." ) );
+    LOG("All completed OK" );
 #endif
-        return KErrNone;
+    return KErrNone;
 
     }
 
@@ -1081,11 +1074,18 @@
 // 
 // ---------------------------------------------------------------------------
 //   
-void CUsbOtgWatcher::SubscribeL(MUsbOtgWatcherStateObserver* aObserver)
+void CUsbOtgWatcher::SubscribeL(MUsbOtgWatcherStateObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iOtgStateObservers.Append(aObserver));
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iOtgStateObservers.Find(&aObserver))
+        {
+        LOG( "Observer already exists" );
+        Panic(EObserverAlreadyExists);
+        return;
+        }
+    iOtgStateObservers.AppendL(&aObserver);
 
     }
 
@@ -1093,26 +1093,17 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbOtgWatcher::UnsubscribeL(MUsbOtgWatcherStateObserver* aObserver)
+void CUsbOtgWatcher::UnsubscribeL(MUsbOtgWatcherStateObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UnsubscribeL" ) );
-    if (0 == iOtgStateObservers.Count()) // no items
+    LOG_FUNC
+
+    TInt i(iOtgStateObservers.Find(&aObserver));
+    if (KErrNotFound == i)
         {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UnsubscribeL No observers" ) );
+        LOG( "Observer not found" );
+        Panic(ECanNotFindUsbOtgWatcherStateObserver);
         return;
         }
-    
-    TInt i(0);
-    while (i < iOtgStateObservers.Count() && aObserver != iOtgStateObservers[i])
-        ++i;
 
-    if (aObserver == iOtgStateObservers[i]) // found
-        {
-        iOtgStateObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbOtgWatcher::UnsubscribeL CanNotGetUsbOtgStateWatcherObserver" ) );
-        Panic(ECanNotFindUsbOtgWatcherStateObserver);
-        }
+    iOtgStateObservers.Remove(i);
     }
--- a/usbengines/usbotgwatcher/src/cusbpersonalityswitch.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,299 +0,0 @@
-/*
-* 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:  Switches personality
- *
-*/
-
-#include <e32base.h>
-#include <usb.h>
-#include <usbpersonalityids.h>
-
-#include "cusbpersonalityswitch.h"
-
-#include "panic.h"
-#include "debug.h"
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbPersonalitySwitch::CUsbPersonalitySwitch(
-        MUsbPersonalitySwitchObserver* aObserver) :
-    CActive(CActive::EPriorityStandard), iObserver(aObserver), iState(EIdle)
-    {
-    CActiveScheduler::Add(this);
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbPersonalitySwitch::~CUsbPersonalitySwitch()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::~CUsbPersonalitySwitch" ) );
-    Cancel();
-    iUsbInterface.Close();
-    iSendData.Close();
-    iRcvData.Close();
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbPersonalitySwitch::ConstructL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::ConstructL" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbPersonalitySwitch* CUsbPersonalitySwitch::NewL(
-        MUsbPersonalitySwitchObserver* aObserver)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::NewL" ) );
-
-    CUsbPersonalitySwitch* self = new (ELeave) CUsbPersonalitySwitch(
-            aObserver);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self); // pop self
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CUsbPersonalitySwitch::SwitchPersonalityL(TUint32 aDeviceId,
-        TInt aPersonalityToBeSet)
-    {
-        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::SwitchPersonality aDeviceId %d, aPersonalityToBeSet %d" ), aDeviceId, aPersonalityToBeSet))
-
-    if (IsActive() || EIdle != iState)
-        {
-        Cancel();
-        iObserver->UsbPersonalitySwitchStateChangedL(
-                MUsbPersonalitySwitchObserver::ERequestCancelled, KErrNone);
-        }
-
-    // create usb interface for the device id
-    TUint32 token(0); // = RFdc.InterfaceToken();
-    TInt err = iUsbInterface.Open(token);
-
-        FTRACE(FPrint(_L("[USBOTGWATCHER]\tCUsbPersonalitySwitch::SwitchPersonality UsbInterface Open err = %d" ), err));
-    if (KErrNone != err)
-        {
-        return err;
-        }
-
-    iPersonalityToBeSet = aPersonalityToBeSet;
-
-    // get list of supported personalities
-    iTransfer.iRequestType = KUsbRequestType_DirToHost
-            | KUsbRequestType_TypeVendor | KUsbRequestType_DestDevice;
-
-    iTransfer.iRequest = KGetAllPersonalitiesReq;
-    iTransfer.iValue = 0;
-    iTransfer.iIndex = 0;
-    iTransfer.iFlags
-            = RUsbInterface::TUsbTransferRequestDetails::EShortTransferOk;
-
-    Reset();
-
-    iState = EGetAllPersonalities;
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::SwitchPersonalityL Sending GetAllPersonalities request." ) );
-    iUsbInterface.Ep0Transfer(iTransfer, iSendData, iRcvData, iStatus);
-    SetActive();
-
-    iObserver->UsbPersonalitySwitchStateChangedL(
-            MUsbPersonalitySwitchObserver::ERequestingAllPersonalities,
-            KErrNone);
-
-    return KErrNone;
-    }
-
-void CUsbPersonalitySwitch::CancelSwitchPersonalityL()
-    {
-        FLOG(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::CancelSwitchPersonalityL"));
-
-    if (IsActive())
-        {
-        Cancel();
-        iObserver->UsbPersonalitySwitchStateChangedL(
-                MUsbPersonalitySwitchObserver::ERequestCancelled, KErrNone);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbPersonalitySwitch::RunL()
-    {
-
-    if (KErrNone != iStatus.Int())
-        {
-            FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL iStatus %d" ), iStatus.Int()));
-        User::Leave(iStatus.Int());
-        }
-
-    switch (iState)
-        {
-
-        case EGetAllPersonalities:
-            {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL GetAllPersonalities completed."));
-
-            TInt numOfPersonalities = iRcvData[KNumOfPersShift];
-                FTRACE(FPrint(_L("[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL Amount of personalities in peripheral = %d" ), numOfPersonalities));
-
-            // if no personalities then return
-            if (0 == numOfPersonalities)
-                {
-                    FLOG(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL No personailies found in peripheral."));
-                Reset();
-                iObserver->UsbPersonalitySwitchStateChangedL(
-                        MUsbPersonalitySwitchObserver::EGetAllPersonalitiesCompleted,
-                        KErrNotFound);
-                return;
-                }
-
-            // if needed pers already set, then return
-            TInt currentPersonality = iRcvData[KCurrPersShift];
-            if (iPersonalityToBeSet == currentPersonality)
-                {
-                    FLOG(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL Needed personality already set in peripheral."));
-                Reset();
-                iObserver->UsbPersonalitySwitchStateChangedL(
-                        MUsbPersonalitySwitchObserver::EGetAllPersonalitiesCompleted,
-                        KErrInUse);
-                return;
-                }
-
-            // check if device supports needed personality
-            TInt count(0);
-            while (count < numOfPersonalities && iPersonalityToBeSet
-                    != iRcvData[KFirstPersonalityIdShift
-                            + KLenghtOfPersonalityData * count])
-                {
-                ++count;
-                }
-
-            if (count == numOfPersonalities) // not found == not supported
-                {
-                    FLOG(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL Peripheral does not support needed personality."));
-                Reset();
-                iObserver->UsbPersonalitySwitchStateChangedL(
-                        MUsbPersonalitySwitchObserver::EGetAllPersonalitiesCompleted,
-                        KErrNotFound);
-                return;
-                }
-
-            iObserver->UsbPersonalitySwitchStateChangedL(
-                    MUsbPersonalitySwitchObserver::EGetAllPersonalitiesCompleted,
-                    KErrNone);
-
-            // set personality
-            iTransfer.iRequestType = KUsbRequestType_DirToDev
-                    | KUsbRequestType_TypeVendor | KUsbRequestType_DestDevice;
-
-            iTransfer.iRequest = KSetPersonalityReq;
-            iTransfer.iValue = iPersonalityToBeSet;
-            iTransfer.iIndex = 0;
-            iTransfer.iFlags
-                    = RUsbInterface::TUsbTransferRequestDetails::EShortTransferOk;
-
-            iSendData.Close();
-            iRcvData.Close();
-
-            iState = ESetPersonality;
-
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL Sending SetPersonality request." ) );
-            iUsbInterface.Ep0Transfer(iTransfer, iSendData, iRcvData, iStatus);
-            SetActive();
-            iObserver->UsbPersonalitySwitchStateChangedL(
-                    MUsbPersonalitySwitchObserver::ERequestingSetPersonality,
-                    KErrNone);
-
-            break;
-            }
-        case ESetPersonality:
-            {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL SetPersonality completed."));
-            Reset();
-            iObserver->UsbPersonalitySwitchStateChangedL(
-                    MUsbPersonalitySwitchObserver::ESetPersonalityCompleted,
-                    KErrNone);
-
-            break;
-            }
-            /*  case EGetAllPersResult:
-             {
-             FLOG( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL GetAllPersResult completed.");
-
-             break;
-             }
-             case EGetSetPersResult:
-             {
-             FLOG( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunL GetSetPersResult completed.");
-
-             break;
-             }  */
-
-        case EIdle: // do not break 
-        default:
-            {
-            Panic(EUnexpectedUsbSwitchPersonalityState);
-            }
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TInt CUsbPersonalitySwitch::RunError(TInt aError)
-    {
-        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::RunError aError %d" ), aError ));
-    Reset();
-    TRAP_IGNORE (iObserver->UsbPersonalitySwitchStateChangedL(
-            MUsbPersonalitySwitchObserver::ERequestFailed, aError) );
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbPersonalitySwitch::DoCancel()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::DoCancel" ) )
-
-    iUsbInterface.CancelEP0Transfer();
-    Reset();
-    }
-
-void CUsbPersonalitySwitch::Reset()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbPersonalitySwitch::Reset" ) )
-
-    iState = EIdle;
-    iSendData.Close();
-    iRcvData.Close();
-    }
--- a/usbengines/usbotgwatcher/src/cusbservicecontrol.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbservicecontrol.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbman.h>
 
@@ -26,7 +25,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbServiceControl::CUsbServiceControl(MUsbServiceControlObserver* aObserver,
+CUsbServiceControl::CUsbServiceControl(MUsbServiceControlObserver& aObserver,
         RUsb& aUsb) :
     CActive(CActive::EPriorityStandard), iObserver(aObserver), iUsb(aUsb),
             iPersonalityId(0)
@@ -40,7 +39,8 @@
 //
 CUsbServiceControl::~CUsbServiceControl()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::~CUsbServiceControl" ) );
+    LOG_FUNC
+
     Cancel();
     }
 
@@ -50,7 +50,7 @@
 //
 void CUsbServiceControl::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::ConstructL" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -58,9 +58,9 @@
 // ---------------------------------------------------------------------------
 //
 CUsbServiceControl* CUsbServiceControl::NewL(
-        MUsbServiceControlObserver* aObserver, RUsb& aUsb)
+        MUsbServiceControlObserver& aObserver, RUsb& aUsb)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::NewL" ) );
+    LOG_FUNC
 
     CUsbServiceControl* self = new (ELeave) CUsbServiceControl(aObserver,
             aUsb);
@@ -76,7 +76,9 @@
 //
 TInt CUsbServiceControl::StartL(TInt aPersonalityId)
     {
-        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::Start aPersonalityId = %d" ), aPersonalityId));
+    LOG_FUNC
+
+    LOG1( "aPersonalityId = %d" , aPersonalityId);
 
     TUsbServiceState serviceState;
     TInt err = iUsb.GetServiceState(serviceState);
@@ -90,12 +92,12 @@
         {
         case EUsbServiceIdle:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceIdle" ) );
+            LOG( "UsbServiceState == EUsbServiceIdle" );
 
             iPersonalityId = aPersonalityId; // when request completed, this will indicate that we started what we wanted
             if (IsActive())
                 {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start Request is outstanding, cancelling first." ) );
+                LOG("Request is outstanding, cancelling first" );
                 Cancel();
                 }
             iUsb.TryStart(aPersonalityId, iStatus);
@@ -105,20 +107,20 @@
 
         case EUsbServiceStarted:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceStarted" ) );
+            LOG("UsbServiceState == EUsbServiceStarted");
 
             TInt currentPersonality(0);
             err = iUsb.GetCurrentPersonalityId(currentPersonality);
             if (KErrNone != err)
                 {
-                    FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::Start Error getting current personality err = %d" ), err));
+                LOG1( "Error getting current personality err = %d" , err);
                 return err;
                 }
 
             if (aPersonalityId == currentPersonality) // already started
                 {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start Personality already started" ) );
-                iObserver->UsbServiceControlReqCompletedL(KErrInUse);
+                LOG("Personality already started" );
+                iObserver.UsbServiceControlReqCompletedL(KErrInUse);
                 return KErrNone;
                 }
 
@@ -133,13 +135,13 @@
             }
         case EUsbServiceStarting:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceStarting" ) );
+            LOG("UsbServiceState == EUsbServiceStarting" );
             // do exactly the same as in case of EUsbServiceStopping;
             // break statement is not required here
             }
         case EUsbServiceStopping:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceStopping" ) );
+            LOG( "UsbServiceState == EUsbServiceStopping" );
 
             // subscribe for usb service state change, and start new usb service once current one started/stopped
             iPersonalityId = aPersonalityId; // this will indicate that we want to start this personality
@@ -147,7 +149,7 @@
             // this check is needed due to usb service might be stopping by other client  
             if (IsActive())
                 {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start Request outstanding. Waiting for completion." ) );
+                LOG( "Request outstanding. Waiting for completion" );
                 return KErrNone; // when the outstanding request get completed, we start usb services with iPersonalityId
                 }
 
@@ -159,12 +161,12 @@
             }
         case EUsbServiceFatalError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceFatalError" ) );
+            LOG( "UsbServiceState == EUsbServiceFatalError" );
             return KErrGeneral;
             }
         default:
             {
-            Panic(EUnknownUsbServiceState);
+            Panic( EUnknownUsbServiceState);
             }
         }
 
@@ -178,11 +180,13 @@
 //
 TInt CUsbServiceControl::StopL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop" ) );
+    LOG_FUNC
 
     TUsbServiceState serviceState;
     TInt err = iUsb.GetServiceState(serviceState);
 
+    LOG2("err = %d; serviceState = %d" , err, serviceState);
+
     if (KErrNone != err)
         {
         return err;
@@ -192,18 +196,18 @@
         {
         case EUsbServiceIdle:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop UsbServiceState == EUsbServiceIdle" ) );
+            LOG("UsbServiceState == EUsbServiceIdle" );
 
             return KErrNone;
             }
 
         case EUsbServiceStarted:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop UsbServiceState == EUsbServiceStarted" ) );
+            LOG("UsbServiceState == EUsbServiceStarted" );
 
             if (IsActive())
                 {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop Request is outstanding, cancelling it." ) );
+                LOG("Request is outstanding, cancelling it" );
                 Cancel();
                 }
             iUsb.TryStop(iStatus);
@@ -213,13 +217,13 @@
             }
         case EUsbServiceStopping:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop UsbServiceState == EUsbServiceStopping" ) );
+            LOG( "UsbServiceState == EUsbServiceStopping" );
             // do exactly the same as in case of EUsbServiceStarting;
             // break statement is not required here
             }
         case EUsbServiceStarting:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop UsbServiceState == EUsbServiceStarting" ) );
+            LOG("UsbServiceState == EUsbServiceStarting" );
 
             // subscribe for usb service state change, and stop usb service once current one started
             iPersonalityId = 0; // this will indicate that we do not want to start this personality
@@ -227,7 +231,7 @@
             // this check is needed due to usb service might be starting by other client  
             if (IsActive())
                 {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Stop Request is outstanding, waiting for completion. " ) );
+                LOG("Request is outstanding, waiting for completion" );
                 return KErrNone; // when this request get completed, we request to stop usb services
                 }
 
@@ -239,12 +243,12 @@
             }
         case EUsbServiceFatalError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceFatalError" ) );
+            LOG("UsbServiceState == EUsbServiceFatalError" );
             return KErrGeneral;
             }
         default:
             {
-            Panic(EUnknownUsbServiceState);
+            Panic( EUnknownUsbServiceState);
             }
         }
     return KErrNone;
@@ -256,11 +260,13 @@
 //
 void CUsbServiceControl::RunL()
     {
-    FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL iStatus %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1("iStatus = %d" , iStatus.Int());
+
     if (KErrNone != iStatus.Int())
         {
-        //User::Leave(iStatus.Int());
-        iObserver->UsbServiceControlReqCompletedL(iStatus.Int());
+        iObserver.UsbServiceControlReqCompletedL(iStatus.Int());
         return;
         }
 
@@ -269,108 +275,104 @@
 
     if (KErrNone != err)
         {
-            FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL error while getting service state %d" ), err));
-        //User::Leave(err);
-        iObserver->UsbServiceControlReqCompletedL(err);
-        return;            
+        LOG1("Error while getting service state %d" , err);
+        iObserver.UsbServiceControlReqCompletedL(err);
+        return;
         }
 
     switch (serviceState)
         {
         case EUsbServiceIdle: // usb service stopped
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL UsbServiceState == EUsbServiceIdle" ) );
+            LOG("UsbServiceState == EUsbServiceIdle" );
 
             if (iPersonalityId != 0) // during service stopping, requested to start it
                 {
-                    FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL Requested to start personality %d. Starting it." ), iPersonalityId));
+                LOG1("Requested to start personality %d. Starting it." , iPersonalityId);
                 TInt personalityId = iPersonalityId;
                 iPersonalityId = 0; // reset
                 err = StartL(personalityId);
-                if(KErrNone != err)
+                if (KErrNone != err)
                     {
-                    iObserver->UsbServiceControlReqCompletedL(err);
+                    iObserver.UsbServiceControlReqCompletedL(err);
                     }
                 return;
                 }
 
             // otherwise, we've done, notify
-            iObserver->UsbServiceControlReqCompletedL(KErrNone);
+            iObserver.UsbServiceControlReqCompletedL(KErrNone);
             break;
             }
 
         case EUsbServiceStarted:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceStarted" ) );
+            LOG("UsbServiceState == EUsbServiceStarted" );
 
             TInt currentPersonality(0);
             err = iUsb.GetCurrentPersonalityId(currentPersonality);
             if (KErrNone != err)
                 {
-                FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL error while getting PersonalityId err = %d" ), err));
-                //User::Leave(err);
-                iObserver->UsbServiceControlReqCompletedL(err);
-                return;                    
+                LOG1("Error while getting PersonalityId err = %d" , err);
+                iObserver.UsbServiceControlReqCompletedL(err);
+                return;
                 }
 
             if (iPersonalityId == currentPersonality) // already done
                 {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start Personality already started." ) );
+                LOG("Personality already started" );
                 iPersonalityId = 0;
-                iObserver->UsbServiceControlReqCompletedL(KErrNone);
+                iObserver.UsbServiceControlReqCompletedL(KErrNone);
                 return;
                 }
 
             if (iPersonalityId == 0) // during service start requested to stop it
                 {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start Requested to stop personality. Stopping." ) );
+                LOG("Requested to stop personality. Stopping." );
                 err = StopL();
-                if(KErrNone != err)
+                if (KErrNone != err)
                     {
-                    FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL error while stopping personality err = %d" ), err));
-                    iObserver->UsbServiceControlReqCompletedL(err);
+                    LOG1("Error while stopping personality err = %d" , err);
+                    iObserver.UsbServiceControlReqCompletedL(err);
                     }
                 return;
                 }
 
             // otherwise, during service start, requested to start it with another personality
-            FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL Requested to start personality %d. Starting it." ), iPersonalityId));
+            LOG1( "Requested to start personality %d. Starting it.", iPersonalityId);
             TInt personalityId = iPersonalityId;
             iPersonalityId = 0; // reset
-            //User::LeaveIfError(Start(personalityId));
             err = StartL(personalityId);
-            if(KErrNone != err)
+            if (KErrNone != err)
                 {
-                FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunL error while starting personality err = %d" ), err));
-                iObserver->UsbServiceControlReqCompletedL(err);
+                LOG1("Error while starting personality err = %d" , err);
+                iObserver.UsbServiceControlReqCompletedL(err);
                 }
             break;
             }
 
         case EUsbServiceStarting:
             {
-                // do exactly same as in EUsbServiceStopping
-                // break statement is not required here
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start State == EUsbServiceStarting. Continue." ) );
+            // do exactly same as in EUsbServiceStopping
+            // break statement is not required here
+            LOG("State == EUsbServiceStarting. Continue." );
             }
         case EUsbServiceStopping:
             {
-                // we are not interested in these states, just continue monitoring
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start State == EUsbServiceStopping. Continue." ) );
+            // we are not interested in these states, just continue monitoring
+            LOG("State == EUsbServiceStopping. Continue." );
             iUsb.ServiceStateNotification(iServiceState, iStatus);
             SetActive();
             break;
             }
         case EUsbServiceFatalError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::Start UsbServiceState == EUsbServiceFatalError" ) );
-            //User::Leave(KErrGeneral);
-            iObserver->UsbServiceControlReqCompletedL(KErrGeneral);    
+            LOG("UsbServiceState == EUsbServiceFatalError" );
+            iObserver.UsbServiceControlReqCompletedL(KErrGeneral);
             break;
             }
         default:
             {
-            Panic(EUnknownUsbServiceState);
+            Panic( EUnknownUsbServiceState);
             }
         }
 
@@ -382,8 +384,9 @@
 //
 TInt CUsbServiceControl::RunError(TInt aError)
     {
-        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbServiceControl::RunError aError %d" ), aError ));
-        //TRAP_IGNORE(iObserver->UsbServiceControlReqCompletedL(aError));
+    LOG_FUNC
+    LOG1("aError = %d", aError );
+    TRAP_IGNORE(iObserver.UsbServiceControlReqCompletedL(aError));
 
     return KErrNone;
     }
@@ -394,10 +397,10 @@
 //
 void CUsbServiceControl::DoCancel()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::DoCancel Cancelling interest to Usb TryStart."))
+    LOG( "Cancelling interest to Usb TryStart.")
     iUsb.CancelInterest(RUsb::ETryStart);
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::DoCancel Cancelling interest to Usb TrySop."))
+    LOG( "Cancelling interest to Usb TrySop.")
     iUsb.CancelInterest(RUsb::ETryStop);
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbServiceControl::DoCancel Cancelling interest to usb states notifications."))
+    LOG("Cancelling interest to usb states notifications.")
     iUsb.ServiceStateNotificationCancel();
     }
--- a/usbengines/usbotgwatcher/src/cusbstate.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstate.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include "cusbstate.h"
 
@@ -25,7 +24,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbState::CUsbState(CUsbOtgWatcher* aWatcher) :
+CUsbState::CUsbState(CUsbOtgWatcher& aWatcher) :
     iWatcher(aWatcher)
     {
     }
@@ -42,19 +41,6 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbState* CUsbState::NewL(CUsbOtgWatcher* aWatcher)
-    {
-    CUsbState* self = new (ELeave) CUsbState(aWatcher);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
 void CUsbState::ConstructL()
     {
 
@@ -64,17 +50,9 @@
 // 
 // ---------------------------------------------------------------------------
 //
-TUsbStateIds CUsbState::Id()
-    {
-    return EUsbStateUndefined;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
 void CUsbState::JustAdvancedToThisStateL()
     {
+    iWatcher.PrintStateToLog();
     }
 
 // ---------------------------------------------------------------------------
@@ -92,7 +70,7 @@
 void CUsbState::ChangeStateL(TUsbStateIds aNewStateId)
     {
 
-    iWatcher->ChangeStateL(aNewStateId);
+    iWatcher.ChangeStateL(aNewStateId);
 
     }
 
@@ -103,8 +81,21 @@
 void CUsbState::ChangeHostStateL(TUsbStateIds aNewStateId)
     {
 
-    iWatcher->ChangeHostStateL(aNewStateId);
+    iWatcher.ChangeHostStateL(aNewStateId);
+
+    }
 
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbState::HandleL(TInt aWhat, TUsbStateIds aWhereToHandle)
+    {
+    LOG_FUNC
+
+    LOG2( "aWhat = %d aWhere = %d" , aWhat, aWhereToHandle);
+
+    iWatcher.HandleHostProblemL(aWhat, aWhereToHandle);
     }
 
 // ---------------------------------------------------------------------------
@@ -156,7 +147,7 @@
 //
 void CUsbState::IdPinOffL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::IdPinOffL" ) );
+    LOG_FUNC
     Panic(EIdPinOffNotExpected);
     }
 
@@ -166,7 +157,7 @@
 //
 void CUsbState::IdPinOnL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::IdPinOnL" ) );
+    LOG_FUNC
     Panic(EIdPinOnNotExpected);
     }
 
@@ -177,7 +168,7 @@
 //
 void CUsbState::VBusDownL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::VBusDownL" ) );
+    LOG_FUNC
     Panic(EVBusDownNotExpected);
     }
 
@@ -187,7 +178,8 @@
 //
 void CUsbState::VBusUpL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::VBusUpL" ) );
+    LOG_FUNC
+    Panic(EVBusUpNotExpected);
     }
 
 // From OTG state observer
@@ -197,7 +189,7 @@
 //
 void CUsbState::AIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::AIdleL" ) );
+    LOG_FUNC
     Panic(EAIdleNotExpected);
     }
 
@@ -207,7 +199,7 @@
 //
 void CUsbState::AHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::AHostL" ) );
+    LOG_FUNC
     Panic(EAHostNotExpected);
     }
 
@@ -217,7 +209,7 @@
 //
 void CUsbState::APeripheralL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::APeripheralL" ) );
+    LOG_FUNC
     Panic(EAPeripheralNotExpected);
     }
 
@@ -227,7 +219,7 @@
 //
 void CUsbState::AVBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::AVBusErrorL" ) );
+    LOG_FUNC
     Panic(EAVBusErrorNotExpected);
     }
 
@@ -237,7 +229,7 @@
 //
 void CUsbState::BIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::BIdleL" ) );
+    LOG_FUNC
     Panic(EBIdleNotExpected);
     }
 
@@ -247,7 +239,7 @@
 //
 void CUsbState::BPeripheralL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::BPeripheralL" ) );
+    LOG_FUNC
     Panic(EBPeripheralNotExpected);
     }
 
@@ -257,7 +249,7 @@
 //
 void CUsbState::BHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::BHostL" ) );
+    LOG_FUNC
     Panic(EBHostNotExpected);
     }
 
@@ -268,7 +260,7 @@
 //
 void CUsbState::BusIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::BusIdleL" ) );
+    LOG_FUNC
     Panic(EBusIdleNotExpected);
     }
 
@@ -278,7 +270,7 @@
 //
 void CUsbState::BusActiveL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::BusActiveL" ) );
+    LOG_FUNC
     Panic(EBusActiveNotExpected);
     }
 
@@ -289,7 +281,7 @@
 //
 void CUsbState::DeviceAttachedL(TDeviceEventInformation)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DeviceAttachedL" ) );
+    LOG_FUNC
     Panic(EDeviceAttachedNotExpected);
     }
 
@@ -299,7 +291,7 @@
 //
 void CUsbState::DeviceDetachedL(TDeviceEventInformation)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DeviceDetachedL" ) );
+    LOG_FUNC
     Panic(EDeviceDetachedNotExpected);
     }
 
@@ -309,7 +301,7 @@
 //
 void CUsbState::DriverLoadSuccessL(TDeviceEventInformation)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadSuccessL" ) );
+    LOG_FUNC
     Panic(EDriverLoadSuccessNotExpected);
     }
 
@@ -319,7 +311,7 @@
 //
 void CUsbState::DriverLoadPartialSuccessL(TDeviceEventInformation)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadPartialSuccessL" ) );
+    LOG_FUNC
     Panic(EDriverLoadPartialSuccessNotExpected);
     }
 
@@ -329,7 +321,7 @@
 //
 void CUsbState::DriverLoadFailureL(TDeviceEventInformation)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadFailureL" ) );
+    LOG_FUNC
     Panic(EDriverLoadFailureNotExpected);
     }
 
@@ -339,7 +331,7 @@
 //
 void CUsbState::BadHubPositionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::BadHubPositionL" ) );
+    LOG_FUNC
     Panic(EBadHubPositionNotExpected);
     }
 
@@ -349,7 +341,7 @@
 //
 void CUsbState::VBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::VBusErrorL" ) );
+    LOG_FUNC
     Panic(EVBusErrorNotExpected);
     }
 
@@ -359,7 +351,7 @@
 //
 void CUsbState::MessageNotificationReceivedL(TInt)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::MessageNotificationReceivedL" ) );
+    LOG_FUNC
     Panic(EMessageNotificationNotExpected);
     }
 
@@ -369,7 +361,7 @@
 //
 void CUsbState::SrpReceivedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::SrpReceivedL" ) );
+    LOG_FUNC
     Panic(ESrpNotExpected);
     }
 
@@ -379,6 +371,6 @@
 //
 void CUsbState::SessionRequestedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::SessionRequestedL" ) );
+    LOG_FUNC
     Panic(ESessionRequestNotExpected);
     }
--- a/usbengines/usbotgwatcher/src/cusbstatehostabase.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstatehostabase.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <e32base.h> 
 #include <usbhosterrors.h>
@@ -22,7 +21,7 @@
 #include <d32usbdi_errors.h>
 
 #include "cusbstatehostabase.h"
-#include "cusbstatehosthandle.h"
+#include "cusbstatehosthandledropping.h"
 
 #include "errors.h"
 
@@ -33,7 +32,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostABase::CUsbStateHostABase(CUsbOtgWatcher* aWatcher) :
+CUsbStateHostABase::CUsbStateHostABase(CUsbOtgWatcher& aWatcher) :
     CUsbState(aWatcher)
     {
     }
@@ -44,7 +43,7 @@
 //
 void CUsbStateHostABase::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::ConstructL" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -53,29 +52,28 @@
 //
 CUsbStateHostABase::~CUsbStateHostABase()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::~CUsbStateHostABase" ) );
-
+    LOG_FUNC
     }
 
 // From VBus observer
 // ---------------------------------------------------------------------------
-// 
+// VBus can be dropped by lower leyer in case of a critical problem
 // ---------------------------------------------------------------------------
 //
 void CUsbStateHostABase::VBusDownL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::VBusDownL" ) );
-    ChangeHostStateL(EUsbStateHostAIdle);
+    LOG_FUNC
+    HandleL(EUsbWatcherErrorInConnection, EUsbStateHostHandleDropping);
     }
 
 // From OTG state observer
 // ---------------------------------------------------------------------------
-// 
+//
 // ---------------------------------------------------------------------------
 //
 void CUsbStateHostABase::AIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::AIdleL" ) );
+    LOG_FUNC
     // do nothing
     }
 
@@ -83,12 +81,32 @@
 // 
 // ---------------------------------------------------------------------------
 //
+void CUsbStateHostABase::AHostL()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostABase::APeripheralL()
+    {
+    LOG_FUNC
+    ChangeHostStateL( EUsbStateHostAPeripheral);
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
 void CUsbStateHostABase::AVBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::AVBusErrorL" ) );
+    LOG_FUNC
     // No need to handle BusClearError error code, due to Bus will be dropped anyway
-    iWatcher->Usb().BusClearError();
-    HandleL(EUsbWatcherErrDeviceRequiresTooMuchPower);
+    iWatcher.Usb().BusClearError();
+    HandleL(EUsbWatcherErrDeviceRequiresTooMuchPower,
+            EUsbStateHostHandleDropping);
     }
 
 // From bus activity observer
@@ -98,7 +116,7 @@
 //
 void CUsbStateHostABase::BusIdleL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::BusIdleL" ) );
+    LOG_FUNC
     //do nothing
     }
 
@@ -108,7 +126,7 @@
 //
 void CUsbStateHostABase::BusActiveL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::BusActiveL" ) );
+    LOG_FUNC
     // do nothing
     }
 
@@ -119,43 +137,21 @@
 //
 void CUsbStateHostABase::MessageNotificationReceivedL(TInt aMessage)
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostABase::MessageNotificationReceivedL = %d" ), aMessage));
+    LOG_FUNC
+    LOG1( "aMessage = %d" , aMessage);
 
     switch (aMessage)
         {
 
         // OTGDI
-        case KErrUsbOtgEventQueueOverflow: //         = -6670;
-        case KErrUsbOtgStateQueueOverflow://         = -6671;
-        case KErrUsbOtgMessageQueueOverflow: //       = -6672;
-
-        case KErrUsbOtgBadState://                   = -6675;
-
         case KErrUsbOtgStackNotStarted://            = -6680;
-        //case KErrUsbOtgVbusAlreadyRaised://          = -6681;
-        //case KErrUsbOtgSrpForbidden://               = -6682;
-
         case KErrUsbOtgHnpNotResponding://           = -6683;
-        //case KErrUsbOtgHnpBusDrop://                 = -6684;
-
         case KErrUsbOtgBusControlProblem://          = -6685;
-
         case KErrUsbOtgVbusPowerUpError://           = -6686;
-
         case KErrUsbOtgHnpEnableProblem://           = -6687;
-
         case KErrUsbOtgVbusError://                  = -6690;
-        case KErrUsbOtgSrpTimeout://                 = -6691;
-        //case KErrUsbOtgSrpActive://                  = -6692;
-        //case KErrUsbOtgSrpNotPermitted://            = -6693;
-        //case KErrUsbOtgHnpNotPermitted://            = -6694;
-        //case KErrUsbOtgHnpNotEnabled://              = -6695;
-        //case KErrUsbOtgHnpNotSuspended://            = -6696;
-        //case KErrUsbOtgVbusPowerUpNotPermitted://    = -6697;
-        //case KErrUsbOtgVbusPowerDownNotPermitted://  = -6698;
-        //case KErrUsbOtgVbusClearErrorNotPermitted:// = -6699;
 
-            // hosterrors.h
+        // hosterrors.h
         case KErrUsbConfigurationHasNoInterfaces:
         case KErrUsbInterfaceCountMismatch:
         case KErrUsbDuplicateInterfaceNumbers:
@@ -163,15 +159,15 @@
         case KErrUsbDeviceDetachedDuringDriverLoading:
         case KErrUsbAttachmentFailureGeneralError:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::MessageNotificationReceivedL ErrorInConnection" ) );
-            HandleL(EUsbWatcherErrorInConnection);
+            LOG( "ErrorInConnection" );
+            HandleL(EUsbWatcherErrorInConnection, EUsbStateHostHandleDropping);
             break;
             }
 
-            // OTGDI
-        //case KErrUsbOtgPeriphNotSupported: //        = -6688
+        // OTGDI
+        case KErrUsbOtgPeriphNotSupported: //        = -6688, for OPT only
 
-            // USBDI
+        // USBDI
         case KErrUsbRequestsPending:
         case KErrUsbBadAddress:
         case KErrUsbNoAddress:
@@ -188,20 +184,22 @@
         case KErrUsbBadDescriptorTopology:
         case KErrUsbDeviceRejected:
         case KErrUsbDeviceFailed:
-        case KErrUsbBadDevice:
+        case KErrUsbBadDevice: // = -6656
         case KErrUsbBadHub:
         case KErrUsbEventOverflow:
+        case KErrUsbBadDeviceAttached:
 
-            // hosterrors.h
+        // hosterrors.h
         case KErrUsbUnsupportedDevice:
             {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::MessageNotificationReceivedL UnsupportedDevice" ) );
-            HandleL(EUsbWatcherErrUnsupportedDevice);
+            LOG( "UnsupportedDevice" );
+            HandleL(EUsbWatcherErrUnsupportedDevice,
+                    EUsbStateHostHandleDropping);
             break;
             }
         default:
             {
-                FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostABase::MessageNotificationReceivedL Unhandled message = %d" ), aMessage));
+            LOG1( "Unhandled message = %d" , aMessage);
             break;
             }
 
@@ -215,8 +213,8 @@
 //
 void CUsbStateHostABase::BadHubPositionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::BadHubPositionL" ) );
-    HandleL(EUsbWatcherHubsNotSupported);
+    LOG_FUNC
+    HandleL(EUsbWatcherHubsNotSupported, EUsbStateHostHandleDropping);
     }
 
 // ---------------------------------------------------------------------------
@@ -225,10 +223,28 @@
 //
 void CUsbStateHostABase::VBusErrorL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::VBusErrorL" ) );
+    LOG_FUNC
     // No error code handling after BusClearError call, due to bus will be dropped anyway
-    iWatcher->Usb().BusClearError();
-    HandleL(EUsbWatcherErrDeviceRequiresTooMuchPower);
+    iWatcher.Usb().BusClearError();
+    HandleL(EUsbWatcherErrDeviceRequiresTooMuchPower,
+            EUsbStateHostHandleDropping);
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostABase::SrpReceivedL()
+    {
+    LOG_FUNC
+
+    TInt err = iWatcher.Usb().BusRespondSrp();
+    if (KErrNone != err)
+        {
+        LOG1( "BusRespondSrp error = %d" , err );
+        iWatcher.HandleHostProblemL(EUsbWatcherErrorInConnection,
+                EUsbStateHostHandleDropping);
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -237,33 +253,21 @@
 //
 void CUsbStateHostABase::SessionRequestedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::SessionRequestedL" ) );
+    LOG_FUNC
 
-    if (iWatcher->VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp)
+    if (iWatcher.VBusObserver()->VBus() == CUsbVBusObserver::EVBusUp)
         {
-            // session already ongoing; BusRequest() in this case returns KErrUsbOtgBadState...
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::SessionRequestedL() VBus is already UP; ignore Session request." ) );
+        // session already ongoing; BusRequest() in this case returns KErrUsbOtgBadState...
+        LOG( "VBus is already UP; ignore Session request." );
         return;
         }
 
-    TInt err = iWatcher->Usb().BusRequest();
+    TInt err = iWatcher.Usb().BusRequest();
     if (KErrNone != err && KErrUsbOtgVbusAlreadyRaised != err) // sometimes this also comes...
         {
-            FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostABase::SessionRequestedL BusRequestError err = %d" ), err));
-        iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
+        LOG1( "BusRequestError err = %d" , err);
+        iWatcher.HandleHostProblemL(EUsbWatcherErrorInConnection,
+                EUsbStateHostHandleDropping);
         return;
         }
-
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostABase::SessionRequestedL Session started OK (or VBUS already UP) err = %d" ), err));
     }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostABase::HandleL(TInt aWhat)
-    {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostABase::HandleL aWhat = %d" ), aWhat));
-
-    iWatcher->HandleHostProblemL(aWhat);
-    }
--- a/usbengines/usbotgwatcher/src/cusbstatehostahost.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstatehostahost.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <e32base.h>
 #include <UsbWatcherInternalPSKeys.h>
@@ -22,15 +21,8 @@
 #include "cusbstatehostahost.h"
 #include "cusbnotifmanager.h"
 
-#ifndef STIF
-#include "cusbtimer.h"
-#else
-#include "mockcusbtimer.h"
-#endif
 #include "definitions.h"
-
 #include "errors.h"
-
 #include "debug.h"
 #include "panic.h"
 
@@ -38,7 +30,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostAHost::CUsbStateHostAHost(CUsbOtgWatcher* aWatcher) :
+CUsbStateHostAHost::CUsbStateHostAHost(CUsbOtgWatcher& aWatcher) :
     CUsbStateHostABase(aWatcher)
     {
     }
@@ -49,7 +41,7 @@
 //
 void CUsbStateHostAHost::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::ConstructL" ) );
+    LOG_FUNC
 
     CUsbStateHostABase::ConstructL();
 
@@ -59,9 +51,9 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostAHost* CUsbStateHostAHost::NewL(CUsbOtgWatcher* aWatcher)
+CUsbStateHostAHost* CUsbStateHostAHost::NewL(CUsbOtgWatcher& aWatcher)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::NewL" ) );
+    LOG_FUNC
 
     CUsbStateHostAHost* self = new (ELeave) CUsbStateHostAHost(aWatcher);
     CleanupStack::PushL(self);
@@ -76,7 +68,7 @@
 //
 CUsbStateHostAHost::~CUsbStateHostAHost()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::~CUsbStateHostAHost" ) );
+    LOG_FUNC
 
     }
 
@@ -86,8 +78,6 @@
 //
 TUsbStateIds CUsbStateHostAHost::Id()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::Id" ) );
-
     return EUsbStateHostAHost;
     }
 
@@ -97,13 +87,15 @@
 //
 void CUsbStateHostAHost::JustAdvancedToThisStateL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::JustAdvancedToThisStateL" ) );
-    
-    User::LeaveIfError( RProperty::Set( KPSUidUsbWatcher,
-                KUsbWatcherIsPeripheralConnected,
-                KUsbWatcherPeripheralIsConnected ) );
-    
-    iWatcher->PrintStateToLog();
+    LOG_FUNC
+
+    // do general things 
+    CUsbStateHostABase::JustAdvancedToThisStateL();
+
+    User::LeaveIfError(RProperty::Set(KPSUidUsbWatcher,
+            KUsbWatcherIsPeripheralConnected,
+            KUsbWatcherPeripheralIsConnected));
+
     }
 
 // ---------------------------------------------------------------------------
@@ -112,31 +104,14 @@
 //
 void CUsbStateHostAHost::JustBeforeLeavingThisStateL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::JustBeforeLeavingThisStateL" ) );
-        
-        User::LeaveIfError( RProperty::Set( KPSUidUsbWatcher,
-                    KUsbWatcherIsPeripheralConnected,
-                    KUsbWatcherPeripheralIsNotConnected ) );
-    }
+    LOG_FUNC
 
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAHost::AHostL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::AHostL" ) );
-    // do nothing
-    }
+    User::LeaveIfError(RProperty::Set(KPSUidUsbWatcher,
+            KUsbWatcherIsPeripheralConnected,
+            KUsbWatcherPeripheralIsNotConnected));
 
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAHost::APeripheralL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::AHostL" ) );
-    ChangeHostStateL(EUsbStateHostAPeripheral);
+    // do general things 
+    CUsbStateHostABase::JustBeforeLeavingThisStateL();
     }
 
 // ---------------------------------------------------------------------------
@@ -145,8 +120,8 @@
 //
 void CUsbStateHostAHost::DeviceDetachedL(TDeviceEventInformation)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::DeviceDetachedL" ) );
-    ChangeHostStateL(EUsbStateHostAInitiate);
+    LOG_FUNC
+    ChangeHostStateL( EUsbStateHostAInitiate);
     }
 
 // ---------------------------------------------------------------------------
@@ -155,6 +130,6 @@
 //
 void CUsbStateHostAHost::BadHubPositionL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::BadHubPositionL" ) );
-    Panic(EBadHubPositionEventNotExpected);
+    LOG_FUNC
+    Panic( EBadHubPositionEventNotExpected);
     }
--- a/usbengines/usbotgwatcher/src/cusbstatehostaidle.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
-* 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:  Implementation
- *
-*/
-
-
-#include "cusbstatehostaidle.h"
-#include "cusbnotifmanager.h"
-
-#ifndef STIF
-#include "cusbtimer.h"
-#else
-#include "mockcusbtimer.h"
-#endif
-#include "definitions.h"
-
-#include "errors.h"
-#include "debug.h"
-#include "panic.h"
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbStateHostAIdle::CUsbStateHostAIdle(CUsbOtgWatcher* aWatcher) :
-    CUsbStateHostAInitiateBase(aWatcher)
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAIdle::ConstructL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAIdle::ConstructL" ) );
-
-    CUsbStateHostAInitiateBase::ConstructL();
-    }
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-
-CUsbStateHostAIdle* CUsbStateHostAIdle::NewL(CUsbOtgWatcher* aWatcher)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAIdle::NewL" ) );
-
-    CUsbStateHostAIdle* self = new (ELeave) CUsbStateHostAIdle(aWatcher);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbStateHostAIdle::~CUsbStateHostAIdle()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAIdle::~CUsbStateHostAIdle" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TUsbStateIds CUsbStateHostAIdle::Id()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAIdle::Id" ) );
-
-    return EUsbStateHostAIdle;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAIdle::JustAdvancedToThisStateL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAIdle::JustAdvancedToThisStateL" ) );
-
-    iWatcher->PrintStateToLog();
-    
-    // do BusDrop, if Up
-    if (CUsbVBusObserver::EVBusUp == iWatcher->VBusObserver()->VBus())
-        {
-        TInt err = iWatcher->Usb().BusDrop();
-        if (err != KErrNone)
-            {
-            err = iWatcher->Usb().BusClearError();
-            if (KErrNone != err)
-                {
-                iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
-                }
-            }
-        }
-    }
--- a/usbengines/usbotgwatcher/src/cusbstatehostainitiate.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstatehostainitiate.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,32 +1,33 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
+#include <usbuinotif.h>
 
 #include "cusbstatehostainitiate.h"
 #ifndef STIF
+#include "cusbtimer.h"
 #include "cusbnotifmanager.h"
-#include "cusbtimer.h"
 #else
 #include "mockcusbnotifmanager.h"
 #include "mockcusbtimer.h"
 #endif
-#include "definitions.h"
 
+#include "definitions.h"
 #include "errors.h"
+
 #include "debug.h"
 #include "panic.h"
 
@@ -34,8 +35,8 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostAInitiate::CUsbStateHostAInitiate(CUsbOtgWatcher* aWatcher) :
-    CUsbStateHostAInitiateBase(aWatcher)
+CUsbStateHostAInitiate::CUsbStateHostAInitiate(CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostABase(aWatcher)
     {
     }
 
@@ -45,18 +46,21 @@
 //
 void CUsbStateHostAInitiate::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::ConstructL" ) );
+    LOG_FUNC
 
-    CUsbStateHostAInitiateBase::ConstructL();
+    CUsbStateHostABase::ConstructL();
+
+    iAttachmentTimer = CUsbTimer::NewL(*this, EDeviceAttachmentTimer);
+
     }
 
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostAInitiate* CUsbStateHostAInitiate::NewL(CUsbOtgWatcher* aWatcher)
+CUsbStateHostAInitiate* CUsbStateHostAInitiate::NewL(CUsbOtgWatcher& aWatcher)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::NewL" ) );
+    LOG_FUNC
 
     CUsbStateHostAInitiate* self = new (ELeave) CUsbStateHostAInitiate(
             aWatcher);
@@ -72,7 +76,9 @@
 //
 CUsbStateHostAInitiate::~CUsbStateHostAInitiate()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::~CUsbStateHostAInitiate" ) );
+    LOG_FUNC
+
+    delete iAttachmentTimer;
     }
 
 // ---------------------------------------------------------------------------
@@ -81,9 +87,21 @@
 //
 TUsbStateIds CUsbStateHostAInitiate::Id()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::Id" ) );
+    return EUsbStateHostAInitiate;
+    }
 
-    return EUsbStateHostAInitiate;
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostAInitiate::JustBeforeLeavingThisStateL()
+    {
+    LOG_FUNC
+
+    iAttachmentTimer->Cancel();
+
+    // do general things 
+    CUsbStateHostABase::JustBeforeLeavingThisStateL();
     }
 
 // ---------------------------------------------------------------------------
@@ -92,24 +110,24 @@
 //
 void CUsbStateHostAInitiate::JustAdvancedToThisStateL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::JustAdvancedToThisStateL" ) );
+    LOG_FUNC
 
-    iWatcher->PrintStateToLog();
+    // do general things 
+    CUsbStateHostABase::JustAdvancedToThisStateL();
 
-    TInt err = iWatcher->Usb().EnableFunctionDriverLoading();
+    TInt err = iWatcher.Usb().EnableFunctionDriverLoading();
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::JustAdvancedToThisStateL EnableFunctionDriverLoading error" ) );
-        iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
+        LOG1( "EnableFunctionDriverLoading err = %d", err );
+        iWatcher.HandleHostProblemL(EUsbWatcherCanNotEnableDriverLoading,
+                EUsbStateHostHandleDropping);
         return;
         }
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::JustAdvancedToThisStateL EnableFunctionDriverLoading(); = %d" ), err));
-
     // do BusRequest, if down
 
-    if (CUsbVBusObserver::EVBusUp != iWatcher->VBusObserver()->VBus())
+    if (CUsbVBusObserver::EVBusUp != iWatcher.VBusObserver()->VBus())
         {
         const TUint maxTrial = 3;
         TInt busReqErr(KErrGeneral);
@@ -117,15 +135,17 @@
 
         while (count < maxTrial && KErrNone != busReqErr)
             {
-            busReqErr = iWatcher->Usb().BusRequest();
-                FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::JustAdvancedToThisStateL BusRequest() = %d" ), err));
+            busReqErr = iWatcher.Usb().BusRequest();
+            LOG1( "BusRequest() err = %d" , err);
 
             if (KErrNone != busReqErr)
                 {
-                err = iWatcher->Usb().BusClearError();
+                err = iWatcher.Usb().BusClearError();
                 if (KErrNone != err)
                     {
-                    iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
+                    iWatcher.HandleHostProblemL(
+                            EUsbWatcherCanNotClearBusError,
+                            EUsbStateHostHandleDropping);
                     return;
                     }
                 }
@@ -133,7 +153,8 @@
             }
         if (KErrNone != busReqErr)
             {
-            iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
+            iWatcher.HandleHostProblemL(EUsbWatcherCanNotRaiseVBus,
+                    EUsbStateHostHandleDropping);
             return;
             }
         }
@@ -143,13 +164,127 @@
 
     }
 
+// From TimerObserver
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostAInitiate::TimerElapsedL(TUsbTimerId aTimerId)
+    {
+    LOG_FUNC
+
+    switch (aTimerId)
+        {
+        case EDeviceAttachmentTimer:
+            {
+            LOG("AttachmentTimer" );
+            HandleL(EUsbWatcherErrDandlingCable, EUsbStateHostHandleDropping);
+            break;
+            }
+        default:
+            {
+            LOG1( "Unknown timer id = %d", aTimerId );
+            Panic( EWrongTimerId);
+            }
+        }
+    }
+
+// From VBus observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostAInitiate::VBusUpL()
+    {
+    LOG_FUNC
+    }
+
+// From Host Event notification observer
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbStateHostAInitiate::JustBeforeLeavingThisStateL()
+void CUsbStateHostAInitiate::DeviceAttachedL(TDeviceEventInformation aTdi)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiate::JustBeforeLeavingThisStateL" ) );
-    
-        CUsbStateHostAInitiateBase::JustBeforeLeavingThisStateL();
+    LOG_FUNC
+
+    iAttachmentTimer->Cancel();
+
+    // check if an OTG device connected
+    TOtgDescriptor otgDescriptor;
+
+    // ignore all the errors, assume we connected to not otg
+    TInt err = iWatcher.Usb().GetOtgDescriptor(aTdi.iDeviceId, otgDescriptor);
+    LOG1("GetOtgDescriptor() err = %d", err );
+
+    TBool hnpSupported(otgDescriptor.iAttributes & EUsbOtgHNPSupported);
+    TBool srpSupported(otgDescriptor.iAttributes & EUsbOtgSRPSupported);
+
+    // OTG device supports both hnp and srp
+    if (hnpSupported && srpSupported)
+        {
+
+        HandleL(EUsbWatcherConnectedToOTG, EUsbStateHostHandleDropping);
+        return;
+        }
+
+    if (KErrNone != aTdi.iError)
+        {
+        switch (aTdi.iError)
+            // error in attachement
+            {
+            case KErrBadPower:
+                {
+                LOG( "TooMuchPower" );
+                HandleL(
+                        EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration,
+                        EUsbStateHostDelayNotAttachedHandle);
+                break;
+                }
+            default:
+                {
+                LOG1("AttachmentError aTdi.iError = %d" , aTdi.iError );
+                HandleL(EUsbWatcherErrUnsupportedDevice,
+                        EUsbStateHostHandleDropping);
+                break;
+                }
+            }
+
+        return;
+        }
     }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostAInitiate::DriverLoadSuccessL(TDeviceEventInformation)
+    {
+    LOG_FUNC
+    ChangeHostStateL( EUsbStateHostAHost);
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostAInitiate::DriverLoadPartialSuccessL(
+        TDeviceEventInformation)
+    {
+    LOG_FUNC
+    iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgWarning,
+            EUsbOtgPartiallySupportedDevice, NULL);
+    ChangeHostStateL( EUsbStateHostAHost);
+
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostAInitiate::DriverLoadFailureL(TDeviceEventInformation aDei)
+    {
+    LOG_FUNC
+
+    HandleL(EUsbWatcherErrDriversNotFound, EUsbStateHostDelayAttachedHandle);
+    }
--- a/usbengines/usbotgwatcher/src/cusbstatehostainitiatebase.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,317 +0,0 @@
-/*
-* 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:  Implementation
- *
-*/
-
-
-#include <usbuinotif.h>
-#include <usbpersonalityids.h>
-
-#include "cusbstatehostainitiatebase.h"
-#ifndef STIF
-#include "cusbnotifmanager.h"
-#include "cusbtimer.h"
-#else
-#include "mockcusbnotifmanager.h"
-#include "mockcusbtimer.h"
-#endif
-
-#include "definitions.h"
-#include "errors.h"
-
-#include "debug.h"
-#include "panic.h"
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbStateHostAInitiateBase::CUsbStateHostAInitiateBase(
-        CUsbOtgWatcher* aWatcher) :
-    CUsbStateHostABase(aWatcher)
-    {
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::ConstructL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::ConstructL" ) );
-
-    CUsbStateHostABase::ConstructL();
-
-    iAttachmentTimer = CUsbTimer::NewL(this, EDeviceAttachmentTimer);
-
-    //iUsbPersonalitySwitch = CUsbPersonalitySwitch::NewL(this);
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-CUsbStateHostAInitiateBase::~CUsbStateHostAInitiateBase()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::~CUsbStateHostAInitiateBase" ) );
-
-    delete iAttachmentTimer;
-    //delete iUsbPersonalitySwitch;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::JustBeforeLeavingThisStateL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::JustBeforeLeavingThisStateL" ) );
-    iAttachmentTimer->Cancel();
-    }
-
-// From TimerObserver
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::TimerElapsedL(TUsbTimerId aTimerId)
-    {
-    switch (aTimerId)
-        {
-        case EDeviceAttachmentTimer:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::TimerElapsedL - AttachmentTimer" ) );
-            HandleL(EUsbWatcherErrDandlingCable);
-            break;
-            }
-        default:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::TimerElapsedL - Unknown timer" ) );
-            Panic(EWrongTimerId);
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::VBusUpL()
-    {
-    // start timer, waiting for device attachment
-    iAttachmentTimer->After(KTimeToWaitForDeviceAttachment);
-    }
-
-// From VBus observer
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::VBusDownL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::VBusDownL" ) );
-    iAttachmentTimer->Cancel();
-
-    CUsbStateHostABase::VBusDownL();
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::AHostL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::AHostL" ) );
-    // do nothing
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::APeripheralL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostABase::AHostL" ) );
-    ChangeHostStateL(EUsbStateHostAPeripheral);
-    }
-
-// From Host Event notification observer
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::DeviceAttachedL(TDeviceEventInformation aTdi)
-    {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL aTdi.iDeviceId = %d" ), aTdi.iDeviceId));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL aTdi.iEventType = %d" ), aTdi.iEventType));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL aTdi.iError = %d" ), aTdi.iError));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL aTdi.iDriverLoadStatus = %d" ), aTdi.iDriverLoadStatus));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL aTdi.iVid = %d" ), aTdi.iVid));
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL aTdi.iPid = %d" ), aTdi.iPid));
-
-    iAttachmentTimer->Cancel();
-    
-    // check if an OTG device connected
-    TOtgDescriptor otgDescriptor;
-    
-    // ignore all the errors, assume we connected to not otg
-    TInt err  = iWatcher->Usb().GetOtgDescriptor(aTdi.iDeviceId, otgDescriptor);
-             
-    TBool hnpSupported(otgDescriptor.iAttributes & EUsbOtgHNPSupported);
-    TBool srpSupported(otgDescriptor.iAttributes & EUsbOtgSRPSupported);
-    
-    FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL GetOtgDescriptor err = %d, HNP supported = %d, SRP supported = %d" ), err, hnpSupported, srpSupported));
-             
-    // OTG device supports both hnp and srp
-    if(hnpSupported && srpSupported)
-        {
-        HandleL(EUsbWatcherConnectedToOTG);
-        return;
-        }
-            
-    if (KErrNone != aTdi.iError)
-        {
-        switch (aTdi.iError)
-            // error in attachement
-            {
-            case KErrBadPower:
-                {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL TooMuchPower" ) );
-                    HandleL(EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration);
-                    break;
-                }
-            default:
-                {
-                    FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DeviceAttachedL AttachmentError" ) );
-                    HandleL(EUsbWatcherErrUnsupportedDevice);
-                    break;
-                }
-
-            }
-        
-        return;
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::DriverLoadSuccessL(TDeviceEventInformation)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DriverLoadSuccessL" ) );
-    ChangeHostStateL(EUsbStateHostAHost);
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::DriverLoadPartialSuccessL(
-        TDeviceEventInformation)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DriverLoadPartialSuccessL" ) );
-    iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgWarning,
-            EUsbOtgPartiallySupportedDevice, NULL);
-    ChangeHostStateL(EUsbStateHostAHost);
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::DriverLoadFailureL(
-        TDeviceEventInformation aDei)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::DriverLoadFailureL" ) );
-
-    // try initiate to switch to mass storage
-  /*  if (KErrNone != iUsbPersonalitySwitch->SwitchPersonalityL(aDei.iDeviceId,
-            KUsbPersonalityIdMS ))
-        {*/
-        HandleL(EUsbWatcherErrDriversNotFound);
-      //  }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAInitiateBase::SrpReceivedL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::SrpReceivedL" ) );
-    if (CUsbVBusObserver::EVBusUp != iWatcher->VBusObserver()->VBus())
-        {
-        TInt err = iWatcher->Usb().BusRespondSrp();
-        if (KErrNone != err)
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::SrpReceivedL BusRespondSrp error" ) );
-            iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
-            }
-        }
-    }
-
-void CUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL(
-        MUsbPersonalitySwitchObserver::TState aState, TInt aData)
-    {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL aState = %d aData = %d" ), TInt(aState), aData));
-
-    switch (aState)
-        {
-        case ERequestingAllPersonalities:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL ERequestingAllPersonalities" ) );
-            break;
-            }
-        case ERequestingSetPersonality:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL ERequestingSetPersonality" ) );
-            break;
-            }
-        case EGetAllPersonalitiesCompleted:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL EGetAllPersonalitiesCompleted" ) );
-            if (KErrNotFound == aData)
-                {
-                // no supported or needed personality/ies in the peripheral
-                HandleL(EUsbWatcherErrDriversNotFound);
-                }
-            break;
-            }
-        case ESetPersonalityCompleted:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL ESetPersonalityCompleted" ) );
-
-            break;
-            }
-        case ERequestCancelled:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL ERequestCancelled" ) );
-            break;
-            }
-        case ERequestFailed:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAInitiateBase::UsbPersonalitySwitchStateChangedL ERequestFailed" ) );
-            HandleL(EUsbWatcherErrDriversNotFound);
-            break;
-            }
-        default:
-            {
-            Panic(EUnexpectedUsbSwitchPersonalityState);
-            }
-        }
-    }
--- a/usbengines/usbotgwatcher/src/cusbstatehostaperipheral.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstatehostaperipheral.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,33 +1,24 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbuinotif.h>
 
 #include "cusbstatehostaperipheral.h"
 
-#ifndef STIF
-#include "cusbnotifmanager.h"
-#include "cusbtimer.h"
-#else
-#include "mockcusbnotifmanager.h"
-#include "mockcusbtimer.h"
-#endif
-
 #include "errors.h"
 #include "debug.h"
 #include "panic.h"
@@ -36,7 +27,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostAPeripheral::CUsbStateHostAPeripheral(CUsbOtgWatcher* aWatcher) :
+CUsbStateHostAPeripheral::CUsbStateHostAPeripheral(CUsbOtgWatcher& aWatcher) :
     CUsbStateHostABase(aWatcher)
     {
     }
@@ -47,7 +38,7 @@
 //
 void CUsbStateHostAPeripheral::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAPeripheral::ConstructL" ) );
+    LOG_FUNC
 
     CUsbStateHostABase::ConstructL();
     }
@@ -57,9 +48,9 @@
 // ---------------------------------------------------------------------------
 //
 CUsbStateHostAPeripheral* CUsbStateHostAPeripheral::NewL(
-        CUsbOtgWatcher* aWatcher)
+        CUsbOtgWatcher& aWatcher)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAPeripheral::NewL" ) );
+    LOG_FUNC
 
     CUsbStateHostAPeripheral* self = new (ELeave) CUsbStateHostAPeripheral(
             aWatcher);
@@ -75,17 +66,7 @@
 //
 CUsbStateHostAPeripheral::~CUsbStateHostAPeripheral()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAPeripheral::~CUsbStateHostAPeripheral" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostAPeripheral::JustAdvancedToThisStateL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAPeripheral::JustAdvancedToThisStateL" ) );
-    iWatcher->PrintStateToLog();
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -94,7 +75,6 @@
 //
 TUsbStateIds CUsbStateHostAPeripheral::Id()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAPeripheral::Id" ) );
     return EUsbStateHostAPeripheral;
     }
 
@@ -106,7 +86,7 @@
 //
 void CUsbStateHostAPeripheral::AHostL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAPeripheral::AHostL" ) );
-        ChangeHostStateL(EUsbStateHostAInitiate);
+    LOG_FUNC
+    ChangeHostStateL( EUsbStateHostAInitiate);
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/src/cusbstatehostdelayattachedhandle.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,171 @@
+/*
+ * 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:  Implementation
+ *
+ */
+
+#include <usbuinotif.h>
+
+#include "cusbstatehostdelayattachedhandle.h"
+#ifndef STIF
+#include "cusbtimer.h"
+#else
+#include "mockcusbtimer.h"
+#endif
+
+#include "errors.h"
+#include "debug.h"
+#include "panic.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayAttachedHandle::CUsbStateHostDelayAttachedHandle(
+        CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostDelayHandle(aWatcher)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayAttachedHandle* CUsbStateHostDelayAttachedHandle::NewL(
+        CUsbOtgWatcher& aWatcher)
+    {
+    LOG_FUNC
+
+    CUsbStateHostDelayAttachedHandle* self =
+            new (ELeave) CUsbStateHostDelayAttachedHandle(aWatcher);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayAttachedHandle::ConstructL()
+    {
+    LOG_FUNC
+
+    CUsbStateHostDelayHandle::ConstructL();
+    iDriversNotFoundTimer = CUsbTimer::NewL(*this, EDriversNotFoundTimer);
+
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayAttachedHandle::~CUsbStateHostDelayAttachedHandle()
+    {
+    LOG_FUNC
+
+    delete iDriversNotFoundTimer;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TUsbStateIds CUsbStateHostDelayAttachedHandle::Id()
+    {
+    return EUsbStateHostDelayAttachedHandle;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayAttachedHandle::JustBeforeLeavingThisStateL()
+    {
+    LOG_FUNC
+
+    iDriversNotFoundTimer->Cancel();
+
+    // do general things 
+    CUsbStateHostDelayHandle::JustBeforeLeavingThisStateL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayAttachedHandle::DoHandleL()
+    {
+    LOG_FUNC
+    LOG1( "iWhat = %d" , iWhat);
+
+    switch (iWhat)
+        {
+        case EUsbWatcherErrDriversNotFound:
+            {
+            LOG("DriversNotFound" );
+
+            iDriversNotFoundTimer->After(KTimeDriversNotFound);
+            break;
+
+            }
+
+        default:
+            {
+            LOG1("Unexpected request id = %d" , iWhat );
+            Panic( EUnexpectedSituationToHandle);
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayAttachedHandle::DeviceDetachedL(
+        TDeviceEventInformation)
+    {
+    LOG_FUNC
+
+    ChangeHostStateL( EUsbStateHostAInitiate);
+    }
+
+// From TimerObserver
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayAttachedHandle::TimerElapsedL(TUsbTimerId aTimerId)
+    {
+    LOG_FUNC
+
+    switch (aTimerId)
+        {
+        case EDriversNotFoundTimer:
+            {
+            LOG( "EDriversNotFoundTimer" );
+            HandleL(EUsbWatcherErrUnsupportedDevice,
+                    EUsbStateHostHandleDropping);
+
+            break;
+            }
+        default:
+            {
+            LOG1( "Unknown timer id = %d", aTimerId );
+            Panic( EWrongTimerId);
+            }
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/src/cusbstatehostdelayhandle.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,78 @@
+/*
+ * 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:  Implementation
+ *
+ */
+
+#include "cusbstatehostdelayhandle.h"
+
+#include "errors.h"
+#include "debug.h"
+#include "panic.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayHandle::CUsbStateHostDelayHandle(CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostHandle(aWatcher)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayHandle::ConstructL()
+    {
+    LOG_FUNC
+
+    CUsbStateHostHandle::ConstructL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayHandle::~CUsbStateHostDelayHandle()
+    {
+    LOG_FUNC
+    }
+
+/////////////////////////////////////////////////////////////////////////////////////
+// From VBus observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayHandle::VBusUpL()
+    {
+    LOG_FUNC
+    // this is not expected, due to in this state vbus already up, since entering the state
+    Panic( EVBusUpNotExpected);
+    }
+
+// From Host Event notification observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayHandle::DeviceAttachedL(
+        TDeviceEventInformation aDevEventInfo)
+    {
+    LOG_FUNC
+
+    ChangeHostStateL( EUsbStateHostAInitiate);
+    iWatcher.DeviceAttachedL(aDevEventInfo);
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/src/cusbstatehostdelaynotattachedhandle.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,176 @@
+/*
+ * 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:  Implementation
+ *
+ */
+
+#include "cusbstatehostdelaynotattachedhandle.h"
+
+#include "errors.h"
+#include "debug.h"
+#include "panic.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayNotAttachedHandle::CUsbStateHostDelayNotAttachedHandle(
+        CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostDelayHandle(aWatcher)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayNotAttachedHandle* CUsbStateHostDelayNotAttachedHandle::NewL(
+        CUsbOtgWatcher& aWatcher)
+    {
+    LOG_FUNC
+
+    CUsbStateHostDelayNotAttachedHandle* self =
+            new (ELeave) CUsbStateHostDelayNotAttachedHandle(aWatcher);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayNotAttachedHandle::ConstructL()
+    {
+    LOG_FUNC
+
+    CUsbStateHostDelayHandle::ConstructL();
+
+    iTooMuchPowerTimer = CUsbTimer::NewL(*this, ETooMuchPowerRequiredTimer);
+
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostDelayNotAttachedHandle::~CUsbStateHostDelayNotAttachedHandle()
+    {
+    LOG_FUNC
+
+    delete iTooMuchPowerTimer;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TUsbStateIds CUsbStateHostDelayNotAttachedHandle::Id()
+    {
+    return EUsbStateHostDelayNotAttachedHandle;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayNotAttachedHandle::JustBeforeLeavingThisStateL()
+    {
+    LOG_FUNC
+
+    iTooMuchPowerTimer->Cancel();
+
+    // do general things 
+    CUsbStateHostDelayHandle::JustBeforeLeavingThisStateL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayNotAttachedHandle::DoHandleL()
+    {
+    LOG_FUNC
+    LOG1( "iWhat = %d" , iWhat);
+
+    switch (iWhat)
+        {
+        case EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration:
+            {
+            LOG("EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration" );
+
+            iTooMuchPowerTimer->After(KTimeTooMuchPowerRequired);
+            break;
+            }
+
+        default:
+            {
+            LOG1("Unexpected request id = %d", iWhat);
+            Panic( EUnexpectedSituationToHandle);
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayNotAttachedHandle::AIdleL()
+    {
+    LOG_FUNC
+
+    // Exit on AIdle, due to Detachment not comes,
+    // because no corresponding attachment with err == KErrNone
+    ChangeHostStateL( EUsbStateHostAInitiate);
+
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayNotAttachedHandle::DeviceDetachedL(
+        TDeviceEventInformation)
+    {
+    LOG_FUNC
+    Panic( EDeviceDetachedNotExpected);
+
+    }
+
+// From TimerObserver
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostDelayNotAttachedHandle::TimerElapsedL(TUsbTimerId aTimerId)
+    {
+    LOG_FUNC
+    switch (aTimerId)
+        {
+        case ETooMuchPowerRequiredTimer:
+            {
+            LOG("ETooMuchPowerRequiredTimer" );
+            HandleL(EUsbWatcherErrDeviceRequiresTooMuchPower,
+                    EUsbStateHostHandleDropping);
+            break;
+            }
+        default:
+            {
+            LOG1("Unknown timer id = %d", aTimerId );
+            Panic( EWrongTimerId);
+            }
+        }
+    }
--- a/usbengines/usbotgwatcher/src/cusbstatehosthandle.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbstatehosthandle.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,29 +1,21 @@
 /*
-* 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:  Implementation
+ * 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".
  *
-*/
-
-
-#include <usbuinotif.h>
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:  Implementation
+ *
+ */
 
 #include "cusbstatehosthandle.h"
-#ifndef STIF
-#include "cusbnotifmanager.h"
-#else
-#include "mockcusbnotifmanager.h"
-#endif
 
 #include "errors.h"
 #include "debug.h"
@@ -33,8 +25,8 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostHandle::CUsbStateHostHandle(CUsbOtgWatcher* aWatcher) :
-    CUsbState(aWatcher)
+CUsbStateHostHandle::CUsbStateHostHandle(CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostABase(aWatcher)
     {
     }
 
@@ -42,27 +34,11 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbStateHostHandle* CUsbStateHostHandle::NewL(CUsbOtgWatcher* aWatcher)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostAHost::NewL" ) );
-
-    CUsbStateHostHandle* self = new (ELeave) CUsbStateHostHandle(aWatcher);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
 void CUsbStateHostHandle::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::ConstructL" ) );
+    LOG_FUNC
 
-    iTooMuchPowerTimer = CUsbTimer::NewL(this, ETooMuchPowerRequiredTimer);
-    iDriversNotFoundTimer = CUsbTimer::NewL(this, EDriversNotFoundTimer);
+    CUsbStateHostABase::ConstructL();
 
     }
 
@@ -72,21 +48,7 @@
 //
 CUsbStateHostHandle::~CUsbStateHostHandle()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::~CUsbStateHostHandle" ) );
-
-    delete iTooMuchPowerTimer;
-    delete iDriversNotFoundTimer;
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-TUsbStateIds CUsbStateHostHandle::Id()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::Id" ) );
-
-    return EUsbStateHostHandle;
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -95,467 +57,34 @@
 //
 void CUsbStateHostHandle::JustAdvancedToThisStateL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::JustAdvancedToThisStateL" ) );
-    iWatcher->PrintStateToLog();
+    LOG_FUNC
 
+    // first do general things
+    CUsbStateHostABase::JustAdvancedToThisStateL();
+
+    // then, do specific things
     DoHandleL();
+
     }
 
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbStateHostHandle::JustBeforeLeavingThisStateL()
-    {
-    iTooMuchPowerTimer->Cancel();
-    iDriversNotFoundTimer->Cancel();
-    
-    iWatcher->NotifManager()->CloseAllNotifiers();
-    }
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
 void CUsbStateHostHandle::SetWhat(TInt aWhat)
     {
     iWhat = aWhat;
     }
 
-// this means only one wait notifier at a time can be shown by this state
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::WaitNotifierCompletedL(TInt /*aFeedback*/)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL" ) );
-    switch (iWhat)
-        {
-        case EUsbWatcherErrDriversNotFound:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL DriversNotFound" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherHubsNotSupported:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherHubsNotSupported" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherErrDeviceRequiresTooMuchPower:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherErrDeviceRequiresTooMuchPower" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherErrUnsupportedDevice:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherErrUnsupportedDevice" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherConnectedToOTG:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherConnectedToOTG" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherErrDandlingCable:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherErrDandlingCable" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherNoActivity:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherNoActivity" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherErrorInConnection:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherErrorInConnection" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        case EUsbWatcherCanNotStartUsbServices:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL EUsbWatcherCanNotStartUsbServices" ) );
-            
-            break;                     
-            }
-        // errors from observers mapped to one
-        case EUsbWatcherIdPinError:
-        case EUsbWatcherVBusObserverError:
-        case EUsbWatcherHostEventNotificationError:
-        case EUsbWatcherOtgStateError:
-        case EUsbWatcherMessageNotificationError:
-            {
-            // try to restore
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL Error in observer" ) );
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            break;
-            }
-        default:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL Unexpected situation to be handled" ) );
-            Panic(EUnexpectedSituationToHandle);
-            break;
-            }
-
-        }
-    }
-
+// From message notification observer
 // ---------------------------------------------------------------------------
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbStateHostHandle::DoHandleL()
-    {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL iWhat = %d" ), iWhat));
-
-    if (iTooMuchPowerTimer)
-        iTooMuchPowerTimer->Cancel();
-
-    switch (iWhat)
-        {
-        case EUsbWatcherErrDriversNotFound:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL DriversNotFound" ) );
-                
-            iDriversNotFoundTimer->After(KTimeDriversNotFound);
-            break;
-                
-            }
-        case EUsbWatcherHubsNotSupported:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherHubsNotSupported" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgHubUnsupported, this);
-            break;
-            }
-        case EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrDeviceRequiresTooMuchPowerOnEnumeration" ) );
-
-            iTooMuchPowerTimer->After(KTimeTooMuchPowerRequired);
-            break;
-            }
-        case EUsbWatcherErrDeviceRequiresTooMuchPower:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrDeviceRequiresTooMuchPower" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgTooMuchPower, this);
-            break;
-            }
-        case EUsbWatcherErrUnsupportedDevice:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrUnsupportedDevice" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgUnsupportedDevice, this);
-            break;
-            }
-        case EUsbWatcherConnectedToOTG:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherConnectedToOTG" ) );
-                
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgUnsupportedDevice, this);
-            break;
-            }
-        case EUsbWatcherErrDandlingCable:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrDandlingCable" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgErrorAttachTimedOut, this);
-            break;
-            }
-        case EUsbWatcherNoActivity:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherNoActivity" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgUnsupportedDevice, this);
-
-            break;
-            }
-        case EUsbWatcherErrorInConnection:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherErrorInConnection" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgErrorInConnection, this);
-            break;
-            }
-        case EUsbWatcherCanNotStartUsbServices:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL EUsbWatcherCanNotStartUsbServices" ) );
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                EUsbOtgErrorInConnection, this);
-            break;           
-            }
-        // errors from observers mapped to one
-        case EUsbWatcherIdPinError:
-        case EUsbWatcherVBusObserverError:
-        case EUsbWatcherHostEventNotificationError:
-        case EUsbWatcherOtgStateError:
-        case EUsbWatcherMessageNotificationError:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DoHandleL Error from observer" ) );
-        // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-        iWatcher->Usb().BusDrop();
-        iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                EUsbOtgErrorInConnection, this);
-            break;
-            }
-        default:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::WaitNotifierCompletedL Unexpected situation to be handled" ) );
-            Panic(EUnexpectedSituationToHandle);
-            break;
-            }
-        }
-    }
-
-/////////////////////////////////////////////////////////////////////////////////////
-// just ignore all the events		
-// From VBus observer
-void CUsbStateHostHandle::VBusDownL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusDownL" ) );
-    }
-
-// From OTG state observer
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::AIdleL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::AIdleL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::AHostL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::AHostL" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::APeripheralL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::APeripheralL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::AVBusErrorL()
+void CUsbStateHostHandle::MessageNotificationReceivedL(TInt aMessage)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::AVBusErrorL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BIdleL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BIdleL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BPeripheralL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BPeripheralL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BHostL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BHostL" ) );
-
-    }
-
-// From bus activity observer
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BusIdleL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BusIdleL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BusActiveL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BusActiveL" ) );
-
-    }
-
-// From Host Event notification observer
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::DeviceAttachedL(
-        TDeviceEventInformation aDevEventInfo)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceAttachedL" ) );
-
-    if (iTooMuchPowerTimer->IsActive() || iDriversNotFoundTimer->IsActive())
-        {
-        ChangeHostStateL(EUsbStateHostAInitiate);
-        iWatcher->DeviceAttachedL(aDevEventInfo);
-        return;
-        }
-     FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceAttachedL Unexpected situation" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::DeviceDetachedL(TDeviceEventInformation)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceDetachedL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::DriverLoadSuccessL(TDeviceEventInformation)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadSuccessL" ) );
-    
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::DriverLoadPartialSuccessL(TDeviceEventInformation)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadPartialSuccessL" ) );
-    
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::DriverLoadFailureL(TDeviceEventInformation)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbState::DriverLoadFailureL" ) );
-    
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::BadHubPositionL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::BadHubPositionL" ) );
-
-    if (iTooMuchPowerTimer->IsActive())
-        {
-        ChangeHostStateL(EUsbStateHostAInitiate);
-        iWatcher->BadHubPositionL();
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::DeviceAttachedL Unexpected situation" ) );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::VBusErrorL()
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusErrorL" ) );
-
-    iWatcher->Usb().BusClearError();
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::VBusErrorL Unexpected situation" ) );
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::MessageNotificationReceivedL(TInt)
-    {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::MessageNotificationReceivedL" ) );
-
-    }
-
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::SrpReceivedL()
-    {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SrpReceivedL" ) );
-        
-    if (CUsbVBusObserver::EVBusUp != iWatcher->VBusObserver()->VBus())
-        {
-        TInt err = iWatcher->Usb().BusRespondSrp();
-        if (KErrNone != err)
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SrpReceivedL BusRespondSrp error" ) );
-            iWatcher->HandleHostProblemL(EUsbWatcherErrorInConnection);
-            }
-        else
-            {
-            ChangeHostStateL(EUsbStateHostAInitiate);
-            }
-        }
+    LOG_FUNC
+    LOG1( "Unhandled message aMessage = %d" , aMessage);
 
     }
 
@@ -565,41 +94,5 @@
 //
 void CUsbStateHostHandle::SessionRequestedL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::SessionRequestedL" ) );
-
+    LOG_FUNC
     }
-
-// From TimerObserver
-// ---------------------------------------------------------------------------
-// 
-// ---------------------------------------------------------------------------
-//
-void CUsbStateHostHandle::TimerElapsedL(TUsbTimerId aTimerId)
-    {
-    switch (aTimerId)
-        {
-        case ETooMuchPowerRequiredTimer:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::TimerElapsedL - ETooMuchPowerRequiredTimer" ) );
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgTooMuchPowerRequired, this);
-            break;
-            }
-        case EDriversNotFoundTimer:
-            {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::TimerElapsedL - EDriversNotFoundTimer" ) );
-            // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
-            iWatcher->Usb().BusDrop();
-            iWatcher->NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
-                    EUsbOtgUnsupportedDevice, this);
-
-            break;
-            }
-        default:
-            {
-                FLOG( _L( "[USBOTGWATCHER]\tCUsbStateHostHandle::TimerElapsedL - Unknown timer" ) );
-            Panic(EWrongTimerId);
-            }
-        }
-    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/src/cusbstatehosthandledropping.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,382 @@
+/*
+ * 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:  Implementation
+ *
+ */
+
+#include <usbuinotif.h>
+#include <d32usbdi_errors.h>
+
+#include "cusbstatehosthandledropping.h"
+#ifndef STIF
+#include "cusbnotifmanager.h"
+#else
+#include "mockcusbnotifmanager.h"
+#endif
+
+#include "errors.h"
+#include "debug.h"
+#include "panic.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostHandleDropping::CUsbStateHostHandleDropping(
+        CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostHandle(aWatcher)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostHandleDropping* CUsbStateHostHandleDropping::NewL(
+        CUsbOtgWatcher& aWatcher)
+    {
+    LOG_FUNC
+
+    CUsbStateHostHandleDropping* self =
+            new (ELeave) CUsbStateHostHandleDropping(aWatcher);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::ConstructL()
+    {
+    LOG_FUNC
+    CUsbStateHostHandle::ConstructL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostHandleDropping::~CUsbStateHostHandleDropping()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TUsbStateIds CUsbStateHostHandleDropping::Id()
+    {
+    return EUsbStateHostHandleDropping;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::JustBeforeLeavingThisStateL()
+    {
+    LOG_FUNC
+
+    iWatcher.NotifManager()->CloseAllNotifiers();
+
+    // do general things 
+    CUsbStateHostHandle::JustBeforeLeavingThisStateL();
+    }
+
+// this means only one wait notifier at a time can be shown by this state
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::WaitNotifierCompletedL(TInt /*aFeedback*/)
+    {
+    LOG_FUNC
+
+    switch (iWhat)
+        {
+        case EUsbWatcherHubsNotSupported:
+            {
+            LOG( "EUsbWatcherHubsNotSupported" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+        case EUsbWatcherErrDeviceRequiresTooMuchPower:
+            {
+            LOG( "EUsbWatcherErrDeviceRequiresTooMuchPower" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+        case EUsbWatcherErrUnsupportedDevice:
+            {
+            LOG("EUsbWatcherErrUnsupportedDevice" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+        case EUsbWatcherConnectedToOTG:
+            {
+            LOG("EUsbWatcherConnectedToOTG" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+        case EUsbWatcherErrDandlingCable:
+            {
+            LOG("EUsbWatcherErrDandlingCable" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+        case EUsbWatcherNoActivity:
+            {
+            LOG("EUsbWatcherNoActivity" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+        case EUsbWatcherErrorInConnection:
+            {
+            LOG( "EUsbWatcherErrorInConnection" );
+            ChangeHostStateL( EUsbStateHostAInitiate);
+            break;
+            }
+
+            // fatal errors
+        case EUsbWatcherCanNotStartUsbServices:
+            {
+            LOG( "EUsbWatcherCanNotStartUsbServices" );
+
+            // no break here                     
+            }
+
+            // no break statement for following cases    
+        case EUsbWatcherIdPinError:
+        case EUsbWatcherVBusObserverError:
+        case EUsbWatcherHostEventNotificationError:
+        case EUsbWatcherOtgStateError:
+        case EUsbWatcherMessageNotificationError:
+        case EUsbWatcherCanNotStartSession:
+        case EUsbWatcherCanNotEnableDriverLoading:
+        case EUsbWatcherCanNotClearBusError:
+        case EUsbWatcherCanNotRaiseVBus:
+            {
+            LOG("Fatal error" );
+            ChangeHostStateL( EUsbStateHostUndefined);
+            break;
+            }
+        default:
+            {
+            LOG1("Unexpected situation to be handled iWhat = %d" , iWhat );
+            Panic( EUnexpectedSituationToHandle);
+            break;
+            }
+
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::DoHandleL()
+    {
+    LOG_FUNC
+
+    LOG1( "iWhat = %d" , iWhat);
+
+    // Drop VBus first    
+    // Ignore any errors when calling BusDrop(). Those indicate that VBus already dropped 
+    iWatcher.Usb().BusDrop();
+
+    switch (iWhat)
+        {
+
+        case EUsbWatcherHubsNotSupported:
+            {
+            LOG("EUsbWatcherHubsNotSupported" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgHubUnsupported, this);
+            break;
+            }
+        case EUsbWatcherErrDeviceRequiresTooMuchPower:
+            {
+            LOG("EUsbWatcherErrDeviceRequiresTooMuchPower" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgTooMuchPower, this);
+            break;
+            }
+        case EUsbWatcherErrUnsupportedDevice:
+            {
+            LOG("EUsbWatcherErrUnsupportedDevice" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgUnsupportedDevice, this);
+            break;
+            }
+        case EUsbWatcherConnectedToOTG:
+            {
+            LOG("EUsbWatcherConnectedToOTG" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgUnsupportedDevice, this);
+
+            break;
+            }
+        case EUsbWatcherErrDandlingCable:
+            {
+            LOG( "EUsbWatcherErrDandlingCable" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgErrorAttachTimedOut, this);
+            break;
+            }
+        case EUsbWatcherNoActivity:
+            {
+            LOG( "EUsbWatcherNoActivity" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgUnsupportedDevice, this);
+
+            break;
+            }
+        case EUsbWatcherErrorInConnection:
+            {
+            LOG("EUsbWatcherErrorInConnection" );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgErrorInConnection, this);
+            break;
+            }
+        case EUsbWatcherCanNotStartUsbServices:
+            {
+            LOG("EUsbWatcherCanNotStartUsbServices" );
+            // no break here
+            }
+            // no break in following cases
+        case EUsbWatcherIdPinError:
+        case EUsbWatcherVBusObserverError:
+        case EUsbWatcherHostEventNotificationError:
+        case EUsbWatcherOtgStateError:
+        case EUsbWatcherMessageNotificationError:
+        case EUsbWatcherCanNotStartSession:
+        case EUsbWatcherCanNotEnableDriverLoading:
+        case EUsbWatcherCanNotClearBusError:
+        case EUsbWatcherCanNotRaiseVBus:
+            {
+            LOG1( "Fatal error iWhat = %d", iWhat );
+            iWatcher.NotifManager()->ShowNotifierL(KUsbUiNotifOtgError,
+                    EUsbOtgErrorInConnection, this);
+            break;
+            }
+        default:
+            {
+            LOG1("Unexpected situation to be handled iWhat = %d", iWhat );
+            Panic( EUnexpectedSituationToHandle);
+            break;
+            }
+        }
+    }
+
+/////////////////////////////////////////////////////////////////////////////////////
+// From VBus observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::VBusUpL()
+    {
+    LOG_FUNC
+    ChangeHostStateL( EUsbStateHostAInitiate);
+    }
+
+// ---------------------------------------------------------------------------
+// this is expected in the state, for example after calling BusDrop
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::VBusDownL()
+    {
+    LOG_FUNC
+    }
+
+// From Host Event notification observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::DeviceAttachedL(
+        TDeviceEventInformation aDevEventInfo)
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::DeviceDetachedL(TDeviceEventInformation)
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::DriverLoadSuccessL(TDeviceEventInformation)
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::DriverLoadPartialSuccessL(
+        TDeviceEventInformation)
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::DriverLoadFailureL(TDeviceEventInformation)
+    {
+    LOG_FUNC
+    }
+
+// From message notification observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostHandleDropping::MessageNotificationReceivedL(TInt aMessage)
+    {
+    LOG_FUNC
+
+    LOG1( "aMessage = %d", aMessage )
+
+    switch (aMessage)
+        {
+        // USBDI
+        case KEventUsbBadDeviceDetached:
+            {
+            LOG("BadDeviceDetached" );
+            ChangeHostStateL( EUsbStateHostUndefined);
+            break;
+            }
+        default:
+            {
+            LOG1( "Unhandled message aMessage = %d" , aMessage);
+            break;
+            }
+
+        }
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbotgwatcher/src/cusbstatehostundefined.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,182 @@
+/*
+ * 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:  Implementation
+ *
+ */
+
+#include "cusbstatehostundefined.h"
+
+#include "definitions.h"
+#include "errors.h"
+
+#include "debug.h"
+#include "panic.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostUndefined::CUsbStateHostUndefined(CUsbOtgWatcher& aWatcher) :
+    CUsbStateHostABase(aWatcher)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostUndefined* CUsbStateHostUndefined::NewL(CUsbOtgWatcher& aWatcher)
+    {
+    LOG_FUNC
+
+    CUsbStateHostUndefined* self = new (ELeave) CUsbStateHostUndefined(
+            aWatcher);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::ConstructL()
+    {
+    LOG_FUNC
+
+    CUsbStateHostABase::ConstructL();
+
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CUsbStateHostUndefined::~CUsbStateHostUndefined()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TUsbStateIds CUsbStateHostUndefined::Id()
+    {
+    return EUsbStateHostUndefined;
+    }
+
+// From VBus observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::VBusDownL()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::VBusUpL()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::VBusErrorL()
+    {
+    LOG_FUNC
+    iWatcher.Usb().BusClearError();
+    }
+
+// From OTG state observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::AVBusErrorL()
+    {
+    LOG_FUNC
+    iWatcher.Usb().BusClearError();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::BIdleL()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::BPeripheralL()
+    {
+    LOG_FUNC
+    }
+
+// From host state observer
+void CUsbStateHostUndefined::DeviceDetachedL(TDeviceEventInformation /*aInfo*/)
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::SrpReceivedL()
+    {
+    LOG_FUNC
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::SessionRequestedL()
+    {
+    LOG_FUNC
+    }
+
+// From message notification observer
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::MessageNotificationReceivedL(TInt aMessage)
+    {
+    LOG_FUNC
+    LOG1( "Unhandled message aMessage = %d" , aMessage);
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CUsbStateHostUndefined::BadHubPositionL()
+    {
+    LOG_FUNC
+    Panic( EBadHubPositionNotExpected);
+    }
--- a/usbengines/usbotgwatcher/src/cusbtimer.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbtimer.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include "cusbtimer.h"
 
@@ -24,7 +23,7 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbTimer::CUsbTimer(MUsbTimerObserver* aObserver, TUsbTimerId aTimerId) :
+CUsbTimer::CUsbTimer(MUsbTimerObserver& aObserver, TUsbTimerId aTimerId) :
     CActive(CActive::EPriorityStandard), iObserver(aObserver), iTimerId(
             aTimerId)
     {
@@ -37,7 +36,7 @@
 //
 CUsbTimer::~CUsbTimer()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbTimer::~CUsbTimer" ) );
+    LOG_FUNC
     Cancel();
     iTimer.Close();
     }
@@ -48,7 +47,7 @@
 //
 void CUsbTimer::ConstructL()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbTimer::ConstructL" ) );
+    LOG_FUNC
     User::LeaveIfError(iTimer.CreateLocal());
     }
 
@@ -56,12 +55,11 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbTimer* CUsbTimer::NewL(MUsbTimerObserver* anObserver,
-        TUsbTimerId aTimerId)
+CUsbTimer* CUsbTimer::NewL(MUsbTimerObserver& aObserver, TUsbTimerId aTimerId)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbTimer::NewL" ) );
+    LOG_FUNC
 
-    CUsbTimer* self = new (ELeave) CUsbTimer(anObserver, aTimerId);
+    CUsbTimer* self = new (ELeave) CUsbTimer(aObserver, aTimerId);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(self); // pop self
@@ -74,9 +72,7 @@
 //
 void CUsbTimer::After(TInt aMilliseconds)
     {
-//        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbTimer::After aMilliseconds %d, timerId=%d" ), aMilliseconds, iTimerId))
-
-    if (IsActive()) // should we panic here? or just restart timer
+    if (IsActive())
         {
         Cancel();
         }
@@ -93,13 +89,12 @@
 void CUsbTimer::RunL()
     {
 
-    if(KErrNone != iStatus.Int())
+    if (KErrNone != iStatus.Int())
         {
-        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbTimer::RunL iStatus %d" ), iStatus.Int()));
         User::Leave(iStatus.Int());
         }
 
-    iObserver->TimerElapsedL(iTimerId);
+    iObserver.TimerElapsedL(iTimerId);
     }
 
 // ---------------------------------------------------------------------------
@@ -108,7 +103,8 @@
 //
 TInt CUsbTimer::RunError(TInt aError)
     {
-        FTRACE(FPrint(_L( "[USBOTGWATCHER]\tCUsbTimer::RunError aError %d" ), aError ));
+    LOG_FUNC
+    LOG1( "aError = %d" , aError );
 
     return KErrNone;
     }
@@ -119,6 +115,5 @@
 //
 void CUsbTimer::DoCancel()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbTimer::DoCancel" ) )
     iTimer.Cancel();
     }
--- a/usbengines/usbotgwatcher/src/cusbvbusobserver.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbvbusobserver.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Implementation
+ * 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:  Implementation
+ *
+ */
 
 #include <usbotgdefs.h>
 
@@ -40,8 +39,7 @@
 //
 void CUsbVBusObserver::ConstructL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::ConstructL" ) );
+    LOG_FUNC
 
     User::LeaveIfError(iVBus.Attach(KUidUsbManCategory,
             KUsbOtgVBusPoweredProperty));
@@ -54,8 +52,7 @@
 //
 CUsbVBusObserver* CUsbVBusObserver::NewL()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::NewL" ) );
+    LOG_FUNC
 
     CUsbVBusObserver* self = new (ELeave) CUsbVBusObserver();
     CleanupStack::PushL(self);
@@ -70,8 +67,7 @@
 //
 CUsbVBusObserver::~CUsbVBusObserver()
     {
-
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::~CUsbVBusObserver" ) );
+    LOG_FUNC
 
     Cancel();
 
@@ -85,24 +81,19 @@
 // 
 // ---------------------------------------------------------------------------
 //
-CUsbVBusObserver::TState CUsbVBusObserver::VBus() /* not const, because for some reason RProperty::Get is not const! */
+CUsbVBusObserver::TState CUsbVBusObserver::VBus() /* not const, because for some reason RProperty::Get is not const */
     {
 
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::VBus" ) );
-
     TInt val(0);
 
     TInt err = iVBus.Get(val);
 
     if (KErrNone != err)
         {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::VBus CanNotGetVBusProperty" ) );
-        Panic(ECanNotGetVBusProperty);
+        LOG("CanNotGetVBusProperty" )
+        Panic( ECanNotGetVBusProperty);
         }
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbVBusObserver::VBus = %d" ), val ));
-
-    // not found in docs clear definition of this property. Verification is needed   
     return (0 == val ? EVBusDown : EVBusUp);
     }
 
@@ -110,13 +101,19 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbVBusObserver::SubscribeL(MUsbVBusObserver* aObserver)
+void CUsbVBusObserver::SubscribeL(MUsbVBusObserver& aObserver)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::SubscribeL" ) );
+    LOG_FUNC
 
-    User::LeaveIfError(iObservers.Append(aObserver));
-    
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::SubscribeL Observer appended." ) );
+    // check if the same observer already exist in a list
+    if (KErrNotFound != iObservers.Find(&aObserver))
+        {
+        LOG( "Observer already exists" );
+        Panic( EObserverAlreadyExists);
+        return;
+        }
+
+    iObservers.AppendL(&aObserver);
 
     if (KFirst == iObservers.Count()) // first item
         {
@@ -129,39 +126,24 @@
 // 
 // ---------------------------------------------------------------------------
 //
-void CUsbVBusObserver::UnsubscribeL(MUsbVBusObserver* aObserver)
+void CUsbVBusObserver::UnsubscribeL(MUsbVBusObserver& aObserver)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::UnsubscribeL" ) );
-    
-    if (0 == iObservers.Count()) // no items
+    LOG_FUNC
+
+    TInt i(iObservers.Find(&aObserver));
+    if (KErrNotFound == i)
         {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::UnsubscribeL No observers" ) );
+        LOG("Observer not found" );
+        Panic( ECanNotFindVBusObserver);
         return;
         }
-    
-    TInt i(0);
-    while (i < iObservers.Count() && aObserver != iObservers[i])
-        {
-        ++i;
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbVBusObserver::UnsubscribeL i = %d" ), i ));
-        }
 
-    if (aObserver == iObservers[i]) // found
-        {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::UnsubscribeL Removing item" ) );
-        iObservers.Remove(i);
-        }
-    else
-        {
-            FLOG( _L( "[USBOTGWATCHER]\tCUsbVBusObserver::UnsubscribeL CanNotFindVBusObserver" ) );
-        Panic(ECanNotFindVBusObserver);
-        }
-    
+    iObservers.Remove(i);
+
     if (0 == iObservers.Count()) // no observers anymore
         {
         // cancel pending request, if any
         Cancel();
-        return;
         }
     }
 
@@ -171,17 +153,19 @@
 //
 void CUsbVBusObserver::RunL()
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbVBusObserver::RunL iStatus = %d" ), iStatus.Int()));
+    LOG_FUNC
+
+    LOG1( "iStatus = %d" , iStatus.Int());
 
-        // if error occured, tell to Observers
-        if(KErrNone != iStatus.Int()) 
+    // if error occured, tell to Observers
+    if (KErrNone != iStatus.Int())
+        {
+        for (TInt i(0); i < iObservers.Count(); ++i)
             {
-            for (TInt i(0); i < iObservers.Count(); ++i)
-                 {
-                 iObservers[i]->VBusObserverErrorL(iStatus.Int());
-                 }
-            return;
+            iObservers[i]->VBusObserverErrorL(iStatus.Int());
             }
+        return;
+        }
 
     // re-issue request first
     iVBus.Subscribe(iStatus);
@@ -195,7 +179,7 @@
         {
         case EVBusUp:
             {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbVBusObserver::RunL VBus UP"));
+            LOG("VBus UP");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -207,7 +191,7 @@
 
         case EVBusDown:
             {
-                FLOG(_L( "[USBOTGWATCHER]\tCUsbVBusObserver::RunL VBus DOWN"));
+            LOG("VBus DOWN");
 
             for (TInt i(0); i < iObservers.Count(); ++i)
                 {
@@ -219,7 +203,8 @@
 
         default:
             {
-            Panic(EWrongVBusState);
+            LOG("WrongVBusState");
+            Panic( EWrongVBusState);
             }
         }
 
@@ -240,8 +225,9 @@
 //
 TInt CUsbVBusObserver::RunError(TInt aError)
     {
+    LOG_FUNC
 
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbVBusObserver::RunError aError = %d" ), aError));
+    LOG1( "aError = %d" , aError);
 
     // try to continue	
     return KErrNone;
--- a/usbengines/usbotgwatcher/src/cusbwaitnotifier.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbwaitnotifier.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Usb waiting notifier implementation
+ * 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:  Usb waiting notifier implementation
+ *
+ */
 
 #include <e32std.h>
 #include <usbuinotif.h>
@@ -32,9 +31,9 @@
 // -----------------------------------------------------------------------------
 //
 CUsbWaitNotifier* CUsbWaitNotifier::NewL(RNotifier& aNotifier,
-        CUsbNotifManager* aNotifManager, TUint aNotifId)
+        CUsbNotifManager& aNotifManager, TUint aNotifId)
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbWaitNotifier::NewL" ) );
+    LOG_FUNC
 
     CUsbWaitNotifier* self = new (ELeave) CUsbWaitNotifier(aNotifier,
             aNotifManager, aNotifId);
@@ -50,7 +49,7 @@
 //
 CUsbWaitNotifier::~CUsbWaitNotifier()
     {
-        FLOG( _L( "[USBOTGWATCHER]\tCUsbWaitNotifier::~CUsbWaitNotifier" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -58,7 +57,7 @@
 // ---------------------------------------------------------------------------
 //
 CUsbWaitNotifier::CUsbWaitNotifier(RNotifier& aNotifier,
-        CUsbNotifManager* aNotifManager, TUint aNotifId) :
+        CUsbNotifManager& aNotifManager, TUint aNotifId) :
     CUsbNoteNotifier(aNotifier, aNotifManager, KUsbUiNotifOtgError, aNotifId)
     {
     SetFeedbackNeeded();
@@ -70,7 +69,7 @@
 //
 void CUsbWaitNotifier::ConstructL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbWaitNotifier::ConstructL" ) );
+    LOG_FUNC
 
     CUsbNoteNotifier::ConstructL();
     }
--- a/usbengines/usbotgwatcher/src/cusbwarningnotifier.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/cusbwarningnotifier.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,20 +1,19 @@
 /*
-* 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:  Usb warning notifier implementation
+ * 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:  Usb warning notifier implementation
+ *
+ */
 
 #include <e32std.h>
 #include <usbuinotif.h>
@@ -34,9 +33,11 @@
 // -----------------------------------------------------------------------------
 //
 CUsbWarningNotifier* CUsbWarningNotifier::NewL(RNotifier& aNotifier,
-        CUsbNotifManager* aNotifManager, TUint aNotifId)
+        CUsbNotifManager& aNotifManager, TUint aNotifId)
     {
-        FTRACE( FPrint(_L( "[USBOTGWATCHER]\tCUsbWarningNotifier::NewL aNotifId = %d" ), aNotifId));
+    LOG_FUNC
+
+    LOG1( "aNotifId = %d" , aNotifId);
 
     CUsbWarningNotifier* self = new (ELeave) CUsbWarningNotifier(aNotifier,
             aNotifManager, aNotifId);
@@ -52,7 +53,7 @@
 //
 CUsbWarningNotifier::~CUsbWarningNotifier()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbWarningNotifier::~CUsbWarningNotifier" ) );
+    LOG_FUNC
     }
 
 // ---------------------------------------------------------------------------
@@ -60,11 +61,10 @@
 // ---------------------------------------------------------------------------
 //
 CUsbWarningNotifier::CUsbWarningNotifier(RNotifier& aNotifier,
-        CUsbNotifManager* aNotifManager, TUint aNotifId) :
+        CUsbNotifManager& aNotifManager, TUint aNotifId) :
     CUsbNoteNotifier(aNotifier, aNotifManager, KUsbUiNotifOtgWarning,
             aNotifId)
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbWarningNotifier::CUsbWarningNotifier" ) );
     }
 
 // -----------------------------------------------------------------------------
@@ -73,7 +73,7 @@
 //
 void CUsbWarningNotifier::ConstructL()
     {
-    FLOG( _L( "[USBOTGWATCHER]\tCUsbWarningNotifier::ConstructL" ) );
+    LOG_FUNC
 
     CUsbNoteNotifier::ConstructL();
     }
--- a/usbengines/usbotgwatcher/src/panic.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbotgwatcher/src/panic.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,26 +1,25 @@
 /*
-* 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:  Central place for debug-type macros & functions
-*
-*/
-
+ * 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:  Central place for debug-type macros & functions
+ *
+ */
 
 #include "panic.h"
 
 void Panic(TUsbWatcherPanic aCategory)
-{
+    {
 #ifdef _DEBUG
-	User::Panic(KUsbWatcherPanic, aCategory);
+    User::Panic(KUsbWatcherPanic, aCategory);
 #endif
-}
+    }
--- a/usbengines/usbremotepersonality/src/csetpersonality.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbremotepersonality/src/csetpersonality.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -117,7 +117,6 @@
             case KErrNone:
                 {
                 result =CRemotePersonalityHandler::ESuccess;
-                iUsbWatcher->SetPreviousPersonalityOnDisconnect();
                 break;
                 }
             case KErrNotFound:
--- a/usbengines/usbwatcher/group/bld.inf	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/group/bld.inf	Fri Mar 19 09:48:52 2010 +0200
@@ -47,4 +47,8 @@
 
 ../rom/mtp_symbian_temp.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mtp_symbian_temp.iby)
 
+// usbacmconfiguration.hby is included by usbacm.iby to define ACM configuration
+// We use this one to overwrite the os default one
+../rom/usbacmconfiguration.hby CORE_MW_LAYER_IBY_EXPORT_PATH(usbacmconfiguration.hby)
+
 // End of file
--- a/usbengines/usbwatcher/inc/cusbactivepersonalityhandler.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/inc/cusbactivepersonalityhandler.h	Fri Mar 19 09:48:52 2010 +0200
@@ -212,6 +212,11 @@
     TPtrC8 iDummy;
     
     /**
+     * Dummy descriptor buf
+     */
+    TBuf8<1> iDummyBuf;
+    
+    /**
      * Buffer where selected personality is stored by the ask
      * on connection.
      */    
@@ -252,6 +257,11 @@
      */                
     TUsbActivePersonalityState iState;
     
+	/**
+	 * Cleanup process or normal process in various states
+	 */        
+    TBool isFailureCleanup;
+    
     /**
      * Request to be completed.
      */                
@@ -271,6 +281,11 @@
      * The device state.
      */                    
     TUsbDeviceState iDeviceState;
+    
+    /**
+     * Packages for queries
+     */
+    TUSBQueriesNotifierParamsPckg iQueryParams;
     };
 
 #endif   // CUSBACTIVEPERSONALITYHANDLER_H
--- a/usbengines/usbwatcher/inc/cusbwatcher.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/inc/cusbwatcher.h	Fri Mar 19 09:48:52 2010 +0200
@@ -170,7 +170,7 @@
      * @param aPersonalityId Current personality id setting
      * @return KErrNone in case of success
      */
-    inline TInt WritePersonalityId( TInt aPersonalityId );
+    TInt WritePersonalityId( TInt aPersonalityId );
 
     /**
      * This method is called by the CUsbActiveState class when there is
--- a/usbengines/usbwatcher/inc/cusbwatcher.inl	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/inc/cusbwatcher.inl	Fri Mar 19 09:48:52 2010 +0200
@@ -28,14 +28,4 @@
     return iSupportedPersonalities;
     }
 
-// ----------------------------------------------------------------------------
-// Write new personality to central repository.
-// ----------------------------------------------------------------------------
-//
-inline TInt CUsbWatcher::WritePersonalityId( TInt aPersonalityId )
-    {
-    return iPersonalityRepository->Set( KUsbWatcherPersonality,
-            aPersonalityId);
-    }
-
 // End of file
--- a/usbengines/usbwatcher/inc/debug.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/inc/debug.h	Fri Mar 19 09:48:52 2010 +0200
@@ -137,15 +137,16 @@
     };
 #endif // LOG_TO_FILE
 
-#define LEAVE( exp )  {volatile TInt err = exp; \
-            LOG3( "LEAVE(%d) @file: %s, line: %d", err, __FILE__, __LINE__ );\
-            User::Leave( err );}
+#define LEAVE( exp )  {volatile TInt err_ = exp; \
+        LOG3( "LEAVE(%d) @file: %s, line: %d", err_, __FILE__, __LINE__ );\
+        User::Leave( err_ );}
 
-#define LEAVEIFERROR( exp ) {volatile TInt err = exp; if(err < 0) LEAVE(err);}
+#define LEAVEIFERROR( exp ) {volatile TInt err__ = exp; \
+		if(err__ < 0) LEAVE(err__);}
 
-#define PANIC( exp ) {volatile TInt err = exp; \
-            LOG3( "PANIC(%d) @file: %s, line: %d", err, __FILE__, __LINE__ );\
-            User::Panic( KUsbPanicModule, err );}
+#define PANIC( exp ) {volatile TInt err_ = exp; \
+        LOG3( "PANIC(%d) @file: %s, line: %d", err_, __FILE__, __LINE__ );\
+        User::Panic( KUsbPanicModule, err_ );}
 
 
 #define LOG_FUNC TFuncLogger __instrument(TPtrC8((TUint8*)__PRETTY_FUNCTION__));
--- a/usbengines/usbwatcher/rom/mtp_symbian_temp.iby	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/rom/mtp_symbian_temp.iby	Fri Mar 19 09:48:52 2010 +0200
@@ -185,18 +185,6 @@
 #endif // SYMBIAN_EXCLUDE_MTP
 #endif // MTP_TASKDP_IBY
 
-// contactdp
-#ifndef MTP_CONTACTDP_IBY
-#define MTP_CONTACTDP_IBY
-#if !defined(SYMBIAN_EXCLUDE_MTP)
-// MTP Data Provider API
-ECOM_PLUGIN(mtpcontactdp.dll, mtpcontactdp.rsc)
-// MTP plugin registration resource file
-data=EPOCROOT##epoc32\data\Z\resource\mtp\102872bd.rsc  resource\mtp\102872bd.rsc 
-data=EPOCROOT##epoc32\data\Z\resource\apps\mtpcontactviewdefinition.rsc  resource\apps\mtpcontactviewdefinition.rsc 
-#endif // SYMBIAN_EXCLUDE_MTP
-#endif // MTP_CONTACTDP_IBY
-
 // bluetooth
 #ifndef MTP_BT_IBY
 #define MTP_BT_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbengines/usbwatcher/rom/usbacmconfiguration.hby	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 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:
+* Configuration for ACM functions
+*
+*/
+
+#ifndef USBACMCONFIGURATION_HBY
+#define USBACMCONFIGURATION_HBY
+
+#define USBACM_PATCHDATA_KUSBACMNUMBEROFACMFUNCTIONS  2
+
+// USBACM_PATCHDATA_KUSBACMPROTOCOLNUMACM[X] is referring to the Xth ACM *function*
+// which is accessed by the (X-1)th ACM *port*
+
+#define USBACM_PATCHDATA_KUSBACMPROTOCOLNUMACM1  1
+//0x01 - code taken from USBCDC 1.1 Table 17- Hayes compatible modem
+
+#define USBACM_PATCHDATA_KUSBACMPROTOCOLNUMACM2  255
+//0xFF - Vendor-specific
+
+//#define USBACM_PATCHDATA_KUSBACMPROTOCOLNUMACM3  1
+//#define USBACM_PATCHDATA_KUSBACMPROTOCOLNUMACM4  1
+//#define USBACM_PATCHDATA_KUSBACMPROTOCOLNUMACM5  1
+
+// To enable an ACM function, you need to change the 
+// value of USBACM_PATCHDATA_KUSBACMNUMBEROFACMFUNCTIONS,
+// uncomment one define line then replace the protocol number with
+// the ACM protocol number expected.
+//
+
+#endif // USBACMCONFIGURATION_HBY
--- a/usbengines/usbwatcher/src/cusbactivepersonalityhandler.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/src/cusbactivepersonalityhandler.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 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"
@@ -26,6 +26,7 @@
 #include <startupdomainpskeys.h> //for global system state
 #include "cusbactivepersonalityhandler.h"
 #include "cusbglobalsystemstateobserver.h"
+#include <usbuinotif.h>
 
 // CONSTANTS
 // const TInt KSerialNumberLength = 12;
@@ -44,6 +45,7 @@
     : CActive( EPriorityStandard )
     , iUsbMan( aUsbMan )
     , iOwner( aOwner )
+    , isFailureCleanup( EFalse )
     {
     CActiveScheduler::Add( this );
     }
@@ -221,6 +223,7 @@
         LOG( "PersonalityHandler created" );
         iCurrentPersonalityHandler->PreparePersonalityStart( iStatus );
         iState = EUsbPersonalityPrepareStart;
+        isFailureCleanup = EFalse;
         SetActive();
         }
     else
@@ -242,7 +245,8 @@
     iRequestStatus = &aStatus;
 
     iState = EUsbPersonalityPrepareStop;
-
+    isFailureCleanup = EFalse;
+    
     // prepare current personality for stop and return
     if( iCurrentPersonalityHandler )
         {
@@ -284,6 +288,11 @@
                 }
             break;
             }
+		case EUsbDeviceStateUndefined:
+            {
+            iPersonalityNotifier->CancelQuery(KQueriesNotifier);
+            break;
+			}
        default:
             // We do not handle other state here
 			LOG( "DeviceStatechange ignored by ActivePersonalityhandler or EUsbDeviceStateConfigured" );
@@ -302,9 +311,45 @@
 // outstanding request. We must not come here.
 // ----------------------------------------------------------------------------
 //
-TInt CUsbActivePersonalityHandler::RunError( TInt /*aError*/ )
+TInt CUsbActivePersonalityHandler::RunError( TInt aError )
     {
     LOG_FUNC
+    
+    LOG2("Returned error: %d, iState: %d", aError, iState);
+
+    if (KErrNoMemory == aError)
+        {
+        iQueryParams().iQuery = EUSBNotEnoughRam;
+        iPersonalityParams->PersonalityNotifier().ShowQuery(KQueriesNotifier, 
+    	            iQueryParams, iDummyBuf);
+    }
+
+    //only handle error when TryStart fails now
+	//clean up work to be done in the personality
+    if (iState == EUsbPersonalityStartUsb)
+        {
+        iState = EUsbPersonalityPrepareStop;
+		isFailureCleanup = ETrue;
+		
+	    // prepare current personality for stop and return
+	    if( iCurrentPersonalityHandler )
+	        {
+	        LOG( "Call PersonalityPlugin to prepare stop" );
+	        iCurrentPersonalityHandler->PreparePersonalityStop( iStatus );
+	        SetActive();
+	        }
+	    else
+	    	{    
+            LOG( "No current PersonalityPlugin" );
+            }
+
+        //complete StartPersonality with aError
+        User::RequestComplete( iRequestStatus, aError );
+        }
+    else
+        {
+	    LOG( "Ignore error in other states" );
+        }
 
     return KErrNone;
     }
@@ -318,10 +363,8 @@
     LOG_FUNC
 
     TInt ret = iStatus.Int();
-    if( KErrNone != ret )
-        {
-        LOG1( "ERROR: CUsbActivePersonalityHandler::RunL iStatus = %d", ret );
-        }
+    
+    LOG2( "CUsbActivePersonalityHandler::RunL iStatus = %d, iState = %d", ret, iState );
 
     switch( iState )
         {
@@ -340,6 +383,7 @@
             break;
 
         case EUsbPersonalityStartUsb:
+            LEAVEIFERROR( ret );
             LOG( "EUsbPersonalityStartUsb" );
             iState = EUsbPersonalityFinishStart;
             if( iCurrentPersonalityHandler )
@@ -396,8 +440,12 @@
 	            iPersonalityParams->PersonalityNotifier().CancelQuery(
 	                    KCableConnectedNotifierUid );
                 }
-            User::RequestComplete( iRequestStatus, ret );
-
+            //the request should be completed with error code in RunError if failed
+            if ( !isFailureCleanup )
+                {
+                User::RequestComplete( iRequestStatus, ret );
+                }
+            
             iState = EUsbPersonalityIdle;
             break;
 
--- a/usbengines/usbwatcher/src/cusbwatcher.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/src/cusbwatcher.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2006-2010 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"
@@ -251,7 +251,7 @@
                     aStateOld);
                 break;
                 }
-			LOG1( "Starting USB personality in device state: %d", aStateNew );
+            LOG1( "Starting USB personality in device state: %d", aStateNew );
             iPersonalityHandler->StateChangeNotify( aStateOld, aStateNew );
             // Check AskOnConnection setting every time
             if( ( iSupportedPersonalities.Count() > 1 ) &&
@@ -387,11 +387,13 @@
         case EUsbStarting:
             LOG( "Personality started" );
             Notify( ret );
-            iState = EUsbStarted;
             if( iStopStartScenario )
                 {
                 iStopStartScenario = EFalse;
                 }
+            //check if StartPersonality() fails     
+            LEAVEIFERROR( ret );
+            iState = EUsbStarted;
             break;
 
         case EUsbStopping:
@@ -453,10 +455,21 @@
 // This method is not called cause RunL() never leaves.
 // ----------------------------------------------------------------------------
 //
-TInt CUsbWatcher::RunError(TInt /*aError*/)
+TInt CUsbWatcher::RunError(TInt aError)
     {
     LOG_FUNC
-    // Left empty cause this can't happend
+    
+    LOG2("Returned error: %d, iState: %d", aError, iState);
+    if ( iState == EUsbStarting )
+        {
+        RProperty::Set( KPSUidUsbWatcher,
+                KUsbWatcherSelectedPersonality,
+                KUsbWatcherSelectedPersonalityNone );
+        LOG( "personality set to none" );
+
+        iState = EUsbIdle;
+        }
+    
     return KErrNone;
     }
 
@@ -1032,4 +1045,38 @@
     return iOtgWatcher ? iOtgWatcher->IsDeviceA() : EFalse;
     }
 
+// ----------------------------------------------------------------------------
+// Write new personality to central repository.
+// ----------------------------------------------------------------------------
+//
+TInt CUsbWatcher::WritePersonalityId( TInt aPersonalityId )
+    {
+    LOG_FUNC
+    
+    // Save as the default personality only if it is not hidden
+    TUint32 property(0);
+    TInt ret =  iUsbMan.GetPersonalityProperty( aPersonalityId, property );
+    if ( ret == KErrNone )
+        {
+        LOG2( "Personality %d property: 0x%x", aPersonalityId, property );
+        }
+    else
+        {
+        //Not fatal, treat as non-hidden
+        LOG1( "ERROR: GetPersonalityProperty = %d", ret );
+        property = 0;
+        }
+    if ( property & KUsbPersonalityPropertyHidden ) //Bitwise AND
+        {
+        LOG( "Hidden personality not saved to central repository" );
+        ret = KErrNone;
+        }
+    else
+        {
+        ret =  iPersonalityRepository->Set( KUsbWatcherPersonality,
+            aPersonalityId );
+        }
+    return ret;
+    }
+
 // End of file
--- a/usbengines/usbwatcher/src/usbman_pcsmtppam.rss	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbengines/usbwatcher/src/usbman_pcsmtppam.rss	Fri Mar 19 09:48:52 2010 +0200
@@ -104,7 +104,7 @@
         ,
         PERSONALITY
             {
-            bDeviceClass = 0xFF;
+            bDeviceClass = 0x00;
             bDeviceSubClass = 0x00;
             protocol = 0x00;
             numConfigurations = 0x01;
--- a/usbservices_plat/usb_notifier_api/inc/usbuinotif.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbservices_plat/usb_notifier_api/inc/usbuinotif.h	Fri Mar 19 09:48:52 2010 +0200
@@ -63,7 +63,8 @@
     EUSBPossibleDataLossCable,
     EUSBPossibleDataLossMMC,
     EUSBChangeFromMassStorage,
-    EUSBNoMemoryCard
+    EUSBNoMemoryCard,
+    EUSBNotEnoughRam
    };
 
 /**
--- a/usbuis/group/bld.inf	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/group/bld.inf	Fri Mar 19 09:48:52 2010 +0200
@@ -19,5 +19,4 @@
 #include "../usbui/group/bld.inf"
 #include "../usbuinotif/group/bld.inf"
 #include "../imageprintuiprovider/group/bld.inf"
-#include "../imageprintui/group/bld.inf"
-#include "../rndisui/group/bld.inf"
\ No newline at end of file
+#include "../imageprintui/group/bld.inf"
\ No newline at end of file
Binary file usbuis/usbui/help/data/xhtml.zip has changed
--- a/usbuis/usbui/help/inc/usb.hlp.hrh	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbui/help/inc/usb.hlp.hrh	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2010 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"
@@ -25,4 +25,4 @@
 _LIT(KUSB_HLP_MAIN, "USB_HLP_MAIN"); // 
 _LIT(KUSB_HLP_PRINT_SETTINGS, "USB_HLP_PRINT_SETTINGS"); // 
 
-#endif 
+#endif 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/bmarm/usbuiapitestu.def	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/bwins/usbuiapitestu.def	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/conf/ui_usbuiapitest.cfg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Test script config file
+*
+*/
+
+// USBUiApiTest Module - total ... tc
+
+// USBUiApiTest Api Tests (... tc)
+
+//[Test]
+//title Example Api Test
+//create USBUiApiTest tester
+//tester ExecuteApiTestBlock ExampleTestL API option 1 a
+//delete tester
+//[Endtest]
+
+// USB UI tests -  total 14 tc
+/////////////////////
+//Ovi->MS
+[Test]
+title Change USB Connection Ovi Suite to MS Manual/KeyDown
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDownArrow	//MS
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MS
+delete tester
+[Endtest]
+
+[Test]
+title Change USB Connection Ovi Suite to MS Manual/KeyUp
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyUpArrow	//OVI
+pause 500
+presskey global EKeyUpArrow	//MODEM
+pause 500
+presskey global EKeyUpArrow	//MTP
+pause 500
+presskey global EKeyUpArrow	//MS
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MS
+delete tester
+[Endtest]
+/////////////////////////
+//Ovi->MTP
+[Test]
+title Change USB Connection Ovi Suite to MTP Manual/KeyUp
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyUpArrow	//OVI
+pause 500
+presskey global EKeyUpArrow	//MODEM
+pause 500
+presskey global EKeyUpArrow	//MTP
+pause 500
+presskey global EKeyEnter	
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MTP
+delete tester
+[Endtest]
+
+[Test]
+title Change USB Connection Ovi Suite to MTP Manual/KeyDown
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDownArrow	//MS
+pause 500
+presskey global EKeyDownArrow	//MTP
+pause 500
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MTP
+delete tester
+[Endtest]
+/////////////////////////
+//MS->Ovi
+[Test]
+title Change USB Connection MS to Ovi Suite Manual
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MS
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyUpArrow	//OVI
+pause 500
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF PCSUITE
+delete tester
+[Endtest]
+/////////////////////////
+//MS->MTP
+[Test]
+title Change USB Connection MS to MTP Manual
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MS
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDownArrow	//MS
+pause 500
+presskey global EKeyDownArrow	//MTP
+pause 500
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MTP
+delete tester
+[Endtest]
+/////////////////////////
+//MTP->Ovi
+[Test]
+title Change USB Connection MTP to Ovi Suite Manual/KeyDown
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MTP
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF PCSUITE
+delete tester
+[Endtest]
+/////////////////////////
+//MTP->MS
+[Test]
+title Change USB Connection MTP to MS Manual/KeyDown
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MTP
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDownArrow	//MS
+pause 500
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MS
+delete tester
+[Endtest]
+/////////////////////////
+//OVI->MODEM
+[Test]
+title Change USB Connection OVI to Modem Manual/KeyDown
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDownArrow	//MS
+pause 500
+presskey global EKeyDownArrow	//MTP
+pause 500
+presskey global EKeyDownArrow	//MODEM
+pause 500
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MODEM
+delete tester
+[Endtest]
+/////////////////////////
+//MODEM->OVI
+[Test]
+title Change USB Connection Modem to MS Options Menu/KeyUp
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MODEM
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyUpArrow	//OVI
+pause 500
+presskey global EKeyUpArrow	//MODEM
+pause 500
+presskey global EKeyUpArrow	//MTP
+pause 500
+presskey global EKeyUpArrow	//MS
+pause 500
+presskey global EKeyDevice0
+pause 1000
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MS
+delete tester
+[Endtest]
+/////////////////////////
+//Change In Options Menu
+//MS->MTP
+[Test]
+title Change USB Connection MS to MTP Change In Options Menu
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MS
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDownArrow	//MS
+pause 500
+presskey global EKeyDownArrow	//MTP
+pause 500
+presskey global EKeyDevice0
+pause 2000
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MTP
+delete tester
+[Endtest]
+/////////////////////////
+//MTP->Ovi
+[Test]
+title Change USB Connection MTP to Ovi Suite Change In Options Menu
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF MTP
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500
+presskey global EKeyDevice0
+pause 2000
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF PCSUITE
+delete tester
+[Endtest]
+/////////////////////////
+//Ovi->MS
+[Test]
+title Change USB Connection Ovi Suite to MS Change In Options Menu
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI	
+pause 500
+presskey global EKeyDownArrow	//MS	
+pause 500
+presskey global EKeyDevice0
+pause 2000
+presskey global EKeyEnter
+pause 1000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest USB_CONN_MODE OFF MS
+delete tester
+[Endtest]
+/////////////////////////
+//Exit
+[Test]
+title USB Application Exit/Device Key 1 Exit
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDevice1
+pause 2000
+tester ExecuteApiTestBlock FinishTest CANCELLED
+delete tester
+[Endtest]
+/////////////////////////
+//OPTIONS Cancel / EXIT
+[Test]
+title USB Application Cancelled/Options Key 1 Exit
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp  OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDevice0	//OPTIONS
+pause 500
+presskey global EKeyDevice1	//CANCEL OPTIONS
+pause 500
+presskey global EKeyDevice1	//EXIT
+pause 2000
+tester ExecuteApiTestBlock FinishTest CANCELLED
+delete tester
+[Endtest]
+/////////////////////////
+//EXIT WHEN NOT SELECTED
+[Test]
+title USB Application Exit/Options Menu Exit nothing selected
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp  OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDevice0		//OPTIONS/HELP
+pause 500
+presskey global EKeyDownArrow	//EXIT
+pause 500	
+presskey global EKeyDevice0		//SELECT EXIT
+pause 2000
+tester ExecuteApiTestBlock FinishTest CANCELLED
+delete tester
+[Endtest]
+/////////////////////////
+//EXIT WHEN SELECTED
+[Test]
+title USB Application Exit/Options Menu Exit Ovi Suite selected
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp  OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDownArrow	//OVI
+pause 500	
+presskey global EKeyDevice0	//OPTIONS/SELECT
+pause 500
+presskey global EKeyDownArrow	//Help
+pause 500
+presskey global EKeyDownArrow	//EXIT
+pause 500	
+presskey global EKeyDevice0		//SELECT EXIT
+pause 2000
+tester ExecuteApiTestBlock FinishTest CANCELLED
+delete tester
+[Endtest]
+/////////////////////////
+//Help
+[Test]
+title USB Application Help Option Entered/Key 1 Exit
+create USBUiApiTest tester
+tester ExecuteApiTestBlock LaunchUsbUiApp  OFF PCSUITE
+tester ExecuteApiTestBlock TurnLightsOn
+pause 4000
+presskey global EKeyDevice0	//OPTIONS
+pause 500
+presskey global EKeyEnter	//ENTER HELP 
+pause 5000
+presskey global EKeyDevice1	//KEY EXIT HELP
+pause 500
+presskey global EKeyDevice1	//KEY EXIT USB
+pause 2000
+tester ExecuteApiTestBlock FinishTest CANCELLED
+delete tester
+[Endtest]
+
+// Add new api tests here
+// ...
+
+
+// USBUiApiTest Module Tests (... tc)
+
+
+// Add new module tests here
+// ...
+
+
+// USBUiApiTest Branch Tests (... tc)
+
+
+// Add new branch tests here
+// ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/eabi/usbuiapitestu.def	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/group/Bld.inf	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2002 - 2007 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:
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_TESTEXPORTS
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+USBUiApiTest.mmp
+
+PRJ_MMPFILES
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/group/build_sis_ats.bat	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,27 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+rd /S /Q \epoc32\BUILD
+del usbuiapitest.sisx
+call bldmake bldfiles
+call abld reallyclean armv5
+call abld test build armv5
+call makesis usbuiapitest.pkg
+call signsis usbuiapitest.sis usbuiapitest.sisx x:\rd.cer x:\rd-key.pem
+
+del usbuiapitest.sis
+
+call pause
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/group/build_sis_phone.bat	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,27 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+rd /S /Q \epoc32\BUILD
+del usbuiapitest_phone.sisx
+call bldmake bldfiles
+call abld reallyclean armv5
+call abld test build armv5
+call makesis usbuiapitest_phone.pkg
+call signsis usbuiapitest_phone.sis usbuiapitest_phone.sisx x:\rd.cer x:\rd-key.pem
+
+del usbuiapitest_phone.sis
+
+call pause
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/group/usbuiapitest.mmp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2002 - 2007 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:  TYPE TESTSCRIPT
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          usbuiapitest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+
+DEFFILE         usbuiapitest.def
+
+//#define ATS
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	../inc 
+USERINCLUDE	../../../inc
+
+SOURCEPATH      ../src
+SOURCE          usbuiapitest.cpp
+SOURCE          usbuiapitestblocks.cpp
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY		centralrepository.lib
+LIBRARY 	apparc.lib
+LIBRARY 	apgrfx.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/group/usbuiapitest.pkg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,62 @@
+;
+; Copyright (c) 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:  Installation file for STIF
+;
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 5.2
+[0x20022E6D], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"/epoc32/release/armv5/udeb/usbuiapitest.dll"-"c:/Sys/Bin/usbuiapitest.dll"
+
+"../init/usbuiapitest.ini"-"e:/testing/init/usbuiapitest.ini"
+"../conf/ui_usbuiapitest.cfg"-"e:/testing/conf/ui_usbuiapitest.cfg"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/group/usbuiapitest_phone.pkg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,62 @@
+;
+; Copyright (c) 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:  Installation file for STIF
+;
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 5.2
+[0x20022E6D], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"/epoc32/release/armv5/urel/usbuiapitest.dll"-"c:/Sys/Bin/usbuiapitest.dll"
+
+"../init/usbuiapitest_phone.ini"-"c:/testframework/testframework.ini"
+"../conf/ui_usbuiapitest.cfg"-"c:/testframework/ui_usbuiapitest.cfg"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/inc/usbuiapitest.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,259 @@
+/*
+* Copyright (c) 2002 - 2007 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:
+*
+*/
+
+
+
+
+#ifndef USBUIAPITEST_H
+#define USBUIAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+
+#include "coreapplicationuisdomainpskeys.h"
+#include <SettingsInternalCRKeys.h>
+#include <centralrepository.h>
+#include <apgcli.h>
+#include <apacmdln.h>
+#include <UsbWatcherInternalCRKeys.h>
+#include <usbpersonalityids.h>
+
+#include "USBClassChangeUI.h"
+// CONSTANTS
+_LIT( KUsbAppFileName, "usbclasschangeui" );
+
+// MACROS
+//#define ?macro ?macro_def
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+// Logging path
+//_LIT( KUSBUiApiTestLogPath, "\\logs\\testframework\\USBUiApiTest\\" );
+
+// Logging path for ATS - for phone builds comment this line
+_LIT( KUSBUiApiTestLogPath, "e:\\testing\\stiflogs\\" ); 
+
+// Log file
+_LIT( KUSBUiApiTestLogFile, "USBUiApiTest.txt" ); 
+_LIT( KUSBUiApiTestLogFileWithTitle, "USBUiApiTest_[%S].txt" );
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+class CUSBUiApiTest;
+
+// DATA TYPES
+//enum ?declaration
+
+enum TUSBUiApiTestResult
+    {
+    ETestCasePassed,
+    ETestCaseFailed
+    };
+
+enum TUSBAppTestOption
+    {
+    EAppCancelled = 0,
+    EAskOnConnectionSettingChanged,//1
+    EUsbConnectionModeSettingChanged//2
+    };
+
+//typedef ?declaration
+//extern ?data_type;
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS( TUSBUiApiTestBlockParams )
+    {
+    public:
+        TPtrC iTestBlockName;
+        
+        TPtrC iTestOption1;
+        TPtrC iTestOption2;
+        TPtrC iTestOption3;
+        
+        TInt iTestIntOption1;
+        TInt iTestIntOption2;
+        
+        TChar iTestCharOption1;
+        TChar iTestCharOption2;
+    };
+
+/**
+*  CUSBUiApiTest test class for STIF Test Framework TestScripter.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since ?Series60_version
+*/
+NONSHARABLE_CLASS( CUSBUiApiTest ) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CUSBUiApiTest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CUSBUiApiTest();
+
+    public: // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+    protected:  // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    protected:  // Functions from base classes
+
+        /**
+        * From ?base_class ?member_description
+        */
+        //?type ?member_function();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CUSBUiApiTest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // ?classname( const ?classname& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // ?classname& operator=( const ?classname& );
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+
+        /**
+        * Test methods are listed below. 
+        */
+
+        virtual TInt ExecuteApiTestBlock( CStifItemParser& aItem );
+        virtual TInt ExecuteModuleTestBlock( CStifItemParser& aItem );
+        virtual TInt ExecuteBranchTestBlock( CStifItemParser& aItem );
+        
+        /**
+         * Method used to log version of test class
+         */
+        void SendTestClassVersion();
+
+        //ADD NEW METHOD DEC HERE
+        //[TestMethods] - Do not remove
+
+        void GetTestBlockParamsL( CStifItemParser& aItem );
+        
+    	void DoExecuteApiTestBlockL( CStifItemParser& aItem, TUSBUiApiTestResult& aTestResult );    	
+    	void DoExecuteModuleTestBlockL( CStifItemParser& aItem, TUSBUiApiTestResult& aTestResult );    
+    	void DoExecuteBranchTestBlockL( CStifItemParser& aItem, TUSBUiApiTestResult& aTestResult );
+    	
+        void ExampleTestL( TPtrC aTestOption, TPtrC aTestSubOption, 
+                 TInt aTestIntOption, TInt aTestCharOption, TUSBUiApiTestResult& aTestResult );
+
+        virtual TInt LaunchUsbUiApp( TPtrC aTestOption, TPtrC aTestSubOption, TUSBUiApiTestResult& aTestResult );
+        virtual TInt FinishTest( TPtrC aTestOption, TPtrC aTestSubOption, TPtrC aTestSubOption2, TUSBUiApiTestResult& aTestResult );
+        TInt GetTestOption( TPtrC aOptionString, TUSBAppTestOption& aOption );
+        TInt GetAskOnConnectionOptionFromString( TPtrC aOptionString, TInt& aOption );
+        TInt GetUsbPersonalityOptionFromString( TPtrC aOptionString, TInt& aOption );
+        TBool IsUsbAppRunning();
+        TInt GetUsbSettings( TInt& aUsbPersinalityId, TInt& aAskOnConnectionSetting );
+        TInt SetUsbSettings( TInt aUsbPersinalityId, TInt aAskOnConnectionSetting );
+
+        TInt TurnLightsOn( );   
+
+
+
+        inline void Trace(TRefByValue<const TDesC8> aFmt, ...);
+        inline void Trace(TRefByValue<const TDesC16> aFmt, ...);
+	
+    public:     // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+    protected:  // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+    private:    // Data
+        TUSBUiApiTestBlockParams iTestBlockParams;
+        
+        RApaLsSession iApaLsSession;
+        
+        CApaCommandLine *iCommandLine;
+        CRepository *iRepository;
+        
+        TSecureId iUsbAppSecureId;
+        TInt iAskOnConnectionSettingBackup;
+        TInt iUsbPersonalityBackup;
+        TInt iTestAskOnConnectionSetting;
+        TInt iTestUsbPersonality;
+
+    public:     // Friend classes
+        //?friend_class_declaration;
+    protected:  // Friend classes
+        //?friend_class_declaration;
+    private:    // Friend classes
+        //?friend_class_declaration;
+        
+    };
+
+#include "USBUiApiTestDebug.inl"
+
+#endif      // USBUIAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/inc/usbuiapitestdebug.inl	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,73 @@
+/*
+* 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 <e32debug.h>
+
+NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow
+    {
+public:
+    void Overflow(TDes8& /*aDes*/) {}
+    }; 
+
+NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow
+    {
+public:
+    void Overflow(TDes16& /*aDes*/) {}
+    };
+
+
+_LIT8(KStifTestPrefix8, "[STIF_LOG] ");
+_LIT(KStifTestPrefix, "[STIF_LOG] ");
+
+const TInt KMaxLogLineLength = 512;
+
+#define TRACE_INFO(p) { Trace p; }
+
+void CUSBUiApiTest::Trace(TRefByValue<const TDesC8> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list, aFmt);
+	TOverflowTruncate8 overflow;        
+	RBuf8 buf8;
+	buf8.Create( KMaxLogLineLength );
+	buf8.Append( KStifTestPrefix8 );
+	buf8.AppendFormatList(aFmt, list, &overflow);
+			
+	RBuf16 buf16;
+	buf16.Create( KMaxLogLineLength );
+	buf16.Copy(buf8);    
+	TRefByValue<const TDesC> tmpFmt(_L("%S"));
+	RDebug::Print(tmpFmt, &buf16);
+	iLog->Log(tmpFmt, &buf16);
+	buf8.Close();         
+	buf16.Close();
+	};
+
+void CUSBUiApiTest::Trace(TRefByValue<const TDesC16> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	RBuf16 theFinalString;
+	theFinalString.Create( KMaxLogLineLength );
+	theFinalString.Append( KStifTestPrefix );
+	TOverflowTruncate16 overflow;
+	theFinalString.AppendFormatList(aFmt,list,&overflow);
+	RDebug::Print(theFinalString);
+	iLog->Log(theFinalString);
+	theFinalString.Close(); 
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/init/usbuiapitest.ini	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,235 @@
+#
+# 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:  
+#
+#
+
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#   + XML, Test report will be xml type, for example 'TestReport.xml'.
+#          Note, that xml format is available only when output is set to FILE.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                                                     'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= e:\testing\logs\
+TestReportFileName= USBUiApiTest_TestReport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= USBUiApiTestUSBUiApiTestUSBUiApiTest
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= e:\testing\conf\ui_USBUiApiTest.cfg
+[End_Module]
+
+
+# Load testmoduleUSBUiApiTest, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleUSBUiApiTest used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleUSBUiApiTest used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES    # Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set filters to be used by ConsoleUI.
+# 	If you want to use filter with ConsoleUI, simply remove comments
+# 	from section below and provide valid filter entries.
+#   Each filter line has to start with "filter= " keyword.
+#   Filter can contain special wildcard characters:
+#     *  which stands for none or any literal;
+#     ?  which stands for single character.
+#   Filters are not case-sensitive.
+
+#[Filters]
+#filter= *math*
+#filter= *radio*
+#[End_Filters]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/init/usbuiapitest_phone.ini	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,235 @@
+#
+# 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:  
+#
+#
+
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#   + XML, Test report will be xml type, for example 'TestReport.xml'.
+#          Note, that xml format is available only when output is set to FILE.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                                                     'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= c:\logs\testframework\USBUiApiTest\
+TestReportFileName= testreport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= USBUiApiTestUSBUiApiTestUSBUiApiTest
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\ui_USBUiApiTest.cfg
+[End_Module]
+
+
+# Load testmoduleUSBUiApiTest, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleUSBUiApiTest used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleUSBUiApiTest used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES    # Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set filters to be used by ConsoleUI.
+# 	If you want to use filter with ConsoleUI, simply remove comments
+# 	from section below and provide valid filter entries.
+#   Each filter line has to start with "filter= " keyword.
+#   Filter can contain special wildcard characters:
+#     *  which stands for none or any literal;
+#     ?  which stands for single character.
+#   Filters are not case-sensitive.
+
+#[Filters]
+#filter= *math*
+#filter= *radio*
+#[End_Filters]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/src/usbuiapitest.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2002 - 2007 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 FILES
+#include <Stiftestinterface.h>
+#include "USBUiApiTest.h"
+#include <SettingServerClient.h>
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::CUSBUiApiTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CUSBUiApiTest::CUSBUiApiTest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUSBUiApiTest::ConstructL()
+    {
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+    TInt ret = settingServer.Connect();
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        } 
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if(loggerSettings.iAddTestCaseTitle)
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KUSBUiApiTestLogFileWithTitle, &title);
+        }
+    else
+        {
+        logFileName.Copy(KUSBUiApiTestLogFile);
+        }
+
+    iLog = CStifLogger::NewL( KUSBUiApiTestLogPath, 
+                          logFileName,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          EFalse );
+    
+    SendTestClassVersion();
+
+    iCommandLine = CApaCommandLine::NewL();
+    iUsbAppSecureId = TSecureId( KUidUSBClassChangeUI );
+    iRepository = CRepository::NewL( KCRUidUsbWatcher );
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CUSBUiApiTest* CUSBUiApiTest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CUSBUiApiTest* self = new (ELeave) CUSBUiApiTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CUSBUiApiTest::~CUSBUiApiTest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iLog; 
+
+    }
+
+//-----------------------------------------------------------------------------
+// CUSBUiApiTest::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CUSBUiApiTest::SendTestClassVersion()
+	{
+	TVersion moduleVersion;
+	moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+	moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+	moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+	
+	TFileName moduleName;
+	moduleName = _L("USBUiApiTest.dll");
+
+	TBool newVersionOfMethod = ETrue;
+	TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
+	}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CUSBUiApiTest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbui/tsrc/usbuiapitest/src/usbuiapitestblocks.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,701 @@
+/*
+* Copyright (c) 2002 - 2007 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 FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "USBUiApiTest.h"
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CUSBUiApiTest::Delete() 
+    {
+    iApaLsSession.Close();
+    delete iCommandLine;
+    iCommandLine = NULL;
+    delete iRepository;
+    iRepository = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CUSBUiApiTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+	    ENTRY( "ExecuteApiTestBlock", CUSBUiApiTest::ExecuteApiTestBlock ),
+        ENTRY( "ExecuteModuleTestBlock", CUSBUiApiTest::ExecuteModuleTestBlock ),
+        ENTRY( "ExecuteBranchTestBlock", CUSBUiApiTest::ExecuteBranchTestBlock ),
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::GetTestBlockParamsL
+// -----------------------------------------------------------------------------
+
+void CUSBUiApiTest::GetTestBlockParamsL( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>> GetTestBlockParamsL") );
+    
+    // Add new test block branches below, get all required test parameters    
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {       
+        User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) );        
+        User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );
+        User::LeaveIfError( aItem.GetNextInt( iTestBlockParams.iTestIntOption1 ) );        
+        User::LeaveIfError( aItem.GetNextChar( iTestBlockParams.iTestCharOption1 ) );        
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "LaunchUsbUiApp" ) ) )
+        {       
+        User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) );        
+        User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );      
+        }
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "TurnLightsOn" ) ) )
+		{         
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FinishTest" ) ) )
+		{       
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) ); 
+		if( iTestBlockParams.iTestOption1.Compare(_L("CANCELLED")) == KErrNotFound )
+			{
+			User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );        
+			User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption3 ) );
+			}
+		}
+    else
+        {
+        TRACE_INFO( _L("GetTestBlockParamsL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+    TRACE_INFO( _L("<<< GetTestBlockParamsL") );
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::ExecuteApiTestBlock
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::ExecuteApiTestBlock( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>> ExecuteApiTestBlock") );
+	
+	TInt res;
+    TUSBUiApiTestResult testResult;
+	
+    TRAP( res, DoExecuteApiTestBlockL( aItem, testResult ) );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("DoExecuteApiTestBlockL error: %d"), res) );
+        return res;
+        }
+    
+    STIF_ASSERT_EQUALS( ETestCasePassed, testResult );
+    TRACE_INFO( _L("Test case passed") );
+    TRACE_INFO( _L("<<< ExecuteApiTestBlock") );
+	
+    return KErrNone;
+    }
+	
+	
+void CUSBUiApiTest::DoExecuteApiTestBlockL( CStifItemParser& aItem, TUSBUiApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>DoExecuteApiTestBlockL") );
+
+	User::LeaveIfError( aItem.GetString( _L( "ExecuteApiTestBlock" ), iTestBlockParams.iTestBlockName ) );
+        TRACE_INFO( (_L("Api test type: %S"), &iTestBlockParams.iTestBlockName) );
+	
+	GetTestBlockParamsL( aItem );
+	
+	// Add new API test block branches with optional test parameters here	
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {      
+        ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, 
+                iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "LaunchUsbUiApp" ) ) )
+        {      
+        LaunchUsbUiApp( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FinishTest" ) ) )
+        {      
+        FinishTest( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, iTestBlockParams.iTestOption3, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "TurnLightsOn" ) ) )
+        {      
+        TurnLightsOn(  );
+        }
+    else
+        {
+    TRACE_INFO( _L("DoExecuteApiTestBlockL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+	
+    TRACE_INFO( _L("<<<DoExecuteApiTestBlockL") );
+    }
+	
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::ExecuteModuleTestBlock
+// -----------------------------------------------------------------------------	
+
+TInt CUSBUiApiTest::ExecuteModuleTestBlock( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>>ExecuteModuleTestBlock") );
+	
+    TInt res;
+    TUSBUiApiTestResult testResult;
+    
+    TRAP( res, DoExecuteModuleTestBlockL( aItem, testResult ) );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("DoExecuteModuleTestBlockL error: %d"), res) );
+        return res;
+        }
+    
+    STIF_ASSERT_EQUALS( ETestCasePassed, testResult );
+    TRACE_INFO( _L("Test case passed") );
+    TRACE_INFO( _L("<<<ExecuteModuleTestBlock") );
+    return KErrNone;
+    }	
+	
+	
+void CUSBUiApiTest::DoExecuteModuleTestBlockL( CStifItemParser& aItem, TUSBUiApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>DoExecuteModuleTestBlockL") );
+	
+    User::LeaveIfError( aItem.GetString( _L( "ExecuteModuleTestBlock" ), iTestBlockParams.iTestBlockName ) );
+    TRACE_INFO( (_L("Module test type: %S"), &iTestBlockParams.iTestBlockName) );
+    
+    GetTestBlockParamsL( aItem );
+    
+    // Add new module test block branches with optional test parameters here   
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {      
+        ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, 
+                iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult );
+        }
+    else
+        {
+    TRACE_INFO( _L("DoExecuteModuleTestBlockL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+    
+    TRACE_INFO( _L("<<<DoExecuteModuleTestBlockL") );
+    }
+	
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::ExecuteBranchTestBlock
+// -----------------------------------------------------------------------------
+	
+TInt CUSBUiApiTest::ExecuteBranchTestBlock( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>>ExecuteBranchTestBlock") );
+	
+    TInt res;
+    TUSBUiApiTestResult testResult;
+    
+    TRAP( res, DoExecuteBranchTestBlockL( aItem, testResult ) );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("DoExecuteBranchTestBlockL error: %d"), res) );
+        return res;
+        }   
+    
+    STIF_ASSERT_EQUALS( ETestCasePassed, testResult );
+    TRACE_INFO( _L("Test case passed") );
+    TRACE_INFO( _L("<<<ExecuteBranchTestBlock") );
+    return KErrNone;
+    }
+
+	
+void CUSBUiApiTest::DoExecuteBranchTestBlockL( CStifItemParser& aItem, TUSBUiApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>DoExecuteBranchTestBlockL") );
+	
+    User::LeaveIfError( aItem.GetString( _L( "ExecuteBranchTestBlock" ), iTestBlockParams.iTestBlockName ) );
+    TRACE_INFO( (_L("Branch test type: %S"), &iTestBlockParams.iTestBlockName) );
+    
+    GetTestBlockParamsL( aItem );
+    
+    // Add new branch test block branches with optional test parameters here   
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {      
+        ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, 
+                iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult );
+        }
+    else
+        {
+    TRACE_INFO( _L("DoExecuteBranchTestBlockL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+    
+    TRACE_INFO( _L("<<<DoExecuteBranchTestBlockL") );
+    }
+
+// Add test block methods implementation here
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::ExampleTestL
+// -----------------------------------------------------------------------------
+
+void CUSBUiApiTest::ExampleTestL( TPtrC aTestOption, TPtrC aTestSubOption, 
+        TInt aTestIntOption, TInt aTestCharOption, TUSBUiApiTestResult& aTestResult )
+    {
+    
+    if ( !aTestOption.Compare( _L( "API" ) ) )
+        {
+    TRACE_INFO( (_L("Api test option: %S"), &aTestOption) );
+    TRACE_INFO( (_L("Api test sub-option: %S"), &aTestSubOption) );
+    TRACE_INFO( (_L("Api test int option: %d"), aTestIntOption) );
+    TRACE_INFO( (_L("Api test char option: %c"), aTestCharOption) );
+        }
+    else if ( !aTestOption.Compare( _L( "MODULE" ) ) )
+        {
+    TRACE_INFO( (_L("Module test option: %S"), &aTestOption) );
+    TRACE_INFO( (_L("Module test sub-option: %S"), &aTestSubOption) );
+    TRACE_INFO( (_L("Module test int option: %d"), aTestIntOption) );
+    TRACE_INFO( (_L("Module test char option: %c"), aTestCharOption) );
+        }
+    else if ( !aTestOption.Compare( _L( "BRANCH" ) ) )
+        {
+    TRACE_INFO( (_L("Branch test option: %S"), &aTestOption) );
+    TRACE_INFO( (_L("Branch test sub-option: %S"), &aTestSubOption) );
+    TRACE_INFO( (_L("Branch test int option: %d"), aTestIntOption) );
+    TRACE_INFO( (_L("Branch test char option: %c"), aTestCharOption) );
+        }
+    else
+        {
+        TRACE_INFO( _L("Invalid test parameter") );
+        User::Leave( KErrNotFound );
+        }
+    
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO( _L("<<<ExampleTestL") );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::LaunchUsbUiApp
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::LaunchUsbUiApp( TPtrC aTestOption, TPtrC aTestSubOption, TUSBUiApiTestResult& aTestResult )
+    {
+    TInt res;
+    TInt testAskOnConnectionSetting;
+    TInt testUsbPersonalityId;
+        
+    res = GetAskOnConnectionOptionFromString( aTestOption, testAskOnConnectionSetting );   
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("GetAskOnConnectionOptionFromString failed with value: %d"), res) );
+        iApaLsSession.Close();
+        return res;
+        }
+    TRACE_INFO( (_L("GetAskOnConnectionOptionFromString OK:  %d"), testAskOnConnectionSetting) );
+    
+    
+    res = GetUsbPersonalityOptionFromString( aTestSubOption, testUsbPersonalityId );   
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("GetUsbPersonalityOptionFromString failed with value: %d"), res) );
+        iApaLsSession.Close();
+        return res;
+        }
+    TRACE_INFO( (_L("GetUsbPersonalityOptionFromString OK: %d"),testUsbPersonalityId) );
+    
+    res = GetUsbSettings( iUsbPersonalityBackup, iAskOnConnectionSettingBackup );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("Failed to backup usb settings with value: %d"), res) );
+        return res;
+        }
+    TRACE_INFO( (_L("GetUsbSettings OK: %d, %d"), iUsbPersonalityBackup, iAskOnConnectionSettingBackup) );
+    
+    res = SetUsbSettings( testUsbPersonalityId, testAskOnConnectionSetting );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("Changing usb settings failed with value (cenrep): %d"), res) );
+        return res;
+        }
+    TRACE_INFO( (_L("SetUsbSettings OK: %d, %d"), testUsbPersonalityId, testAskOnConnectionSetting) );
+  
+    iCommandLine->SetCommandL( EApaCommandRun );
+    iCommandLine->SetExecutableNameL( KUsbAppFileName );
+
+    res = iApaLsSession.Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("Connecting to application server failed with value: %d"), res) );
+        return res;
+
+        }
+    STIF_LOG("iApaLsSession.Connect OK");
+
+    res = iApaLsSession.StartApp( *iCommandLine );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("Starting application failed with value: %d"), res) );
+        iApaLsSession.Close();
+        return res;
+        }
+    STIF_LOG("iApaLsSession.StartApp OK");
+    
+    if ( !IsUsbAppRunning() )
+        {
+        TRACE_INFO( _L("Usb application launch error") );
+        iApaLsSession.Close();
+        return KErrGeneral;
+        }
+    STIF_LOG("IsUsbAppRunning OK");
+
+    TRACE_INFO( _L("Usb application started") );
+
+    aTestResult = ETestCasePassed;
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::FinishTest
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::FinishTest( TPtrC aTestOption, TPtrC aTestSubOption, TPtrC aTestSubOption2, TUSBUiApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>FinishTest") );
+    
+    TInt res;
+    TUSBAppTestOption option;
+    TBool isAppRunning;
+    TInt actualAskOnConnectionSetting;
+    TInt expectedAskOnConnectionSetting;
+    TInt actualPersonalityIdSetting;
+    TInt expectedPersonalityIdSetting;
+        
+    res = GetTestOption( aTestOption, option );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("GetTestOption failed with value: %d"), res) );
+        iApaLsSession.Close();
+        return res;
+        }
+    TRACE_INFO( (_L("GetTestOption OK: %d"),option) );
+    
+    if ( option == EAskOnConnectionSettingChanged || option == EUsbConnectionModeSettingChanged )
+        {     
+        res = GetAskOnConnectionOptionFromString( aTestSubOption, expectedAskOnConnectionSetting );   
+        if ( res != KErrNone )
+            {
+            TRACE_INFO( (_L("GetAskOnConnectionOptionFromString failed with value: %d"), res) );
+            iApaLsSession.Close();
+            return res;
+            }
+        TRACE_INFO( (_L("GetAskOnConnectionOptionFromString OK: %d"), expectedAskOnConnectionSetting) );
+                
+        res = GetUsbPersonalityOptionFromString( aTestSubOption2, expectedPersonalityIdSetting );   
+        if ( res != KErrNone )
+            {
+            TRACE_INFO( (_L("GetUsbPersonalityOptionFromString failed with value: %d"), res) );
+            iApaLsSession.Close();
+            return res;
+            }
+        TRACE_INFO( (_L("GetUsbPersonalityOptionFromString OK %d"), expectedPersonalityIdSetting) );
+        }
+    
+    isAppRunning = IsUsbAppRunning();
+
+    res = GetUsbSettings( actualPersonalityIdSetting, actualAskOnConnectionSetting );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("Getting usb settings failed with value (cenrep): %d"), res) );
+        iApaLsSession.Close();
+        return res;
+        }
+    TRACE_INFO( (_L("GetUsbSettings OK: %d, %d"), actualPersonalityIdSetting, actualAskOnConnectionSetting) );
+    
+    res = SetUsbSettings( iUsbPersonalityBackup, iAskOnConnectionSettingBackup );
+    if ( res != KErrNone )
+        TRACE_INFO( _L("Failed to restore original usb settings!") );
+    TRACE_INFO( (_L("SetUsbSettings OK: %d, %d"), iUsbPersonalityBackup, iAskOnConnectionSettingBackup) );
+    
+    iApaLsSession.Close();
+    
+    switch( option )
+        {
+        case EAskOnConnectionSettingChanged:       
+        case EUsbConnectionModeSettingChanged:
+            TRACE_INFO( (_L("Actual USB ask on connection setting value: %d, expected: %d"), actualAskOnConnectionSetting, expectedAskOnConnectionSetting) );
+            STIF_ASSERT_EQUALS( expectedAskOnConnectionSetting, actualAskOnConnectionSetting );
+            TRACE_INFO( (_L("Actual USB personality setting value: %d, expected: %d"), actualPersonalityIdSetting, expectedPersonalityIdSetting) );
+            STIF_ASSERT_EQUALS( expectedPersonalityIdSetting, actualPersonalityIdSetting );   
+            TRACE_INFO( (_L("USB app is running: %d, expected: %d"), isAppRunning, EFalse) );
+            STIF_ASSERT_FALSE( isAppRunning );
+            break;
+        case EAppCancelled:
+            TRACE_INFO( (_L("USB app is running: %d, expected: %d"), isAppRunning, EFalse) );
+            STIF_ASSERT_FALSE( isAppRunning );
+            break;
+        default:
+            return KErrNotFound;
+        }
+      
+    TRACE_INFO( _L("Test case passed!") );
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO( _L("<<<FinishTest") );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::GetTestOption
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::GetTestOption( TPtrC aOptionString, TUSBAppTestOption& aOption )
+    {    
+    if ( !aOptionString.Compare( _L( "USB_CONN_MODE" ) ) )
+        {
+        aOption = EUsbConnectionModeSettingChanged;
+        TRACE_INFO( _L("Test type: EUsbConnectionModeSettingChanged") );
+        }
+    else if ( !aOptionString.Compare( _L( "ASK_ON_CONN" ) ) )
+        {
+        aOption = EAskOnConnectionSettingChanged;
+        TRACE_INFO( _L("Test type: EAskOnConnectionSettingChanged") );
+        }
+    else if ( !aOptionString.Compare( _L( "CANCELLED" ) ) )
+        {
+        aOption = EAppCancelled;
+        TRACE_INFO( _L("Test type: EAppCancelled") );
+        }
+    else
+        {
+        TRACE_INFO( _L("Test type: not supported") );
+        return KErrNotFound;
+        }
+ 
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::GetAskOnConnectionOptionFromString
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::GetAskOnConnectionOptionFromString( TPtrC aOptionString, TInt& aOption )
+    {    
+    if ( !aOptionString.Compare( _L( "ON" ) ) )
+        {
+        aOption = KUsbWatcherChangeOnConnectionOn;
+        TRACE_INFO( _L("Ask on connection option: ON") );
+        }
+    else if ( !aOptionString.Compare( _L( "OFF" ) ) )
+        {
+        aOption = KUsbWatcherChangeOnConnectionOff;
+        TRACE_INFO( _L("Ask on connection option: OFF") );
+        }
+    else
+        {
+        TRACE_INFO( _L("Ask on connection option: not supported") );
+        return KErrNotFound;
+        }
+ 
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::GetUsbPersonalityOptionFromString
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::GetUsbPersonalityOptionFromString( TPtrC aOptionString, TInt& aOption )
+    {    
+    if ( !aOptionString.Compare( _L( "PCSUITE" ) ) )
+        {
+        aOption = KUsbPersonalityIdPCSuiteMTP;
+        TRACE_INFO( _L("Usb personality option: KUsbPersonalityIdPCSuiteMTP") );
+        }
+    else if ( !aOptionString.Compare( _L( "MS" ) ) )
+        {
+        aOption = KUsbPersonalityIdMS;
+        TRACE_INFO( _L("Usb personality option: KUsbPersonalityIdMS") );
+        }
+    else if ( !aOptionString.Compare( _L( "PTP" ) ) )
+        {
+        aOption = KUsbPersonalityIdPTP;
+        TRACE_INFO( _L("Usb personality option: KUsbPersonalityIdPTP") );
+        }
+    else if ( !aOptionString.Compare( _L( "MTP" ) ) )
+        {
+        aOption = KUsbPersonalityIdMTP;
+        TRACE_INFO( _L("Usb personality option: KUsbPersonalityIdMTP") );
+        }
+	else if ( !aOptionString.Compare( _L( "MODEM" ) ) )
+		{
+		aOption = KUsbPersonalityIdModemInst;
+		TRACE_INFO( _L("Usb personality option: KUsbPersonalityIdModemInst") );
+		}
+    else
+        {
+        TRACE_INFO( _L("Usb personality option: not supported") );
+        return KErrNotFound;
+        }
+ 
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::IsUsbAppRunning
+// -----------------------------------------------------------------------------
+
+TBool CUSBUiApiTest::IsUsbAppRunning()
+    {
+    TFindProcess processFinder;
+    TFullName processName;
+    TBool isAppRunning = EFalse;
+    RProcess matchedProcess;
+    
+    while ( processFinder.Next( processName ) == KErrNone )
+            {
+            matchedProcess.Open( processFinder );
+            if ( matchedProcess.SecureId() == iUsbAppSecureId )
+                isAppRunning = ETrue;
+            }
+    
+    matchedProcess.Close();    
+    return isAppRunning;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::GetUsbSettings
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::GetUsbSettings( TInt& aUsbPersonalityId, TInt& aAskOnConnectionSetting )
+    {
+    TInt res;   
+    res = iRepository -> Get( KUsbWatcherChangeOnConnectionSetting, aAskOnConnectionSetting );
+    if ( res != KErrNone )
+        return res;
+    
+    res = iRepository -> Get( KUsbWatcherPersonality, aUsbPersonalityId );
+    if ( res != KErrNone )
+        return res;
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::SetUsbSettings
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::SetUsbSettings( TInt aUsbPersonalityId, TInt aAskOnConnectionSetting )
+    {
+    TInt res;   
+    res = iRepository -> Set( KUsbWatcherChangeOnConnectionSetting, aAskOnConnectionSetting );
+    if ( res != KErrNone )
+        return res;
+    
+    res = iRepository -> Set( KUsbWatcherPersonality, aUsbPersonalityId );
+    if ( res != KErrNone )
+        return res;
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUSBUiApiTest::TurnLightsOn
+// -----------------------------------------------------------------------------
+
+TInt CUSBUiApiTest::TurnLightsOn(  )
+    {
+    TInt res;
+    res = RProperty::Set(KPSUidCoreApplicationUIs, KLightsControl, ELightsOn);
+    res = RProperty::Set(KPSUidCoreApplicationUIs, KLightsVTForcedLightsOn, EForcedLightsOn);
+    return res;
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove
--- a/usbuis/usbuinotif/BWINS/usbuinotifu.def	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	?NotifierArray@@YAPAV?$CArrayPtr@VMEikSrvNotifierBase2@@@@XZ @ 1 NONAME ; class CArrayPtr<class MEikSrvNotifierBase2> * NotifierArray(void)
-
--- a/usbuis/usbuinotif/EABI/usbuinotifu.def	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	_Z13NotifierArrayv @ 1 NONAME
-
--- a/usbuis/usbuinotif/data/usbuinotif.rss	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/data/usbuinotif.rss	Fri Mar 19 09:48:52 2010 +0200
@@ -244,8 +244,8 @@
 RESOURCE TBUF r_usb_otg_error_unrecoverable { 
     buf = qtn_usb_otg_error_unrecoverable; }
 
-RESOURCE TBUF r_usb_otg_warning_partial_supported { 
-    buf = qtn_usb_otg_warning_partial_supported; }
+RESOURCE TBUF r_usb_otg_warning_partial_support { 
+    buf = qtn_usb_otg_warning_partial_support; }
 
 RESOURCE TBUF r_usb_no_memory_card {
     buf = qtn_usb_mode_query_no_memory_card; }
@@ -262,4 +262,7 @@
 RESOURCE TBUF r_usb_msmm_error_out_of_memory { 
     buf = qtn_memlo_not_enough_memory; }
 
+RESOURCE TBUF r_usb_error_memory_not_enough { 
+    buf = qtn_usb_error_memory_not_enough; }
+	
 // End of File
--- a/usbuis/usbuinotif/group/bld.inf	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/group/bld.inf	Fri Mar 19 09:48:52 2010 +0200
@@ -28,7 +28,6 @@
 
 PRJ_MMPFILES
 usbuinotif.mmp
-usbavkonnotif.mmp
 
 PRJ_TESTMMPFILES
 
--- a/usbuis/usbuinotif/group/usbavkonnotif.mmp	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * 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:  Project definition file for project USBUINotif.
- *
- */
-
-#include <platform_paths.hrh>
-#include <data_caging_paths.hrh>  //this is needed for RESOURCE_FILES_DIR
-
-TARGET          usbavkonnotif.dll
-TARGETTYPE      dll
-UID             0x101fdfae  0x102068DD  
-TARGETPATH      SHARED_LIB_DIR
-
-CAPABILITY	CAP_GENERAL_DLL
-VENDORID	VID_DEFAULT
-
-SOURCEPATH      ../src
-
-SOURCE          usbuincableconnectednotifier.cpp usbavkonmain.cpp
-SOURCE	        usbnotifier.cpp
-
-USERINCLUDE     ../inc
-
-SYSTEMINCLUDE         ../../inc ../../../inc MW_LAYER_PLATFORM_EXPORT_PATH(SecondaryDisplay/)    //for internal and private API headers
-
-MW_LAYER_SYSTEMINCLUDE
-LIBRARY ECOM.LIB                            // Symbian E-Com Plugin definitions and types
-LIBRARY euser.lib cone.lib                  // Symbian OS frameworklibraries
-LIBRARY avkon.lib                           // UI library
-LIBRARY bafl.lib                            // Basic Application Framework
-LIBRARY commonengine.lib                    // Series 60 common components
-LIBRARY eikcoctl.lib eiksrv.lib             // Eikon libraries
-LIBRARY eikdlg.lib                          // Eikon dialogs
-LIBRARY estor.lib                           // for Cover Display UI support
-LIBRARY FeatMgr.lib                         // for fetching if Cover Display is supported
-LIBRARY centralrepository.lib               // Central Repository
-LIBRARY aknmemorycardui.lib                 // for unlocking the MMC
-LIBRARY efsrv.lib                           // File server
-LIBRARY eikcore.lib                         // for icons
-LIBRARY aknskins.lib 
-LIBRARY aknskinsrv.lib
-LIBRARY aknicon.lib
-LIBRARY egul.lib
-LIBRARY usbman.lib                          // for personality IDs and descriptions
-LIBRARY aknnotifierwrapper.lib              // Avkon's notifier wrapper
-LIBRARY         apparc.lib 
-LIBRARY akncapserverclient.lib              // for suppressing the application key
-
-DEBUGLIBRARY flogger.lib                    // File logging services
--- a/usbuis/usbuinotif/group/usbuinotif.mmp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/group/usbuinotif.mmp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 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"
@@ -29,14 +29,11 @@
 SOURCEPATH      ../src
 SOURCE          usbuinmain.cpp
 SOURCE	        usbnotifier.cpp
+SOURCE          usbuincableconnectednotifier.cpp
 SOURCE          usbuinqueriesnotifiermdrv.cpp
 SOURCE          usbuinotifotgwarning.cpp
 SOURCE          usbuinotifotgerror.cpp 
 SOURCE          usbuinotifmsmmerror.cpp
-SOURCE          usbuinotifdialerwatcher.cpp
-
-
-
 // ECom resource file
 START RESOURCE ../data/102068DC.rss
 TARGET  usbuinotif.rsc 
@@ -51,8 +48,9 @@
 
 USERINCLUDE     ../inc
 
-SYSTEMINCLUDE         ../../inc ../../../inc MW_LAYER_PLATFORM_EXPORT_PATH(SecondaryDisplay/)    //for internal and private API headers
-SYSTEMINCLUDE   /epoc32/include/ecom
+SYSTEMINCLUDE         ../../inc ../../../inc MW_LAYER_PLATFORM_EXPORT_PATH(secondarydisplay/)    //for internal and private API headers
+SYSTEMINCLUDE   /EPOC32/INCLUDE/ECOM
+SYSTEMINCLUDE   /epoc32/include/mw/hb/hbcore 
 MW_LAYER_SYSTEMINCLUDE
 
 
@@ -67,7 +65,6 @@
 LIBRARY estor.lib                           // for Cover Display UI support
 LIBRARY FeatMgr.lib                         // for fetching if Cover Display is supported
 LIBRARY centralrepository.lib               // Central Repository
-LIBRARY aknmemorycardui.lib                 // for unlocking the MMC
 LIBRARY efsrv.lib                           // File server
 LIBRARY eikcore.lib                         // for icons
 LIBRARY aknskins.lib 
@@ -78,8 +75,7 @@
 LIBRARY aknnotifierwrapper.lib              // Avkon's notifier wrapper
 LIBRARY         apparc.lib 
 LIBRARY akncapserverclient.lib              // for suppressing the application key
-LIBRARY viewcli.lib 
-LIBRARY featmgr.lib
+LIBRARY hbcore.lib
 
 DEBUGLIBRARY flogger.lib                    // File logging services
 
--- a/usbuis/usbuinotif/inc/usbuincableconnectednotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/inc/usbuincableconnectednotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -20,8 +20,8 @@
 
 // INCLUDES
 
-#include <aknlistquerydialog.h> 
-#include <AknQueryDialog.h>
+#include <hbsymbiandevicedialog.h>
+#include <hbsymbianvariant.h>
 
 #include "usbnotifier.h" // Base class
 // CLASS DECLARATION
@@ -31,8 +31,8 @@
  *
  *  @lib
  */
-NONSHARABLE_CLASS(CUSBUICableConnectedNotifier) : public CUSBUINotifierBase,
-       public MEikCommandObserver
+NONSHARABLE_CLASS(CUSBUICableConnectedNotifier) : public CUSBUINotifierBase, 
+    public MHbDeviceDialogObserver
     {
 public:
     // Constructors and destructor
@@ -84,10 +84,22 @@
     void GetParamsL(const TDesC8& aBuffer, TInt aReplySlot,
             const RMessagePtr2& aMessage);
  
+       
+private:
+    // functions from MHbDeviceDialogObserver
+   
     /**
-     * Handles the command on USB connected note
-     */
-    void ProcessCommandL(TInt aCommandId);
+    * lunches the QT usb ui setting
+    * @param aData is a CHbSymbianVariantMap daya which contains the keys
+    */ 
+    void DataReceived(CHbSymbianVariantMap& aData);
+    /*
+     * Virtual function from MHbDeviceDialogObserver
+     * Not implemented
+     */     
+    void DeviceDialogClosed(TInt aCompletionCode);
+         
+    
 
 private:
     //New functions
@@ -98,10 +110,12 @@
     void GetCurrentIdL(TInt& aCurrentPersonality);
     /**
      * Get the mode name and header for current personality
+     * The parameters are pushed to the cleanup stack in order
+     * aDescription, aHeader.
      * @param aDescription The returned current personality string.
      * @param aHeader The header string for message query.
      */
-    void GetPersonalityStringL(HBufC*& aHeader,HBufC*& aDescription );
+    void GetPersonalityStringLC(HBufC*& aHeader,HBufC*& aDescription );
 
     /**
      * Runs the connected discreet note
@@ -110,26 +124,28 @@
 
   
     /**
-     * creates the USB UI setting view
-     * @param aProcessName The process name (USBClassChangeUI.exe)
+     * launches the (USB) application
+     * @param aProcessName The process name (*.exe)
      * @param TUidType 
      */
-    void CreateChosenViewL(const TDesC & aProcessName,const TUidType & aUidType) const;
+    void LaunchApplication(const TDesC & aProcessName,const TUidType & aUidType) const;
+
+    /**
+     * Adds a parameter to the dialog parameters.
+     */
+    void AddParameterL(
+            CHbSymbianVariantMap* aParameters,
+            const TDesC& aKey,
+            const TAny* aData,
+            CHbSymbianVariant::TType aDataType);
+
 private:
     /**
      *  C++ default constructor.
      */
     CUSBUICableConnectedNotifier();
     
-    /**
-     * Waiter for canceling notifier. Canceling is not posible when note is visible
-     */
-    CActiveSchedulerWait    iNoteWaiter;    
-    
-    /**
-    * Note visible
-    */
-    TBool   iNoteVisible;
+    CHbDeviceDialog* iDialog; 
 
     };
 #endif // USBUINCABLECONNECTEDNOTIFIER_H
--- a/usbuis/usbuinotif/inc/usbuinotifdialerwatcher.h	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
-* Copyright (c) 2007, 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:  Declares USB dialer activation watcher class
- *
-*/
-
-#ifndef C_USBUINOTIFDIALERWATCHER_H
-#define C_USBUINOTIFDIALERWATCHER_H
-
-#include <e32base.h>
-#include <coecntrl.h> 
-#include <viewclipartner.h> 
-#include <viewcli.h> 
-
-
-/**
- * Dialer activation callback
- *
- * This class specifies the functions when dialer is activated 
- * or note can be reactivated 
- * 
- */
-class MDialerNotifier
-    {
-public:
-    /**     
-     * The function to be when Dialaer is activated
-     *          
-     */
-    virtual void DialerActivated() = 0;
-    
-    /**     
-     * The function to be when Dialaer is deactivated
-     * and note can be shown again
-     *          
-     */
-    virtual void ReActivateDialog() = 0;
-    };
-
-/** 
- *
- * This class will check if application key is pressed when error note is active. 
- * When application key is pressed dialer view is activated and error notifier is 
- * informed so it can dismis dialog. When dialer is deactivated error notifier is 
- * notified that dialog can be again shown.
- *
- */
-NONSHARABLE_CLASS( CUsbuinotifDialerWatcher):  public CCoeControl,  
-                                               public MVwsSessionWrapperObserver  
-
-    {
-public:
-    /**
-     * Two-phased constructor.     
-     * @param aDialerKeyNotifier Callback interface for dialer activation/deactivation
-     * @return dialer watcher
-     */
-     
-    static CUsbuinotifDialerWatcher* NewL( MDialerNotifier* aDialerNotifier );
-
-    /**
-     * Two-phased constructor.
-     * @param aDialerKeyNotifier Callback interface for dialer activation/deactivation     
-     * @return dialer watcher 
-     */
-    static CUsbuinotifDialerWatcher* NewLC( MDialerNotifier* aDialerNotifier  );
-
-    /**
-     * Destructor
-     */
-    virtual ~CUsbuinotifDialerWatcher();
-    
-private:
-    
-    /**
-     * From CCoeControl
-     * @param aKeyEvent Key Event
-     * @param aType Type of event
-     */
-    TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);    
-
-private:
-    
-    /**
-     * From MVwsSessionWrapperObserver
-     * @param aEvent View event
-     */
-    void HandleViewEventL(const TVwsViewEvent &aEvent);
-    
-
-private:
-
-    /**
-     * Constructor
-     * @param aDialerKeyNotifier Callback interface for dialer activation/deactivation     
-     */
-    CUsbuinotifDialerWatcher( MDialerNotifier* aDialerKeyNotifier  );
-    
-    /**
-     * Two-phased constructor.
-     */
-    void ConstructL();
-
-private:
-    // Member variables
-    
-    /**
-     *  The observer for this objects events
-     *  Not own. 
-     */
-    MDialerNotifier* iNotify;
-    
-    /**
-     *  The observer for this objects events
-     *  Own. 
-     */
-    CVwsSessionWrapper* iwsSession;
-    
-    /**
-     * Is notifier allready notified. 
-     */
-    TBool iNotified;
-    };
-#endif // C_USBUINOTIFDIALERWATCHER_H
--- a/usbuis/usbuinotif/inc/usbuinotifmsmmerror.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/inc/usbuinotifmsmmerror.h	Fri Mar 19 09:48:52 2010 +0200
@@ -23,8 +23,6 @@
 
 #include "usbnotifier.h"      // Base class
 #include <AknQueryDialog.h>   // AVKON component
-#include "usbuinotifdialerwatcher.h"
-
 #define KUsbUiNotifOtgGeneralQueryGranularity 3
 // CLASS DECLARATION
 
@@ -34,7 +32,7 @@
  *
  *  @lib
  */
-NONSHARABLE_CLASS(CUsbUiNotifMSMMError) : public CUSBUINotifierBase, public MDialerNotifier
+NONSHARABLE_CLASS(CUsbUiNotifMSMMError) : public CUSBUINotifierBase
     {
 public:
 
@@ -97,23 +95,6 @@
      */
     void GetParamsL(const TDesC8& aBuffer, TInt aReplySlot,
             const RMessagePtr2& aMessage);
-    
-private:
-    
-    /**
-     * From MDialerNotifier     
-     * The function to be when Dialaer is activated
-     *          
-     */
-    void DialerActivated();
-    
-    /**
-     * From MDialerNotifier     
-     * The function to be when Dialaer is deactivated
-     * and note can be shown again
-     *          
-     */
-    void ReActivateDialog();
 
 private:
 
@@ -140,14 +121,5 @@
     CAknQueryDialog* iQuery; 
     RArray<TInt> iStringIds;
     TInt iErrorId;
-    /**
-     * Dialer watcher 
-     * Own.
-     */
-    CUsbuinotifDialerWatcher* iDialerWatcher;
-    /**
-     * Dialog is dismissed. 
-     */
-    TBool iDismissed;
     };
 #endif // USBUINOTIFMSMMERROR_H
--- a/usbuis/usbuinotif/inc/usbuinotifotgerror.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/inc/usbuinotifotgerror.h	Fri Mar 19 09:48:52 2010 +0200
@@ -23,8 +23,6 @@
 
 #include "usbnotifier.h"      // Base class
 #include <AknQueryDialog.h>   // AVKON component
-#include "usbuinotifdialerwatcher.h"
-
 #define KUsbUiNotifOtgGeneralQueryGranularity 3
 // CLASS DECLARATION
 
@@ -34,7 +32,7 @@
  *
  *  @lib
  */
-NONSHARABLE_CLASS(CUsbUiNotifOtgError) : public CUSBUINotifierBase, public MDialerNotifier
+NONSHARABLE_CLASS(CUsbUiNotifOtgError) : public CUSBUINotifierBase
     {
 public:
     // Constructors and destructor
@@ -87,23 +85,6 @@
      */
     void GetParamsL(const TDesC8& aBuffer, TInt aReplySlot,
             const RMessagePtr2& aMessage);
-    
-private:
-    
-    /**
-     * From MDialerNotifier     
-     * The function to be when Dialaer is activated
-     *          
-     */
-    void DialerActivated();
-    
-    /**
-     * From MDialerNotifier     
-     * The function to be when Dialaer is deactivated
-     * and note can be shown again
-     *          
-     */
-    void ReActivateDialog();
 
 private:
 
@@ -130,14 +111,5 @@
     CAknQueryDialog* iQuery; 
     RArray<TInt> iStringIds;
     TInt iErrorId;
-    /**
-     * Dialer watcher 
-     * Own.
-     */
-    CUsbuinotifDialerWatcher* iDialerWatcher;
-    /**
-     * Dialog is dismissed. 
-     */
-    TBool iDismissed;
     };
 #endif // USBUINOTIFOTGERROR_H
--- a/usbuis/usbuinotif/inc/usbuinqueriesnotifier.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/inc/usbuinqueriesnotifier.h	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2005-2010 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"
@@ -22,7 +22,6 @@
 
 #include "usbnotifier.h"      // Base class
 #include <AknQueryDialog.h>   // AVKON component
-#include <aknmemorycarddialog.h>
 
 // CLASS DECLARATION
 
@@ -31,8 +30,7 @@
  *
  *  @lib
  */
-NONSHARABLE_CLASS(CUSBUIQueriesNotifier) : public CUSBUINotifierBase,
-        public MAknMemoryCardDialogObserver
+NONSHARABLE_CLASS(CUSBUIQueriesNotifier) : public CUSBUINotifierBase
     {
 public:
     // Constructors and destructor
@@ -47,15 +45,6 @@
      */
     virtual ~CUSBUIQueriesNotifier();
 
-public:
-    // from MAknMemoryCardDialogObserver
-
-    /**
-     * To be notified when unlock completed
-     * @param TInt aResult
-     * @return void
-     */
-    void UnlockComplete(TInt aResult);
 
 private:
     // Functions from base class
@@ -104,15 +93,6 @@
 private:
     // New functions
 
-    /**
-     * Unlock the locked memory card
-     * First inform user that the memory card is locked and then show the
-     * memory card dialog for unlocking. 
-     * @param aStringHolder   The string for the query. 
-     * @param aCoverDialogId  The dialog ID for the cover UI.
-     * @return KErrNone - user accepted, KErrCancel - End call key pressed
-     */
-    TInt UnlockMemoryCardL(const TDesC& aStringHolder, TInt aCoverDialogId);
 
     /**
      * Show query dialog 
@@ -144,8 +124,6 @@
     CAknQueryDialog* iUSBQueryDlg;  
     TUSBUIQueries iQueryType; // To store the type of the query
     TInt iDriveLetter; // For MMC locked case
-    // Used for possible Cancel while the dialog is showing
-    CAknMemoryCardDialog* iMemoryCardDialog;
 
     };
 #endif // USBUINQUERIESNOTIFIER_H
--- a/usbuis/usbuinotif/inc/usbuinqueriesnotifiermdrv.h	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/inc/usbuinqueriesnotifiermdrv.h	Fri Mar 19 09:48:52 2010 +0200
@@ -106,7 +106,7 @@
      * @return KErrNone - accepted, KErrCancel - Cancel or End call key
      */
     TInt QueryUserResponseL(const TDesC& aStringHolder, TInt aCoverDialogId,
-            TBool aIsCancelKey);
+            TBool aIsCancelKey, TBool aIsErrorQuery);
 
     /**
      * Get attributes for the query dialog
@@ -117,7 +117,7 @@
      * @param aIsCancelKey    Returned info about showing the Cancel key.
      * @return                The string holder for the query. 
      */
-    HBufC* GetQueryAttributesLC(TInt& aCoverDialogId, TBool& aIsCancelKey);
+    HBufC* GetQueryAttributesLC(TInt& aCoverDialogId, TBool& aIsCancelKey, TBool& aIsErrorQuery);
 
 private:
     // Data
--- a/usbuis/usbuinotif/loc/usbuinotif.loc	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/loc/usbuinotif.loc	Fri Mar 19 09:48:52 2010 +0200
@@ -139,6 +139,11 @@
 //
 #define qtn_usb_otg_general_mass_storage_error "General Mass storage error"
 
+//d: Memory not enough or full error
+//l: popup_note_window
+//r: 5.2
+#define qtn_usb_error_memory_not_enough "Memory full. Close some applications and try to connect USB cable again"
+
 // End of USB_OTG
 
 // End of File
--- a/usbuis/usbuinotif/rom/usbuinotif.iby	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/rom/usbuinotif.iby	Fri Mar 19 09:48:52 2010 +0200
@@ -22,7 +22,6 @@
 #ifdef __USB_MULTIPERSONALITY 
 
 ECOM_PLUGIN(usbuinotif.dll, 102068DC.rsc)  
-file=ABI_DIR\BUILD_DIR\usbavkonnotif.dll       SHARED_LIB_DIR\usbavkonnotif.dll
 
 #endif //__USB_MULTIPERSONALITY
 #endif //__USBUINOTIF_IBY__
\ No newline at end of file
--- a/usbuis/usbuinotif/src/usbavkonmain.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * 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:  Methods for USB UI notifiers.
- *
- */
-
-// INCLUDE FILES
-#include <eiknotapi.h>
-#include <eikenv.h>
-
-#include "usbuincableconnectednotifier.h"
-#include "usbuinqueriesnotifier.h"
-#include "usbuinotifdebug.h"
-
-// CONSTANTS
-const TInt KUSBUINotifierArrayIncrement = 1;
-
-
-// ================= EXPORTED FUNCTIONS =======================================
-
-// ----------------------------------------------------------------------------
-//
-// Instantiate notifiers
-//
-// ----------------------------------------------------------------------------
-
-LOCAL_C void CreateUSBUINotifiersL( 
-    CArrayPtrFlat<MEikSrvNotifierBase2>* aNotifiers )
-    {
-    FLOG(_L("[USBUINOTIF]\t CreateUSBUINotifiersL"));
-    
-    CUSBUICableConnectedNotifier* cableConnectedNotifier = 
-        CUSBUICableConnectedNotifier::NewL();
-    CleanupStack::PushL( cableConnectedNotifier );
-    aNotifiers->AppendL( cableConnectedNotifier );
-    CleanupStack::Pop( cableConnectedNotifier );
-
-
-    FLOG(_L("[USBUINOTIF]\t CreateUSBUINotifiersL completed"));
-    }
-
-// ----------------------------------------------------------------------------
-//
-// Lib main entry point: Creates a notifiers array.
-//
-// ----------------------------------------------------------------------------
-
-EXPORT_C CArrayPtr<MEikSrvNotifierBase2>* NotifierArray()
-    {
-    FLOG(_L("[USBUINOTIF]\t NotifierArray"));
-    
-    CArrayPtrFlat<MEikSrvNotifierBase2>* notifiers = NULL;
-    
-    TRAPD( err, notifiers = 
-        new (ELeave)CArrayPtrFlat<MEikSrvNotifierBase2>( 
-            KUSBUINotifierArrayIncrement ));
-            
-    if ( err == KErrNone )
-        {
-        if( notifiers )
-            {
-            TRAPD( errCreate, CreateUSBUINotifiersL( notifiers ));
-            if( errCreate )
-                {
-                TInt count = notifiers->Count();
-                while(count--)
-                    {
-                    (*notifiers)[count]->Release();
-                    }
-                delete notifiers;
-                notifiers = NULL;
-                }
-                
-            FLOG(_L("[USBUINOTIF]\t NotifierArray completed"));
-            }
-        }
-    else
-        {
-        FLOG(_L("[USBUINOTIF]\t NotifierArray Failed!!!"));
-        }  
-        
-    return notifiers;
-    }
-
-//  End of File
--- a/usbuis/usbuinotif/src/usbuincableconnectednotifier.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/src/usbuincableconnectednotifier.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -21,32 +21,20 @@
 #include <aknPopup.h> 
 #include <StringLoader.h>    // Localisation stringloader
 #include <utf.h>             // Unicode character conversion utilities
-#include <AknsUtils.h>
-#include <usb.h>
+#include <usbman.h>
 #include <usbuinotif.rsg>                   // Own resources
 #include <centralrepository.h> 
 #include <e32property.h>
-//for loading icons USB fork and empty
-#include <AknIconArray.h>
-#include <avkon.mbg>
-#include <AknsConstants.h>
-#include <aknmessagequerydialog.h>
-//for cover display support
-#include <AknMediatorFacade.h>
-#include <SecondaryDisplay/usbuinotifsecondarydisplay.h> // Dialog index for cover UI
-#include <akndiscreetpopup.h>
 #include <e32uid.h> // KExecutableImageUid
-#include <usbui.mbg>
 #include "usbuincableconnectednotifier.h"   // Own class definition
 #include "usbuinotifdebug.h"                // Debugging macros
 #include "UsbWatcherInternalCRKeys.h"
-#include "usbpersonalityids.h"
 #include "usbuinotif.hrh"
 
 // Literals
 
-_LIT(KUSBExe, "usbclasschangeui.exe");
-const TInt KUSBUIUid = 0x102068E2;
+_LIT(KUSBExe, "usbapplication.exe");
+const TInt KUSBUIUid = 0x2002BCA3;
 _LIT(KFileDrive,"z:");
 _LIT(KUSBUIconFileName, "usbui.mif");
 
@@ -75,8 +63,7 @@
 // might leave.
 // ----------------------------------------------------------------------------
 //
-CUSBUICableConnectedNotifier::CUSBUICableConnectedNotifier(): 
-    iNoteVisible(EFalse)
+CUSBUICableConnectedNotifier::CUSBUICableConnectedNotifier()
     {
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::default constructor"));
     }
@@ -92,6 +79,8 @@
     //this virtual function call is to the local CUSBUICableConnectedNotifier::
     //Cancel, not to any possibly derived class implementation. 
     Cancel();
+    delete iDialog;
+         
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::destructor completed"));
     }
 
@@ -146,7 +135,7 @@
 void CUSBUICableConnectedNotifier::RunL()
     {
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::RunL"));
-    iNoteVisible = ETrue;
+
     DisableKeylock();
     SuppressAppSwitching(ETrue);
     RunQueryL();
@@ -164,12 +153,8 @@
 void CUSBUICableConnectedNotifier::Cancel()
     {
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::Cancel() "));
-    // Not allowed to cancel this one before note is closed.
-    if ( iNoteVisible )
-        {
-        iNoteWaiter.Start();    
-        }
-        
+
+    iDialog->Cancel(); // cancel the dialog, if it is active
     CompleteMessage(KErrCancel);
     CUSBUINotifierBase::Cancel();
 
@@ -181,7 +166,7 @@
 // Get the strings for ask on connection message query 
 // -----------------------------------------------------------------------------------------------------------
 //
-void CUSBUICableConnectedNotifier::GetPersonalityStringL(
+void CUSBUICableConnectedNotifier::GetPersonalityStringLC(
        HBufC*& aHeader,HBufC*& aDescription )
     {
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::GetPersonalityStringL"));
@@ -193,9 +178,9 @@
     User::LeaveIfError(usbman.GetDescription(CurrentPersonalityID,
             aDescription));
     CleanupStack::PopAndDestroy(&usbman);
-   
+    CleanupStack::PushL(aDescription);
     aHeader = StringLoader::LoadL(R_USB_MODE_MSG_HEADER);
-
+    CleanupStack::PushL(aHeader);
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::GetPersonalityStringL completed"));
     }
 
@@ -207,24 +192,45 @@
 void CUSBUICableConnectedNotifier::RunQueryL()
     {
     FLOG( _L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::RunQueryL()"));
-  
-   HBufC* header = NULL;
-   HBufC* description =NULL;
-   GetPersonalityStringL(header, description);
-  
-   CleanupStack::PushL(header);
-   CleanupStack::PushL(description);
-  
-   TFileName usbUiIconFilename( KFileDrive );
-   usbUiIconFilename += KDC_APP_BITMAP_DIR;
-   usbUiIconFilename += KUSBUIconFileName;
-   iNoteVisible = ETrue;
-   CAknDiscreetPopup::ShowGlobalPopupL(*header,*description,  KAknsIIDQgnPropUsb, AknIconUtils::AvkonIconFileName(),
-           EMbmAvkonQgn_prop_usb, EMbmAvkonQgn_prop_usb_mask,KAknDiscreetPopupDurationLong, EUSBUICmdDiscreetTapped,( MEikCommandObserver* ) this);    
+ 
+    _LIT(KNotificationType,"com.nokia.hb.devicenotificationdialog/1.0");
+    _LIT(KTouchActivation, "touchActivation");
+    _LIT(KIconName, "iconName");
+    _LIT(KTitle, "title");
+    _LIT(KText, "text");
+
+    HBufC* header = NULL;
+    HBufC* description =NULL;   
+    GetPersonalityStringLC(header, description);
    
-    CleanupStack::PopAndDestroy(description);
+    TFileName usbUiIconFilename( KFileDrive );
+    usbUiIconFilename += KDC_APP_BITMAP_DIR;
+    usbUiIconFilename += KUSBUIconFileName;
+    if( iDialog )
+        {
+        delete iDialog;
+        iDialog = NULL;
+        }
+    iDialog = CHbDeviceDialog::NewL();
+    CHbSymbianVariantMap *parameters =CHbSymbianVariantMap::NewL();
+    CleanupStack::PushL(parameters);
+
+    AddParameterL(parameters, KTitle, header, CHbSymbianVariant::EDes);
+    AddParameterL(parameters, KText, description, CHbSymbianVariant::EDes);
+    AddParameterL(parameters, KIconName, &usbUiIconFilename, CHbSymbianVariant::EDes);
+    TBool activation=ETrue;
+    AddParameterL(parameters, KTouchActivation, &activation, CHbSymbianVariant::EBool);
+
+    FLOG( _L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::RunQueryL() show") );     
+    TBool error = iDialog->Show(KNotificationType ,*parameters, this);
+    FTRACE( FPrint(
+        _L( "[USBUINOTIF]\t CUSBUICableConnectedNotifier::RunQueryL() error = %d" ),
+        error ) );
+
+    CleanupStack::PopAndDestroy(parameters);    
     CleanupStack::PopAndDestroy(header);
-   
+    CleanupStack::PopAndDestroy(description);
+    
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::RunQueryL completed"));
     }
 // ----------------------------------------------------------------------------
@@ -239,51 +245,100 @@
     CRepository* repository = CRepository::NewL(KCRUidUsbWatcher);
     CleanupStack::PushL(repository);
     // Get the current USB mode
-    repository->Get(KUsbWatcherPersonality, aCurrentPersonality);
+    TInt ret = repository->Get(KUsbWatcherPersonality, aCurrentPersonality);
+    FTRACE( FPrint(
+        _L( "[USBWATCHER]\t CUSBUICableConnectedNotifier::GetCurrentIdL() ret = %d" ),
+        ret ) );    
     CleanupStack::PopAndDestroy(repository);
     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::GetCurrentIdL completed"));
     }
 
 // ----------------------------------------------------------------------------
-// CUSBUICableConnectedNotifier::ProcessCommandL()
-// when discreet pop up is tapped the command will be handled here 
+// CUSBUICableConnectedNotifier::DataReceived
+// launches the QT usb ui setting
 // ----------------------------------------------------------------------------
 //
-void CUSBUICableConnectedNotifier::ProcessCommandL(TInt aCommandId)
+void CUSBUICableConnectedNotifier::DataReceived(CHbSymbianVariantMap& aData)
     {
-    switch ( aCommandId )
-            {
-        case EUSBUICmdDiscreetTapped:
-            {
-            TUidType uidtype(KExecutableImageUid, TUid::Uid(0x00),TUid::Uid(KUSBUIUid));
-            CreateChosenViewL(KUSBExe(),uidtype);  
-            }
-        case EAknDiscreetPopupCmdClose:                
-            if ( iNoteWaiter.IsStarted() )
+    FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::DataReceived"));
+    _LIT(KResult, "result");
+    _LIT(KActivated, "activated");
+    TInt result = 0;
+    MDesCArray& keys = aData.Keys();
+    HBufC* key = NULL;
+    for(TInt i = 0; i < keys.MdcaCount(); i++)
+        {
+        result = keys.MdcaPoint(i).Compare(KResult); 
+        if (result == 0)
+            {        
+            key = HBufC::New(KResult().Length());
+            if (key)
                 {
-                iNoteWaiter.AsyncStop();
+                *key = KResult;            
+                const CHbSymbianVariant* variant = aData.Get(*key);
+                delete key;
+                HBufC* value = static_cast<HBufC*>(variant->Data());
+                result = value->Des().Compare(KActivated);
+                if (result == 0)
+                    {
+                    TUidType uidtype(KExecutableImageUid, TUid::Uid(0x00),
+                            TUid::Uid(KUSBUIUid));
+                    LaunchApplication(KUSBExe(), uidtype);
+                    }
+                break;
                 }
-            iNoteVisible = EFalse;    
-            CompleteMessage( KErrCancel );                    
-            break;
-        default:
-                  
-        break;
-            }
+            }            
+        }
     }
+
+// ----------------------------------------------------------------------------
+// CUSBUICableConnectedNotifier::DeviceDialogClosed
+// ----------------------------------------------------------------------------
+//      
+ void CUSBUICableConnectedNotifier::DeviceDialogClosed(TInt aCompletionCode)
+     {
+     FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::DeviceDialogClosed()"));
+     CompleteMessage(aCompletionCode);  
+     }
+      
 // ---------------------------------------------------------------------------
-// CUSBUICableConnectedNotifier::CreateChosenViewL()
-// creates the USB UI setting view
+// CUSBUICableConnectedNotifier::LaunchApplication()
+// launches the application 
 // ---------------------------------------------------------------------------
 //  
-    void CUSBUICableConnectedNotifier::CreateChosenViewL(const TDesC & aProcessName,const TUidType & aUidType) const
+void CUSBUICableConnectedNotifier::LaunchApplication(const TDesC & aProcessName, 
+        const TUidType & aUidType) const
     {                 
-    FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::CreateDesiredViewL() "));
-        RProcess usbUiProcess;                
-        User::LeaveIfError(usbUiProcess.Create(aProcessName, KNullDesC, aUidType));   
-        usbUiProcess.Resume();
-        usbUiProcess.Close();                     
-    FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::CreateDesiredViewL() "));         
+    FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::LaunchApplication()"));
+    RProcess usbUiProcess;                
+    TInt result = usbUiProcess.Create(aProcessName, KNullDesC, aUidType);
+    FTRACE( FPrint(
+        _L( "[USBUINOTIF]\t CUSBUICableConnectedNotifier::LaunchApplication() result = %d" ),
+        result ) );    
+    usbUiProcess.Resume();
+    usbUiProcess.Close();                     
+    FLOG(_L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::LaunchApplication() completed"));             
+    }
     
+// ---------------------------------------------------------------------------
+// CUSBUICableConnectedNotifier::AddParameter()
+// Adds a string parameter to the dialog parameters.
+// ---------------------------------------------------------------------------
+//  
+void CUSBUICableConnectedNotifier::AddParameterL(
+        CHbSymbianVariantMap* aParameters,
+        const TDesC& aKey,
+        const TAny* aData,
+        CHbSymbianVariant::TType aDataType)
+    {
+    FLOG( _L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::AddStringParameter()") );
+    FTRACE( FPrint(
+        _L( "[USBWATCHER]\t CUSBUICableConnectedNotifier::RunQueryL() aKey = %S" ),
+        &aKey ) );
+    CHbSymbianVariant* variant = CHbSymbianVariant::NewL(aData, aDataType);
+    //aParameters takes variant ownership
+    User::LeaveIfError(aParameters->Add(aKey, variant));
+    FLOG( _L("[USBUINOTIF]\t CUSBUICableConnectedNotifier::AddStringParameter() completed") );
     }
+
 // End of File
--- a/usbuis/usbuinotif/src/usbuinmain.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/src/usbuinmain.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2005-2010 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"
@@ -20,21 +20,17 @@
 #include <ecom/implementationproxy.h>
 #include <eiknotapi.h>
 #include <eikenv.h>
-#include <AknNotifierWrapper.h>
-#include <usbuinotif.h>
 
 #include "usbuincableconnectednotifier.h"
 #include "usbuinqueriesnotifier.h"
-
-
 #include "usbuinotifdebug.h"
 #include "usbuinotifotgwarning.h"    
 #include "usbuinotifotgerror.h"    
 #include "usbuinotifmsmmerror.h" 
 
 // CONSTANTS
-const TInt KUSBUINotifierArrayIncrement = 4;
-_LIT( KUSBUINotifdll, "usbavkonnotif.dll" ); 
+const TInt KUSBUINotifierArrayIncrement = 5;
+
 // ================= EXPORTED FUNCTIONS =======================================
 // ----------------------------------------------------------------------------
 //
@@ -46,20 +42,12 @@
     {
     FLOG(_L("[USBUINOTIF]\t CreateUSBUINotifiersL"));
 
-    /* The CableconnectionNotifier is created on the Avkon Wrapper
- * because it contains the discreet popups which are only possible
- * to be launched in a UI framework
- */
-    CAknCommonNotifierWrapper* master = 
-                CAknCommonNotifierWrapper::NewL(KCableConnectedNotifierUid,
-                                                KCableConnectedNotifierUid,
-                                                MEikSrvNotifierBase2::ENotifierPriorityVHigh,
-                                                KUSBUINotifdll,
-                                                1); // no synchronous reply used.
-        CleanupStack::PushL(master);
-        
-        aNotifiers->AppendL(master ); 
-        CleanupStack::Pop( master );
+    CUSBUICableConnectedNotifier* cableConnectedNotifier =
+        CUSBUICableConnectedNotifier::NewL();
+    CleanupStack::PushL( cableConnectedNotifier );
+    aNotifiers->AppendL( cableConnectedNotifier );
+    CleanupStack::Pop( cableConnectedNotifier );
+
     CUSBUIQueriesNotifier* queriesNotifier = CUSBUIQueriesNotifier::NewL();
     CleanupStack::PushL( queriesNotifier );
     aNotifiers->AppendL( queriesNotifier );
@@ -128,11 +116,7 @@
 
 const TImplementationProxy ImplementationTable[] =
     {
-#ifdef __EABI__
-    {{0x10281F23},(TFuncPtr)NotifierArray},
-#else
-    {{0x10281F23},NotifierArray},
-#endif
+    IMPLEMENTATION_PROXY_ENTRY( 0x10281F23, NotifierArray )
     };
 
 EXPORT_C const TImplementationProxy* ImplementationGroupProxy(
--- a/usbuis/usbuinotif/src/usbuinotifdialerwatcher.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
-* Copyright (c) 2007, 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:  USB dialer activation watcher class
- *
-*/
-
-
-#include <w32std.h>  
-#include <eikenv.h> 
-#include <coeaui.h> 
-#include <aiscutdefs.h>
-#include <vwsdef.H>
-
-
-#include "usbuinotifdialerwatcher.h"
-#include "debug.h"
-#include "usbuinotifdebug.h"
-
-// ======== MEMBER FUNCTIONS ========
-// ---------------------------------------------------------------------------
-// NewL
-// ---------------------------------------------------------------------------
-//
-CUsbuinotifDialerWatcher* CUsbuinotifDialerWatcher::NewL( MDialerNotifier* aDialerNotifier )
-    {
-    FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher::NewL"))
-    CUsbuinotifDialerWatcher* self = CUsbuinotifDialerWatcher::NewLC( aDialerNotifier);
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// NewLC
-// ---------------------------------------------------------------------------
-//    
-CUsbuinotifDialerWatcher* CUsbuinotifDialerWatcher::NewLC( MDialerNotifier* aDialerNotifier )
-    {
-    FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher::NewLC"))
-    CUsbuinotifDialerWatcher* self = new ( ELeave ) CUsbuinotifDialerWatcher( aDialerNotifier );
-    CleanupStack::PushL( self );
-    self->ConstructL(  );
-    return self;
-    }
-
-// ---------------------------------------------------------------------------
-// CUsbuinotifDialerWatcher()
-// ---------------------------------------------------------------------------
-//
-CUsbuinotifDialerWatcher::CUsbuinotifDialerWatcher( MDialerNotifier* aDialerNotifier ) :
-    iNotify( aDialerNotifier )
-    {
-    FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher::CUsbuinotifDialerWatcher"))
-    }
-
-// ---------------------------------------------------------------------------
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CUsbuinotifDialerWatcher::~CUsbuinotifDialerWatcher()
-    {
-    FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher Destructor"))
-    CCoeAppUi* appui=CEikonEnv::Static()->AppUi();
-    appui->RemoveFromStack(this);
-    delete iwsSession;
-    }
-    
-// ---------------------------------------------------------------------------
-// ConstructL()
-// ---------------------------------------------------------------------------
-//
-void CUsbuinotifDialerWatcher::ConstructL()
-    {    
-    FLOG(_L("[USBUINOTIF]\t CUsbuinotifDialerWatcher ConstructL"));    
-    CCoeAppUi* appui=CEikonEnv::Static()->AppUi();
-    appui->AddToStackL(this,ECoeStackPriorityCba);    
-    }
-
-// ---------------------------------------------------------------------------
-// HandleViewEventL()
-// ---------------------------------------------------------------------------
-//
-void CUsbuinotifDialerWatcher::HandleViewEventL(const TVwsViewEvent& /*aEvent*/)
-    {
-    FLOG((_L("[USBUINOTIF]\t HandleViewEventL ")));
-    
-    if ( !iNotified )
-        {
-        iNotify->ReActivateDialog();
-        iNotified=ETrue;        
-        }
-    FLOG(_L("[USBUINOTIF]\t HandleViewEventL Done"));
-    }
-
-// ---------------------------------------------------------------------------
-// OfferKeyEventL
-// ---------------------------------------------------------------------------
-//
-TKeyResponse CUsbuinotifDialerWatcher::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
-    {     
-    if (aKeyEvent.iScanCode == EStdKeyApplication0)
-        {    
-        if ( !iwsSession )
-            {
-            iwsSession = CVwsSessionWrapper::NewL(*this);
-            }
-        iNotified=EFalse;
-        const TVwsViewId viewId(KScutDiallerUid, KScutDiallerViewId );
-        TUid msgId = KScutDiallerViewCommand;            
-        iwsSession->CreateActivateViewEvent( viewId, msgId, KNullDesC8  );            
-        CCoeAppUi* appui=CEikonEnv::Static()->AppUi();                        
-        iNotify->DialerActivated();
-        iwsSession->NotifyNextDeactivation(viewId);  
-        }
-        
-    return EKeyWasNotConsumed;
-    }
-
--- a/usbuis/usbuinotif/src/usbuinotifmsmmerror.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/src/usbuinotifmsmmerror.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -24,7 +24,6 @@
 #include <AknQueryDialog.h> 
 #include <aknnotewrappers.h>
 #include <usb/hostms/srverr.h> 
-#include <featmgr.h>
 
 #include <usbuinotif.h>                     // pck
 #include <usbuinotif.rsg>                   // Own resources
@@ -68,8 +67,6 @@
     //this virtual function call is to local CUsbUiNotifMSMMError::Cancel, 
     //not to any possibly derived class implementation. 
     Cancel();
-    delete iDialerWatcher;    
-    delete iQuery;    
     }
 
 void CUsbUiNotifMSMMError::ConstructL()
@@ -144,28 +141,16 @@
     {
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::RunL"));
     TInt returnValue = KErrNone;
-    FeatureManager::InitializeLibL();
-    if ( FeatureManager::FeatureSupported( KFeatureIdFfKeypadNoSendKey ) )
-        { 
-        if (!iDialerWatcher)
-            {
-            iDialerWatcher = CUsbuinotifDialerWatcher::NewL(this);
-            }
-        }        
-    iDismissed=EFalse;
+
     DisableKeylock();
     SuppressAppSwitching( ETrue );
 
     //Excute dialog and check return value
     returnValue = QueryUserResponseL();
-    if (!iDismissed)
-        {
-        SuppressAppSwitching( EFalse );
-        RestoreKeylock();
-        delete iDialerWatcher;
-        iDialerWatcher = NULL;
-        CompleteMessage( returnValue );
-        }
+
+    SuppressAppSwitching( EFalse );
+    RestoreKeylock();
+    CompleteMessage( returnValue );
 
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::RunL() completed"));
     }
@@ -178,56 +163,17 @@
 void CUsbUiNotifMSMMError::Cancel()
     {
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::Cancel"));
-    // If dialog is not dismissed this is normal cancel and if query
-    // doesn't exsist notifier is canceled during dismission
-    if (!iDismissed || !iQuery )
-        {        
-        delete iDialerWatcher;
-        iDialerWatcher = NULL;
-        CompleteMessage( KErrCancel );
-        }        
     if (iQuery)
         {
         delete iQuery;
         iQuery = NULL;
         }
-
+    CompleteMessage( KErrCancel );
 
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::Cancel() completed"));
     }
 
 // ----------------------------------------------------------------------------
-// CUsbUiNotifOtgError::DialerActivated
-// Release all own resources (member variables)
-// ----------------------------------------------------------------------------
-//
-void CUsbUiNotifMSMMError::DialerActivated()
-    {
-    FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::AppKeyPressed()"));
-    if ( iQuery )
-        {
-        iDismissed=ETrue;    
-        Cancel();
-        }    
-    }
-
-// ----------------------------------------------------------------------------
-// CUsbUiNotifOtgError::ReActivateDialog
-// Release all own resources (member variables)
-// ----------------------------------------------------------------------------
-//	
-void CUsbUiNotifMSMMError::ReActivateDialog()
-    {    
-    FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ReActivateDialog()"));
-    if ( !IsActive())
-        {
-        SetActive();
-        iStatus = KRequestPending;
-        TRequestStatus* stat = &iStatus;
-        User::RequestComplete( stat, KErrNone );
-        }
-    }	
-// ----------------------------------------------------------------------------
 // CUsbUiNotifMSMMError::QueryUserResponseL
 // Show query dialog. 
 // ----------------------------------------------------------------------------
@@ -237,17 +183,9 @@
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifMSMMError::QueryUserResponseL"));
     TInt returnValue = KErrNone;
     TInt resourceId = R_USB_QUERY_OTG_ERROR;
-    if (iDismissed)
-        {
-        iQuery = CAknQueryDialog::NewL();
-        }
-    else
-        {
-        iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone );
-        }
-    
-    
-    iDismissed=EFalse;
+
+    iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone );
+
     if (iCoverDisplaySupported)
         {
         iQuery->PublishDialogL( iErrorId, KUsbUiNotifMsmmError );
--- a/usbuis/usbuinotif/src/usbuinotifotgerror.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/src/usbuinotifotgerror.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -23,7 +23,6 @@
 #include <StringLoader.h>    // Localisation stringloader
 #include <AknQueryDialog.h> 
 #include <aknnotewrappers.h>
-#include <featmgr.h>
 
 #include <usbuinotif.h>                     // pck
 #include <usbuinotif.rsg>                   // Own resources
@@ -67,8 +66,6 @@
     //this virtual function call is to local CUsbUiNotifOtgError::Cancel, 
     //not to any possibly derived class implementation. 
     Cancel();
-    delete iDialerWatcher;    
-    delete iQuery;    
     }
 
 void CUsbUiNotifOtgError::ConstructL()
@@ -108,18 +105,24 @@
         {
         User::Leave( KErrInUse );
         }
-
-    iMessage = aMessage;
-    iNeedToCompleteMessage = ETrue;
-    iReplySlot = aReplySlot;
-
+        
     // Get parameters 
     //
-    iErrorId = 0;
+    
     TPckgC<TInt> pckg( iErrorId );
     pckg.Set( aBuffer );
     iErrorId = pckg();
-
+    
+    FTRACE(FPrint(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::GetParamsL iErrorId: %d"), iErrorId ));  
+    if ( iErrorId < 0 || iErrorId >= iStringIds.Count() )
+        {        
+        User::Leave( KErrArgument);        
+        }    
+        
+    iMessage = aMessage;
+    iNeedToCompleteMessage = ETrue;
+    iReplySlot = aReplySlot;  
+	  
     SetActive();
     iStatus = KRequestPending;
     TRequestStatus* stat = &iStatus;
@@ -136,29 +139,16 @@
     {
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::RunL"));
     TInt returnValue = KErrNone;
-    FeatureManager::InitializeLibL();
-    if ( FeatureManager::FeatureSupported( KFeatureIdFfKeypadNoSendKey ) )
-        {    
-        if (!iDialerWatcher)
-            {
-            iDialerWatcher = CUsbuinotifDialerWatcher::NewL(this);
-            }
-        }        
-    FeatureManager::UnInitializeLib(); 
-    iDismissed=EFalse;
+
     DisableKeylock();
     SuppressAppSwitching( ETrue );
 
     //Excute dialog and check return value
     returnValue = QueryUserResponseL();
-    if (!iDismissed)
-        {
-        SuppressAppSwitching( EFalse );
-        RestoreKeylock();
-        delete iDialerWatcher;
-        iDialerWatcher = NULL;
-        CompleteMessage( returnValue );
-        }
+
+    SuppressAppSwitching( EFalse );
+    RestoreKeylock();
+    CompleteMessage( returnValue );
 
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::RunL() completed"));
     }
@@ -170,54 +160,15 @@
 //
 void CUsbUiNotifOtgError::Cancel()
     {
-    FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel"));    
-    
-    // If dialog is not dismissed this is normal cancel and if query
-    // doesn't exsist notifier is canceled during dismission
-    if (!iDismissed || !iQuery )
-        {        
-        delete iDialerWatcher;
-        iDialerWatcher = NULL;
-        CompleteMessage( KErrCancel );
-        }        
+    FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel"));
     if (iQuery)
         {
         delete iQuery;
         iQuery = NULL;
         }
-    FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel() completed"));
-    }
+    CompleteMessage( KErrCancel );
 
-// ----------------------------------------------------------------------------
-// CUsbUiNotifOtgError::DialerActivated
-// Release all own resources (member variables)
-// ----------------------------------------------------------------------------
-//
-void CUsbUiNotifOtgError::DialerActivated()
-    {
-    FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::AppKeyPressed()"));
-    if ( iQuery )
-        {
-        iDismissed=ETrue;    
-        Cancel();
-        }    
-    }
-
-// ----------------------------------------------------------------------------
-// CUsbUiNotifOtgError::ReActivateDialog
-// Release all own resources (member variables)
-// ----------------------------------------------------------------------------
-//   
-void CUsbUiNotifOtgError::ReActivateDialog()
-    {    
-    FLOG(_L("[USBUINOTIF]\t CUSBUINotifierBase::ReActivateDialog()"));
-    if ( !IsActive())
-        {
-        SetActive();
-        iStatus = KRequestPending;
-        TRequestStatus* stat = &iStatus;
-        User::RequestComplete( stat, KErrNone );
-        }
+    FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::Cancel() completed"));
     }
 
 // ----------------------------------------------------------------------------
@@ -230,17 +181,9 @@
     FLOG(_L("[USBUINOTIF]\t CUsbUiNotifOtgError::QueryUserResponseL"));
     TInt returnValue = KErrNone;
     TInt resourceId = R_USB_QUERY_OTG_ERROR;
-    if (iDismissed)
-        {
-        iQuery = CAknQueryDialog::NewL();
-        }
-    else
-        {
-        iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone );
-        }
-    
-    
-    iDismissed=EFalse;
+
+    iQuery = CAknQueryDialog::NewL( CAknQueryDialog::EErrorTone );
+
     if (iCoverDisplaySupported)
         {
         iQuery->PublishDialogL( iErrorId, KUsbUiNotifOtgError );
--- a/usbuis/usbuinotif/src/usbuinotifotgwarning.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/src/usbuinotifotgwarning.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -73,7 +73,7 @@
 void CUsbUiNotifOtgWarning::ConstructL()
     {
     CUSBUINotifierBase::ConstructL();
-    iStringIds.AppendL( R_USB_OTG_WARNING_PARTIAL_SUPPORTED);
+    iStringIds.AppendL( R_USB_OTG_WARNING_PARTIAL_SUPPORT);
     }
 
 // ----------------------------------------------------------------------------
@@ -123,18 +123,24 @@
     if (iNote || iReplySlot != 0 || iNeedToCompleteMessage)
         {
         User::Leave( KErrInUse );
-        }
-
-    iMessage = aMessage;
-    iNeedToCompleteMessage = ETrue;
-    iReplySlot = aReplySlot;
+        }    
 
     // Get parameters 
     //    
     TPckgC<TInt> pckg( iNoteId );
     pckg.Set( aBuffer );
     iNoteId = pckg();
+    
+    FTRACE(FPrint(_L("[USBUINOTIF]\t CUsbUiNotifOtgWarning::GetParamsL iNoteId: %d"), iNoteId ));  
+    if ( iNoteId < 0 || iNoteId >= iStringIds.Count() )
+        {        
+        User::Leave( KErrArgument);        
+        }   
 
+    iMessage = aMessage;
+    iNeedToCompleteMessage = ETrue;
+    iReplySlot = aReplySlot;
+    
     SetActive();
     iStatus = KRequestPending;
     TRequestStatus* stat = &iStatus;
--- a/usbuis/usbuinotif/src/usbuinqueriesnotifiermdrv.cpp	Tue Feb 02 00:52:37 2010 +0200
+++ b/usbuis/usbuinotif/src/usbuinqueriesnotifiermdrv.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -163,13 +163,14 @@
     FLOG(_L("[USBUINOTIF]\t CUSBUIQueriesNotifier::RunL"));
 
     TBool isCancelKey = EFalse;
+    TBool isErrorQuery = EFalse;
     TInt returnValue = KErrNone;
     // for cover display support
     TInt coverDialogId = EUSBCoverInvalidDialogId;
 
     // Choose text and other query attributes
     //
-    HBufC* stringHolder = GetQueryAttributesLC( coverDialogId, isCancelKey );
+    HBufC* stringHolder = GetQueryAttributesLC( coverDialogId, isCancelKey, isErrorQuery );
 
     //check if query text string loading was successful
     if (NULL != stringHolder)
@@ -177,7 +178,7 @@
         DisableKeylock();
         SuppressAppSwitching( ETrue );
         returnValue = QueryUserResponseL( *stringHolder, coverDialogId,
-                isCancelKey );
+                isCancelKey, isErrorQuery );
         SuppressAppSwitching( EFalse );
         RestoreKeylock();
         CleanupStack::PopAndDestroy( stringHolder );
@@ -219,7 +220,7 @@
 // ----------------------------------------------------------------------------
 //
 TInt CUSBUIQueriesNotifier::QueryUserResponseL(const TDesC& aStringHolder,
-        TInt aCoverDialogId, TBool aIsCancelKey)
+        TInt aCoverDialogId, TBool aIsCancelKey, TBool aIsErrorQuery)
     {
     FLOG(_L("[USBUINOTIF]\t CUSBUIQueriesNotifier::QueryUserResponseL"));
     TInt returnValue = KErrNone;
@@ -228,7 +229,13 @@
 
     // Show dialog with or without the Cancel
     //
-    if (aIsCancelKey)
+    if (aIsErrorQuery) 
+        {
+        // aIsErrorQuery flag is set in GetQueryAttributesLC()
+        // there is no defined QueryDialogError in resources so QueryOTGerror is used (contains Stop icon)
+        iUSBQueryDlg->PrepareLC( R_USB_QUERY_OTG_ERROR );
+        }
+    else if (aIsCancelKey)
         {
         iUSBQueryDlg->PrepareLC( R_USB_QUERY_WITH_CANCEL );
         }
@@ -270,11 +277,12 @@
 // ----------------------------------------------------------------------------
 //
 HBufC* CUSBUIQueriesNotifier::GetQueryAttributesLC(TInt& aCoverDialogId,
-        TBool& aIsCancelKey)
+        TBool& aIsCancelKey, TBool& aIsErrorQuery)
     {
     FLOG(_L("[USBUINOTIF]\t CUSBUIQueriesNotifier::GetQueryAttributesLC"));
     HBufC* stringHolder = NULL; // The text for the query
     aIsCancelKey = EFalse;
+    aIsErrorQuery = EFalse;
     switch (iQueryType)
         {
         case EUSBStorageMediaFailure:
@@ -299,6 +307,15 @@
             stringHolder = StringLoader::LoadLC( R_USB_NO_MEMORY_CARD );
             aCoverDialogId = EUSBCoverNoMemoryCard;
             break;
+            } 
+        case EUSBNotEnoughRam:
+          	{
+            FLOG(_L("[USBUINOTIF]\t CUSBUIQueriesNotifier::EUSBNotEnoughRam"));
+            stringHolder = StringLoader::LoadLC( R_USB_ERROR_MEMORY_NOT_ENOUGH );
+            aCoverDialogId = EUSBCoverNoMemoryCard;
+            //set flag to change the icon of querydialog (see QueryUserResponseL())
+            aIsErrorQuery = ETrue;
+            break;
             }
         default:
             {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/bmarm/usbuinotifapitestu.def	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/bwins/usbuinotifapitestu.def	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/conf/ui_usbuinotifapitest.cfg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,230 @@
+/*
+* 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: Test script config file
+*
+*/
+
+// UsbUiNotifApiTest Module - total 21 tc
+
+// UsbUiNotifApiTest Api Tests (... tc)
+
+// Cable connected notifier tests (3)
+
+[Test]
+title USB Ovi Suite Personality Info (Cable Connected Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock CableConnectedNotifierTest PCSUITEMTP
+pause 4000
+delete tester
+[Endtest]
+	
+[Test]
+title USB MS Personality Info (Cable Connected Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock CableConnectedNotifierTest MS
+pause 4000
+delete tester
+[Endtest] 
+			
+[Test]
+title USB MTP Personality Info (Cable Connected Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock CableConnectedNotifierTest MTP
+pause 4000
+delete tester
+[Endtest]
+
+	
+[Test]
+title USB No Memory Card Query Accepted (USB Queries Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbQueriesNotifierTest EUSBNoMemoryCard
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest]
+
+[Test]
+title USB Storage Media Failure Query Accepted/Device Key Enter Pressed (USB Queries Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbQueriesNotifierTest EUSBStorageMediaFailure
+pause 3000
+presskey global EKeyEnter
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test] 
+title USB Storage Media Failure Query Accepted/Device Key 0 Pressed (USB Queries Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbQueriesNotifierTest EUSBStorageMediaFailure
+pause 1000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title USB Change From Mass Storage Query Accepted/Device Key Enter Pressed (USB Queries Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbQueriesNotifierTest EUSBChangeFromMassStorage
+pause 3000
+presskey global EKeyEnter
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest]
+
+[Test]
+title USB Change From Mass Storage Query Accepted/Device Key 0 Pressed (USB Queries Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbQueriesNotifierTest EUSBChangeFromMassStorage
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title USB Change From Mass Storage Query Cancelled (USB Queries Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbQueriesNotifierTest EUSBChangeFromMassStorage
+pause 3000
+presskey global EKeyDevice1
+tester ExecuteApiTestBlock FinishQuery CANCEL
+delete tester
+[Endtest]  
+
+
+[Test]
+title OTG Error too much power (Otg Error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGErrorNotifierTests EUsbOtgTooMuchPower
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title OTG Error too much power (Otg Error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGErrorNotifierTests EUsbOtgTooMuchPowerRequired
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title OTG Error unsupported device (Otg Error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGErrorNotifierTests EUsbOtgUnsupportedDevice
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title OTG Error Hub not supported device (Otg Error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGErrorNotifierTests EUsbOtgHubUnsupported
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title OTG Error error in connection (Otg Error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGErrorNotifierTests EUsbOtgErrorInConnection
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title OTG Attach timed out (Otg Error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGErrorNotifierTests EUsbOtgErrorAttachTimedOut
+pause 3000
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title OTG Partially supported device (Otg Warning Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbOTGWarningNotifierTests EUsbOtgPartiallySupportedDevice
+pause 500
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title Load and Unload notifiers
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock LoadNotifiers
+pause 500
+tester ExecuteApiTestBlock UnLoadNotifiers
+delete tester
+[Endtest] 
+
+[Test]
+title MSMM error test (MSMM error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbMSMMNotifierTests EUsbMSMMGeneralError
+pause 500
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title MSMM error test (MSMM error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbMSMMNotifierTests EUsbMSMMUnknownFileSystem
+pause 500
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+[Test]
+title MSMM error test (MSMM error Notifier Test)
+create UsbUiNotifApiTest tester
+tester ExecuteApiTestBlock UsbMSMMNotifierTests EUsbMSMMOutOfMemory
+pause 500
+presskey global EKeyDevice0
+tester ExecuteApiTestBlock FinishQuery ACCEPT
+delete tester
+[Endtest] 
+
+// Add new api tests here
+// ...
+
+
+// UsbUiNotifApiTest Module Tests (... tc)
+
+// Add new module tests here
+// ...
+
+
+// UsbUiNotifApiTest Branch Tests (... tc)
+
+// Add new branch tests here
+// ...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/eabi/usbuinotifapitestu.def	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/group/bld.inf	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,32 @@
+/*
+* 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: Build file
+*
+*/
+
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_TESTEXPORTS
+
+PRJ_EXPORTS
+
+PRJ_TESTMMPFILES
+usbuinotifapitest.mmp
+
+PRJ_MMPFILES
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/group/build_sis_ats.bat	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,22 @@
+@rem
+@rem Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: Test script config file
+@rem
+@rem
+
+
+call bldmake bldfiles
+call abld test build armv5
+call makesis usbuinotifapitest.pkg
+call signsis usbuinotifapitest.sis usbuinotifapitest.sisx x:\rd.cer x:\rd-key.pem
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/group/build_sis_phone.bat	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,24 @@
+@rem
+@rem Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: Test script config file
+@rem
+@rem
+
+rd /q /s x:\epoc32\BUILD
+
+call bldmake bldfiles
+call abld test build armv5
+call makesis usbuinotifapitest_phone.pkg
+call signsis usbuinotifapitest_phone.sis usbuinotifapitest_phone.sisx x:\rd.cer x:\rd-key.pem
+call pause
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/group/usbuinotifapitest.mmp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,51 @@
+/*
+* 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:  TYPE TESTSCRIPT
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          usbuinotifapitest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+
+DEFFILE         usbuinotifapitest.def
+
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE	../inc 
+USERINCLUDE	../../../inc
+
+SOURCEPATH      ../src
+SOURCE          usbuinotifapitest.cpp
+SOURCE          usbuinotifapitestblocks.cpp
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         stiftestengine.lib
+LIBRARY 		centralrepository.lib
+LIBRARY 		usbman.lib
+LIBRARY 		usbwatcher.lib
+LIBRARY     	ecom.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/group/usbuinotifapitest.pkg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,62 @@
+;
+; 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:  
+;
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 5.2
+[0x20022E6D], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"/epoc32/release/armv5/udeb/usbuinotifapitest.dll"-"c:/sys/bin/usbuinotifapitest.dll"
+
+"../init/usbuinotifapitest.ini"-"e:/testing/init/usbuinotifapitest.ini"
+"../conf/ui_usbuinotifapitest.cfg"-"e:/testing/conf/ui_usbuinotifapitest.cfg"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/group/usbuinotifapitest_phone.pkg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,62 @@
+;
+; 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:  
+;
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 5.2
+[0x20022E6D], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"/epoc32/release/armv5/udeb/usbuinotifapitest.dll"-"c:/sys/bin/usbuinotifapitest.dll"
+
+"../init/usbuinotifapitest_phone.ini"-"c:/testframework/testframework.ini"
+"../conf/ui_usbuinotifapitest.cfg"-"c:/testframework/ui_usbuinotifapitest.cfg"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/inc/usbuinotifapitest.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,273 @@
+/*
+* 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:  
+*
+*/
+
+
+
+
+#ifndef USBUINOTIFAPITEST_H
+#define USBUINOTIFAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+
+#include <usbuinotif.h>
+#include <usbpersonalityids.h>
+#include <centralrepository.h>
+#include <UsbWatcherInternalCRKeys.h>
+#include <usbman.h>
+#include <usbwatcher.h>
+#include <usb/hostms/srverr.h> 
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+// Logging path
+//_LIT( KUsbUiNotifApiTestLogPath, "\\logs\\testframework\\UsbUiNotifApiTest\\" );
+
+// Logging path for ATS - for phone builds comment this line
+_LIT( KUsbUiNotifApiTestLogPath, "e:\\testing\\stiflogs\\" ); 
+
+// Log file
+_LIT( KUsbUiNotifApiTestLogFile, "UsbUiNotifApiTest.txt" ); 
+_LIT( KUsbUiNotifApiTestLogFileWithTitle, "UsbUiNotifApiTest_[%S].txt" );
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+class CUsbUiNotifApiTest;
+
+// DATA TYPES
+//enum ?declaration
+
+enum TUsbUiNotifApiTestResult
+    {
+    ETestCasePassed,
+    ETestCaseFailed
+    };
+
+enum TTestOption
+    {
+    EQueryDiscarded = 0,
+    EQueryAccepted,
+    EQueryCanceled
+    };
+//typedef ?declaration
+//extern ?data_type;
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS( TUsbUiNotifApiTestBlockParams )
+    {
+    public:
+        TPtrC iTestBlockName;
+        
+        TPtrC iTestOption1;
+        TPtrC iTestOption2;
+        TPtrC iTestOption3;
+        
+        TInt iTestIntOption1;
+        TInt iTestIntOption2;
+        
+        TChar iTestCharOption1;
+        TChar iTestCharOption2;
+    };
+
+/**
+*  CUsbUiNotifApiTest test class for STIF Test Framework TestScripter.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since ?Series60_version
+*/
+NONSHARABLE_CLASS( CUsbUiNotifApiTest ) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CUsbUiNotifApiTest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CUsbUiNotifApiTest();
+
+    public: // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+    protected:  // New functions
+
+        /**
+        * ?member_description.
+        * @since ?Series60_version
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        //?type ?member_function( ?type ?arg1 );
+
+    protected:  // Functions from base classes
+
+        /**
+        * From ?base_class ?member_description
+        */
+        //?type ?member_function();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CUsbUiNotifApiTest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // ?classname( const ?classname& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // ?classname& operator=( const ?classname& );
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+
+        /**
+        * Test methods are listed below. 
+        */
+
+        virtual TInt ExecuteApiTestBlock( CStifItemParser& aItem );
+        virtual TInt ExecuteModuleTestBlock( CStifItemParser& aItem );
+        virtual TInt ExecuteBranchTestBlock( CStifItemParser& aItem );
+        
+        
+        
+        /**
+         * Method used to log version of test class
+         */
+        void SendTestClassVersion();
+
+        //ADD NEW METHOD DEC HERE
+        //[TestMethods] - Do not remove
+
+        void GetTestBlockParamsL( CStifItemParser& aItem );
+        
+    	void DoExecuteApiTestBlockL( CStifItemParser& aItem, TUsbUiNotifApiTestResult& aTestResult );    	
+    	void DoExecuteModuleTestBlockL( CStifItemParser& aItem, TUsbUiNotifApiTestResult& aTestResult );    
+    	void DoExecuteBranchTestBlockL( CStifItemParser& aItem, TUsbUiNotifApiTestResult& aTestResult );
+    	
+        void ExampleTestL( TPtrC aTestOption, TPtrC aTestSubOption, 
+                 TInt aTestIntOption, TInt aTestCharOption, TUsbUiNotifApiTestResult& aTestResult );
+
+        void CableConnectedNotifierTest( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        void ConnectionNotifierTest( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        void UsbQueriesNotifierTest( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        void UsbOTGErrorNotifierTests( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        void UsbOTGWarningNotifierTests( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        TInt FinishQuery( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        void LoadNotifiersL( TUsbUiNotifApiTestResult& aTestResult );
+        void UnLoadNotifiers ( TUsbUiNotifApiTestResult& aTestResult );
+        void Update( TUsbUiNotifApiTestResult& aTestResult );
+        //void Cancelnotifier( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult ); 
+        void Notifierstart( TUsbUiNotifApiTestResult& aTestResult );
+        //void AsyncConnectionNotifier ( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+        void UsbMSMMNotifierTests ( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult );
+
+        TInt GetTestOption( TPtrC aOptionString, TTestOption& aOption );
+        TInt GetPersonalityIdFromString( TPtrC aOptionString, TInt& aPersonalityId );
+        TInt GetQueryType( TPtrC aTypeString, TUSBUIQueries& aQueryType );        
+        TInt GetOTGErrorType( TPtrC aTypeString, TUsbUiNotifOtgError& aQueryType );
+        TInt GetOTGWarningType( TPtrC aTypeString, TUsbUiNotifOtgWarning& aQueryType );
+        TInt GetMSMMrrorType( TPtrC aTypeString, THostMsErrCode& aQueryType );
+
+        inline void Trace(TRefByValue<const TDesC8> aFmt, ...);
+        inline void Trace(TRefByValue<const TDesC16> aFmt, ...);
+	
+    public:     // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+    protected:  // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+
+    private:    // Data
+        TUsbUiNotifApiTestBlockParams iTestBlockParams;
+
+        RNotifier *iNotifier;
+        RUsbWatcher* iUsbWatcher;
+ 
+        CRepository* iRepository;
+        
+        TUSBConnectionNotifierParamsPckg iConnectionNotifierResponseParamsPckg;
+        TRequestStatus iReqStatus;
+        TInt iPersonalityIdBackup;
+        TBool iCompleteQuery;        
+        TPckg<TInt> iRes;
+        CArrayPtr<MEikSrvNotifierBase2>* iNotifierArray;
+        TUid iInstanceUid;
+        THostMsErrData iErrData;
+        THostMsErrorDataPckg iErrPckg ;
+
+        // Reserved pointer for future extension
+        //TAny* iReserved;
+
+    public:     // Friend classes
+        //?friend_class_declaration;
+    protected:  // Friend classes
+        //?friend_class_declaration;
+    private:    // Friend classes
+        //?friend_class_declaration;
+        
+    };
+
+#include "UsbUiNotifApiTestDebug.inl"
+
+#endif      // USBUINOTIFAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/inc/usbuinotifapitestdebug.inl	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,72 @@
+/*
+* 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 <e32debug.h>
+
+NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow
+    {
+public:
+    void Overflow(TDes8& /*aDes*/) {}
+    }; 
+
+NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow
+    {
+public:
+    void Overflow(TDes16& /*aDes*/) {}
+    };
+
+
+_LIT8(KStifTestPrefix8, "[STIF_LOG] ");
+_LIT(KStifTestPrefix, "[STIF_LOG] ");
+
+const TInt KMaxLogLineLength = 512;
+
+#define TRACE_INFO(p) { Trace p; }
+
+void CUsbUiNotifApiTest::Trace(TRefByValue<const TDesC8> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list, aFmt);
+	TOverflowTruncate8 overflow;        
+	RBuf8 buf8;
+	buf8.Create( KMaxLogLineLength );
+	buf8.Append( KStifTestPrefix8 );
+	buf8.AppendFormatList(aFmt, list, &overflow);
+			
+	RBuf16 buf16;
+	buf16.Create( KMaxLogLineLength );
+	buf16.Copy(buf8);    
+	TRefByValue<const TDesC> tmpFmt(_L("%S"));
+	RDebug::Print(tmpFmt, &buf16);
+	iLog->Log(tmpFmt, &buf16);
+	buf8.Close();         
+	buf16.Close();
+	};
+
+void CUsbUiNotifApiTest::Trace(TRefByValue<const TDesC16> aFmt, ...)
+	{
+	VA_LIST list;
+	VA_START(list,aFmt);
+	RBuf16 theFinalString;
+	theFinalString.Create( KMaxLogLineLength );
+	theFinalString.Append( KStifTestPrefix );
+	TOverflowTruncate16 overflow;
+	theFinalString.AppendFormatList(aFmt,list,&overflow);
+	RDebug::Print(theFinalString);
+	iLog->Log(theFinalString);
+	theFinalString.Close(); 
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/init/usbuinotifapitest.ini	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,235 @@
+#
+# 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:  
+#
+#
+
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#   + XML, Test report will be xml type, for example 'TestReport.xml'.
+#          Note, that xml format is available only when output is set to FILE.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                                                     'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= e:\testing\logs\
+TestReportFileName= UsbUiNotifApiTest_TestReport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= UsbUiNotifApiTestUsbUiNotifApiTestUsbUiNotifApiTest
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= e:\testing\conf\ui_USBUiNotifApiTest.cfg
+[End_Module]
+
+
+# Load testmoduleUsbUiNotifApiTest, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleUsbUiNotifApiTest used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleUsbUiNotifApiTest used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES    # Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set filters to be used by ConsoleUI.
+# 	If you want to use filter with ConsoleUI, simply remove comments
+# 	from section below and provide valid filter entries.
+#   Each filter line has to start with "filter= " keyword.
+#   Filter can contain special wildcard characters:
+#     *  which stands for none or any literal;
+#     ?  which stands for single character.
+#   Filters are not case-sensitive.
+
+#[Filters]
+#filter= *math*
+#filter= *radio*
+#[End_Filters]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/init/usbuinotifapitest_phone.ini	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,235 @@
+#
+# 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:  
+#
+#
+
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#   + XML, Test report will be xml type, for example 'TestReport.xml'.
+#          Note, that xml format is available only when output is set to FILE.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                                                     'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= c:\logs\testframework\UsbUiNotifApiTest\
+TestReportFileName= testreport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= UsbUiNotifApiTestUsbUiNotifApiTestUsbUiNotifApiTest
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\ui_UsbUiNotifApiTest.cfg
+[End_Module]
+
+
+# Load testmoduleUsbUiNotifApiTest, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleUsbUiNotifApiTest used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleUsbUiNotifApiTest used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+#CreateLogDirectories= YES    # Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set filters to be used by ConsoleUI.
+# 	If you want to use filter with ConsoleUI, simply remove comments
+# 	from section below and provide valid filter entries.
+#   Each filter line has to start with "filter= " keyword.
+#   Filter can contain special wildcard characters:
+#     *  which stands for none or any literal;
+#     ?  which stands for single character.
+#   Filters are not case-sensitive.
+
+#[Filters]
+#filter= *math*
+#filter= *radio*
+#[End_Filters]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/src/usbuinotifapitest.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,207 @@
+/*
+* 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 FILES
+#include <Stiftestinterface.h>
+#include "UsbUiNotifApiTest.h"
+#include <SettingServerClient.h>
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::CUsbUiNotifApiTest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CUsbUiNotifApiTest::CUsbUiNotifApiTest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf ),
+        iRes(0)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CUsbUiNotifApiTest::ConstructL()
+    {
+    //Read logger settings to check whether test case name is to be
+    //appended to log file name.
+    RSettingServer settingServer;
+    TInt ret = settingServer.Connect();
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        }
+    // Struct to StifLogger settigs.
+    TLoggerSettings loggerSettings; 
+    // Parse StifLogger defaults from STIF initialization file.
+    ret = settingServer.GetLoggerSettings(loggerSettings);
+    if(ret != KErrNone)
+        {
+        User::Leave(ret);
+        } 
+    // Close Setting server session
+    settingServer.Close();
+
+    TFileName logFileName;
+    
+    if(loggerSettings.iAddTestCaseTitle)
+        {
+        TName title;
+        TestModuleIf().GetTestCaseTitleL(title);
+        logFileName.Format(KUsbUiNotifApiTestLogFileWithTitle, &title);
+        }
+    else
+        {
+        logFileName.Copy(KUsbUiNotifApiTestLogFile);
+        }
+
+    iLog = CStifLogger::NewL( KUsbUiNotifApiTestLogPath, 
+                          logFileName,
+                          CStifLogger::ETxt,
+                          CStifLogger::EFile,
+                          EFalse );
+    
+    SendTestClassVersion();
+
+    iNotifier = new ( ELeave ) RNotifier();
+    iUsbWatcher = new ( ELeave ) RUsbWatcher();
+    iRepository = CRepository::NewL( KCRUidUsbWatcher );
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CUsbUiNotifApiTest* CUsbUiNotifApiTest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CUsbUiNotifApiTest* self = new (ELeave) CUsbUiNotifApiTest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CUsbUiNotifApiTest::~CUsbUiNotifApiTest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iLog; 
+
+    }
+
+//-----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CUsbUiNotifApiTest::SendTestClassVersion()
+	{
+	TVersion moduleVersion;
+	moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+	moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+	moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+	
+	TFileName moduleName;
+	moduleName = _L("UsbUiNotifApiTest.dll");
+
+	TBool newVersionOfMethod = ETrue;
+	TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
+	}
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CUsbUiNotifApiTest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuinotif/tsrc/usbuinotifapitest/src/usbuinotifapitestblocks.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,976 @@
+/*
+* 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 FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <ecom/ecom.h>
+#include <Stiftestinterface.h>
+#include "UsbUiNotifApiTest.h"
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CUsbUiNotifApiTest::Delete() 
+	{
+    iNotifier -> Close();
+    delete iNotifier;
+    iNotifier = NULL;
+    iUsbWatcher -> Close();
+    delete iUsbWatcher;
+    iUsbWatcher = NULL;
+    delete iRepository;
+    iRepository = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CUsbUiNotifApiTest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+		ENTRY( "ExecuteApiTestBlock", CUsbUiNotifApiTest::ExecuteApiTestBlock ),
+        ENTRY( "ExecuteModuleTestBlock", CUsbUiNotifApiTest::ExecuteModuleTestBlock ),
+        ENTRY( "ExecuteBranchTestBlock", CUsbUiNotifApiTest::ExecuteBranchTestBlock ),
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetTestBlockParamsL
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::GetTestBlockParamsL( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>> GetTestBlockParamsL") );
+    
+    // Add new test block branches below, get all required test parameters    
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {              
+        User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption1 ) );        
+        User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );
+        User::LeaveIfError( aItem.GetNextInt( iTestBlockParams.iTestIntOption1 ) );        
+        User::LeaveIfError( aItem.GetNextChar( iTestBlockParams.iTestCharOption1 ) );        
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CableConnectedNotifierTest" ) ) )
+		{                      
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );       
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbQueriesNotifierTest" ) ) )
+		{                      
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );       
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FinishQuery" ) ) )
+		{                      
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );       
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbOTGErrorNotifierTests" ) ) )
+		{                      
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );       
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbOTGWarningNotifierTests" ) ) )
+		{                      
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );       
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "LoadNotifiers" ) ) )
+		{                           
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UnLoadNotifiers" ) ) )
+		{                      
+		}
+	else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbMSMMNotifierTests" ) ) )
+		{                      
+		User::LeaveIfError( aItem.GetNextString( iTestBlockParams.iTestOption2 ) );       
+		}
+    else
+        {
+        TRACE_INFO( _L("GetTestBlockParamsL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+    TRACE_INFO( _L("<<< GetTestBlockParamsL") );
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::ExecuteApiTestBlock
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::ExecuteApiTestBlock( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>> ExecuteApiTestBlock") );
+	
+	TInt res;
+    TUsbUiNotifApiTestResult testResult = ETestCaseFailed;
+	
+    TRAP( res, DoExecuteApiTestBlockL( aItem, testResult ) );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("DoExecuteApiTestBlockL error: %d"), res) );
+        return res;
+        }
+    
+    STIF_ASSERT_EQUALS( ETestCasePassed, testResult );
+    TRACE_INFO( _L("Test case passed") );
+    
+    TRACE_INFO( _L("<<< ExecuteApiTestBlock") );
+	
+    return KErrNone;
+    }
+	
+	
+void CUsbUiNotifApiTest::DoExecuteApiTestBlockL( CStifItemParser& aItem, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>DoExecuteApiTestBlockL") );
+
+	User::LeaveIfError( aItem.GetString( _L( "ExecuteApiTestBlock" ), iTestBlockParams.iTestBlockName ) );
+        TRACE_INFO( (_L("Api test type: %S"), &iTestBlockParams.iTestBlockName) );
+	
+	GetTestBlockParamsL( aItem );
+	
+	// Add new API test block branches with optional test parameters here	
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {      
+        ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, 
+                iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult );
+        }	
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "CableConnectedNotifierTest" ) ) )
+        {      
+        CableConnectedNotifierTest( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbQueriesNotifierTest" ) ) )
+        {      
+        UsbQueriesNotifierTest( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "FinishQuery" ) ) )
+        {      
+        FinishQuery( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbQueriesNotifierTest" ) ) )
+        {      
+        UsbQueriesNotifierTest( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbQueriesNotifierTest" ) ) )
+        {      
+        UsbQueriesNotifierTest( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbQueriesNotifierTest" ) ) )
+        {      
+        UsbQueriesNotifierTest( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbOTGErrorNotifierTests" ) ) )
+        {      
+        UsbOTGErrorNotifierTests( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbOTGWarningNotifierTests" ) ) )
+        {      
+        UsbOTGWarningNotifierTests( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "LoadNotifiers" ) ) )
+        {      
+        LoadNotifiersL( aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UnLoadNotifiers" ) ) )
+        {      
+        UnLoadNotifiers( aTestResult );
+        }
+    else if ( !iTestBlockParams.iTestBlockName.Compare( _L( "UsbMSMMNotifierTests" ) ) )
+        {      
+        UsbMSMMNotifierTests( iTestBlockParams.iTestOption2, aTestResult );
+        }
+    else
+        {
+    TRACE_INFO( _L("DoExecuteApiTestBlockL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+	
+    TRACE_INFO( _L("<<<DoExecuteApiTestBlockL") );
+    }
+	
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::ExecuteModuleTestBlock
+// -----------------------------------------------------------------------------	
+
+TInt CUsbUiNotifApiTest::ExecuteModuleTestBlock( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>>ExecuteModuleTestBlock") );
+	
+    TInt res;
+    TUsbUiNotifApiTestResult testResult;
+    
+    TRAP( res, DoExecuteModuleTestBlockL( aItem, testResult ) );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("DoExecuteModuleTestBlockL error: %d"), res) );
+        return res;
+        }
+    
+    STIF_ASSERT_EQUALS( ETestCasePassed, testResult );
+    TRACE_INFO( _L("Test case passed") );
+    TRACE_INFO( _L("<<<ExecuteModuleTestBlock") );
+    return KErrNone;
+    }	
+	
+	
+void CUsbUiNotifApiTest::DoExecuteModuleTestBlockL( CStifItemParser& aItem, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>DoExecuteModuleTestBlockL") );
+	
+    User::LeaveIfError( aItem.GetString( _L( "ExecuteModuleTestBlock" ), iTestBlockParams.iTestBlockName ) );
+    TRACE_INFO( (_L("Module test type: %S"), &iTestBlockParams.iTestBlockName) );
+    
+    GetTestBlockParamsL( aItem );
+    
+    // Add new module test block branches with optional test parameters here   
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {      
+        ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, 
+                iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult );
+        }
+    else
+        {
+    TRACE_INFO( _L("DoExecuteModuleTestBlockL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+    
+    TRACE_INFO( _L("<<<DoExecuteModuleTestBlockL") );
+    }
+	
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::ExecuteBranchTestBlock
+// -----------------------------------------------------------------------------
+	
+TInt CUsbUiNotifApiTest::ExecuteBranchTestBlock( CStifItemParser& aItem )
+    {
+    TRACE_INFO( _L(">>>ExecuteBranchTestBlock") );
+	
+    TInt res;
+    TUsbUiNotifApiTestResult testResult;
+    
+    TRAP( res, DoExecuteBranchTestBlockL( aItem, testResult ) );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO( (_L("DoExecuteBranchTestBlockL error: %d"), res) );
+        return res;
+        }   
+    
+    STIF_ASSERT_EQUALS( ETestCasePassed, testResult );
+    TRACE_INFO( _L("Test case passed") );
+    TRACE_INFO( _L("<<<ExecuteBranchTestBlock") );
+    return KErrNone;
+    }
+
+	
+void CUsbUiNotifApiTest::DoExecuteBranchTestBlockL( CStifItemParser& aItem, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>DoExecuteBranchTestBlockL") );
+	
+    User::LeaveIfError( aItem.GetString( _L( "ExecuteBranchTestBlock" ), iTestBlockParams.iTestBlockName ) );
+    TRACE_INFO( (_L("Branch test type: %S"), &iTestBlockParams.iTestBlockName) );
+    
+    GetTestBlockParamsL( aItem );
+    
+    // Add new branch test block branches with optional test parameters here   
+    if ( !iTestBlockParams.iTestBlockName.Compare( _L( "ExampleTestL" ) ) )
+        {      
+        ExampleTestL( iTestBlockParams.iTestOption1, iTestBlockParams.iTestOption2, 
+                iTestBlockParams.iTestIntOption1, iTestBlockParams.iTestCharOption1, aTestResult );
+        }
+    else
+        {
+    TRACE_INFO( _L("DoExecuteBranchTestBlockL() Test type: not found") );
+        User::Leave( KErrNotFound );
+        }
+    
+    TRACE_INFO( _L("<<<DoExecuteBranchTestBlockL") );
+    }
+
+// Add test block methods implementation here
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::ExampleTestL
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::ExampleTestL( TPtrC aTestOption, TPtrC aTestSubOption, 
+        TInt aTestIntOption, TInt aTestCharOption, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO( _L(">>>ExampleTestL") );
+    
+    if ( !aTestOption.Compare( _L( "API" ) ) )
+        {
+    TRACE_INFO( (_L("Api test option: %S"), &aTestOption) );
+    TRACE_INFO( (_L("Api test sub-option: %S"), &aTestSubOption) );
+    TRACE_INFO( (_L("Api test int option: %d"), aTestIntOption) );
+    TRACE_INFO( (_L("Api test char option: %c"), aTestCharOption) );
+        }
+    else if ( !aTestOption.Compare( _L( "MODULE" ) ) )
+        {
+    TRACE_INFO( (_L("Module test option: %S"), &aTestOption) );
+    TRACE_INFO( (_L("Module test sub-option: %S"), &aTestSubOption) );
+    TRACE_INFO( (_L("Module test int option: %d"), aTestIntOption) );
+    TRACE_INFO( (_L("Module test char option: %c"), aTestCharOption) );
+        }
+    else if ( !aTestOption.Compare( _L( "BRANCH" ) ) )
+        {
+    TRACE_INFO( (_L("Branch test option: %S"), &aTestOption) );
+    TRACE_INFO( (_L("Branch test sub-option: %S"), &aTestSubOption) );
+    TRACE_INFO( (_L("Branch test int option: %d"), aTestIntOption) );
+    TRACE_INFO( (_L("Branch test char option: %c"), aTestCharOption) );
+        }
+    else
+        {
+        TRACE_INFO( _L("Invalid test parameter") );
+        User::Leave( KErrNotFound );
+        }
+    
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO( _L("<<<ExampleTestL") );
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::CableConnectedNotifierTest
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::CableConnectedNotifierTest( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>CableConnectedNotifierTest") );
+    
+    TInt res;
+    TUSBConnectionNotifierParamsPckg emptyNotifierInputPckg;
+    TPtrC displayedUsbPersonalityName( KNullDesC );
+    TInt displayedUsbPersonalityId;
+    
+    res = GetPersonalityIdFromString( aTestSubOption, displayedUsbPersonalityId );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("GetPersonalityIdFromString failed with value: %d"), res) );
+        return;
+        }
+    
+    res = iRepository -> Get( KUsbWatcherPersonality, iPersonalityIdBackup );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Personality backup failed with value (cenrep): %d"), res) );
+        return;
+        }
+    
+    res = iUsbWatcher -> Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to connect UsbWatcher with value: %d"), res) );
+        return;
+        }   
+    TRACE_INFO(  _L("UsbWatcher connected") );
+        
+    iUsbWatcher -> SetPersonality( iReqStatus, displayedUsbPersonalityId, ETrue, ETrue );
+    User::WaitForRequest( iReqStatus );
+    if ( iReqStatus.Int() != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to set usb personality with value: %d"), iReqStatus.Int()) );
+        iUsbWatcher -> Close();
+        return;
+        }   
+    
+    res = iNotifier -> Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to connect RNotifier with value: %d"), res) );
+        iUsbWatcher -> Close();
+        return;
+        }   
+    TRACE_INFO(  _L("RNotifier connected") );
+
+    iNotifier -> StartNotifierAndGetResponse( iReqStatus, KCableConnectedNotifierUid, emptyNotifierInputPckg, iConnectionNotifierResponseParamsPckg );    
+    User::WaitForRequest( iReqStatus );
+    
+    TRACE_INFO((_L("StartNotifierAndGetResponse Status: %d, expected: %d"), iReqStatus.Int(), KErrCancel));
+    if(iReqStatus.Int() == KErrCancel)
+    	aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<CableConnectedNotifierTest") );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::UsbQueriesNotifierTest
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::UsbQueriesNotifierTest( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>UsbQueriesNotifierTest") );
+    TInt res;    
+    TUSBUIQueries usbQueryType;
+    
+    
+    res = GetQueryType( aTestSubOption, usbQueryType );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("GetQueryType failed with value: %d"), res) );
+        return;
+        }
+    
+    TUSBQueriesNotiferParams notifierParams;
+    notifierParams.iDrive = 'c';
+    notifierParams.iQuery = usbQueryType;
+    TUSBQueriesNotifierParamsPckg notifierParamsPckg( notifierParams );
+    TPckgBuf<TBool> output;
+    
+    res = iNotifier -> Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to connect RNotifier with value: %d"), res) );
+        return;
+        }   
+    TRACE_INFO(  _L("RNotifier connected") );
+    
+    switch( usbQueryType )
+        {
+        case EUSBNoMemoryCard:
+            iCompleteQuery = ETrue;
+            break;
+        case EUSBStorageMediaFailure:
+        case EUSBChangeFromMassStorage:
+            iCompleteQuery = EFalse;
+            break;
+        default:
+            break; 
+        }
+    
+    iNotifier -> StartNotifierAndGetResponse( iReqStatus, KQueriesNotifier, notifierParamsPckg, output ); 
+
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<UsbQueriesNotifierTest") );
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::UsbOTGErrorNotifierTests
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::UsbOTGErrorNotifierTests( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>UsbOTGErrorNotifierTests") );
+    
+    TInt res;    
+    TUsbUiNotifOtgError usbOTGErrorType;
+        
+    res = GetOTGErrorType( aTestSubOption, usbOTGErrorType );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("usbOTGErrorType failed with value: %d"), res) );
+        return;
+        }    
+    
+    res = iNotifier -> Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to connect RNotifier with value: %d"), res) );
+        return;
+        }   
+    TRACE_INFO(  _L("RNotifier connected") );
+    
+    TPckgBuf<TInt> notifierParamsPckg;
+    notifierParamsPckg() = usbOTGErrorType;
+    iCompleteQuery = EFalse;
+
+    iNotifier -> StartNotifierAndGetResponse( iReqStatus, KUsbUiNotifOtgError, notifierParamsPckg, iRes ); 
+
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<UsbOTGErrorNotifierTests") );
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::UsbOTGWarningNotifierTests
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::UsbOTGWarningNotifierTests( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult )
+    {        
+    TRACE_INFO(  _L(">>>UsbOTGWarningNotifierTests") );
+    
+    TInt res;    
+    TUsbUiNotifOtgWarning usbOTGWarningType;
+    
+    
+    res = GetOTGWarningType( aTestSubOption, usbOTGWarningType );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("usbOTGErrorType failed with value: %d"), res) );
+        return;
+        }    
+    
+    res = iNotifier -> Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to connect RNotifier with value: %d"), res) );
+        return;
+        }   
+    TRACE_INFO(  _L("RNotifier connected") );
+    
+    TPckgBuf<TInt> notifierParamsPckg;
+    notifierParamsPckg() = usbOTGWarningType;
+    iCompleteQuery = EFalse;
+
+    iNotifier -> StartNotifierAndGetResponse( iReqStatus, KUsbUiNotifOtgWarning, notifierParamsPckg, iRes ); 
+
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<UsbOTGWarningNotifierTests") ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::UsbMSMMNotifierTests
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::UsbMSMMNotifierTests( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult )
+    {        
+    TRACE_INFO(  _L(">>>UsbMSMMNotifierTests") );
+    
+    TInt res;    
+    THostMsErrCode usbMSMMNErrorType;
+    
+    res = GetMSMMrrorType( aTestSubOption, usbMSMMNErrorType );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("MSMMrrorType failed with value: %d"), res) );
+        return;
+        }    
+    iErrData.iError=usbMSMMNErrorType;
+    iErrPckg = iErrData;
+    res = iNotifier -> Connect();
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("Failed to connect RNotifier with value: %d"), res) );
+        return;
+        }   
+    TRACE_INFO(  _L("RNotifier connected") );
+    
+    TPckgBuf<TInt> notifierParamsPckg;
+    notifierParamsPckg() = usbMSMMNErrorType;
+    iCompleteQuery = EFalse;
+
+    iNotifier -> StartNotifierAndGetResponse( iReqStatus, KUsbUiNotifMsmmError, iErrPckg, iRes ); 
+
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<UsbMSMMNotifierTests") ); 
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::FinishQuery
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::FinishQuery( TPtrC aTestSubOption, TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>FinishQuery") ); 
+    
+    TInt res;
+    TTestOption option;
+    
+    if ( iCompleteQuery )
+        {
+        TRequestStatus* statPtr = &iReqStatus;
+        User::RequestComplete( statPtr, KErrNone );
+        }    
+    
+    res = GetTestOption( aTestSubOption, option );
+    if ( res != KErrNone )
+        {
+        TRACE_INFO(  (_L("GetTestOption failed with value: %d"), res) );
+        iNotifier -> Close();
+        return res;
+        }
+    
+    User::WaitForRequest( iReqStatus );   
+    iNotifier -> Close();
+    
+    switch( option )
+        {
+        case EQueryAccepted:
+            TRACE_INFO(  (_L("Request status value: %d, expected: %d"), iReqStatus.Int(), KErrNone) );
+            STIF_ASSERT_EQUALS( KErrNone, iReqStatus.Int() );
+            break;
+        case EQueryCanceled:
+            TRACE_INFO(  (_L("Request status value: %d, expected: %d"), iReqStatus.Int(), KErrCancel) );
+            STIF_ASSERT_EQUALS( KErrCancel, iReqStatus.Int() );
+            break;
+        default:
+            return KErrNotFound;
+        }
+    
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<FinishQuery") ); 
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::LoadNotifiersL
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::LoadNotifiersL( TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>LoadNotifiersL") );
+    
+    iNotifierArray = reinterpret_cast<CArrayPtr<MEikSrvNotifierBase2>*>(
+												REComSession::CreateImplementationL(TUid::Uid(0x10281F23), iInstanceUid));
+
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<LoadNotifiersL") ); 	
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::UnLoadNotifiers
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::UnLoadNotifiers ( TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>UnLoadNotifiers") );
+    
+    TInt count = iNotifierArray->Count();
+    TInt i=0;
+    for (i=0; i<count; i++)
+        {
+        iNotifierArray->At(i)->Release();        
+        }
+    iNotifierArray->Reset();    
+    delete iNotifierArray;
+    REComSession::DestroyedImplementation(iInstanceUid);    
+
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<UnLoadNotifiers") ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::Update
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::Update( TUsbUiNotifApiTestResult& aTestResult  )
+    {
+    TRACE_INFO(  _L(">>>Update") );
+    TInt count = iNotifierArray->Count();
+    TInt i=0;    
+    _LIT8(test, "test");
+    TBuf8<32> buf(test);
+    for (i=0; i<count; i++)
+        {
+        iNotifierArray->At(i)->UpdateL(buf);        
+        }    
+    
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<Update") );
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::Notifierstart
+// -----------------------------------------------------------------------------
+
+void CUsbUiNotifApiTest::Notifierstart( TUsbUiNotifApiTestResult& aTestResult )
+    {
+    TRACE_INFO(  _L(">>>Notifierstart") );
+    TInt count = iNotifierArray->Count();
+    TInt i=0;    
+    _LIT8(test, "test");
+    TBuf8<32> buf(test);
+    for (i=0; i<count; i++)
+        {
+        iNotifierArray->At(i)->StartL(buf);        
+        }
+    
+    aTestResult = ETestCasePassed;
+    
+    TRACE_INFO(  _L("<<<Notifierstart") );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetQueryType
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::GetQueryType( TPtrC aTypeString, TUSBUIQueries& aQueryType )
+    {
+    TRACE_INFO(  _L(">>>GetQueryType") );
+    if ( !aTypeString.Compare( _L( "EUSBNoMemoryCard" ) ) )
+        {
+        aQueryType = EUSBNoMemoryCard;
+        TRACE_INFO(  _L("Query type: EUSBNoMemoryCard") );
+        }
+    else if ( !aTypeString.Compare( _L( "EUSBStorageMediaFailure" ) ) )
+        {
+        aQueryType = EUSBStorageMediaFailure;
+        TRACE_INFO(  _L("Query type: EUSBStorageMediaFailure") );
+        }
+    else if ( !aTypeString.Compare( _L( "EUSBChangeFromMassStorage" ) ) )
+        {
+        aQueryType = EUSBChangeFromMassStorage;
+        TRACE_INFO(  _L("Query type: EUSBChangeFromMassStorage") );
+        }    
+    else
+        {
+        TRACE_INFO(  _L("Query type: not supported") );
+        return KErrNotFound;
+        }
+    TRACE_INFO(  _L("<<<GetQueryType") );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetOTGErrorType
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::GetOTGErrorType( TPtrC aTypeString, TUsbUiNotifOtgError& aQueryType )
+    {
+    TRACE_INFO(  _L(">>>GetOTGErrorType") );
+    
+    if ( !aTypeString.Compare( _L( "EUsbOtgTooMuchPower" ) ) )
+        {
+        aQueryType = EUsbOtgTooMuchPower;
+        TRACE_INFO(  _L("Query type: EUsbOtgTooMuchPower") );
+        }    
+    else if ( !aTypeString.Compare( _L( "EUsbOtgTooMuchPowerRequired" ) ) )
+        {
+        aQueryType = EUsbOtgTooMuchPowerRequired;
+        TRACE_INFO(  _L("Query type: EUsbOtgTooMuchPowerRequired") );
+        }    
+    else if ( !aTypeString.Compare( _L( "EUsbOtgUnsupportedDevice" ) ) )
+        {
+        aQueryType = EUsbOtgUnsupportedDevice;
+        TRACE_INFO(  _L("Query type: EUsbOtgUnsupportedDevice") );
+        }        
+    else if ( !aTypeString.Compare( _L( "EUsbOtgHubUnsupported" ) ) )
+        {
+        aQueryType = EUsbOtgHubUnsupported;
+        TRACE_INFO(  _L("Query type: EUsbOtgHubUnsupported") );
+        }            
+    else if ( !aTypeString.Compare( _L( "EUsbOtgErrorInConnection" ) ) )
+        {
+        aQueryType = EUsbOtgErrorInConnection;
+        TRACE_INFO(  _L("Query type: EUsbOtgErrorInConnection") );
+        }                
+    else if ( !aTypeString.Compare( _L( "EUsbOtgErrorAttachTimedOut" ) ) )
+        {
+        aQueryType = EUsbOtgErrorAttachTimedOut;
+        TRACE_INFO(  _L("Query type: EUsbOtgErrorAttachTimedOut") );
+        }                    
+    else
+        {
+        TRACE_INFO(  _L("Query type: not supported") );
+        return KErrNotFound;
+        } 
+    
+    TRACE_INFO(  _L("<<<GetOTGErrorType") );
+    return KErrNone;    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetOTGWarningType
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::GetOTGWarningType( TPtrC aTypeString, TUsbUiNotifOtgWarning& aQueryType )
+    {        
+    TRACE_INFO(  _L(">>>GetOTGWarningType") );
+    
+    if ( !aTypeString.Compare( _L( "EUsbOtgPartiallySupportedDevice" ) ) )
+        {            
+        aQueryType = EUsbOtgPartiallySupportedDevice;
+        TRACE_INFO(  _L("Query type: EUsbOtgPartiallySupportedDevice;") );
+        }    
+    else
+        {
+        TRACE_INFO(  _L("Query type: not supported") );
+        return KErrNotFound;
+        }
+
+    TRACE_INFO(  _L("<<<GetOTGWarningType") );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetMSMMrrorType
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::GetMSMMrrorType( TPtrC aTypeString, THostMsErrCode& aQueryType )
+    {        
+    TRACE_INFO(  _L(">>>GetMSMMrrorType") );
+    if ( !aTypeString.Compare( _L( "EUsbMSMMGeneralError" ) ) )
+        {            
+        aQueryType = EHostMsErrGeneral;
+        TRACE_INFO(  _L("Query type: EUsbOtgPartiallySupportedDevice;") );
+        }    
+    else if ( !aTypeString.Compare( _L( "EUsbMSMMUnknownFileSystem" ) ) )
+        {
+        aQueryType = EHostMsErrUnknownFileSystem;
+        TRACE_INFO(  _L("Query type: EUsbMSMMUnknownFileSystem") );
+        }         
+    else if ( !aTypeString.Compare( _L( "EUsbMSMMOutOfMemory" ) ) )
+        {
+        aQueryType = EHostMsErrOutOfMemory;
+        TRACE_INFO(  _L("Query type: EUsbMSMMOutOfMemory") );
+        }     
+    else
+        {
+        TRACE_INFO(  _L("Query type: not supported") );
+        return KErrNotFound;
+        }
+
+    TRACE_INFO(  _L("<<<GetMSMMrrorType") );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetTestOption
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::GetTestOption( TPtrC aOptionString, TTestOption& aOption )
+    {    
+    if ( !aOptionString.Compare( _L( "DISCARD" ) ) )
+        {
+        aOption = EQueryDiscarded;
+        TRACE_INFO(  _L("Test type: EQueryDiscarded") );
+        }
+    else if ( !aOptionString.Compare( _L( "ACCEPT" ) ) )
+        {
+        aOption = EQueryAccepted;
+        TRACE_INFO(  _L("Test type: EQueryAccepted") );
+        }
+    else if ( !aOptionString.Compare( _L( "CANCEL" ) ) )
+        {
+        aOption = EQueryCanceled;
+        TRACE_INFO(  _L("Test type: EQueryCanceled") );
+        }
+    else
+        {
+        TRACE_INFO(  _L("Test type: not supported") );
+        return KErrNotFound;
+        }
+ 
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CUsbUiNotifApiTest::GetPersonalityIdFromString
+// -----------------------------------------------------------------------------
+
+TInt CUsbUiNotifApiTest::GetPersonalityIdFromString( TPtrC aOptionString, TInt& aPersonalityId )
+    {    
+    if ( !aOptionString.Compare( _L( "MS" ) ) )
+        {
+        aPersonalityId = KUsbPersonalityIdMS;
+        TRACE_INFO(  _L("Usb personality type: KUsbPersonalityIdMS") );
+        }
+    else if ( !aOptionString.Compare( _L( "PCSUITE" ) ) )
+        {
+        aPersonalityId = KUsbPersonalityIdPCSuite;
+        TRACE_INFO(  _L("Usb personality type: KUsbPersonalityIdPCSuite") );
+        }
+    else if ( !aOptionString.Compare( _L( "MTP" ) ) )
+        {
+        aPersonalityId = KUsbPersonalityIdMTP;
+        TRACE_INFO(  _L("Usb personality type: KUsbPersonalityIdMTP") );
+        }
+    else if ( !aOptionString.Compare( _L( "PCSUITEMTP" ) ) )
+        {
+        aPersonalityId = KUsbPersonalityIdPCSuiteMTP;
+        TRACE_INFO(  _L("Usb personality type: KUsbPersonalityIdPCSuiteMTP") );
+        }
+    else
+        {
+        TRACE_INFO(  _L("Usb personality type: not found") );
+        return KErrNotFound;  
+        }
+ 
+    return KErrNone;
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  [End of File] - Do not remove
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/icons/usb_icon_mode_2.svg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="36" viewBox="-0.014 0.037 42 36">
+<rect fill="none" height="36" width="42" x="-0.014" y="0.037"/>
+<linearGradient id="SVGID_1" gradientUnits="userSpaceOnUse" x1="18.75" y1="11.54" x2="24.96" y2="27.67">
+<stop stop-color="#AABBD7" offset="0"/>
+<stop stop-color="#92A5CC" offset="0.26"/>
+<stop stop-color="#6C83BB" offset="0.71"/>
+<stop stop-color="#637DB5" offset="0.76"/>
+<stop stop-color="#4C6EA4" offset="0.83"/>
+<stop stop-color="#265689" offset="0.91"/>
+<stop stop-color="#003D6D" offset="0.99"/>
+</linearGradient>
+<path d="M18.823,33.49c-0.028-0.01-0.053-0.021-0.077-0.037l0,0L8.569,28.85 c-0.093-0.043-0.157-0.125-0.171-0.225l0,0L7.83,25.033c-0.012-0.076,0.006-0.154,0.05-0.217l0,0l2.553-3.664l-0.393-3.671 c-0.01-0.082,0.016-0.164,0.068-0.226l0,0l9.84-11.568c1.962-1.956,4.492-2.737,6.807-2.735l0,0c0.896,0,1.76,0.117,2.553,0.329l0,0 c1.481,0.4,2.965,1.106,3.795,2.34l0,0c0.041,0.019,0.078,0.046,0.107,0.081l0,0c0.023,0.029,1.199,1.456,1.201,3.82l0,0 c0,0.34-0.022,0.699-0.078,1.077l0,0c-0.18,1.202-0.634,2.678-0.921,3.342l0,0l-7.986,14.282c-0.018,0.072-0.062,0.135-0.124,0.178 l0,0c-0.053,0.033-0.115,0.051-0.176,0.049l0,0c-0.025,0-0.05-0.004-0.074-0.01l0,0c-0.035-0.008-0.067-0.023-0.096-0.043l0,0 l-1.992-0.879l-3.774,5.799c-0.023,0.059-0.065,0.107-0.119,0.141l0,0c-0.034,0.02-0.07,0.033-0.107,0.039l0,0 c-0.001,0.002-0.003,0.002-0.004,0.002l0,0c-0.002,0-0.004,0-0.006,0l0,0c-0.015,0.002-0.03,0.004-0.045,0.004l0,0 C18.879,33.502,18.851,33.498,18.823,33.49L18.823,33.49z M32.753,6.081l0.179-0.148L32.753,6.081L32.753,6.081z" fill="url(#SVGID_1)"/>
+<linearGradient id="SVGID_2" gradientUnits="userSpaceOnUse" x1="27.94" y1="30.01" x2="8.42" y2="15.5">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#E0EAF3" offset="0.11"/>
+<stop stop-color="#A2C2DD" offset="0.35"/>
+<stop stop-color="#8CA9CF" offset="0.48"/>
+<stop stop-color="#6C83BB" offset="0.7"/>
+<stop stop-color="#637DB5" offset="0.75"/>
+<stop stop-color="#4C6EA4" offset="0.82"/>
+<stop stop-color="#265689" offset="0.91"/>
+<stop stop-color="#003D6D" offset="0.99"/>
+</linearGradient>
+<polygon fill="url(#SVGID_2)" points="25.137,28.184 10.806,21.869 10.334,17.479 25.108,23.307 "/>
+<linearGradient id="SVGID_3" gradientUnits="userSpaceOnUse" x1="35.78" y1="4.5" x2="22.33" y2="31.13">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#E0EAF3" offset="0.11"/>
+<stop stop-color="#A2C2DD" offset="0.35"/>
+<stop stop-color="#8CA9CF" offset="0.48"/>
+<stop stop-color="#6C83BB" offset="0.7"/>
+<stop stop-color="#637DB5" offset="0.75"/>
+<stop stop-color="#4C6EA4" offset="0.82"/>
+<stop stop-color="#265689" offset="0.91"/>
+<stop stop-color="#003D6D" offset="0.99"/>
+</linearGradient>
+<path d="M25.117,23.307l7.864-17.383c0,0,1.487,1.795,1.058,4.664c-0.174,1.164-0.627,2.644-0.887,3.241 l-8.027,14.355L25.117,23.307z" fill="url(#SVGID_3)"/>
+<linearGradient id="SVGID_4" gradientUnits="userSpaceOnUse" x1="15.76" y1="-3.13" x2="28.63" y2="29.22">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#F4F8FB" offset="0.19"/>
+<stop stop-color="#D6E4F0" offset="0.52"/>
+<stop stop-color="#A7C5DF" offset="0.96"/>
+<stop stop-color="#A2C2DD" offset="1"/>
+</linearGradient>
+<path d="M29.23,3.599c-2.747-0.735-6.439-0.292-9.072,2.331l-9.825,11.549l14.774,5.828l7.753-13.183 C34.642,6.166,31.987,4.338,29.23,3.599z" fill="url(#SVGID_4)"/>
+<linearGradient id="SVGID_5" gradientUnits="userSpaceOnUse" x1="25.22" y1="23.12" x2="19.08" y2="11.35">
+<stop stop-color="#E6EEF4" offset="0"/>
+<stop stop-color="#C6DCC1" offset="0.08"/>
+<stop stop-color="#91C06F" offset="0.21"/>
+<stop stop-color="#6BAB33" offset="0.32"/>
+<stop stop-color="#539E0E" offset="0.4"/>
+<stop stop-color="#4A9900" offset="0.44"/>
+<stop stop-color="#398419" offset="0.55"/>
+<stop stop-color="#22663B" offset="0.71"/>
+<stop stop-color="#135550" offset="0.85"/>
+<stop stop-color="#0E4E58" offset="0.94"/>
+</linearGradient>
+<path d="M22.05,10.979l-0.616,0.813l3.756,1.229l-2.353,3.107l1.332,0.439l0.696-0.922l2.916,0.965 l-2.067,2.724l-2.899-0.958l0.688-0.923l-6.795-2.236l-0.678,0.935c-0.483-0.736-1.019-1.479-1.515-2.136 c1.078-0.14,2.283-0.313,3.448-0.509l-0.601,0.818l4.521,1.486l1.672-2.219l-2.791-0.916l-0.61,0.814 c-0.477-0.732-1.006-1.473-1.5-2.13C19.741,11.225,20.968,11.053,22.05,10.979z" fill="url(#SVGID_5)"/>
+<linearGradient id="SVGID_6" gradientUnits="userSpaceOnUse" x1="19.37" y1="27.94" x2="-19.75" y2="-11.18">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<polygon fill="url(#SVGID_6)" points="23.084,23.328 18.86,29.619 8.123,25.02 12.285,19.045 "/>
+<polygon fill="#4D4D4D" points="14.777,23.287 13.833,24.76 11.07,23.572 12.019,22.139 "/>
+<polygon fill="#4D4D4D" points="20.001,25.482 19.064,27.021 16.364,25.848 17.304,24.344 "/>
+<linearGradient id="SVGID_7" gradientUnits="userSpaceOnUse" x1="17.97" y1="37.85" x2="26.77" y2="9.05">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<polygon fill="url(#SVGID_7)" points="18.873,29.617 23.084,23.328 22.852,27.178 18.908,33.236 "/>
+<linearGradient id="SVGID_8" gradientUnits="userSpaceOnUse" x1="18.44" y1="33.76" x2="-1.24" y2="14.08">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#000000" offset="1"/>
+</linearGradient>
+<polygon fill="url(#SVGID_8)" points="18.915,33.236 8.691,28.611 8.123,25.02 18.879,29.602 "/>
+<polygon fill="#FFFFFF" points="18.23,32.199 9.25,28.139 9.049,27.063 18.177,31.076 "/>
+<linearGradient id="SVGID_9" gradientUnits="userSpaceOnUse" x1="19.28" y1="1.82" x2="32.69" y2="8.11">
+<stop stop-color="#A2C2DD" offset="0.1"/>
+<stop stop-color="#6C83BB" offset="0.71"/>
+<stop stop-color="#003D6D" offset="0.99"/>
+</linearGradient>
+<path d="M24.564,5.472l6.489,1.948c0,0,0.749-1.301-2.161-2.179C25.981,4.364,24.564,5.472,24.564,5.472z" fill="url(#SVGID_9)"/>
+</svg>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/icons/usb_icon_mode_4.svg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="36" viewBox="0 0 42 36">
+<rect fill="none" height="36" width="42"/>
+<linearGradient id="SVGID_1" gradientUnits="userSpaceOnUse" x1="4.34" y1="18" x2="37.66" y2="18">
+<stop stop-color="#A1C1DC" offset="0.1"/>
+<stop stop-color="#6C82B9" offset="0.71"/>
+<stop stop-color="#173F6C" offset="0.99"/>
+</linearGradient>
+<path d="M12.842,34.012l-0.057-0.078l-6.937-9.3l-0.042-0.059l-1.405-1.881L4.37,22.653v-0.052l-0.027-0.858 L4.34,21.59l0.149-0.015c1.725-0.188,3.256-0.634,4.676-1.372c0.68-1.623,2.405-2.95,4.057-3.121 c0.235-0.238,0.481-0.492,0.747-0.774L11.079,2.388L11.044,2.23l0.157-0.033l0.762-0.172l0.159-0.036l0.037,0.159 c0.482,2.094,1.557,2.859,2.694,3.67l0.098,0.07c0.172,0.12,0.348,0.243,0.523,0.364c1.704,1.185,3.464,2.408,3.86,5.01 c1.691-1.087,3.54-1.699,5.645-1.868l0.047-0.002l0.042,0.024l1.62,0.889l0.319,0.174l0.527,0.289l1.251,0.686l8.768,4.814 l0.106,0.057l-0.018,0.131l-0.219,1.099l-0.022,0.118l-0.125,0.013c-5.685,0.518-8.448,3.993-11.377,7.671 c-3.057,3.844-6.22,7.818-12.963,8.643L12.842,34.012L12.842,34.012z M13.666,8.596L15,15.196c0.997-1.081,2.029-2.183,3.198-3.116 C17.83,10.181,16.425,9.099,13.666,8.596L13.666,8.596z" fill="url(#SVGID_1)"/>
+<linearGradient id="SVGID_2" gradientUnits="userSpaceOnUse" x1="25.09" y1="3.25" x2="18.28" y2="29.64">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#486EA2" offset="0.71"/>
+<stop stop-color="#225487" offset="0.99"/>
+</linearGradient>
+<path d="M4.504,21.748c10.374-1.113,10.566-11.391,20.483-12.18l12.506,6.863 c-12.585,1.681-11.545,14.341-24.322,16.136L4.504,21.748z" fill="url(#SVGID_2)"/>
+<linearGradient id="SVGID_3" gradientUnits="userSpaceOnUse" x1="11.67" y1="27.2" x2="22.42" y2="12.96">
+<stop stop-color="#DEE8F1" offset="0"/>
+<stop stop-color="#225487" offset="1"/>
+</linearGradient>
+<path d="M6.254,23.966c1.579-0.102,5.475-0.806,8.816-4.604l6.127,5.619c-2.307,2.884-6.286,5.21-9.765,5.507 L6.254,23.966z" fill="url(#SVGID_3)"/>
+<linearGradient id="SVGID_4" gradientUnits="userSpaceOnUse" x1="22.63" y1="18.3" x2="16.39" y2="28">
+<stop stop-color="#DEE8F1" offset="0"/>
+<stop stop-color="#225487" offset="1"/>
+</linearGradient>
+<path d="M15.837,18.577c1.691-1.97,3.833-4.857,7.662-6.644l7.04,4.334c-2.24,1.156-4.458,2.596-8.474,7.792 L15.837,18.577z" fill="url(#SVGID_4)"/>
+<path d="M24.679,11.449c0,0,2.42-0.559,2.777-0.528l7.598,4.183c0,0-1.459-0.021-3.218,0.643L24.679,11.449z" fill="#D6E3F1"/>
+<polygon fill="#FFFFFF" points="5.01,22.433 6.175,22.295 6.975,23.324 5.913,23.549 "/>
+<polygon fill="#FFFFFF" points="7.375,21.997 8.266,23.043 9.482,22.64 8.574,21.615 "/>
+<polygon fill="#FFFFFF" points="9.574,21.165 10.499,22.191 11.537,21.608 10.586,20.609 "/>
+<polygon fill="#FFFFFF" points="11.421,20.037 12.384,21.011 13.269,20.314 12.271,19.342 "/>
+<polygon fill="#FFFFFF" points="13.02,18.701 14.011,19.635 14.791,18.83 13.778,17.914 "/>
+<polygon fill="#FFFFFF" points="14.442,17.202 15.475,18.118 16.197,17.266 15.179,16.398 "/>
+<polygon fill="#FFFFFF" points="15.844,15.668 16.866,16.522 17.604,15.706 16.559,14.862 "/>
+<polygon fill="#FFFFFF" points="17.244,14.166 18.299,14.983 19.106,14.222 18.006,13.415 "/>
+<polygon fill="#FFFFFF" points="18.777,12.774 19.879,13.55 20.761,12.867 19.676,12.108 "/>
+<polygon fill="#FFFFFF" points="20.562,11.561 21.648,12.29 22.73,11.758 21.609,11.037 "/>
+<polygon fill="#FFFFFF" points="22.604,10.648 23.753,11.323 25.063,10.971 23.888,10.287 "/>
+<polygon fill="#FFFFFF" points="25.024,10.068 26.227,10.754 26.93,10.631 25.677,9.949 "/>
+<polygon fill="#FFFFFF" points="11.811,30.928 13.116,30.698 13.985,31.78 12.649,32.004 "/>
+<polygon fill="#FFFFFF" points="14.498,30.351 15.391,31.409 16.816,30.875 15.881,29.832 "/>
+<polygon fill="#FFFFFF" points="17.029,29.287 18.192,28.574 19.174,29.579 17.976,30.306 "/>
+<polygon fill="#FFFFFF" points="19.158,27.871 20.135,28.861 21.14,27.983 20.148,27.013 "/>
+<polygon fill="#FFFFFF" points="20.978,26.184 21.984,27.14 22.859,26.174 21.842,25.253 "/>
+<polygon fill="#FFFFFF" points="22.612,24.36 23.645,25.271 24.468,24.251 23.416,23.373 "/>
+<polygon fill="#FFFFFF" points="24.171,22.477 25.218,23.341 26.04,22.319 24.979,21.479 "/>
+<polygon fill="#FFFFFF" points="25.762,20.613 26.828,21.433 27.736,20.487 26.656,19.675 "/>
+<polygon fill="#FFFFFF" points="27.506,18.885 28.624,19.658 29.642,18.824 28.518,18.066 "/>
+<polygon fill="#FFFFFF" points="29.538,17.391 30.671,18.123 31.874,17.434 30.726,16.714 "/>
+<polygon fill="#FFFFFF" points="31.916,16.199 33.104,16.899 34.571,16.434 33.386,15.741 "/>
+<polygon fill="#FFFFFF" points="34.844,15.44 36.06,16.109 36.745,16.033 35.5,15.349 "/>
+<linearGradient id="SVGID_5" gradientUnits="userSpaceOnUse" x1="14.3" y1="2.22" x2="26.79" y2="28.48">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#486EA2" offset="0.71"/>
+<stop stop-color="#225487" offset="0.99"/>
+</linearGradient>
+<path d="M13.232,32.458c12.06-1.605,12.525-15.277,24.25-16.038l-0.223,1.113 C25.511,18.605,26.003,32.25,12.916,33.847L13.232,32.458z" fill="url(#SVGID_5)"/>
+<polygon fill="url(#SVGID_2)" points="13.232,32.458 4.504,21.748 4.532,22.606 12.916,33.847 "/>
+<polygon fill="#7D96C5" points="12.839,31.979 12.556,33.363 11.799,32.325 11.973,30.891 "/>
+<polygon fill="#7D96C5" points="5.063,22.42 5.147,23.398 5.977,24.548 5.953,23.545 "/>
+<linearGradient id="SVGID_7" gradientUnits="userSpaceOnUse" x1="12.63" y1="30.81" x2="13.51" y2="19.84">
+<stop stop-color="#FFFFFF" offset="0.05"/>
+<stop stop-color="#A1C1DC" offset="1"/>
+</linearGradient>
+<path d="M16.126,24.422c-0.565,1.555-2.365,2.897-4.022,3.002c-1.654,0.103-2.539-1.072-1.975-2.624 c0.563-1.555,2.364-2.897,4.021-3.004C15.805,21.694,16.689,22.867,16.126,24.422z" fill="url(#SVGID_7)"/>
+<path d="M14.487,18.025l-3.252-15.66l0.762-0.171c0.51,2.215,1.676,2.994,2.856,3.836 c2.69,1.907,5.913,3.547,3.617,10.54l-0.544-0.218c1.583-5.44-0.518-7.292-4.471-7.949l2.114,10.467L14.487,18.025z" fill="#6D5723"/>
+<radialGradient id="SVGID_8" gradientUnits="userSpaceOnUse" cx="13.33" cy="18.95" fx="12.7" fy="19.13" r="2.87">
+<stop stop-color="#E6EDF3" offset="0"/>
+<stop stop-color="#A2762B" offset="0.44"/>
+<stop stop-color="#474219" offset="0.94"/>
+</radialGradient>
+<path d="M15.434,20.15c-0.58,1.712-2.439,3.188-4.158,3.292c-1.717,0.11-2.644-1.193-2.063-2.906 c0.578-1.709,2.438-3.184,4.158-3.292C15.087,17.136,16.014,18.437,15.434,20.15z" fill="url(#SVGID_8)"/>
+</svg>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/icons/usb_icon_mode_5.svg	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="36" viewBox="0 0 42 36">
+<rect fill="none" height="36" width="42"/>
+<linearGradient id="SVGID_1" gradientUnits="userSpaceOnUse" x1="-0.54" y1="15.57" x2="35.4" y2="15.57">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#A1C1DC" offset="0.35"/>
+<stop stop-color="#6C82B9" offset="0.7"/>
+<stop stop-color="#173F6C" offset="1"/>
+</linearGradient>
+<path d="M24.067,29.803c-0.456,0-0.918-0.07-1.381-0.207l-12.552-3.74c-2.362-0.703-3.827-2.558-3.919-4.957 L5.74,8.165C5.673,6.397,6.431,4.892,7.82,4.036c1.797-1.579,3.234-2.693,5.342-2.693c0.377,0,0.778,0.038,1.19,0.114l11.474,1.836 c3.21,0.579,5.817,3.865,5.817,7.33l-0.161,12.044c0,3.272-2.31,4.707-4.984,6.37c-0.135,0.096-0.275,0.184-0.425,0.265 l-0.009,0.008l-0.15,0.092l-0.018,0.011l-0.014-0.013C25.321,29.666,24.71,29.803,24.067,29.803L24.067,29.803z" fill="url(#SVGID_1)"/>
+<linearGradient id="SVGID_2" gradientUnits="userSpaceOnUse" x1="19.15" y1="2.32" x2="19.15" y2="26.35">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#A1C1DC" offset="0.35"/>
+<stop stop-color="#6C82B9" offset="0.7"/>
+<stop stop-color="#173F6C" offset="1"/>
+</linearGradient>
+<path d="M25.729,29.107c2.868-1.805,5.439-3.154,5.439-6.506l0.161-12.039c0-3.337-2.497-6.497-5.583-7.052 L14.27,1.672c-3.083-0.557-4.703,1.116-7.302,3.402l6.56,0.938l11.324,2.309l1.155,12.016L25.729,29.107z" fill="url(#SVGID_2)"/>
+<linearGradient id="SVGID_3" gradientUnits="userSpaceOnUse" x1="6.6" y1="5.55" x2="28.55" y2="27.5">
+<stop stop-color="#FFFFFF" offset="0.05"/>
+<stop stop-color="#A1C1DC" offset="1"/>
+</linearGradient>
+<path d="M22.733,29.269c2.822,0.841,5.375-1.101,5.375-4.449V12.715c0-3.336-2.498-6.496-5.58-7.052 L11.366,3.65C8.277,3.094,5.871,5.092,5.986,8.095L6.461,20.83c0.084,2.214,1.425,4.015,3.72,4.696L22.733,29.269z" fill="url(#SVGID_3)"/>
+<linearGradient id="SVGID_4" gradientUnits="userSpaceOnUse" x1="12.92" y1="1.63" x2="32.49" y2="21.2">
+<stop stop-color="#E6EDF3" offset="0"/>
+<stop stop-color="#ADCEB3" offset="0.14"/>
+<stop stop-color="#78B277" offset="0.28"/>
+<stop stop-color="#57A052" offset="0.39"/>
+<stop stop-color="#4A9944" offset="0.44"/>
+<stop stop-color="#428E47" offset="0.5"/>
+<stop stop-color="#286C50" offset="0.68"/>
+<stop stop-color="#185756" offset="0.84"/>
+<stop stop-color="#124F58" offset="0.94"/>
+</linearGradient>
+<path d="M21.698,10.582c0.828,0.164,1.505,1.017,1.511,1.903l0.024,4.707l3.752,0.795v-4.86 c0-2.416-1.466-4.727-3.488-5.776c-0.465-0.24-0.96-0.414-1.471-0.506l-3.731-0.671v3.73L21.698,10.582z" fill="url(#SVGID_4)"/>
+<linearGradient id="SVGID_5" gradientUnits="userSpaceOnUse" x1="2.57" y1="1.96" x2="33.99" y2="39.18">
+<stop stop-color="#E6EDF3" offset="0"/>
+<stop stop-color="#B8CAE2" offset="0.11"/>
+<stop stop-color="#7C9DCD" offset="0.27"/>
+<stop stop-color="#5782BF" offset="0.38"/>
+<stop stop-color="#4977BA" offset="0.44"/>
+<stop stop-color="#3F6CAB" offset="0.51"/>
+<stop stop-color="#295489" offset="0.69"/>
+<stop stop-color="#1C4474" offset="0.84"/>
+<stop stop-color="#173F6C" offset="0.94"/>
+</linearGradient>
+<path d="M23.261,22.141c0.014,1.256-0.801,1.385-1.456,1.206l-9.833-2.939c-0.59-0.401-0.48-1.005-0.5-1.546 c-0.018-0.545-0.231-8.875-0.231-8.875c-0.023-0.829,0.626-1.365,1.458-1.197l5.035,1.004V6.072l-5.656-1.02 C9.324,4.556,7.178,6.336,7.281,9.014l0.423,11.352c0.075,1.974,1.269,3.58,3.314,4.187l11.191,3.335 c2.514,0.751,4.791-0.979,4.791-3.965v-5.36l-3.764-0.797L23.261,22.141z" fill="url(#SVGID_5)"/>
+<linearGradient id="SVGID_6" gradientUnits="userSpaceOnUse" x1="11.3" y1="22.66" x2="36.26" y2="22.66">
+<stop stop-color="#A1C1DC" offset="0.1"/>
+<stop stop-color="#6C82B9" offset="0.71"/>
+<stop stop-color="#173F6C" offset="0.99"/>
+</linearGradient>
+<path d="M17.672,34.657l-0.042-0.057l-5.196-6.966l-0.033-0.045l-1.052-1.408l-0.023-0.031v-0.039 l-0.021-0.645l-0.002-0.111l0.111-0.013c1.292-0.14,2.439-0.475,3.503-1.025c0.51-1.218,1.801-2.212,3.04-2.341 c0.176-0.176,0.36-0.367,0.559-0.578l-2.166-10.429l-0.025-0.118l0.118-0.026l0.57-0.128l0.119-0.026l0.027,0.119 c0.361,1.568,1.168,2.142,2.019,2.75l0.073,0.051c0.129,0.091,0.261,0.183,0.392,0.273c1.278,0.887,2.598,1.803,2.894,3.753 c1.265-0.815,2.649-1.272,4.229-1.399l0.034-0.001l0.032,0.017l1.212,0.667l0.24,0.129l0.395,0.216l0.938,0.515l6.568,3.605 l0.079,0.043l-0.013,0.099l-0.166,0.823l-0.016,0.09l-0.092,0.008c-4.26,0.389-6.33,2.992-8.523,5.748 c-2.289,2.879-4.659,5.857-9.711,6.474L17.672,34.657L17.672,34.657z M18.289,15.62l1,4.945c0.747-0.811,1.52-1.635,2.396-2.335 C21.408,16.807,20.356,15.997,18.289,15.62L18.289,15.62z" fill="url(#SVGID_6)"/>
+<linearGradient id="SVGID_7" gradientUnits="userSpaceOnUse" x1="26.85" y1="11.62" x2="21.75" y2="31.39">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#486EA2" offset="0.71"/>
+<stop stop-color="#225487" offset="0.99"/>
+</linearGradient>
+<path d="M11.427,25.473c7.77-0.837,7.915-8.534,15.346-9.126l9.365,5.143 c-9.428,1.259-8.646,10.743-18.22,12.087L11.427,25.473z" fill="url(#SVGID_7)"/>
+<linearGradient id="SVGID_8" gradientUnits="userSpaceOnUse" x1="16.79" y1="29.56" x2="24.85" y2="18.89">
+<stop stop-color="#DEE8F1" offset="0"/>
+<stop stop-color="#225487" offset="1"/>
+</linearGradient>
+<path d="M12.737,27.133c1.182-0.074,4.101-0.602,6.604-3.449l4.59,4.212 c-1.728,2.159-4.709,3.901-7.315,4.124L12.737,27.133z" fill="url(#SVGID_8)"/>
+<linearGradient id="SVGID_9" gradientUnits="userSpaceOnUse" x1="25" y1="22.89" x2="20.33" y2="30.15">
+<stop stop-color="#DEE8F1" offset="0"/>
+<stop stop-color="#225487" offset="1"/>
+</linearGradient>
+<path d="M19.915,23.097c1.268-1.476,2.872-3.64,5.741-4.977l5.272,3.245 c-1.678,0.867-3.339,1.945-6.347,5.839L19.915,23.097z" fill="url(#SVGID_9)"/>
+<path d="M26.538,17.757c0,0,1.814-0.419,2.082-0.396l5.691,3.135c0,0-1.094-0.018-2.411,0.48L26.538,17.757z" fill="#D6E3F1"/>
+<polygon fill="#FFFFFF" points="11.806,25.985 12.678,25.883 13.278,26.651 12.481,26.82 "/>
+<polygon fill="#FFFFFF" points="13.576,25.66 14.246,26.442 15.155,26.141 14.475,25.371 "/>
+<polygon fill="#FFFFFF" points="15.224,25.035 15.917,25.804 16.695,25.367 15.982,24.619 "/>
+<polygon fill="#FFFFFF" points="16.608,24.189 17.33,24.92 17.991,24.398 17.245,23.671 "/>
+<polygon fill="#FFFFFF" points="17.805,23.189 18.548,23.891 19.132,23.285 18.373,22.6 "/>
+<polygon fill="#FFFFFF" points="18.871,22.067 19.646,22.753 20.185,22.115 19.422,21.465 "/>
+<polygon fill="#FFFFFF" points="19.922,20.918 20.687,21.559 21.24,20.945 20.457,20.313 "/>
+<polygon fill="#FFFFFF" points="20.969,19.792 21.76,20.404 22.364,19.834 21.541,19.23 "/>
+<polygon fill="#FFFFFF" points="22.118,18.75 22.944,19.331 23.603,18.82 22.793,18.25 "/>
+<polygon fill="#FFFFFF" points="23.455,17.841 24.271,18.387 25.08,17.988 24.239,17.447 "/>
+<polygon fill="#FFFFFF" points="24.985,17.157 25.847,17.663 26.827,17.399 25.946,16.886 "/>
+<polygon fill="#FFFFFF" points="26.8,16.723 27.699,17.236 28.225,17.144 27.287,16.633 "/>
+<polygon fill="#FFFFFF" points="16.898,32.349 17.878,32.177 18.529,32.987 17.528,33.154 "/>
+<polygon fill="#FFFFFF" points="18.911,31.916 19.581,32.709 20.65,32.309 19.949,31.528 "/>
+<polygon fill="#FFFFFF" points="20.808,31.118 21.681,30.585 22.415,31.339 21.518,31.885 "/>
+<polygon fill="#FFFFFF" points="22.404,30.058 23.138,30.801 23.888,30.143 23.146,29.416 "/>
+<polygon fill="#FFFFFF" points="23.767,28.795 24.522,29.512 25.178,28.787 24.414,28.098 "/>
+<polygon fill="#FFFFFF" points="24.992,27.429 25.765,28.111 26.38,27.348 25.595,26.689 "/>
+<polygon fill="#FFFFFF" points="26.159,26.018 26.943,26.666 27.558,25.899 26.766,25.271 "/>
+<polygon fill="#FFFFFF" points="27.351,24.623 28.149,25.235 28.829,24.527 28.021,23.921 "/>
+<polygon fill="#FFFFFF" points="28.657,23.328 29.494,23.908 30.257,23.281 29.415,22.713 "/>
+<polygon fill="#FFFFFF" points="30.181,22.209 31.028,22.756 31.93,22.24 31.069,21.701 "/>
+<polygon fill="#FFFFFF" points="31.96,21.314 32.851,21.84 33.95,21.492 33.063,20.973 "/>
+<polygon fill="#FFFFFF" points="34.155,20.746 35.064,21.25 35.579,21.19 34.646,20.68 "/>
+<linearGradient id="SVGID_10" gradientUnits="userSpaceOnUse" x1="18.78" y1="10.86" x2="28.12" y2="30.5">
+<stop stop-color="#FFFFFF" offset="0"/>
+<stop stop-color="#486EA2" offset="0.71"/>
+<stop stop-color="#225487" offset="0.99"/>
+</linearGradient>
+<path d="M17.964,33.494c9.035-1.201,9.381-11.443,18.168-12.012l-0.169,0.832 c-8.802,0.803-8.433,11.025-18.236,12.22L17.964,33.494z" fill="url(#SVGID_10)"/>
+<polygon fill="url(#SVGID_7)" points="17.964,33.494 11.427,25.473 11.446,26.115 17.727,34.534 "/>
+<polygon fill="#7D96C5" points="17.669,33.137 17.458,34.173 16.892,33.395 17.022,32.322 "/>
+<polygon fill="#7D96C5" points="11.844,25.977 11.908,26.709 12.529,27.569 12.512,26.818 "/>
+<linearGradient id="SVGID_12" gradientUnits="userSpaceOnUse" x1="17.52" y1="32.26" x2="18.17" y2="24.05">
+<stop stop-color="#FFFFFF" offset="0.05"/>
+<stop stop-color="#A1C1DC" offset="1"/>
+</linearGradient>
+<path d="M20.134,27.476c-0.425,1.165-1.773,2.171-3.014,2.247c-1.239,0.079-1.903-0.801-1.48-1.965 c0.421-1.164,1.771-2.172,3.012-2.25C19.891,25.431,20.554,26.31,20.134,27.476z" fill="url(#SVGID_12)"/>
+<path d="M18.905,22.685l-2.436-11.732l0.57-0.127c0.382,1.659,1.256,2.242,2.14,2.874 c2.016,1.427,4.429,2.657,2.709,7.895l-0.407-0.162c1.186-4.076-0.389-5.463-3.35-5.955l1.583,7.84L18.905,22.685z" fill="#6D5723"/>
+<radialGradient id="SVGID_13" gradientUnits="userSpaceOnUse" cx="18.04" cy="23.37" fx="17.57" fy="23.5" r="2.14">
+<stop stop-color="#E6EDF3" offset="0"/>
+<stop stop-color="#A2762B" offset="0.44"/>
+<stop stop-color="#474219" offset="0.94"/>
+</radialGradient>
+<path d="M19.613,24.275c-0.434,1.281-1.827,2.387-3.115,2.466c-1.285,0.083-1.98-0.895-1.544-2.177 c0.433-1.28,1.827-2.386,3.114-2.467C19.354,22.018,20.048,22.99,19.613,24.275z" fill="url(#SVGID_13)"/>
+</svg>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/inc/mydebug.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+
+#ifndef MYDEBUG_H
+#define MYDEBUG_H
+
+#include <QtDebug>
+
+#if defined(_DEBUG)
+    inline QDebug myDebug()
+    {
+        return qDebug();
+    }
+#else
+    inline QNoDebug myDebug()
+    {
+        return QNoDebug();
+    }
+#endif
+
+
+#endif // MYDEBUG_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/inc/usbmainview.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef USBMAINVIEW_H
+#define USBMAINVIEW_H
+
+#include <hbview.h>
+#include <QObject>
+
+class UsbUiSettingModel;
+class QGraphicsLinearLayout;
+class HbListWidgetItem;
+class HbListWidget;
+class HbTextEdit;
+class HbRadioButtonList;
+
+class UsbMainView : public HbView
+{
+    Q_OBJECT
+    friend class TestUsbUiModelActive;
+
+public:
+    explicit UsbMainView( QObject *parent = 0 );
+    virtual ~UsbMainView();
+    
+public slots: 
+    /**
+     * Update view item(s) between the selected rows.
+     * @param topLeft The top row index
+     * @param bottomRight The bottom row index
+     */
+    void updateSettingItems(const QModelIndex &topLeft, const QModelIndex &bottomRight);
+    
+    /*
+     * Set the personality user has selected in the radio button list
+     * @param personalityIndex The selection index in the radio button list
+     */
+    void setPersonality( int personalityIndex );
+
+signals:
+    
+private:
+    /*
+     * creates the main view window row by row
+     */
+    void createMainView();
+    /*
+     * creates the first row in the view containing an icon and a mode name
+     * @param  localPropertiesGroup main view layout
+     */
+    void createIconNameRow(QGraphicsLinearLayout *localPropertiesGroup);
+    /*
+     * creates the second row from the view containing the description of the selected mode
+     * @param  localPropertiesGroup main view layout
+     */
+    void createDescriptionArea(QGraphicsLinearLayout *localPropertiesGroup);
+    /*
+     * creates the third row from the view containing the radio button list of the existing usb modes
+     * @param  localPropertiesGroup main view layout
+     */
+    void createRadioButtonArea(QGraphicsLinearLayout *localPropertiesGroup);
+       
+private:
+    // main view layout owned by this class
+    QGraphicsLinearLayout *mMainLayout; 
+    // setting model not owned by the view,
+    // has to be deleted
+    UsbUiSettingModel *mModel;
+    //owned by the view
+    HbListWidgetItem *mListItem;
+    // owned by the view
+    HbListWidget *mlist;
+    // owned by the view
+    HbTextEdit *mlabel;
+    // owned by the view
+    HbRadioButtonList *mradio;
+    // not owned by the view
+    // need to be deleted
+    HbIcon *mIcon ;
+};
+
+#endif /* USBMAINVIEW_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/inc/usbuimodelactive.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef USBUIMODELACTIVE_H
+#define USBUIMODELACTIVE_H
+
+#include <QObject>
+#include <e32base.h>
+#include <usbwatcher.h>
+
+class UsbUiModelActivePrivate;
+
+/*!
+    \class UsbUiModelActive
+    \brief Helper class for using active objects in Qt classes.
+
+    UsbUiModelActive is a helper class for using active objects 
+    from any Qt class. It wraps a CActive-derived class in an interface
+    that uses Qt's signal-slot mechanism for communicating status changes 
+    of the active object.
+
+ */
+class UsbUiModelActive : public QObject
+{
+    Q_OBJECT
+    friend class UsbUiModelActivePrivate;
+
+public:
+    explicit UsbUiModelActive( int priority = CActive::EPriorityStandard, 
+            QObject *parent = NULL );
+    ~UsbUiModelActive();
+
+    inline TRequestStatus &RequestStatus();
+    inline void SetActive();
+    inline void Cancel();
+    inline bool IsActive();
+    
+public:
+    int SetUsbPersonality(int personality);
+    void CancelSetPersonality();
+    
+signals:
+    void requestCompleted( int status );
+
+private:
+   /*!
+    * emits a signal when the request is completed
+    * @param status is the error
+    */
+    void emitRequestCompleted( int status );
+
+private:
+    UsbUiModelActivePrivate *d;
+     
+    /** Handle to USBWatcher for setting the personality */
+    RUsbWatcher iUsbWatcher; 
+};
+
+
+/*!
+    \class UsbUiModelActivePrivate
+    \brief Private class of UsbUiModelActive, for using active objects in Qt classes.
+
+    UsbUiModelActivePrivate is a helper class for using active objects 
+    from any Qt class. It derives from CActive and allows other classes to use 
+    it for passing to asynchronous function calls through its RequestStatus method.
+
+ */
+class UsbUiModelActivePrivate : public CActive
+{
+    friend class UsbUiModelActive;
+
+public:
+    explicit UsbUiModelActivePrivate( UsbUiModelActive *parent, int priority );
+    ~UsbUiModelActivePrivate();
+
+private:
+    virtual void RunL();
+    virtual void DoCancel();
+    virtual TInt RunError( TInt aError );
+
+private:
+    UsbUiModelActive *q;
+
+};
+
+inline bool UsbUiModelActive::IsActive()
+{
+    return d->IsActive();
+}
+
+inline TRequestStatus &UsbUiModelActive::RequestStatus()
+{
+    return d->iStatus;
+}
+
+inline void UsbUiModelActive::SetActive()
+{
+    d->SetActive();
+}
+
+inline void UsbUiModelActive::Cancel()
+{
+    d->Cancel();
+}
+
+#endif /* USBUIMODELACTIVE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/inc/usbuisettingmodel.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef USBUISETTINGMODEL_H
+#define USBUISETTINGMODEL_H
+
+
+#include <e32base.h>
+#include <e32property.h>
+#include <QStringList>
+#include <QAbstractItemModel>
+#include <XQSettingsManager>
+
+const int KDefaultColumn = 0;
+typedef QList< QMap< int, QVariant > > UsbUiModelDataSource;
+
+class RUsb;
+class UsbUiModelActive;
+
+class UsbUiSettingModel : public QAbstractItemModel
+{
+    Q_OBJECT
+    friend class TestUsbUiModelActive;
+ 
+public:
+enum usbSettingsIndex {
+        DefaultMode,
+        Description,
+        UsbModeList,
+        EndOfSettings
+    };
+enum SettingsRoleValues {
+        SettingType = Qt::UserRole,
+        SettingsModeNameList,
+    };
+public:
+    UsbUiSettingModel( QObject *parent = 0 );
+    virtual ~UsbUiSettingModel();
+
+    /*
+     *  Returns the index of the item in the model specified by the given row, column and parent index.
+     *  @param row is the row number of the specified item
+     *  @param column is the column number of the specified item
+     *  @param parent QModelIndex parent
+     */   
+    virtual QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const;
+    /*
+     * Returns QModelIndex() because this model item has no parent
+     * @param child is the index of item model, the parent of which is going to be returned
+     * @param child is not used in here
+     */
+    virtual QModelIndex parent( const QModelIndex &child ) const;
+    /*
+     * Returns the number of rows under the given parent
+     * @param parent QModelIndex parent
+     */
+    virtual int rowCount( const QModelIndex &parent = QModelIndex() ) const;
+    /*
+     * Returns the number of columns for the children of the given parent.
+     * @param parent QModelIndex parent
+     */
+    virtual int columnCount( const QModelIndex &parent = QModelIndex() ) const;
+    /*
+     *Returns the data stored under the given role for the item referred to by the index. 
+     */
+    virtual QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const;
+    /*
+     * Sets the role data for the item at index to value. Returns true if successful; otherwise returns false.
+     */
+    virtual bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole );
+
+    const QModelIndex* sourceData() const;
+
+public slots:
+    /*
+     * Provides notification of changes in selected usb mode
+     * @param key is not used 
+     * @param value is the value read from cenrep key 
+     */
+    void usbModeChanged( const XQSettingsKey &key, const QVariant &value );
+    /*
+     * it checks the response from usbwatcher to see if the new mode change has been successful
+     * it will go back to the previous personality if it has not been successfull
+     * @param status is the error code returned from usbwatcher
+     */
+    void setPersonalityCompleted (int status );
+    
+private:
+	/*
+	 * creats the logical name of the modename string for the list
+	 * @param modeId is the usb personality id
+	 */   
+    QString modeListName( int modeId );
+    /*
+     * Get the current USB personality ID
+     * Returns 0, if the key is missing or the value cannot be converted 
+     * to integer.
+     * @return The current personality id
+     */
+    int currentMode(); 
+    /*
+     * sets the value to different roles of the model's first row
+     */
+    void setDefaultModeSetting();
+    /*
+     * sets the value to different roles of the model's description row
+     */
+    void setDescriptionSetting();
+    /**
+     * Set the USB mode list and the current selection in the list.
+     * The personality IDs are stored to mPersonalityIds and the personality names
+     * to mSettingsList.
+     * @param modeId The current mode ID
+     */
+    bool setUsbModelistSetting( int modeId );
+    /**
+     * calls the model's set functions
+     * @param modeId The current mode ID
+     */
+    void setUsbSettings( int modeId );
+    /**
+     * updates the model rows and emits signal datachanged
+     * @param newPersonality is the new personality id
+     */
+    void setNewUsbMode(int newPersonality);
+	
+    /**
+     * Check from the USB Manager if the USB personality is hidden.
+     * @param usbman Already opened USB Manager session
+     * @param personalityId The ID of the personality to be checked.
+     * @return For hidden personality, true is returned.
+     */
+    bool isPersonalityHidden(RUsb &usbman, TInt personalityId);
+    
+    /**
+     * Check if the USB personality is hidden.
+     * The personality is hidden, if it does not exist in mPersonalityIds.
+     * @param personalityId The ID of the personality to be checked.
+     * @return For hidden personality, true is returned.
+     */
+    bool isPersonalityHidden(TInt personalityId);
+ private:
+    
+    UsbUiModelDataSource mSettingsList;
+    int mCurrentMode;
+    // stored, so that we can show the correct personality when it fails to set the new one
+    int mPreviousMode; 
+    
+    XQSettingsManager mSettingsManager;
+    QList<int> mPersonalityIds;
+    UsbUiModelActive *mModelActive;
+};
+
+#endif // USBUISETTINGMODEL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/inc/usbviewmanager.h	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef USBVIEWMANAGER_H
+#define USBVIEWMANAGER_H
+
+#include "usbmainview.h"
+
+
+class HbMainWindow;
+
+class UsbViewManager : public QObject
+    {
+    Q_OBJECT
+
+public:
+    explicit UsbViewManager(HbMainWindow* mainWindow, QObject *parent = 0 );
+    ~UsbViewManager();
+    
+    void addView();
+
+private: 
+    HbMainWindow* mWindow;
+    UsbMainView* mMainView; // owned
+
+    };
+
+
+#endif /* USBVIEWMANAGER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/rom/usbsettings.iby	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 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: 
+*
+*/
+
+#ifndef USBSETTING_IBY
+#define USBSETTING_IBY
+// Use standard macros
+#include <data_caging_paths_for_iby.hrh>
+
+file=/epoc32/release/armv5/urel/usbapplication.exe      PROGRAMS_DIR/usbapplication.exe
+data=/epoc32/data/z/private/10003a3f/import/apps/usbapplication_reg.rsc /private/10003a3f/import/apps/usbapplication_reg.rsc
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/rom/usbsettingsresources.iby	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#ifndef USBSETTINGRESOURCES_IBY
+#define USBSETTINGRESOURCES_IBY
+// Use standard macros
+#include <data_caging_paths_for_iby.hrh>
+
+data=/epoc32/data/z/resource/apps/usbapplication.rsc    APP_RESOURCE_DIR/usbapplication.rsc
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/main.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 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 <hbapplication.h>
+#include <hbmainwindow.h>
+#include <QTranslator>
+#include <eikenv.h>
+#include "usbviewmanager.h"
+
+int main(int argc, char *argv[])
+{
+    HbApplication app(argc, argv);
+
+    // add translator for application library
+    QString locale = QLocale::system().name();
+    QTranslator translator;
+    QString filename = QString("usbapplication_") + locale;
+#ifdef Q_OS_SYMBIAN    
+    // TRAP is must here, otherwise it crashes
+TRAP_IGNORE(
+    bool loaded(false);
+    loaded = translator.load( filename, QString("z:/resource/qt/translations") );
+    if (!loaded)
+        translator.load(filename, QString("c:/resource/qt/translations") );
+);
+#else
+    translator.load(filename, QString("resource") );
+#endif //Q_OS_SYMBIAN    
+    app.installTranslator(&translator);
+    
+    HbMainWindow mainWindow;
+
+    // create the view manager, which handles 3 HbViews and add into mainWindow.
+    UsbViewManager* mViewManager = new UsbViewManager( &mainWindow, &app );
+    mViewManager->addView();
+    
+    mainWindow.show();
+    return app.exec();
+}
Binary file usbuis/usbuiqt/src/usbapplication.qm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbapplication.qrc	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RCC>
+    <qresource prefix="/xml">
+        <file>usbview.docml</file>
+    </qresource>
+</RCC>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbapplication.ts	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
+<context>
+<message numerus="no" id="txt_usb_description_5">
+    <comment>Description for USB Ovi Suite personality. This gives user help about the selected personality.</comment>        
+    <source>Manage your phone with Ovi Suite and sync your media content.</source>
+    <translation variants="no">Manage your phone with Ovi Suite and sync your media content.</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid>Text ID</extra-loc-viewid>
+    <extra-loc-positionid>description</extra-loc-positionid>
+    <extra-loc-feature>Te</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modelistname_5">
+    <comment>USB mode name for Ovi Suite personality. This is used in USB application in a radio button list. Note that this string should use exactly the same words as txt_usb_modename_5.</comment>        
+    <source>Ovi Suite</source>
+    <translation variants="no">Ovi Suite</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid>Comment</extra-loc-viewid>
+    <extra-loc-positionid>modelistname</extra-loc-positionid>
+    <extra-loc-feature>Co</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modelistname_2">
+    <comment>USB mode name for Mass storage personality. This is used in USB application in a radio button list. Note that this string should use exactly the same words as txt_usb_modename_2.</comment>        
+    <source>Mass storage</source>
+    <translation variants="no">Mass storage</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid>Layout ID</extra-loc-viewid>
+    <extra-loc-positionid>modelistname</extra-loc-positionid>
+    <extra-loc-feature>La</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modename_2">
+    <comment>USB mode name for Mass storage personality. This is used in USB application as the default (selected) mode.</comment>        
+    <source>Mass storage</source>
+    <translation variants="no">Mass storage</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid>View ID (draft)</extra-loc-viewid>
+    <extra-loc-positionid>modename</extra-loc-positionid>
+    <extra-loc-feature>Vi</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modelistname_6">
+    <comment>USB mode name for Phone as modem personality. This is used in USB application in a radio button list. Note that this string should use exactly the same words as txt_usb_modename_6.</comment>        
+    <source>Connect PC to Web</source>
+    <translation variants="no">Connect PC to Web</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid></extra-loc-viewid>
+    <extra-loc-positionid>modelistname</extra-loc-positionid>
+    <extra-loc-feature></extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_description_2">
+    <comment>Description for USB Mass storage personality. This gives user help about the selected personality.</comment>        
+    <source>Access your phoneÂ’s memory card from the device you are connected to.</source>
+    <translation variants="no">Access your phoneÂ’s memory card from the device you are connected to.</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid>Position ID</extra-loc-viewid>
+    <extra-loc-positionid>description</extra-loc-positionid>
+    <extra-loc-feature>Po</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modelistname_4">
+    <comment>USB mode name for MTP personality. This is used in USB application in a radio button list. Note that this string should use exactly the same words as txt_usb_modename_4.</comment>        
+    <source>Media transfer</source>
+    <translation variants="no">Media transfer</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid></extra-loc-viewid>
+    <extra-loc-positionid>modelistname</extra-loc-positionid>
+    <extra-loc-feature></extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modename_5">
+    <comment>USB mode name for Ovi Suite personality. This is used in USB application as the default (selected) mode.</comment>        
+    <source>Ovi Suite</source>
+    <translation variants="no">Ovi Suite</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid>File name</extra-loc-viewid>
+    <extra-loc-positionid>modename</extra-loc-positionid>
+    <extra-loc-feature>Fi</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_description_6">
+    <comment>Description for USB Phone as Modem personality. This gives user help about the selected personality.</comment>        
+    <source>Use your mobile phone as a modem</source>
+    <translation variants="no">Use your mobile phone as a modem</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid></extra-loc-viewid>
+    <extra-loc-positionid>description</extra-loc-positionid>
+    <extra-loc-feature></extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_description_4">
+    <comment>Description for USB MTP personality. This gives user help about the selected personality.</comment>        
+    <source>Sync your media content with Windows Media Player or Nokia Ovi Player, or connect to compatible stereos.</source>
+    <translation variants="no">Sync your media content with Windows Media Player or Nokia Ovi Player, or connect to compatible stereos.</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid></extra-loc-viewid>
+    <extra-loc-positionid>description</extra-loc-positionid>
+    <extra-loc-feature></extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modename_6">
+    <comment>USB mode name for Phone as Modem personality. This is used in USB application as the default (selected) mode.</comment>        
+    <source>Connect PC to Web</source>
+    <translation variants="no">Connect PC to Web</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid></extra-loc-viewid>
+    <extra-loc-positionid>modename</extra-loc-positionid>
+    <extra-loc-feature></extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_usb_modename_4">
+    <comment>USB mode name for MTP personality. This is used in USB application as the default (selected) mode.</comment>        
+    <source>Media transfer</source>
+    <translation variants="no">Media transfer</translation>
+    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-viewid></extra-loc-viewid>
+    <extra-loc-positionid>modename</extra-loc-positionid>
+    <extra-loc-feature></extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
+</context>
+</TS>
Binary file usbuis/usbuiqt/src/usbapplication.xls has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbapplication_reg.rss	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,18 @@
+// ============================================================================
+// * Generated by qmake (2.01a) (Qt 4.6.0) on: 2009-12-16T13:39:42
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// ============================================================================
+
+#include <usbapplication.rsg>
+#include <appinfo.rh>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xECD2B4FE
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file="usbapplication";
+	localisable_resource_file="\\resource\\apps\\usbapplication";
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbicons.qrc	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,7 @@
+<RCC>
+    <qresource prefix="/" >
+        <file>../icons/usb_icon_mode_2.svg</file>
+        <file>../icons/usb_icon_mode_4.svg</file>
+        <file>../icons/usb_icon_mode_5.svg</file>
+    </qresource>
+</RCC>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbmainview.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 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 "usbmainview.h"
+#include <QModelIndex>
+#include <QtGui/QGraphicsLinearLayout>
+#include <hblistwidget.h>
+#include <hblistwidgetitem.h>
+#include <hbradiobuttonlist.h>
+#include <hbtextedit.h>
+
+#include "usbuisettingmodel.h"
+#include "mydebug.h"
+/*!
+ * default constructor
+ */
+UsbMainView::UsbMainView( QObject *parent )
+:   HbView(), mModel(NULL)
+{
+    myDebug() << ">>> UsbMainView::UsbMainView";
+    setParent( parent );    
+    setTitle( qtTrId("USB") ); 
+    mMainLayout = new QGraphicsLinearLayout( Qt::Vertical, this );
+    mModel = new UsbUiSettingModel();
+    createMainView();
+    setLayout( mMainLayout );
+    myDebug() << "<<< UsbMainView::UsbMainView";      
+}
+
+/*!
+ * creates the main view
+ */
+void UsbMainView::createMainView()
+{
+    myDebug() << ">>> UsbMainView::createMainView";
+    QGraphicsLinearLayout *mainViewLayout = new QGraphicsLinearLayout( Qt::Vertical, mMainLayout );
+    mListItem = NULL;
+    mlist = NULL;
+    mlabel = NULL;
+    mradio = NULL;
+    mIcon = NULL;
+    createIconNameRow( mainViewLayout );
+    createDescriptionArea( mainViewLayout );
+    createRadioButtonArea( mainViewLayout );
+    mMainLayout->addItem( mainViewLayout );
+    bool connected = connect( mModel, SIGNAL( dataChanged( QModelIndex, QModelIndex ) ), 
+            this, SLOT( updateSettingItems( QModelIndex, QModelIndex ) ) );
+    myDebug() << "<<< UsbMainView::createMainView model connected=" << connected;
+    connected = connect(mradio, SIGNAL( itemSelected( int ) ), 
+            this, SLOT( setPersonality( int ) ) );
+    myDebug() << "<<< UsbMainView::createMainView mradio connected=" << connected;
+    myDebug() << "<<< UsbMainView::createMainView";
+}  
+/*!
+ * creating the creates the first row in the view containing an icon and a mode name 
+ */
+void UsbMainView::createIconNameRow( QGraphicsLinearLayout *aLocalPropertiesGroup )
+{
+    myDebug() << ">>> UsbMainView::createIconNameRow";
+    QGraphicsLinearLayout *listLayout = new QGraphicsLinearLayout( Qt::Vertical, mMainLayout );
+    mlist = new HbListWidget( this );
+    mlist->setMaximumSize( 300, 50 ); //todo
+    mListItem= new HbListWidgetItem();
+    QModelIndex index = mModel->index( UsbUiSettingModel::DefaultMode, KDefaultColumn );
+  //  QVariant iconName = mModel->data( index, Qt::DecorationRole );
+    mIcon = new HbIcon( mModel->data( index, Qt::DecorationRole ).toString() );
+    mListItem->setDecorationIcon( *mIcon );
+    mListItem->setText( mModel->data( index,Qt::DisplayRole ).toString() );
+    mListItem->setText( mModel->data( index,Qt::DisplayRole ).toString() );        
+    mlist->insertItem( 1, mListItem ); 
+    listLayout->addItem( mlist );
+    aLocalPropertiesGroup->addItem( listLayout );
+    myDebug() << "<<< UsbMainView::createIconNameRow";      
+}
+/*!
+ * creates the second row from the view containing the description of the selected mode
+ */
+void UsbMainView::createDescriptionArea( QGraphicsLinearLayout *aLocalPropertiesGroup )
+{ 
+    myDebug() << ">>> UsbMainView::createDescriptionArea";
+    QGraphicsLinearLayout *desLayout = new QGraphicsLinearLayout( Qt::Vertical, mMainLayout ); 
+    QModelIndex index = mModel->index( UsbUiSettingModel::Description, KDefaultColumn );
+    mlabel = new HbTextEdit( mModel->data( index, Qt::DisplayRole ).toString() );
+    mlabel->setReadOnly( true );
+    mlabel->setCursorVisibility( Hb::TextCursorHidden );
+    desLayout->addItem( mlabel );
+    desLayout->setAlignment( mlabel, Qt::AlignTop );
+    aLocalPropertiesGroup->addItem( desLayout );
+    myDebug() << "<<< UsbMainView::createDescriptionArea";      
+}
+
+/*!
+ * creates the third row from the view containing the radio button list of the existing usb modes
+ */
+void UsbMainView::createRadioButtonArea(QGraphicsLinearLayout *aLocalPropertiesGroup)
+{
+    myDebug() << ">>> UsbMainView::createRadioButtonArea";
+    QGraphicsLinearLayout *radioLayout = new QGraphicsLinearLayout( Qt::Vertical, mMainLayout ); 
+    QModelIndex index = mModel->index( UsbUiSettingModel::UsbModeList, KDefaultColumn );
+    QStringList radioList = mModel->data( index, UsbUiSettingModel::SettingsModeNameList ).toStringList();
+    int selectedIndex = mModel->data( index, Qt::EditRole ).toInt();
+    mradio = new HbRadioButtonList( radioList, selectedIndex );
+    radioLayout->addItem( mradio );
+    radioLayout->setAlignment( mradio, Qt::AlignBottom );
+    aLocalPropertiesGroup->addItem(radioLayout); 
+    myDebug() << "<<< UsbMainView::createRadioButtonArea";      
+}
+
+/*!
+    Slot for receiving notification of data changes from the model.
+    Identify the setting changed and update the corresponding UI item.
+ */
+void UsbMainView::updateSettingItems(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+{   
+    myDebug() << ">>> UsbMainView::updateSettingItems";
+    // update only the part of the view specified by the model row(s)
+    for ( int row = topLeft.row(); row <= bottomRight.row(); row++ ) {
+        myDebug() << "    UsbMainView::updateSettingItems row=" << row;
+        QModelIndex index = mModel->index( row, KDefaultColumn );
+        // Distinguish which setting value is changed.
+        switch ( row ) {
+        case UsbUiSettingModel::DefaultMode :
+            // set the selected personality icon and name
+            mIcon->setIconName( mModel->data( index, Qt::DecorationRole ).toString() );
+            mListItem->setDecorationIcon( *mIcon );
+            mListItem->setText( mModel->data( index,Qt::DisplayRole ).toString() );            
+            break;
+        case UsbUiSettingModel::Description :
+            // set the description of the selected personality.
+            mlabel->setPlainText( mModel->data( index, Qt::DisplayRole ).toString() );
+            mlabel->setReadOnly( true );
+            mlabel->setCursorVisibility( Hb::TextCursorHidden );            
+            break;
+        case UsbUiSettingModel::UsbModeList :
+            // only the selection can change, no changes in the list of personalities
+            mradio->setSelected( mModel->data( index, Qt::EditRole ).toInt() );
+            break;
+        default :
+            myDebug() << "    UsbMainView::updateSettingItems unknown row " << row;
+            break;
+        }
+    }
+    myDebug() << "<<< UsbMainView::updateSettingItems";
+}
+
+/*
+ * Slot for receiving notification from the change in radio button list
+ */
+void UsbMainView::setPersonality( int personalityIndex )
+{
+    myDebug() << ">>> UsbMainView::setPersonality";
+    QModelIndex index = mModel->index( UsbUiSettingModel::UsbModeList, KDefaultColumn );
+    mModel->setData( index, personalityIndex, Qt::EditRole );
+    myDebug() << "<<< UsbMainView::setPersonality";
+}
+
+/*!
+ * Destructor
+ * destructs the items which are not owned by this class
+ */
+UsbMainView::~UsbMainView()
+{ 
+    myDebug() << ">>> UsbMainView::~UsbMainView";
+    delete mModel;
+    delete mIcon;
+    myDebug() << "<<< UsbMainView::~UsbMainView";   
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbuimodelactive.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 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 "usbuimodelactive.h"
+#include "mydebug.h"
+
+//const ?type ?constant_var = ?constant;
+
+
+/*!
+    Constructor.
+ */
+UsbUiModelActive::UsbUiModelActive( int priority, QObject *parent )
+:   QObject( parent )
+{
+    myDebug() << ">>> UsbUiModelActive::UsbUiModelActive";
+    d = new UsbUiModelActivePrivate( this, priority );
+    int err= iUsbWatcher.Connect();    
+    myDebug() << "iUsbWatcher.Connect() returned ";
+    myDebug() << err;  
+    myDebug() << "<<< UsbUiModelActive::UsbUiModelActive";
+}
+
+/*!
+    Destructor.
+ */
+UsbUiModelActive::~UsbUiModelActive()
+{        
+    myDebug() << ">>> UsbUiModelActive::~UsbUiModelActive";
+    delete d;
+    iUsbWatcher.Close(); 
+    myDebug() << "<<< UsbUiModelActive::~UsbUiModelActive";
+}
+/*!
+ * emits a signal when the request is completed
+ */
+void UsbUiModelActive::emitRequestCompleted( int status )
+{
+    myDebug() << ">>> UsbUiModelActive::emitRequestCompleted status: ";
+    myDebug() << status; 
+    emit requestCompleted( status );
+    myDebug() << "<<< UsbUiModelActive::emitRequestCompleted";
+}
+
+/*!
+ * UsbUiModelActive::SetUSBModeL
+ * Sets the Central Repository key to the parameter.
+ */
+int UsbUiModelActive::SetUsbPersonality(int personality)
+    {
+    myDebug() << ">>> UsbUiModelActive::SetUsbPersonality";
+    myDebug() << "requested personality is ";
+    myDebug() << personality;   
+    // Change the personality asynchrously, result checked in RunL()
+    if( IsActive() ) 
+        {
+        Cancel();
+        }
+    myDebug() << "setting new personality";    
+    iUsbWatcher.SetPersonality(RequestStatus(), personality);
+    SetActive();
+    myDebug() << "<<< UsbUiModelActive::SetUsbPersonality, returns 0";
+    return 0;
+    }
+/*!
+ * cancles the personality set in usbwatcher
+ */
+void UsbUiModelActive::CancelSetPersonality()
+    {
+    iUsbWatcher.CancelSetPersonality();    
+    }
+
+/*!
+    Constructor.
+ */
+UsbUiModelActivePrivate::UsbUiModelActivePrivate( 
+        UsbUiModelActive *parent, int priority )
+:   CActive( (TInt) priority ), q( parent )
+{
+    myDebug() << ">>> UsbUiModelActivePrivate::UsbUiModelActivePrivate";
+    CActiveScheduler::Add( this );
+    myDebug() << "<<< UsbUiModelActivePrivate::UsbUiModelActivePrivate";
+}
+
+
+/*!
+    Destructor.
+ */
+UsbUiModelActivePrivate::~UsbUiModelActivePrivate()
+{
+    Cancel();
+}
+
+
+/*!
+ *  Called by the active scheduler when the request has been completed.
+ */
+void UsbUiModelActivePrivate::RunL()
+{
+    myDebug() << ">>> UsbUiModelActivePrivate::RunL";
+    q->emitRequestCompleted( iStatus.Int() );
+    myDebug() << "<<< UsbUiModelActivePrivate::RunL";
+}
+
+
+/*!
+    Called by the active scheduler when the request has been cancelled.
+ */
+void UsbUiModelActivePrivate::DoCancel()
+{
+    q->CancelSetPersonality();
+}
+
+
+/*!
+    Called by the active scheduler when an error in RunL has occurred.
+ */
+TInt UsbUiModelActivePrivate::RunError( TInt aError )
+{
+    q->emitRequestCompleted( aError );
+    return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbuisettingmodel.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 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 "usbuisettingmodel.h"
+#include "usbuimodelactive.h"
+#include "mydebug.h"
+#include <QStringList>
+#include <UsbWatcherInternalCRKeys.h>
+#include <XQSettingsKey>
+#include <usbman.h>
+
+const QString TextIdPrefix = ("txt_usb_");
+const QString ModeIconNamePrefix = (":/icons/usb_icon_mode_");
+
+/*!
+    Constructor.
+ */
+UsbUiSettingModel::UsbUiSettingModel( QObject *parent )
+    : QAbstractItemModel( parent )
+{
+    mModelActive = new UsbUiModelActive();
+    
+    for ( int i = 0; i < UsbUiSettingModel::EndOfSettings; i++ ) {
+        // Initialize the list with empty values.
+        mSettingsList.append( QMap< int, QVariant >() );
+    }
+    
+    mCurrentMode = currentMode();
+    mPreviousMode = mCurrentMode;
+    setUsbSettings(mCurrentMode);
+  	bool ret = mSettingsManager.startMonitoring( 
+   	        XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
+   	                KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) );
+    myDebug() << ">>> UsbUiSettingModel::startMonitoring value=" 
+              << ret; 
+                              
+   	// signal: personality changed in the central repository                
+   	connect( &mSettingsManager, 
+   	        SIGNAL( valueChanged( const XQSettingsKey&, const QVariant& ) ), 
+   	        this, 
+   	        SLOT( usbModeChanged( const XQSettingsKey&, const QVariant& ) ) );
+   	        
+   // signal: response from usbwatcher to our attempt to set the personality 	        
+   	connect( mModelActive, 
+   	        SIGNAL( requestCompleted( int status ) ), 
+   	        this, 
+   	        SLOT( setPersonalityCompleted (int status )));
+
+}
+/*!
+ * calls the model's set functions to initialize the model's data
+ */
+void UsbUiSettingModel::setUsbSettings( int aModeId )
+    {
+    setUsbModelistSetting( aModeId ); 
+    setDefaultModeSetting();
+    setDescriptionSetting();
+    }
+
+/*!
+    Destructor.
+ */
+UsbUiSettingModel::~UsbUiSettingModel()
+{
+    myDebug() << ">>> UsbUiSettingModel::~UsbUiSettingModel";
+    mSettingsManager.stopMonitoring( 
+            XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
+                    KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) );
+    delete mModelActive;
+    myDebug() << "<<< UsbUiSettingModel::~UsbUiSettingModel";
+}
+
+/*!
+    Provides notification of changes in selected usb mode
+ */
+void UsbUiSettingModel::usbModeChanged( const XQSettingsKey &key,  
+        const QVariant &value )  
+{
+Q_UNUSED(key);
+    myDebug() << ">>> UsbUiSettingModel::usbModeChanged";
+    // key is not checked, as we monitor only one key
+ 
+    setNewUsbMode(value.toInt());
+                                  
+    myDebug() << "<<< UsbUiSettingModel::usbModeChanged"; 
+}
+/*!
+ * updates the model rows and emits signal datachanged
+ */
+void UsbUiSettingModel::setNewUsbMode(int newPersonality)
+    
+    {
+    myDebug() << ">>> UsbUiSettingModel::setNewUsbMode value=" 
+            << newPersonality; 
+            
+    mCurrentMode = newPersonality;
+    setUsbSettings(mCurrentMode);
+   	
+    emit dataChanged( createIndex( DefaultMode, KDefaultColumn ), 
+            createIndex( UsbModeList, KDefaultColumn ) );   
+         
+    myDebug() << "<<< UsbUiSettingModel::setNewUsbMode"; 
+    }
+/*!
+ * Returns the index of the item in the model specified by the given row, column and parent index.
+ */
+QModelIndex UsbUiSettingModel::index( int row, int column, const QModelIndex &parent ) const
+{
+    return hasIndex( row, column, parent ) ? createIndex( row, column ) : QModelIndex();
+}
+
+
+/*
+    This model does not support hierarchy, so this returns an empty model index. 
+ */
+QModelIndex UsbUiSettingModel::parent( const QModelIndex &child ) const
+{
+    Q_UNUSED( child );
+    return QModelIndex();
+}
+/*!
+ * Returns the number of rows under the given parent
+ */
+int UsbUiSettingModel::rowCount( const QModelIndex &parent ) const
+{
+    Q_UNUSED( parent );
+    return mSettingsList.count();
+}
+
+
+/*!
+ * Returns the number of columns for the children of the given parent.
+ * This model is one-dimensional, so this returns 1.
+ */
+int UsbUiSettingModel::columnCount( const QModelIndex &parent ) const
+{
+    Q_UNUSED( parent );
+    return 1;
+}
+/*!
+ * Returns the data stored under the given role for the item referred to by the index.
+ */
+QVariant UsbUiSettingModel::data( const QModelIndex &index, int role ) const
+{
+    return mSettingsList.value( index.row() ).value( role );
+}
+
+
+/*!
+ * This is called when usb mode is changed, it only sets the personality when the given role is EditRole 
+ */
+bool UsbUiSettingModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+    myDebug() << ">>>  UsbUiSettingModel::setData";
+    bool success = false;
+    if ( role == Qt::EditRole ) {
+        // Only allow changes on the value with role EditRole. Others are managed here.
+        switch ( index.row() ) {
+        case UsbModeList: {            
+            mModelActive->SetUsbPersonality( mPersonalityIds.at( value.toInt() ) );
+            success = true;
+            // also update the rest of the model with the about to be selected mode right away
+            setNewUsbMode(mPersonalityIds.at( value.toInt() ));
+            break;
+            }
+        case DefaultMode:
+            //no break
+        case Description:
+            //no break
+        default:
+            myDebug() << "    UsbUiSettingModel::setData not supported row " << index.row();
+            break;
+        } 
+    }   
+    myDebug() << "<<<  UsbUiSettingModel::setData return " << success;
+    return success;
+}
+
+/*!
+ * Getter for the source data.
+ */
+const QModelIndex* UsbUiSettingModel::sourceData() const
+{
+    return new QModelIndex( createIndex( 0, 0 ) );
+}
+
+/*!
+ * creats the logical name of the modename string for the list
+ */
+QString UsbUiSettingModel::modeListName( int modeId )
+{
+    QString textId = TextIdPrefix + "modelistname_" + QString::number( modeId );
+    QString modeName = qtTrId( textId.toAscii() );
+    return modeName;
+}
+
+/*!
+ * Get the current USB mode (personality) ID
+ */
+int UsbUiSettingModel::currentMode()
+{
+    myDebug() << ">>>  UsbUiSettingModel::CurrentMode";
+    int currentMode = mSettingsManager.readItemValue(
+                XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
+                KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) ).toInt();
+    myDebug() << "<<< UsbUiSettingModel::CurrentMode " << currentMode;
+    return currentMode;
+}
+
+/*!
+ * sets the value to different roles of the model's first row
+ */
+void UsbUiSettingModel::setDefaultModeSetting()
+{    
+    QString iconName;
+    QString modeName;
+    //empty iconName and modeName are used for a hidden personality
+    if ( !isPersonalityHidden(mCurrentMode) ) {
+        iconName = ModeIconNamePrefix + QString::number( mCurrentMode ) + ".svg";
+        QString textId = TextIdPrefix + "modename_" + QString::number( mCurrentMode );
+        modeName = qtTrId( textId.toAscii() );
+    }
+
+    myDebug() << ">>> UsbUiSettingModel::setDefaultModeSetting iconName=" 
+            << iconName << " modeName=" << modeName;
+    QMap< int, QVariant > val = mSettingsList.at( DefaultMode );
+    if ( val.isEmpty() ) {
+        val[ SettingType ] = QVariant( DefaultMode );
+    }    
+    val[ Qt::DecorationRole ] = QVariant(iconName) ;
+    val[ Qt::DisplayRole ]= QVariant(modeName) ;
+    mSettingsList.replace( DefaultMode, val );
+    myDebug() << "<<< UsbUiSettingModel::setDefaultModeSetting";
+}
+
+/*!
+    Updates all values related to the mode description.
+ */
+void UsbUiSettingModel::setDescriptionSetting()
+{
+    QString description;
+    //the description will be empty for a hidden personality
+    if ( !isPersonalityHidden(mCurrentMode) ) {
+        QString textId = TextIdPrefix + "description_" 
+                + QString::number( mCurrentMode );
+        description = qtTrId( textId.toAscii() );
+    }
+    myDebug() << ">>> UsbUiSettingModel::setDescriptionSetting description=" 
+            << description;
+    QMap< int, QVariant > val = mSettingsList.at( Description );
+    if ( val.isEmpty() ) {
+       
+        val[ SettingType ] = QVariant( Description );
+     
+    }
+    // The display role stores the string representation of the actual value.
+    val[ Qt::DisplayRole ] = QVariant( description );
+    	 mSettingsList.replace( Description, val );
+    myDebug() << "<<< UsbUiSettingModel::setDescriptionSetting";     
+}
+
+/*!
+    Updates all values related to the visibility setting.
+    Updates the selectable USB modes only in the 1st call.
+ */
+bool UsbUiSettingModel::setUsbModelistSetting( int aModeId )
+{
+    myDebug() << ">>> UsbUiSettingModel::setUsbModelistSetting aModeIndex="
+            << aModeId;
+   bool ret = true;
+    QMap< int, QVariant > val = mSettingsList.at(UsbModeList);
+    if ( val.isEmpty() ) {
+        val[ SettingType ] = QVariant( UsbModeList );
+
+        RUsb iUsbman;
+        if ( iUsbman.Connect() == KErrNone ) {
+            
+            RArray<TInt> personalityIds;
+            mPersonalityIds.clear();
+            if ( iUsbman.GetPersonalityIds( personalityIds ) == KErrNone ) {
+                QStringList modeList;
+                for ( int i = 0; i < personalityIds.Count(); i++ ) {
+                    if ( !isPersonalityHidden(iUsbman, personalityIds[i]) ) {
+                        mPersonalityIds.append( personalityIds[i] );
+                        modeList.append( modeListName( mPersonalityIds[i] ) );                    
+                    }
+                }
+                val[ SettingsModeNameList ] = QVariant( modeList ); 
+            }
+        }
+        else{
+        ret = false;
+        }
+        iUsbman.Close();
+    }
+    //index will be -1 for hidden personality
+    val[ Qt::EditRole ] = QVariant( mPersonalityIds.indexOf(aModeId) );
+    mSettingsList.replace( UsbModeList, val );
+    myDebug() << "<<< UsbUiSettingModel::setUsbModelistSetting";
+    return ret;
+}
+
+/*!
+ * it checks the response from usbwatcher to see if the new mode change has been successful
+ * it will go back to the previous personality if it has not been successfull
+ */
+void UsbUiSettingModel::setPersonalityCompleted (int status )
+{
+  myDebug() << ">>> UsbUiSettingModel::setPersonalityCompleted status= "
+    << status;    
+  // status contains Symbian error code from usbwatcher
+  // if the status is KErrNone, we are ready to process the next request
+  if (status != KErrNone) 
+    {
+    // changing the personality failed, so we need to set back the previous personality
+    // the value will be read from central repository and also updates mCurrentMode  
+    mPreviousMode = mSettingsManager.readItemValue(
+                   XQSettingsKey( XQSettingsKey::TargetCentralRepository, 
+                   KCRUidUsbWatcher.iUid, KUsbWatcherPersonality ) ).toInt();
+    setNewUsbMode(mPreviousMode);
+    }
+   
+   // after handling the return code we know the the current personality works
+   // and we will not go back to the previous one 
+   mPreviousMode = mCurrentMode; 
+   myDebug() << "<<< UsbUiSettingModel::setPersonalityCompleted";      
+}
+
+bool UsbUiSettingModel::isPersonalityHidden(RUsb &usbman, TInt personalityId)
+{
+    myDebug() << ">>> UsbUiSettingModel::isPersonalityHidden from USB Manager";
+    bool hidden = false;
+    TUint32 property = 0;
+    TInt ret = usbman.GetPersonalityProperty(personalityId, property);
+    if (ret == KErrNone) {
+        myDebug() << "property " << property;
+        if (property & KUsbPersonalityPropertyHidden) {
+            hidden = true;
+        }
+    } 
+    myDebug() << "<<< UsbUiSettingModel::isPersonalityHidden " << hidden;
+    return hidden;
+}
+
+bool UsbUiSettingModel::isPersonalityHidden(TInt personalityId)
+{
+    return ( mPersonalityIds.indexOf(personalityId) == -1 );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/src/usbviewmanager.cpp	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 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 <HbMainWindow.h>
+#include "UsbViewManager.h"
+#include "UsbMainView.h"
+
+
+UsbViewManager::UsbViewManager( HbMainWindow* mainWindow, QObject *parent )
+:   QObject( parent ),
+    mWindow(mainWindow)
+    {
+    }
+
+UsbViewManager::~UsbViewManager()
+    {
+    
+    }
+
+/*!
+    Create views(main view, gadget gallery view and gadget details view).
+    Add them to MainWindow.
+ */
+void UsbViewManager::addView()
+    {
+    // Create main view and add
+    mMainView = new UsbMainView( this );
+    mWindow->addView(mMainView);
+      
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/usbuiqt/usbapplication.pro	Fri Mar 19 09:48:52 2010 +0200
@@ -0,0 +1,71 @@
+#
+# ============================================================================
+#  Name        : usbapplication.pro
+#  Part of     : USB / USB Settings Application       *** Info from the SWAD
+#  Description : Project definition file for project USB Settings Application
+#  Version     : %version: 6 % << Don't touch! Updated by Synergy at check-out.
+#
+#  Copyright © 2009 Nokia.  All rights reserved.
+#  This material, including documentation and any related computer
+#  programs, is protected by copyright controlled by Nokia.  All
+#  rights are reserved.  Copying, including reproducing, storing,
+#  adapting or translating, any or all of this material requires the
+#  prior written consent of Nokia.  This material also contains
+#  confidential information which may not be disclosed to others
+#  without the prior written consent of Nokia.
+# ============================================================================
+#
+
+TEMPLATE = app
+TARGET = usbapplication
+QT += core \
+    gui \
+    xml
+HEADERS += inc/usbuisettingmodel.h \
+    inc/usbuimodelactive.h \
+    inc/usbviewmanager.h \
+    inc/usbmainview.h
+SOURCES += src/usbuisettingmodel.cpp \
+    src/usbuimodelactive.cpp \
+    src/usbviewmanager.cpp \
+    src/usbmainview.cpp \
+    src/main.cpp \
+    src/usbapplication_reg.rss
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+LIBS += -lcentralrepository
+LIBS += -lusbwatcher
+LIBS += -lxqsettingsmanager
+LIBS += -lusbman
+LIBS += -lhbcore
+LIBS += -lhbwidgets
+LIBS += -lhbtools
+FORMS += 
+RESOURCES += src/usbicons.qrc \
+    src/usbapplication.qrc
+CONFIG += qt \
+    hb
+
+symbian: {
+    TARGET.UID3 = 0x2002BCA3
+    TARGET.CAPABILITY = LocalServices \
+        WriteDeviceData
+
+	# for pkg
+	usbuitranslation.sources = src/usbapplication.qm
+	usbuitranslation.path = /resource
+	DEPLOYMENT += usbuitranslation
+
+    BLD_INF_RULES.prj_exports += "./src/usbapplication.qm z:/resource/qt/translations/usbapplication.qm
+}
+
+# placeholder for creating sis file
+createsis.commands += ( makesis -v usbapplication.pkg ); \
+    && \
+    ( signsis.exe usbapplication.sis usbapplication_signed.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key ); \
+    && \
+    ( del usbapplication.sis );
+QMAKE_EXTRA_TARGETS += createsis
+
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+        "rom/usbsettings.iby   CORE_MW_LAYER_IBY_EXPORT_PATH(usbsettings.iby)" \
+        "rom/usbsettingsresources.iby   LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(usbsettingsresources.iby)"