diff -r ff5437e4337c -r 48e57fb1237e userlibandfileserver/fileserver/smassstorage/drivepublisher.cpp --- a/userlibandfileserver/fileserver/smassstorage/drivepublisher.cpp Wed Oct 06 17:13:14 2010 +0100 +++ b/userlibandfileserver/fileserver/smassstorage/drivepublisher.cpp Mon Oct 11 17:54:41 2010 +0100 @@ -11,16 +11,16 @@ // Contributors: // // Description: -// Class implementation of the drive publishing classes - +// Class implementation of the drive publishing classes - // RDriveMediaErrorPublisher, -// RDriveStateChangedPublisher, +// RDriveStateChangedPublisher, // CDriveTransferPublisher, // CDriveWriteTransferPublisher, // CDriveReadTransferPublisher, // CUsbTransferPublisher, // CUsbReadTransferPublisher, // CUsbReadTransferPublisher. -// +// // /** @@ -28,42 +28,48 @@ @internalTechnology */ -#include "massstoragedebug.h" + #include "drivepublisher.h" #include "drivemanager.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "drivepublisherTraces.h" +#endif -// + + +// // Use Lookup table to translate from the internal pair of state variables // to the externally published drive state code. // -LOCAL_D const TUint8 table[][5] = +static const TUint8 table[][5] = { //TMountState=EDisconnected - {EUsbMsDriveState_Disconnected, - EUsbMsDriveState_Disconnected, - EUsbMsDriveState_Disconnected, - EUsbMsDriveState_Disconnected, - EUsbMsDriveState_Disconnected}, + {EUsbMsDriveState_Disconnected, + EUsbMsDriveState_Disconnected, + EUsbMsDriveState_Disconnected, + EUsbMsDriveState_Disconnected, + EUsbMsDriveState_Disconnected}, //TMountState=EConnecting - {EUsbMsDriveState_Connecting, - EUsbMsDriveState_Connecting, - EUsbMsDriveState_Connecting, - EUsbMsDriveState_Connecting, - EUsbMsDriveState_Connecting}, + {EUsbMsDriveState_Connecting, + EUsbMsDriveState_Connecting, + EUsbMsDriveState_Connecting, + EUsbMsDriveState_Connecting, + EUsbMsDriveState_Connecting}, //TMountState=EConnected - //EIdle,EActive,ELocked,EMediaNotPresent,EErrDisMounted - {EUsbMsDriveState_Connected, - EUsbMsDriveState_Active, - EUsbMsDriveState_Locked, - EUsbMsDriveState_MediaNotPresent, - EUsbMsDriveState_Removed}, + //EIdle,EActive,ELocked,EMediaNotPresent,EErrDisMounted + {EUsbMsDriveState_Connected, + EUsbMsDriveState_Active, + EUsbMsDriveState_Locked, + EUsbMsDriveState_MediaNotPresent, + EUsbMsDriveState_Removed}, //TMountState=EDisconnecting - {EUsbMsDriveState_Disconnecting, - EUsbMsDriveState_Disconnecting, - EUsbMsDriveState_Disconnecting, - EUsbMsDriveState_Disconnecting, - EUsbMsDriveState_Disconnecting} + {EUsbMsDriveState_Disconnecting, + EUsbMsDriveState_Disconnecting, + EUsbMsDriveState_Disconnecting, + EUsbMsDriveState_Disconnecting, + EUsbMsDriveState_Disconnecting} }; @@ -72,29 +78,25 @@ Constructor */ RDriveMediaErrorPublisher::RDriveMediaErrorPublisher() - { - __FNLOG("RDriveMediaErrorPublisher::RDriveMediaErrorPublisher()"); - - _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); - _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); + { + _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); + _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - TInt result = RProperty::Define(EUsbMsDriveState_MediaError, RProperty::EInt, - KMassStorageReadPolicy, KMassStorageWritePolicy); - - __ASSERT_DEBUG(result == KErrAlreadyExists || result == KErrNone, User::Invariant()); - - result = iMediaErrorProperty.Attach(KUsbMsDriveState_Category, EUsbMsDriveState_MediaError); - __ASSERT_DEBUG(result == KErrNone, User::Invariant()); - } + TInt result = RProperty::Define(EUsbMsDriveState_MediaError, RProperty::EInt, + KMassStorageReadPolicy, KMassStorageWritePolicy); + + __ASSERT_DEBUG(result == KErrAlreadyExists || result == KErrNone, User::Invariant()); + + result = iMediaErrorProperty.Attach(KUsbMsDriveState_Category, EUsbMsDriveState_MediaError); + __ASSERT_DEBUG(result == KErrNone, User::Invariant()); + } RDriveMediaErrorPublisher::~RDriveMediaErrorPublisher() - { - __FNLOG("RDriveStatePublisher::~RDriveStatePublisher()"); - - iMediaErrorProperty.Close(); - RProperty::Delete(KUsbMsDriveState_Category, EUsbMsDriveState_MediaError); - } + { + iMediaErrorProperty.Close(); + RProperty::Delete(KUsbMsDriveState_Category, EUsbMsDriveState_MediaError); + } /** Publishing method @@ -104,17 +106,16 @@ @param aError ETrue if drive media has an error else EFalse for no error */ void RDriveMediaErrorPublisher::PublishError(TBool aError) - { - __PRINT1(_L("<< RDriveMediaErrorPublisher::PublishError %x"), aError); - - TInt oldValue; - iMediaErrorProperty.Get(oldValue); + { + OstTraceFunctionEntry0(DRIVEPUBLISHER_100); + TInt oldValue; + iMediaErrorProperty.Get(oldValue); - if (oldValue != aError) - { - User::LeaveIfError(iMediaErrorProperty.Set(aError)); - } - } + if (oldValue != aError) + { + User::LeaveIfError(iMediaErrorProperty.Set(aError)); + } + } //---------------------------------------------------------------------------- /** @@ -124,70 +125,64 @@ @param aDriveMap */ RDriveStateChangedPublisher::RDriveStateChangedPublisher(TRefMsDriveList aDrives, - TRefDriveMap aDriveMap) - : - iDrives(aDrives), - iDriveMap(aDriveMap) - { - __FNLOG("RDriveStateChangedPublisher::RDriveStateChangedPublisher()"); + TRefDriveMap aDriveMap) + : + iDrives(aDrives), + iDriveMap(aDriveMap) + { + _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); + _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); - _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - - TInt result = RProperty::Define(KUsbMsDriveState_Category, - EUsbMsDriveState_DriveStatus, RProperty::EByteArray, - KMassStorageReadPolicy, KMassStorageWritePolicy, - KUsbMsMaxDrives*2); - __ASSERT_DEBUG(result == KErrAlreadyExists || result == KErrNone, User::Invariant()); - result = result; // remove urel warning - } + TInt result = RProperty::Define(KUsbMsDriveState_Category, + EUsbMsDriveState_DriveStatus, RProperty::EByteArray, + KMassStorageReadPolicy, KMassStorageWritePolicy, + KUsbMsMaxDrives*2); + __ASSERT_DEBUG(result == KErrAlreadyExists || result == KErrNone, User::Invariant()); + result = result; // remove urel warning + } RDriveStateChangedPublisher::~RDriveStateChangedPublisher() - { - __FNLOG("RDriveStateChangedPublisher::~RDriveStateChangedPublisher()"); - - RProperty::Delete(KUsbMsDriveState_Category, EUsbMsDriveState_DriveStatus); - } + { + RProperty::Delete(KUsbMsDriveState_Category, EUsbMsDriveState_DriveStatus); + } /** Publishing method -Sends a property event on behalf of CMassStorageDrive, with the mountstate and drivestate +Sends a property event on behalf of CMassStorageDrive, with the mountstate and drivestate values encoded into one 32-bit word. */ void RDriveStateChangedPublisher::DriveStateChanged() - { - __FNLOG("RDriveStateChangedPublisher::DriveStateChanged"); - - - TUsbMsDrivesStatus allDrivesStatus; - for(TUint8 i=0; iMountState(); - CMassStorageDrive::TDriveState ds = iDrives[i]->DriveState(); - TInt driveStatus = EUsbMsDriveState_Error; - if((TUint8)ds < sizeof(table[0]) && (TUint8)ms < sizeof(table)/sizeof(table[0])) - { - driveStatus = table[ms][ds]; - __PRINT3(_L("ms=%d ds=%d %d"), ms, ds, driveStatus); - } - allDrivesStatus.Append(driveStatus); - } + CMassStorageDrive::TMountState ms = iDrives[i]->MountState(); + CMassStorageDrive::TDriveState ds = iDrives[i]->DriveState(); + TInt driveStatus = EUsbMsDriveState_Error; + if((TUint8)ds < sizeof(table[0]) && (TUint8)ms < sizeof(table)/sizeof(table[0])) + { + driveStatus = table[ms][ds]; + OstTraceExt3(TRACE_SMASSSTORAGE_DRIVE, DRIVEPUBLISHER_110, + "ms=%d ds=%d %d", ms, ds, driveStatus); + } + allDrivesStatus.Append(driveStatus); + } - __PRINT1(_L("Publishing EUsbMsDriveState_DriveStatus for %d drives\n"), - allDrivesStatus.Length()/2); + OstTrace1(TRACE_SMASSSTORAGE_DRIVE, DRIVEPUBLISHER_111, + "Publishing EUsbMsDriveState_DriveStatus for %d drives", allDrivesStatus.Length()/2); - if(KErrNone != RProperty::Set(KUsbMsDriveState_Category, - EUsbMsDriveState_DriveStatus, - allDrivesStatus)) - { - __ASSERT_DEBUG(EFalse,User::Invariant()); - } - } + if(KErrNone != RProperty::Set(KUsbMsDriveState_Category, + EUsbMsDriveState_DriveStatus, + allDrivesStatus)) + { + __ASSERT_DEBUG(EFalse,User::Invariant()); + } + } //---------------------------------------------------------------------------- @@ -195,60 +190,56 @@ /** Private default constructor to ensure that NewL is used -@param aSubKey +@param aSubKey @param aDrives */ CDriveTransferPublisher::CDriveTransferPublisher( - TUsbMsDriveState_Subkey aSubKey, - TRefMsDriveList aDrives) - : - iSubKey(aSubKey), - iDrives(aDrives) - { - } + TUsbMsDriveState_Subkey aSubKey, + TRefMsDriveList aDrives) + : + iSubKey(aSubKey), + iDrives(aDrives) + { + } void CDriveTransferPublisher::ConstructL() - { - __FNLOG("CDriveTransferPublisher::ConstructL"); + { + _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); + _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); - _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - - TInt r = RProperty::Define(iSubKey, RProperty::EByteArray, - KMassStorageReadPolicy, KMassStorageWritePolicy, - KUsbMsMaxDrives*sizeof(TInt)); + TInt r = RProperty::Define(iSubKey, RProperty::EByteArray, + KMassStorageReadPolicy, KMassStorageWritePolicy, + KUsbMsMaxDrives*sizeof(TInt)); - if (r != KErrAlreadyExists) - { - User::LeaveIfError(r); - } + if (r != KErrAlreadyExists) + { + User::LeaveIfError(r); + } - User::LeaveIfError(iProperty.Attach(KUsbMsDriveState_Category, iSubKey)); + User::LeaveIfError(iProperty.Attach(KUsbMsDriveState_Category, iSubKey)); - // Create the EDataTransferred timer - iTimer = CPeriodic::NewL(CActive::EPriorityStandard); - iTimerRunning = EFalse; - } + // Create the EDataTransferred timer + iTimer = CPeriodic::NewL(CActive::EPriorityStandard); + iTimerRunning = EFalse; + } /** Destructor */ CDriveTransferPublisher::~CDriveTransferPublisher() - { - __FNLOG("CDriveTransferPublisher::~CDriveTransferPublisher"); + { + if(iTimer) + { + iTimer->Cancel(); + } + delete iTimer; - if(iTimer) - { - iTimer->Cancel(); - } - delete iTimer; + iProperty.Close(); - iProperty.Close(); - - RProperty::Delete(KUsbMsDriveState_Category, iSubKey); - } + RProperty::Delete(KUsbMsDriveState_Category, iSubKey); + } /** @@ -259,11 +250,10 @@ @return not used in CPeriodic callback (see TCallback) */ TInt CDriveTransferPublisher::PublishDataTransferredEvent(TAny* obj) - { - __FNLOG("CDrivePublisher::PublishDataTransferredEvent"); - static_cast(obj)->DoPublishDataTransferredEvent(); - return 1; - } + { + static_cast(obj)->DoPublishDataTransferredEvent(); + return 1; + } /** @@ -271,65 +261,63 @@ the last update. */ void CDriveTransferPublisher::DoPublishDataTransferredEvent() - { - if (PublishDataTransferred()) - { - // some data has been transfered so reset the counter - iTimerCancelCnt = ETimerCancelDelay; - } + { + if (PublishDataTransferred()) + { + // some data has been transfered so reset the counter + iTimerCancelCnt = ETimerCancelDelay; + } - // Update the cancel count if no data was transferred the last - // (few) times this has been called - if (--iTimerCancelCnt == 0) - { - StopTimer(); - iTimerCancelCnt = ETimerCancelDelay; - } - } + // Update the cancel count if no data was transferred the last + // (few) times this has been called + if (--iTimerCancelCnt == 0) + { + StopTimer(); + iTimerCancelCnt = ETimerCancelDelay; + } + } /** -Update the data transferred properties if the counts have changed since +Update the data transferred properties if the counts have changed since the last update. */ TBool CDriveTransferPublisher::PublishDataTransferred() - { - __FNLOG("CDriveWriteTransferPublisher::PublishDataTransferred"); - - TUsbMsBytesTransferred bytesTransferred; - TBool dataTransferred = EFalse; + { + TUsbMsBytesTransferred bytesTransferred; + TBool dataTransferred = EFalse; - for (TInt i=0; i < iDrives.Count() && iDrives[i]; i++) - { - bytesTransferred[i] = GetBytesTransferred(i); - } + for (TInt i=0; i < iDrives.Count() && iDrives[i]; i++) + { + bytesTransferred[i] = GetBytesTransferred(i); + } - // Update the properties only if they have changed - // (or if there's an error reading the old value.) - // Possible optimisation: keep a copy of the value - // as a member variable so we don't need the Get. - TUsbMsBytesTransferred oldValue; + // Update the properties only if they have changed + // (or if there's an error reading the old value.) + // Possible optimisation: keep a copy of the value + // as a member variable so we don't need the Get. + TUsbMsBytesTransferred oldValue; - if ((iProperty.Get(oldValue) != KErrNone) || (oldValue != bytesTransferred)) - { + if ((iProperty.Get(oldValue) != KErrNone) || (oldValue != bytesTransferred)) + { #ifdef __PRINT3 - for (TInt j=0; j < iDrives.Count() && iDrives[j]; j++) - { - if(oldValue[j] != bytesTransferred[j]) - { - __PRINT3(_L("CDrivePublisher: KBytes[%d] %d->%d\n"), j, oldValue[j], bytesTransferred[j]); - } - } + for (TInt j=0; j < iDrives.Count() && iDrives[j]; j++) + { + if(oldValue[j] != bytesTransferred[j]) + { + __PRINT3(_L("CDrivePublisher: KBytes[%d] %d->%d\n"), j, oldValue[j], bytesTransferred[j]); + } + } #endif - if (KErrNone != iProperty.Set(bytesTransferred)) - { - __ASSERT_DEBUG(EFalse, User::Invariant()); - } - dataTransferred = ETrue; - } + if (KErrNone != iProperty.Set(bytesTransferred)) + { + __ASSERT_DEBUG(EFalse, User::Invariant()); + } + dataTransferred = ETrue; + } - return dataTransferred; - } + return dataTransferred; + } /** @@ -337,35 +325,31 @@ If the timer is not yet running then start it. */ void CDriveTransferPublisher::StartTimer() - { - __FNLOG("CDrivePublisher::StartTimer"); - - if (!iTimerRunning) - { - // EDataTransferred event every second - const TTimeIntervalMicroSeconds32 interval = 1 * 1000 * 1000; - TCallBack callback(PublishDataTransferredEvent, this); - __PRINT(_L("Starting timer")); - iTimer->Start(interval, interval, callback); - iTimerRunning = ETrue; - } - } + { + if (!iTimerRunning) + { + // EDataTransferred event every second + const TTimeIntervalMicroSeconds32 interval = 1 * 1000 * 1000; + TCallBack callback(PublishDataTransferredEvent, this); + OstTrace0(TRACE_SMASSSTORAGE_DRIVE, DRIVEPUBLISHER_140, "Starting timer"); + iTimer->Start(interval, interval, callback); + iTimerRunning = ETrue; + } + } /** Ensure that the Timer is stopped */ void CDriveTransferPublisher::StopTimer() - { - __FNLOG("CDrivePublisher::StopTimer"); - - if (iTimerRunning) - { - __PRINT(_L("Stopping timer")); - iTimer->Cancel(); - iTimerRunning = EFalse; - } - } + { + if (iTimerRunning) + { + OstTrace0(TRACE_SMASSSTORAGE_DRIVE, DRIVEPUBLISHER_141, "Stopping timer"); + iTimer->Cancel(); + iTimerRunning = EFalse; + } + } //---------------------------------------------------------------------------- @@ -375,15 +359,13 @@ @param aDrives */ CDriveWriteTransferPublisher* CDriveWriteTransferPublisher::NewL(TRefMsDriveList aDrives) - { - __FNLOG("CDriveWriteTransferPublisher::NewL"); - - CDriveWriteTransferPublisher* self = new (ELeave) CDriveWriteTransferPublisher(aDrives); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } + { + CDriveWriteTransferPublisher* self = new (ELeave) CDriveWriteTransferPublisher(aDrives); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } /** @@ -392,10 +374,10 @@ @param aDrives */ CDriveWriteTransferPublisher::CDriveWriteTransferPublisher(TRefMsDriveList aDrives) - : - CDriveTransferPublisher(EUsbMsDriveState_KBytesWritten, aDrives) - { - } + : + CDriveTransferPublisher(EUsbMsDriveState_KBytesWritten, aDrives) + { + } /** @@ -404,9 +386,9 @@ @param aLun */ TUint CDriveWriteTransferPublisher::GetBytesTransferred(TUint aLun) const - { - return iDrives[aLun]->KBytesWritten(); - } + { + return iDrives[aLun]->KBytesWritten(); + } //---------------------------------------------------------------------------- @@ -416,15 +398,13 @@ @param aDrives */ CDriveReadTransferPublisher* CDriveReadTransferPublisher::NewL(TRefMsDriveList aDrives) - { - __FNLOG("CDriveWriteTransferPublisher::NewL"); - - CDriveReadTransferPublisher* self = new (ELeave) CDriveReadTransferPublisher(aDrives); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } + { + CDriveReadTransferPublisher* self = new (ELeave) CDriveReadTransferPublisher(aDrives); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } /** @@ -433,10 +413,10 @@ @param aDrives */ CDriveReadTransferPublisher::CDriveReadTransferPublisher(TRefMsDriveList aDrives) - : - CDriveTransferPublisher(EUsbMsDriveState_KBytesRead, aDrives) - { - } + : + CDriveTransferPublisher(EUsbMsDriveState_KBytesRead, aDrives) + { + } /** @@ -445,72 +425,68 @@ @param aLun */ TUint CDriveReadTransferPublisher::GetBytesTransferred(TUint aLun) const - { - return iDrives[aLun]->KBytesRead(); - } + { + return iDrives[aLun]->KBytesRead(); + } //---------------------------------------------------------------------------- #else /** Private default constructor to ensure that NewL is used - + @param aSubKey @param aArray */ CUsbTransferPublisher::CUsbTransferPublisher( - TUsbMsDriveState_Subkey aSubKey, - TRefBytesTransferedList aArray) - : - iSubKey(aSubKey), - iArray(aArray) - { - } + TUsbMsDriveState_Subkey aSubKey, + TRefBytesTransferedList aArray) + : + iSubKey(aSubKey), + iArray(aArray) + { + } void CUsbTransferPublisher::ConstructL() - { - __FNLOG("CUsbTransferPublisher::ConstructL"); + { + _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); + _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - _LIT_SECURITY_POLICY_PASS(KMassStorageReadPolicy); - _LIT_SECURITY_POLICY_S0(KMassStorageWritePolicy, KUsbMsDriveState_Category.iUid); - - TInt r = RProperty::Define(iSubKey, RProperty::EByteArray, - KMassStorageReadPolicy, KMassStorageWritePolicy, - KUsbMsMaxDrives*sizeof(TInt)); + TInt r = RProperty::Define(iSubKey, RProperty::EByteArray, + KMassStorageReadPolicy, KMassStorageWritePolicy, + KUsbMsMaxDrives*sizeof(TInt)); - if (r != KErrAlreadyExists) - { - User::LeaveIfError(r); - } + if (r != KErrAlreadyExists) + { + User::LeaveIfError(r); + } - // Attach to the properties here. Only do this once, continuously attaching - // will currently cause a memory leak - User::LeaveIfError(iProperty.Attach(KUsbMsDriveState_Category, iSubKey)); + // Attach to the properties here. Only do this once, continuously attaching + // will currently cause a memory leak + User::LeaveIfError(iProperty.Attach(KUsbMsDriveState_Category, iSubKey)); - // Create the EDataTransferred timer - iTimer = CPeriodic::NewL(CActive::EPriorityStandard); - iTimerRunning = EFalse; - } + // Create the EDataTransferred timer + iTimer = CPeriodic::NewL(CActive::EPriorityStandard); + iTimerRunning = EFalse; + } /** Destructor */ CUsbTransferPublisher::~CUsbTransferPublisher() - { - __FNLOG("CUsbTransferPublisher::~CDriveTransferPublisher"); + { + if(iTimer) + { + iTimer->Cancel(); + } + delete iTimer; - if(iTimer) - { - iTimer->Cancel(); - } - delete iTimer; + iProperty.Close(); - iProperty.Close(); - - RProperty::Delete(KUsbMsDriveState_Category, iSubKey); - } + RProperty::Delete(KUsbMsDriveState_Category, iSubKey); + } /** @@ -521,11 +497,10 @@ @return not used in CPeriodic callback (see TCallback) */ TInt CUsbTransferPublisher::PublishDataTransferredEvent(TAny* obj) - { - __FNLOG("CUsbTransferPublisher::PublishDataTransferredEvent"); - static_cast(obj)->DoPublishDataTransferredEvent(); - return 1; - } + { + static_cast(obj)->DoPublishDataTransferredEvent(); + return 1; + } /** @@ -533,66 +508,64 @@ the last update. */ void CUsbTransferPublisher::DoPublishDataTransferredEvent() - { - if (PublishDataTransferred()) - { - // some data has been transfered so reset the counter - iTimerCancelCnt = ETimerCancelDelay; - } + { + if (PublishDataTransferred()) + { + // some data has been transfered so reset the counter + iTimerCancelCnt = ETimerCancelDelay; + } - // Update the cancel count if no data was transferred the last - // (few) times this has been called - if (--iTimerCancelCnt == 0) - { - StopTimer(); - iTimerCancelCnt = ETimerCancelDelay; - } - } + // Update the cancel count if no data was transferred the last + // (few) times this has been called + if (--iTimerCancelCnt == 0) + { + StopTimer(); + iTimerCancelCnt = ETimerCancelDelay; + } + } /** -Update the data transferred properties if the counts have changed since +Update the data transferred properties if the counts have changed since the last update. */ TBool CUsbTransferPublisher::PublishDataTransferred() - { - __FNLOG("CUsbWriteTransferPublisher::PublishDataTransferred"); - - TUsbMsBytesTransferred bytesTransferred; - TBool dataTransferred = EFalse; + { + TUsbMsBytesTransferred bytesTransferred; + TBool dataTransferred = EFalse; - for (TInt i = 0; i < iArray.Count(); i++) - { - bytesTransferred[i] = GetBytesTransferred(i); - } + for (TInt i = 0; i < iArray.Count(); i++) + { + bytesTransferred[i] = GetBytesTransferred(i); + } - // Update the properties only if they have changed - // (or if there's an error reading the old value.) - // Possible optimisation: keep a copy of the value - // as a member variable so we don't need the Get. - TUsbMsBytesTransferred oldValue; + // Update the properties only if they have changed + // (or if there's an error reading the old value.) + // Possible optimisation: keep a copy of the value + // as a member variable so we don't need the Get. + TUsbMsBytesTransferred oldValue; - if ((iProperty.Get(oldValue) != KErrNone) || (oldValue != bytesTransferred)) - { + if ((iProperty.Get(oldValue) != KErrNone) || (oldValue != bytesTransferred)) + { #ifdef __PRINT3 - // trace of the bytes transferred - for (TInt j=0; j < iArray.Count(); j++) - { - if(oldValue[j] != bytesTransferred[j]) - { - __PRINT3(_L("CDrivePublisher: KBytes[%d] %d->%d\n"), j, oldValue[j], bytesTransferred[j]); - } - } + // trace of the bytes transferred + for (TInt j=0; j < iArray.Count(); j++) + { + if(oldValue[j] != bytesTransferred[j]) + { + __PRINT3(_L("CDrivePublisher: KBytes[%d] %d->%d\n"), j, oldValue[j], bytesTransferred[j]); + } + } #endif - if (KErrNone != iProperty.Set(bytesTransferred)) - { - __ASSERT_DEBUG(EFalse, User::Invariant()); - } - dataTransferred = ETrue; - } + if (KErrNone != iProperty.Set(bytesTransferred)) + { + __ASSERT_DEBUG(EFalse, User::Invariant()); + } + dataTransferred = ETrue; + } - return dataTransferred; - } + return dataTransferred; + } /** @@ -600,35 +573,31 @@ If the timer is not yet running then start it. */ void CUsbTransferPublisher::StartTimer() - { - __FNLOG("CUsbTransferPublisher::StartTimer"); - - if (!iTimerRunning) - { - // EDataTransferred event every second - const TTimeIntervalMicroSeconds32 interval = 1 * 1000 * 1000; - TCallBack callback(PublishDataTransferredEvent, this); - __PRINT(_L("Starting timer")); - iTimer->Start(interval, interval, callback); - iTimerRunning = ETrue; - } - } + { + if (!iTimerRunning) + { + // EDataTransferred event every second + const TTimeIntervalMicroSeconds32 interval = 1 * 1000 * 1000; + TCallBack callback(PublishDataTransferredEvent, this); + OstTrace0(TRACE_SMASSSTORAGE_DRIVE, DRIVEPUBLISHER_120, "Starting timer"); + iTimer->Start(interval, interval, callback); + iTimerRunning = ETrue; + } + } /** Ensure that the Timer is stopped */ void CUsbTransferPublisher::StopTimer() - { - __FNLOG("CUsbTransferPublisher::StopTimer"); - - if (iTimerRunning) - { - __PRINT(_L("Stopping timer")); - iTimer->Cancel(); - iTimerRunning = EFalse; - } - } + { + if (iTimerRunning) + { + OstTrace0(TRACE_SMASSSTORAGE_DRIVE, DRIVEPUBLISHER_130, "Stopping timer"); + iTimer->Cancel(); + iTimerRunning = EFalse; + } + } //---------------------------------------------------------------------------- @@ -638,23 +607,21 @@ @param aArray */ CUsbWriteTransferPublisher* CUsbWriteTransferPublisher::NewL(TRefBytesTransferedList aArray) - { - __FNLOG("CUsbWriteTransferPublisher::NewL"); - - CUsbWriteTransferPublisher* self = new (ELeave) CUsbWriteTransferPublisher(aArray); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } + { + CUsbWriteTransferPublisher* self = new (ELeave) CUsbWriteTransferPublisher(aArray); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } CUsbWriteTransferPublisher::CUsbWriteTransferPublisher( - TRefBytesTransferedList aArray) - : - CUsbTransferPublisher(EUsbMsDriveState_KBytesWritten, aArray) - { - } + TRefBytesTransferedList aArray) + : + CUsbTransferPublisher(EUsbMsDriveState_KBytesWritten, aArray) + { + } //---------------------------------------------------------------------------- @@ -664,21 +631,19 @@ @param aArray */ CUsbReadTransferPublisher* CUsbReadTransferPublisher::NewL(TRefBytesTransferedList aArray) - { - __FNLOG("CUsbWriteTransferPublisher::NewL"); - - CUsbReadTransferPublisher* self = new (ELeave) CUsbReadTransferPublisher(aArray); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } + { + CUsbReadTransferPublisher* self = new (ELeave) CUsbReadTransferPublisher(aArray); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } CUsbReadTransferPublisher::CUsbReadTransferPublisher( - TRefBytesTransferedList aArray) - : - CUsbTransferPublisher(EUsbMsDriveState_KBytesRead, aArray) - { - } + TRefBytesTransferedList aArray) + : + CUsbTransferPublisher(EUsbMsDriveState_KBytesRead, aArray) + { + } #endif // USB_TRANSFER_PUBLISHER