# HG changeset patch # User Pat Downey # Date 1277311876 -3600 # Node ID 8ef777f529f04e4de7789b46259fcf6c24630522 # Parent 2ee890d2f7e76e17b71d06f02da8b98105f1eb76# Parent 5daa7cafd16d64ce0b347f0d6d6b2dd77f06c846 Merge fix for bug 1961. diff -r 5daa7cafd16d -r 8ef777f529f0 inc/mmappfwbldvariant.hrh --- a/inc/mmappfwbldvariant.hrh Fri Feb 19 16:32:39 2010 +0000 +++ b/inc/mmappfwbldvariant.hrh Wed Jun 23 17:51:16 2010 +0100 @@ -20,7 +20,7 @@ #ifndef MMAPPFWBLDVARIANT_HRH #define MMAPPFWBLDVARIANT_HRH -#define IAD_INCLUDE_BACKSTEPPING +#undef IAD_INCLUDE_BACKSTEPPING #define IAD_INCLUDE_AUDIOFETCHER #endif // MMAPPFWBLDVARIANT_HRH diff -r 5daa7cafd16d -r 8ef777f529f0 layers.sysdef.xml --- a/layers.sysdef.xml Fri Feb 19 16:32:39 2010 +0000 +++ b/layers.sysdef.xml Wed Jun 23 17:51:16 2010 +0100 @@ -1,14 +1,16 @@ - ]> - + + + @@ -27,6 +29,8 @@ + + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/asxparser/group/asxparser.mmp --- a/mmappcomponents/asxparser/group/asxparser.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/asxparser/group/asxparser.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -15,7 +15,7 @@ * */ -// Version : %version: 9.1.2 % +// Version : %version: 9.1.5 % #include @@ -42,7 +42,6 @@ LIBRARY xmlenginedom.lib LIBRARY xmlparser.lib LIBRARY xmldom.lib -LIBRARY flogger.lib LIBRARY charconv.lib NOSTRICTDEF diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/asxparser/inc/AsxParser_debug.h --- a/mmappcomponents/asxparser/inc/AsxParser_debug.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/asxparser/inc/AsxParser_debug.h Wed Jun 23 17:51:16 2010 +0100 @@ -15,8 +15,7 @@ * */ -// Version : %version: 4.1.1 % - +// Version : %version: 4.1.4 % #ifndef __MP_DEBUG_H__ @@ -24,40 +23,20 @@ #include #include -#include - -// -// Forward declaration -// -class AsxParserDebug; - -// #ifdef __MARM__ -// #define _ASX_PARSER_FILE_LOGGING_ -// #endif - -#ifdef _ASX_PARSER_FILE_LOGGING_ - #define ASX_DEBUG AsxParserDebug::FileLog -#else - #ifdef _DEBUG - #define ASX_DEBUG RDebug::Print - #else - #define ASX_DEBUG AsxParserDebug::NullLog - #endif -#endif class AsxParserDebug { public: - inline static void NullLog(TRefByValue /*aFmt*/,...) + inline static void NullLog( TRefByValue /*aFmt*/, ... ) { - } - - inline static void FileLog(TRefByValue aFmt,...) - { - VA_LIST list; - VA_START(list,aFmt); - RFileLogger::WriteFormat(_L("AsxParser"), _L("ap.log"),EFileLoggingModeAppend,aFmt,list); } }; +#ifdef _DEBUG + #define ASX_DEBUG RDebug::Print +#else + #define ASX_DEBUG AsxParserDebug::NullLog +#endif + + #endif // __MP_DEBUG_H__ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/asxparser/src/asxparser.cpp --- a/mmappcomponents/asxparser/src/asxparser.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/asxparser/src/asxparser.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -15,7 +15,7 @@ * */ -// Version : %version: e003sa33#10.1.6 % +// Version : %version: 10.1.5.1.2 % diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/asxparser/test/test.cpp --- a/mmappcomponents/asxparser/test/test.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/asxparser/test/test.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -12,12 +12,10 @@ * Contributors: * * Description: Simple v2/v3 ASX-fileparser - * +* */ -// Version : %version: e003sa33#6 % - - +// Version : %version: 9 % #include #include @@ -25,7 +23,6 @@ #include #include -#include #include diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/asxparser/test/test.mmp --- a/mmappcomponents/asxparser/test/test.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/asxparser/test/test.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -15,7 +15,7 @@ * */ -// Version : %version: 9 % +// Version : %version: 12 % @@ -41,5 +41,4 @@ LIBRARY bafl.lib LIBRARY efsrv.lib -LIBRARY flogger.lib LIBRARY charconv.lib diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/audiofetcher/inc/audiofetcherdialog.h --- a/mmappcomponents/audiofetcher/inc/audiofetcherdialog.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/audiofetcher/inc/audiofetcherdialog.h Wed Jun 23 17:51:16 2010 +0100 @@ -133,6 +133,13 @@ CGulIcon* IconL(TAknsItemID aId, const TDesC& aFileName, TInt aFileIndex, TInt aFileMaskIndex); + CGulIcon* ColorIconL( const TAknsItemID& aId, + const TDesC& aFileName, + TInt aFilexIndex, + TInt aFileMaskIndex, + const TAknsItemID& aColorId, + TInt aColorIndex ); + void UpdateListBoxL(); /** diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp --- a/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/audiofetcher/src/audiofetcherdialog.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -196,7 +196,7 @@ case EAknSoftkeySelect : { TInt index = CurrentItemListIndex(); - TBuf<128> fileName; + TFileName fileName; iFileHandler->GetAttribute( index, CAudioFetcherFileHandler::EAttrFullName, fileName, 0 ); iSelectedFiles.AppendL( fileName ); @@ -388,14 +388,18 @@ EMbmAudiofetcherQgn_prop_sml_sync_off_mask ) ); // memory card icon - icons->AppendL( IconL( KAknsIIDQgnIndiMmcAdd, iIconFileName, + icons->AppendL( ColorIconL( KAknsIIDQgnIndiMmcAdd, iIconFileName, EMbmAudiofetcherQgn_indi_mmc_add, - EMbmAudiofetcherQgn_indi_mmc_add_mask ) ); + EMbmAudiofetcherQgn_indi_mmc_add_mask, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG26 ) ); // mass storage icon - icons->AppendL( IconL( KAknsIIDQgnPropLinkEmbdSmall, iIconFileName, + icons->AppendL( ColorIconL( KAknsIIDQgnPropLinkEmbdSmall, iIconFileName, EMbmAudiofetcherQgn_indi_fmgr_ms_add, - EMbmAudiofetcherQgn_indi_fmgr_ms_add_mask ) ); + EMbmAudiofetcherQgn_indi_fmgr_ms_add_mask, + KAknsIIDQsnIconColors, + EAknsCIQsnIconColorsCG26 ) ); // empty icon icons->AppendL( IconL( KAknsIIDQgnPropEmpty, KAvkonBitmapFile, @@ -455,6 +459,45 @@ return icon; } +// ----------------------------------------------------------------------------- +// CMediaFileDialog::ColorIconL +// +// ----------------------------------------------------------------------------- +// +CGulIcon* CAudioFetcherDialog::ColorIconL( const TAknsItemID& aId, + const TDesC& aFileName, + TInt aFilexIndex, + TInt aFileMaskIndex, + const TAknsItemID& aColorId, + TInt aColorIndex ) + { + WLOG("CAudioFetcherDialog::ColorIconL"); + + CFbsBitmap* bitmap( NULL ); + CFbsBitmap* mask( NULL ); + + if ( aColorId == KAknsIIDNone ) + { + // do not use theme color, use the default color from the file + AknsUtils::CreateIconLC( AknsUtils::SkinInstance(), aId, + bitmap, mask, aFileName, aFilexIndex, aFileMaskIndex ); + } + else + { + // use theme color + AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(), aId, aColorId, aColorIndex, + bitmap, mask, aFileName, aFilexIndex, aFileMaskIndex, KRgbBlack ); + } + + CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); + icon->SetBitmapsOwnedExternally( EFalse ); + + // icon now owns the bitmaps, no need to keep on cleanup stack. + CleanupStack::Pop( 2 ); // mask, bitmap + + return icon; + } + // ----------------------------------------------------------------------------- // CMediaFileDialog::UpdateListBoxL @@ -468,13 +511,7 @@ { return; } - - TInt resultCount = iFileHandler->ResultCount(); - - if(resultCount > 0){ - CEikButtonGroupContainer& dialogCba = ButtonGroupContainer(); - dialogCba.MakeCommandVisible(EAknSoftkeySelect, ETrue); - } + iListBox->HandleItemAdditionL(); iListBox->SetCurrentItemIndex( 0 ); DrawNow(); @@ -563,7 +600,7 @@ switch ( aEventType ) { - case EEventItemDoubleClicked: // fallthrough + case EEventItemSingleClicked: // fallthrough case EEventEnterKeyPressed: { TBool closeDialog = HandleListSelectionL(); @@ -891,7 +928,7 @@ TBool closeDialog = EFalse; TInt index = CurrentItemListIndex(); - TBuf<128> fileName; + TFileName fileName; iFileHandler->GetAttribute( index, CAudioFetcherFileHandler::EAttrFullName, fileName, 0 ); iSelectedFiles.AppendL( fileName ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/collectionhelper/group/mpxcollectionhelper.mmp --- a/mmappcomponents/collectionhelper/group/mpxcollectionhelper.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/collectionhelper/group/mpxcollectionhelper.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -29,6 +29,8 @@ MACRO RD_MPX_TNM_INTEGRATION #define RD_MPX_TNM_INTEGRATION +MACRO ABSTRACTAUDIOALBUM_INCLUDED +#define ABSTRACTAUDIOALBUM_INCLUDED //MACRO RD_MPX_COLLECTION_CACHE SOURCEPATH ../src SOURCE mpxcollectionhelperfactory.cpp diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/collectionhelper/inc/mpxcollectionuihelperimp.h --- a/mmappcomponents/collectionhelper/inc/mpxcollectionuihelperimp.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/collectionhelper/inc/mpxcollectionuihelperimp.h Wed Jun 23 17:51:16 2010 +0100 @@ -649,6 +649,16 @@ void HandleOpenL(const CMPXCollectionPlaylist& aPlaylist,TInt aError); /** + * From MMPXCollectionObserver + * Handles completion of a asynchronous command. + * + * @param aCommandResult result of the command, NULL if error + * @param aError error code + */ + virtual void HandleCommandComplete(CMPXCommand* aCommandResult, + TInt aError); + + /** * From MMPXMoveItemObserver * @param aErr, error for the operation */ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp --- a/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -12,7 +12,7 @@ * Contributors: * * Description: Extended collection helper with an internal caching array -* Version : %version: da1mmcf#27.1.12 % +* Version : %version: da1mmcf#27.1.12.3.2 % * */ @@ -30,6 +30,10 @@ #include #include +#include // for RProperty +#include +#include + #include #include @@ -153,13 +157,38 @@ MPX_FUNC("CMPXCollectionCachedHelper::::AddL"); // Commit when we have cached more than a set amount // - if( iCache->Count() >= KCacheCount) + + TInt cacheCount = KCacheCount; + TInt usbStatus; + RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus ); + + // if MTP is not connected via USB, disable caching mechanism and flush immediately + // in case UI is not blocked and need to reflect the change in real time + // this logic is hardly invoked during MTP, because ::FindAllL (which flush) is always called before AddL + if ((usbStatus != KUsbPersonalityIdMTP) && (usbStatus != KUsbPersonalityIdPCSuiteMTP)) + cacheCount = 1; + + if( iCache->Count() >= cacheCount) + Commit(); + + #ifdef ABSTRACTAUDIOALBUM_INCLUDED + TBool extract = ETrue; + if( aMedia->IsSupported( KMPXMediaMTPSampleDataFlag ) ) { - Commit(); + + extract = aMedia->ValueTObjectL( KMPXMediaMTPSampleDataFlag ); + MPX_DEBUG2("CMPXCollectionCachedHelper::AddL KMPXMediaMTPSampleDataFlag is set. extract=%d", extract ); } + if( extract ) + { + // Extract album art from the file + iMetadataExtractor->ExtractAlbumArtL( aMedia ); + } +#else // Extract album art from the file iMetadataExtractor->ExtractAlbumArtL( aMedia ); +#endif CMPXMedia* copy = CMPXMedia::NewL( *aMedia ); CleanupStack::PushL( copy ); @@ -332,7 +361,20 @@ void CMPXCollectionCachedHelper::SetL( CMPXMedia*& aMedia ) { MPX_DEBUG1("CMPXCollectionCachedHelper::::SetL <--"); - + +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + if( aMedia->IsSupported( KMPXMediaMTPSampleDataFlag ) ) + { + TBool flag = aMedia->ValueTObjectL( KMPXMediaMTPSampleDataFlag ); + MPX_DEBUG2("CMPXCollectionCachedHelper::SetL KMPXMediaMTPSampleDataFlag is set. flag=%d", flag ); + if( flag ) + { + iMetadataExtractor->ExtractAlbumArtL( aMedia ); + } + return; + } +#endif + const TDesC& newUri = aMedia->ValueText( KMPXMediaGeneralUri ); TInt count( iCache->Count() ); @@ -718,8 +760,20 @@ #else //RD_MPX_COLLECTION_CACHE MPX_DEBUG1("CMPXCollectionCachedHelper::GetL <--"); + + TInt usbStatus; + RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus ); + + // if MTP is not connected via USB, flush immediately + // in case UI is not blocked and need to reflect the change in real time + if ((usbStatus != KUsbPersonalityIdMTP) && (usbStatus != KUsbPersonalityIdPCSuiteMTP)) + Commit(); +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum) +#else if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist) +#endif { User::Leave(KErrArgument); } @@ -751,11 +805,20 @@ EMPXMediaGeneralTitle | EMPXMediaGeneralDate | EMPXMediaGeneralDuration | EMPXMediaGeneralComment | EMPXMediaGeneralUri )); +#ifdef ABSTRACTAUDIOALBUM_INCLUDED attributes.AppendL( TMPXAttribute(KMPXMediaIdMusic, EMPXMediaMusicArtist | EMPXMediaMusicAlbum | EMPXMediaMusicAlbumTrack | EMPXMediaMusicComposer | - EMPXMediaMusicYear | EMPXMediaMusicGenre)); + EMPXMediaMusicYear | EMPXMediaMusicGenre | + EMPXMediaMusicAlbumArtist)); +#else + attributes.AppendL( + TMPXAttribute(KMPXMediaIdMusic, + EMPXMediaMusicArtist | EMPXMediaMusicAlbum | + EMPXMediaMusicAlbumTrack | EMPXMediaMusicComposer | + EMPXMediaMusicYear | EMPXMediaMusicGenre)); +#endif attributes.AppendL(KMPXMediaAudioAudioAll); attributes.AppendL(KMPXMediaMTPAll); @@ -997,6 +1060,14 @@ aSrc.ValueTObjectL( KMPXMediaMusicRating ) ); } +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + if( atts&EMPXMediaMusicAlbumArtist ) // Text + { + aDestination.SetTextValueL( KMPXMediaMusicAlbumArtist, + aSrc.ValueText(KMPXMediaMusicAlbumArtist ) + ); + } +#endif MPX_DEBUG1("CMPXCollectionCachedHelper::DoAppendMusicL -->"); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp --- a/mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/collectionhelper/src/mpxcollectionhelperimp.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -168,8 +168,14 @@ // generic way of resolving collections aside from using file extension // or UID. // +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + if ( aMedia->ValueTObjectL(KMPXMediaGeneralType) == EMPXItem && + (aMedia->ValueTObjectL(KMPXMediaGeneralCategory) == EMPXPlaylist || + aMedia->ValueTObjectL(KMPXMediaGeneralCategory) == EMPXAbstractAlbum)) +#else if ( aMedia->ValueTObjectL(KMPXMediaGeneralType) == EMPXItem && aMedia->ValueTObjectL(KMPXMediaGeneralCategory) == EMPXPlaylist ) +#endif { aMedia->SetTObjectValueL( KMPXMediaGeneralCollectionId, iMusicCollectionId ); @@ -348,9 +354,13 @@ // TMPXGeneralCategory category = aMedia->ValueTObjectL(KMPXMediaGeneralCategory); - +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + if ((aMedia->ValueTObjectL(KMPXMediaGeneralType) != EMPXItem) || + (category != EMPXSong && category != EMPXPlaylist && category != EMPXAbstractAlbum)) +#else if ((aMedia->ValueTObjectL(KMPXMediaGeneralType) != EMPXItem) || (category != EMPXSong && category != EMPXPlaylist)) +#endif { User::Leave( KErrArgument ); } @@ -397,7 +407,7 @@ MPX_FUNC("CMPXCollectionHelperImp::RenameL"); MPX_DEBUG3("aOldUri = %S, aNewUri = %S", &aOldUri, &aNewUri); - if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist) + if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum) { User::Leave(KErrArgument); } @@ -466,8 +476,11 @@ { MPX_FUNC("CMPXCollectionHelperImp::GetL"); MPX_DEBUG2("aFile %S", &aFile); - +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum) +#else if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist) +#endif { User::Leave(KErrArgument); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp --- a/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -38,6 +38,7 @@ #include #include #include +#include #include "mpxcollectionuihelperobserver.h" #include "mpxcollectionuihelperimp.h" @@ -1027,6 +1028,12 @@ // currently only used by incremental add iTaskQueue->CancelRequests(); + if( iTask == ETaskIncAddMedia || iTask == ETaskIncAppendMedia ) + { + // complete task from scheduler + iTaskQueue->CompleteTask(); + } + // clean up iInputMedia if( iInputMedia ) { @@ -1253,6 +1260,62 @@ ASSERT(0); } +// --------------------------------------------------------------------------- +// From MMPXCollectionObserver +// --------------------------------------------------------------------------- +// +void CMPXCollectionUiHelperImp::HandleCommandComplete(CMPXCommand* aCommandResult, TInt aError) + { + MPX_DEBUG3("CMPXCollectionUiHelperImp::HandleCommandComplete iTask=%d, aError=%d", + iTask, aError); + + if( iTask == ETaskIncAddMedia && iInputMedia ) + { + if ( iChunkNumber == 0 ) + { + // save playlistId in input media & use it for subsequent appending operations + if( aCommandResult ) + { + TMPXItemId playlistId = + aCommandResult->ValueTObjectL(KMPXCommandColAddRtnId); + + iInputMedia->SetTObjectValueL(KMPXMediaGeneralId, playlistId); + } + + iChunkNumber++; // move on to next chunk + + CompleteTask(iTask, aError); + } + else if ( iChunkNumber == iTotalChunkNumber-1 ) // last chunk + { + CompleteTask(ETaskIncFinish, aError); // finish inc task + } + else // intermedia chunks + { + iChunkNumber++; // move on to next chunk + + CompleteTask(iTask, aError); + } + } + else if( iTask == ETaskIncAppendMedia && iInputMedia ) + { + // last chunk + // for the case that there is only one chunk (first & last chunk at the same + // time), Inc Add is not used + if( iChunkNumber == iTotalChunkNumber-1 ) + { + // update input media as well + FillInPlaylistDetailsL(*iInputMedia); + CompleteTask(ETaskIncFinish, aError); + } + else // intermediate chunks, including first chunk + { + iChunkNumber++; + CompleteTask(iTask, aError); + } + } + } + // ---------------------------------------------------------------------------- // Handles completion of moving an object, just a proxy // ---------------------------------------------------------------------------- @@ -1337,11 +1400,16 @@ { TInt usbStatus; RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - - if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP) - || (usbStatus == KUsbPersonalityIdMS) ) + + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + if ( (mtpStatus != EMtpPSStatusUninitialized) + || (usbStatus == KUsbPersonalityIdMS) ) { - MPX_DEBUG1("USB is active, Leave with KErrLocked"); + MPX_DEBUG1("MTP/USB is active, Leave with KErrLocked"); // need to call back even if it leaves here iHelperObserver = (MMPXCHelperObserver*)aCallback; CompleteTask( aTask, KErrLocked ); @@ -1681,7 +1749,8 @@ void CMPXCollectionUiHelperImp::DoIncAddMediaL() { /***** include only aSize/iChunkSize number of songs *****/ - + MPX_DEBUG5("CMPXCollectionUiHelperImp::DoIncAddMediaL (%d, %d, %d, %d)", + iChunkNumber, iChunkSize, iTotalChunkNumber, iRemainder); // copy media CMPXMedia* media = CMPXMedia::CopyL(*iInputMedia); CleanupStack::PushL(media); @@ -1739,15 +1808,7 @@ CleanupStack::PopAndDestroy(playlistExtension); - iMediator->AddItemL( media ); // this creates the new playlist - - // save playlistId in input media & use it for subsequent appending operations - TMPXItemId playlistId = media->ValueTObjectL(KMPXMediaGeneralId); - iInputMedia->SetTObjectValueL(KMPXMediaGeneralId, playlistId); - - iChunkNumber++; // move on to next chunk - - CompleteTask(iTask, KErrNone); + iMediator->AddItemAsyncL( media ); // this creates the new playlist } else if ( iChunkNumber == iTotalChunkNumber-1 ) // last chunk { @@ -1759,9 +1820,7 @@ TMPXItemId playlistId = iInputMedia->ValueTObjectL(KMPXMediaGeneralId); media->SetTObjectValueL(KMPXMediaGeneralId, playlistId); - iMediator->AddItemL( media ); - - CompleteTask(ETaskIncFinish, KErrNone); // finish inc task + iMediator->AddItemAsyncL( media ); } else // intermedia chunks { @@ -1773,11 +1832,7 @@ TMPXItemId playlistId = iInputMedia->ValueTObjectL(KMPXMediaGeneralId); media->SetTObjectValueL(KMPXMediaGeneralId, playlistId); - iMediator->AddItemL( media ); - - iChunkNumber++; // move on to next chunk - - CompleteTask(iTask, KErrNone); + iMediator->AddItemAsyncL( media ); } CleanupStack::PopAndDestroy(cArray); @@ -1830,23 +1885,8 @@ // update media then append to playlist FillInPlaylistDetailsL(*media); - iMediator->AddItemL( media ); + iMediator->AddItemAsyncL( media ); - // last chunk - // for the case that there is only one chunk (first & last chunk at the same - // time), Inc Add is not used - if( iChunkNumber == iTotalChunkNumber-1 ) - { - // update input media as well - FillInPlaylistDetailsL(*iInputMedia); - CompleteTask(ETaskIncFinish, KErrNone); - } - else // intermediate chunks, including first chunk - { - iChunkNumber++; - CompleteTask(iTask, KErrNone); - } - CleanupStack::PopAndDestroy(cArray); CleanupStack::PopAndDestroy(media); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp --- a/mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -43,8 +43,7 @@ #include #endif //RD_MPX_TNM_INTEGRATION // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode -#include -#include +#include #include #include "mpxcollectionuihelperobserver.h" #include "mpxcollectionhelpercommon.h" @@ -310,32 +309,16 @@ { MPX_DEBUG3("CMPXDeleteHelper::RunL. [iMoreToDo %d] [iStatus %d]", iMoreToDo, iStatus.Int()); - // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode - TUsbDeviceState deviceState = EUsbDeviceStateConfigured; - if ( !iUsbManConnected ) - { - ConnectUsbMan(); - } - - if ( iUsbManConnected ) + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + if (mtpStatus != EMtpPSStatusUninitialized) { - if ( iUsbMan.GetDeviceState( deviceState ) != KErrNone ) - { - deviceState = EUsbDeviceStateConfigured; - } - } - - if ( deviceState == EUsbDeviceStateAddress || - deviceState == EUsbDeviceStateConfigured ) - { - TInt usbStatus; - RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP)) - { - MPX_DEBUG1("USB is active, Stop Delete"); - CompleteDelete( KErrLocked ); - return; - } + MPX_DEBUG1("MTP is active, Stop Delete"); + CompleteDelete( KErrLocked ); + return; } if (iMoreToDo && iStatus.Int() == KErrNone) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/collectionmediator/bwinscw/mpxcollectionmediatorU.DEF --- a/mmappcomponents/harvester/collectionmediator/bwinscw/mpxcollectionmediatorU.DEF Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/collectionmediator/bwinscw/mpxcollectionmediatorU.DEF Wed Jun 23 17:51:16 2010 +0100 @@ -15,4 +15,5 @@ ?SetItemL@CMPXCollectionMediator@@QAEXAAPAVCMPXMedia@@@Z @ 14 NONAME ; void CMPXCollectionMediator::SetItemL(class CMPXMedia * &) ?SetItemL@CMPXCollectionMediator@@QAEXAAV?$TArray@PAVCMPXMedia@@@@AAVCMPXCollectionPath@@AAV?$RArray@H@@@Z @ 15 NONAME ; void CMPXCollectionMediator::SetItemL(class TArray &, class CMPXCollectionPath &, class RArray &) ?SetItemL@CMPXCollectionMediator@@QAEXAAVCMPXMediaArray@@@Z @ 16 NONAME ; void CMPXCollectionMediator::SetItemL(class CMPXMediaArray &) + ?AddItemAsyncL@CMPXCollectionMediator@@QAEXAAPAVCMPXMedia@@@Z @ 17 NONAME ; void CMPXCollectionMediator::AddItemAsyncL(class CMPXMedia * &) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/collectionmediator/eabi/mpxcollectionmediatorU.DEF --- a/mmappcomponents/harvester/collectionmediator/eabi/mpxcollectionmediatorU.DEF Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/collectionmediator/eabi/mpxcollectionmediatorU.DEF Wed Jun 23 17:51:16 2010 +0100 @@ -19,4 +19,5 @@ _ZTI22CMPXCollectionMediator @ 18 NONAME ; ## _ZTV18CMPXMoveItemHelper @ 19 NONAME ; ## _ZTV22CMPXCollectionMediator @ 20 NONAME ; ## + _ZN22CMPXCollectionMediator13AddItemAsyncLERP9CMPXMedia @ 21 NONAME diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/collectionmediator/src/mpxcollectionmediator.cpp --- a/mmappcomponents/harvester/collectionmediator/src/mpxcollectionmediator.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/collectionmediator/src/mpxcollectionmediator.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -226,6 +226,42 @@ } // --------------------------------------------------------------------------- +// CMPXCollectionMediator::AddItemAsyncL() +// --------------------------------------------------------------------------- +// +EXPORT_C void CMPXCollectionMediator::AddItemAsyncL( CMPXMedia*& aMedia ) + { + ASSERT( iColUtil ); + + // If this is a podcast, change the collection id + if( IsPodcastL( *aMedia ) ) + { + UpdatePathToPodcastL( *aMedia ); + } + + // Add it to the collection + CMPXCommand* cmd = CMPXMedia::NewL(); + CleanupStack::PushL( cmd ); + + cmd->SetTObjectValueL(KMPXCommandGeneralId, KMPXCommandIdCollectionAdd ); + cmd->SetCObjectValueL(KMPXCommandColAddMedia, aMedia); // copied + + if (aMedia->IsSupported(KMPXMediaGeneralCollectionId)) + { + TUid collectionId = aMedia->ValueTObjectL(KMPXMediaGeneralCollectionId); + cmd->SetTObjectValueL(KMPXCommandGeneralCollectionId, collectionId.iUid); + } + else + { + User::Leave( KErrArgument ); + } + + iColUtil->CommandL(*cmd); + + CleanupStack::PopAndDestroy(cmd); + } + +// --------------------------------------------------------------------------- // CMPXCollectionMediator::AddItemL() // --------------------------------------------------------------------------- // diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp --- a/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/group/mpxfilehandler.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -28,6 +28,11 @@ CAPABILITY CAP_GENERAL_DLL VENDORID VID_DEFAULT +MACRO __RAMDISK_PERF_ENABLE +#define __RAMDISK_PERF_ENABLE + +MACRO ABSTRACTAUDIOALBUM_INCLUDED +#define ABSTRACTAUDIOALBUM_INCLUDED SOURCEPATH ../src SOURCE mpxharvesterfilehandler.cpp SOURCE mpxharvesterfilehandlerimp.cpp @@ -64,9 +69,7 @@ LIBRARY mpxmetadataextractor.lib LIBRARY caf.lib LIBRARY DrmServerInterfaces.lib -#ifdef RD_MULTIPLE_DRIVE LIBRARY PlatformEnv.lib -#endif //RD_MULTIPLE_DRIVE #if defined(ARMCC) deffile ../eabi/ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/inc/mpxdbcommon.h --- a/mmappcomponents/harvester/filehandler/inc/mpxdbcommon.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/inc/mpxdbcommon.h Wed Jun 23 17:51:16 2010 +0100 @@ -23,7 +23,11 @@ // Harvester db increment 9 v1 // Please update the increment number for each increment // Please update the version number for each schema change +#ifdef ABSTRACTAUDIOALBUM_INCLUDED +_LIT( KHarvesterDBName, "harvesterdbv9_6.dat" ); +#else _LIT( KHarvesterDBName, "harvesterdbv9_5.dat" ); +#endif _LIT( KHarvesterDBPattern, "harvesterdbv*.dat" ); const TInt KDbMaxTableCreationSQLLength = 1024; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/inc/mpxharvesterdb.h --- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterdb.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterdb.h Wed Jun 23 17:51:16 2010 +0100 @@ -25,6 +25,17 @@ // FORWARD DECLARATIONS class CMPXHarvesterDatabaseTable; +// ENUMS +#ifdef __RAMDISK_PERF_ENABLE +// enum for database state +enum TDbState + { + EDbClose, + EDbOpen, + EDbInTransaction + }; +#endif // __RAMDISK_PERF_ENABLE + /** * Database class for the Harvester Component * @@ -51,6 +62,8 @@ /** * Open the database + * @return State of the opened database: KErrNone or KErrCorrupt + * Leaves if cannot open the database */ TInt OpenL(); @@ -141,6 +154,27 @@ */ void Rollback(); +#ifdef __RAMDISK_PERF_ENABLE + /** + * Set RAM drive info + */ + void SetRamDriveInfo(TDriveNumber aDrive, TBool aUseRamDrive); + + /** + * Get UseRamDrive + */ + TBool IsUseRamDrive(); + + /** + * Get the state of the database. + */ + TDbState GetDbState(); + + /** + * Set the state of the database. + */ + void SetDbStateL( TDbState aState ); +#endif // __RAMDISK_PERF_ENABLE private: // private functions @@ -151,7 +185,8 @@ /** * Opens a database - * @return error for the operation + * @return State of the opened database: KErrNone or KErrCorrupt + * Leaves if cannot open the database */ TInt OpenDBL(); @@ -163,6 +198,12 @@ void FindAndReplaceSingleQuote(const TDesC& aSrc, TDes& aTrg); + /** + * Generate the database name. + * @return the database file name. + */ + TFileName GenerateDbName(); + private: /** @@ -182,6 +223,10 @@ CFileStore* iStore; RDbStoreDatabase* iDatabase; // Local single client db TBool iDBOpen; // Is the db open and ready +#ifdef __RAMDISK_PERF_ENABLE + TDriveNumber iRamDrive; + TBool iUseRamDrive; +#endif // __RAMDISK_PERF_ENABLE }; #endif // CMPXHARVESTERDB_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h --- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterdbmanager.h Wed Jun 23 17:51:16 2010 +0100 @@ -54,8 +54,7 @@ TInt OpenAllDatabasesL(); /** - * Reopen a particular database - * (For MMC events) + * Open a particular database * @param TDriveNumber aDrive */ void OpenDatabaseL( TDriveNumber aDrive ); @@ -63,26 +62,38 @@ /** * Close all databases */ - void CloseAllDatabase(); + void CloseAllDatabases(); + + /** + * Close all databases on mass storage drives + */ + void CloseMassStorageDatabases(); /** * Close a particular DB - * (For MMC events) * @param TDriveNumber the Drive */ void CloseDatabase( TDriveNumber aDrive ); + /** * Get a particular database * @param TDriveNumber the Drive */ CMPXHarvesterDB& GetDatabaseL( TDriveNumber aDrive ); - + + /** + * Abruptly close a particular DB without trying to access it + * To be used when drive is no more accessible + * @param TDriveNumber the Drive + */ + void DropDatabase( TDriveNumber aDrive ); + /** - * Remove a particular database from the array - * @param TDriveNumber the Drive + * Return whether database is open on the specified drive */ - void RemoveDatabaseL( TDriveNumber aDrive ); + TBool DatabaseIsOpen( TDriveNumber aDrive ); + /** * Return the number of databases @@ -122,7 +133,124 @@ * Checks if the spefified drive is a remove drive */ TBool IsRemoteDrive(TDriveNumber aDrive); - + +#ifdef __RAMDISK_PERF_ENABLE + /** + * Copy all databases from RAM disk back to normal drive, E, F,... + * + * @return none + * Leaves if DB is not usable after the operation + */ + void CopyDBsFromRamL(); + + /** + * Copy all databases to RAM disk from normal drive, E, F,... + * + * @return none + * Leaves if DB is not usable after the operation + */ + void CopyDBsToRamL(TBool aMtpMode = EFalse); + + /** + * Update all databases from RAM drive + */ + //void UpdateDBsFromRamL( TInt aCount ); + + /** + * If Ram disk is low, copy dbs from ram. + */ + void EnsureRamSpaceL(); +#endif //__RAMDISK_PERF_ENABLE + +private: // new functions + + /** + * Find database index in the internal table + * Return KErrNotFound if not found + */ + TInt FindDatabaseIndex ( TDriveNumber aDrive ); + + /** + * Return whether drive exists and is local + */ + TBool IsLocalDrive( TDriveNumber aDrive ); + + +#ifdef __RAMDISK_PERF_ENABLE + /** + * Find available RAMDISK + */ + TInt GetRAMDiskPath(); + + /** + * Check if disk is available to copy. + * + * @return ETrue if there is enough space, EFalse otherwise + */ + TBool IsRamDiskSpaceAvailable(); + + /** + * Copy database to ram drive + */ + void DoCopyDBToRamL(TDriveUnit aDriveUnit); + + /** + * Copy database from RAM disk + */ + TInt DoCopyDBFromRam(TDriveUnit aDriveUnit); + + /** + * To block a disk space so that it can gurantee for a write back from RAM disk + * + * @return KErrNone if the dummy file is created successfully + */ + TInt BlockDiskSpaceL( TDriveUnit aDrive, TInt aOrigDbSize ); + + /** + * To calculate necessary file size of the dummy file + * + * @return TInt64 estimated file size + */ + TInt64 CalculateInitalDummyDBSizeL( TVolumeInfo aVol, TInt aOrigDbSize ); + + /** + * Remove dummy file + * + * @param aDrive Drive + */ + void RemoveDummyFile( TDriveNumber aDrive ); + + /** + * Update the database from ram drive. + */ + //void DoUpdateDBFromRamL( TDriveUnit aDriveUnit ); + + /** + * Generate the harvester db path and name. + */ + TFileName GenerateHarvesterDbName( TDriveUnit aDriveUnit, TBool aForRamDrive = EFalse ); + + /** + * Generate the dummy db path and name. + */ + TFileName GenerateDummyDbName( TDriveUnit aDriveUnit ); + + /** + * Check if Ram disk is low. + */ + TBool IsRamDiskLow(); + + /** + * Sum up the total size in bytes of the databases. + * + * @param aSize - On return, the total size of the databases. + * @param aRamDrive - if True, will sum up dbs on Ram Drive, if False, will sum up dbs on other drives. + * @return TInt System error. + */ + TInt GetTotalDatabasesSize(TInt& aSize, TBool aRamDrive); + +#endif // __RAMDISK_PERF_ENABLE + private: /** @@ -140,6 +268,17 @@ RPointerArray iDatabases; RFs& iFs; // Not Owned + +#ifdef __RAMDISK_PERF_ENABLE + // Defined for RAM disk performance + TBool iRAMDiskPerfEnabled; // flag to indicate RAM disk feature is enabled from cenrep. + TUint64 iMaximumAllowedRAMDiskSpaceToCopy; // max size in megabytes allowed for RAM copying. + TFileName iRAMFolder; + TDriveNumber iRAMDrive; + //TInt iUpdateCount; + TBool iMtpMode; + //TInt iMtpAddCount; +#endif //__RAMDISK_PERF_ENABLE }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h --- a/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h Wed Jun 23 17:51:16 2010 +0100 @@ -274,6 +274,13 @@ * for a list of folders to automatically scan */ void ParseAutoScanL(); + + /** + * Refreshes scan drives so that non-existing + * drives are not scanned. + * Used add back drives that were take out because of dismount + */ + void RefreshScanDrivesL(); /*** * Resets the current scan directory and frees memory @@ -350,13 +357,6 @@ */ RPointerArray* GetDrmFilesL(); - /** - * Verifies if aDrive is ready. - * @param aDrive, certain drive name, such as EDRIVEE - * @return TBool ETrue if aDrive is ready,otherwise EFalse - */ - TBool IsDriveReady( TDriveNumber aDrive ); - public: /** @@ -392,13 +392,12 @@ RPointerArray iFolderMonitors; // Multiple drives RPointerArray iSupportedTypes; CDesCArray* iContainerTypes; + RArray iConfiguredDrivesToScan; RArray iDrivesToScan; RArray iFilteredDrivesToScan; RArray iPathsToBlock; TBool iOutOfDisk; -#ifdef RD_MULTIPLE_DRIVE - TInt iRemovedDrive; -#endif // RD_MULTIPLE_DRIVE + TBool iFilteredOutOfDisk; // Metadata related CMPXMetadataScanner* iMetadataScanner; @@ -432,6 +431,7 @@ TUid iPodcastCollectionId; TBool iDisablePodcasting; + TInt iCurUSBEvent; // DRM CDRMNotifier* iDrmNotifier; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/inc/mpxmetadatascanner.h --- a/mmappcomponents/harvester/filehandler/inc/mpxmetadatascanner.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/inc/mpxmetadatascanner.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,6 +20,7 @@ #define CMPXMETADATASCANNER_H #include +#include class CMPXMedia; class CMPXMediaArray; @@ -33,7 +34,8 @@ ENewFiles = 0, EModFiles = 1, EMaxFile = 2 - }; + }; + /** * CMPXMetadataScanner * @@ -42,7 +44,8 @@ * @lib mpxfilehandler.lib * @since S60 3.0 */ -NONSHARABLE_CLASS( CMPXMetadataScanner ): public CActive +NONSHARABLE_CLASS( CMPXMetadataScanner ): public CActive, + public MMPXMetadataExtractorObserver { public: @@ -128,15 +131,43 @@ * From CActive */ void RunL(); + + /** + * From MMPXMetadataExtractorObserver + */ + void HandleCreateMediaComplete( CMPXMedia* aMedia, TInt aError ); private: // New Functions /** * Extract metadata from a few files - * @return ETrue if there are no more files to extract - * EFalse otherwise */ - TBool DoExtractL(); + void DoExtractL(); + + /** + * Get source array + */ + RPointerArray* GetSource(); + + /** + * Is metadata scanner done + */ + TBool IsDone(); + + /** + * Run again + */ + void RunAgain(); + + /** + * Add metadata to collection + */ + void AddToCollectionL(); + + /** + * Complete metadata scanner + */ + void MetadataScannerComplete( TInt aError ); private: @@ -160,8 +191,7 @@ RPointerArray iNewFiles; RPointerArray iModifiedFiles; - CMPXMediaArray* iNewFileProps; - CMPXMediaArray* iModifiedFileProps; + CMPXMediaArray* iTargetProps; TBool iExtracting; // Are we extracting TInt iExtractType; // What are we extracting @@ -170,7 +200,7 @@ CMPXMetadataExtractor* iExtractor; // Metadata Utilities wrapper MMPXMetadataScanObserver& iObserver; - MMPXFileScanStateObserver& iStateObserver; + MMPXFileScanStateObserver& iStateObserver; }; #endif // CMPXMETADATASCANNER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxdiskspacewatcher.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxdiskspacewatcher.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxdiskspacewatcher.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -147,8 +147,12 @@ void CMPXDiskSpaceWatcher::RunL() { // Callback to observer about which drive is low on disk space - // - iObs.HandleLowDiskEvent( iDriveToMonitor ); + //Check whether the current disk is low on disk space in Mass Storage mode. + // + if (IsLowOnDisk()) + { + iObs.HandleLowDiskEvent( iDriveToMonitor ); + } } // END OF FILE diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxfoldermonitor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -17,22 +17,15 @@ #include -#ifdef RD_MULTIPLE_DRIVE #include #include -#endif //RD_MULTIPLE_DRIVE #include #include "mpxfoldermonitor.h" #include "mpxfileadditionobserver.h" #include "mpxfoldermonitorobserver.h" // CONSTANTS -#ifdef RD_MULTIPLE_DRIVE _LIT( KMPXMusicPath, "\\Music\\"); -#else -_LIT( KMPXMusicPath, "\\Music\\"); -_LIT( KMPXDataPath, "\\Data\\"); -#endif //RD_MULTIPLE_DRIVE // --------------------------------------------------------------------------- @@ -94,7 +87,6 @@ delete iFolderName; iFolderName = NULL; -#ifdef RD_MULTIPLE_DRIVE switch( aDrive ) { case EDriveC: @@ -128,53 +120,13 @@ User::LeaveIfError( iFs.DriveToChar( aDrive, driveChar ) ); MPX_DEBUG2("CMPXFolderMonitor::Start: Drive %c: not supported!", - driveChar ); + (TUint)driveChar ); User::Leave( KErrNotSupported ); } break; } } MPX_DEBUG2("CMPXFolderMonitor::Start: Use %S path", iFolderName); -#else - switch( aDrive ) - { - case EDriveC: - { - TDriveName driveName = TDriveUnit( aDrive ).Name(); - TInt length = KMPXDataPath().Length() + driveName.Length(); - - iFolderName = HBufC::NewL(length); - - TPtr folderPtr( iFolderName->Des() ); - folderPtr.Append( driveName ); - folderPtr.Append( KMPXDataPath ); - - break; - } - case EDriveE: - // deliberate fall through, same actions for E & F drive - - case EDriveF: - { - - TDriveName driveName = TDriveUnit( aDrive ).Name(); - TInt length = KMPXMusicPath().Length() + driveName.Length(); - - iFolderName = HBufC::NewL(length); - - TPtr folderPtr( iFolderName->Des() ); - folderPtr.Append( driveName ); - folderPtr.Append( KMPXMusicPath ); - - break; - } - - default: - { - User::Leave( KErrNotSupported ); - } - } -#endif // RD_MULTIPLE_DRIVE // Start listening // diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxfolderscanner.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -244,9 +244,9 @@ TInt err(KErrNone); do { - MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL iDirScan->NexL()"); + MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL iDirScan->NextL()"); TRAP(err, iDirScan->NextL(iDir)); - MPX_DEBUG1("CMPXFolderScanner::SetupNextDriveToScanL path blocked?"); + MPX_DEBUG2("CMPXFolderScanner::SetupNextDriveToScanL path %S", &iDirScan->FullPath()); blocked = iObserver.IsPathBlockedL( iDirScan->FullPath() ); MPX_DEBUG2("CMPXFolderScanner::SetupNextDriveToScanL path blocked %i", blocked); if( blocked ) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdb.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -31,8 +31,12 @@ // --------------------------------------------------------------------------- // CMPXHarvesterDB::CMPXHarvesterDB( TDriveNumber aDrive, RFs& aFs ) : - iDrive( aDrive), - iFs( aFs ) + iDrive( aDrive), + iFs( aFs ) +#ifdef __RAMDISK_PERF_ENABLE + ,iRamDrive(aDrive), + iUseRamDrive(EFalse) +#endif // __RAMDISK_PERF_ENABLE { } @@ -75,27 +79,21 @@ // TInt CMPXHarvesterDB::OpenL() { - MPX_DEBUG1("CMPXHarvesterDB::OpenL <---"); + MPX_DEBUG1("-->CMPXHarvesterDB::OpenL"); // There is no need to re-open if it was already open if( iDBOpen ) { + MPX_DEBUG1("<--CMPXHarvesterDB::OpenL rtn=0 (already open)"); return KErrNone; } TInt rtn( KErrNone ); - TDriveUnit drive( iDrive ); - TFileName fileName; - fileName.Append( drive.Name() ); - fileName.Append( KHarvesterDBPath ); - - // Make sure Path exists - if (!BaflUtils::PathExists(iFs, fileName)) - { - iFs.MkDirAll(fileName); - } - - fileName.Append( KHarvesterDBName ); + TFileName fileName = GenerateDbName(); + TParsePtr fileParser( fileName ); + TFileName filePath = fileParser.DriveAndPath(); + // Make sure Path exists; allow to leave if can't create the path + BaflUtils::EnsurePathExistsL(iFs, filePath); // Try to open the stream TRAPD( err, @@ -107,20 +105,9 @@ if( err ) { MPX_DEBUG2("CMPXHarvesterDB::OpenL -- New database %i", err); - - TRAPD( openErr, - iStore = CPermanentFileStore::ReplaceL(iFs, fileName ,EFileRead|EFileWrite); - iStore->SetTypeL(iStore->Layout()); - CreateDBL(); - iDBOpen = ETrue; - ); - - if( KErrNone != openErr ) - { - iDBOpen = EFalse; - User::Leave( openErr ); - } - + iStore = CPermanentFileStore::ReplaceL(iFs, fileName ,EFileRead|EFileWrite); + iStore->SetTypeL(iStore->Layout()); + CreateDBL(); // If the open stream error was not found, that is fine // because it is a new db, other errors means the stream // is corrupted @@ -131,9 +118,8 @@ { MPX_DEBUG1("CMPXHarvesterDB::OpenL -- Opening database" ); rtn = OpenDBL(); - iDBOpen = ETrue; } - + iDBOpen = ETrue; // Check volume Id // @@ -146,6 +132,7 @@ if( idErr != KErrNone ) { // Delete the database because this is not readable + MPX_DEBUG2("CMPXHarvesterDB::OpenL -- Deleting unreadable DB %i", idErr); Close(); User::LeaveIfError(DeleteDatabase()); rtn = KErrCorrupt; @@ -159,8 +146,8 @@ User::LeaveIfError(DeleteDatabase()); rtn = OpenL(); } - - MPX_DEBUG1("CMPXHarvesterDB::OpenL --->"); + + MPX_DEBUG2("<--CMPXHarvesterDB::OpenL rtn=%d", rtn); return rtn; } @@ -196,15 +183,26 @@ MPX_DEBUG1("CMPXHarvesterDB::CreateDBL <---"); // remove old databases before creating/replacing new database - - TFileName dbFileName; - TDriveUnit drive( iDrive ); - dbFileName.Append( drive.Name() ); - dbFileName.Append( KHarvesterDBPath ); - dbFileName.Append( KHarvesterDBPattern ); + TFileName fileName = GenerateDbName(); + TParsePtr fileParser( fileName ); + TFileName filePath = fileParser.DriveAndPath(); +#ifdef __RAMDISK_PERF_ENABLE + if ( iUseRamDrive ) + { + TDriveUnit drive( iDrive ); + filePath.Append(drive.Name()[0]); + filePath.Append(KHarvesterDBPattern); + } + else + { +#endif // __RAMDISK_PERF_ENABLE + filePath.Append( KHarvesterDBPattern ); +#ifdef __RAMDISK_PERF_ENABLE + } +#endif // __RAMDISK_PERF_ENABLE CFileMan* fileManager = CFileMan::NewL(iFs); - TInt ret = fileManager->Delete(dbFileName); + TInt ret = fileManager->Delete(filePath); delete fileManager; fileManager = NULL; @@ -299,6 +297,7 @@ TRAPD(err, iDatabase->OpenL( iStore, iStore->Root() ) ); if( err != KErrNone ) { + MPX_DEBUG2("CMPXHarvesterDB::OpenDBL RDbStoreDatabase::OpenL error %d", err); delete iDatabase; iDatabase = NULL; CreateDBL(); @@ -474,12 +473,7 @@ // TInt CMPXHarvesterDB::DeleteDatabase() { - TDriveUnit drive( iDrive ); - TFileName fileName; - fileName.Append( drive.Name() ); - fileName.Append( KHarvesterDBPath ); - fileName.Append( KHarvesterDBName ); - + TFileName fileName = GenerateDbName(); return iFs.Delete( fileName ); } @@ -607,4 +601,127 @@ iDatabase->Rollback(); } +#ifdef __RAMDISK_PERF_ENABLE +// --------------------------------------------------------------------------- +// Set RAM drive info +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDB::SetRamDriveInfo(TDriveNumber aDrive, TBool aUseRamDrive) + { + MPX_FUNC("CMPXHarvesterDB::SetRamDriveInfo"); + iRamDrive = aDrive; + iUseRamDrive = aUseRamDrive; + } + +// --------------------------------------------------------------------------- +// Get UseRamDrive +// --------------------------------------------------------------------------- +// +TBool CMPXHarvesterDB::IsUseRamDrive() + { + MPX_FUNC("CMPXHarvesterDB::IsUseRamDrive"); + return iUseRamDrive; + } + +// --------------------------------------------------------------------------- +// Get the state of the database. +// --------------------------------------------------------------------------- +// +TDbState CMPXHarvesterDB::GetDbState() + { + MPX_FUNC("CMPXHarvesterDB::GetDbState"); + TDbState state = EDbClose; + if ( InTransaction() ) + { + state = EDbInTransaction; + } + else if ( iDBOpen ) + { + state = EDbOpen; + } + + MPX_DEBUG2("CMPXHarvesterDB::GetDbState state = %d", state ); + return state; + } + +// --------------------------------------------------------------------------- +// Set the state of the database. +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDB::SetDbStateL( TDbState aState ) + { + MPX_FUNC("CMPXHarvesterDB::SetDbState"); + MPX_DEBUG2("CMPXHarvesterDB::SetDbState state = %d", aState ); + + switch( aState ) + { + case EDbClose: + { + if ( InTransaction() ) + { + CommitL(); + } + Close(); + break; + } + case EDbOpen: + { + if ( InTransaction() ) + { + CommitL(); + } + OpenL(); + break; + } + case EDbInTransaction: + { + if ( !InTransaction() ) + { + OpenL(); + BeginL(); + } + break; + } + default: + { + // should never get here + User::Leave(KErrNotSupported); + } + } + } + +#endif // __RAMDISK_PERF_ENABLE + +// --------------------------------------------------------------------------- +// Generate the database name +// --------------------------------------------------------------------------- +// +TFileName CMPXHarvesterDB::GenerateDbName() + { + MPX_FUNC("CMPXHarvesterDB::GenerateDbName"); + TFileName fileName; +#ifdef __RAMDISK_PERF_ENABLE + if ( iUseRamDrive ) + { + TDriveUnit ramDrive( iRamDrive ); + fileName.Append( ramDrive.Name() ); + fileName.Append( KHarvesterDBPath ); + TDriveUnit drive( iDrive ); + fileName.Append(drive.Name()[0]); + fileName.Append(KHarvesterDBName); + } + else + { +#endif // __RAMDISK_PERF_ENABLE + TDriveUnit drive( iDrive ); + fileName.Append( drive.Name() ); + fileName.Append( KHarvesterDBPath ); + fileName.Append( KHarvesterDBName ); +#ifdef __RAMDISK_PERF_ENABLE + } +#endif // __RAMDISK_PERF_ENABLE + MPX_DEBUG2("CMPXHarvesterDB::GenerateDbName file name = %S", &fileName ); + return fileName; + } + // End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterdbmanager.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -17,21 +17,45 @@ #include -#ifdef RD_MULTIPLE_DRIVE #include #include -#endif //RD_MULTIPLE_DRIVE + +#ifdef __RAMDISK_PERF_ENABLE +#include +#include +#include +#include "mpxdbcommon.h" +#endif //__RAMDISK_PERF_ENABLE + #include #include "mpxharvesterdbmanager.h" #include "mpxharvesterdb.h" #include "mpxharvesterdbtable.h" +// CONSTANTS +#ifdef __RAMDISK_PERF_ENABLE +_LIT( KHarvesterDummyDBName, "harvesterDummy.dat" ); +const TInt64 KMPMegaByte = 1048576; +const TInt64 KMPEstimatedSongInBytes = KMPMegaByte * 2; +const TInt KMPEstimatedSizePerDBEntry = KMaxFileName; // worst scenario, can be lower if needed +//const TInt KUpdateDBCount = 200; +const TInt KMPMinimumRAMSizeToRun = 6 * KMPMegaByte; +#endif //__RAMDISK_PERF_ENABLE + + // --------------------------------------------------------------------------- // C++ Constructor // --------------------------------------------------------------------------- // -CMPXHarvesterDatabaseManager::CMPXHarvesterDatabaseManager( RFs& aFs ) - : iFs( aFs ) +CMPXHarvesterDatabaseManager::CMPXHarvesterDatabaseManager( RFs& aFs ): + iFs( aFs ) +#ifdef __RAMDISK_PERF_ENABLE + ,iRAMDiskPerfEnabled(EFalse), + iMaximumAllowedRAMDiskSpaceToCopy(0), + //iUpdateCount(0), + iMtpMode(EFalse) + //iMtpAddCount(0) +#endif //__RAMDISK_PERF_ENABLE { } @@ -43,7 +67,38 @@ // void CMPXHarvesterDatabaseManager::ConstructL() { + MPX_FUNC("CMPXHarvesterDatabaseManager::ConstructL"); User::LeaveIfError( iDBSession.Connect() ); + +#ifdef __RAMDISK_PERF_ENABLE + TInt temp; + CRepository* repository = CRepository::NewLC( KCRUIDMpxHarvesterFeatures ); + MPX_DEBUG1("CMPXHarvesterDatabaseManager::ConstructL got repository"); + User::LeaveIfError( repository->Get( KMpxHarvesterEnableRamDisk, temp )); + iRAMDiskPerfEnabled = temp; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL KMpxHarvesterEnableRamDisk %d", iRAMDiskPerfEnabled); + + User::LeaveIfError( repository->Get( KMpxHarvesterMaxAllowedRamDiskSpace, temp) ); + iMaximumAllowedRAMDiskSpaceToCopy = temp * KMPMegaByte; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL KMpxHarvesterMaxAllowedRamDiskSpace %Lu", iMaximumAllowedRAMDiskSpaceToCopy); + CleanupStack::PopAndDestroy(repository); + + if ( iRAMDiskPerfEnabled ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::ConstructL RAMDisk performance is enabled."); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL RAMDisk iMaximumAllowedRAMDiskSpaceToCopy=%Lu", iMaximumAllowedRAMDiskSpaceToCopy); + if ( GetRAMDiskPath() != KErrNone ) + { + // Error finding ram drive, disable ram disk + iRAMDiskPerfEnabled = EFalse; + } + } + else + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL RAMDisk performance is NOT enabled iRAMDiskPerfEnabled=%d", iRAMDiskPerfEnabled); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::ConstructL RAMDisk iMaximumAllowedRAMDiskSpaceToCopy=%Lu", iMaximumAllowedRAMDiskSpaceToCopy); + } +#endif //__RAMDISK_PERF_ENABLE } @@ -68,6 +123,13 @@ // CMPXHarvesterDatabaseManager::~CMPXHarvesterDatabaseManager() { +#ifdef __RAMDISK_PERF_ENABLE + TInt count(iDatabases.Count()); + for (TInt i = 0; i < count; ++i) + { + RemoveDummyFile(iDatabases[i]->GetDbDrive()); + } +#endif // __RAMDISK_PERF_ENABLE iDatabases.ResetAndDestroy(); iDatabases.Close(); iDBSession.Close(); @@ -85,25 +147,20 @@ // Open drives we are interested in. // -#ifdef RD_MULTIPLE_DRIVE TDriveList driveList; TInt driveCount(0); User::LeaveIfError( DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount ) ); - TInt check(KErrNone); for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ ) { - if (driveList[driveNum] && !IsRemoteDrive(static_cast(driveNum))) + if (driveList[driveNum] && IsLocalDrive(static_cast(driveNum))) { - TFileName drivePath; - User::LeaveIfError( - PathInfo::GetRootPath( drivePath, driveNum ) ); - MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in %S drive", - &drivePath); - TRAP( check, GetDatabaseL(static_cast(driveNum)) ); - if( check == KErrNotFound ) + MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening database in drive %d", driveNum); + TInt index = FindDatabaseIndex ( (TDriveNumber) driveNum ); + if ( index == KErrNotFound ) { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: re-creating database"); CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( static_cast(driveNum), iFs ); CleanupStack::PushL( dB ); @@ -115,64 +172,23 @@ } else { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); CleanupStack::PopAndDestroy( dB ); } } - else if( check == KErrNone ) + else { - TRAPD(openError, GetDatabaseL(static_cast(driveNum)).OpenL() ); + CMPXHarvesterDB* dB = iDatabases[index]; + TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 if(openError != KErrNone) { - TRAP_IGNORE( RemoveDatabaseL(static_cast(driveNum))); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d, removing database", openError); + iDatabases.Remove ( index ); + delete dB; } } } } -#else - TInt check(KErrNone); - TRAP( check, GetDatabaseL(EDriveC) ); - if( check == KErrNotFound ) - { - CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( EDriveC, iFs ); - CleanupStack::PushL( dB ); - iDatabases.AppendL( dB ); - CleanupStack::Pop( dB ); - TRAP_IGNORE( rtn = dB->OpenL() ); //lint !e665 - } - else if( check == KErrNone ) - { - TRAPD(openError, GetDatabaseL(EDriveC).OpenL() ); - if(openError != KErrNone) - { - TRAP_IGNORE( RemoveDatabaseL(EDriveC)); - } - } - TRAP( check, GetDatabaseL(EDriveE) ); //lint !e961 - if( check == KErrNotFound ) - { - CMPXHarvesterDB* dB = CMPXHarvesterDB::NewL( EDriveE, iFs ); - CleanupStack::PushL( dB ); - TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 - if(openError == KErrNone) - { - iDatabases.AppendL( dB ); - CleanupStack::Pop( dB ); - } - else - { - CleanupStack::PopAndDestroy( dB ); - } - } - else if( check == KErrNone ) - { - TRAPD(openError,GetDatabaseL(EDriveE).OpenL() ); - if(openError != KErrNone) - { - TRAP_IGNORE( RemoveDatabaseL(EDriveE)); - } - } -#endif // RD_MULTIPLE_DRIVE - MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenAllDatabasesL --->"); //lint !e961 return rtn; } @@ -183,57 +199,173 @@ // void CMPXHarvesterDatabaseManager::OpenDatabaseL( TDriveNumber aDrive ) { - MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL <---"); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenDatabaseL %d <---", aDrive); - // Re-open a specific database - // - if (!IsRemoteDrive(aDrive)) + if ( ! IsLocalDrive( aDrive ) ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL drive not available -->"); + return; + } + + CMPXHarvesterDB * db = NULL; + TInt index = FindDatabaseIndex ( aDrive ); + if ( index == KErrNotFound ) { - TInt count( iDatabases.Count() ); - for( TInt i=0; iGetDbDrive() == aDrive ) - { - db->OpenL(); - break; - } + db = iDatabases[index]; } + + // TRAPD(openError, rtn |= dB->OpenL() ); //lint !e665 + TRAPD( openError, db->OpenL() ); + if( openError != KErrNone ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::OpenAllDatabasesL: opening failed, error=%d", openError); + iDatabases.Remove(index); + delete db; } MPX_DEBUG1("CMPXHarvesterDatabaseManager::OpenDatabaseL --->"); } // --------------------------------------------------------------------------- -// CMPXHarvesterDatabaseManager::CloseAllDatabase +// CMPXHarvesterDatabaseManager::CloseAllDatabases // --------------------------------------------------------------------------- // -void CMPXHarvesterDatabaseManager::CloseAllDatabase() +void CMPXHarvesterDatabaseManager::CloseAllDatabases() { // Close all databases for shutdown iDatabases.ResetAndDestroy(); } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::CloseMassStorageDatabases +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::CloseMassStorageDatabases() + { + MPX_FUNC("CMPXHarvesterDatabaseManager::CloseMassStorageDatabases"); + for (TInt i = 0; i < iDatabases.Count();) + { + CMPXHarvesterDB * db =iDatabases [i]; + TDriveNumber drive = db->GetDbDrive(); + if ( drive != EDriveC ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseMassStorageDatabases closing DB on drive %d", drive); + db->Close(); +#ifdef __RAMDISK_PERF_ENABLE + if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM"); + db->SetRamDriveInfo( iRAMDrive, EFalse ); + TInt err = DoCopyDBFromRam (drive); + if ( err ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err); + RemoveDummyFile( drive ); + } + } +#endif + delete db; + iDatabases.Remove(i); + } + else + { + ++i; + } + } + } + // --------------------------------------------------------------------------- // CMPXHarvesterDatabaseManager::CloseDatabase // --------------------------------------------------------------------------- // void CMPXHarvesterDatabaseManager::CloseDatabase( TDriveNumber aDrive ) { - if (!IsRemoteDrive(aDrive)) + MPX_DEBUG2("-->CMPXHarvesterDatabaseManager::CloseDatabase drive %d", aDrive ); + TInt index = FindDatabaseIndex( aDrive ); + if ( index != KErrNotFound ) { - MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase drive %d <---", aDrive ); - TInt count = iDatabases.Count(); - for ( TInt i=0; iClose(); +#ifdef __RAMDISK_PERF_ENABLE + if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) { - CMPXHarvesterDB* db = (CMPXHarvesterDB*) iDatabases[i]; - if ( db->GetDbDrive() == aDrive) + MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase DB is on RAM"); + db->SetRamDriveInfo( iRAMDrive, EFalse ); + TInt err = DoCopyDBFromRam(aDrive); + if ( err ) { - db->Close(); - break; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CloseDatabase DB copy error=%d", err); + RemoveDummyFile( aDrive ); } } +#endif + delete db; + iDatabases.Remove(index); } - MPX_DEBUG1("CMPXHarvesterDatabaseManager::CloseDatabase --->"); + MPX_DEBUG1("<--CMPXHarvesterDatabaseManager::CloseDatabase"); + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::DropDatabase +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::DropDatabase( TDriveNumber aDrive ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::DropDatabase drive %d <---", aDrive ); + TInt index = FindDatabaseIndex( aDrive ); + if ( index != KErrNotFound ) + { + CMPXHarvesterDB * db =iDatabases[index]; +#ifdef __RAMDISK_PERF_ENABLE + if( iRAMDiskPerfEnabled && db->IsUseRamDrive() ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::DropDatabase DB is on RAM"); + db->Close(); + // delete db on ram drive. + TFileName src = GenerateHarvesterDbName( TDriveUnit(aDrive), ETrue ); + BaflUtils::DeleteFile(iFs, src); + } +#endif + delete db; + iDatabases.Remove(index); + } + MPX_DEBUG1("CMPXHarvesterDatabaseManager::DropDatabase --->"); + } +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::FindDatabaseIndex +// --------------------------------------------------------------------------- +// +TInt CMPXHarvesterDatabaseManager::FindDatabaseIndex ( TDriveNumber aDrive ) + { + TInt count = iDatabases.Count(); + for( TInt i=0; iGetDbDrive() == aDrive ) + { + MPX_DEBUG3("CMPXHarvesterDatabaseManager::FindDatabaseIndex drive=%d returns index %d ", aDrive, i); + return i; + } + } + MPX_DEBUG2("CMPXHarvesterDatabaseManager::FindDatabaseIndex drive=%d returns KErrNotFound", aDrive); + return KErrNotFound; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::DataaseIsOpen +// --------------------------------------------------------------------------- +// +TBool CMPXHarvesterDatabaseManager::DatabaseIsOpen( TDriveNumber aDrive ) + { + return FindDatabaseIndex( aDrive ) != KErrNotFound; } // --------------------------------------------------------------------------- @@ -242,54 +374,9 @@ // CMPXHarvesterDB& CMPXHarvesterDatabaseManager::GetDatabaseL( TDriveNumber aDrive ) { - CMPXHarvesterDB* db( NULL ); - - // Find the database - TInt count = iDatabases.Count(); - for( TInt i=0; iGetDbDrive() == aDrive ) - { - db = tmp; - break; - } - } - - // Not found, so we leave - if( db == NULL ) - { - User::Leave( KErrNotFound ); - } - return *db; - } - -// --------------------------------------------------------------------------- -// CMPXHarvesterDatabaseManager::RemoveDatabase -// --------------------------------------------------------------------------- -// -void CMPXHarvesterDatabaseManager::RemoveDatabaseL( TDriveNumber aDrive ) - { - - TBool bFound(EFalse); - // Find the database - TInt count = iDatabases.Count(); - for(TInt index=0; indexGetDbDrive() == aDrive )) - { - bFound = ETrue; - delete iDatabases[index]; - iDatabases.Remove(index); - break; - } - } - - // Not found, so we leave - if( !bFound ) - { - User::Leave( KErrNotFound ); - } + TInt index = FindDatabaseIndex( aDrive ); + User::LeaveIfError (index); // Not found, so we leave + return *iDatabases[index]; } // --------------------------------------------------------------------------- @@ -321,18 +408,27 @@ void CMPXHarvesterDatabaseManager::RecreateDatabases() { MPX_DEBUG1("CMPXHarvesterDatabaseManager::RecreateDatabases <--"); - TInt count( iDatabases.Count() ); - for( TInt i=0; iClose(); cur->DeleteDatabase(); // trap leave just in case 1 db had err // - TRAP_IGNORE( cur->OpenL() ); + TRAPD( openError, cur->OpenL() ); + if( openError != KErrNone ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::RecreateDatabases: opening failed, error=%d", openError); + iDatabases.Remove(i); + delete cur; + } + else + { + ++i; + } } } @@ -353,6 +449,18 @@ } // --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::IsLocalDrive +// --------------------------------------------------------------------------- +// +TBool CMPXHarvesterDatabaseManager::IsLocalDrive( TDriveNumber aDrive ) + { + TDriveInfo driveInfo; + return (iFs.Drive ( driveInfo, aDrive) == KErrNone ) + && driveInfo.iType != EMediaNotPresent + && ! (driveInfo.iDriveAtt & KDriveAttRemote); + } + +// --------------------------------------------------------------------------- // CMPXHarvesterDatabaseManager::BeginL // --------------------------------------------------------------------------- // @@ -415,5 +523,636 @@ MPX_DEBUG1("CMPXHarvesterDatabaseManager::Rollback -->"); } +#ifdef __RAMDISK_PERF_ENABLE +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::CopyDBsToRamL +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::CopyDBsToRamL( TBool aMtpMode ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::CopyDBsToRamL"); + iMtpMode = aMtpMode; + //iMtpAddCount = 0; + //iUpdateCount = 0; + + if( iRAMDiskPerfEnabled ) + { + // Check for low ram disk space. + if ( !IsRamDiskSpaceAvailable() || IsRamDiskLow() ) + { + return; + } + + // Check if we are over the allowed ram space. + TInt dbSize=0; + TInt err = GetTotalDatabasesSize(dbSize, EFalse); + if ( err || (dbSize > iMaximumAllowedRAMDiskSpaceToCopy) ) + { + MPX_DEBUG2("CMPXDbManager::CopyDBsToRamL Over the allowed Ram disk limit %Lu", iMaximumAllowedRAMDiskSpaceToCopy ); + return; + } + + TInt count(iDatabases.Count()); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL() iDatabaseHandles.Count()=%d", count); + for (TInt i = 0; i < count; ++i) + { + TDriveUnit drive( iDatabases[i]->GetDbDrive() ); + // Don't copy db on C drive. + if ( (TInt)drive == EDriveC ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::CopyDBsToRamL() Drive C: skipped."); + continue; + } + + // Check if database is in RAM drive. + if ( iDatabases[i]->IsUseRamDrive()) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL Drive %d is already in Ram Drive.", (TInt)drive); + continue; + } + + // Get the db state in order to restore it later. + TDbState dbState = iDatabases[i]->GetDbState(); + iDatabases[i]->SetDbStateL( EDbClose ); + TRAPD(err, DoCopyDBToRamL( drive )); + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsToRamL error=%d", err); + // delete dummy file + RemoveDummyFile( (TDriveNumber)(TInt)drive ); + + // delete db in ram drive + TFileName ramDb = GenerateHarvesterDbName( drive, ETrue ); + TInt delErr = BaflUtils::DeleteFile(iFs, ramDb); + MPX_DEBUG3("CMPXHarvesterDatabaseManager::CopyDBsToRamL db on ram drive deleted file=%S, err=%d", &ramDb, delErr); + + iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse); + } + // Restore the db state. + iDatabases[i]->SetDbStateL( dbState ); + } + } + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::DoCopyDBToRamL +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::DoCopyDBToRamL(TDriveUnit aDriveUnit) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBToRamL"); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBToRamL Database from drive %d", (TInt)aDriveUnit ); + TFileName dst; + TFileName src; + dst.Zero(); + dst.Append(iRAMFolder); + BaflUtils::EnsurePathExistsL( iFs, dst ); + src = GenerateHarvesterDbName( aDriveUnit ); + MPX_DEBUG2("RAMDisk src path=%S", &src); + dst = GenerateHarvesterDbName( aDriveUnit, ETrue ); + MPX_DEBUG2("RAMDisk dst path=%S", &dst); + TEntry entry; + iFs.Entry( src, entry ); + User::LeaveIfError( BlockDiskSpaceL( aDriveUnit, entry.iSize )); + User::LeaveIfError( BaflUtils::CopyFile(iFs, src, dst ) ); + MPX_DEBUG1("CMPXHarvesterDatabaseManager::DoCopyDBToRamL Copy to Ram Drive Successful."); + GetDatabaseL( (TDriveNumber) (TInt)aDriveUnit ).SetRamDriveInfo(iRAMDrive, ETrue); + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::CopyDBsFromRamL +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::CopyDBsFromRamL() + { + MPX_FUNC("CMPXHarvesterDatabaseManager::CopyDBsFromRamL"); + // Stop monitoring ram drive for low disk space. + iMtpMode = EFalse; + //iMtpAddCount = 0; + //iUpdateCount = 0; + + if( iRAMDiskPerfEnabled ) + { + // Should not leave until all the databases have been copied from RAM drive. + TInt leaveError = KErrNone; + TInt count(iDatabases.Count()); + for (TInt i = 0; i < count; ++i) + { + TInt err = KErrNone; + TDriveUnit drive( iDatabases[i]->GetDbDrive() ); + // Check if database is in RAM drive. + if ( !iDatabases[i]->IsUseRamDrive()) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL Drive %d is NOT in Ram Drive.", (TInt)drive); + continue; + } + + // Set the UseRamDrive bool to False. + iDatabases[i]->SetRamDriveInfo( iRAMDrive, EFalse ); + // Get the db state in order to restore it later. + TDbState dbState = iDatabases[i]->GetDbState(); + TRAP( err, iDatabases[i]->SetDbStateL(EDbClose) ); + if ( err == KErrNone ) + { + err = DoCopyDBFromRam(drive); + } + else + { + // Error closing db on RAM drive, try to delete it. + TFileName ramDB; + ramDB = GenerateHarvesterDbName( drive, ETrue ); + BaflUtils::DeleteFile(iFs, ramDB); + } + + if ( err ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CopyDBsFromRamL copy error=%d", err); + //anyting wrong, delete the temp file. + RemoveDummyFile( (TDriveNumber)(TInt)drive ); + } + + // Restore the db state. + TRAPD( error, iDatabases[i]->SetDbStateL( dbState ) ); + if ( error && !leaveError ) + { + leaveError = error; + } + } + User::LeaveIfError( leaveError ); + } + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::DoCopyDBFromRam +// --------------------------------------------------------------------------- +// +TInt CMPXHarvesterDatabaseManager::DoCopyDBFromRam(TDriveUnit aDriveUnit) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::DoCopyDBFromRam"); + TFileName dst; + TFileName src; + TInt err = KErrNone; + + dst = GenerateHarvesterDbName( aDriveUnit ); + src = GenerateHarvesterDbName( aDriveUnit, ETrue ); + MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRam from %S to %S", &src, &dst ); + + TFileName dummyDbFileName = GenerateDummyDbName( aDriveUnit ); + + //Copy Db from RAM to replace dummy file + err = BaflUtils::CopyFile(iFs, src, dummyDbFileName); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRam database copied from ram drive err=%d.", err); + + // delete db on ram drive. + TInt delErr = BaflUtils::DeleteFile(iFs, src); + MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoCopyDBFromRam db on ram drive deleted file=%S, err=%d", &src, delErr); + + // Make sure we del db from ram drive before returning. + if (err != KErrNone) + { + return err; + } + + err = iFs.Replace(dummyDbFileName, dst); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoCopyDBFromRam dummy file replaced, err=%d.", err); + return err; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::GetRAMDiskPath +// --------------------------------------------------------------------------- +// +TInt CMPXHarvesterDatabaseManager::GetRAMDiskPath() + { + MPX_FUNC("CMPXHarvesterDatabaseManager::GetRAMDiskPath"); + TDriveList driveList; + TBool ramDriveFound = EFalse; + iRAMFolder.Zero(); + + TInt error = iFs.DriveList( driveList ); + if ( error == KErrNone ) + { + for ( TInt i = 0; i < driveList.Length(); i++ ) + { + if ( driveList[i] != 0 ) + { + TDriveInfo info; + TInt err = iFs.Drive( info, i ); + if ( !err && info.iType == EMediaRam ) + { + TDriveUnit driveUnit( i ); + iRAMDrive = (TDriveNumber)i; + iRAMFolder.Append(driveUnit.Name()); + iRAMFolder.Append(KHarvesterDBPath); + ramDriveFound = ETrue; + MPX_DEBUG2("RAMDisk path=%S", &iRAMFolder); + break; + } + } + } + + // Check if ram drive is found. + if ( !ramDriveFound ) + { + error = KErrNotFound; + } + } + MPX_DEBUG2("CMPXDbManager::GetRAMDiskPath Get DriveList error=%d", error); + return error; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable +// --------------------------------------------------------------------------- +// +TBool CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable() + { + MPX_FUNC("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable"); + TVolumeInfo vol; + TInt err = iFs.Volume( vol, iRAMDrive ); + if ( err != KErrNone ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable Disk Not available to use. Error = %d", err); + return EFalse; + } + MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable Free in bytes =%Lu", vol.iFree); + if ( vol.iFree > KMPMinimumRAMSizeToRun ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable Ok to copy"); + return ETrue; + } + + MPX_DEBUG1("CMPXHarvesterDatabaseManager::IsRamDiskSpaceAvailable NOT Ok to copy"); + return EFalse; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::BlockDiskSpaceL +// --------------------------------------------------------------------------- +// +TInt CMPXHarvesterDatabaseManager::BlockDiskSpaceL( TDriveUnit aDrive, TInt aOrigDbSize ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::BlockDiskSpaceL"); + + // if current DB size can not fit in RAM, abort now + TVolumeInfo vol; + TInt err = KErrNone; + err = iFs.Volume( vol, iRAMDrive ); + if ( err ) + { + return err; + } + + if ( vol.iFree < aOrigDbSize + KMPMinimumRAMSizeToRun ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Not enough space on ram drive." ); + return KErrDiskFull; + } + + MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL %d", (TInt)aDrive ); + err = iFs.Volume( vol, (TInt)aDrive ); + if ( err ) + { + return err; + } + + MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Disk total free space in bytes =%Lu", vol.iFree); + TInt64 blockingSize( CalculateInitalDummyDBSizeL( vol, aOrigDbSize )); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Disk blocking size =%Lu", blockingSize); + // Pad blockingSize by 1Mb so we don't use all the free disk space. + if ( vol.iFree > (blockingSize + 1*KMPMegaByte) ) + { + TFileName dummyDbFileName = GenerateDummyDbName( aDrive ); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::BlockDiskSpaceL Dummy db file name=%S", &dummyDbFileName); + + RFile dummyDb; + err = dummyDb.Replace( iFs, dummyDbFileName, EFileWrite ); + if (err != KErrNone) + { + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Can't open dummy file %d", err); + return err; + } + + err = dummyDb.SetSize( blockingSize ); + // Close the dummy RFile + dummyDb.Close(); + if ( err ) + { + MPX_DEBUG2("CMPXDbManager::BlockDiskSpaceL Can't resize dummy file %d", err); + return err; + } + } + else + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::BlockDiskSpaceL - Not enough disk space for dummy file."); + err = KErrDiskFull; + } + return err; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL +// --------------------------------------------------------------------------- +// +TInt64 CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL( TVolumeInfo aVol, TInt aOrigDbSize ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSizeL"); + TInt64 size; + + if ( iMtpMode ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize aVol.iFree=%Lu", aVol.iFree ); + TInt64 totalNumOfSongsCanFit = aVol.iFree / KMPEstimatedSongInBytes; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize (MTP) totalNumOfSongsCanFit=%Lu", totalNumOfSongsCanFit ); + TInt64 estimatedSize = totalNumOfSongsCanFit * (TInt64) KMPEstimatedSizePerDBEntry + aOrigDbSize; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize (MTP) estimated DB size from calculation=%Lu", estimatedSize ); + if ( estimatedSize > iMaximumAllowedRAMDiskSpaceToCopy ) + { + size = iMaximumAllowedRAMDiskSpaceToCopy; + } + else + { + size = estimatedSize; + } + } + else + { + TInt64 totalNumOfSongsCanFit = aVol.iSize / KMPEstimatedSongInBytes; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize totalNumOfSongsCanFit=%Lu", totalNumOfSongsCanFit ); + TInt64 estimatedSize = totalNumOfSongsCanFit * (TInt64) KMPEstimatedSizePerDBEntry + aOrigDbSize; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize estimated DB size from calculation=%Lu", estimatedSize ); + if ( estimatedSize > iMaximumAllowedRAMDiskSpaceToCopy ) + { + size = iMaximumAllowedRAMDiskSpaceToCopy; + } + else + { + size = estimatedSize; + } + } + + MPX_DEBUG2("CMPXHarvesterDatabaseManager::CalculateInitalDummyDBSize Dummy DB size=%Lu", size ); + return size; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::RemoveDummyFile +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::RemoveDummyFile( TDriveNumber aDrive ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::RemoveDummyFile"); + + TFileName file = GenerateDummyDbName(TDriveUnit(aDrive)); + + if ( (file.Length() > 0) && + (BaflUtils::FileExists(iFs, file)) ) + { + BaflUtils::DeleteFile(iFs, file); + } + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::UpdateDBsFromRamL +// --------------------------------------------------------------------------- +// +/*void CMPXHarvesterDatabaseManager::UpdateDBsFromRamL( TInt aCount ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL"); + TBool updateDb = EFalse; + + // In MTP mode, aCount is invalid, songs are added one at a time. + if ( iMtpMode ) + { + iMtpAddCount++; + MPX_DEBUG2("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL iMtpAddCount=%d", iMtpAddCount); + if ( (iMtpAddCount - iUpdateCount) > KUpdateDBCount ) + { + updateDb = ETrue; + iUpdateCount = iMtpAddCount; + } + } + else + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL aCount=%d", aCount); + if ( (aCount - iUpdateCount) > KUpdateDBCount ) + { + updateDb = ETrue; + iUpdateCount = aCount; + } + } + + if ( updateDb ) + { + CommitL(); + TInt count(iDatabases.Count()); + for (TInt i = 0; i < count; ++i) + { + TDriveUnit drive( iDatabases[i]->GetDbDrive() ); + // Check if database is not in RAM drive. + if ( !iDatabases[i]->IsUseRamDrive() ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::UpdateDBsFromRamL Drive %d is not in Ram Drive.", (TInt)drive); + continue; + } + + iDatabases[i]->Close(); + // update the database from ram drive. + TRAP_IGNORE( DoUpdateDBFromRamL( drive ) ); + // + iDatabases[i]->OpenL(); + } + BeginL(); + } + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL(TDriveUnit aDriveUnit) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL"); + + TFileName dst; + TFileName src; + + dst = GenerateHarvesterDbName( aDriveUnit ); + src = GenerateHarvesterDbName( aDriveUnit, ETrue ); + MPX_DEBUG3("CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL from %S to %S", &src, &dst ); + + //Copy Db from RAM to real db file + TInt err = BaflUtils::CopyFile(iFs, src, dst); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::DoUpdateDBFromRamL database copied from ram drive err=%d.", err); + }*/ + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::GenerateHarvesterDbName +// --------------------------------------------------------------------------- +// +TFileName CMPXHarvesterDatabaseManager::GenerateHarvesterDbName( TDriveUnit aDriveUnit, TBool aForRamDrive ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::GenerateHarvesterDbName"); + TFileName name; + name.Zero(); + + if ( aForRamDrive ) + { + name.Append(iRAMFolder); + name.Append(aDriveUnit.Name()[0]); + name.Append(KHarvesterDBName); + } + else + { + name.Append(aDriveUnit.Name()); + name.Append(KHarvesterDBPath); + name.Append(KHarvesterDBName); + } + + MPX_DEBUG2("CMPXHarvesterDatabaseManager::GenerateHarvesterDbName name = %S", &name ); + return name; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::GenerateDummyDbName +// --------------------------------------------------------------------------- +// +TFileName CMPXHarvesterDatabaseManager::GenerateDummyDbName( TDriveUnit aDriveUnit ) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::GenerateDummyDbName"); + TFileName name; + name.Zero(); + name.Append(aDriveUnit.Name()); + name.Append(KHarvesterDBPath); + name.Append(KHarvesterDummyDBName); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::GenerateDummyDbName name = %S", &name ); + return name; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::EnsureRamSpaceL +// --------------------------------------------------------------------------- +// +void CMPXHarvesterDatabaseManager::EnsureRamSpaceL() + { + MPX_FUNC("CMPXHarvesterDatabaseManager::EnsureRamSpaceL()"); + + // Ram disk disabled, no need to continue. + if( !iRAMDiskPerfEnabled ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::EnsureRamSpaceL RAM Disk Disabled."); + return; + } + + // Check if any DBs are in RAM drive. + TInt count(iDatabases.Count()); + TBool ramDriveInUse = EFalse; + for (TInt i = 0; i < count; ++i) + { + // Check if database is in RAM drive. + if ( iDatabases[i]->IsUseRamDrive() ) + { + ramDriveInUse = ETrue; + break; + } + } + + // DBs not in ram drive, no need to continue. + if ( !ramDriveInUse ) + { + MPX_DEBUG1("CMPXHarvesterDatabaseManager::EnsureRamSpaceL No DBs in RAM drive."); + return; + } + + // Check if low on Ram disk. + if ( IsRamDiskLow() ) + { + // RAM not enough, copy back to normal drive and continue to harvest. + MPX_DEBUG1("CMPXHarvesterDatabaseManager::EnsureRamSpaceL RAM diskspace is full, copy dbs back."); + CopyDBsFromRamL(); + } + else + { + TInt size=0; + TInt err = GetTotalDatabasesSize(size, ETrue); + if ( err || (size > iMaximumAllowedRAMDiskSpaceToCopy) ) + { + // Databases using too much RAM space, copy back to normal drive and continue to harvest. + if ( err ) + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::EnsureRamSpaceL Get DBs Size Err = %d, copy dbs back.", err); + } + else + { + MPX_DEBUG2("CMPXHarvesterDatabaseManager::EnsureRamSpaceL DBs using too much RAM space size = %d, copy dbs back.", size); + } + CopyDBsFromRamL(); + } + } + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::IsRamDiskLow +// --------------------------------------------------------------------------- +// +TBool CMPXHarvesterDatabaseManager::IsRamDiskLow() + { + MPX_FUNC("CMPXHarvesterDatabaseManager::IsRamDiskLow()"); + TBool low = EFalse; + TVolumeInfo vol; + TInt errRAM = iFs.Volume( vol, iRAMDrive ); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskLow Get vol err: %d", errRAM); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::IsRamDiskLow Free RAM Disk Space: %Lu", vol.iFree); + if ( errRAM == KErrNone && vol.iFree < KMPMinimumRAMSizeToRun ) + { + low = ETrue; + } + return low; + } + +// --------------------------------------------------------------------------- +// CMPXHarvesterDatabaseManager::GetTotalDatabasesSize +// --------------------------------------------------------------------------- +// +TInt CMPXHarvesterDatabaseManager::GetTotalDatabasesSize(TInt& aSize, TBool aRamDrive) + { + MPX_FUNC("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize"); + TInt err = KErrNone; + TInt size=0; + TInt count(iDatabases.Count()); + for ( TInt i = 0; i < count ; ++i ) + { + TDriveUnit drive( iDatabases[i]->GetDbDrive() ); + // Ignore C drive + if ( (TInt)drive == EDriveC ) + { + continue; + } + // Generate database name. + TFileName dbFilename = GenerateHarvesterDbName(drive, aRamDrive); + MPX_DEBUG2("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Database name = %S", &dbFilename); + TEntry entry; + err = iFs.Entry( dbFilename, entry ); + if (err == KErrNotFound || err == KErrNotReady) + { + MPX_DEBUG3("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Ignored %S, err = %d", &dbFilename, err); + err = KErrNone; + continue; + } + if ( err != KErrNone ) + { + break; + } + MPX_DEBUG3("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Size of Db %S = %d", &dbFilename, entry.iSize); + // sum up size + size += entry.iSize; + } + aSize = size; + MPX_DEBUG3("CMPXHarvesterDatabaseManager::GetTotalDatabasesSize - Total Size of Dbs = %d, err = %d", size, err); + return err; + } + +#endif // __RAMDISK_PERF_ENABLE + // END OF FILE diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -12,7 +12,7 @@ * Contributors: * * Description: Handles all file related activities -* Version : %version: da1mmcf#72.1.14.2.4.1.4.1.2 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: da1mmcf#72.1.14.2.4.1.4.1.2.5.3 % << Don't touch! Updated by Synergy at check-out. * */ @@ -20,10 +20,8 @@ #include #include #include -#ifdef RD_MULTIPLE_DRIVE #include #include -#endif //RD_MULTIPLE_DRIVE #include #include @@ -48,8 +46,7 @@ #include #include #include -#include -#include +#include #include "mpxharvesterfilehandlerimp.h" #include "mpxfolderscanner.h" @@ -124,7 +121,6 @@ // List of watchers for different drives // -#ifdef RD_MULTIPLE_DRIVE TDriveList driveList; TInt driveCount(0); User::LeaveIfError( DriveInfo::GetUserVisibleDrives( @@ -141,17 +137,6 @@ CleanupStack::Pop( dw ); } } -#else - CMPXDiskSpaceWatcher* dw_e = CMPXDiskSpaceWatcher::NewL( iFs, EDriveE, *this ); - CleanupStack::PushL( dw_e ); - iDiskMonitors.AppendL( dw_e ); - CleanupStack::Pop( dw_e ); - CMPXDiskSpaceWatcher* dw_c = CMPXDiskSpaceWatcher::NewL( iFs, EDriveC, *this ); - CleanupStack::PushL( dw_c ); - iDiskMonitors.AppendL( dw_c ); - CleanupStack::Pop( dw_c ); -#endif // RD_MULTIPLE_DRIVE - TInt openerr = iDBManager->OpenAllDatabasesL(); @@ -187,6 +172,7 @@ // Get the scan drives from cenrep. // ParseScanPathL(); + RefreshScanDrivesL(); // Get the list of container types iContainerTypes = new(ELeave) CDesCArrayFlat(2); // granularity @@ -214,16 +200,10 @@ iDbSynchronizer = CMPXDbSynchronizer::NewL(*this,*iDBManager,iMusicCollectionId, iPodcastCollectionId,iFs, iDisablePodcasting); -#ifdef RD_MULTIPLE_DRIVE - // Use default MMC drive as the Removable drive - User::LeaveIfError( DriveInfo::GetDefaultDrive( - DriveInfo::EDefaultRemovableMassStorage, - iRemovedDrive ) ); -#endif - // Create DRM Notifier and register for AddRemove event iDrmNotifier = CDRMNotifier::NewL(); iDrmNotifier->RegisterEventObserverL( *this, KEventAddRemove ); + iCurUSBEvent = KErrNotFound; } // --------------------------------------------------------------------------- @@ -269,11 +249,9 @@ } delete iContainerTypes; - iFilteredDrivesToScan.Reset(); iFilteredDrivesToScan.Close(); - iDrivesToScan.Reset(); iDrivesToScan.Close(); - iPathsToBlock.Reset(); + iConfiguredDrivesToScan.Close(); iPathsToBlock.Close(); // Cleans up the scanning tables and arrays @@ -320,14 +298,16 @@ } iCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMusicPlayerUid ); - // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode + // cenrep key need to be checked whether MTP is connected // to prevent refresh - TInt usbStatus; - RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - - if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP)) + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + if (mtpStatus != EMtpPSStatusUninitialized) { - MPX_DEBUG1("USB is active, Leave with KErrLocked"); + MPX_DEBUG1("MTP is active, Leave with KErrLocked"); // need to call back even if it leaves here iCollectionUtil->Collection().NotifyL( EMcMsgRefreshEnd, KErrLocked ); //User::Leave(KErrLocked); @@ -336,14 +316,12 @@ iCollectionUtil->Collection().NotifyL( EMcMsgRefreshStart, KErrNone ); - // Reopen databases - iDBManager->OpenAllDatabasesL(); - // Begin transaction on databases iDBManager->BeginL(); //Remove out of disk space drives from scanned drives list iFilteredDrivesToScan.Reset(); + iFilteredOutOfDisk = EFalse; CopyArrayL(iDrivesToScan.Array(),iFilteredDrivesToScan); iOutOfDisk = EFalse; @@ -370,6 +348,7 @@ if (currentDriveNumber == driveNumber) { iFilteredDrivesToScan.Remove(index); + iFilteredOutOfDisk = ETrue; count--; } else @@ -377,7 +356,7 @@ index++; } } - TRAP_IGNORE(iDBManager->RemoveDatabaseL(static_cast(currentDriveNumber))); + iDBManager->CloseDatabase(static_cast(currentDriveNumber)); } } @@ -428,7 +407,7 @@ void CMPXHarvesterFileHandlerImp::HandleSystemEventL( TSystemEvent aEvent, TInt aData ) { - MPX_DEBUG2("CMPXHarvesterFileHandlerImp::HandleSystemEventL %i", aEvent); + MPX_DEBUG3("CMPXHarvesterFileHandlerImp::HandleSystemEventL %i, drive %d", aEvent, aData); // How to handle each event // // 1: Format and eject, we stop scanning and close only the mmc db @@ -437,8 +416,8 @@ // 4: USB end we re-open all db and scan for new files // 5: MTP start we stop monitoring for new files (no dismount) // 6: MTP end we re-open all db, files added already, restart monitor + // 7: Disk dismount: stop scanning, close the dismounting DB // -#ifdef RD_MULTIPLE_DRIVE // Get all visible drives TDriveList driveList; TInt driveCount(0); @@ -465,129 +444,115 @@ User::LeaveIfError( iFs.DriveToChar( driveNum, driveChar ) ); MPX_DEBUG5 ("CMPXHarvesterFileHandlerImp::HandleSystemEventL - drive %c: is %S, %S and %S", - driveChar, + (TUint)driveChar, (driveStatus&DriveInfo::EDrivePresent)?&drivePresent:&driveNotPresent, (driveStatus&DriveInfo::EDriveInUse)?&driveInUse:&driveAvailable, (driveStatus&DriveInfo::EDriveFormatted)?&driveFormatted:&driveNotFormatted); } } -#endif //RD_MULTIPLE_DRIVE + switch( aEvent ) { case EFormatStartEvent: { - MPX_DEBUG1("Disk Format start event"); + MPX_DEBUG2("Disk Format start event, drive %d", aData); + iIdle->Cancel(); CancelScan(); iDBManager->CloseDatabase( (TDriveNumber) aData ); + RefreshScanDrivesL(); break; } case EDiskRemovedEvent: { - MPX_DEBUG1("Disk Removed event"); + MPX_DEBUG2("Disk Removed event, drive %d", aData); iIdle->Cancel(); CancelScan(); -#ifdef RD_MULTIPLE_DRIVE - for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ ) - { - if (driveList[driveNum] && (!iDBManager->IsRemoteDrive(static_cast(driveNum)))) - { - TUint driveStatus(0); - User::LeaveIfError( DriveInfo::GetDriveStatus( - iFs, driveNum, driveStatus ) ); - if (!(driveStatus & DriveInfo::EDrivePresent )) - { - // Close database for non-present drive - iDBManager->CloseDatabase( (TDriveNumber) driveNum ); - // Save the drive - iRemovedDrive = driveNum; - break; - } - } - } -#else - iDBManager->CloseDatabase( (TDriveNumber) aData ); -#endif // RD_MULTIPLE_DRIVE + iDBManager->DropDatabase ( TDriveNumber( aData ) ); + RefreshScanDrivesL(); break; } case EFormatEndEvent: { - MPX_DEBUG1("Disk Format end event"); + MPX_DEBUG2("Disk Format end event, drive %d", aData); CancelScan(); iDBManager->OpenDatabaseL( (TDriveNumber) aData ); + RefreshScanDrivesL(); break; } case EDiskInsertedEvent: { - MPX_DEBUG1("Disk Insert event"); + MPX_DEBUG2("Disk Insert event %d", aData); CancelScan(); -#ifdef RD_MULTIPLE_DRIVE - iDBManager->OpenDatabaseL( (TDriveNumber) iRemovedDrive ); -#else iDBManager->OpenDatabaseL( (TDriveNumber) aData ); -#endif // RD_MULTIPLE_DRIVE + RefreshScanDrivesL(); break; } case EUSBMassStorageStartEvent: { - iIdle->Cancel(); - CancelScan(); -#ifdef RD_MULTIPLE_DRIVE - // Close all databases other than the phone memory database - for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ ) + if (iCurUSBEvent == EUSBMassStorageStartEvent) { - if (driveList[driveNum] && (!iDBManager->IsRemoteDrive(static_cast(driveNum)))) - { - if ( driveNum != EDriveC ) - { - iDBManager->CloseDatabase( (TDriveNumber) driveNum ); - } - } - } -#else - iDBManager->CloseDatabase( (TDriveNumber) aData ); -#endif // RD_MULTIPLE_DRIVE + break; + } + iIdle->Cancel(); + iDBManager->CloseMassStorageDatabases(); + RefreshScanDrivesL(); + CancelScan(); + iCurUSBEvent = EUSBMassStorageStartEvent; break; } case EUSBMassStorageEndEvent: { -#ifdef RD_MULTIPLE_DRIVE - // Open all databases other than the phone memory - for( TInt driveNum = EDriveA; driveNum <= EDriveZ; driveNum++ ) - { - if (driveList[driveNum] && (!iDBManager->IsRemoteDrive(static_cast(driveNum)))) - { - if ( driveNum != EDriveC ) - { - iDBManager->OpenDatabaseL( (TDriveNumber) driveNum ); - } - } - } -#else - iDBManager->OpenDatabaseL( (TDriveNumber) aData ); -#endif // RD_MULTIPLE_DRIVE + iDBManager->OpenAllDatabasesL(); + RefreshScanDrivesL(); + iCurUSBEvent = EUSBMassStorageEndEvent; break; } - case EUSBMTPNotActiveEvent: // deliberate fall through + case EUSBMTPNotActiveEvent: { + if (iCurUSBEvent == EUSBMTPNotActiveEvent) + { + break; + } if ( iRefreshing ) { // Notify clients that refresh is cancelled. iCollectionUtil->Collection().NotifyL( EMcMsgRefreshEnd, KErrLocked ); } + CancelScan(); + iCurUSBEvent = EUSBMTPNotActiveEvent; + break; } case EUSBMTPStartEvent: { CancelScan(); - // nothing to do, db is needed for MTP + iCurUSBEvent = EUSBMTPStartEvent; +#ifdef __RAMDISK_PERF_ENABLE + iDBManager->CopyDBsToRamL(ETrue); +#endif //__RAMDISK_PERF_ENABLE break; } case EUSBMTPEndEvent: { - // nothing to do, db is updated by MTP + iCurUSBEvent = EUSBMTPEndEvent; +#ifdef __RAMDISK_PERF_ENABLE + // copy dbs from ram drive + iDBManager->CopyDBsFromRamL(); +#endif //__RAMDISK_PERF_ENABLE break; } - case EPowerKeyEjectEvent: + case EDiskDismountEvent: { + MPX_DEBUG2("Disk dismount notification, drive %d", aData); + iIdle->Cancel(); + if ( aData < 0 ) + { + iDBManager->CloseMassStorageDatabases(); + } + else + { + iDBManager->CloseDatabase( (TDriveNumber) aData ); + } + RefreshScanDrivesL(); CancelScan(); break; } @@ -705,6 +670,10 @@ } } // Add to database +#ifdef __RAMDISK_PERF_ENABLE + // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space. + iDBManager->EnsureRamSpaceL(); +#endif // __RAMDISK_PERF_ENABLE CMPXHarvesterDB& db = iDBManager->GetDatabaseL( ::ExtractDrive( path ) ); CMPXHarvesterDatabaseTable* table = db.OpenFileL( path ); CleanupStack::PushL( table ); @@ -721,6 +690,10 @@ // Return the collection that it should belong to. r = col.iUid; +#ifdef __RAMDISK_PERF_ENABLE + // This feature will be turned on in the second phase. + //TRAP_IGNORE( iDBManager->UpdateDBsFromRamL(0) ); +#endif // __RAMDISK_PERF_ENABLE } else { @@ -742,6 +715,10 @@ TInt r(0); // Open the db +#ifdef __RAMDISK_PERF_ENABLE + // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space. + iDBManager->EnsureRamSpaceL(); +#endif // __RAMDISK_PERF_ENABLE CMPXHarvesterDB& db = iDBManager->GetDatabaseL( ::ExtractDrive(aPath) ); MPX_PERF_START( MPX_PERF_HARV_DB_DELETE_SUB1 ); CMPXHarvesterDatabaseTable* table = db.OpenFileL( aPath ); @@ -869,9 +846,10 @@ // void CMPXHarvesterFileHandlerImp::RecreateDatabases() { - MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabasesL <--"); + MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabases <--"); iDBManager->RecreateDatabases(); - MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabasesL -->"); + TRAP_IGNORE(RefreshScanDrivesL()); + MPX_DEBUG1("CMPXHarvesterFileHandlerImp::RecreateDatabases -->"); } // --------------------------------------------------------------------------- @@ -1024,6 +1002,11 @@ } case ECleanupBrokenLink: { +#ifdef __RAMDISK_PERF_ENABLE + // copy dbs to ram drive + iDBManager->CopyDBsToRamL(); +#endif //__RAMDISK_PERF_ENABLE + MPX_DEBUG1("Start Metadata Scan"); iMetadataScanner->Start(); break; @@ -1193,18 +1176,24 @@ // void CMPXHarvesterFileHandlerImp::HandleDirectoryChangedL( const TDesC& aPath ) { + MPX_DEBUG2("--->CMPXHarvesterFileHandlerImp::HandleDirectoryChangedL path=%S", &aPath); // Delay the scanning for a few seconds so the files are finished // copying. If already active, means we just append onto the list - // - iAutoScanPaths.AppendL( aPath ); - if( !iIdle->IsActive() ) + // But don't scan if there is no DB == drive does not exist any more + TParsePtrC parse( aPath ); + TDriveUnit drive ( parse.Drive() ); + if ( iDBManager->DatabaseIsOpen ((TDriveNumber) (TInt) drive) ) { - TCallBack cb( Callback, this ); - iIdle->Start( TTimeIntervalMicroSeconds32( KAutoScanDelay ), - TTimeIntervalMicroSeconds32( KAutoScanAfter ), - cb ); + MPX_DEBUG1("CMPXHarvesterFileHandlerImp::HandleDirectoryChangedL adding in iAutoScanPaths"); + iAutoScanPaths.AppendL( aPath ); + if( !iIdle->IsActive() ) + { + TCallBack cb( Callback, this ); + iIdle->Start( TTimeIntervalMicroSeconds32( KAutoScanDelay ), + TTimeIntervalMicroSeconds32( KAutoScanAfter ), + cb ); + } } - } // --------------------------------------------------------------------------- @@ -1214,6 +1203,7 @@ void CMPXHarvesterFileHandlerImp::HandleOpenDriveL( TDriveNumber aDrive, const TDesC& aFolder ) { + MPX_DEBUG3("--->CMPXHarvesterFileHandlerImp::HandleOpenDriveL drive=%d, folder=%S", aDrive, &aFolder); #ifdef __PRINTDB__ if( iCurTable ) iCurTable->PrintItemsInTableL(); @@ -1224,13 +1214,11 @@ // Delete previous table and open the next one Reset(); - MPX_TRAPD( err, iCurDB = &iDBManager->GetDatabaseL( aDrive ) ); - if ( err != KErrNone ) - { - iDBManager->OpenAllDatabasesL(); - iCurDB = &iDBManager->GetDatabaseL( aDrive ); - } - +#ifdef __RAMDISK_PERF_ENABLE + // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space. + iDBManager->EnsureRamSpaceL(); +#endif // __RAMDISK_PERF_ENABLE + iCurDB = &iDBManager->GetDatabaseL( aDrive ); if( iDrivesToScan.Find( aFolder ) != KErrNotFound ) { iCurTable = iCurDB->OpenAllFilesTableL(); @@ -1240,6 +1228,7 @@ iCurTable = iCurDB->OpenDirectoryL( aFolder ); } iCurList = iCurTable->CreateTableRepresentationL(); + MPX_DEBUG1("<--CMPXHarvesterFileHandlerImp::HandleOpenDriveL"); } // --------------------------------------------------------------------------- @@ -1374,6 +1363,10 @@ iAddedCount++; } +#ifdef __RAMDISK_PERF_ENABLE + // This feature will be turned on in the second phase. + //TRAP_IGNORE( iDBManager->UpdateDBsFromRamL(iAddedCount) ); +#endif // __RAMDISK_PERF_ENABLE } else if ( addErr == KErrDiskFull ) { @@ -1556,6 +1549,10 @@ User::Leave( KErrDiskFull ); } } +#ifdef __RAMDISK_PERF_ENABLE + // This feature will be turned on in the second phase. + //TRAP_IGNORE( iDBManager->UpdateDBsFromRamL(iAddedCount) ); +#endif // __RAMDISK_PERF_ENABLE MPX_DEBUG1("CMPXHarvesterFileHandlerImp::AddPlaylistToCollectionL --->"); } @@ -1756,7 +1753,7 @@ MPX_DEBUG2("ParseScanPathL scanPaths: %S", &scanPath); MPX_DEBUG2("ParseScanPathL blockPaths: %S", &blockPath); - ::ExtractTokensL( scanPath, iDrivesToScan ); + ::ExtractTokensL( scanPath, iConfiguredDrivesToScan ); ::ExtractTokensL( blockPath, iPathsToBlock ); } @@ -1824,6 +1821,25 @@ } // --------------------------------------------------------------------------- +// Refreshes scan drives +// --------------------------------------------------------------------------- +// +void CMPXHarvesterFileHandlerImp::RefreshScanDrivesL() + { + iDrivesToScan.Reset(); + for (TInt i = 0; i < iConfiguredDrivesToScan.Count(); ++i) + { + const TDesC& path = iConfiguredDrivesToScan[i]; + TParsePtrC parse(path); + TDriveUnit drive(parse.Drive()); + if ( iDBManager->DatabaseIsOpen( (TDriveNumber)(TInt) drive) ) + { + iDrivesToScan.AppendL(path); + } + } + } + +// --------------------------------------------------------------------------- // Resets the scanning table and array // --------------------------------------------------------------------------- // @@ -1922,6 +1938,10 @@ { Reset(); TDriveNumber num = ::ExtractDrive( aPath ); +#ifdef __RAMDISK_PERF_ENABLE + // EnsureRamSpaceL will copy dbs from ram if ram space is low or dbs exceeded max space. + iDBManager->EnsureRamSpaceL(); +#endif // __RAMDISK_PERF_ENABLE iCurDB = &iDBManager->GetDatabaseL( num ); iCurTable = iCurDB->OpenFileL( aPath ); } @@ -1936,10 +1956,7 @@ // If no error or cancel, return the final number of items added MPX_DEBUG2("Scan error %i", aErr ); - // Reopen databases (in case we removed them for out of disk drives before scan) - iDBManager->OpenAllDatabasesL(); - - if( aErr == KErrNone ) + if( aErr == KErrNone || aErr == KErrCancel ) { // Commit the changes on databases in transaction iDBManager->CommitL(); @@ -1950,12 +1967,32 @@ iDBManager->Rollback(); } +#ifdef __RAMDISK_PERF_ENABLE + // copy dbs from ram drive + iDBManager->CopyDBsFromRamL(); +#endif //__RAMDISK_PERF_ENABLE + + // Reopen databases (in case we removed them for out of disk drives before scan) + for (TInt i = 0, j = 0; i < iDrivesToScan.Count(); ++i) + { + if ( j < iFilteredDrivesToScan.Count() && ! iDrivesToScan[i].Compare( iFilteredDrivesToScan[j] ) ) + { + ++j; + } + else + { + TParsePtrC fileNameParser ( iDrivesToScan[i] ); + TDriveUnit drive ( fileNameParser.Drive() ); + TRAP_IGNORE( iDBManager->OpenDatabaseL( TDriveNumber ( (TInt) drive ) ) ); + } + } + if( aErr == KErrNone || aErr == KErrCancel ) { aErr = iAddedCount; } - if (iFilteredDrivesToScan.Count() != iDrivesToScan.Count()) + if ( iFilteredOutOfDisk ) { aErr = KErrDiskFull; } @@ -2107,7 +2144,24 @@ iRefreshCount++; CancelScan(); Reset(); - iFolderScanner->ScanL( iAutoScanPaths ); + // ensure you don't try to scan paths that are on closed drives + for (TInt i = 0; i < iAutoScanPaths.Count(); ) + { + TParsePtr parse(iAutoScanPaths[i]); + TDriveUnit drive(parse.Drive()); + if ( iDBManager->DatabaseIsOpen( (TDriveNumber) (TInt) drive ) ) + { + ++i; + } + else + { + iAutoScanPaths.Remove(i); + } + } + if ( iAutoScanPaths.Count() ) + { + iFolderScanner->ScanL( iAutoScanPaths ); + } // Cleanup iAutoScanPaths.Reset(); @@ -2229,7 +2283,6 @@ CleanupStack::PushL( drmFileList ); -#ifdef RD_MULTIPLE_DRIVE TDriveList driveList; TInt driveCount(0); @@ -2260,81 +2313,9 @@ } } } -#else - //ensure drive E is ready - //otherwise GetDataBaseL will leave if MMC is removed - if ( IsDriveReady( EDriveE ) ) - { - // Get DRM files from database in E drive - db = &iDBManager->GetDatabaseL( EDriveE ); - table = db->OpenDrmFileL(); - CleanupStack::PushL( table ); - tempList = table->CreateTableRepresentationL(); - CleanupStack::PushL( tempList ); - // copy content to drm file list - for ( TInt i=0; iCount(); i++ ) - { - drmFileList->AppendL( (*tempList)[i] ); - } - // reset - tempList->Reset(); - CleanupStack::PopAndDestroy( tempList ); - CleanupStack::PopAndDestroy( table ); - } - - // Get DRM files from database in C drive - db = &iDBManager->GetDatabaseL( EDriveC ); - table = db->OpenDrmFileL(); - CleanupStack::PushL( table ); - tempList = table->CreateTableRepresentationL(); - CleanupStack::PushL( tempList ); - // copy content to iCurList - for ( TInt i=0; iCount(); i++ ) - { - drmFileList->AppendL( (*tempList)[i] ); - } - tempList->Reset(); - CleanupStack::PopAndDestroy( tempList ); - CleanupStack::PopAndDestroy( table ); -#endif CleanupStack::Pop( drmFileList ); MPX_DEBUG1("CMPXHarvesterFileHandlerImp::GetDrmFiles --->"); return drmFileList; } -// --------------------------------------------------------------------------- -// Verifies if aDrive is ready. -// --------------------------------------------------------------------------- -// -TBool CMPXHarvesterFileHandlerImp::IsDriveReady( TDriveNumber aDrive ) - { - MPX_DEBUG1("CMPXHarvesterFileHandlerImp::IsDriveReady <---"); - - TDriveInfo driveInfo; - TInt error = iFs.Drive( driveInfo, aDrive ); - TBool ready = ETrue; - if ( error != KErrNone ) - { - ready = EFalse; - } - else if ( driveInfo.iDriveAtt == static_cast( KDriveAbsent ) ) - { - //aDrive is absent - ready = EFalse; - } - else - { - TVolumeInfo volumeInfo; - TInt errCode = iFs.Volume( volumeInfo, aDrive ); - if( errCode != KErrNone ) - { - //aDrive is ready for use - ready = EFalse; - } - } - - MPX_DEBUG1("CMPXHarvesterFileHandlerImp::IsDriveReady --->"); - return ready; - } - // END OF FILE diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/filehandler/src/mpxmetadatascanner.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -12,7 +12,7 @@ * Contributors: * * Description: Active object to extract metadata -* Version : %version: da1mmcf#16.2.3.1.5 % +* Version : %version: da1mmcf#16.2.3.1.5.2.1 % * */ @@ -44,8 +44,9 @@ CMPXMetadataScanner::CMPXMetadataScanner( MMPXMetadataScanObserver& aObs, MMPXFileScanStateObserver& aStateObs ) : CActive( EPriorityNull ), + iExtractType( EMaxFile ), iObserver( aObs ), - iStateObserver( aStateObs ) + iStateObserver( aStateObs ) { CActiveScheduler::Add( this ); } @@ -60,8 +61,7 @@ RPointerArray& aTypesAry ) { iExtractor = CMPXMetadataExtractor::NewL( aFs, aAppArc, aTypesAry ); - iNewFileProps = CMPXMediaArray::NewL(); - iModifiedFileProps = CMPXMediaArray::NewL(); + iTargetProps = CMPXMediaArray::NewL(); } @@ -114,8 +114,7 @@ iNewFiles.Close(); iModifiedFiles.Close(); - delete iNewFileProps; - delete iModifiedFileProps; + delete iTargetProps; delete iExtractor; } @@ -128,14 +127,7 @@ { iNewFiles.ResetAndDestroy(); iModifiedFiles.ResetAndDestroy(); - if(iNewFileProps) - { - iNewFileProps->Reset(); - } - if(iModifiedFileProps) - { - iModifiedFileProps->Reset(); - } + iTargetProps->Reset(); } // --------------------------------------------------------------------------- @@ -144,20 +136,20 @@ // void CMPXMetadataScanner::Start() { - MPX_DEBUG1("MPXMetadataScanner::StartL <---"); + MPX_FUNC("MPXMetadataScanner::StartL()"); if( !IsActive() ) { // Setup iAryPos = 0; iExtractType = ENewFiles; iExtracting = ETrue; - + iTargetProps->Reset(); + // Set Active iStatus = KRequestPending; SetActive(); TRequestStatus* status = &iStatus; User::RequestComplete( status, KErrNone ); - MPX_DEBUG1("MPXMetadataScanner::StartL --->"); } } // --------------------------------------------------------------------------- @@ -166,9 +158,8 @@ // void CMPXMetadataScanner::Stop() { - MPX_DEBUG1("MPXMetadataScanner::Stop <---"); + MPX_FUNC("MPXMetadataScanner::Stop()"); DoCancel(); - MPX_DEBUG1("MPXMetadataScanner::Stop --->"); } // --------------------------------------------------------------------------- @@ -177,6 +168,7 @@ // void CMPXMetadataScanner::AddNewFileToScanL( const TDesC& aFile ) { + MPX_FUNC("MPXMetadataScanner::AddNewFileToScanL()"); HBufC* file = aFile.AllocLC(); iNewFiles.AppendL( file ); CleanupStack::Pop( file ); @@ -188,6 +180,7 @@ // void CMPXMetadataScanner::AddModifiedFileToScanL( const TDesC& aFile ) { + MPX_FUNC("MPXMetadataScanner::AddModifiedFileToScanL()"); HBufC* file = aFile.AllocLC(); iModifiedFiles.AppendL( file ); CleanupStack::Pop( file ); @@ -199,6 +192,7 @@ // CMPXMedia* CMPXMetadataScanner::ExtractFileL( const TDesC& aFile ) { + MPX_FUNC("MPXMetadataScanner::ExtractFileL()"); CMPXMedia* media; iExtractor->CreateMediaL( aFile, media ); return media; @@ -210,10 +204,12 @@ // void CMPXMetadataScanner::DoCancel() { + MPX_FUNC("MPXMetadataScanner::DoCancel()"); if( iExtracting ) { - // Callback to observer + iExtractor->CancelRequest(); Reset(); + // Callback to observer TRAP_IGNORE( iStateObserver.HandleScanStateCompleteL( MMPXFileScanStateObserver::EScanMetadata, KErrCancel ) ); iExtracting = EFalse; @@ -226,29 +222,13 @@ // void CMPXMetadataScanner::RunL() { + MPX_FUNC("CMPXMetadataScanner::RunL()"); if ( iExtracting ) { - TBool done(EFalse); - TRAPD( err, done = DoExtractL() ); - if ( !iExtracting ) - { - // If DoCancel() was called during DoExtractL(), do nothing. - MPX_DEBUG1("CMPXMetadataScanner::RunL - Cancel during RunL"); - } - else if( KErrNone != err || done ) + TRAPD( err, DoExtractL() ); + if ( err ) { - // Callback to observer - TRAP_IGNORE( iStateObserver.HandleScanStateCompleteL( MMPXFileScanStateObserver::EScanMetadata, - err ) ); - iExtracting = EFalse; - } - else - { - MPX_DEBUG1("CMPXMetadataScanner::RunL -- Run again"); - iStatus = KRequestPending; - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); + MetadataScannerComplete( err ); } } } @@ -257,98 +237,185 @@ // Extract metadata // --------------------------------------------------------------------------- // -TBool CMPXMetadataScanner::DoExtractL() +void CMPXMetadataScanner::DoExtractL() + { + MPX_FUNC("CMPXMetadataScanner::DoExtractL()"); + + RPointerArray* source = GetSource(); + if ( source->Count() ) + { + // Call asynchronous CreateMedia to get metadata. + iExtractor->CreateMediaAsyncL( *(*source)[iAryPos], this ); + } + else + { + // Source array is empty, go to next array. + MPX_DEBUG2("CMPXMetadataScanner::DoExtractL Source array is empty ExtractType = %d.", iExtractType); + iAryPos = 0; + iExtractType++; + RunAgain(); + } + } + +// --------------------------------------------------------------------------- +// Callback for CreateMediaAsyncL +// --------------------------------------------------------------------------- +// +void CMPXMetadataScanner::HandleCreateMediaComplete( CMPXMedia* aMedia, TInt aError ) { - MPX_DEBUG1("CMPXMetadataScanner::DoExtractL <---"); - TBool done(EFalse); + MPX_FUNC("CMPXMetadataScanner::HandleCreateMediaComplete()"); + MPX_DEBUG2("CMPXMetadataScanner::HandleCreateMediaComplete error = %d", aError); + TInt err = KErrNone; + + // Scanning cancelled + if ( !iExtracting ) + { + delete aMedia; + return; + } + + // Add media to target array. + if ( ( aError == KErrNone ) && + ( aMedia != NULL ) ) + { + TRAP( err, iTargetProps->AppendL( aMedia ) ); + if ( err ) + { + delete aMedia; + } + } + + iAryPos++; + if( iAryPos >= GetSource()->Count() ) + { + // Finished with this array, go to the next array. + iAryPos = 0; + TRAP( err, AddToCollectionL() ); + if ( err ) + { + MetadataScannerComplete( err ); + } + iExtractType++; + } + else + { + // Batch update collection DBs. + if ( iTargetProps->Count() >= KLoopCount ) + { + TRAP( err, AddToCollectionL() ); + if ( err ) + { + MetadataScannerComplete( err ); + } + } + } + + RunAgain(); + } + +// --------------------------------------------------------------------------- +// Get source array +// --------------------------------------------------------------------------- +// +RPointerArray* CMPXMetadataScanner::GetSource() + { + MPX_FUNC("CMPXMetadataScanner::GetSource()"); TExtractType curType = (TExtractType) iExtractType; - - // Pointer re-direction to generalize extraction - RPointerArray* source; - CMPXMediaArray* mptarget; + if( curType == ENewFiles ) { - source = &iNewFiles; - mptarget = iNewFileProps; + return &iNewFiles; } else if( curType == EModFiles ) { - source = &iModifiedFiles; - mptarget = iModifiedFileProps; + return &iModifiedFiles; } - else // All done! - { - return ETrue; - } - - // Process at most KLoopCount number of files - // - mptarget->Reset(); - if( source->Count() != 0 ) + else + return NULL; + } + +// --------------------------------------------------------------------------- +// Is metadata scanner done +// --------------------------------------------------------------------------- +// +TBool CMPXMetadataScanner::IsDone() + { + MPX_FUNC("CMPXMetadataScanner::IsDone()"); + TExtractType curType = (TExtractType) iExtractType; + + TBool done = EFalse; + if ( curType >= EMaxFile ) { - for( TInt i=0; iCreateMediaL( *(*source)[iAryPos], media ) ); - if ( !iExtracting ) - { - // In case DoCancel() was called while processing iExtractor->CreateMediaL - MPX_DEBUG1("CMPXMetadataScanner::DoExtractL - Cancel during CreateMediaL"); - delete media; - return ETrue; - } - - if( err == KErrNone ) - { - CleanupStack::PushL( media ); - mptarget->AppendL( media ); - CleanupStack::Pop( media ); - } - - iAryPos++; - if( iAryPos == source->Count() ) - { - iAryPos = 0; - iExtractType++; - break; - } - } + done = ETrue; + } + return done; + } + +// --------------------------------------------------------------------------- +// Run Active Object again +// --------------------------------------------------------------------------- +// +void CMPXMetadataScanner::RunAgain() + { + MPX_FUNC("CMPXMetadataScanner::RunAgain()"); + if ( IsDone() ) + { + MetadataScannerComplete( KErrNone ); } - else // No item in the array + else { - iAryPos = 0; - iExtractType++; + MPX_DEBUG1("CMPXMetadataScanner::RunAgain -- Run again"); + iStatus = KRequestPending; + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); } + } + +// --------------------------------------------------------------------------- +// Add metadata to collection +// --------------------------------------------------------------------------- +// +void CMPXMetadataScanner::AddToCollectionL() + { + MPX_FUNC("CMPXMetadataScanner::AddToCollectionL()"); + TExtractType curType = (TExtractType) iExtractType; - // After extraction, get observer to add files to the collection - // switch( curType ) { case ENewFiles: { - if( iNewFileProps->Count() ) + if( iTargetProps->Count() ) { - iObserver.AddFilesToCollectionL( *iNewFileProps ); + iObserver.AddFilesToCollectionL( *iTargetProps ); } break; } case EModFiles: { - if( iModifiedFileProps->Count() ) + if( iTargetProps->Count() ) { - iObserver.UpdatesFilesInCollectionL( *iModifiedFileProps ); + iObserver.UpdatesFilesInCollectionL( *iTargetProps ); } break; } - case EMaxFile: // All done. - done = ETrue; - break; default: ASSERT(0); } - - MPX_DEBUG1("CMPXMetadataScanner::DoExtractL --->"); - return done; + iTargetProps->Reset(); } + +// --------------------------------------------------------------------------- +// Complete metadata scanner +// --------------------------------------------------------------------------- +// +void CMPXMetadataScanner::MetadataScannerComplete( TInt aError ) + { + MPX_FUNC("CMPXMetadataScanner::MetadataScannerCompleteL()"); + MPX_DEBUG2("CMPXMetadataScanner::MetadataScannerCompleteL error = %d", aError); + + // Callback to observer + TRAP_IGNORE( iStateObserver.HandleScanStateCompleteL( MMPXFileScanStateObserver::EScanMetadata, aError ) ); + iExtracting = EFalse; + Reset(); + } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/metadataextractor/bwinscw/mpxmetadataextractorU.DEF --- a/mmappcomponents/harvester/metadataextractor/bwinscw/mpxmetadataextractorU.DEF Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/metadataextractor/bwinscw/mpxmetadataextractorU.DEF Wed Jun 23 17:51:16 2010 +0100 @@ -2,4 +2,6 @@ ?CreateMediaL@CMPXMetadataExtractor@@QAEXABVTDesC16@@AAPAVCMPXMedia@@H@Z @ 1 NONAME ; void CMPXMetadataExtractor::CreateMediaL(class TDesC16 const &, class CMPXMedia * &, int) ?NewL@CMPXMetadataExtractor@@SAPAV1@AAVRFs@@AAVRApaLsSession@@AAV?$RPointerArray@VCMPXCollectionType@@@@@Z @ 2 NONAME ; class CMPXMetadataExtractor * CMPXMetadataExtractor::NewL(class RFs &, class RApaLsSession &, class RPointerArray &) ?ExtractAlbumArtL@CMPXMetadataExtractor@@QAEHPAVCMPXMedia@@@Z @ 3 NONAME ; int CMPXMetadataExtractor::ExtractAlbumArtL(class CMPXMedia *) + ?CancelRequest@CMPXMetadataExtractor@@QAEXXZ @ 4 NONAME ; void CMPXMetadataExtractor::CancelRequest(void) + ?CreateMediaAsyncL@CMPXMetadataExtractor@@QAEXABVTDesC16@@PAVMMPXMetadataExtractorObserver@@H@Z @ 5 NONAME ; void CMPXMetadataExtractor::CreateMediaAsyncL(class TDesC16 const &, class MMPXMetadataExtractorObserver *, int) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/metadataextractor/eabi/mpxmetadataextractorU.DEF --- a/mmappcomponents/harvester/metadataextractor/eabi/mpxmetadataextractorU.DEF Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/metadataextractor/eabi/mpxmetadataextractorU.DEF Wed Jun 23 17:51:16 2010 +0100 @@ -6,4 +6,6 @@ _ZTV19CMPXFileInfoUtility @ 5 NONAME ; ## _ZTV21CMPXMetadataExtractor @ 6 NONAME ; ## _ZN21CMPXMetadataExtractor16ExtractAlbumArtLEP9CMPXMedia @ 7 NONAME + _ZN21CMPXMetadataExtractor13CancelRequestEv @ 8 NONAME + _ZN21CMPXMetadataExtractor17CreateMediaAsyncLERK7TDesC16P29MMPXMetadataExtractorObserveri @ 9 NONAME diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/metadataextractor/group/mpxmetadataextractor.mmp --- a/mmappcomponents/harvester/metadataextractor/group/mpxmetadataextractor.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/metadataextractor/group/mpxmetadataextractor.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -30,6 +30,8 @@ MACRO RD_MPX_TNM_INTEGRATION #define RD_MPX_TNM_INTEGRATION +MACRO ABSTRACTAUDIOALBUM_INCLUDED +#define ABSTRACTAUDIOALBUM_INCLUDED SOURCEPATH ../src SOURCE mpxmetadataextractor.cpp SOURCE mpxfileinfoutility.cpp diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp --- a/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/metadataextractor/src/mpxfileinfoutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -12,7 +12,7 @@ * Contributors: * * Description: This class is responsible for reading file info -* Version : %version: da1mmcf#5.1.3.1.6 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: da1mmcf#5.1.3.1.6.2.1 % << Don't touch! Updated by Synergy at check-out. * * Copyright © 2005 Nokia. All rights reserved. */ @@ -65,6 +65,8 @@ // Destructor CMPXFileInfoUtility::~CMPXFileInfoUtility() { + MPX_DEBUG1("CMPXFileInfoUtility::~CMPXFileInfoUtility()<---"); + iAudioControllers.ResetAndDestroy(); //Reset(); // Close all MMF controllers in the cache @@ -88,6 +90,9 @@ } REComSession::FinalClose(); + + MPX_DEBUG1("CMPXFileInfoUtility::~CMPXFileInfoUtility()--->"); + } // ---------------------------------------------------------------------------- @@ -106,7 +111,7 @@ void CMPXFileInfoUtility::OpenFileL(RFile& aFile, const TDesC& aMimeType /*= KNullDesC*/) { - MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()"); + MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()<---"); Reset(); HBufC* fileNameBuf = HBufC::NewLC(KMaxFileName); @@ -125,10 +130,8 @@ TBool enableUI = EFalse; //Code taken from TMMFileHandleSource - - - //{//build custom mmf message packet - //based on CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL() + //build custom mmf message packet + //based on CMMFileSourceSink::DoCreateFileHandleSourceConfigDataL() CBufFlat* buf = CBufFlat::NewL(KMCExpandSize); CleanupStack::PushL(buf); RBufWriteStream stream; @@ -152,22 +155,21 @@ stream.CommitL(); CleanupStack::PopAndDestroy(&stream); - //iSourceSinkData = buf->Ptr(0).AllocL(); - //CleanupStack::PopAndDestroy(buf); - //} - - // User::LeaveIfError(iController->Reset()); + // Add new data source + MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()- AddDataSource()"); - - // Add new data source User::LeaveIfError(iController->AddDataSource(KUidMmfFileSource, buf->Ptr(0), dataSource)); + MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()- AddDataSink()"); User::LeaveIfError(iController->AddDataSink(KUidMmfAudioOutput, KNullDesC8)); CleanupStack::PopAndDestroy(buf); + + MPX_DEBUG1("CMPXFileInfoUtility::OpenFileL()--->"); + } // ---------------------------------------------------------------------------- @@ -176,21 +178,25 @@ // void CMPXFileInfoUtility::Reset() { - // Reset the controller + MPX_DEBUG1("CMPXFileInfoUtility::Reset()<---"); + if(iController) { - if(iCurrentControllerUid == 0x101FAFB1 || iCurrentControllerUid == 0x10283351 - || iCurrentControllerUid == 0x10207B65 ) + // This is just for RA, WMA does not use controller + if( iCurrentControllerUid == 0x10207B65 ) // Helix Controller UID { + MPX_DEBUG1("CMPXFileInfoUtility::Reset(), Close Controller - only for RA "); iController->Close(); delete iController; iController = NULL; } else { - iController->Reset(); + MPX_DEBUG1("CMPXFileInfoUtility::Reset(), Reset Controller "); + iController->Reset(); } - } + } + MPX_DEBUG1("CMPXFileInfoUtility::Reset()--->"); } @@ -200,13 +206,15 @@ // TTimeIntervalMicroSeconds CMPXFileInfoUtility::Duration() { - MPX_DEBUG1("CMPXFileInfoUtility::Duration()"); + MPX_DEBUG1("CMPXFileInfoUtility::Duration()<---"); TTimeIntervalMicroSeconds duration; TInt err = iController->GetDuration(duration); if(err != KErrNone) { duration = TInt64(0); } + MPX_DEBUG2("CMPXFileInfoUtility::Duration(), duration = %ld --->", duration ); + return duration; } @@ -216,11 +224,16 @@ // TUint CMPXFileInfoUtility::BitRate() { + MPX_DEBUG1("CMPXFileInfoUtility::BitRate()<---"); + RMMFAudioControllerCustomCommands customCommands(*iController); TUint bitRate(0); //Ignore return value, bitRate remain 0 if error customCommands.GetSourceBitRate(bitRate); + + MPX_DEBUG2("CMPXFileInfoUtility::BitRate(), bit rate = %d --->", bitRate); + return bitRate; } @@ -230,11 +243,16 @@ // TUint CMPXFileInfoUtility::SampleRate() { + MPX_DEBUG1("CMPXFileInfoUtility::SampleRate()<---"); + RMMFAudioControllerCustomCommands customCommands(*iController); TUint sampleRate(0) ; //Ignore return value, sampleRate remain 0 if error customCommands.GetSourceSampleRate(sampleRate); + + MPX_DEBUG2("CMPXFileInfoUtility::SampleRate(), sample rate = %d --->", sampleRate); + return sampleRate; } @@ -245,7 +263,8 @@ const TDesC& aMimeType, TUid& aUid) { - MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()"); + MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()<---"); + TBool found(EFalse); TInt i(0); TInt j(0); @@ -292,6 +311,9 @@ } } } + + MPX_DEBUG1("CMPXFileInfoUtility::FindControllerL()--->"); + } // ---------------------------------------------------------------------------- @@ -302,11 +324,10 @@ // ---------------------------------------------------------------------------- void CMPXFileInfoUtility::OpenControllerL(const TUid& aUid) { - MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()"); - - // 3gp and helix (wma) do not allow controller caching - if(aUid.iUid == 0x101FAFB1 || aUid.iUid == 0x10283351 - || aUid.iUid == 0x10207B65 ) + MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()<---"); + + // RA does not allow controller caching + if( aUid.iUid == 0x10207B65 ) // RA Controller Uid { iCurrentControllerUid = aUid.iUid; TMMFPrioritySettings prioritySettings; @@ -319,9 +340,11 @@ User::LeaveIfError(iController->Open(aUid, prioritySettings)); iCurrentControllerUid = aUid.iUid; + MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL(), RA Controller open --->"); + return; } - + // check if we already have controller open for this UID in the cache RMMFController* controller = const_cast(iMMFControllers.Find(aUid.iUid)); @@ -335,10 +358,11 @@ TUint32* key = new (ELeave) TUint32(aUid.iUid); CleanupStack::PushL(key); - // Now instantiate the first controller in the array - TMMFPrioritySettings prioritySettings; - prioritySettings.iPriority = EMdaPriorityNormal; - prioritySettings.iPref = EMdaPriorityPreferenceTimeAndQuality; + + // Now instantiate the first controller in the array + TMMFPrioritySettings prioritySettings; + prioritySettings.iPriority = EMdaPriorityNormal; + prioritySettings.iPref = EMdaPriorityPreferenceTimeAndQuality; // Try to open controller User::LeaveIfError(controller->Open(aUid, @@ -353,7 +377,9 @@ iController = controller; iCurrentControllerUid = aUid.iUid; - + + MPX_DEBUG1("CMPXFileInfoUtility::OpenControllerL()--->"); + } // ----------------------------------------------------------------------------- @@ -362,6 +388,8 @@ // void CMPXFileInfoUtility::CreateAudioFormatsArrayL() { + MPX_DEBUG1("CMPXFileInfoUtility::CreateAudioFormatsArrayL()<---"); + CMMFControllerPluginSelectionParameters* cSelect = CMMFControllerPluginSelectionParameters::NewLC(); CMMFFormatSelectionParameters* fSelect = @@ -381,6 +409,9 @@ cSelect->ListImplementationsL(iAudioControllers); // Clean up CleanupStack::PopAndDestroy(3); //fSelect, cSelect, mediaIds + + MPX_DEBUG1("CMPXFileInfoUtility::CreateAudioFormatsArrayL()--->"); + } // End of File diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp --- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -12,11 +12,10 @@ * Contributors: * * Description: Extracts metadata from a file -* Version : %version: da1mmcf#38.1.4.2.6.1.5 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: da1mmcf#38.1.4.2.6.1.5.3.3 % << Don't touch! Updated by Synergy at check-out. * */ - #include #include #include @@ -42,15 +41,23 @@ #include #include #include +#include #include "mpxmetadataextractor.h" #include "mpxfileinfoutility.h" + +_LIT( KWmaMimeType, "audio/x-ms-wma" ); +_LIT( KWmaCafMimeType, "x-caf-audio/x-ms-wma" ); + #ifdef RD_MPX_TNM_INTEGRATION _LIT( KImageFileType, "image/jpeg" ); const TInt KMPXTimeoutTimer = 3000000; // 3 seconds -const TInt KMPXMaxThumbnailRequest = 5; +const TInt KMPXMaxThumbnailRequest = 2; #endif //RD_MPX_TNM_INTEGRATION +#ifdef ABSTRACTAUDIOALBUM_INCLUDED +_LIT( KNonEmbeddedArtExt, ".alb" ); +#endif //Helper functions static void FindAndReplaceForbiddenChars(TDes& aString, TInt aLen) { @@ -76,8 +83,11 @@ : iFs( aFs ), iAppArc( aAppArc ), iSupportedTypes( aTypes ), - iOutstandingThumbnailRequest(0), - iTNMBlockCount(0) + iCancelled( EFalse ), + iObs( NULL ), + iMedia( NULL ), + iMetadataOnly( EFalse ), + iFileOpenError( KErrNone ) { } @@ -92,6 +102,7 @@ iMetadataUtility = CMetaDataUtility::NewL(); iDrmMediaUtility = CMPXDrmMediaUtility::NewL(); iFileInfoUtil = CMPXFileInfoUtility::NewL(); + iTaskTimer = CPeriodic::NewL( CActive::EPriorityIdle ); #ifdef RD_MPX_TNM_INTEGRATION // Create Thumbnail Manager instance. This object is the observer. @@ -101,6 +112,8 @@ // create wait loop iTNSyncWait = new (ELeave) CActiveSchedulerWait; iTimer = CPeriodic::NewL( CActive::EPriorityIdle ); + iArrayTNRequestId.Reset(); + iArrayTasks.Reset(); #endif //RD_MPX_TNM_INTEGRATION } @@ -132,6 +145,12 @@ delete iMetadataUtility; delete iFileInfoUtil; delete iDrmMediaUtility; + delete iTaskTimer; + iFile.Close(); + if ( iMedia != NULL ) + { + delete iMedia; + } #ifdef RD_MPX_TNM_INTEGRATION delete iTNManager; if (iTNSyncWait && iTNSyncWait->IsStarted() ) @@ -140,149 +159,65 @@ } delete iTNSyncWait; delete iTimer; + iArrayTNRequestId.Close(); + iArrayTasks.Close(); #endif //RD_MPX_TNM_INTEGRATION - - MPX_DEBUG2("CMPXMetadataExtractor: TNM Block Count: %d ", iTNMBlockCount ); } // --------------------------------------------------------------------------- -// Constructs a media properties object +// Constructs a media properties object : synchronous function // --------------------------------------------------------------------------- // EXPORT_C void CMPXMetadataExtractor::CreateMediaL( const TDesC& aFile, CMPXMedia*& aNewProperty, TBool aMetadataOnly ) { - // make a copy of aFile - HBufC* fileName = HBufC::NewL(KMaxFileName); - CleanupStack::PushL( fileName ); - fileName->Des().Append( aFile ); - MPX_DEBUG2("CMPXMetadataExtractor::CreateMediaL %S <---", fileName ); - - RArray contentIDs; - contentIDs.AppendL( KMPXMediaIdGeneral ); - contentIDs.AppendL( KMPXMediaIdAudio ); - contentIDs.AppendL( KMPXMediaIdMusic ); - contentIDs.AppendL( KMPXMediaIdDrm ); - contentIDs.AppendL( KMPXMediaIdMTP ); - aNewProperty = NULL; - CMPXMedia* media = CMPXMedia::NewL( contentIDs.Array() ); - CleanupStack::PushL( media ); - contentIDs.Close(); - - // CMPXMedia default types - - media->SetTObjectValueL( KMPXMediaGeneralType, - EMPXItem ); - media->SetTObjectValueL( KMPXMediaGeneralCategory, - EMPXSong ); - - TParsePtrC parse( *fileName ); - - // Title, default is file name - media->SetTextValueL( KMPXMediaGeneralTitle, - parse.Name() ); - - // Default album track - media->SetTextValueL( KMPXMediaMusicAlbumTrack, - KNullDesC ); - - // Set the Mime Type and collection UID - // - if( !aMetadataOnly ) + MPX_FUNC("CMPXMetadataExtractor::CreateMediaL()"); + // check if we are still processing a request. + if ( iArrayTasks.Count() ) { - TInt index(KErrNotFound); - TInt count( iSupportedTypes.Count() ); - for (TInt i=0; i Extensions(); - const TDesC& ext = parse.Ext(); - if (!exts.FindIsq(ext, index2)) - { // found - index = i; - break; - } - } - if( KErrNotFound != index ) - { - MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaPropertiesL apparc <---" ); - TInt mimeIndex = SupportedContainerTypeL( *fileName, index ); - User::LeaveIfError( mimeIndex ); - MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaPropertiesL apparc --->" ); + MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaL Request ongoing. Abort!" ); + User::Leave( KErrAbort ); + } - media->SetTextValueL( KMPXMediaGeneralMimeType, - iSupportedTypes[index]->Mimetypes()[mimeIndex] ); - - media->SetTObjectValueL( KMPXMediaGeneralCollectionId, - iSupportedTypes[index]->Uid() ); - } - else - { - User::Leave(KErrNotSupported); - } - } - else // other case use apparc to fetch and set mimetype - { - TDataType dataType; - TUid dummyUid(KNullUid); - iAppArc.AppForDocument(*fileName, dummyUid, dataType); - media->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() ); - } - - // Use file handle here - // - RFile file; - TInt err = file.Open( iFs, *fileName, EFileRead | EFileShareReadersOrWriters ); - CleanupClosePushL(file); + iCancelled = EFalse; + iFileOpenError = KErrNone; + iObs = NULL; + aNewProperty = NULL; + iFileName = aFile; + iMetadataOnly = aMetadataOnly; - // Metadata related - // - if( err == KErrNone ) + // populate the task array + AddTasksL(); + + // execute all tasks in the array + while ( iArrayTasks.Count() ) { - const TDesC& mimeType = media->ValueText( KMPXMediaGeneralMimeType ); - HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); - mimeType8->Des().Append( mimeType ); - TRAPD( metadataerror, iMetadataUtility->OpenFileL( file, *mimeType8 ) ); - CleanupStack::PopAndDestroy( mimeType8 ); - - // No problem - if( KErrNone == metadataerror ) + // execute task at index 0 + MPX_TRAPD( error, ExecuteTaskL() ); + if ( error || iCancelled ) { - // Add TRAPD to capture exception KErrNoMemory. - //If album art size is too large, trap this exception and SetDefaultL. - //Fix EYLU-7ESE5L - TRAPD( err, SetMediaPropertiesL( *media, *fileName ) ); - if ( KErrNoMemory == err ) + // cleanup + if ( iMedia != NULL ) { - SetDefaultL( *media ); + delete iMedia; + iMedia = NULL; } - } - else // Error, Set defaults - { - SetDefaultL( *media ); + iArrayTasks.Reset(); + if ( error ) + { + CleanUp(); + User::LeaveIfError( error ); + } + break; } - - // Reset the utility - iMetadataUtility->ResetL(); - } - else // Error, Set defaults - { - SetDefaultL( *media ); + + iArrayTasks.Remove( 0 ); } - // Common properties that we can extract - // - SetExtMediaPropertiesL( *media, *fileName, aMetadataOnly, file, err ); - CleanupStack::PopAndDestroy(&file); - - // Set the pointers now that the object is ready - // - CleanupStack::Pop( media ); - aNewProperty = media; - - CleanupStack::PopAndDestroy( fileName ); - MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaPropertiesL --->"); + aNewProperty = iMedia; + iMedia = NULL; // ownership transferred. + CleanUp(); } // --------------------------------------------------------------------------- @@ -291,6 +226,7 @@ // void CMPXMetadataExtractor::SetDefaultL( CMPXMedia& aMediaProp ) { + MPX_FUNC("CMPXMetadataExtractor::SetDefaultL()"); // Comment aMediaProp.SetTextValueL( KMPXMediaGeneralComment, KNullDesC ); @@ -324,27 +260,48 @@ // Sets media object attributes from metadata utilities // --------------------------------------------------------------------------- // -void CMPXMetadataExtractor::SetMediaPropertiesL( CMPXMedia& aMedia, - const TDesC& aFile ) +void CMPXMetadataExtractor::SetMediaPropertiesL() { - MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL <---" ); + MPX_FUNC("CMPXMetadataExtractor::SetMediaPropertiesL()"); - const CMetaDataFieldContainer& metaCont = - iMetadataUtility->MetaDataFieldsL(); + const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); + HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); + mimeType8->Des().Append( mimeType ); + + // Continue to extract metadata even if fail. + MPX_TRAPD( metadataerror, iMetadataUtility->OpenFileL( iFile, *mimeType8 ) ); + CleanupStack::PopAndDestroy( mimeType8 ); + + // Get MetadataUtility Container + const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL(); + + // Get DRM data + // Need the protected flag from metadataUtility Container + MPX_TRAPD( drmerror, SetDrmMediaPropertiesL( metaCont ) ); + MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, result=%d getting drm data", + drmerror ); + + // Get metadata fields TInt count( metaCont.Count() ); for( TInt i=0; i0) { FindAndReplaceForbiddenChars(valptr, vallen); - aMedia.SetTextValueL(KMPXMediaGeneralTitle, *value); + iMedia->SetTextValueL(KMPXMediaGeneralTitle, *value); } break; } @@ -367,7 +324,7 @@ if (vallen>0) { FindAndReplaceForbiddenChars(valptr, vallen); - aMedia.SetTextValueL(KMPXMediaMusicArtist, *value); + iMedia->SetTextValueL(KMPXMediaMusicArtist, *value); } break; } @@ -379,7 +336,7 @@ if (vallen>0) { FindAndReplaceForbiddenChars(valptr, vallen); - aMedia.SetTextValueL(KMPXMediaMusicAlbum, *value ); + iMedia->SetTextValueL(KMPXMediaMusicAlbum, *value ); } break; } @@ -394,19 +351,19 @@ TDateTime dt; dt.SetYear( year ); TTime time( dt ); - aMedia.SetTObjectValueL( KMPXMediaMusicYear, + iMedia->SetTObjectValueL( KMPXMediaMusicYear, time.Int64() ); break; } case EMetaDataComment: { - aMedia.SetTextValueL( KMPXMediaGeneralComment, + iMedia->SetTextValueL( KMPXMediaGeneralComment, *value ); break; } case EMetaDataAlbumTrack: { - aMedia.SetTextValueL( KMPXMediaMusicAlbumTrack, + iMedia->SetTextValueL( KMPXMediaMusicAlbumTrack, *value ); break; } @@ -418,7 +375,7 @@ if (vallen>0) { FindAndReplaceForbiddenChars(valptr, vallen); - aMedia.SetTextValueL(KMPXMediaMusicGenre, *value); + iMedia->SetTextValueL(KMPXMediaMusicGenre, *value); } break; } @@ -430,43 +387,55 @@ if (vallen>0) { FindAndReplaceForbiddenChars(valptr, vallen); - aMedia.SetTextValueL(KMPXMediaMusicComposer, *value); + iMedia->SetTextValueL(KMPXMediaMusicComposer, *value); } break; } case EMetaDataUrl: case EMetaDataUserUrl: // fall through { - aMedia.SetTextValueL( KMPXMediaMusicURL, + iMedia->SetTextValueL( KMPXMediaMusicURL, *value ); break; } case EMetaDataJpeg: { -#ifdef RD_MPX_TNM_INTEGRATION - MPX_PERF_START(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM); - HBufC8* value8 = MPXUser::Alloc8L(metaCont.At( i, fieldType )); - CleanupStack::PushL( value8 ); - AddMediaAlbumArtL( aMedia, aFile, *value8 ); - CleanupStack::Pop(value8); - MPX_PERF_END(CMPXMetadataExtractor_SetMediaPropertiesL_JPEG_TNM); -#else //RD_MPX_TNM_INTEGRATION - aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, - aFile ); -#endif //RD_MPX_TNM_INTEGRATION + // Album art handled in AddMediaAlbumArtL() break; } case EMetaDataCopyright: { - aMedia.SetTextValueL( KMPXMediaGeneralCopyright, + iMedia->SetTextValueL( KMPXMediaGeneralCopyright, *value ); break; } + case EMetaDataDuration: + { + const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); + MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL, mimeType = %S", &mimeType); + + // Verify if WMA, get the duration + if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 ) + { + MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL- WMA"); + + // Perform the duration conversion + TLex lexer( *value ); + TInt32 duration ( 0 ); + lexer.Val( duration ); // [second] + duration *= 1000; // [msec] + + iMedia->SetTObjectValueL( KMPXMediaGeneralDuration, + duration ); + + MPX_DEBUG2("CMPXMetadataExtractor::SetMediaPropertiesL- duration = %i", duration); + } + break; + } case EMetaDataOriginalArtist: // fall through case EMetaDataVendor: // fall through case EMetaDataRating: // fall through case EMetaDataUniqueFileIdentifier: // fall through - case EMetaDataDuration: // fall through case EMetaDataDate: // fall through { // not used @@ -478,130 +447,66 @@ break; } } - CleanupStack::PopAndDestroy(value); + if (fieldType != EMetaDataJpeg) + { + CleanupStack::PopAndDestroy( value ); + } } - - MPX_DEBUG1("CMPXMetadataExtractor::SetMediaPropertiesL --->" ); } // --------------------------------------------------------------------------- // Sets extra media properties not returned by metadata utilities // --------------------------------------------------------------------------- // -void CMPXMetadataExtractor::SetExtMediaPropertiesL( CMPXMedia& aProp, - const TDesC& aFile, - TBool aMetadataOnly, - RFile& aFileHandle, - TInt aFileErr ) +void CMPXMetadataExtractor::SetExtMediaPropertiesL() { - MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL <---"); - - // DB Flags to set - // - TUint dbFlags(KMPXMediaGeneralFlagsSetOrUnsetBit); - - // File Path - // - TParsePtrC parse( aFile ); - aProp.SetTextValueL( KMPXMediaGeneralUri, - aFile ); - aProp.SetTextValueL( KMPXMediaGeneralDrive, - parse.Drive() ); - - // DRM Rights - // - CMPXMedia* drm = NULL; - TRAPD( drmError, iDrmMediaUtility->InitL( aFile ); - drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId | - KMPXMediaDrmRightsStatus.iAttributeId ) ); - ); + MPX_FUNC("CMPXMetadataExtractor::SetExtMediaPropertiesL()"); - TBool prot(EFalse); - if( drm ) - { - CleanupStack::PushL( drm ); - MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL -- is a drm file"); - if( drm->IsSupported( KMPXMediaDrmProtected ) ) - { - prot = drm->ValueTObjectL( KMPXMediaDrmProtected ); - MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL protected %i", prot); - } - - TMPXMediaDrmRightsStatus status(EMPXDrmRightsFull); - if( drm->IsSupported( KMPXMediaDrmRightsStatus ) ) - { - status = drm->ValueTObjectL(KMPXMediaDrmRightsStatus); - aProp.SetTObjectValueL(KMPXMediaDrmRightsStatus, status ); - MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- status %i", status); - } - - // Set DB flags - dbFlags |= KMPXMediaGeneralFlagsIsDrmProtected; - if( status != EMPXDrmRightsFull && status != EMPXDrmRightsRestricted && status != EMPXDrmRightsPreview ) - { - dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; - } - CleanupStack::PopAndDestroy( drm ); - } - - // Trapped PV DRM error. If -46, we know the file has no rights // - if( drmError == KErrPermissionDenied ) - { - dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; - } - else - { - User::LeaveIfError( drmError ); - } - - aProp.SetTObjectValueL( KMPXMediaDrmProtected, prot ); - aProp.SetTObjectValueL( KMPXMediaMTPDrmStatus, (TUint16)prot ); - - iDrmMediaUtility->Close(); - - // File Size + // File Size --- The following needs MMF support // TInt size( 0 ); - if( aFileErr == KErrNone ) + if( iFileOpenError == KErrNone ) { - aFileHandle.Size( size ); - aProp.SetTObjectValueL( KMPXMediaGeneralSize, - size ); - - // Duration, bitrate, samplerate, etc - // - if( !aMetadataOnly ) + const TDesC& mimeType = iMedia->ValueText( KMPXMediaGeneralMimeType ); + MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, mimeType = %S", &mimeType); + iFile.Size( size ); + iMedia->SetTObjectValueL( KMPXMediaGeneralSize, size ); + + // Verify if WMA, skip getting info from MMF + if( mimeType.Compare(KWmaMimeType) == 0 || mimeType.Compare(KWmaCafMimeType) == 0 ) + { + // No need to get MMF support + MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, skip MMF "); + } + else { - TRAPD(err2, iFileInfoUtil->OpenFileL( - aFileHandle, - aProp.ValueText(KMPXMediaGeneralMimeType))); - MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2); - if( KErrNone == err2 ) - { - aProp.SetTObjectValueL( KMPXMediaAudioBitrate, - iFileInfoUtil->BitRate() ); - aProp.SetTObjectValueL( KMPXMediaAudioSamplerate, - iFileInfoUtil->SampleRate() ); - TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms - aProp.SetTObjectValueL( KMPXMediaGeneralDuration, - duration ); - MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration); + MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL, get MMF controller"); + // Duration, bitrate, samplerate, etc + // + if( !iMetadataOnly ) + { + MPX_TRAPD(err2, iFileInfoUtil->OpenFileL( + iFile, + iMedia->ValueText(KMPXMediaGeneralMimeType))); + MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL, file info util error %i", err2); + if( KErrNone == err2 ) + { + iMedia->SetTObjectValueL( KMPXMediaAudioBitrate, + iFileInfoUtil->BitRate() ); + iMedia->SetTObjectValueL( KMPXMediaAudioSamplerate, + iFileInfoUtil->SampleRate() ); + TInt64 duration = (TInt64) iFileInfoUtil->Duration().Int64() / 1000; // ms + iMedia->SetTObjectValueL( KMPXMediaGeneralDuration, + duration ); + + MPX_DEBUG2("CMPXMetadataExtractor::SetExtMediaPropertiesL -- duration %i", duration); + } + + iFileInfoUtil->Reset(); } } } - else if( aFileErr == KErrNotFound || aFileErr == KErrPathNotFound ) - { - dbFlags |= KMPXMediaGeneralFlagsIsInvalid; - } - // Finally set the db flag - // - aProp.SetTObjectValueL( KMPXMediaGeneralFlags, - dbFlags ); - - iFileInfoUtil->Reset(); - - MPX_DEBUG1("CMPXMetadataExtractor::SetExtMediaPropertiesL --->"); } // --------------------------------------------------------------------------- @@ -611,6 +516,7 @@ TInt CMPXMetadataExtractor::SupportedContainerTypeL( const TDesC& aFile, TInt aIndex ) { + MPX_FUNC("CMPXMetadataExtractor::SupportedContainerTypeL()"); TInt index(KErrNotFound); TDataType dataType; @@ -644,11 +550,20 @@ // Callback but not used here // --------------------------------------------------------------------------- void CMPXMetadataExtractor::ThumbnailReady( TInt /*aError*/, - MThumbnailData& /*aThumbnail*/, TThumbnailRequestId /*aId*/ ) + MThumbnailData& /*aThumbnail*/, TThumbnailRequestId aId ) { MPX_FUNC("CMPXMetadataExtractor::ThumbnailReady()"); - iOutstandingThumbnailRequest--; - if ( iOutstandingThumbnailRequest <= KMPXMaxThumbnailRequest ) + + // Remove thumbnail id from array. + TInt index = iArrayTNRequestId.Find( aId ); + if ( index >= 0 ) + { + iArrayTNRequestId.Remove( index ); + } + MPX_DEBUG2("CMPXMetadataExtractor::ThumbnailReady(): Outstanding Thumbnail Request = %d", + iArrayTNRequestId.Count()); + + if ( iArrayTNRequestId.Count() < KMPXMaxThumbnailRequest ) { StopWaitLoop(); } @@ -707,7 +622,8 @@ EXPORT_C TInt CMPXMetadataExtractor::ExtractAlbumArtL( CMPXMedia* aMedia ) { MPX_FUNC("CMPXMetadataExtractor::ExtractAlbumArtL()"); - TInt err = KErrNone; + TInt err = KErrNone; + iCancelled = EFalse; if ( !aMedia->IsSupported(KMPXMediaGeneralUri) ) { @@ -717,7 +633,46 @@ // Get full file name. const TDesC& path = aMedia->ValueText(KMPXMediaGeneralUri); MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL Filename:%S ", &path ); - +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + TParsePtrC parse( path ); + TPtrC ext( parse.Ext() ); + if (ext.CompareF(KNonEmbeddedArtExt)== 0) + { +#ifdef RD_MPX_TNM_INTEGRATION + + //check if can send TN request, If thumbnail creation is ongoing, wait til it is done + CheckBeforeSendRequest(); + + CThumbnailObjectSource* source( NULL ); + if (aMedia->IsSupported(KMPXMediaMTPSampleData)) + { + TBuf<20> mimeType(KImageFileType); + TInt sampleData = aMedia->ValueTObjectL(KMPXMediaMTPSampleData); + HBufC8* value8 = ((HBufC8*)sampleData)->Des().AllocLC(); // make a local copy of sampleData + source = CThumbnailObjectSource::NewLC( + value8, mimeType, path ); // give up ownership of value8 + + MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from buffer"); + TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source ); + iArrayTNRequestId.Append( tnId ); + CleanupStack::PopAndDestroy( source ); + CleanupStack::Pop( value8 ); + } + else + { + source = CThumbnailObjectSource::NewLC( + path, KImageFileType ); + + MPX_DEBUG1("CMPXMetadataExtractor::ExtractAlbumArtL source created from path"); + TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source ); + iArrayTNRequestId.Append( tnId ); + CleanupStack::PopAndDestroy( source ); + } +#endif // RD_MPX_TNM_INTEGRATION + } + else + { +#endif // ABSTRACTAUDIOALBUM_INCLUDED // create wanted fields array RArray wantedFields; CleanupClosePushL( wantedFields ); @@ -730,56 +685,27 @@ MPX_DEBUG2("CMPXMetadataExtractor::ExtractAlbumArtL MimeType:%S ", &mimeType ); HBufC8* mimeType8 = HBufC8::NewLC( mimeType.Length() ); mimeType8->Des().Append( mimeType ); - TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields, *mimeType8 ) ); + MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields, *mimeType8 ) ); CleanupStack::PopAndDestroy( mimeType8 ); } else { - TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) ); + MPX_TRAP( err, iMetadataUtility->OpenFileL( path, wantedFields ) ); } CleanupStack::PopAndDestroy( &wantedFields ); if ( !err ) { - TRAP( err, GetMediaAlbumArtL( *aMedia, path )); + //check if can send TN request, If thumbnail creation is ongoing, wait til it is done + CheckBeforeSendRequest(); + MPX_TRAP( err, AddMediaAlbumArtL( *aMedia, path )); } // Reset the utility iMetadataUtility->ResetL(); - - return err; - } - -// ---------------------------------------------------------------------------- -// Set album art. -// ---------------------------------------------------------------------------- -TInt CMPXMetadataExtractor::GetMediaAlbumArtL( CMPXMedia& aMedia, - const TDesC& aFile ) - { - MPX_FUNC("CMPXMetadataExtractor::GetMediaAlbumArtL()"); - TInt err = KErrNone; - // get metadata container. - const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL(); - - TPtrC data = metaCont.Field( EMetaDataJpeg ); - - if ( data.Length() ) - { - MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist."); -#ifdef RD_MPX_TNM_INTEGRATION - HBufC8* value8 = MPXUser::Alloc8L( data ); - CleanupStack::PushL( value8 ); - AddMediaAlbumArtL( aMedia, aFile, *value8 ); - CleanupStack::Pop(value8); -#else // RD_MPX_TNM_INTEGRATION - aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile ); -#endif // RD_MPX_TNM_INTEGRATION - } - else - { - err = KErrNotFound; - } - +#ifdef ABSTRACTAUDIOALBUM_INCLUDED + } +#endif // ABSTRACTAUDIOALBUM_INCLUDED return err; } @@ -787,42 +713,467 @@ // Add album art to media object. // ---------------------------------------------------------------------------- void CMPXMetadataExtractor::AddMediaAlbumArtL( CMPXMedia& aMedia, - const TDesC& aFile, - TDesC8& aValue ) + const TDesC& aFile ) { MPX_FUNC("CMPXMetadataExtractor::AddMediaAlbumArtL()"); + + // get metadata container. + const CMetaDataFieldContainer& metaCont = iMetadataUtility->MetaDataFieldsL(); + TPtrC8 data8 = metaCont.Field8( EMetaDataJpeg ); + + if ( data8.Length() ) + { + MPX_DEBUG1("CMPXMetadataExtractor::GetMediaAlbumArtL(): Album art exist."); #ifdef RD_MPX_TNM_INTEGRATION + HBufC8* value8 = NULL; + MPX_TRAPD( err, value8 = data8.AllocL() ); + if ( KErrNone != err ) + { + MPX_DEBUG2("CMPXMetadataExtractor::GetMediaAlbumArtL - error jpeg = %i", err); + return; + } + CleanupStack::PushL( value8 ); - // If thumbnail creation is ongoing, wait til it is done - if ( iOutstandingThumbnailRequest > KMPXMaxThumbnailRequest ) + TBuf<256> mimeType; + mimeType.Copy( KImageFileType ); + CThumbnailObjectSource* source = CThumbnailObjectSource::NewL( + value8, mimeType, aFile ); + TThumbnailRequestId tnId = iTNManager->CreateThumbnails( *source ); + iArrayTNRequestId.Append( tnId ); // add thumbnail id to array + CleanupStack::Pop( value8 ); + aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile ); +#endif // RD_MPX_TNM_INTEGRATION + aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile ); + } + } + +// ---------------------------------------------------------------------------- +// Check if can send request to TNM or not. +// ---------------------------------------------------------------------------- +void CMPXMetadataExtractor::CheckBeforeSendRequest() + { + MPX_FUNC("CMPXMetadataExtractor::CheckBeforeSendRequest()"); +#ifdef RD_MPX_TNM_INTEGRATION + MPX_DEBUG2("CMPXMetadataExtractor::CheckBeforeSendRequest(): Outstanding Thumbnail Request = %d", + iArrayTNRequestId.Count()); + // If thumbnail creation is ongoing, wait til it is done + if ( iArrayTNRequestId.Count() >= KMPXMaxThumbnailRequest ) { - MPX_DEBUG1("CMPXMetadataExtractor::AddMediaAlbumArtL(): Thumbnail creation ongoing!"); - iTNMBlockCount++; + MPX_DEBUG1("CMPXMetadataExtractor::CheckBeforeSendRequest(): Thumbnail creation ongoing!"); // Cancel timer. CancelTimeoutTimer(); - // Start timer in case there is no callback from ThumbNail Manager. + // Start timer in case there is no callback from ThumbNail Manager. iTimer->Start( KMPXTimeoutTimer, KMPXTimeoutTimer, TCallBack(TimeoutTimerCallback, this )); - + // Start wait loop until we get a callback from ThumbNail Manager. if ( !iTNSyncWait->IsStarted() ) { iTNSyncWait->Start(); } } +#endif // RD_MPX_TNM_INTEGRATION + } + +// ---------------------------------------------------------------------------- +// Cancel request. This will empty the task array and stop the wait loop. This +// will cause the CreateMediaL() to finish more quickly. +// ---------------------------------------------------------------------------- +EXPORT_C void CMPXMetadataExtractor::CancelRequest() + { + MPX_FUNC("CMPXMetadataExtractor::CancelRequest()"); + iCancelled = ETrue; + // Cancel all tasks + iArrayTasks.Reset(); + // Cancel all thumbnail request + CancelAllThumbnailRequests(); + StopWaitLoop(); + } + +// ---------------------------------------------------------------------------- +// Cancel all outstanding thumbnail requests. +// ---------------------------------------------------------------------------- +void CMPXMetadataExtractor::CancelAllThumbnailRequests() + { + MPX_FUNC("CMPXMetadataExtractor::CancelAllThumbnailRequests()"); +#ifdef RD_MPX_TNM_INTEGRATION + // TODO: remove comments when TNM make CancelRequest asynchronous. + /*TInt count = iArrayTNRequestId.Count(); + for ( TInt i=0; iCancelRequest( iArrayTNRequestId[i] ); + } + */ + iArrayTNRequestId.Reset(); +#endif // RD_MPX_TNM_INTEGRATION + } + +// ---------------------------------------------------------------------------- +// Create media and set default data and mimetype. +// ---------------------------------------------------------------------------- +void CMPXMetadataExtractor::DoCreateMediaL() + { + MPX_FUNC("CMPXMetadataExtractor::DoCreateMediaL()"); + MPX_ASSERT( iMedia == NULL ); + RArray contentIDs; + CleanupClosePushL( contentIDs ); + contentIDs.AppendL( KMPXMediaIdGeneral ); + contentIDs.AppendL( KMPXMediaIdAudio ); + contentIDs.AppendL( KMPXMediaIdMusic ); + contentIDs.AppendL( KMPXMediaIdDrm ); + contentIDs.AppendL( KMPXMediaIdMTP ); + iMedia = CMPXMedia::NewL( contentIDs.Array() ); + CleanupStack::PopAndDestroy( &contentIDs ); + + // CMPXMedia default types + iMedia->SetTObjectValueL( KMPXMediaGeneralType, + EMPXItem ); + iMedia->SetTObjectValueL( KMPXMediaGeneralCategory, + EMPXSong ); + + TParsePtrC parse( iFileName ); + // Title, default is file name + iMedia->SetTextValueL( KMPXMediaGeneralTitle, + parse.Name() ); + // Default album track + iMedia->SetTextValueL( KMPXMediaMusicAlbumTrack, + KNullDesC ); + + // Set the Mime Type and collection UID + // + if( !iMetadataOnly ) + { + TInt index(KErrNotFound); + TInt count( iSupportedTypes.Count() ); + for (TInt i=0; i Extensions(); + const TDesC& ext = parse.Ext(); + if (!exts.FindIsq(ext, index2)) + { // found + index = i; + break; + } + } + if( KErrNotFound != index ) + { + MPX_DEBUG1("CMPXMetadataExtractor::DoCreateMediaL apparc <---" ); + TInt mimeIndex = SupportedContainerTypeL( iFileName, index ); + User::LeaveIfError( mimeIndex ); + MPX_DEBUG1("CMPXMetadataExtractor::DoCreateMediaL apparc --->" ); + + iMedia->SetTextValueL( KMPXMediaGeneralMimeType, + iSupportedTypes[index]->Mimetypes()[mimeIndex] ); + + iMedia->SetTObjectValueL( KMPXMediaGeneralCollectionId, + iSupportedTypes[index]->Uid() ); + } + else + { + User::Leave(KErrNotSupported); + } + } + else // other case use apparc to fetch and set mimetype + { + TDataType dataType; + TUid dummyUid(KNullUid); + iAppArc.AppForDocument(iFileName, dummyUid, dataType); + iMedia->SetTextValueL( KMPXMediaGeneralMimeType,dataType.Des() ); + } + + // Initially set default tags. + SetDefaultL( *iMedia ); + } + +// ---------------------------------------------------------------------------- +// Execute task at index 0. +// ---------------------------------------------------------------------------- +void CMPXMetadataExtractor::ExecuteTaskL() + { + MPX_FUNC("CMPXMetadataExtractor::ExecuteTasksL()"); + + if ( iArrayTasks.Count() ) + { + switch ( iArrayTasks[0] ) + { + case ETaskCreateMedia: + DoCreateMediaL(); + break; + case ETaskAddMetadata: + SetMediaPropertiesL(); + break; + case ETaskAddExtMetadata: + SetExtMediaPropertiesL(); + break; + case ETaskAddAlbumArt: + AddMediaAlbumArtL( *iMedia, iFileName ); + break; + case ETaskCheckBeforeSend: + CheckBeforeSendRequest(); + break; + default: + MPX_ASSERT(0); // Should never get here + } + } + } + +// --------------------------------------------------------------------------- +// Constructs a media properties object : asynchronous funcion +// --------------------------------------------------------------------------- +// +EXPORT_C void CMPXMetadataExtractor::CreateMediaAsyncL( const TDesC& aFile, + MMPXMetadataExtractorObserver* aObs, + TBool aMetadataOnly ) + { + MPX_FUNC("CMPXMetadataExtractor::CreateMediaAsyncL()"); + // check if we are still processing a request. + if ( iArrayTasks.Count() ) + { + MPX_DEBUG1("CMPXMetadataExtractor::CreateMediaAsyncL Request ongoing. Abort!" ); + User::Leave( KErrAbort ); + } - aMedia.SetTextValueL( KMPXMediaMusicAlbumArtFileName, aFile ); + iCancelled = EFalse; + iFileOpenError = KErrNone; + iFileName = aFile; + iObs = aObs; + iMetadataOnly = aMetadataOnly; + + // populate the task array + AddTasksL(); + + // Start task timer to execute task + if ( iArrayTasks.Count() ) + { + if ( iTaskTimer->IsActive() ) + { + iTaskTimer->Cancel(); + } + iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this )); + } + } + +// --------------------------------------------------------------------------- +// Opens the file +// --------------------------------------------------------------------------- +// +TInt CMPXMetadataExtractor::OpenFile() + { + MPX_FUNC("CMPXMetadataExtractor::OpenFile()"); - TBuf<256> mimeType; - mimeType.Copy( KImageFileType ); - CThumbnailObjectSource* source = CThumbnailObjectSource::NewLC( - &aValue, mimeType, aFile ); - iTNManager->CreateThumbnails( *source ); - CleanupStack::PopAndDestroy( source ); - aMedia.SetTextValueL( KMPXMediaMusicOriginalAlbumArtFileName, aFile ); - iOutstandingThumbnailRequest++; + // Open the file + iFile.Close(); + TInt error = iFile.Open( iFs, iFileName, EFileRead | EFileShareReadersOrWriters ); + MPX_DEBUG2("CMPXMetadataExtractor::OpenFile open error = %d", error ); + return error; + } + +// --------------------------------------------------------------------------- +// Populat task array +// --------------------------------------------------------------------------- +// +void CMPXMetadataExtractor::AddTasksL() + { + MPX_FUNC("CMPXMetadataExtractor::AddTasks()"); + iFileOpenError = OpenFile(); + + // Do not change the order of the task below. + iArrayTasks.Reset(); + if ( iFileOpenError == KErrNone ) + { + // to avoid resources contention (i.e. accessing sql, file system, etc) + // Ordering the tasks - so no multiple tasks run at the same time + // put the longest running task at the last (i.e. thumbnailing) + iArrayTasks.AppendL(ETaskCreateMedia); + iArrayTasks.AppendL(ETaskAddExtMetadata); // Get the MMF first + iArrayTasks.AppendL(ETaskAddMetadata); // Get metadata & maybe drm data + iArrayTasks.AppendL(ETaskCheckBeforeSend); + iArrayTasks.AppendL(ETaskAddAlbumArt); // Get album art / thumbnail last + } + else + { + iArrayTasks.AppendL(ETaskCreateMedia); + iArrayTasks.AppendL(ETaskAddExtMetadata); + } + } + +// ---------------------------------------------------------------------------- +// Callback for timer. +// ---------------------------------------------------------------------------- +TInt CMPXMetadataExtractor::TaskTimerCallback(TAny* aPtr) + { + MPX_FUNC("CMPXMetadataExtractor::TaskTimerCallback()"); + + CMPXMetadataExtractor* ptr = + static_cast(aPtr); + + ptr->HandleTaskTimerExpired(); + return KErrNone; + } + +// ---------------------------------------------------------------------------- +// Handle task timer expired +// ---------------------------------------------------------------------------- +void CMPXMetadataExtractor::HandleTaskTimerExpired() + { + MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()"); + + if ( iTaskTimer && iTaskTimer->IsActive() ) + { + iTaskTimer->Cancel(); + } + // execute task at index 0 + MPX_TRAPD( error, ExecuteTaskL() ); + if ( error || iCancelled ) + { + // cleanup + if ( iMedia != NULL ) + { + delete iMedia; + iMedia = NULL; + } + iArrayTasks.Reset(); + } + + // Remove task at index 0. + if ( iArrayTasks.Count() ) + { + iArrayTasks.Remove( 0 ); + } -#endif // RD_MPX_TNM_INTEGRATION + // check if we have any more task to run + if ( iArrayTasks.Count() ) + { + // start task timer + iTaskTimer->Start( 0, 0, TCallBack(TaskTimerCallback, this )); + } + else + { + // done + if ( iObs && !iCancelled ) + { + iObs->HandleCreateMediaComplete( iMedia, error ); + iMedia = NULL; // ownership transferred. + } + + CleanUp(); + } + } + +// ---------------------------------------------------------------------------- +// Callback for timer. +// ---------------------------------------------------------------------------- +void CMPXMetadataExtractor::CleanUp() + { + MPX_FUNC("CMPXMetadataExtractor::CleanUp()"); + // Reset the utility + TRAP_IGNORE( iMetadataUtility->ResetL() ); + iFile.Close(); } + + +// --------------------------------------------------------------------------- +// Sets DRRM media properties not returned by metadata utilities +// --------------------------------------------------------------------------- +// +void CMPXMetadataExtractor::SetDrmMediaPropertiesL(const CMetaDataFieldContainer& aMetaCont) + { + MPX_FUNC("CMPXMetadataExtractor::SetDrmMediaPropertiesL()"); + + TBool prot(EFalse); + // DB Flags to set + TUint dbFlags(KMPXMediaGeneralFlagsSetOrUnsetBit); + // Validate the objects to be used + MPX_ASSERT(iMedia); + MPX_ASSERT(iDrmMediaUtility); + + // File Path + TParsePtrC parse( iFileName ); + iMedia->SetTextValueL( KMPXMediaGeneralUri, iFileName ); + iMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); + MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL - Filename=%S", &iFileName); + + // get the protected flag from MetadataUtility Container + TPtrC ptr = aMetaCont.Field( EMetaDataProtected ); + MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status=%S", &ptr); + _LIT( KNonProtected, "0" ); + if ( ptr.Compare( KNonProtected ) == 0 ) + { + // this is non-protected file + // prot = EFalse + MPX_DEBUG1("CMPXMetadataExtractor::SetDrmMediaPropertiesL - non protected"); + iMedia->SetTObjectValueL( KMPXMediaDrmProtected, prot ); + iMedia->SetTObjectValueL( KMPXMediaMTPDrmStatus, (TUint16)prot ); + } + else + { // DRM file + + // DRM Rights + // + CMPXMedia* drm = NULL; + MPX_TRAPD( drmError, iDrmMediaUtility->InitL( iFileName ); + drm = CMPXMedia::NewL( *iDrmMediaUtility->GetMediaL( KMPXMediaDrmProtected.iAttributeId | + KMPXMediaDrmRightsStatus.iAttributeId ) ); + ); + + TBool prot(EFalse); + if( drm ) + { + CleanupStack::PushL( drm ); + MPX_DEBUG1("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- is a drm file"); + if( drm->IsSupported( KMPXMediaDrmProtected ) ) + { + prot = drm->ValueTObjectL( KMPXMediaDrmProtected ); + MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL protected %i", prot); + } + + TMPXMediaDrmRightsStatus status(EMPXDrmRightsFull); + if( drm->IsSupported( KMPXMediaDrmRightsStatus ) ) + { + status = drm->ValueTObjectL(KMPXMediaDrmRightsStatus); + iMedia->SetTObjectValueL(KMPXMediaDrmRightsStatus, status ); + MPX_DEBUG2("CMPXMetadataExtractor::SetDrmMediaPropertiesL -- status %i", status); + } + + // Set DB flags + dbFlags |= KMPXMediaGeneralFlagsIsDrmProtected; + if( status != EMPXDrmRightsFull && status != EMPXDrmRightsRestricted && status != EMPXDrmRightsPreview ) + { + dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; + } + CleanupStack::PopAndDestroy( drm ); + } + + // Trapped PV DRM error. If -46, we know the file has no rights + // + if( drmError == KErrPermissionDenied ) + { + dbFlags |= KMPXMediaGeneralFlagsIsDrmLicenceInvalid; + } + else + { + User::LeaveIfError( drmError ); + } + + iMedia->SetTObjectValueL( KMPXMediaDrmProtected, prot ); + iMedia->SetTObjectValueL( KMPXMediaMTPDrmStatus, (TUint16)prot ); + + iDrmMediaUtility->Close(); + + } // DRM file + + + // verify the file open status + if( iFileOpenError == KErrNotFound || iFileOpenError == KErrPathNotFound ) + { + dbFlags |= KMPXMediaGeneralFlagsIsInvalid; + } + + // Finally set the db flag + // + iMedia->SetTObjectValueL( KMPXMediaGeneralFlags, dbFlags ); + + } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/group/mpxharvester.mmp --- a/mmappcomponents/harvester/server/group/mpxharvester.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/group/mpxharvester.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -23,8 +23,12 @@ TARGET mpxharvesterserver.exe TARGETTYPE exe UID 0 0x101FFCA9 +#ifdef WINSCW EPOCHEAPSIZE 0x1000 0x500000 -EPOCSTACKSIZE 0X5000 +#else +EPOCHEAPSIZE 0x1000 0x800000 +#endif +EPOCSTACKSIZE 0x5000 CAPABILITY CAP_SERVER DRM AllFiles VENDORID VID_DEFAULT @@ -39,8 +43,7 @@ // System events SOURCE mpxfsformatmonitor.cpp SOURCE mpxmediaremovalmonitor.cpp -SOURCE mpxusbeventhandler.cpp -SOURCE mpxmmcejectmonitor.cpp +SOURCE mpxconnectioneventhandler.cpp USERINCLUDE ../inc USERINCLUDE ../../inc @@ -57,6 +60,5 @@ LIBRARY mpxplaylistengine.lib LIBRARY mpxplaybackutility.lib LIBRARY usbman.lib -#ifdef RD_MULTIPLE_DRIVE LIBRARY PlatformEnv.lib -#endif //RD_MULTIPLE_DRIVE +LIBRARY disknotifyhandler.lib diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/inc/mpxconnectioneventhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/harvester/server/inc/mpxconnectioneventhandler.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,133 @@ +/* +* 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: Monitors USB events +* +*/ + + +#ifndef CMPXCONNECTIONEVENTHANDLER_H +#define CMPXCONNECTIONEVENTHANDLER_H + +#include +#include +#include "mpxsystemeventobserver.h" + +class CMPXPSKeyWatcher; + +/** + * USB Monitoring class + * + * @lib mpxharvesterserver.exe + * @since S60 3.0 + */ +NONSHARABLE_CLASS( CMPXConnectionEventHandler ) : public CActive, + public MMPXPSKeyObserver + { +public: + + /** + * Two-phase constructor + * @param aObserver observer to the event handler + */ + static CMPXConnectionEventHandler* NewL( MMPXSystemEventObserver& aObserver ); + + /** + * Two-phase constructor + * @param aObserver observer to the event handler + */ + static CMPXConnectionEventHandler* NewLC( MMPXSystemEventObserver& aObserver ); + + /** + * Virtual destructor + */ + virtual ~CMPXConnectionEventHandler(); + +public: + + /** + * Polls for the current monitor status + * If an event is happening, it will callback the observer of the event + */ + void PollStatus(); + +protected: // From Base Class + + /** + * From CActive + */ + void RunL(); + void DoCancel(); + + /** + * From MMPXPSKeyObserver + */ + void HandlePSEvent( TUid aUid, TInt aKey ); + +private: // New Methods + + /** + * Handle the PS Key event + * @param aUid UID of the key + * @param aKey ID of the key + */ + void DoHandlePSEventL( TUid aUid, TInt aKey ); + + void DoMSStartEventL(); + void DoMTPStartEventL(); + void DoMTPNotActiveEventL(); + + /** + * Connect to usbman. + * If error, default iDeviceState to EUsbDeviceStateConfigured so this would not + * block usb event mode change. + */ + void ConnectUsbMan(); + +private: + + /** + * C++ constructor + */ + CMPXConnectionEventHandler( MMPXSystemEventObserver& aObserver ); + + /* + * Second phased constructor + */ + void ConstructL(); + +private: // data + + enum TMPXConnectionState + { + EMPXConnectionNone, + EMPXConnectionMassStorage, + EMPXConnectionMTPIdle, + EMPXConnectionMTPActive + }; + + CMPXPSKeyWatcher* iUSBKeyWatcher; // PS key watcher for USB PS key + CMPXPSKeyWatcher* iMTPKeyWatcher; // PS key watcher for MTP PS key + + /* + * Observer interface to callback to an observer + */ + MMPXSystemEventObserver& iObserver; + TInt iState; + + RUsb iUsbMan; + TUsbDeviceState iDeviceState; + TBool iUsbManConnected; + }; + +#endif // CMPXCONNECTIONEVENTHANDLER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/inc/mpxharvesterengine.h --- a/mmappcomponents/harvester/server/inc/mpxharvesterengine.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/inc/mpxharvesterengine.h Wed Jun 23 17:51:16 2010 +0100 @@ -31,8 +31,7 @@ class CMPXHarvesterFileHandler; class CMPXFsFormatMonitor; class CMPXMediaRemovalMonitor; -class CMPXUsbEventHandler; -class CMPXMMCEjectMonitor; +class CMPXConnectionEventHandler; class CMPXMedia; class CMPXActiveTaskQueue; class CMPXPlaylistEngine; @@ -305,8 +304,7 @@ // Move to RPointerArrays of monitors in the future CMPXFsFormatMonitor* iFormatMonitor; CMPXMediaRemovalMonitor* iMediaRemovalMonitor; - CMPXUsbEventHandler* iUSBMonitor; - CMPXMMCEjectMonitor* iMMCMonitor; + CMPXConnectionEventHandler* iConnectionMonitor; // Internal task queue for async operations CMPXActiveTaskQueue* iTaskQueue; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h --- a/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/inc/mpxmediaremovalmonitor.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,21 +20,35 @@ #define CMPXMEDIAREMOVALMONITOR_H #include +#include #include "mpxsystemeventobserver.h" /** * Class to monitors for File System dismount events + * + * The monitor emits events to MMPXSystemEventObserver + * + * EDiskDismountEvent whenever a drive is about to be dismounted (see RFs::NotifyDismount). + * EDiskRemovedEvent whenever a specified drive has been dismounted or removed + * EDiskInsertedEvent whenever a specified drive has been inserted + * + * The observer is expected to prepare the drive for dismounting during the EDiskDismountEvent. + * + * Dismount monitoring is automatically subscribed for all non-remote drives. + * Inserted/Removed monitor is subscribed only for the drive given in the constructor. + * * @lib Harvester * @since S60 3.0 */ -class CMPXMediaRemovalMonitor : public CActive +class CMPXMediaRemovalMonitor : public CBase, + public MDiskNotifyHandlerCallback { public: /** * Two-phase constructor - * @param aDrive drive to monitor + * @param aDrive drive to monitor for insertions and removals * @param aFs file server session * @param aObserver observer to the event */ @@ -55,24 +69,24 @@ * Virtual destructor */ virtual ~CMPXMediaRemovalMonitor(); - -protected: // From base class - /* - * From CActive + /** + * Check the status of the monitored disks + * + * This check should be done whenever there is a risk that we got + * a NotifyDismount even though the drives actually weren't dismounted. + * */ - void RunL(); - - /* - * From CActive - */ - void DoCancel(); + void CheckDriveStatus(); + +protected: // From Base Class /** - * From CActive + * From MDiskNotifyHandlerCallback */ - TInt RunError(TInt aError); - + void HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent ); + void HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent ); + private: /** @@ -89,6 +103,7 @@ private: // data + CDiskNotifyHandler* iDiskNotifyHandler; // Disk notification handler TInt iDrive; // Drive that is being monitored RFs& iFs; // File Session, not owned TBool iDiskRemoved; // Is the disk inserted diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/inc/mpxmmcejectmonitor.h --- a/mmappcomponents/harvester/server/inc/mpxmmcejectmonitor.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 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: MMC Eject monitor -* -*/ - - -#ifndef C_MPXMMCEJECTMONITOR_H -#define C_MPXMMCEJECTMONITOR_H - -#include -#include "mpxsystemeventobserver.h" - -// FORWARD DECLARATIONS -class CMPXPSKeyWatcher; - -/** - * Monitors a SysAp cenrep key for the "eject" mmc menu option - * - * @lib mpxharvester.exe - * @since S60 3.1 - */ -NONSHARABLE_CLASS( CMPXMMCEjectMonitor ) : public CBase, - public MMPXPSKeyObserver - { - -public: - - /** - * Two-phased constructor - */ - static CMPXMMCEjectMonitor* NewL( MMPXSystemEventObserver& aObserver ); - - /** - * Destructor - */ - virtual ~CMPXMMCEjectMonitor(); - -protected: // From Base Class - - /** - * From MMPXPSKeyObserver - */ - void HandlePSEvent( TUid aUid, TInt aKey ); - -private: - - /** - * 2nd phase constructor - */ - void ConstructL(); - - /** - * Private Constructor - */ - CMPXMMCEjectMonitor( MMPXSystemEventObserver& aObserver ); - -private: // data - - CMPXPSKeyWatcher* iPSKeyWatcher; // PS key watcher for USB PS key - - /* - * Observer interface to callback to an observer - */ - MMPXSystemEventObserver& iObserver; // Not owned - }; - -#endif // C_MPXMMCEJECTMONITOR_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/inc/mpxusbeventhandler.h --- a/mmappcomponents/harvester/server/inc/mpxusbeventhandler.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/inc/mpxusbeventhandler.h Wed Jun 23 17:51:16 2010 +0100 @@ -113,7 +113,6 @@ */ MMPXSystemEventObserver& iObserver; TInt iState; - TBool iMTPActive; RUsb iUsbMan; TUsbDeviceState iDeviceState; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/src/mpxconnectioneventhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/harvester/server/src/mpxconnectioneventhandler.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,305 @@ +/* +* 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: Monitors for USB events +* +*/ + + +#include +#include +#include +#ifdef RD_MULTIPLE_DRIVE +#include +#endif //RD_MULTIPLE_DRIVE +#include +#include +#include +#include +#include +#include +#include "mpxconnectioneventhandler.h" + +// CONSTANTS +const TUint KUsbAllStates = 0xFFFFFFFF; + +// --------------------------------------------------------------------------- +// Default Constructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler::CMPXConnectionEventHandler( MMPXSystemEventObserver& aObserver ) : + CActive( EPriorityStandard ), + iObserver( aObserver ), + iState ( EMPXConnectionNone ), + iUsbManConnected( EFalse ) + + + { + CActiveScheduler::Add( this ); + } + + +// --------------------------------------------------------------------------- +// 2nd Phase Constructor +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::ConstructL() + { + MPX_DEBUG1(_L("CMPXConnectionEventHandler::ConstructL <---")); + iUSBKeyWatcher = CMPXPSKeyWatcher::NewL( KPSUidUsbWatcher, + KUsbWatcherSelectedPersonality, + this ); + + //for checking MTP status key whether a client has started + iMTPKeyWatcher = CMPXPSKeyWatcher::NewL( KMtpPSUid, + KMtpPSStatus, + this ); + + // Connect to usbman + ConnectUsbMan(); + MPX_DEBUG1(_L("CMPXConnectionEventHandler::ConstructL --->")); + } + + +// --------------------------------------------------------------------------- +// Two Phased Constructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler* CMPXConnectionEventHandler::NewL + ( MMPXSystemEventObserver& aObserver ) + { + CMPXConnectionEventHandler* self = CMPXConnectionEventHandler::NewLC( aObserver ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Two Phased Constructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler* CMPXConnectionEventHandler::NewLC + ( MMPXSystemEventObserver& aObserver ) + + { + CMPXConnectionEventHandler* self = new( ELeave ) CMPXConnectionEventHandler( aObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler::~CMPXConnectionEventHandler() + { + Cancel(); + if ( iUsbManConnected ) + { + iUsbMan.Close(); + } + delete iUSBKeyWatcher; + delete iMTPKeyWatcher; + } + +// --------------------------------------------------------------------------- +// Poll for any ongoing USB / MTP event +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::PollStatus() + { + // only call back on connection state != EMPXConnectionNone + if (iState == EMPXConnectionMassStorage) + { + TRAP_IGNORE( DoMSStartEventL() ); + } + else if (iState == EMPXConnectionMTPActive) + { + TRAP_IGNORE( DoMTPStartEventL() ); + } + else if (iState == EMPXConnectionMTPIdle) + { + TRAP_IGNORE( DoMTPNotActiveEventL() ); + } + } + +// --------------------------------------------------------------------------- +// Handle the PS key event +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::HandlePSEvent( TUid aUid, TInt aKey ) + { + TRAP_IGNORE( DoHandlePSEventL(aUid,aKey) ); + } + +// --------------------------------------------------------------------------- +// Handle the PS key event +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::DoHandlePSEventL( TUid /*aUid*/, TInt /*aKey*/ ) + { + MPX_FUNC("CMPXConnectionEventHandler::DoHandlePSEvent()"); + if ( !iUsbManConnected ) + { + ConnectUsbMan(); + } + + // Handle the Key event + TInt usbStatus; + iUSBKeyWatcher->GetValue( usbStatus ); + + TInt mtpStatus; + iMTPKeyWatcher->GetValue(mtpStatus); + + MPX_DEBUG3("CMPXConnectionEventHandler::DoHandlePSEventL, usbStatus = %d, mtpStatus = %d", usbStatus, mtpStatus); + MPX_DEBUG2("CMPXConnectionEventHandler::DoHandlePSEventL, iState = %d", iState); + MPX_DEBUG4("CMPXConnectionEventHandler::DoHandlePSEventL, iDeviceState = %d, EUsbDeviceStateAddress(%d), EUsbDeviceStateConfigured(%d)", iDeviceState, EUsbDeviceStateAddress, EUsbDeviceStateConfigured); + + // events from lower level is not causing multiple callback on the same type + // usb is really only connected if went through Address or Configured state + if( (usbStatus == KUsbPersonalityIdMS) && (iDeviceState == EUsbDeviceStateAddress || iDeviceState == EUsbDeviceStateConfigured)) + { + if ((iState == EMPXConnectionMTPIdle) || (iState == EMPXConnectionMTPActive)) + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - MTP End"); + iObserver.HandleSystemEventL( EUSBMTPEndEvent, -1 ); + iState = EMPXConnectionNone; + } + + if (iState != EMPXConnectionMassStorage) + { + DoMSStartEventL(); + } + } + else if (iState == EMPXConnectionMassStorage) + { + if (usbStatus != KUsbPersonalityIdMS) + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - USB MassStorage End"); + iObserver.HandleSystemEventL( EUSBMassStorageEndEvent, -1 ); + iState = EMPXConnectionNone; + } + } + + // after MassStorage End, it is possible that MTP is still connected + if (iState != EMPXConnectionMassStorage) + { + if ((mtpStatus == EMtpPSStatusUninitialized) && (iState != EMPXConnectionNone)) + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - MTP End"); + iObserver.HandleSystemEventL( EUSBMTPEndEvent, -1 ); + iState = EMPXConnectionNone; + } + else if ((mtpStatus == EMtpPSStatusActive) && (iState != EMPXConnectionMTPActive) + && ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP))) // only trigger MusicPlayer fully block and RAM Drive if USB MTP/PCSuiteMTP is connected + { + DoMTPStartEventL(); + } + else if ((mtpStatus == EMtpPSStatusReadyToSync) && (iState != EMPXConnectionMTPIdle) && (iState != EMPXConnectionMTPActive)) + { + DoMTPNotActiveEventL(); + } + } + } + +void CMPXConnectionEventHandler::DoMSStartEventL() + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoMSStartEventL - USB MassStorage Start"); + iObserver.HandleSystemEventL( EUSBMassStorageStartEvent, -1 ); + iState = EMPXConnectionMassStorage; + } + +void CMPXConnectionEventHandler::DoMTPStartEventL() + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoMTPStartEventL - MTP Start"); + iObserver.HandleSystemEventL( EUSBMTPStartEvent, -1 ); + iState = EMPXConnectionMTPActive; + } + +void CMPXConnectionEventHandler::DoMTPNotActiveEventL() + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoMTPNotActiveEventL - MTP Not Active"); + iObserver.HandleSystemEventL( EUSBMTPNotActiveEvent, -1 ); + iState = EMPXConnectionMTPIdle; + } + +// --------------------------------------------------------------------------- +// CMPXConnectionEventHandler::RunL +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::RunL() + { + MPX_FUNC("CMPXConnectionEventHandler::RunL()"); + TInt status( iStatus.Int() ); + + MPX_DEBUG2("CMPXConnectionEventHandler::RunL status=%d", status ); + if ( status != KErrCancel && status != KErrServerTerminated ) + { + iUsbMan.DeviceStateNotification( KUsbAllStates, iDeviceState, iStatus ); + SetActive(); + } + + if ( status == KErrNone ) + { + MPX_DEBUG2("CMPXConnectionEventHandler::RunL - DeviceState = %d", iDeviceState); + HandlePSEvent( TUid::Uid(0), 0 ); + } + } + +// --------------------------------------------------------------------------- +// CMPXConnectionEventHandler::DoCancel +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::DoCancel() + { + MPX_FUNC("CMPXConnectionEventHandler::DoCancel()"); + if ( iUsbManConnected ) + { + iUsbMan.DeviceStateNotificationCancel(); + } + } + +// --------------------------------------------------------------------------- +// CMPXConnectionEventHandler::ConnectUsbMan +// If error, default iDeviceState to EUsbDeviceStateConfigured so this would not +// block usb event mode change. +// --------------------------------------------------------------------------- +void CMPXConnectionEventHandler::ConnectUsbMan() + { + MPX_FUNC("CMPXConnectionEventHandler::ConnectUsbMan()"); + if ( iUsbMan.Connect() == KErrNone ) + { + iUsbManConnected = ETrue; + // get device state + TInt err = iUsbMan.GetDeviceState( iDeviceState ); + if ( err ) + { + iDeviceState = EUsbDeviceStateUndefined; + } + + // start active object + if ( !IsActive() ) + { + iUsbMan.DeviceStateNotification( KUsbAllStates, iDeviceState, iStatus ); + SetActive(); + } + } + else + { + iDeviceState = EUsbDeviceStateConfigured; + } + } +// END OF FILE + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp --- a/mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/src/mpxfsformatmonitor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,17 +18,11 @@ #include #include -#ifdef RD_MULTIPLE_DRIVE #include -#endif //RD_MULTIPLE_DRIVE #include #include "mpxfsformatmonitor.h" -#ifdef RD_MULTIPLE_DRIVE - static const TInt KDriveCount = 2; -#else - static const TInt KDriveCount = 1; -#endif +static const TInt KDriveCount = 2; // ======== MEMBER FUNCTIONS ======== @@ -142,6 +136,12 @@ } else // TOperationType::EEnd or TOperationType::EAbort { + //Ignore if formatting is ongoing + TBool formatting = iBackupSession->IsBackupOperationRunning(); + if ( formatting ) + { + return; + } for(TInt i=0; i -#ifdef RD_MULTIPLE_DRIVE #include -#endif //RD_MULTIPLE_DRIVE #include #include #include @@ -37,8 +35,7 @@ #include "mpxharvesterengine.h" #include "mpxfsformatmonitor.h" #include "mpxmediaremovalmonitor.h" -#include "mpxusbeventhandler.h" -#include "mpxmmcejectmonitor.h" +#include "mpxconnectioneventhandler.h" #include "mpxharvesterfilehandler.h" #include "mpxharvesterengineobserver.h" #include "mpxhvsmsg.h" @@ -63,8 +60,7 @@ delete iFormatMonitor; delete iMediaRemovalMonitor; - delete iUSBMonitor; - delete iMMCMonitor; + delete iConnectionMonitor; delete iFileHandler; iFsSession.Close(); @@ -99,19 +95,15 @@ // MMC Removal monitor for Removable Drive TInt removableDrive( EDriveE ); -#ifdef RD_MULTIPLE_DRIVE User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, removableDrive ) ); -#endif // RD_MULTIPLE_DRIVE iMediaRemovalMonitor = CMPXMediaRemovalMonitor::NewL( removableDrive, iFsSession, *this ); - // USB Event monitor - iUSBMonitor = CMPXUsbEventHandler::NewL( *this ); + // Connection Event monitor + iConnectionMonitor = CMPXConnectionEventHandler::NewL( *this ); - // MMC Event handling - iMMCMonitor = CMPXMMCEjectMonitor::NewL( *this ); // File handler to handle file related events iFileHandler = CMPXHarvesterFileHandler::NewL( iFsSession ); @@ -434,7 +426,7 @@ // wont be able to open the db anyways. // iFormatMonitor->PollStatus(); - iUSBMonitor->PollStatus(); + iConnectionMonitor->PollStatus(); } // --------------------------------------------------------------------------- @@ -445,6 +437,26 @@ TInt aData ) { MPX_DEBUG2("CMPXHarvesterEngine::HandleSystemEventL %i <---", aEvent); + + if( !iTempCollectionUtil ) + { + iTempCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMcModeDefault ); + } + + // Must close collections ASAP in case drives may dismount soon + TRAP_IGNORE( + if (aEvent == EUSBMassStorageStartEvent) + { + DoStopPlaybackL(); + iTempCollectionUtil->Collection().CommandL ( EMcCloseCollection, -1 ); + iFileHandler->HandleSystemEventL ( EDiskDismountEvent, -1 ); + } + else if ( aEvent == EDiskDismountEvent ) + { + DoStopPlaybackL(); + iTempCollectionUtil->Collection().CommandL ( EMcCloseCollection, aData ); + } + ); // The engine is a delegator, it sends the events to // different classes to do the actual work @@ -455,14 +467,17 @@ TBool notify(ETrue); switch( aEvent ) { - case EPowerKeyEjectEvent: + case EDiskDismountEvent: { notify=EFalse; - TRAP_IGNORE( DoStopPlaybackL() ); break; } + case EUSBMassStorageStartEvent: + { + iDiskOpActive = ETrue; + } + break; case EFormatStartEvent: - case EUSBMassStorageStartEvent: // deliberate fall through case EUSBMTPStartEvent: // deliberate fall through case EDiskInsertedEvent: // deliberate fall through case EDiskRemovedEvent: // deliberate fall through @@ -470,11 +485,6 @@ iDiskOpActive = ETrue; TRAP_IGNORE( DoStopPlaybackL() ); } - default: //lint !e616 !e825 - if( !iTempCollectionUtil ) - { - iTempCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMcModeDefault ); - } break; } @@ -514,6 +524,15 @@ iTempCollectionUtil = NULL; } } + + if ( aEvent == EUSBMassStorageEndEvent ) + { + // In some cases visit to USB Mass Storage mode can be so brief + // that drives are actually not dismounted at all even though we + // get a NotifyDismount event. In such cases we need to re-issue + // the NotifyDismount requests. + iMediaRemovalMonitor->CheckDriveStatus(); + } } // --------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/src/mpxharvesterserver.cpp --- a/mmappcomponents/harvester/server/src/mpxharvesterserver.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/src/mpxharvesterserver.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -71,9 +71,9 @@ CMPXHarvesterServer* server = CMPXHarvesterServer::NewL(); CleanupStack::PushL(server); RProcess::Rendezvous(KErrNone); - CActiveScheduler::Start(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(server); CActiveScheduler::Install(NULL); - CleanupStack::PopAndDestroy(server); CleanupStack::PopAndDestroy(scheduler); } @@ -119,7 +119,7 @@ { iEngine = CMPXHarvesterEngine::NewL(); StartL(KMPXHarvesterServerName); - RProcess().SetPriority(::EPriorityLow); + RProcess().SetPriority(::EPriorityBackground); } // ---------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp --- a/mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/src/mpxmediaremovalmonitor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,6 +18,7 @@ #include #include +#include #include #include "mpxmediaremovalmonitor.h" @@ -27,14 +28,12 @@ // CMPXMediaRemovalMonitor::CMPXMediaRemovalMonitor ( TInt aDrive, RFs& aFs, MMPXSystemEventObserver& aObserver ) - : CActive(EPriorityHigh), - iDrive( aDrive ), + : iDrive( aDrive ), iFs( aFs ), iDiskRemoved( EFalse ), iObserver( aObserver ) { - CActiveScheduler::Add(this); } @@ -44,19 +43,11 @@ // void CMPXMediaRemovalMonitor::ConstructL() { - MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::ConstructL <---")); + MPX_FUNC("CMPXMediaRemovalMonitor::ConstructL"); + iDiskNotifyHandler = CDiskNotifyHandler::NewL(*this, iFs); + CheckDriveStatus(); - // Initial state - TDriveInfo drive; - User::LeaveIfError(iFs.Drive(drive, TInt(iDrive))); - iDiskRemoved = (drive.iType == EMediaNotPresent); - - // Start listening - TNotifyType notType(ENotifyDisk); - iFs.NotifyChange( notType, iStatus ); - SetActive(); - - MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::ConstructL --->")); + iDiskNotifyHandler->NotifyDisk(); } @@ -99,74 +90,95 @@ // CMPXMediaRemovalMonitor::~CMPXMediaRemovalMonitor() { - Cancel(); + delete iDiskNotifyHandler; + } + +void CMPXMediaRemovalMonitor::CheckDriveStatus() + { + TDriveList driveList; + TInt driveCount(0); + TInt error = DriveInfo::GetUserVisibleDrives( iFs, driveList, driveCount ); + if ( error != KErrNone ) + { + MPX_DEBUG2("CMPXMediaRemovalMonitor::CheckDriveStatus GetUserVisibleDrives failed, error %d", error); + return; + } + for( TInt driveNum = EDriveA; driveNum < EDriveZ; driveNum++ ) + { + if ( driveNum != EDriveC && driveList[driveNum] ) + { + TDriveInfo driveInfo; + if (iFs.Drive(driveInfo, driveNum) == KErrNone) + { + if ( (driveInfo.iType != EMediaNotPresent) && ! (driveInfo.iDriveAtt & KDriveAttRemote) ) + { + TInt error = iDiskNotifyHandler->NotifyDismount( driveNum ); + MPX_DEBUG3("CMPXMediaRemovalMonitor::CheckDriveStatus monitoring drive %d for dismounts, error %d", driveNum, error); + } + } + if ( driveNum == iDrive ) + { + iDiskRemoved = driveInfo.iType == EMediaNotPresent; + } + } + } } - // --------------------------------------------------------------------------- -// Service the request +// Callback when disk state has changed // --------------------------------------------------------------------------- // -void CMPXMediaRemovalMonitor::RunL() +void CMPXMediaRemovalMonitor::HandleNotifyDisk( TInt aError, const TDiskEvent& aEvent ) { - MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::RunL <---")); - - // Re-subscribe to event. - TNotifyType notType(ENotifyDisk); - iFs.NotifyChange( notType, iStatus ); - SetActive(); - - // Check state - TDriveInfo drive; - User::LeaveIfError(iFs.Drive(drive, TInt(iDrive))); - - // Notify Observer - switch(drive.iType) - { - case EMediaNotPresent: - { - if (!iDiskRemoved) + MPX_DEBUG4("-->CMPXMediaRemovalMonitor::HandleNotifyDisk aError=%d event=%d drive=%d", aError, aEvent.iType, aEvent.iDrive); + if ( aError == KErrNone ) + { + if ( aEvent.iType == EDiskRemoved + || aEvent.iType == EDiskStatusChanged && aEvent.iInfo.iType == EMediaNotPresent ) + { + if ( aEvent.iDrive == iDrive && !iDiskRemoved ) { iObserver.HandleSystemEventL( EDiskRemovedEvent, iDrive ); + iDiskRemoved = ETrue; } - iDiskRemoved = ETrue; - break; - } - default: - { - if ( iDiskRemoved && - ( drive.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) != - ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) + + } + else if ( ( aEvent.iType == EDiskAdded || aEvent.iType == EDiskStatusChanged ) + && aEvent.iInfo.iType != EMediaNotPresent ) + { + if ( aEvent.iDrive == iDrive + && iDiskRemoved + && ( aEvent.iInfo.iMediaAtt & ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) + != ( KMediaAttLockable|KMediaAttLocked|KMediaAttHasPassword ) ) { iObserver.HandleSystemEventL( EDiskInsertedEvent, iDrive ); iDiskRemoved = EFalse; } - break; - } + + if ( !( aEvent.iInfo.iDriveAtt & KDriveAttRemote ) ) + { + TInt error = iDiskNotifyHandler->NotifyDismount( aEvent.iDrive ); + MPX_DEBUG3("CMPXMediaRemovalMonitor::HandleNotifyDisk monitoring drive %d for dismounts, error %d", aEvent.iDrive, error); + } + } } - + + MPX_DEBUG1("<--CMPXMediaRemovalMonitor::HandleNotifyDisk"); + } - MPX_DEBUG1(_L("CMPXMediaRemovalMonitor::RunL --->")); - } // --------------------------------------------------------------------------- -// Cancel NotifyChange request from file system +// Callback when disk is about to be dismounted // --------------------------------------------------------------------------- // -void CMPXMediaRemovalMonitor::DoCancel() +void CMPXMediaRemovalMonitor::HandleNotifyDismount( TInt aError, const TDismountEvent& aEvent ) { - iFs.NotifyChangeCancel(); + MPX_DEBUG3("-->CMPXMediaRemovalMonitor::HandleNotifyDismount aError=%d drive=%d", aError, aEvent.iDrive); + if (aError == KErrNone) + { + TRAP_IGNORE( iObserver.HandleSystemEventL( EDiskDismountEvent, aEvent.iDrive ) ); + TInt error = iDiskNotifyHandler->AllowDismount( aEvent.iDrive ); + MPX_DEBUG3("CMPXMediaRemovalMonitor::HandleNotifyDismount allowed dismount of drive %d, error %d", aEvent.iDrive, error); + } + MPX_DEBUG1("<--CMPXMediaRemovalMonitor::HandleNotifyDismount"); } - -// ---------------------------------------------------------------------------- -// Handles a leave occurring in the request completion event handler RunL() -// Don't care if client has a User::Leave() in RunL(), keep monitoring for events -// ---------------------------------------------------------------------------- -// -TInt CMPXMediaRemovalMonitor::RunError(TInt aError) - { - MPX_DEBUG2("CMPXMediaRemovalMonitor::RunError(%d)", aError ); - (void) aError; // avoid compile warning in urel - - return KErrNone; - } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/src/mpxmmcejectmonitor.cpp --- a/mmappcomponents/harvester/server/src/mpxmmcejectmonitor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* -* Copyright (c) 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: Monitor for PS Key changes from SysAp ( ME specific ) -* -*/ - - -#include -#include -#include -#include -#include "mpxmmcejectmonitor.h" - -// CONSTANTS -const TUid KMmcEjectAppUid = { 0x101FFAFC }; -const TUint KKeyMmcEjectOperation = 10; - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CMPXMMCEjectMonitor::CMPXMMCEjectMonitor( MMPXSystemEventObserver& aObserver ) : - iObserver( aObserver ) - { - - } - - -// --------------------------------------------------------------------------- -// 2nd phased Constructor -// --------------------------------------------------------------------------- -// -void CMPXMMCEjectMonitor::ConstructL() - { - MPX_DEBUG1(_L("CMPXMMCEjectMonitor::ConstructL <---")); - - iPSKeyWatcher = CMPXPSKeyWatcher::NewL( KMmcEjectAppUid, - KKeyMmcEjectOperation, - this ); - MPX_DEBUG1(_L("CMPXMMCEjectMonitor::ConstructL --->")); - } - - -// --------------------------------------------------------------------------- -// Two-Phase Constructor -// --------------------------------------------------------------------------- -// -CMPXMMCEjectMonitor* CMPXMMCEjectMonitor::NewL( MMPXSystemEventObserver& aObserver ) - { - CMPXMMCEjectMonitor* self = new( ELeave ) CMPXMMCEjectMonitor( aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CMPXMMCEjectMonitor::~CMPXMMCEjectMonitor() - { - delete iPSKeyWatcher; - } - -// --------------------------------------------------------------------------- -// Callback when a cenrep key is modified -// --------------------------------------------------------------------------- -// -void CMPXMMCEjectMonitor::HandlePSEvent( TUid /*aUid*/, TInt /*aKey*/ ) - { - MPX_DEBUG1(_L("CMPXMMCEjectMonitor::HandlePSEvent <---")); - TInt value; - iPSKeyWatcher->GetValue( value ); - - // MMC About to be ejected from power key menu - // - if( value == 1 ) - { - TRAP_IGNORE( iObserver.HandleSystemEventL( EPowerKeyEjectEvent, 0 ) ); - } - MPX_DEBUG1(_L("CMPXMMCEjectMonitor::HandlePSEvent --->")); - } - -// END OF FILE diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp --- a/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -19,14 +19,12 @@ #include #include #include -#ifdef RD_MULTIPLE_DRIVE #include -#endif //RD_MULTIPLE_DRIVE #include #include #include #include -#include +#include #include #include "mpxusbeventhandler.h" @@ -41,7 +39,6 @@ CActive( EPriorityStandard ), iWasMtp ( EFalse ), iObserver( aObserver ), - iMTPActive ( EFalse ), iUsbManConnected( EFalse ) { CActiveScheduler::Add( this ); @@ -152,11 +149,9 @@ // Use the default MMC drive TInt removableDrive( EDriveE ); -#ifdef RD_MULTIPLE_DRIVE User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, removableDrive ) ); -#endif // RD_MULTIPLE_DRIVE // Handle the Key event TInt value; @@ -175,12 +170,9 @@ { MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP End"); iObserver.HandleSystemEventL( EUSBMTPEndEvent, removableDrive ); - iMTPActive = EFalse; } MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - USB Start"); -#ifdef RD_MULTIPLE_DRIVE removableDrive = -1; -#endif // RD_MULTIPLE_DRIVE // Notify the state change (may happen more than once) iObserver.HandleSystemEventL( EUSBMassStorageStartEvent, removableDrive ); @@ -199,20 +191,15 @@ if (value == EMtpPSStatusActive) { - if( !iMTPActive ) - { - MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Start"); - iObserver.HandleSystemEventL( EUSBMTPStartEvent, removableDrive ); - iState = KUsbPersonalityIdMTP; - iMTPActive = ETrue; - } + MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Start"); + iObserver.HandleSystemEventL( EUSBMTPStartEvent, removableDrive ); + iState = KUsbPersonalityIdMTP; } else if( value != EMtpPSStatusReadyToSync ) { MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP Not Active"); iObserver.HandleSystemEventL( EUSBMTPNotActiveEvent, removableDrive ); iState = KUsbPersonalityIdMTP; - iMTPActive = EFalse; } } // Make sure MTP and MS flags are OFF @@ -231,7 +218,6 @@ { MPX_DEBUG1("CMPXUsbEventHandler::DoHandlePSEvent - MTP End"); iObserver.HandleSystemEventL( EUSBMTPEndEvent, removableDrive ); - iMTPActive = EFalse; } iState = KUsbWatcherSelectedPersonalityNone; } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp --- a/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mediaplayersettingsengine/group/MPSettEng.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -15,15 +15,15 @@ * */ -// Version : %version: 4.1.2 % - +// Version : %version: 4.1.6 % #include + TARGET mpsettengine.dll TARGETTYPE dll UID 0x1000006C 0x101F853D -VENDORID VID_DEFAULT +VENDORID VID_DEFAULT SOURCEPATH ../src SOURCE MPSettingsModel.cpp @@ -34,16 +34,15 @@ LIBRARY euser.lib LIBRARY ecom.lib -LIBRARY flogger.lib #if defined(ARMCC) -deffile ../eabi/ +deffile ../eabi/ #elif defined(WINSCW) -deffile ../bwinscw/ +deffile ../bwinscw/ #elif defined(WINS) -deffile ../bwins/ +deffile ../bwins/ #else -deffile ../bmarm/ +deffile ../bmarm/ #endif //end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h --- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h Wed Jun 23 17:51:16 2010 +0100 @@ -19,11 +19,6 @@ #ifndef CMMMTPDPACCESSSINGLETON_H #define CMMMTPDPACCESSSINGLETON_H -/** -* Implements the MM MTP Data Priovider access singletons reference manager. -*/ - -class RFs; class CMmMtpDpMetadataAccessWrapper; class MMTPDataProviderFramework; @@ -36,8 +31,7 @@ * @param aRFs RFs reference * @param aFramework framework reference */ - IMPORT_C static void CreateL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ); + IMPORT_C static void CreateL( MMTPDataProviderFramework& aFramework ); /** * release singleton instance @@ -59,6 +53,18 @@ */ IMPORT_C static void CloseSessionL(); + /** + * Issue ActiveToIdle Status Change (ActiveObject) + * this function is to be called after an MTP operation is finish to change status from Active to Idle + * observer of the status might not get the notification if idle->active->idle happens in one synchronous operation + */ + IMPORT_C static void ActiveToIdleStatusChange(); + + /** + * Cancel Outstanding ActiveToIdle Status Change + */ + IMPORT_C static void CancelActiveToIdleStatusChange(); + private: /* * get singleton instance, for internal use @@ -68,21 +74,32 @@ /* * 2-phase construction */ - static CMmMtpDpAccessSingleton* NewL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ); + static CMmMtpDpAccessSingleton* NewL( MMTPDataProviderFramework& aFramework ); /* * 2-phase construction */ - void ConstructL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ); + void ConstructL( MMTPDataProviderFramework& aFramework ); /* * destruction */ ~CMmMtpDpAccessSingleton(); + /** + * get DelayStatusChanger instance, internal use only + */ + static CIdle* DelayStatusChanger(); + + /** + * Perform actural ActiveToIdle Status Change after active object callback + */ + static TInt DoActiveToIdleStatusChange(TAny* Any); + private: CMmMtpDpMetadataAccessWrapper* iWrapper; + + CIdle* iDelayStatusChanger; + }; #endif // CMMMTPDPACCESSSINGLETON_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h --- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadataaccesswrapper.h Wed Jun 23 17:51:16 2010 +0100 @@ -19,10 +19,8 @@ #ifndef CMMMTPDPMETADATAACCESSWRAPPER_H #define CMMMTPDPMETADATAACCESSWRAPPER_H -#include -#include #include -#include +#include // forward declacration class CMmMtpDpMetadataMpxAccess; @@ -30,16 +28,15 @@ class RFs; class MMTPType; -class CMTPTypeObjectPropList; class CMPXMediaArray; class CMPXMedia; class MMTPDataProviderFramework; +class CMTPObjectMetaData; class CMmMtpDpMetadataAccessWrapper : public CBase { public: - static CMmMtpDpMetadataAccessWrapper* NewL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ); + static CMmMtpDpMetadataAccessWrapper* NewL( MMTPDataProviderFramework& aFramework ); /** * Destructor @@ -48,42 +45,37 @@ public: /** - * Get all playlists from MPX database in the assigned store - * @param aStoreRoot, specify in which drive playlists are stored - * @param aPlaylists, return result array + * Get all abstract medias from MPX database in the assigned store + * @param aStoreRoot, specify in which drive abstract medias are stored + * @param aAbstractMedias, return result array + * @param aCategory, indicate the category of abstract medias */ - IMPORT_C void GetAllPlaylistL( const TDesC& aStoreRoot, - CMPXMediaArray** aPlaylists ); + IMPORT_C void GetAllAbstractMediaL( const TDesC& aStoreRoot, + CDesCArray& aAbstractMedias, + TMPXGeneralCategory aCategory ); /** - * Get all references of specified playlist - * @param aPlaylist, specify of which reference should be get + * Get all references of specified abstract medias + * @param aAbstractMedia, specify of which reference should be get * @param aReferences, return result array which stored handles of all references */ - IMPORT_C void GetAllReferenceL( CMPXMedia* aPlaylist, + IMPORT_C void GetAllReferenceL( const CMTPObjectMetaData& aRefOwner, CDesCArray& aReferences ); /** - * Get an playlist name from CMPXMedia object - * @param aPlaylist, specify the source - * @param aPlaylistName, return result - */ - IMPORT_C void GetPlaylistNameL( CMPXMedia* aPlaylist, TDes& aPlaylistName ); - - /** - * Add object (music, video and playlist) info to DB + * Add object (music, video, playlist and abstract album) info to DB * @param aFullFileName, full file name of file * @return void */ - void AddObjectL( const TDesC& aFullFileName, TBool aIsVideo = EFalse ); + IMPORT_C void AddObjectL( const CMTPObjectMetaData& aObject ); /** - * Set playlist to DB - * @param aPlaylistFileName, full file name of playlist file + * Set abstract media to DB + * @param aObject, * @param aRefFileArray, a array to store the full file name of media files * @return void */ - IMPORT_C void SetPlaylistL( const TDesC& aPlaylistFileName, + IMPORT_C void SetReferenceL( const CMTPObjectMetaData& aObject, CDesCArray& aRefFileArray ); /** @@ -114,18 +106,17 @@ /** * Renames the file part of a record in the collection database - * @param aFile, old full file name of Media file + * @param aOldObject, object need to be renamed * @param aNewFileName, new file name need update * @return void */ - IMPORT_C void RenameObjectL( const TDesC& aOldFileName, const TDesC& aNewFileName ); + IMPORT_C void RenameObjectL( const CMTPObjectMetaData& aOldObject, const TDesC& aNewFileName ); /** * Deletes metadata information associated with the object - * @param aFullFileName, full file name of Media file - * @param aFormatCode, format code + * @param aObject, the object need to be deleted */ - void DeleteObjectL( const TDesC& aFullFileName, const TUint aFormatCode ); + IMPORT_C void DeleteObjectL( const CMTPObjectMetaData& aObject ); /** * Set current drive info @@ -139,9 +130,9 @@ * @param aWidth, the width of an object in pixels to set * @parem aHeight, the height of an object in pixels to set */ - void SetImageObjPropL( const TDesC& aFullFileName, - const TUint32 aWidth, - const TUint32 aHeight ); + void SetImageObjPropL( const CMTPObjectMetaData& aObject, + const TUint32 aWidth, + const TUint32 aHeight ); /* * get image specific properties specific to videos @@ -149,10 +140,10 @@ * @param aWidth, the width of an object in pixels to get * @parem aHeight, the height of an object in pixels to get */ - void GetImageObjPropL( const TDesC& aFullFileName, - TUint32& aWidth, - TUint32& aHeight ); - + void GetImageObjPropL( const CMTPObjectMetaData& aObject, + TUint32& aWidth, + TUint32& aHeight ); + /** * Get Modified object from DB * @param aStorageRoot, the root path of storage @@ -160,16 +151,17 @@ * @param aRefFileArray, a array to store the full file name of media files * @return void */ - IMPORT_C void GetModifiedContentL( const TDesC& aStorageRoot, + IMPORT_C void GetModifiedContentL( const TDesC& aStorageRoot, TInt& arrayCount, CDesCArray& aRefFileArray ); - + /** * Updated Music DB + * @param aStorageRoot, the root path of storage * @return void */ - IMPORT_C void UpdateMusicCollectionL(); - + IMPORT_C void UpdateMusicCollectionL( const TDesC& aStorageRoot ); + /* * Called when the MTP session is initialised */ @@ -179,59 +171,61 @@ * clean up db resource especially for video dp */ void CloseSessionL(); - + /** * Cleanup database */ IMPORT_C void CleanupDatabaseL(); - + /** * if the playlsit exist in the MPX DB * @param aSuid, the suid of playlsit */ TBool IsExistL( const TDesC& aSuid ); - + // related to dummy files /** * Add one dummy file to dummy files array */ IMPORT_C void AddDummyFileL( const TDesC& aDummyFileName ); - + /** * Delete one dummy file from dummy files array - */ + */ IMPORT_C void DeleteDummyFile( const TDesC& aDummyFileName ); - + /** * Create a Dummy File from the virtual playlist URI * @param aPlaylistName, specify the filename of the dummy file */ IMPORT_C void CreateDummyFile( const TDesC& aPlaylistName ); - + + TMPXGeneralCategory Category( const CMTPObjectMetaData& aObject ); + private: - CMmMtpDpMetadataAccessWrapper( RFs& aRfs, MMTPDataProviderFramework& aFramework ); + CMmMtpDpMetadataAccessWrapper( MMTPDataProviderFramework& aFramework ); void ConstructL(); - TMPXGeneralCategory Category( const TUint aFormatCode ); - + TMPXGeneralCategory ContainerCategoryL( const TDesC& aFullFileName ); + /** * Remove all dummy file of which format is "pla", and leave the "m3u" */ void RemoveDummyFiles(); private: - // Data - RFs& iRfs; CMmMtpDpMetadataMpxAccess* iMmMtpDpMetadataMpxAccess; CMmMtpDpMetadataVideoAccess* iMmMtpDpMetadataVideoAccess; - TBool iOpenSession; - - MMTPDataProviderFramework& iFramework; - - CDesCArray* iPlaylistArray; - + + MMTPDataProviderFramework& iFramework; + RFs& iFs; // should not remove this member data!!! + + TInt iOpenCount; // introduce to fix CollectionHelper Flush problem + + CDesCArray* iAbstractMediaArray; + }; #endif // CMMMTPDPMETADATAACCESSWRAPPER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h --- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpmetadatampxaccess.h Wed Jun 23 17:51:16 2010 +0100 @@ -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: Meta data Mpx access -* -*/ - + * 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: Meta data Mpx access + * + */ #ifndef CMMMTPDPMETADATAMPXACCESS_H #define CMMMTPDPMETADATAMPXACCESS_H @@ -23,16 +22,6 @@ #include "cmmmtpdpperflog.h" -// keep here to avoid warning on urel -_LIT( KMpxCollectionNewL, "MpxCollectionNewL" ); -_LIT( KMpxCollectionAddL, "MpxCollectionAddL" ); -_LIT( KMpxCollectionGetL, "MpxCollectionGetL" ); -_LIT( KMpxCollectionSetL, "MpxCollectionSetL" ); -_LIT( KMpxCollectionGetPlaylist, "MpxCollectionGetPlaylist" ); -_LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" ); -_LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" ); -_LIT( KMpxCollectionFindAllLBeforeAdd, "KMpxCollectionFindAllLBeforeAdd" ); - // forward declacration class CMPXMedia; class CMTPObjectMetaData; @@ -50,170 +39,175 @@ } TMetadataTable; /** -* Controls access to the music MPX store database. Allows access to the -* information about any of the music stored in any of the MPX db's on any -* of the drives. Also supports deletions and insertions into the db. -*/ + * Controls access to the music MPX store database. Allows access to the + * information about any of the music stored in any of the MPX db's on any + * of the drives. Also supports deletions and insertions into the db. + */ class CMmMtpDpMetadataMpxAccess : public CBase { public: - static CMmMtpDpMetadataMpxAccess* NewL( RFs& aRfs, MMTPDataProviderFramework& aFramework ); + static CMmMtpDpMetadataMpxAccess* NewL( RFs& aRfs ); /** - * Destructor - */ + * Destructor + */ ~CMmMtpDpMetadataMpxAccess(); public: /** - * Get all playlists from MPX database in the assigned store - * @param aStoreRoot, specify in which drive playlists are stored - * @param aPlaylists, return result array - */ - void GetAllPlaylistL( const TDesC& aStoreRoot, CMPXMediaArray** aPlaylists ); + * OpenSession, introduce to fix CollectionHelper Flush problem + */ + void OpenSession(); + + /** + * CloseSession, introduce to fix CollectionHelper Flush problem + */ + void CloseSession(); /** - * Get all references of specified playlist - * @param aPlaylist, specify of which reference should be get - * @param aReferences, return result array which stored handles of all references - */ - void GetAllReferenceL( CMPXMedia* aPlaylist, CDesCArray& aReferences ); + * Get all abstract medias from MPX database in the assigned store + * @param aStoreRoot, specify in which drive abstract medias are stored + * @param aAbstractMedias, return result array + * @param aCategory, indicate the category of abstract medias + */ + void GetAllAbstractMediaL( const TDesC& aStoreRoot, + CDesCArray& aAbstractMedias, + TMPXGeneralCategory aCategory ); /** - * Get an playlist name from CMPXMedia object - * @param aPlaylist, specify the source - * @param aPlaylistName, return result - */ - void GetPlaylistNameL( CMPXMedia* aPlaylist, TDes& aPlaylistName ); + * Get all references of specified abstract media + * @param aAbstractMedia, specify of which reference should be get + * @param aReferences, return result array which stored handles of all references + */ + void GetAllReferenceL( const TDesC& aRefOwnerSuid, + TMPXGeneralCategory aCategory, + CDesCArray& aReferences ); /** - * Adds Songs info to Mpx DB - * @param aFullFileName, full file name of Media file - */ + * Adds Songs info to Mpx DB + * @param aFullFileName, full file name of Media file + */ void AddSongL( const TDesC& aFullFileName ); /** - * Adds Playlist to Mpx DB - * @param aFullFileName, full file name of Playlist file - */ - void AddPlaylistL( const TDesC& aFullFileName ); - - /** - * Set playlist to DB - * @param aPlaylistFileName, full file name of playlist file - * @param aRefFileArray, a array to store the full file name of media files - */ - void SetPlaylistL( const TDesC& aPlaylistFileName, - CDesCArray& aRefFileArray ); - - void GetObjectMetadataValueL( const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ); + * Adds abstract media to Mpx DB + * @param aFullFileName, full file name of abstract media file + * @param aCategory, indicate the category of abstract media + */ + void AddAbstractMediaL( const TDesC& aFullFileName, + TMPXGeneralCategory aCategory ); /** - * Set object property and updated object in DB according property code, - * only for update, not for creation - * @param aPropCode, property code of aObjectMetaData - * @param aNewData, object property value which will be set into - * aObjectMetaData - * @param aObjectMetaData, owner of the property which should be - * updated into database - */ - void SetObjectMetadataValueL( const TUint16 aPropCode, - const MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ); + * Set abstract media to DB + * @param aRefOwnerName, full file name of abstract media file + * @param aRefFileArray, a array to store the full file name of media files + * @param aCategory, indicate the category of abstract media + */ + void SetReferenceL( const TDesC& aRefOwnerName, + CDesCArray& aRefFileArray, + TMPXGeneralCategory aCategory ); + + void GetObjectMetadataValueL( const TUint16 aPropCode, + MMTPType& aNewData, + const TDesC& aFullFileName, + TMPXGeneralCategory aCategory ); /** - * Set object property and updated object in DB according property code, - * only for update, not for creation - * @param aPropCode, property code of aObjectMetaData - * @param aNewData, object property value which will be set into - * aObjectMetaData - * @param aSuid, full file name of object of which properties need to set - */ + * Set object property and updated object in DB according property code, + * only for update, not for creation + * @param aPropCode, property code of aObjectMetaData + * @param aNewData, object property value which will be set into + * aObjectMetaData + * @param aObjectMetaData, owner of the property which should be + * updated into database + */ void SetObjectMetadataValueL( const TUint16 aPropCode, - const MMTPType& aNewData, - const TDesC& aSuid ); + const MMTPType& aNewData, + const TDesC& aFullFileName, + TMPXGeneralCategory aCategory ); - CMPXMedia* FindWMPMediaLC( TMPXAttributeData aWMPMediaID, TBool aFlag ); + CMPXMedia* FindWMPMediaLC( TMPXAttributeData aWMPMediaID, + TBool aFlag ); /** - * Update the Sync flag for those not synchronized, Update the Modified - * flag for those have been modified, and delete the stale records for - * files that have been deleted. - */ + * Update the Sync flag for those not synchronized, Update the Modified + * flag for those have been modified, and delete the stale records for + * files that have been deleted. + */ void UpdateMusicCollectionL(); /** - * Remove the file from MPX DB - * @param aFullFileName, the file to remove - * @param aCategory, the category of the file - */ - void DeleteObjectL( const TDesC& aFullFileName, TMPXGeneralCategory aCategory ); + * Remove the file from MPX DB + * @param aFullFileName, the file to remove + * @param aCategory, the category of the file + */ + void DeleteObjectL( const TDesC& aFullFileName, + TMPXGeneralCategory aCategory ); /** - * Rename the filename onto MPX DB - * @param aOldFileName, the old file to rename - * @param aNewFileName, the new file name - * @param aFormatCode, the format of object - */ - void RenameObjectL( const TDesC& aOldFileName, const TDesC& aNewFileName, - TUint aFormatCode ); + * Rename the filename onto MPX DB + * @param aOldFileName, the old file to rename + * @param aNewFileName, the new file name + * @param aCategory, the category of object + */ + void RenameObjectL( const TDesC& aOldFileName, + const TDesC& aNewFileName, + TMPXGeneralCategory aCategory ); /** - * Set current drive info - * @param aStorageRoot, current drive info - */ + * Set current drive info + * @param aStorageRoot, current drive info + */ void SetStorageRootL( const TDesC& aStorageRoot ); /** - * Get modified content - * @param arrayCount, count of modified content - * @param aModifiedcontent, modified files name list - */ - void GetModifiedContentL( TInt& arrayCount, CDesCArray& aModifiedcontent ); - + * Get modified content + * @param arrayCount, count of modified content + * @param aModifiedcontent, modified files name list + */ + void GetModifiedContentL( TInt& arrayCount, + CDesCArray& aModifiedcontent ); + /** - * if the playlsit exist in the MPX DB - * @param aSuid, the suid of playlsit - */ + * if the playlsit exist in the MPX DB + * @param aSuid, the suid of playlsit + */ TBool IsExistL( const TDesC& aSuid ); private: - CMmMtpDpMetadataMpxAccess( RFs& aFs, MMTPDataProviderFramework& aFramework ); + CMmMtpDpMetadataMpxAccess( RFs& aFs ); void ConstructL(); void SetDefaultL( CMPXMedia& aMediaProp ); /** - * Set property value into MPX object according to property code, - * only used by member functions of this class. - * @param aPropCode, specify property code of aMediaProp - * @param aNewData, object property value which will be set into - * aObjectMetaData - * @param aObjectMetaData, owner of the property which should be - * inserted or updated into database - */ + * Set property value into MPX object according to property code, + * only used by member functions of this class. + * @param aPropCode, specify property code of aMediaProp + * @param aNewData, object property value which will be set into + * aObjectMetaData + * @param aObjectMetaData, owner of the property which should be + * inserted or updated into database + */ void SetMetadataValueL( const TUint16 aPropCode, - const MMTPType& aNewData, - CMPXMedia& aMediaProp ); + const MMTPType& aNewData, + CMPXMedia& aMediaProp ); - TMPXAttributeData MpxAttribFromPropL( const CMPXMedia& aMedia, - const TUint16 aPropCode ); + TMPXAttributeData MpxAttribFromPropL( const TUint16 aPropCode ); MMPXCollectionHelper* CollectionHelperL(); private: - // File server to allow file access RFs& iRfs; TBuf iStoreRoot; MMPXCollectionHelper* iCollectionHelper; - - MMTPDataProviderFramework& iFramework; + HBufC8* iSampleData; + + TBool iHasCleanUp; #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) CMmMtpDpPerfLog* iPerfLog; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.h --- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.h Wed Jun 23 17:51:16 2010 +0100 @@ -38,47 +38,46 @@ class TMmMtpDpOverflowHandler : public TDesOverflow { - public: - - inline void SetOwner( CMmMtpDpPerfLog* aOwner ); - inline void Overflow( TDes& aDes ); - - private: - - CMmMtpDpPerfLog* iOwner; +public: + inline void SetOwner( CMmMtpDpPerfLog* aOwner ); + inline void Overflow( TDes& aDes ); + +private: + CMmMtpDpPerfLog* iOwner; + }; class CMmMtpDpPerfLog : public CBase { - public: - - inline static CMmMtpDpPerfLog* NewL( const TDesC& aTitle ); - inline ~CMmMtpDpPerfLog(); - - inline void Write( const TDesC& aText); - inline void WriteFormat( TRefByValue aFmt, ... ); +public: + + inline static CMmMtpDpPerfLog* NewL( const TDesC& aTitle ); + inline ~CMmMtpDpPerfLog(); + + inline void Write( const TDesC& aText ); + inline void WriteFormat( TRefByValue aFmt, ... ); + + inline void Start( const TDesC& aDescription ); + inline void Stop( const TDesC& aDescription ); + +private: - inline void Start( const TDesC& aDescription ); - inline void Stop( const TDesC& aDescription ); - - private: - - inline CMmMtpDpPerfLog(); - inline void ConstructL( const TDesC& aTitle ); + inline CMmMtpDpPerfLog(); + inline void ConstructL( const TDesC& aTitle ); + +private: + + TMmMtpDpOverflowHandler iOverflowHandler; - private: - - TMmMtpDpOverflowHandler iOverflowHandler; + HBufC16* iTitle; + CDesC16ArrayFlat iDescription; + CArrayFixFlat iStartTick; + CArrayFixFlat iTotalTime; + CArrayFixFlat iTotalUsage; - HBufC16* iTitle; - CDesC16ArrayFlat iDescription; - CArrayFixFlat iStartTick; - CArrayFixFlat iTotalTime; - CArrayFixFlat iTotalUsage; - - TInt iNTickPeriod; - TInt iLastIndex; - + TInt iNTickPeriod; + TInt iLastIndex; + }; #include "cmmmtpdpperflog.inl" diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.inl --- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.inl Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpperflog.inl Wed Jun 23 17:51:16 2010 +0100 @@ -71,10 +71,13 @@ VA_LIST list; VA_START( list, aFmt ); - TBuf buf; - - buf.AppendFormatList( aFmt, list, &iOverflowHandler ); - Write( buf ); + HBufC* buf = HBufC::New( KMtpLogBufferSize ); + if ( buf != NULL ) + { + buf->Des().AppendFormatList( aFmt, list, &iOverflowHandler ); + Write( *buf ); + delete buf; + } } void CMmMtpDpPerfLog::Start( const TDesC& aDescription ) @@ -187,9 +190,11 @@ if (totalTimeValue <= 0xFFFFFFFF) { + //Define the ptr on stack to avoid compiling warnning for wiscw udeb + TPtrC ptr( iDescription[index] ); WriteFormat( _L( "%S-%S, usage = %u, last time = %u.%S ms, total time = %u.%S ms, average time = %u.%S ms" ), iTitle, - &iDescription[index], + &ptr, iTotalUsage[index], lastTimeValue, &lastTimeDecimal, @@ -200,9 +205,11 @@ } else { + //Define the ptr on stack to avoid compiling warnning for wiscw udeb + TPtrC ptr( iDescription[index] ); WriteFormat( _L( "%S-%S, usage = %u, last time = %u.%S ms, total time = %u%u.%S ms, average time = %u.%S ms" ), iTitle, - &iDescription[index], + &ptr, iTotalUsage[index], lastTimeValue, &lastTimeDecimal, diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh Wed Jun 23 17:51:16 2010 +0100 @@ -25,4 +25,10 @@ // flag to enable replace the exist object #undef MMMTPDP_REPLACE_EXIST_FILE +// flag to enable support for non embedded album art, should be ON by default +#define MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + +// flag to enable reset of MTP PS Status flag at CloseSession +#define MMMTPDP_RESET_STATUS_CLOSESESSION + #endif // MMMTPDP_VARIANT_HRH diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/mmmtpdpconfig.h --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpconfig.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpconfig.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,23 +20,27 @@ #define MMMTPDPCONFIG_H class CMmMtpDpMetadataAccessWrapper; +class CPropertySettingUtility; +class CDescriptionUtility; class MMmMtpDpConfig { public: /** * Get supported format from special data provider - * @param aArray The array which is used to store supported format + * @return The array which is used to store supported format */ virtual const RArray* GetSupportedFormat() const = 0; /** - * + * Get the arry of property code which is inline with the format code + * @return The array of what specified format supported */ virtual const RArray* GetSupportedPropertiesL( TUint32 aFormatCode ) const = 0; /** - * + * Get the array of property code what dp supported all + * @return The array of what dp supported */ virtual const RArray* GetAllSupportedProperties() const = 0; @@ -46,10 +50,22 @@ */ virtual TUint32 GetDefaultStorageIdL() const = 0; - /* - * + /** + * Get db handler wrapper + * @return wrapper references */ virtual CMmMtpDpMetadataAccessWrapper& GetWrapperL() = 0; + + /** + * Get the utility to setting properties + */ + virtual CPropertySettingUtility* PropSettingUtility() = 0; + + /** + * Get the utiltiy to setting descriptions + */ + virtual CDescriptionUtility* DescriptionUtility() = 0; + }; #endif // MMMTPDPCONFIG_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/mmmtpdpfiledefs.h --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpfiledefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdpfiledefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -29,6 +29,7 @@ //-------------------------------------------------------------------------------------------- _LIT( KTxtExtension3GP, ".3gp" ); +_LIT( KTxtExtension3G2, ".3g2" ); _LIT( KTxtExtensionAAC, ".aac" ); _LIT( KTxtExtensionASF, ".asf" ); _LIT( KTxtExtensionM4A, ".m4a" ); @@ -41,31 +42,34 @@ _LIT( KTxtExtensionO4V, ".o4v" ); _LIT( KTxtExtensionODF, ".odf" ); +_LIT( KTxtExtensionALB, ".alb" ); _LIT( KTxtExtensionM3U, ".m3u" ); _LIT( KTxtExtensionPLA, ".pla" ); _LIT( KTxtExtensionVIR, ".vir" ); // virtual playlist from MPX -_LIT(KFormatExtensionMP3, "0x3009:mp3"); -_LIT(KFormatExtensionWMA, "0xb901:wma"); -_LIT(KFormatExtensionMP4, "0xb982:mp4"); -_LIT(KFormatExtension3GP, "0xb984:3gp"); -_LIT(KFormatExtensionAAC, "0xb903:aac"); -_LIT(KFormatExtensionWAV, "0x3008:wav"); -_LIT(KFormatExtensionWMV, "0xb981:wmv"); -_LIT(KFormatExtensionASF, "0x300c:asf"); +_LIT(KFormatExtensionMP3, "0x3009:mp3::3"); +_LIT(KFormatExtensionWMA, "0xb901:wma::3"); +_LIT(KFormatExtensionMP4, "0xb982:mp4::3"); +_LIT(KFormatExtension3GP, "0xb984:3gp::3"); +_LIT(KFormatExtension3G2, "0xb984:3g2::3"); +_LIT(KFormatExtensionAAC, "0xb903:aac::3"); +_LIT(KFormatExtensionWAV, "0x3008:wav::3"); +_LIT(KFormatExtensionWMV, "0xb981:wmv::3"); +_LIT(KFormatExtensionASF, "0x300c:asf::3"); //ODF container -_LIT(KFormatExtensionODFAudio3GPP, "0xB984:ODF:audio/3gpp"); -_LIT(KFormatExtensionODFAudioMP4, "0xB982:ODF:audio/mp4"); -_LIT(KFormatExtensionODFVideo3GPP, "0xB984:ODF:video/3gpp"); -_LIT(KFormatExtensionODFVideoMP4, "0xB982:ODF:video/mp4"); +_LIT(KFormatExtensionODFAudio3GPP, "0xB984:ODF:audio/3gpp:3"); +_LIT(KFormatExtensionODFVideo3GPP, "0xB984:ODF:video/3gpp:3"); -_LIT(KFormatExtensionM4A, "0xB982:m4a"); -_LIT(KFormatExtensionO4A, "0xB984:o4a"); -_LIT(KFormatExtensionO4V, "0xB984:o4v"); +_LIT(KFormatExtensionM4A, "0xB982:m4a::3"); +_LIT(KFormatExtensionO4A, "0xB984:o4a::3"); +_LIT(KFormatExtensionO4V, "0xB984:o4v::3"); + +//Abstract Album +_LIT(KFormatExtensionALB, "0xBA03:alb::3"); //Playlists -_LIT(KFormatExtensionM3U, "0xba11:m3u"); +_LIT(KFormatExtensionM3U, "0xba11:m3u::3"); _LIT(KFormatExtensionPLA, "0xBA05:pla"); _LIT(KFormatExtensionVIR, "0xBA05:vir"); //abstract audio & video playlist 0xBA05 //-------------------------------------------------------------------------------------------- @@ -93,7 +97,8 @@ { EMTPSubFormatCodeUnknown, EMTPSubFormatCodeAudio, - EMTPSubFormatCodeVideo + EMTPSubFormatCodeVideo, + EMTPSubFormatCodeUndefined }; #endif // MMMTPDPFILEDEFS_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,12 +20,12 @@ #define MMMTPDPUTILITY_H #include +#include #include "mmmtpdpfiledefs.h" // forward declacration -class CMTPObjectMetaData; -class MMTPDataProviderFramework; +class RFs; class MmMtpDpUtility { @@ -45,20 +45,11 @@ static TBool HasMetadata( TUint16 aObjFormatCode ); /** - * Utility function to decide if the file is video. - * @param aFullFileName, the full file name - * @return TBool for decide if the file is video + * Utility function to decide if there is any reference + * @param aObjFormatCode, object format code + * @return TBool for decide if there are some references */ - IMPORT_C static TBool IsVideoL( const TDesC& aFullFileName ); - - /** - * Utility function to decide if the file is video. - * For internal use, this is fast version by querying framework DB - * @param aFullFileName, the full file name - * @param aFramework, the mtp framework instance pointer, default is null - * @return TBool for decide if the file is video - */ - static TBool IsVideoL( const TDesC& aFullFileName, const MMTPDataProviderFramework& aFramework ); + static TBool HasReference( TUint16 aObjFormatCode ); /** * Check the filename length to see if it exceeds Symbian 256 limit. @@ -83,7 +74,7 @@ * @param aFullFileName, fine name * @return TTime for specified file */ - static TTime GetObjectDateModifiedL( RFs& aFs, const TDesC& aFullFileName ); + static void GetObjectDateModifiedL( RFs& aFs, const TDesC& aFullFileName, TDes& aDateModified ); /** * Check if file is read-only, if file doesn't exist, leave @@ -145,7 +136,7 @@ * @param aSubFormatCode, output the sub format code * @return if success, return KErrNone, otherwise, error code */ - static TInt SubFormatCodeFromMime( const TDesC8& aMimeType, TMmMtpSubFormatCode& aSubFormatCode ); + static TMmMtpSubFormatCode SubFormatCodeFromMime( const TDesC8& aMimeType ); /** * Get DRM status @@ -153,6 +144,34 @@ * @return return DRM status code */ IMPORT_C static TInt GetDrmStatus( const TDesC& aFullFileName ); + + /** + * Set MTP PS Status + * @param aStatus, next TMtpPSStatus + * + * newly implemented function to as enabler + * to provide more state transition on application (MusicPlayer/MPX) during MTP by fully utilize the 3 PSStatus: + * + * EMtpPSStatusActive, == MTP operation related Media Files is performaning + * EMtpPSStatusUninitialized == MTP not in use + * EMtpPSStatusReadyToSync == MTP is connected, but no active operation related to Media Files + * + * this CAN enable 2 new behaviors: + * 1. MTP status monitor is extracted out from USB Event Observer in harvester + * Harvester and Music player should be fully blocked if PS Status is EMtpPSStatusActive + * Music Player would prevent refresh/delete/add on UI level if PS Status is EMtpPSStatusReadyToSync + * 2. collectioncachedhelper to observed this status. + * when the ps status changed from EMtpPSStatusActive to EMtpPSStatusReadyToSync, it starts timer. + * and when it is reached, it flush all cache. + * the timer is canceled when ps status is back to active. + */ + IMPORT_C static void SetPSStatus( TMtpPSStatus aStatus ); + + /** + * Set MTP PS Status (actually) + * @param aStatus, next TMtpPSStatus + */ + static void DoSetPSStatus( TMtpPSStatus aStatus ); }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/mmmtpvideodbdefs.h --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpvideodbdefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpvideodbdefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -53,13 +53,12 @@ _LIT( KMtpVideoEncodingProfile, "EncodingProfile" ); _LIT( KMtpVideoParentalRating, "ParentalRating" ); -_LIT( KMtpVideoUseCount , "UseCount" ); _LIT( KMtpVideoDRM, "DRM" ); _LIT( KMtpVideoDeleted, "Deleted" ); // field type -_LIT( KMtpVideoLocationType, " CHAR (255) NOT NULL" ); +_LIT( KMtpVideoLocationType, " LONG VARCHAR NOT NULL" ); _LIT( KMtpVideoNameType, " LONG VARCHAR" ); _LIT( KMtpVideoArtistType, " LONG VARCHAR" ); _LIT( KMtpVideoTrackType, " UNSIGNED SMALLINT" ); @@ -86,7 +85,6 @@ _LIT( KMtpVideoEncodingProfileType, " LONG VARCHAR" ); _LIT( KMtpVideoParentalRatingType, " LONG VARCHAR" ); -_LIT( KMtpVideoUseCountType, " UNSIGNED INTEGER" ); _LIT( KMtpVideoDRMType, " UNSIGNED SMALLINT" ); _LIT( KMtpVideoDeletedType, " BIT" ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/inc/tobjectdescription.h --- a/mmappcomponents/mmmtpdataprovider/inc/tobjectdescription.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/inc/tobjectdescription.h Wed Jun 23 17:51:16 2010 +0100 @@ -23,6 +23,11 @@ // vendor extended property code const TUint16 EMTPExtObjectPropCodeOmaDrmStatus = 0xDB01; +const TUint32 KMTPMaxDescriptionLen = 0x00000100; // 256 +const TInt KMtpMaxStringLength = 255; +const TInt KMtpMaxDateTimeStringLength = 15; +_LIT( KMtpDateTimeFormat, "%F%Y%M%DT%H%T%S" ); + struct TObjectDescription { @@ -32,7 +37,8 @@ enum TGroupCodeType { - EGroupCodeGeneral = 0x00000001, + EGroupCodeGeneral = 0x00000001, + EGroupCodeSample = 0x00000100, EGroupCodeMediaDB = 0x00FF0000, EGroupCodeNotDefined = 0xFFFFFFFF // TODO: need to reconsider }; @@ -40,59 +46,70 @@ static const TGroupCodeType KSupportedGroupCode[] = { EGroupCodeGeneral, + EGroupCodeSample, EGroupCodeMediaDB }; static const TObjectDescription KPropGroupMapTable[] = { - // First group, mandatory for all - { EMTPObjectPropCodeStorageID, EGroupCodeGeneral }, - { EMTPObjectPropCodeObjectFormat, EGroupCodeGeneral }, + // The first group, mandatory for all + { EMTPObjectPropCodeStorageID, EGroupCodeGeneral }, + { EMTPObjectPropCodeObjectFormat, EGroupCodeGeneral }, { EMTPObjectPropCodeProtectionStatus, EGroupCodeGeneral }, - { EMTPObjectPropCodeObjectSize, EGroupCodeGeneral }, - { EMTPObjectPropCodeObjectFileName, EGroupCodeGeneral }, - { EMTPObjectPropCodeParentObject, EGroupCodeGeneral }, + { EMTPObjectPropCodeObjectSize, EGroupCodeGeneral }, + { EMTPObjectPropCodeObjectFileName, EGroupCodeGeneral }, + { EMTPObjectPropCodeParentObject, EGroupCodeGeneral }, { EMTPObjectPropCodePersistentUniqueObjectIdentifier, - EGroupCodeGeneral }, - { EMTPObjectPropCodeNonConsumable, EGroupCodeGeneral }, + EGroupCodeGeneral }, + { EMTPObjectPropCodeNonConsumable, EGroupCodeGeneral }, - // First group, addtional for all - { EMTPObjectPropCodeDateCreated, EGroupCodeGeneral }, - { EMTPObjectPropCodeDateModified, EGroupCodeGeneral }, + // The first group, addtional for all + { EMTPObjectPropCodeName, EGroupCodeGeneral }, // only for winlogo + { EMTPObjectPropCodeDateCreated, EGroupCodeGeneral }, + { EMTPObjectPropCodeDateModified, EGroupCodeGeneral }, - // Second group, additional for all - { EMTPObjectPropCodeName, EGroupCodeMediaDB }, - { EMTPObjectPropCodeDateAdded, EGroupCodeMediaDB }, + // The first group, mandatory for video + { EMTPObjectPropCodeWidth, EGroupCodeGeneral }, // only for winlogo + { EMTPObjectPropCodeHeight, EGroupCodeGeneral }, // only for winlogo - // Second group, mandatory for audio - { EMTPObjectPropCodeArtist, EGroupCodeMediaDB }, - { EMTPObjectPropCodeTrack, EGroupCodeMediaDB }, - { EMTPObjectPropCodeGenre, EGroupCodeMediaDB }, - { EMTPObjectPropCodeAlbumName, EGroupCodeMediaDB }, - { EMTPObjectPropCodeSampleRate, EGroupCodeMediaDB }, + // The second group, for non-embedded album art + { EMTPObjectPropCodeRepresentativeSampleFormat, EGroupCodeGeneral }, // changed for winlogo + { EMTPObjectPropCodeRepresentativeSampleSize, EGroupCodeGeneral }, // changed for winlogo + { EMTPObjectPropCodeRepresentativeSampleHeight, EGroupCodeGeneral }, // changed for winlogo + { EMTPObjectPropCodeRepresentativeSampleWidth, EGroupCodeGeneral }, // changed for winlogo + { EMTPObjectPropCodeRepresentativeSampleData, EGroupCodeGeneral }, // changed for winlogo + + // The third group, additional for all + { EMTPObjectPropCodeDateAdded, EGroupCodeMediaDB }, + + // The third group, mandatory for audio + { EMTPObjectPropCodeArtist, EGroupCodeMediaDB }, + { EMTPObjectPropCodeTrack, EGroupCodeMediaDB }, + { EMTPObjectPropCodeGenre, EGroupCodeMediaDB }, + { EMTPObjectPropCodeAlbumName, EGroupCodeMediaDB }, + { EMTPObjectPropCodeSampleRate, EGroupCodeMediaDB }, { EMTPObjectPropCodeNumberOfChannels, EGroupCodeMediaDB }, - { EMTPObjectPropCodeAudioWAVECodec, EGroupCodeMediaDB }, - { EMTPObjectPropCodeAudioBitRate, EGroupCodeMediaDB }, - { EMTPObjectPropCodeDuration, EGroupCodeMediaDB }, + { EMTPObjectPropCodeAudioWAVECodec, EGroupCodeMediaDB }, + { EMTPObjectPropCodeAudioBitRate, EGroupCodeMediaDB }, + { EMTPObjectPropCodeDuration, EGroupCodeMediaDB }, { EMTPObjectPropCodeOriginalReleaseDate, EGroupCodeMediaDB }, - { EMTPObjectPropCodeDescription, EGroupCodeMediaDB }, - { EMTPObjectPropCodeComposer, EGroupCodeMediaDB }, + { EMTPObjectPropCodeDescription, EGroupCodeMediaDB }, + { EMTPObjectPropCodeComposer, EGroupCodeMediaDB }, + { EMTPObjectPropCodeAlbumArtist, EGroupCodeMediaDB }, - // Second group, mandatory for video - { EMTPObjectPropCodeWidth, EGroupCodeMediaDB }, - { EMTPObjectPropCodeHeight, EGroupCodeMediaDB }, - { EMTPObjectPropCodeUseCount, EGroupCodeMediaDB }, - { EMTPObjectPropCodeScanType, EGroupCodeMediaDB }, + // The third group, mandatory for video + { EMTPObjectPropCodeScanType, EGroupCodeMediaDB }, { EMTPObjectPropCodeVideoFourCCCodec, EGroupCodeMediaDB }, - { EMTPObjectPropCodeVideoBitRate, EGroupCodeMediaDB }, + { EMTPObjectPropCodeVideoBitRate, EGroupCodeMediaDB }, { EMTPObjectPropCodeFramesPerThousandSeconds, EGroupCodeMediaDB }, { EMTPObjectPropCodeKeyFrameDistance, EGroupCodeMediaDB }, - { EMTPObjectPropCodeEncodingProfile, EGroupCodeMediaDB }, + { EMTPObjectPropCodeEncodingProfile, EGroupCodeMediaDB }, - // Second group, additional for video - { EMTPObjectPropCodeParentalRating, EGroupCodeMediaDB }, - { EMTPObjectPropCodeDRMStatus, EGroupCodeMediaDB }, - { EMTPExtObjectPropCodeOmaDrmStatus, EGroupCodeMediaDB } + // The third group, additional for video + { EMTPObjectPropCodeParentalRating, EGroupCodeMediaDB }, + { EMTPObjectPropCodeDRMStatus, EGroupCodeMediaDB }, + { EMTPExtObjectPropCodeOmaDrmStatus, EGroupCodeMediaDB } }; #endif // TOBJECTDESCRIPTION_H + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpstub.pkg Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpstub.pkg has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdate.pkg Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdate.pkg has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdatedebug.pkg Binary file mmappcomponents/mmmtpdataprovider/install/rom/mmmtpdpupdatedebug.pkg has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/data/abstractmediamtpdataprovider_config.rss --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/data/abstractmediamtpdataprovider_config.rss Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/data/abstractmediamtpdataprovider_config.rss Wed Jun 23 17:51:16 2010 +0100 @@ -11,13 +11,12 @@ * * Contributors: * -* Description: DP configuration information for abstract media dp on armv5 platform +* Description: DP configuration information for abstract media dp * */ #include -#include "abstractmediamtpdataprovider_config.rh" RESOURCE MTP_DATA_PROVIDER dpConfig { @@ -27,14 +26,6 @@ supported_modes = KMTPModeMTP; server_name = ""; server_image_name = ""; - opaque_resource = "folderConfig"; + opaque_resource = 0; enumeration_phase = 12; } - -RESOURCE ABSTRACTMEDIAMTPDATAPROVIDER_CONFIG folderConfig - { - abstractmedia_drive = 4; - } - - - diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/group/abstractmediamtpdataprovider.mmp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/group/abstractmediamtpdataprovider.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/group/abstractmediamtpdataprovider.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -40,19 +40,15 @@ SOURCE abstractmediamtpdataprovidercontrollerimp.cpp SOURCE abstractmediamtpdataproviderprocessor.cpp SOURCE cabstractmediamtpdataproviderenumerator.cpp -SOURCE cabstractmediamtpdataprovidergetobjectpropdesc.cpp -SOURCE cabstractmediamtpdataprovidergetinterdependentpropdesc.cpp SOURCE cabstractmediamtpdataprovidergetobjectpropvalue.cpp SOURCE cabstractmediamtpdataprovidergetobjectproplist.cpp SOURCE cabstractmediamtpdataprovidersetobjectpropvalue.cpp -SOURCE cabstractmediamtpdataprovidersetobjectproplist.cpp -SOURCE cabstractmediamtpdataprovidersetobjectreferences.cpp SOURCE cabstractmediamtpdataproviderabstractmediapreference.cpp SOURCE cabstractmediamtpdataprovidercopyobject.cpp SOURCE cabstractmediamtpdataprovidermoveobject.cpp SOURCE cabstractmediamtpdataproviderrenameobject.cpp -SOURCE cabstractmediamtpdataprovidersendobject.cpp -SOURCE cabstractmediamtpdataprovidergetformatcapabilities.cpp +SOURCE cabstractmediamtpdataproviderpropertysettingutility.cpp +SOURCE cabstractmediamtpdataproviderdescriptionutility.cpp SOURCEPATH ../data diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataprovider_config.rh --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataprovider_config.rh Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* 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: Resource headers for project abstractmediadp -* -*/ - - -#ifndef ABSTRACTMEDIAMTPDATAPROVIDER_RH -#define ABSTRACTMEDIAMTPDATAPROVIDER_RH - -// -------------------------------------------------------------------- -// Defines the resource type for abstractmedia dp specific configuration data -// -------------------------------------------------------------------- -// -STRUCT ABSTRACTMEDIAMTPDATAPROVIDER_CONFIG - { - LONG abstractmedia_drive; // Symbian drive number @see TDrive - LTEXT abstractmedia_folder_root; - LTEXT folder_exclusion_list[]; // What to exclude - } - -#endif // ABSTRACTMEDIAMTPDATAPROVIDER_RH diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderconst.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderconst.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderconst.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,15 +11,42 @@ * * Contributors: * -* Description: +* Description: * */ - #ifndef ABSTRACTMEDIAMTPDATAPROVIDERCONST_H #define ABSTRACTMEDIAMTPDATAPROVIDERCONST_H #include +#include "mmmtpdp_variant.hrh" + +enum TMmMtpSampleSizeRange + { + EMTPMinSampleSize = 0x00000001, // 1 bytes + EMTPMaxSampleSize = 0x00010000, // 64 kb + EMTPStepSampleSize = 0x00000001 // 1 byte + }; + +enum TMmMtpSampleHeightRange + { + EMTPSampleMinHeight = 0x00000001, // 1 pixel + EMTPSampleMaxHeight = 0x00000168, // 360 pixel + EMTPSampleStepHeight = 0x00000001 // 1 pixel + }; + +enum TMmMtpSampleWidthRange + { + EMTPSampleMinWidth = 0x00000001, // 1 pixel + EMTPSampleMaxWidth = 0x00000168, // 360 pixel + EMTPSampleStepWidth = 0x00000001 // 1 pixel + }; + +// Supported sample format +static const TUint16 TMmMtpSupportedSampleFormat[] = + { + EMTPFormatCodeEXIFJPEG + }; const TUint16 EMTPExtOpCodeAbstractMediaPreference = 0x9203; @@ -28,6 +55,9 @@ */ static const TUint16 KAbstractMediaMtpDataProviderSupportedFormats[] = { +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + EMTPFormatCodeAbstractAudioAlbum, +#endif EMTPFormatCodeM3UPlaylist, EMTPFormatCodeAbstractAudioVideoPlaylist }; @@ -55,39 +85,25 @@ EMTPOpCodeGetObjectPropList, EMTPOpCodeSetObjectPropList, EMTPOpCodeGetInterdependentPropDesc, - + EMTPExtOpCodeAbstractMediaPreference, // 0x9203 - + EMTPOpCodeCopyObject, EMTPOpCodeMoveObject, - - EMTPOpCodeSendObjectPropList, + + EMTPOpCodeSendObjectPropList, EMTPOpCodeGetFormatCapabilities }; -#if 0 -/** -* define all the object properties that are supported by the abstract media data provider -*/ -static const TUint16 KAbstractMediaMtpDataProviderSupportedProperties[] = +// Mandatory properties for ALB +static const TUint16 KMmMtpDpSupportedPropMandatoryALB[] = { - // Mandatory for all objects - EMTPObjectPropCodeStorageID, - EMTPObjectPropCodeObjectFormat, - EMTPObjectPropCodeProtectionStatus, - EMTPObjectPropCodeObjectSize, - EMTPObjectPropCodeObjectFileName, - EMTPObjectPropCodeParentObject, - EMTPObjectPropCodePersistentUniqueObjectIdentifier, - EMTPObjectPropCodeName, - EMTPObjectPropCodeNonConsumable, - - // additional for all - EMTPObjectPropCodeDateAdded, - EMTPObjectPropCodeDateCreated, - EMTPObjectPropCodeDateModified, + EMTPObjectPropCodeRepresentativeSampleFormat, + EMTPObjectPropCodeRepresentativeSampleSize, + EMTPObjectPropCodeRepresentativeSampleHeight, + EMTPObjectPropCodeRepresentativeSampleWidth, + EMTPObjectPropCodeRepresentativeSampleData, + EMTPObjectPropCodeAlbumArtist }; -#endif - #endif // ABSTRACTMEDIAMTPDATAPROVIDERCONST_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderprocessor.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderprocessor.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/abstractmediamtpdataproviderprocessor.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -22,7 +22,6 @@ // class forward class MMTPConnection; class TMTPTypeRequest; -class MMTPDataProviderFramework; class MMmRequestProcessor; class MMmMtpDpConfig; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovider.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovider.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovider.h Wed Jun 23 17:51:16 2010 +0100 @@ -24,7 +24,7 @@ #include "abstractmediamtpdataproviderprocessor.h" #include "mmmtpenumerationcallback.h" #include "mmmtpdpconfig.h" - +#include "mmmtpdp_variant.hrh" // Forward declaration class MMmRequestProcessor; @@ -66,10 +66,21 @@ TUint32 GetDefaultStorageIdL() const; /** - * @return the reference of CMmMtpDpMetadataAccessWrapper to enumerator + * Get db handler wrapper + * @return wrapper references */ CMmMtpDpMetadataAccessWrapper& GetWrapperL(); + /** + * @return The utility to setting properties + */ + CPropertySettingUtility* PropSettingUtility(); + + /** + * @return The utiltiy to setting descriptions + */ + CDescriptionUtility* DescriptionUtility(); + protected: // from CMTPDataProviderPlugin void Cancel(); @@ -97,7 +108,7 @@ /** * Notify the data provider that the session has been closed - * @param aConnection The connection of the sesssion + * @param aSession The connection of the sesssion */ void SessionClosedL( const TMTPNotificationParamsSessionChange& aSession ); @@ -168,6 +179,8 @@ void GetSupportedPropertiesL(); + void GetAllSupportedPropL(); + private: // data RPointerArray iActiveProcessors; @@ -175,13 +188,21 @@ RArray iPendingEnumerations; TInt iActiveProcessor; + TBool iActiveProcessorRemoved; CAbstractMediaMtpDataProviderRenameObject *iRenameObject; TBool iIsSessionOpen; RArray iSupportedFormat; - RArray iSupportedProperties; +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + RArray iSupportedPropAbstractAlbum; +#endif + RArray iSupportedPropPlaylist; + RArray iSupportedPropAll; + + CPropertySettingUtility* iPropSettingUtility; + CDescriptionUtility* iDescriptionUtility; }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderabstractmediapreference.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderabstractmediapreference.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderabstractmediapreference.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidercopyobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidercopyobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidercopyobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -65,10 +65,6 @@ TUint32 aHandle, const CMTPObjectMetaData& aObject ); - TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - }; #endif // CABSTRACTMEDIAMTPDATAPROVIDERCOPYOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderdescriptionutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderdescriptionutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,87 @@ +/* +* 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: Abstract media dp specific property description construction utility. +* Used by all request processors which related to property description +* +*/ + +#ifndef CABSTRACTMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H +#define CABSTRACTMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H + +#include "cdescriptionutility.h" + +class CMTPTypeInterdependentPropDesc; +class CMTPTypeObjectPropDesc; + +class CAbstractMediaMtpDataProviderDescriptionUtility : public CDescriptionUtility + { +public: + static CAbstractMediaMtpDataProviderDescriptionUtility* NewL(); + + ~CAbstractMediaMtpDataProviderDescriptionUtility(); + +private: + CAbstractMediaMtpDataProviderDescriptionUtility(); + +public: + /** + * Construct media dp specific interdependent property description. + * according to assigned format code. + * @param aFormatCode + * @return Interdependent property description dataset. + */ + CMTPTypeInterdependentPropDesc* NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode ); + + /** + * Construct media dp specific property description + * according to assigned format code and property code. + * @param aFormatCode + * @param aPropCode + * @return Property description dataset. + */ + CMTPTypeObjectPropDesc* NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode ); + +private: + /** + * Construct property description of SampleFormat. + * @return Property description dataset of sample format. + */ + CMTPTypeObjectPropDesc* NewRepresentativeSampleFormatL(); + + /** + * Construct property description of SampleSize. + * @return Property description dataset of sample size. + */ + CMTPTypeObjectPropDesc* NewRepresentativeSampleSizeL(); + + /** + * Construct property description of SampleHeight. + * @return Property description dataset of sample height. + */ + CMTPTypeObjectPropDesc* NewRepresentativeSampleHeightL(); + + /** + * Construct property description of SampleWidth. + * @return Property description dataset of sample width. + */ + CMTPTypeObjectPropDesc* NewRepresentativeSampleWidthL(); + + /** + * Construct property description of SampleData. + * @return Property description dataset of sample data. + */ + CMTPTypeObjectPropDesc* NewRepresentativeSampleDataL(); + }; + +#endif // CABSTRACTMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderenumerator.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,26 +20,14 @@ #define CABSTRACTMEDIAMTPDATAPROVIDERENUMERATOR_H #include -#include #include "mmmtpenumerationcallback.h" #include "cmmmtpdpperflog.h" -// keep here to avoid warning on urel -_LIT( KMpxGetAllPlaylist, "MpxGetAllPlaylist" ); -_LIT( KMpxGetPlaylistName, "MpxGetPlaylistName" ); -_LIT( KMpxQueryPlaylistReference, "MpxQueryPlaylistReference" ); -_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" ); -_LIT( KObjectManagerInsert, "ObjectManagerInsert" ); -_LIT( KObjectManagerHandle, "ObjectManagerHandle" ); -_LIT( KReferenceManagerSetReference, "ReferenceManagerSetReference" ); - // Forward declarations class MMTPDataProviderFramework; class MMTPObjectMgr; class CAbstractMediaMtpDataProvider; -class CMTPObjectMetaData; -class CMmMtpDpMetadataAccessWrapper; class CMPXMediaArray; /** @@ -83,6 +71,15 @@ TInt RunError( TInt aError ); private: + + enum TEnumState + { + EEnumNone, + EEnumPlaylist, + EEnumAbstractAlbum, + EEnumCount + }; + /** * Standard C++ Constructor * @param aFramework Reference to MMTPDataProviderFramework @@ -99,11 +96,7 @@ void SignalCompleteL( MMTPEnumerationCallback& aCallback, TInt aError = KErrNone ); - void ScanStorageL( TUint32 aStorageId ); - - /** - * Scan next storage - */ + void InitStorageL( ); void ScanNextL(); /** @@ -111,13 +104,12 @@ * @param aPath current scanned file path */ void AddEntryL( const TDesC& aSuid ); - + /** - * Add references of specified abstract media into reference db - * @param aAbstractMediaName, specify the abstract media of which references should be added into db - * @param aReferences, suid array which stored references + * reset Object's format sub code in object manager */ - void AddReferencesL( const TDesC& aAbstractMediaName, CDesCArray& aReferences ); + void ResetObjectFormatSubCodeL( TUint32 aStorageId ); + private: // Owned @@ -133,17 +125,16 @@ /** Provides Callback mechanism for completion of enumeration*/ CAbstractMediaMtpDataProvider& iDataProvider; - TParse iPath; - TEntryArray iEntries; - TInt iFirstUnprocessed; RArray iStorages; TUint32 iStorageId; - TUint32 iParentHandle; - CMPXMediaArray* iAbstractMedias; + CDesCArray* iAbstractMedias; TInt iCount; TInt iCurrentIndex; - + TInt iEnumState; + + TInt iResetCount; + #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) CMmMtpDpPerfLog* iPerfLog; #endif diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetformatcapabilities.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetformatcapabilities.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* -* 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 CABSTRACTMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H -#define CABSTRACTMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H - -#include "cgetformatcapabilities.h" - -// forward declaration -class MMmMtpDpConfig; -class CMTPTypeObjectPropDesc; -class CMTPTypeInterdependentPropDesc; -class CMTPTypeObjectPropDesc; -class CMTPTypeString; -class CGetFormatCapabilities; - -/** -* Defines abstract media data provider GetFormatCapabilities -*/ -class CAbstractMediaMtpDataProviderGetFormatCapabilities : public CGetFormatCapabilities - { -public: - - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - -/* * - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - - static MMmRequestProcessor* NewLC( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig );*/ - - /** - * Destructor - */ - ~CAbstractMediaMtpDataProviderGetFormatCapabilities(); - -protected: - // from CGetFormatCapabilities, override from baseclass - - /** - * Service specific object property - * @param aPropCode, The prop code - * @return MTPType object propdesc - */ - CMTPTypeObjectPropDesc* ServiceSpecificPropertyDescL( TUint16 aPropCode ); - - /** - * Service interdepent propdesc - * @param aFormatCode, The format code - * @return MTPTypeInterdependentPropDesc - */ - void ServiceInterdepentPropDescL(); - -private: - - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CAbstractMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * two-phase construction - */ - void ConstructL(); - }; - -#endif // CAbstractMediaMTPDATAPROVIDERGETFORMATCAPABILITIES_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetinterdependentpropdesc.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetinterdependentpropdesc.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* 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 CABSTRACTMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H -#define CABSTRACTMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H - -#include "crequestprocessor.h" - -class CMTPTypeInterdependentPropDesc; -class MMmMtpDpConfig; - -/** -* Defines abstract media data provider GetInterdependentPropDesc request processor -*/ -class CAbstractMediaMtpDataProviderGetInterdependentPropDesc: public CRequestProcessor - { -public: - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CAbstractMediaMtpDataProviderGetInterdependentPropDesc(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - */ - CAbstractMediaMtpDataProviderGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ); - - /** - * two-phase construction - */ - void ConstructL(); - -protected: - // from CRequestProcessor - TMTPResponseCode CheckRequestL(); - - void ServiceL(); - -private: - void ServiceAudioWaveCodecL(); - - void ServiceAudioBitrateL(); - - void SetFormForResponseL( TUint16 aPropertyCode, const MMTPType& aForm ); - -private: - /** Dataset to store the prop descriptions*/ - CMTPTypeInterdependentPropDesc* iDataset; - - TUint32 iFormatCode; - - }; - -#endif // CABSTRACTMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetobjectpropdesc.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidergetobjectpropdesc.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* 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 CABSTRACTMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H -#define CABSTRACTMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H - -#include "cgetobjectpropdesc.h" - -/** -* Defines abstract media data provider GetObjectPropDesc request processor -*/ -class CAbstractMediaMtpDataProviderGetObjectPropDesc: public CGetObjectPropDesc - { -public: - - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CAbstractMediaMtpDataProviderGetObjectPropDesc(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CAbstractMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * second-phase construction - */ - void ConstructL(); - -protected: - // from CGetObjectPropDesc - void ServiceSpecificObjectPropertyL( TUint16 aPropCode ); - - }; - -#endif // CABSTRACTMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidermoveobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidermoveobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidermoveobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -67,10 +67,6 @@ TUint32 aHandle, const CMTPObjectMetaData& aObject ); - TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - }; #endif // CABSTRACTMEDIAMTPDATAPROVIDERMOVEOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderpropertysettingutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataproviderpropertysettingutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,60 @@ +/* + * 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 CABSTRACTMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H +#define CABSTRACTMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H + +#include "cpropertysettingutility.h" + +/** +* Defines media data provider SetObjectPropsList request processor +*/ +class CAbstractMediaMtpDataProviderPropertySettingUtility: public CPropertySettingUtility + { +public: + /** + * @param aFramework, The data provider framework + * @param aConnection, The connection from which the request comes + * @param aWrapper Medadata access + * @return A pointer to the created request processor object + */ + static CAbstractMediaMtpDataProviderPropertySettingUtility* NewL(); + + /** + * Destructor + */ + ~CAbstractMediaMtpDataProviderPropertySettingUtility(); + +private: + /** + * Standard C++ Constructor + * @param aFramework, The data provider framework + * @param aConnection, The connection from which the request comes + * @param aWrapper Medadata access + */ + CAbstractMediaMtpDataProviderPropertySettingUtility(); + +protected: + TMTPResponseCode SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig, + TUint16 aPropCode, + const CMTPObjectMetaData& aObject, + const CMTPTypeObjectPropListElement& aElement ); + + }; + +#endif // CABSTRACTMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersendobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersendobject.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* 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 CABSTRACTMEDIAMTPDATAPROVIDERSENDOBJECT_H_ -#define CABSTRACTMEDIAMTPDATAPROVIDERSENDOBJECT_H_ - -#include "csendobject.h" - -/** -* Defines media data provider SetObjectPropsList request processor -*/ -class CAbstractMediaMtpDataProviderSendObject: public CSendObject - { -public: - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CAbstractMediaMtpDataProviderSendObject(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CAbstractMediaMtpDataProviderSendObject( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * 2nd Phase Constructor - */ - void ConstructL(); - -protected: - // from CSendObjectInfo - TMTPResponseCode SetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - - TMTPResponseCode CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType ); - - TInt HandleSpecificWrapperError(TInt aError, - const CMTPObjectMetaData& aObject); - - }; - -#endif /*CABSTRACTMEDIAMTPDATAPROVIDERSENDOBJECT_H_*/ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectproplist.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectproplist.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* 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 CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H -#define CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H - -#include "csetobjectproplist.h" - -class MMmMtpDpConfig; - -/** -* Defines abstract media data provider SetObjectPropList request processor -*/ -class CAbstractMediaMtpDataProviderSetObjectPropList : public CSetObjectPropList - { -public: - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CAbstractMediaMtpDataProviderSetObjectPropList(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CAbstractMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * 2nd Phase Constructor - */ - void ConstructL(); - -protected: - // from CSetObjectPropList - TMTPResponseCode ServiceSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - - TInt HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& aObject); - - }; - -#endif // CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H - diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectreferences.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/inc/cabstractmediamtpdataprovidersetobjectreferences.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* 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: Set object references operation. -* -*/ - - -#ifndef CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTREFERENCES_H -#define CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTREFERENCES_H - -#include "csetobjectreferences.h" - -/** -* Defines abstract media data provider SetObjectReferences request processor -*/ -class CAbstractMediaMtpDataProviderSetObjectReferences : public CSetObjectReferences - { -public: - /** - * Two-phase construction method - * @param aFramework The data provider framework - * @param aConnection The connection from which the request comes - * @param aWrapper medadata access interface - * @return a pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CAbstractMediaMtpDataProviderSetObjectReferences(); - -private: - /** - * Standard c++ constructor - * @param aFramework The data provider framework - * @param aConnection The connection from which the request comes - * @param aWrapper medadata access interface - */ - CAbstractMediaMtpDataProviderSetObjectReferences( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * two-phase construction - */ - void ConstructL(); - -protected: - // from CSetObjectPropValue - /** - * set references to DB - * @param aWrapper medadata access interface - * @param aObjectFormat the format of the file - * @param aSrcFileName file name, from - * @param aRefFileArray the array of file names, to - */ - void DoSetObjectReferencesL( CMmMtpDpMetadataAccessWrapper& aWrapper, - TUint16 aObjectFormat, - const TDesC& aSrcFileName, - CDesCArray& aRefFileArray ); - - }; - -#endif // CABSTRACTMEDIAMTPDATAPROVIDERSETOBJECTREFERENCES_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataprovidercontrollerimp.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataprovidercontrollerimp.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataprovidercontrollerimp.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -26,15 +26,14 @@ // static const TImplementationProxy ImplementationTable[] = { - {{0x10207C53}, (TProxyNewLPtr) ( CAbstractMediaMtpDataProvider::NewL )} + { { 0x10207C53 }, ( TProxyNewLPtr ) ( CAbstractMediaMtpDataProvider::NewL ) } }; // ----------------------------------------------------------------------------- // ECOM entry point // ----------------------------------------------------------------------------- // -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( - TInt& aTableCount ) +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) { aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); return ImplementationTable; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataproviderprocessor.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataproviderprocessor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/abstractmediamtpdataproviderprocessor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -28,49 +28,48 @@ #include "abstractmediamtpdataproviderconst.h" #include "cgetobjectpropssupported.h" -#include "cabstractmediamtpdataprovidergetobjectpropdesc.h" -#include "cabstractmediamtpdataprovidergetinterdependentpropdesc.h" +#include "cgetobjectpropdesc.h" +#include "cgetinterdependentpropdesc.h" #include "cgetobject.h" #include "cgetobjectinfo.h" -#include "cabstractmediamtpdataprovidersendobject.h" +#include "csendobject.h" #include "cabstractmediamtpdataprovidergetobjectpropvalue.h" #include "cabstractmediamtpdataprovidergetobjectproplist.h" #include "cabstractmediamtpdataprovidersetobjectpropvalue.h" -#include "cabstractmediamtpdataprovidersetobjectproplist.h" +#include "csetobjectproplist.h" #include "cgetobjectreferences.h" -#include "cabstractmediamtpdataprovidersetobjectreferences.h" +#include "csetobjectreferences.h" #include "cdeleteobject.h" #include "cabstractmediamtpdataprovidercopyobject.h" #include "cabstractmediamtpdataprovidermoveobject.h" #include "cgetpartialobject.h" #include "cabstractmediamtpdataproviderabstractmediapreference.h" -#include "cabstractmediamtpdataprovidergetformatcapabilities.h" +#include "cgetformatcapabilities.h" /** A mapping table from the operation code to the request processor factory method */ const TAbstractMediaMtpDataProviderRequestProcessorEntry KAbstractMediaMtpDataProviderRequestProcessorTable[] = { - {EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL}, //Get Supported Props - {EMTPOpCodeGetObjectPropDesc, CAbstractMediaMtpDataProviderGetObjectPropDesc::NewL}, //Get Props Description - {EMTPOpCodeGetInterdependentPropDesc, CAbstractMediaMtpDataProviderGetInterdependentPropDesc::NewL}, - {EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL}, //GetObjectInfo - {EMTPOpCodeGetObject, CGetObject::NewL}, //GetObject - {EMTPOpCodeGetObjectPropValue, CAbstractMediaMtpDataProviderGetObjectPropValue::NewL}, - {EMTPOpCodeGetObjectPropList, CAbstractMediaMtpDataProviderGetObjectPropList::NewL}, //GetObjectPropList - {EMTPOpCodeSendObjectInfo, CAbstractMediaMtpDataProviderSendObject::NewL}, //SendObjectInfo (routed to SendObject) - {EMTPOpCodeSendObject, CAbstractMediaMtpDataProviderSendObject::NewL}, //SendObject - {EMTPOpCodeSendObjectPropList, CAbstractMediaMtpDataProviderSendObject::NewL}, // SendobjectPropList (routed to SendObject) - {EMTPOpCodeSetObjectPropValue, CAbstractMediaMtpDataProviderSetObjectPropValue::NewL}, - {EMTPOpCodeSetObjectPropList, CAbstractMediaMtpDataProviderSetObjectPropList::NewL}, //SetObjectPropList - {EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL}, //Get Object References - {EMTPOpCodeSetObjectReferences, CAbstractMediaMtpDataProviderSetObjectReferences::NewL}, //Set Object References - {EMTPOpCodeDeleteObject, CDeleteObject::NewL}, //DeleteObject - {EMTPOpCodeCopyObject, CAbstractMediaMtpDataProviderCopyObject::NewL}, // Copy Object - {EMTPOpCodeMoveObject, CAbstractMediaMtpDataProviderMoveObject::NewL}, // Move Object - {EMTPOpCodeGetPartialObject, CGetPartialObject::NewL}, //GetPartialObject - {EMTPExtOpCodeAbstractMediaPreference, CAbstractMediaMtpDataProviderAbstractMediaPreference::NewL}, // WMPReportSyncOnlyAbstractMedias - {EMTPOpCodeGetFormatCapabilities, CAbstractMediaMtpDataProviderGetFormatCapabilities::NewL} // GetFormatCapabilities - + { EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL }, //Get Supported Props + { EMTPOpCodeGetObjectPropDesc, CGetObjectPropDesc::NewL }, //Get Props Description + { EMTPOpCodeGetInterdependentPropDesc, CGetInterdependentPropDesc::NewL }, + { EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL }, //GetObjectInfo + { EMTPOpCodeGetObject, CGetObject::NewL }, //GetObject + { EMTPOpCodeGetObjectPropValue, CAbstractMediaMtpDataProviderGetObjectPropValue::NewL }, + { EMTPOpCodeGetObjectPropList, CAbstractMediaMtpDataProviderGetObjectPropList::NewL }, //GetObjectPropList + { EMTPOpCodeSendObjectInfo, CSendObject::NewL }, //SendObjectInfo (routed to SendObject) + { EMTPOpCodeSendObject, CSendObject::NewL }, //SendObject + { EMTPOpCodeSendObjectPropList, CSendObject::NewL }, // SendobjectPropList (routed to SendObject) + { EMTPOpCodeSetObjectPropValue, CAbstractMediaMtpDataProviderSetObjectPropValue::NewL }, + { EMTPOpCodeSetObjectPropList, CSetObjectPropList::NewL }, //SetObjectPropList + { EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL }, //Get Object References + { EMTPOpCodeSetObjectReferences, CSetObjectReferences::NewL }, //Set Object References + { EMTPOpCodeDeleteObject, CDeleteObject::NewL }, //DeleteObject + { EMTPOpCodeCopyObject, CAbstractMediaMtpDataProviderCopyObject::NewL }, // Copy Object + { EMTPOpCodeMoveObject, CAbstractMediaMtpDataProviderMoveObject::NewL }, // Move Object + { EMTPOpCodeGetPartialObject, CGetPartialObject::NewL }, //GetPartialObject + { EMTPExtOpCodeAbstractMediaPreference, CAbstractMediaMtpDataProviderAbstractMediaPreference::NewL }, // WMPReportSyncOnlyAbstractMedias + { EMTPOpCodeGetFormatCapabilities, CGetFormatCapabilities::NewL } // GetFormatCapabilities }; // ----------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovider.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -38,6 +38,8 @@ #include "cabstractmediamtpdataproviderrenameobject.h" #include "mmmtpdpdefs.h" #include "mmmtpdpfiledefs.h" +#include "cabstractmediamtpdataproviderpropertysettingutility.h" +#include "cabstractmediamtpdataproviderdescriptionutility.h" // Class constants. // Defines the number of MTP Active Processors allowed @@ -74,8 +76,13 @@ iActiveProcessor( -1 ), iRenameObject( NULL ), iSupportedFormat( KAbstractMediaMtpDpArrayGranularity ), - iSupportedProperties( KAbstractMediaMtpDpArrayGranularity ) +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + iSupportedPropAbstractAlbum( KAbstractMediaMtpDpArrayGranularity ), +#endif + iSupportedPropPlaylist( KAbstractMediaMtpDpArrayGranularity ), + iSupportedPropAll( KAbstractMediaMtpDpArrayGranularity ) { + // Do nothing } // ----------------------------------------------------------------------------- @@ -87,6 +94,9 @@ { PRINT( _L( "MM MTP => CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) ); + delete iPropSettingUtility; + delete iDescriptionUtility; + iPendingEnumerations.Close(); TInt count = iActiveProcessors.Count(); for ( TInt i = 0; i < count; i++ ) @@ -102,9 +112,13 @@ delete iRenameObject; iSupportedFormat.Close(); - iSupportedProperties.Close(); +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + iSupportedPropAbstractAlbum.Close(); +#endif + iSupportedPropPlaylist.Close(); + iSupportedPropAll.Close(); - PRINT( _L( "MM MTP => CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) ); + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProvider::~CAbstractMediaMtpDataProvider" ) ); } void CAbstractMediaMtpDataProvider::Cancel() @@ -123,10 +137,14 @@ iAbstractMediaEnumerator = CAbstractMediaMtpDataProviderEnumerator::NewL( Framework(), *this ); - CMmMtpDpAccessSingleton::CreateL( Framework().Fs(), Framework() ); + CMmMtpDpAccessSingleton::CreateL( Framework() ); GetSupportedFormatL(); GetSupportedPropertiesL(); + GetAllSupportedPropL(); + + iPropSettingUtility = CAbstractMediaMtpDataProviderPropertySettingUtility::NewL(); + iDescriptionUtility = CAbstractMediaMtpDataProviderDescriptionUtility::NewL(); PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProvider::ConstructL" ) ); } @@ -158,13 +176,11 @@ { case EMTPSessionClosed: PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProvider::ProcessNotificationL EMTPSessionClosed event recvd" ) ); - SessionClosedL( *reinterpret_cast ( aParams ) ); break; case EMTPSessionOpened: PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProvider::ProcessNotificationL EMTPSessionOpened event recvd" ) ); - SessionOpenedL( *reinterpret_cast ( aParams ) ); break; @@ -201,18 +217,18 @@ MMmRequestProcessor* processor = iActiveProcessors[index]; iActiveProcessor = index; - // iActiveProcessorRemoved = EFalse; + iActiveProcessorRemoved = EFalse; TBool result = processor->HandleRequestL( aRequest, aPhase ); - if( !iIsSessionOpen ) + if ( !iIsSessionOpen ) { processor->Release(); } // iActiveProcessorRemoved will be set to ETrue in the above function - // HandleRequestL(),such as SessionClose() - // else if ( iActiveProcessorRemoved ) - // { - // processor->Release(); // destroy the processor - // } + // HandleRequestL(), such as SessionClose() + else if ( iActiveProcessorRemoved ) + { + processor->Release(); // destroy the processor + } else if ( result ) // destroy the processor { processor->Release(); @@ -231,26 +247,25 @@ iIsSessionOpen = EFalse; TInt count = iActiveProcessors.Count(); PRINT1( _L( "MM MTP => CAbstractMediaMtpDataProvider::SessionClosedL, total processor count = %d" ), count ); - for( TInt i = 0; i < count; i++ ) + while ( count-- ) { - MMmRequestProcessor* processor = iActiveProcessors[i]; + MMmRequestProcessor* processor = iActiveProcessors[count]; - // replaced for the Request() is invalid sometimes - // TUint32 sessionId( processor->Request().Uint32( TMTPTypeRequest::ERequestSessionID ) ); TUint32 sessionId = processor->SessionId(); if ( ( sessionId == aSession.iMTPId ) - && ( processor->Connection().ConnectionId() - == aSession.iConnection.ConnectionId() ) ) + && ( processor->Connection().ConnectionId() + == aSession.iConnection.ConnectionId() ) ) { processor->UsbDisconnect(); // Rollback - iActiveProcessors.Remove( i ); - // if ( i == iActiveProcessor ) - // { - // iActiveProcessorRemoved = ETrue; - // } - // else + iActiveProcessors.Remove( count ); + if ( count == iActiveProcessor ) + { + iActiveProcessorRemoved = ETrue; + iActiveProcessor = -1; // update iActiveProcessor + } + else { processor->Release(); } @@ -354,11 +369,11 @@ case EObjectProperties: { - TInt count = iSupportedProperties.Count(); + TInt count = iSupportedPropAll.Count(); for ( TInt i = 0; i < count; i++ ) { - aArray.Append( iSupportedProperties[i] ); + aArray.Append( iSupportedPropAll[i] ); } PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProvider::Supported properties count = %d" ), aArray.Count() ); } @@ -386,7 +401,9 @@ { if( aCategory == EFormatExtensionSets ) { - //EMTPFormatCodeM3U, +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + aStrings.AppendL(KFormatExtensionALB); +#endif aStrings.AppendL(KFormatExtensionM3U); aStrings.AppendL(KFormatExtensionPLA); aStrings.AppendL(KFormatExtensionVIR); @@ -472,7 +489,7 @@ // ----------------------------------------------------------------------------- // CAbstractMediaMtpDataProvider::GetWrapper -// return the reference of CMmMtpDpMetadataAccessWrapper to enumerator +// return wrapper references // ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper& CAbstractMediaMtpDataProvider::GetWrapperL() @@ -480,6 +497,26 @@ return CMmMtpDpAccessSingleton::GetAccessWrapperL(); } +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProvider::PropSettingUtility +// return The utility to setting properties +// ----------------------------------------------------------------------------- +// +CPropertySettingUtility* CAbstractMediaMtpDataProvider::PropSettingUtility() + { + return iPropSettingUtility; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProvider::DescriptionUtility +// return The utiltiy to setting descriptions +// ----------------------------------------------------------------------------- +// +CDescriptionUtility* CAbstractMediaMtpDataProvider::DescriptionUtility() + { + return iDescriptionUtility; + } + // --------------------------------------------------------------------------- // CAbstractMediaMtpDataProvider::GetSupportedFormat // @@ -503,7 +540,22 @@ const RArray* CAbstractMediaMtpDataProvider::GetSupportedPropertiesL( TUint32 aFormatCode ) const { - return &iSupportedProperties; + if ( ( aFormatCode == EMTPFormatCodeM3UPlaylist ) || ( aFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist ) ) + { + return &iSupportedPropPlaylist; + } +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + else if ( aFormatCode == EMTPFormatCodeAbstractAudioAlbum ) + { + return &iSupportedPropAbstractAlbum; + } +#endif + else + { + User::Leave( KErrNotSupported ); + } + // should never run to this line, just for avoiding warning. + return NULL; } // --------------------------------------------------------------------------- @@ -513,20 +565,37 @@ // void CAbstractMediaMtpDataProvider::GetSupportedPropertiesL() { - iSupportedProperties.Reset(); +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + iSupportedPropAbstractAlbum.Reset(); +#endif + iSupportedPropPlaylist.Reset(); TInt count = 0, i = 0; count = sizeof( KMmMtpDpSupportedPropMandatoryAll ) / sizeof( TUint16 ); for ( i = 0; i < count; i++ ) { - InsertL( iSupportedProperties, KMmMtpDpSupportedPropMandatoryAll[i] ); +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + InsertL( iSupportedPropAbstractAlbum, KMmMtpDpSupportedPropMandatoryAll[i] ); +#endif + InsertL( iSupportedPropPlaylist, KMmMtpDpSupportedPropMandatoryAll[i] ); } count = sizeof( KMmMtpDpSupportedPropAdditionalAll ) / sizeof( TUint16 ); for ( i = 0; i < count; i++ ) { - InsertL( iSupportedProperties, KMmMtpDpSupportedPropAdditionalAll[i] ); +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + InsertL( iSupportedPropAbstractAlbum, KMmMtpDpSupportedPropAdditionalAll[i] ); +#endif + InsertL( iSupportedPropPlaylist, KMmMtpDpSupportedPropAdditionalAll[i] ); } + +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + count = sizeof( KMmMtpDpSupportedPropMandatoryALB ) / sizeof( TUint16 ); + for ( i = 0; i < count; i++ ) + { + InsertL( iSupportedPropAbstractAlbum, KMmMtpDpSupportedPropMandatoryALB[i] ); + } +#endif } // --------------------------------------------------------------------------- @@ -536,7 +605,31 @@ // const RArray* CAbstractMediaMtpDataProvider::GetAllSupportedProperties() const { - return &iSupportedProperties; + return &iSupportedPropAll; + } + +void CAbstractMediaMtpDataProvider::GetAllSupportedPropL() + { + iSupportedPropAll.Reset(); + + TInt count = 0, i = 0; + count = sizeof( KMmMtpDpSupportedPropMandatoryAll ) / sizeof( TUint16 ); + for ( i = 0; i < count; i++ ) + { + InsertL( iSupportedPropAll, KMmMtpDpSupportedPropMandatoryAll[i] ); + } + + count = sizeof( KMmMtpDpSupportedPropAdditionalAll ) / sizeof( TUint16 ); + for ( i = 0; i < count; i++ ) + { + InsertL( iSupportedPropAll, KMmMtpDpSupportedPropAdditionalAll[i] ); + } + + count = sizeof( KMmMtpDpSupportedPropMandatoryALB ) / sizeof( TUint16 ); + for ( i = 0; i < count; i++ ) + { + InsertL( iSupportedPropAll, KMmMtpDpSupportedPropMandatoryALB[i] ); + } } // --------------------------------------------------------------------------- @@ -552,10 +645,19 @@ TDriveInfo driveInfo; User::LeaveIfError( Framework().Fs().Drive( driveInfo, driveNum ) ); + PRINT3( _L( "driveInfo.iType = 0x%x, driveInfo.iDriveAtt = 0x%x, driveInfo.iMediaAtt = 0x%x" ), + driveInfo.iType, + driveInfo.iDriveAtt, + driveInfo.iMediaAtt ); if( driveInfo.iType == EMediaNotPresent || driveInfo.iType == EMediaUnknown ) { - err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, driveNum ); - PRINT( _L( "MM MTP <> Memory card doesn't exist, set PhoneMemory to default" ) ); + err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, driveNum ); + User::LeaveIfError( Framework().Fs().Drive( driveInfo, driveNum ) ); + if( driveInfo.iType == EMediaNotPresent || driveInfo.iType == EMediaUnknown ) + { + err = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultPhoneMemory, driveNum ); + PRINT( _L( "MM MTP <> Memory card doesn't exist, set PhoneMemory to default" ) ); + } } return Framework().StorageMgr().FrameworkStorageId( TDriveNumber( driveNum ) ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderabstractmediapreference.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderabstractmediapreference.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderabstractmediapreference.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -71,7 +71,7 @@ // CAbstractMediaMtpDataProviderAbstractMediaPreference::~CAbstractMediaMtpDataProviderAbstractMediaPreference() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -81,7 +81,7 @@ // void CAbstractMediaMtpDataProviderAbstractMediaPreference::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -94,3 +94,6 @@ TUint32 referenceType = EMTPAbstractMediaRefOrdinary; SendResponseL( EMTPRespCodeOK, 1, &referenceType ); } + +// end of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidercopyobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidercopyobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidercopyobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -60,7 +60,7 @@ // CAbstractMediaMtpDataProviderCopyObject::~CAbstractMediaMtpDataProviderCopyObject() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -73,7 +73,7 @@ MMmMtpDpConfig& aDpConfig ) : CCopyObject( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -86,21 +86,8 @@ const CMTPObjectMetaData& /*aObject*/ ) { PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderCopyObject::ServiceGetSpecificObjectPropertyL" ) ); - // do nothing - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL -// do nothing here -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CAbstractMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL( TUint16 /*aPropCode*/, - const CMTPObjectMetaData& /*aObject*/, - const CMTPTypeObjectPropListElement& /*aElement*/) - { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL" ) ); - - return EMTPRespCodeOK; + // Do nothing now. + // May need add implementation here for further extension. } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderdescriptionutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderdescriptionutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,224 @@ +/* +* 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: Media dp specific property description construction utility. +* Used by all request processors which related to property description +* +*/ + +#include +#include +#include + +#include "cabstractmediamtpdataproviderdescriptionutility.h" +#include "abstractmediamtpdataproviderconst.h" +#include "mmmtpdpconfig.h" +#include "mmmtpdplogger.h" + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewL +// +// ----------------------------------------------------------------------------- +// +CAbstractMediaMtpDataProviderDescriptionUtility* CAbstractMediaMtpDataProviderDescriptionUtility::NewL() + { + CAbstractMediaMtpDataProviderDescriptionUtility* self = + new( ELeave ) CAbstractMediaMtpDataProviderDescriptionUtility(); + + return self; + } + +CAbstractMediaMtpDataProviderDescriptionUtility::CAbstractMediaMtpDataProviderDescriptionUtility() + { + // Do nothing + } + +CAbstractMediaMtpDataProviderDescriptionUtility::~CAbstractMediaMtpDataProviderDescriptionUtility() + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL +// Construct media dp specific interdependent property description. +// ----------------------------------------------------------------------------- +// +CMTPTypeInterdependentPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL( MMmMtpDpConfig& /*aDpConfig*/, + TUint /*aFormatCode*/ ) + { + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) ); + + CMTPTypeInterdependentPropDesc* interdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL(); + + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) ); + return interdependentPropDesc; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL +// Construct media dp specific property description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL( TUint aFormatCode, + TUint16 aPropCode ) + { + CMTPTypeObjectPropDesc* propertyDesc = NULL; + if( aFormatCode == EMTPFormatCodeAbstractAudioAlbum ) + { + switch ( aPropCode ) + { + case EMTPObjectPropCodeRepresentativeSampleFormat: + propertyDesc = NewRepresentativeSampleFormatL(); + break; + + case EMTPObjectPropCodeRepresentativeSampleSize: + propertyDesc = NewRepresentativeSampleSizeL(); + break; + + case EMTPObjectPropCodeRepresentativeSampleHeight: + propertyDesc = NewRepresentativeSampleHeightL(); + break; + + case EMTPObjectPropCodeRepresentativeSampleWidth: + propertyDesc = NewRepresentativeSampleWidthL(); + break; + + case EMTPObjectPropCodeRepresentativeSampleData: + propertyDesc = NewRepresentativeSampleDataL(); + break; + default: + // do nothing + break; + } + } + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleFormatL +// +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleFormatL() + { + CMTPTypeObjectPropDescEnumerationForm* form = + CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 ); + CleanupStack::PushL( form ); // + form + + TInt numValues = sizeof ( TMmMtpSupportedSampleFormat ) / sizeof ( TMmMtpSupportedSampleFormat[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint16 data( TMmMtpSupportedSampleFormat[i] ); + form->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeUINT16; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; + propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeRepresentativeSampleFormat, + propertyInfo, + form ); + CleanupStack::PopAndDestroy( form ); // - form + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleSizeL +// +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleSizeL() + { + CMTPTypeObjectPropDescRangeForm* form = + CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form + + // Set expected values + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPMinSampleSize ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPMaxSampleSize ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPStepSampleSize ); + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeUINT32; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; + propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeRepresentativeSampleSize, + propertyInfo, + form ); + CleanupStack::PopAndDestroy( form ); // - form + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleHeightL +// +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleHeightL() + { + CMTPTypeObjectPropDescRangeForm* form = + CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form + + // Set expected values + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPSampleMinHeight ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPSampleMaxHeight ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPSampleStepHeight ); + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeUINT32; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; + propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeRepresentativeSampleHeight, + propertyInfo, + form ); + CleanupStack::PopAndDestroy( form ); // - form + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleWidthL +// +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleWidthL() + { + CMTPTypeObjectPropDescRangeForm* form = + CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form + + // Set expected values + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPSampleMinWidth ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPSampleMaxWidth ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPSampleStepWidth ); + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeUINT32; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; + propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeRepresentativeSampleWidth, + propertyInfo, + form ); + CleanupStack::PopAndDestroy( form ); // - form + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleDataL +// +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderDescriptionUtility::NewRepresentativeSampleDataL() + { + return CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeRepresentativeSampleData ); + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -22,23 +22,29 @@ #include #include #include +#include #include #include -#include "abstractmediamtpdataproviderconst.h" #include "cabstractmediamtpdataproviderenumerator.h" #include "cabstractmediamtpdataprovider.h" #include "mmmtpdplogger.h" #include "mmmtpdputility.h" #include "cmmmtpdpmetadataaccesswrapper.h" -#include "cmmmtpdpmetadatampxaccess.h" -/** Number of objects to insert into the object manager in one go*/ const TInt KMTPDriveGranularity = 5; +const TInt KAbstractMediaDpArrayGranularity = 2; _LIT( KPlaylistFilePath, "Playlists\\" ); +#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) +_LIT( KMpxGetAllAbstractMedia, "MpxGetAllAbstractMedia" ); +_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" ); +_LIT( KObjectManagerInsert, "ObjectManagerInsert" ); +_LIT( KResetObjectFormatSubCode, "ResetObjectFormatSubCode" ); +#endif + // ----------------------------------------------------------------------------- // CAbstractMediaMtpDataProviderEnumerator::NewL // Two phase constructor @@ -69,10 +75,12 @@ iObjectMgr( aFramework.ObjectMgr() ), iDataProviderId( aFramework.DataProviderId() ), iDataProvider( aDataProvider ), - iStorages( 2 ), + iStorages( KAbstractMediaDpArrayGranularity ), iAbstractMedias( NULL ), iCount( 0 ), - iCurrentIndex( 0 ) + iCurrentIndex( 0 ), + iEnumState ( EEnumNone ), + iResetCount( 0 ) { PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::CAbstractMediaMtpDataProviderEnumerator, iDataProviderId = %d" ), iDataProviderId ); } @@ -105,6 +113,7 @@ delete iAbstractMedias; iAbstractMedias = NULL; + #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) delete iPerfLog; #endif // _DEBUG @@ -139,9 +148,9 @@ } CleanupStack::PopAndDestroy( &storages ); // - storages } - else if ( aStorageId != KMTPNotSpecified32 ) + else if ( aStorageId != KMTPNotSpecified32 + && storageMgr.ValidStorageId( aStorageId ) ) { - __ASSERT_DEBUG( storageMgr.ValidStorageId( aStorageId ), User::Invariant() ); const CMTPStorageMetaData& storage( storageMgr.StorageL( aStorageId ) ); if ( storage.Uint( CMTPStorageMetaData::EStorageSystemType ) == @@ -170,76 +179,117 @@ // keep in mind for notification when enumeration complete iStorageId = aStorageId; - - if ( iStorages.Count() > 0 ) - { - ScanStorageL( iStorages[0] ); - } - else - { - iStorages.Reset(); - SignalCompleteL( iDataProvider ); - } + iEnumState = EEnumNone; + ScanNextL(); PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::StartL" ) ); } // ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderEnumerator::ScanStorageL -// Find out all AbstractMedia file according to storage id +// CAbstractMediaMtpDataProviderEnumerator::InitStorageL +// Initialize iAbstractMedia, iCount and iCurrentIndex according to iStorages and iEnumState // ----------------------------------------------------------------------------- // -void CAbstractMediaMtpDataProviderEnumerator::ScanStorageL( TUint32 aStorageId ) +void CAbstractMediaMtpDataProviderEnumerator::InitStorageL() { - PRINT1( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::ScanStorageL aStorageId = 0x%x" ), aStorageId ); + __ASSERT_DEBUG(iStorages.Count() > 0 && iEnumState < EEnumCount, User::Invariant() ); + PRINT2( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::InitStorageL storageId = 0x%x, state=%d" ), iStorages[0], iEnumState ); const CMTPStorageMetaData& storage( - iFramework.StorageMgr().StorageL( aStorageId ) ); + iFramework.StorageMgr().StorageL( iStorages[0] ) ); __ASSERT_DEBUG( ( storage.Uint( CMTPStorageMetaData::EStorageSystemType ) == CMTPStorageMetaData::ESystemTypeDefaultFileSystem ), User::Invariant() ); - TFileName root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) ); - PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::ScanStorageL StorageSuid = %S" ), &root ); + TPtrC root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) ); + PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::InitStorageL StorageSuid = %S" ), &root ); - // created by windows media player, or else return responsecode is Access denied - // Create abstract media directory if it does not exist - HBufC* tempBuf = HBufC::NewLC( KMaxFileName ); // + tempBuf - TPtr folder = tempBuf->Des(); - folder.Zero(); - folder.Append( root ); - folder.Append( KPlaylistFilePath ); - TBool ret = BaflUtils::FileExists( iFramework.Fs(), folder ); - PRINT2( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::ScanStorageL ret = %d, folder = %S" ), ret, &folder ); - if( !ret ) + if ( iEnumState == EEnumPlaylist ) { - TInt err = iFramework.Fs().MkDirAll( folder ); - PRINT2( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::ScanStorageL Creating folder (%S) returned error %d" ), tempBuf, err ); + // created by windows media player, or else return responsecode is Access denied + // Create playlist directory if it does not exist + // NOTE: Only playlist need to create directory here, for the dummy files + HBufC* tempBuf = HBufC::NewLC( KMaxFileName ); // + tempBuf + TPtr folder = tempBuf->Des(); + folder.Zero(); + folder.Append( root ); + folder.Append( KPlaylistFilePath ); + TBool ret = BaflUtils::FileExists( iFramework.Fs(), folder ); + PRINT2( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::InitStorageL ret = %d, folder = %S" ), ret, &folder ); + if( !ret ) + { + TInt err = iFramework.Fs().MkDirAll( folder ); + PRINT2( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::InitStorageL Creating folder (%S) returned error %d" ), tempBuf, err ); - // add this new folder to framework metadata DB - CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC( 0, // Dev Dp hard code - EMTPFormatCodeAssociation, - aStorageId, - folder ); // + object - object->SetUint( CMTPObjectMetaData::EParentHandle, KMTPHandleNoParent ); - object->SetUint( CMTPObjectMetaData::EFormatSubCode, EMTPAssociationTypeGenericFolder ); - PERFLOGSTART( KObjectManagerInsert ); - iObjectMgr.InsertObjectL( *object ); - PERFLOGSTOP( KObjectManagerInsert ); - CleanupStack::PopAndDestroy( object ); // - object + // add this new folder to framework metadata DB + CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC( 0, // Dev Dp hard code + EMTPFormatCodeAssociation, + iStorages[0], + folder ); // + object + object->SetUint( CMTPObjectMetaData::EParentHandle, KMTPHandleNoParent ); + object->SetUint( CMTPObjectMetaData::EFormatSubCode, EMTPAssociationTypeGenericFolder ); + PERFLOGSTART( KObjectManagerInsert ); + iObjectMgr.InsertObjectL( *object ); + PERFLOGSTOP( KObjectManagerInsert ); + CleanupStack::PopAndDestroy( object ); // - object + } + CleanupStack::PopAndDestroy( tempBuf ); // - tempBuf } - CleanupStack::PopAndDestroy( tempBuf ); // - tempBuf // find all abstract medias stored in MPX delete iAbstractMedias; iAbstractMedias = NULL; - PERFLOGSTART( KMpxGetAllPlaylist ); - TRAPD( err, iDataProvider.GetWrapperL().GetAllPlaylistL( root, &iAbstractMedias ) ); - PERFLOGSTOP( KMpxGetAllPlaylist ); + iAbstractMedias = new( ELeave ) CDesCArrayFlat( KMTPDriveGranularity ); + TMPXGeneralCategory category = ( iEnumState == EEnumPlaylist ) ? EMPXPlaylist : EMPXAbstractAlbum; + PERFLOGSTART( KMpxGetAllAbstractMedia ); + TRAPD( err, iDataProvider.GetWrapperL().GetAllAbstractMediaL( root, *iAbstractMedias, category ) ); + PERFLOGSTOP( KMpxGetAllAbstractMedia ); if ( iAbstractMedias != NULL && err == KErrNone ) { iCount = iAbstractMedias->Count(); - iCurrentIndex = 0; + } + else + { + iCount = 0; + } + iCurrentIndex = 0; + + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::InitStorageL" ) ); + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderEnumerator::ScanNextL +// Proceed to next abstract media item +// ----------------------------------------------------------------------------- +// +void CAbstractMediaMtpDataProviderEnumerator::ScanNextL() + { + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::ScanNextL" ) ); + + if ( iCurrentIndex >= iCount ) + { + iEnumState++; + } + + if ( iEnumState >= EEnumCount ) + { + iEnumState = EEnumPlaylist; + iResetCount = 0; + + PERFLOGSTART( KResetObjectFormatSubCode ); + ResetObjectFormatSubCodeL( iStorages[0] ); + PERFLOGSTOP( KResetObjectFormatSubCode ); + + PRINT2( _L( "MM MTP <> ResetObjectFormatSubCodeL, storage = 0x%x, iResetCount = %d" ), iStorages[0], iResetCount ); + iStorages.Remove( 0 ); + } + + if ( iStorages.Count() > 0 ) + { + if( iCurrentIndex >= iCount ) + { + InitStorageL(); + } TRequestStatus* status = &iStatus; User::RequestComplete( status, iStatus.Int() ); @@ -247,46 +297,15 @@ } else { - iCount = 0; - iCurrentIndex = 0; - ScanNextL(); - } - - PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::ScanStorageL" ) ); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderEnumerator::ScanNextStorageL -// -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderEnumerator::ScanNextL() - { - PRINT1( _L( "MM MTP = > CAbstractMediaMtpDataProviderEnumerator::ScanNextStorageL iStorages.Count = %d" ), iStorages.Count() ); - if ( iCurrentIndex < iCount ) - { - TRequestStatus* status = &iStatus; - User::RequestComplete( status, iStatus.Int() ); - SetActive(); - - PRINT2( _L( "MM MTP <> Current storage is still being scanned, current index = %d, total AbstractMedia count = %d" ), - iCurrentIndex, - iCount ); - } - // If there are one or more unscanned storages left - // (the currently scanned one is still on the list) - else if ( iStorages.Count() > 1 ) - { - iStorages.Remove( 0 ); - ScanStorageL( iStorages[0] ); - } - else - { // We are done - PRINT( _L( "MM MTP <> Objects enumeration completed 2" ) ); + PRINT( _L( "MM MTP <> Objects enumeration completed" ) ); + delete iAbstractMedias; + iAbstractMedias = NULL; iStorages.Reset(); SignalCompleteL( iDataProvider ); } + + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::ScanNextL" ) ); } // ----------------------------------------------------------------------------- @@ -296,30 +315,35 @@ // void CAbstractMediaMtpDataProviderEnumerator::RunL() { - TBuf playlist; + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::RunL" ) ); + if ( iCurrentIndex < iCount ) + { + PRINT2( _L( "MM MTP <> Current storage is still being scanned, current index = %d, total AbstractMedia count = %d" ), + iCurrentIndex, + iCount ); - // insert all playlists into handle db of framework - CMPXMedia* media = ( *iAbstractMedias )[iCurrentIndex]; - PERFLOGSTART( KMpxGetPlaylistName ); - iDataProvider.GetWrapperL().GetPlaylistNameL( media, playlist ); - PERFLOGSTOP( KMpxGetPlaylistName ); - AddEntryL( playlist ); + // Insert all abstract medias into handle db of framework + iCurrentIndex++; // Increase the index first in case of leave + TPtrC entrySuid( ( *iAbstractMedias )[iCurrentIndex-1] ); - // find all reference of each playlist and create dummy files for each playlist - CDesCArray* references = new ( ELeave ) CDesCArrayFlat( KMTPDriveGranularity ); - CleanupStack::PushL( references ); // + references + if ( iEnumState == EEnumAbstractAlbum ) + { + // The abstract album may be removed, check it first + TBool ret = BaflUtils::FileExists( iFramework.Fs(), entrySuid ); + PRINT2( _L( "MM MTP <> BaflUtils::FileExists( RFs,%S ) ret = %d" ), &entrySuid, ret ); + } + else // EEnumPlaylist + { + // Add an object to the object store for DB based playlist + AddEntryL( entrySuid ); + } - PERFLOGSTART( KMpxQueryPlaylistReference ); - iDataProvider.GetWrapperL().GetAllReferenceL( media, *references ); - PERFLOGSTOP( KMpxQueryPlaylistReference ); - - // insert references into reference db - AddReferencesL( playlist, *references ); - - CleanupStack::PopAndDestroy( references ); // - references - iCurrentIndex++; + // Getting all reference during internal enumeration takes too long, query later on demand + } ScanNextL(); + + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::RunL" ) ); } // ----------------------------------------------------------------------------- @@ -332,6 +356,7 @@ if ( aError != KErrNone ) PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::RunError with error %d" ), aError ); + TRAP_IGNORE( SignalCompleteL( iDataProvider ) ); return KErrNone; } @@ -343,7 +368,7 @@ // void CAbstractMediaMtpDataProviderEnumerator::DoCancel() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -378,64 +403,89 @@ PERFLOGSTART( KObjectManagerObjectUid ); TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parser.DriveAndPath() ); PERFLOGSTOP( KObjectManagerObjectUid ); - object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle ); + + // MTP FW returns KMTPHandleNone for parentHandle in two situations: + // 1. The path doesn't exist + // 2. The object is under root directory + if ( parentHandle == KMTPHandleNone ) + { + if ( BaflUtils::PathExists( iFramework.Fs(), parser.DriveAndPath() ) ) + { + parentHandle = KMTPHandleNoParent; + } + else + { + iDataProvider.GetWrapperL().DeleteObjectL( *object ); + } + } - PERFLOGSTART(KObjectManagerInsert); - iObjectMgr.InsertObjectL( *object ); - PERFLOGSTOP(KObjectManagerInsert); + if ( parentHandle != KMTPHandleNone ) + { + // Handle .m3u playlist like abstract playlist in two situations: + // 1. The .m3u file is not on the file system. + // 2. The .m3u file is hidden and 0 size + TBool add = ETrue; + if ( format == EMTPFormatCodeM3UPlaylist ) + { + TEntry entry; + TInt err = iFramework.Fs().Entry( aSuid, entry ); + add = ( err != KErrNone) || ( entry.iSize == 0 && entry.IsHidden() ); + } + + if ( add ) + { + object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle ); + + PERFLOGSTART( KObjectManagerInsert ); + iObjectMgr.InsertObjectL( *object ); + PERFLOGSTOP( KObjectManagerInsert ); + + //Create the dummy file on file system + iDataProvider.GetWrapperL().CreateDummyFile( aSuid ); + // remember the abstract media file for clean up + iDataProvider.GetWrapperL().AddDummyFileL( aSuid ); + } + } CleanupStack::PopAndDestroy( object );// - object - iDataProvider.GetWrapperL().CreateDummyFile( aSuid ); - - // remember the abstract media file for clean up - iDataProvider.GetWrapperL().AddDummyFileL( aSuid ); - PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::AddEntryL" ) ); } -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderEnumerator::AddReferencesL -// Add references into reference db according to abstract media name -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderEnumerator::AddReferencesL( const TDesC& aAbstractMediaName, - CDesCArray& aReferences ) +void CAbstractMediaMtpDataProviderEnumerator::ResetObjectFormatSubCodeL( TUint32 aStorageId ) { - TInt count = aReferences.Count(); - PRINT2( _L("MM MTP => CAbstractMediaMtpDataProviderEnumerator::AddReferencesL AbstractMedia name = %S, ref count = %d"), &aAbstractMediaName, count ); - - // check if references are valid - CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC(); // + object - MMTPObjectMgr& objectMgr = iFramework.ObjectMgr(); + PRINT1( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::ResetObjectFormatSubCodeL, StorageId = 0x%x" ), + aStorageId ); + RMTPObjectMgrQueryContext context; + RArray handles; + CleanupClosePushL( context ); // + context + CleanupClosePushL( handles ); // + handles + + // search all handles in desired storage with desired DP id + TMTPObjectMgrQueryParams params( aStorageId, KMTPFormatsAll, KMTPHandleNone, iFramework.DataProviderId() ); - TInt removeCount = 0; - for ( TInt i = 0; i < count; i++ ) + do { - TInt index = i - removeCount; - PRINT2( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::AddReferencesL ref[%d]'s name = %S" ), index, &( aReferences[index] ) ); - PERFLOGSTART( KObjectManagerHandle ); - TUint32 handle = iFramework.ObjectMgr().HandleL( aReferences[index] ); - PERFLOGSTOP( KObjectManagerHandle ); - if ( handle == KMTPHandleNone ) // object doesn't exist + iObjectMgr.GetObjectHandlesL( params, context, handles ); + + for ( TInt i = 0; i < handles.Count(); i++ ) { - TPtrC temp( aReferences[index] ); - PRINT1( _L( "MM MTP <> CAbstractMediaMtpDataProviderEnumerator::AddReferencesL, [%S] doesn't existed in handle db, remove this from reference array" ), &temp ); - - // if handle is invalid, remove from reference array - aReferences.Delete( index, 1 ); - removeCount++; + CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo + + iResetCount++; + iObjectMgr.ObjectL( handles[i], *objectInfo ); + // EMTPSubFormatCodeUnknown means references of the object haven't been insert into reference db of fw. + objectInfo->SetUint( CMTPObjectMetaData::EFormatSubCode, EMTPSubFormatCodeUnknown ); + iObjectMgr.ModifyObjectL( *objectInfo ); + CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo } } - CleanupStack::PopAndDestroy( object ); // - object + while ( !context.QueryComplete() ); - // add all references into references db - MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); - PERFLOGSTART( KReferenceManagerSetReference ); - referenceMgr.SetReferencesL( aAbstractMediaName, aReferences ); - PERFLOGSTOP( KReferenceManagerSetReference ); + CleanupStack::PopAndDestroy( &handles ); // - handles + CleanupStack::PopAndDestroy( &context ); // - context - PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::AddReferencesL" ) ); + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::ResetObjectFormatSubCodeL" ) ); } //end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetformatcapabilities.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetformatcapabilities.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/* -* 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 - -#include "cabstractmediamtpdataprovidergetformatcapabilities.h" - - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetFormatCapabilities::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// - -MMmRequestProcessor* CAbstractMediaMtpDataProviderGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CAbstractMediaMtpDataProviderGetFormatCapabilities* self = - new ( ELeave ) CAbstractMediaMtpDataProviderGetFormatCapabilities( aFramework, - aConnection, - aDpConfig ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetFormatCapabilities::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderGetFormatCapabilities::ConstructL() - { - CGetFormatCapabilities::ConstructL(); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetFormatCapabilities::~CAbstractMediaMtpDataProviderGetFormatCapabilities() -// Destructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderGetFormatCapabilities::~CAbstractMediaMtpDataProviderGetFormatCapabilities() - { - - } - - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetFormatCapabilities::CAbstractMediaMtpDataProviderGetFormatCapabilities -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderGetFormatCapabilities::CAbstractMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CGetFormatCapabilities( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDesc -// -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL() - { - iInterdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL(); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificObjectPropertyL -// Service specific object property -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CAbstractMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL( TUint16 aPropCode ) - { - return NULL; - } - - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetinterdependentpropdesc.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetinterdependentpropdesc.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/* -* 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: Implement the operation: GetInterdenpendentPropDesc -* -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cabstractmediamtpdataprovidergetinterdependentpropdesc.h" -#include "cmmmtpdpmetadataaccesswrapper.h" -#include "tmmmtpdppanic.h" -#include "abstractmediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "mmmtpdpconfig.h" - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CAbstractMediaMtpDataProviderGetInterdependentPropDesc::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& /*aDpConfig*/ ) - { - CAbstractMediaMtpDataProviderGetInterdependentPropDesc* self = - new ( ELeave ) CAbstractMediaMtpDataProviderGetInterdependentPropDesc( aFramework, - aConnection ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ConstructL() - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::~CAbstractMediaMtpDataProviderGetInterdependentPropDesc -// Destructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderGetInterdependentPropDesc::~CAbstractMediaMtpDataProviderGetInterdependentPropDesc() - { - delete iDataset; - } - -// ----------------------------------------------------------------------------- -// CMTPGetInterdependentPropDesc::CMTPGetInterdependentPropDesc -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderGetInterdependentPropDesc::CAbstractMediaMtpDataProviderGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ) : - CRequestProcessor( aFramework, aConnection, 0, NULL ) - { - PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) ); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::CheckRequestL -// Verify the reqeust and returns it -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CAbstractMediaMtpDataProviderGetInterdependentPropDesc::CheckRequestL() - { - TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL(); - iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); - - if ( EMTPRespCodeOK == responseCode ) - { - TInt count = sizeof( KAbstractMediaMtpDataProviderSupportedFormats ) / sizeof( TUint16 ); - - responseCode = EMTPRespCodeInvalidObjectFormatCode; - - for ( TInt i = 0; i < count; i++ ) - { - if ( iFormatCode == KAbstractMediaMtpDataProviderSupportedFormats[i] ) - { - responseCode = EMTPRespCodeOK; - break; - } - } - } - - return responseCode; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL -// service a request at request phase -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL() - { - PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL" ) ); - - // Clear the data set. - delete iDataset; - iDataset = NULL; - iDataset = CMTPTypeInterdependentPropDesc::NewL(); - - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL don't have interdependent properties!" ) ); - - // Send the dataset. - SendDataL( *iDataset ); - PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderGetInterdependentPropDesc::ServiceL" ) ); - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropdesc.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropdesc.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* 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: Implement the operation: GetObjectPropDesc -* -*/ - -#include -#include - -#include "cabstractmediamtpdataprovidergetobjectpropdesc.h" -#include "mmmtpdplogger.h" -#include "abstractmediamtpdataproviderconst.h" -#include "mmmtpdpdefs.h" - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetObjectPropDesc::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CAbstractMediaMtpDataProviderGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CAbstractMediaMtpDataProviderGetObjectPropDesc* self = - new ( ELeave ) CAbstractMediaMtpDataProviderGetObjectPropDesc( aFramework, - aConnection, - aDpConfig ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetObjectPropDesc::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderGetObjectPropDesc::ConstructL() - { - CGetObjectPropDesc::ConstructL(); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetObjectPropDesc::~CAbstractMediaMtpDataProviderGetObjectPropDesc -// Destructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderGetObjectPropDesc::~CAbstractMediaMtpDataProviderGetObjectPropDesc() - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetObjectPropDesc::CAbstractMediaMtpDataProviderGetObjectPropDesc -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderGetObjectPropDesc::CAbstractMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CGetObjectPropDesc( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL -// -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ ) - { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL leave with not supportd" ) ); - User::Leave( KErrNotSupported ); - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectproplist.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,6 +16,10 @@ */ +#include +#include +#include + #include "cabstractmediamtpdataprovidergetobjectproplist.h" #include "abstractmediamtpdataproviderconst.h" #include "mmmtpdplogger.h" @@ -50,7 +54,7 @@ // CAbstractMediaMtpDataProviderGetObjectPropList::~CAbstractMediaMtpDataProviderGetObjectPropList() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -61,9 +65,9 @@ CAbstractMediaMtpDataProviderGetObjectPropList::CAbstractMediaMtpDataProviderGetObjectPropList( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CGetObjectPropList( aFramework, aConnection, aDpConfig ) + CGetObjectPropList( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -81,11 +85,70 @@ // do nothing here, just leave, as this should never be invoked or invalid propcode // ----------------------------------------------------------------------------- // -TInt CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/, - TUint32 /*aHandle*/ ) +TInt CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 aPropCode, + TUint32 aHandle ) { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) ); - return KErrNotSupported; + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL" ) ); + TInt err = KErrNone; + switch ( aPropCode ) + { + case EMTPObjectPropCodeRepresentativeSampleFormat: + { + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, 0 ); + } + break; + case EMTPObjectPropCodeRepresentativeSampleSize: + case EMTPObjectPropCodeRepresentativeSampleHeight: + case EMTPObjectPropCodeRepresentativeSampleWidth: + { + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, 0 ); + } + break; + case EMTPObjectPropCodeRepresentativeSampleData: + { + const TDesC& suid( iObject->DesC( CMTPObjectMetaData::ESuid ) ); + CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT8 ); // + desData + + RFile sampleFile; + TInt err = sampleFile.Open( iFramework.Fs(), suid, EFileShareReadersOnly ); + PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData open filename=%S, err=%d" ), &suid, err ); + + CleanupClosePushL( sampleFile ); // + sampleFile + TInt size = 0; + if( err == KErrNone ) + { + err = sampleFile.Size( size ); + } + PRINT2( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Size size=%d, err=%d" ), size, err ); + if( err == KErrNone && size > 0 ) + { + HBufC8* sampleData = HBufC8::NewLC( size * sizeof( TUint8 ) ); // + sampleData + TPtr8 samplePtr = sampleData->Des(); + err = sampleFile.Read( samplePtr ); + PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Read err=%d" ), err ); + PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData samplePtr.Size=%d" ), samplePtr.Size() ); + if( err == KErrNone ) + { + desData->SetByDesL( samplePtr ); + } + CleanupStack::PopAndDestroy( sampleData ); // - sampleData + } + iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); + iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData ); + + CleanupStack::PopAndDestroy( &sampleFile ); // - sampleFile + CleanupStack::PopAndDestroy( desData ); // - desData + } + break; + + default: + err = KErrNotSupported; + } + + PRINT1( _L( "MM MTP <= CAbstractMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL, err = %d" ), err ); + return err; } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidergetobjectpropvalue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,6 +16,9 @@ */ +#include +#include + #include "cabstractmediamtpdataprovidergetobjectpropvalue.h" #include "abstractmediamtpdataproviderconst.h" #include "mmmtpdplogger.h" @@ -49,7 +52,7 @@ // void CAbstractMediaMtpDataProviderGetObjectPropValue::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -59,7 +62,7 @@ // CAbstractMediaMtpDataProviderGetObjectPropValue::~CAbstractMediaMtpDataProviderGetObjectPropValue() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -72,7 +75,7 @@ MMmMtpDpConfig& aDpConfig ) : CGetObjectPropValue( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -81,10 +84,64 @@ // invoked or invalid propcode // ----------------------------------------------------------------------------- // -void CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ ) +void CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 aPropCode ) { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL, leave with KErrNotSupported")); - User::Leave( KErrNotSupported ); + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL" ) ); + switch ( aPropCode ) + { + case EMTPObjectPropCodeRepresentativeSampleFormat: + { + iMTPTypeUint16.Set( 0 ); + SendDataL( iMTPTypeUint16 ); + } + break; + + case EMTPObjectPropCodeRepresentativeSampleSize: // fall through + case EMTPObjectPropCodeRepresentativeSampleHeight: // fall through + case EMTPObjectPropCodeRepresentativeSampleWidth: + { + iMTPTypeUint32.Set( 0 ); + SendDataL( iMTPTypeUint32 ); + } + break; + + case EMTPObjectPropCodeRepresentativeSampleData: + { + if ( iMTPTypeArray != NULL ) + { + delete iMTPTypeArray; + iMTPTypeArray = NULL; + } + iMTPTypeArray = CMTPTypeArray::NewL( EMTPTypeAUINT8 ); + + const TDesC& suid = iObjectInfo->DesC( CMTPObjectMetaData::ESuid ); + PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData file suid=%S" ), &suid ); + RFile sampleFile; + User::LeaveIfError( sampleFile.Open( iFramework.Fs(), suid, EFileShareReadersOnly ) ); + CleanupClosePushL( sampleFile ); // + sampleFile + + TInt size = 0; + User::LeaveIfError( sampleFile.Size( size ) ); + PRINT1( _L( "MM MTP <> EMTPObjectPropCodeRepresentativeSampleData sampleFile.Size() size=%d" ), size ); + + if( size > 0 ) + { + HBufC8* sampleData = HBufC8::NewLC( size * sizeof(TUint8) ); // + sampleData + TPtr8 samplePtr = sampleData->Des(); + User::LeaveIfError( sampleFile.Read( samplePtr ) ); + iMTPTypeArray->SetByDesL( samplePtr ); + CleanupStack::PopAndDestroy( sampleData ); // - sampleData + } + CleanupStack::PopAndDestroy( &sampleFile ); // - sampleFile + + SendDataL( *iMTPTypeArray ); + } + break; + + default: + PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL, leave with KErrNotSupported")); + User::Leave( KErrNotSupported ); + } } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidermoveobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidermoveobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidermoveobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -61,7 +61,7 @@ // CAbstractMediaMtpDataProviderMoveObject::~CAbstractMediaMtpDataProviderMoveObject() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -74,7 +74,7 @@ MMmMtpDpConfig& aDpConfig ) : CMoveObject( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -87,21 +87,10 @@ const CMTPObjectMetaData& /*aObject*/ ) { PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderMoveObject::ServiceGetSpecificObjectPropertyL" ) ); - // do nothing - } -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL -// do nothing here -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CAbstractMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL( TUint16 /*aPropCode*/, - const CMTPObjectMetaData& /*aObject*/, - const CMTPTypeObjectPropListElement& /*aElement*/ ) - { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL" ) ); + // Do nothing now. + // May need add implementation here for further extension. - return EMTPRespCodeOK; } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderpropertysettingutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderpropertysettingutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,95 @@ +/* + * 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 +#include +#include +#include + +#include "cabstractmediamtpdataproviderpropertysettingutility.h" +#include "mmmtpdplogger.h" + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderPropertySettingUtility::NewL +// Two-phase construction method +// ----------------------------------------------------------------------------- +// +CAbstractMediaMtpDataProviderPropertySettingUtility* CAbstractMediaMtpDataProviderPropertySettingUtility::NewL() + { + CAbstractMediaMtpDataProviderPropertySettingUtility* self = + new ( ELeave ) CAbstractMediaMtpDataProviderPropertySettingUtility(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderPropertySettingUtility::~CAbstractMediaMtpDataProviderPropertySettingUtility +// Destructor +// ----------------------------------------------------------------------------- +// +CAbstractMediaMtpDataProviderPropertySettingUtility::~CAbstractMediaMtpDataProviderPropertySettingUtility() + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CAbstractMediaMtpDataProviderPropertySettingUtility::CAbstractMediaMtpDataProviderPropertySettingUtility +// Standard C++ Constructor +// ----------------------------------------------------------------------------- +// +CAbstractMediaMtpDataProviderPropertySettingUtility::CAbstractMediaMtpDataProviderPropertySettingUtility() + { + // Do nothing + } + +TMTPResponseCode CAbstractMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig, + TUint16 aPropCode, + const CMTPObjectMetaData& aObject, + const CMTPTypeObjectPropListElement& aElement ) + { + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL" ) ); + + TMTPResponseCode responseCode = EMTPRespCodeOK; + + switch ( aPropCode ) + { + case EMTPObjectPropCodeRepresentativeSampleData: + { + CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT8 ); + desData->SetByDesL( aElement.ArrayL( CMTPTypeObjectPropListElement::EValue ) ); + responseCode = SetMetaDataToWrapper( aDpConfig, aPropCode, *desData, aObject ); + CleanupStack::PopAndDestroy( desData ); + } + break; + + case EMTPObjectPropCodeRepresentativeSampleFormat: + case EMTPObjectPropCodeRepresentativeSampleSize: + case EMTPObjectPropCodeRepresentativeSampleHeight: + case EMTPObjectPropCodeRepresentativeSampleWidth: + // no place to store, do nothing. reserve here for future usage + break; + + default: + // Should not happen, property code should have been checked before set to store. + User::Leave( KErrNotSupported ); + } + + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL" ) ); + return responseCode; + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderrenameobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -17,10 +17,9 @@ #include -#include #include +#include #include -#include #include "cabstractmediamtpdataproviderrenameobject.h" #include "mmmtpdplogger.h" @@ -53,9 +52,9 @@ // CAbstractMediaMtpDataProviderRenameObject::CAbstractMediaMtpDataProviderRenameObject( MMTPDataProviderFramework& aFramework, CMmMtpDpMetadataAccessWrapper& aWrapper ) : - CRenameObject( aFramework, aWrapper ) + CRenameObject( aFramework, aWrapper ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -65,7 +64,7 @@ // CAbstractMediaMtpDataProviderRenameObject::~CAbstractMediaMtpDataProviderRenameObject() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -90,14 +89,12 @@ iWrapper.AddDummyFileL( iFileName ); // Do not update MPX db to keep the same behavior in mass storage and device file manager. } - else - { - TRAPD( err, iWrapper.RenameObjectL( iOldFileName, iFileName ) ); + + TRAPD( err, iWrapper.RenameObjectL( *iObjectInfo, iFileName ) ); - // should not fail for 1 file, keep it going, as folder already renamed - if ( err != KErrNone ) - PRINT1( _L( "MM MTP <> CRenameObject::PerformAdditionalActionL err = %d" ), err ); - } + // should not fail for 1 file, keep it going, as folder already renamed + if ( err != KErrNone ) + PRINT1( _L( "MM MTP <> CRenameObject::PerformAdditionalActionL err = %d" ), err ); // the reference DB use PUID // so we needn't to update the reference DB diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersendobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersendobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* 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: Implement the operation: SendObjectInfo/SendObjectPropList/SendObject -* -*/ - - -#include -#include - -#include "cabstractmediamtpdataprovidersendobject.h" -#include "abstractmediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "mmmtpdpconfig.h" - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSendObject::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CAbstractMediaMtpDataProviderSendObject::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CAbstractMediaMtpDataProviderSendObject* self = - new (ELeave) CAbstractMediaMtpDataProviderSendObject( aFramework, - aConnection, - aDpConfig ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSendObject::~CAbstractMediaMtpDataProviderSendObject -// Destructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderSendObject::~CAbstractMediaMtpDataProviderSendObject() - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSendObject::CAbstractMediaMtpDataProviderSendObject -// Standard C++ Constructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderSendObject::CAbstractMediaMtpDataProviderSendObject( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CSendObject( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSendObject::ConstructL -// 2nd Phase Constructor -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderSendObject::ConstructL() - { - CSendObject::ConstructL(); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSendObject::ServiceSpecificObjectPropertyL -// no need to do anything here, just leave, as this should never be invoked or -// invalid propcode -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CAbstractMediaMtpDataProviderSendObject::SetSpecificObjectPropertyL( TUint16 /*aPropCode*/, - const CMTPObjectMetaData& /*aObject*/, - const CMTPTypeObjectPropListElement& /*aElement*/ ) - { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderSendObject::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) ); - User::Leave( KErrNotSupported ); - - return EMTPRespCodeOK; - } - -TMTPResponseCode CAbstractMediaMtpDataProviderSendObject::CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType ) - { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderSendObject::ServiceSpecificCheckDataTypeL, leave with KErrNotSupported" ) ); - // TODO: User::Leave( KErrNotSupported ); - return EMTPRespCodeOK; - } - -TInt CAbstractMediaMtpDataProviderSendObject::HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& /*aObject*/ ) - { - // do nothing, simply return the error - return aError; - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectproplist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* 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: Implement the operation: getobjectproplist -* -*/ - - -#include -#include - -#include "cabstractmediamtpdataprovidersetobjectproplist.h" -#include "abstractmediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "mmmtpdpconfig.h" - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectPropList::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CAbstractMediaMtpDataProviderSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CAbstractMediaMtpDataProviderSetObjectPropList* self = - new (ELeave) CAbstractMediaMtpDataProviderSetObjectPropList( aFramework, - aConnection, - aDpConfig ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectPropList::~CAbstractMediaMtpDataProviderSetObjectPropList -// Destructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderSetObjectPropList::~CAbstractMediaMtpDataProviderSetObjectPropList() - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectPropList::CAbstractMediaMtpDataProviderSetObjectPropList -// Standard C++ Constructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderSetObjectPropList::CAbstractMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CSetObjectPropList( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectPropList::ConstructL -// 2nd Phase Constructor -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderSetObjectPropList::ConstructL() - { - CSetObjectPropList::ConstructL(); - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL -// no need to do anything here, just leave, as this should never be invoked or -// invalid propcode -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CAbstractMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/, - const CMTPObjectMetaData& /*aObject*/, - const CMTPTypeObjectPropListElement& /*aElement*/ ) - { - PRINT( _L( "MM MTP <> CAbstractMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL, leave with KErrNotSupported" ) ); - User::Leave( KErrNotSupported ); - - return EMTPRespCodeOK; - } - -TInt CAbstractMediaMtpDataProviderSetObjectPropList::HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& /*aObject*/ ) - { - // do nothing, simply return the error - return aError; - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectpropvalue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectpropvalue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,6 +16,8 @@ */ +#include + #include "cabstractmediamtpdataprovidersetobjectpropvalue.h" #include "abstractmediamtpdataproviderconst.h" #include "mmmtpdplogger.h" @@ -49,7 +51,7 @@ // void CAbstractMediaMtpDataProviderSetObjectPropValue::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -60,9 +62,9 @@ CAbstractMediaMtpDataProviderSetObjectPropValue::CAbstractMediaMtpDataProviderSetObjectPropValue( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CSetObjectPropValue( aFramework, aConnection, aDpConfig ) + CSetObjectPropValue( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -72,7 +74,7 @@ // CAbstractMediaMtpDataProviderSetObjectPropValue::~CAbstractMediaMtpDataProviderSetObjectPropValue() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -81,9 +83,22 @@ // invalid propcode // ----------------------------------------------------------------------------- // -TBool CAbstractMediaMtpDataProviderSetObjectPropValue::IsSpecificPropCodeReadOnly( TUint16 /*aPropCode*/ ) const +TBool CAbstractMediaMtpDataProviderSetObjectPropValue::IsSpecificPropCodeReadOnly( TUint16 aPropCode ) const { - return EFalse; + TBool ret = EFalse; + switch ( aPropCode ) + { + case EMTPObjectPropCodeRepresentativeSampleFormat: + case EMTPObjectPropCodeRepresentativeSampleSize: + case EMTPObjectPropCodeRepresentativeSampleHeight: + case EMTPObjectPropCodeRepresentativeSampleWidth: + ret = ETrue; + break; + default: + ret = EFalse; + break; + } + return ret; } // ----------------------------------------------------------------------------- @@ -92,10 +107,24 @@ // invalid propcode // ----------------------------------------------------------------------------- // -void CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL( TUint16 /*aPropCode*/ ) +void CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL( TUint16 aPropCode ) { - PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL leave with KErrNotSupported" ) ); - User::Leave( KErrNotSupported ); + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL" ) ); + if ( aPropCode == EMTPObjectPropCodeRepresentativeSampleData ) + { + delete iMTPTypeArray; + iMTPTypeArray = NULL; + + iMTPTypeArray = CMTPTypeArray::NewL( EMTPTypeAUINT8 ); + ReceiveDataL( *iMTPTypeArray ); + } + else + { + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ReceiveDataSpecificObjectPropertyL leave with KErrNotSupported" ) ); + // Do nothing now. + // May need add implementation here for further extension. + User::Leave( KErrNotSupported ); + } } // ----------------------------------------------------------------------------- @@ -104,12 +133,26 @@ // invalid propcode // ----------------------------------------------------------------------------- // -TMTPResponseCode CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 /*aPropCode*/ ) +TMTPResponseCode CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 aPropCode ) { - PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL leave with KErrNotSupported" ) ); - User::Leave( KErrNotSupported ); + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL" ) ); + TMTPResponseCode responseCode = EMTPRespCodeOK; - return EMTPRespCodeOK; + if ( aPropCode == EMTPObjectPropCodeRepresentativeSampleData ) + { + responseCode = ServiceMetaDataToWrapperL( aPropCode, + *iMTPTypeArray, + *iObjectInfo ); + } + else + { + PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL leave with KErrNotSupported" ) ); + // Do nothing now. + // May need add implementation here for further extension. + User::Leave( KErrNotSupported ); + } + PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderSetObjectPropValue::ServiceSpecificObjectPropertyL" ) ); + return responseCode; } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectreferences.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataprovidersetobjectreferences.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* 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: Implement the operation: SetObjectReferences -* -*/ - - -#include "cabstractmediamtpdataprovidersetobjectreferences.h" -#include "abstractmediamtpdataproviderconst.h" -#include "cmmmtpdpmetadataaccesswrapper.h" -#include "mmmtpdplogger.h" - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectReferences::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CAbstractMediaMtpDataProviderSetObjectReferences::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CAbstractMediaMtpDataProviderSetObjectReferences* self = - new ( ELeave ) CAbstractMediaMtpDataProviderSetObjectReferences( aFramework, - aConnection, - aDpConfig ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectReferences::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderSetObjectReferences::ConstructL() - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectReferences::~CAbstractMediaMtpDataProviderSetObjectReferences -// Destructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderSetObjectReferences::~CAbstractMediaMtpDataProviderSetObjectReferences() - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectReferences::CAbstractMediaMtpDataProviderSetObjectReferences -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CAbstractMediaMtpDataProviderSetObjectReferences::CAbstractMediaMtpDataProviderSetObjectReferences( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CSetObjectReferences( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CAbstractMediaMtpDataProviderSetObjectReferences::DoSetObjectReferencesL -// set references to DB -// ----------------------------------------------------------------------------- -// -void CAbstractMediaMtpDataProviderSetObjectReferences::DoSetObjectReferencesL( CMmMtpDpMetadataAccessWrapper& aWrapper, - TUint16 aObjectFormat, - const TDesC& aSrcFileName, - CDesCArray& aRefFileArray ) - { - TInt count = sizeof( KAbstractMediaMtpDataProviderSupportedFormats ) / sizeof (TUint16); - TBool supported = EFalse; - - for( TInt i = 0; i < count; i++ ) - { - if( KAbstractMediaMtpDataProviderSupportedFormats[i] == aObjectFormat ) - { - supported = ETrue; - break; - } - } - - if ( supported ) - { - aWrapper.SetPlaylistL( aSrcFileName, aRefFileArray ); - } - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/data/mediamtpdataprovider_config.rss --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/data/mediamtpdataprovider_config.rss Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/data/mediamtpdataprovider_config.rss Wed Jun 23 17:51:16 2010 +0100 @@ -17,24 +17,15 @@ #include -#include "mediamtpdataprovider_config.rh" RESOURCE MTP_DATA_PROVIDER dpConfig { type = KMTPDataProviderTypeECOM; major_version = 1; object_enumeration_persistent = 0; - supported_modes = KMTPModeMTP; + supported_modes = KMTPModeMTP; server_name = ""; server_image_name = ""; - opaque_resource = "folderConfig"; + opaque_resource = 0; enumeration_phase = 11; } - -RESOURCE MEDIAMTPDATAPROVIDE_CONFIG folderConfig - { - media_drive = 4; // 2 change to SD card - } - - - diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/group/mediamtpdataprovider.mmp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/group/mediamtpdataprovider.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/group/mediamtpdataprovider.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -40,16 +40,15 @@ SOURCE mediamtpdataprovidercontrollerimp.cpp SOURCE mediamtpdataproviderprocessor.cpp SOURCE cmediamtpdataproviderenumerator.cpp -SOURCE cmediamtpdataprovidergetobjectpropdesc.cpp -SOURCE cmediamtpdataprovidergetinterdependentpropdesc.cpp SOURCE cmediamtpdataprovidergetobjectpropvalue.cpp SOURCE cmediamtpdataprovidergetobjectproplist.cpp SOURCE cmediamtpdataprovidersetobjectpropvalue.cpp -SOURCE cmediamtpdataprovidersetobjectproplist.cpp + SOURCE cmediamtpdataprovidercopyobject.cpp SOURCE cmediamtpdataprovidermoveobject.cpp -SOURCE cmediamtpdataprovidersendobject.cpp -SOURCE cmediamtpdataprovidergetformatcapabilities.cpp +SOURCE cmediamtpdataproviderpropertysettingutility.cpp +SOURCE cmediamtpdataproviderdescriptionutility.cpp + SOURCEPATH ../data START RESOURCE mediamtpdataprovider.rss diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovider.h Wed Jun 23 17:51:16 2010 +0100 @@ -69,6 +69,16 @@ */ CMmMtpDpMetadataAccessWrapper& GetWrapperL(); + /** + * @return The utility to setting properties + */ + CPropertySettingUtility* PropSettingUtility(); + + /** + * @return The utiltiy to setting descriptions + */ + CDescriptionUtility* DescriptionUtility(); + protected: // from CMTPDataProviderPlugin void Cancel(); @@ -103,6 +113,12 @@ */ void RenameObjectL( const TMTPNotificationParamsHandle& aObject ); + /** + * Notify the data provider that the object has been added + * @param aObjectHandle the added object handle + */ + void ObjectAddedL( TUint32 aObjectHandle ); + void StartObjectEnumerationL( TUint32 aStorageId ); void StartStorageEnumerationL(); @@ -168,6 +184,7 @@ RArray iPendingEnumerations; TInt iActiveProcessor; + TBool iActiveProcessorRemoved; TBool iIsSessionOpen; CRenameObject *iRenameObject; @@ -178,7 +195,8 @@ RArray iSupportedPropVideo; RArray iSupportedPropAll; - TUint32 iDefaultStorageId; + CPropertySettingUtility* iPropSettingUtility; + CDescriptionUtility* iDescriptionUtility; }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidercopyobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidercopyobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidercopyobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -65,10 +65,6 @@ TUint32 aHandle, const CMTPObjectMetaData& aObject ); - TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - }; #endif // CMEDIAMTPDATAPROVIDERCOPYOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderdescriptionutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderdescriptionutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,133 @@ +/* +* 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: Media dp specific property description construction utility. +* Used by all request processors which related to property description +* +*/ + +#ifndef CMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H +#define CMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H + +#include "cdescriptionutility.h" + +class CMTPTypeInterdependentPropDesc; +class CMTPTypeObjectPropDesc; + +class CMediaMtpDataProviderDescriptionUtility : public CDescriptionUtility + { +public: + static CMediaMtpDataProviderDescriptionUtility* NewL(); + +private: + CMediaMtpDataProviderDescriptionUtility(); + +public: + /** + * Construct media dp specific interdependent property description. + * according to assigned format code. + * @param aFormatCode + * @return Interdependent property description dataset. + */ + CMTPTypeInterdependentPropDesc* NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode ); + + /** + * Construct media dp specific property description + * according to assigned format code and property code. + * @param aFormatCode + * @param aPropCode + * @return Property description dataset. + */ + CMTPTypeObjectPropDesc* NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode ); + +private: + + /** + * Append WM Audio specific to interdpendent property description. + * @return None + */ + void AppendWMAudioInterdepentPropDescL(CMTPTypeInterdependentPropDesc* aInterdependentPropDesc); + + /** + * Construct audio wave codec property description. + * @param aFormatCode + * @return Property description dataset of audio wave codec. + */ + CMTPTypeObjectPropDesc* NewAudioWaveCodecPropDescL( TUint aFormatCode ); + + /** + * Construct audio bitrate property description. + * @param aFormatCode, The format code + * @return Property description dataset of audio bitrate. + */ + CMTPTypeObjectPropDesc* NewAudioBitratePropDescL( TUint aFormatCode ); + + /** + * Construct property description of video fourCC codec. + * @param aFormatCode, The format code + * @return Property description dataset of video fourCC codec. + */ + CMTPTypeObjectPropDesc* NewVideoFourCCCodecPropDescL( TUint aFormatCode ); + + /** + * Construct property description of VideoBitrate. + * @param aFormatCode, The format code + * @return Property description dataset of video bitrate. + */ + CMTPTypeObjectPropDesc* NewVideoBitratePropDescL( TUint aFormatCode ); + + /** + * Construct property description of number of channels. + * @return Property description dataset of number of channels. + */ + CMTPTypeObjectPropDesc* NewNumberOfChannelsPropDescL(); + + /** + * Construct property description of code sample rate. + * @return Property description dataset of sample rate. + */ + CMTPTypeObjectPropDesc* NewCodeSampleRatePropDescL(); + + /** + * Construct property description of description. + * @return Property description dataset of description. + */ + CMTPTypeObjectPropDesc* NewDescriptionPropDescL(); + + /** + * Construct property description of scan type description. + * @return Property description dataset of scan type description. + */ + CMTPTypeObjectPropDesc* NewScanTypeDescriptionPropDescL(); + + /** + * Construct property description of encoding profile description. + * @return Property description dataset of encoding profile description. + */ + CMTPTypeObjectPropDesc* NewEncodingProfileDescriptionPropDescL(); + + /** + * Construct property description of DRM status. + * @return Property description dataset of drm status. + */ + CMTPTypeObjectPropDesc* NewDRMStatusPropDescL(); + + /** + * Construct property description of OMADRM status. + * @return Property description dataset of oma drm status. + */ + CMTPTypeObjectPropDesc* NewOMADRMStatusPropDescL(); + + }; + +#endif // CMEDIAMTPDATAPROVIDERDESCRIPTIONUTILITY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderenumerator.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderenumerator.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderenumerator.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,21 +20,11 @@ #define CMEDIAMTPDATAPROVIDERENUMERATOR_H #include -#include - #include "mmmtpenumerationcallback.h" #include "cmmmtpdpperflog.h" -// keep here to avoid warning on urel -_LIT( KDirectoryScan, "DirectoryScan" ); -_LIT( KFormatFilter, "FormatFilter" ); -_LIT( KObjectManagerObjectUid, "ObjectManagerObjectUid" ); -_LIT( KObjectManagerInsert, "ObjectManagerInsert" ); - // Forward declarations class MMTPDataProviderFramework; -class MMTPObjectMgr; -class CMTPObjectMetaData; class CMediaMtpDataProvider; /** @@ -63,7 +53,7 @@ * @param aStorageId storage to be enumerated */ void StartL( TUint32 aStorageId ); - + // introduce to cleanup db at close session void SessionClosedL(); @@ -74,6 +64,9 @@ */ void DoCancel(); + /** + * Update the mpx db flag for round trip + */ void RunL(); /** @@ -98,85 +91,6 @@ void SignalCompleteL( MMTPEnumerationCallback& aCallback, TInt aError = KErrNone ); - void ScanStorageL( TUint32 aStorageId ); - - /** - * Scan next storage - */ - void ScanNextStorageL(); - - /** - * Scans directory at aPath recursing into subdirectories on a depth - * first basis. - * - * Directory entries are kept in iDirStack - which is a LIFO stack. - * The current path, needed since TEntries don't keep track of it, - * is kept in iPath. - * - * The algorithm works as follows: - * - * 1. Read directory entries. - * 2. ProcessEntriesL is called if no error occurs and >= 1 entries are - * read. - * 3. ProcessEntriesL adds entries to database, if entry is directory - * add to iDirStack. - * 4. When all entries are processed pop entry off the dirstack, - * if entry is empty TEntry remove one directory from iPath. - * 5. Append entry name onto iPath - to update path with new depth - * (parent/subdir). - * 6. Push an empty TEntry onto iDirStack - this tells us we have - * recursed one, think of it as pushing the '\' separator onto - * iDirStack. - * 7. Repeat 1-7 until iDirStack is empty. - */ - void ScanDirL(); - - /** - * Recurse into the next directory on the stack - * and scan it for entries. - */ - void ScanNextDirL(); - - /** - * Scan next sub dir - */ - void ScanNextSubdirL(); - - /** - * Iterates iEntries adding entries as needed to object manager and - * iDirStack. - */ - void ProcessEntriesL(); - - /** - * Add a file entry to the object store - * @param aFullFileName current scanned file path - */ - void AddEntryL( const TDesC& aFullFileName ); - - /** - * Returns a TMTPFormatCode for the requested object - */ - TMTPFormatCode GetObjectFormatCode( const TDesC& aFullFileName ); - - /** - * @param aFullFileName the object file name - * @return the file if needed to be enumeratored? - */ - TBool IsFileAccepted( const TDesC& aFullFileName ); - - /** - * start count system tick - */ - void StartEnumerationCount(); - - /** - * check if the system tick more than predefined value - * @retuan if more than the predefined value, return true - * else return false - */ - TBool IsOverThreshold(); - /** * Get modified content and report to Symbian MTP Framework */ @@ -187,28 +101,10 @@ /** MMTPDataProviderFramework used to access MTP components*/ MMTPDataProviderFramework& iFramework; - /** MTP Object Manager */ - MMTPObjectMgr& iObjectMgr; - - /** MTP Data Provider ID */ - TUint iDataProviderId; - CMediaMtpDataProvider& iDataProvider; - TParse iPath; - RDir iDir; - TEntryArray iEntries; - TInt iFirstUnprocessed; - RPointerArray iDirStack; RArray iStorages; TUint32 iStorageId; - TUint32 iParentHandle; - TMTPFormatCode iFormatCode; - TBool iScanningDir; - // record the system tick - TUint iTickCountBegin; - TInt iTickPeriod; - #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) CMmMtpDpPerfLog* iPerfLog; #endif diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetformatcapabilities.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetformatcapabilities.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* 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 CMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H -#define CMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H - -#include "cgetformatcapabilities.h" - -class CMTPTypeObjectPropDesc; -/** -* Defines media data provider GetFormatCapabilities -*/ -class CMediaMtpDataProviderGetFormatCapabilities : public CGetFormatCapabilities - { -public: - - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CMediaMtpDataProviderGetFormatCapabilities(); - -protected: - // from CGetFormatCapabilities, override from baseclass - /** - * Service interdepent propdesc - */ - void ServiceInterdepentPropDescL(); - - /** - * Service specific object property - * @param aPropCode, The prop code - * @return MTPType object propdesc - */ - CMTPTypeObjectPropDesc* ServiceSpecificPropertyDescL( TUint16 aPropCode ); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * two-phase construction - */ - void ConstructL(); - - //functions used by ServiceInterdepentPropDesc - /** - * Service AudioWaveCodec - * @param aFormatCode, The format code - * @return MTPTypeInterdependentProperties - */ - CMTPTypeObjectPropDesc* ServiceAudioWaveCodecL(); - - /** - * Service AudioBitrate - * @param aFormatCode, The format code - * @return MTPTypeInterdependentProperties - */ - CMTPTypeObjectPropDesc* ServiceAudioBitrateL(); - - /** - * Service videoFourCCCodec - * @param aFormatCode, The format code - * @return MTPTypeInterdependentProperties - */ - CMTPTypeObjectPropDesc* ServiceVideoFourCCCodecL(); - - /** - * Service VideoBitrate - * @param aFormatCode, The format code - * @return MTPTypeInterdependentProperties - */ - CMTPTypeObjectPropDesc* ServiceVideoBitrateL(); - - /** - * Service RangeForm Description - * @param aMinValue The minimal value - * @param aMaxValue The maximal value - * @param aStepValue The step value - * @return MTPTypeObjectPropDescRangeForm - */ - CMTPTypeObjectPropDesc* ServiceRangeFormDescriptionL( TUint16 aPropCode, - TUint32 aMinValue, - TUint32 aMaxValue, - TUint32 aStepValue, - TBool aIsReadOnly = EFalse ); - - //functions used by ServiceSpecificObjectPropertyL - /** - * Service number of channels - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceNumberOfChannelsL(); - - /** - * Service code sample rate - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceCodeSampleRateL(); - - /** - * Service description - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceDescriptionL(); - - /** - * Service scan type description - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceScanTypeDescriptionL(); - - /** - * Service encoding profile description - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceEncodingProfileDescriptionL(); - - /** - * Service DRM status - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceDRMStatusL(); - - /** - * Service OMADRM status - * @return MTPTypeObjectPropDesc - */ - CMTPTypeObjectPropDesc* ServiceOMADRMStatusL(); - - - }; - -#endif // CMEDIAMTPDATAPROVIDERGETFORMATCAPABILITIES_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetinterdependentpropdesc.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetinterdependentpropdesc.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/* -* 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 CMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H -#define CMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H - -#include -#include "crequestprocessor.h" - -class CMTPTypeInterdependentPropDesc; -class CMTPTypeInterdependentProperties; -class MMmMtpDpConfig; - -/** -* Defines media data provider GetInterDependentPropDesc request processor -*/ -class CMediaMtpDataProviderGetInterDependentPropDesc: public CRequestProcessor - { -public: - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CMediaMtpDataProviderGetInterDependentPropDesc(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - */ - CMediaMtpDataProviderGetInterDependentPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ); - -protected: - // from CRequestProcessor - TMTPResponseCode CheckRequestL(); - void ServiceL(); - -private: - /** - * two-phase construction - */ - void ConstructL(); - - void ServiceAudioWaveCodecL(); - void ServiceAudioBitrateL(); - - void ServiceVideoFourCCCodecL(); - void ServiceVideoBitrateL(); - - void ServiceRangeFormDescriptionL( TUint16 aPropCode, - TUint32 aMinValue, - TUint32 aMaxValue, - TUint32 aStepValue, - TBool aIsReadOnly = EFalse); - - void SetFormForResponseL( TUint16 aPropertyCode, - CMTPTypeObjectPropDesc::TPropertyInfo& aPropInfo, - const MMTPType* aForm ); - -private: - /** Dataset to store the prop descriptions*/ - CMTPTypeInterdependentPropDesc* iDataset; - - /**support configuration correctly*/ - CMTPTypeInterdependentProperties* iProperties; - - TUint32 iFormatCode; - - }; - -#endif // CMEDIAMTPDATAPROVIDERGETINTERDEPENTENTPROPDESC_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetobjectpropdesc.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidergetobjectpropdesc.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* 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 CMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H -#define CMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H - -#include "cgetobjectpropdesc.h" - -/** -* Defines media data provider GetObjectPropDesc request processor -*/ -class CMediaMtpDataProviderGetObjectPropDesc: public CGetObjectPropDesc - { -public: - - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CMediaMtpDataProviderGetObjectPropDesc(); - -protected: - // from CGetObjectPropDesc, override from baseclass - void ServiceSpecificObjectPropertyL( TUint16 aPropCode ); - -private: - - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - /** - * two-phase construction - */ - void ConstructL(); - - void ServiceNumberOfChannelsL(); - void ServiceCodeSampleRateL(); - void ServiceCodeWaveCodecL(); - void ServiceCodeAudioBitrateL(); - void ServiceDurationL(); - void ServiceDescriptionL(); - void ServiceScanTypeDescriptionL(); - void ServiceVideoFourCCCodecL(); - void ServiceVideoBitrateL(); - void ServiceEncodingProfileDescriptionL(); - void ServiceDRMStatusL(); - void ServiceOMADRMStatusL(); - - void ServiceRangeFormDescriptionL( TUint16 aPropCode, - TUint32 aMinValue, - TUint32 aMaxValue, - TUint32 aStepValue, - TBool aIsReadOnly = EFalse ); - - }; - -#endif // CMEDIAMTPDATAPROVIDERGETOBJECTPROPDESC_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidermoveobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidermoveobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidermoveobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -62,15 +62,10 @@ void ConstructL(); protected: - void ServiceGetSpecificObjectPropertyL( TUint16 aPropCode, TUint32 aHandle, const CMTPObjectMetaData& aObject ); - TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - }; #endif // CMEDIAMTPDATAPROVIDERMOVEOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderpropertysettingutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataproviderpropertysettingutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,60 @@ +/* + * 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 CMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H +#define CMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H + +#include "cpropertysettingutility.h" + +/** +* Defines media data provider SetObjectPropsList request processor +*/ +class CMediaMtpDataProviderPropertySettingUtility: public CPropertySettingUtility + { +public: + /** + * @param aFramework, The data provider framework + * @param aConnection, The connection from which the request comes + * @param aWrapper Medadata access + * @return A pointer to the created request processor object + */ + static CMediaMtpDataProviderPropertySettingUtility* NewL(); + + /** + * Destructor + */ + ~CMediaMtpDataProviderPropertySettingUtility(); + +private: + /** + * Standard C++ Constructor + * @param aFramework, The data provider framework + * @param aConnection, The connection from which the request comes + * @param aWrapper Medadata access + */ + CMediaMtpDataProviderPropertySettingUtility(); + +protected: + TMTPResponseCode SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig, + TUint16 aPropCode, + const CMTPObjectMetaData& aObject, + const CMTPTypeObjectPropListElement& aElement ); + + }; + +#endif // CMEDIAMTPDATAPROVIDERPROPERTYSETTINGUTILITY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidersendobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidersendobject.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* 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 CMEDIAMTPDATAPROVIDERSENDOBJECT_H_ -#define CMEDIAMTPDATAPROVIDERSENDOBJECT_H_ - -#include "csendobject.h" - -/** -* Defines media data provider SetObjectPropsList request processor -*/ -class CMediaMtpDataProviderSendObject: public CSendObject - { -public: - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CMediaMtpDataProviderSendObject(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CMediaMtpDataProviderSendObject( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * 2nd Phase Constructor - */ - void ConstructL(); - -protected: - // from CSendObject - TMTPResponseCode SetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - - TMTPResponseCode CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType ); - - TInt HandleSpecificWrapperError(TInt aError, - const CMTPObjectMetaData& aObject); - - }; - - -#endif /*CMEDIAMTPDATAPROVIDERSENDOBJECT_H_*/ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidersetobjectproplist.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/cmediamtpdataprovidersetobjectproplist.h Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* 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 CMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H -#define CMEDIAMTPDATAPROVIDERSETOBJECTPROPLIST_H - -#include"csetobjectproplist.h" - -/** -* Defines media data provider SetObjectPropsList request processor -*/ -class CMediaMtpDataProviderSetObjectPropList: public CSetObjectPropList - { -public: - /** - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - * @return A pointer to the created request processor object - */ - static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * Destructor - */ - ~CMediaMtpDataProviderSetObjectPropList(); - -private: - /** - * Standard C++ Constructor - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper Medadata access - */ - CMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); - - /** - * 2nd Phase Constructor - */ - void ConstructL(); - -protected: - // from CSetObjectPropList - TMTPResponseCode ServiceSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ); - - TInt HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& aObject); - - }; - -#endif // CMEDIAMTPDATAPROVIDERGETOBJECTPROPLIST_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataprovider_config.rh --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataprovider_config.rh Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* 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: Resource headers for project media mtp data provider -* -*/ - - -#ifndef MEDIAMTPDATAPROVIDER_RH -#define MEDIAMTPDATAPROVIDER_RH - -// -------------------------------------------------------------------- -// Defines the resource type for media mtp data provider specific configuration data -// -------------------------------------------------------------------- -// -STRUCT MEDIAMTPDATAPROVIDE_CONFIG - { - LONG media_drive; // Symbian drive number @see TDrive - LTEXT media_folder_root; - LTEXT folder_exclusion_list[]; // What to exclude - } - -#endif // MEDIAMTPDATAPROVIDER_RH diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderconst.h Wed Jun 23 17:51:16 2010 +0100 @@ -25,8 +25,6 @@ _LIT( KMTPTxtColon, ":" ); -/** Granularity of the drive list*/ -const TInt KMtpMaxStringLength = 255; enum TMmMtpNumberOfChannels { @@ -48,10 +46,11 @@ // WAVECodec value enum TMmMtpWAVECodecValue { - EMTPAudioWAVECodecMP3 = 0x00000055, - EMTPAudioWAVECodecWMA = 0x00000161, - EMTPAudioWAVECodecAAC = 0x0000A106, - EMTPAudioWAVECodecPCM = 0x00000001 + EMTPAudioWAVECodecMP3 = 0x00000055, + EMTPAudioWAVECodecWMA = 0x00000161, + EMTPAudioWAVECodecWMAPro = 0x00000162, + EMTPAudioWAVECodecAAC = 0x0000A106, + EMTPAudioWAVECodecPCM = 0x00000001 }; // Bitrate value scope @@ -60,7 +59,9 @@ EMTPMP3MinBitrate = 0x00001F40, //8 kbps EMTPMP3MaxBitrate = 0x0004E200, //320 kbps EMTPWMAMinBitrate = 0x00001388, //5 kbps - EMTPWMAMaxBitrate = 0x0004E200, //320 kbps + EMTPWMAMaxBitrate = 0x0005DC00, //384 kbps + EMTPWMAProMinBitrate = 0x00001388, //5 kbps + EMTPWMAProMaxBitrate = 0x000BB800, //768 kbps EMTPAACMinBitrate = 0x00001F40, //8 kbps EMTPAACMaxBitrate = 0x0004E200, //320 kbps EMTPPCMMinBitrate = 0x00003E80, //16 kbps @@ -80,21 +81,21 @@ enum TMmMtpWidthRange { EMTPMinWidth = 0x000000b0, // 176 pixels - EMTPMaxWidth = 0x00000140, // 320 pixels + EMTPMaxWidth = 0x00000500, // 1280 pixels, standard for 720p content EMTPStepWidth = 0x00000001, }; enum TMmMtpHeightRange { EMTPMinHeight = 0x00000090, // 144 pixels - EMTPMaxHeight = 0x000000F0, // 240 pixels + EMTPMaxHeight = 0x000002D0, // 720 pixels, standard for 720p content EMTPStepHeight = 0x00000001, }; enum TMmMtpVideoBitRateRange { EMTPWMVMinBitrate = 0x00000000, - EMTPWMVMaxBitrate = 0x0005dc00, // 384 kbps + EMTPWMVMaxBitrate = 0x01312D00, // 20 Mbps, recommanded by Helix team EMTPVideoBitrateStep = 0x00000001 }; @@ -113,7 +114,7 @@ enum TMmMtpFramesPerThousandSecondsRange { EMTPMinFramesPerThousandSeconds = 0x00000000, - EMTPMaxFramesPerThousandSeconds = 0x00003a98, // 15000 frame per ms + EMTPMaxFramesPerThousandSeconds = 0x00007530, // 30000 frame per thousand seconds (30 frame/s), standard for progressive content EMTPStepFramesPerThousandSeconds = 0x00000001 }; @@ -181,6 +182,8 @@ EMTPOpCodeSetObjectPropList, EMTPOpCodeGetInterdependentPropDesc, EMTPOpCodeSendObjectPropList, + + // window 7 extension EMTPOpCodeGetFormatCapabilities }; @@ -195,6 +198,7 @@ EMTPObjectPropCodeNumberOfChannels, EMTPObjectPropCodeAudioWAVECodec, EMTPObjectPropCodeAudioBitRate, + EMTPObjectPropCodeAlbumArtist }; // Additional for audio formats @@ -215,7 +219,6 @@ EMTPObjectPropCodeHeight, EMTPObjectPropCodeDuration, EMTPObjectPropCodeGenre, - EMTPObjectPropCodeUseCount, EMTPObjectPropCodeSampleRate, EMTPObjectPropCodeNumberOfChannels, EMTPObjectPropCodeScanType, @@ -236,5 +239,4 @@ EMTPExtObjectPropCodeOmaDrmStatus, }; - #endif // MEDIAMTPDATAPROVIDERCONST_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderprocessor.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderprocessor.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/inc/mediamtpdataproviderprocessor.h Wed Jun 23 17:51:16 2010 +0100 @@ -19,16 +19,14 @@ #ifndef MEDIAMTPDATAPROVIDERPROCESSOR_H #define MEDIAMTPDATAPROVIDERPROCESSOR_H -#include "crequestprocessor.h" - // class forward class MMTPConnection; class TMTPTypeRequest; class CMTPDataProviderPlugin; -class MMTPDataProviderFramework; class MMTPRequestProcessor; class CMediaMtpDataProvider; class MMmMtpDpConfig; +class MMmRequestProcessor; typedef MMmRequestProcessor* ( *TMediaMtpDataProviderRequestProcessorCreateFunc )( MMTPDataProviderFramework& aFramework, diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovider.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -15,7 +15,6 @@ * */ - #include #include #include @@ -26,6 +25,7 @@ #include #include "cmediamtpdataprovider.h" +#include "crequestprocessor.h" #include "mediamtpdataproviderconst.h" #include "cmediamtpdataproviderenumerator.h" #include "mmmtpdplogger.h" @@ -36,6 +36,8 @@ #include "crenameobject.h" #include "mmmtpdpdefs.h" #include "mmmtpdpfiledefs.h" +#include "cmediamtpdataproviderpropertysettingutility.h" +#include "cmediamtpdataproviderdescriptionutility.h" // Class constants. // Defines the number of MTP Active Processors allowed @@ -77,6 +79,7 @@ iSupportedPropVideo( KMediaMtpDpArrayGranularity ), iSupportedPropAll( KMediaMtpDpArrayGranularity ) { + // Do nothing } // ----------------------------------------------------------------------------- @@ -90,6 +93,8 @@ CMmMtpDpAccessSingleton::Release(); delete iMediaEnumerator; + delete iPropSettingUtility; + delete iDescriptionUtility; iPendingEnumerations.Close(); TInt count = iActiveProcessors.Count(); @@ -126,12 +131,15 @@ iMediaEnumerator = CMediaMtpDataProviderEnumerator::NewL( Framework(), *this ); - CMmMtpDpAccessSingleton::CreateL( Framework().Fs(), Framework() ); + CMmMtpDpAccessSingleton::CreateL( Framework() ); GetSupportedFormatL(); GetSupportedPropL(); GetAllSupportedPropL(); + iPropSettingUtility = CMediaMtpDataProviderPropertySettingUtility::NewL(); + iDescriptionUtility = CMediaMtpDataProviderDescriptionUtility::NewL(); + PRINT( _L( "MM MTP <= CMediaMtpDataProvider::ConstructL" ) ); } @@ -162,20 +170,20 @@ { case EMTPSessionClosed: PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPSessionClosed event recvd" ) ); - SessionClosedL( *reinterpret_cast ( aParams ) ); break; case EMTPSessionOpened: PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPSessionOpened event recvd" ) ); - SessionOpenedL( *reinterpret_cast ( aParams ) ); break; case EMTPStorageAdded: + PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPStorageAdded event recvd" ) ); break; case EMTPStorageRemoved: + PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPStorageRemoved event recvd" ) ); break; case EMTPRenameObject: @@ -183,6 +191,11 @@ RenameObjectL( *reinterpret_cast ( aParams ) ); break; + case EMTPObjectAdded: + PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL EMTPObjectAdded event recvd" ) ); + ObjectAddedL(*reinterpret_cast(aParams)); + break; + default: PRINT( _L( "MM MTP <> CMediaMtpDataProvider::ProcessNotificationL default" ) ); // Ignore all other notifications. @@ -205,14 +218,19 @@ MMmRequestProcessor* processor = iActiveProcessors[index]; iActiveProcessor = index; - // iActiveProcessorRemoved = EFalse; + iActiveProcessorRemoved = EFalse; TBool result = processor->HandleRequestL( aRequest, aPhase ); - if( !iIsSessionOpen ) + if ( !iIsSessionOpen ) { processor->Release(); } - + // iActiveProcessorRemoved will be set to ETrue in the above function + // HandleRequestL(),such as SessionClose() + else if ( iActiveProcessorRemoved ) + { + processor->Release(); // destroy the processor + } else if ( result ) // destroy the processor { processor->Release(); @@ -231,9 +249,9 @@ iIsSessionOpen = EFalse; TInt count = iActiveProcessors.Count(); PRINT1( _L( "MM MTP => CMediaMtpDataProvider::SessionClosedL, total processor count = %d" ), count ); - for( TInt i = 0; i < count; i++ ) + while ( count-- ) { - MMmRequestProcessor* processor = iActiveProcessors[i]; + MMmRequestProcessor* processor = iActiveProcessors[count]; // replaced for the Request() is invalid sometimes // TUint32 sessionId( processor->Request().Uint32( TMTPTypeRequest::ERequestSessionID ) ); @@ -245,13 +263,23 @@ { processor->UsbDisconnect(); // Rollback - iActiveProcessors.Remove( i ); - processor->Release(); + iActiveProcessors.Remove( count ); + if ( count == iActiveProcessor ) + { + iActiveProcessorRemoved = ETrue; + iActiveProcessor = -1; // update iActiveProcessor + } + else + { + processor->Release(); + } } } // introduce to cleanup DBs at each close session iMediaEnumerator->SessionClosedL(); + CMmMtpDpAccessSingleton::CloseSessionL(); + PRINT( _L( "MM MTP <= CMediaMtpDataProvider::SessionClosedL" ) ); } @@ -286,6 +314,27 @@ } // ----------------------------------------------------------------------------- +// CMediaMtpDataProvider::ObjectAddedL +// Process the added object +// ----------------------------------------------------------------------------- +// +void CMediaMtpDataProvider::ObjectAddedL( TUint32 aObjectHandle ) + { + PRINT1( _L( "MM MTP => CMediaMtpDataProvider::ObjectAddedL aHandle=0x%x" ), aObjectHandle ); + + CMTPObjectMetaData* object(CMTPObjectMetaData::NewLC()); + Framework().ObjectMgr().ObjectL( aObjectHandle, *object ); + + //Since the object's processor is not route to media dp, its format code should be reset + TUint formatCode = MmMtpDpUtility::FormatFromFilename( object->DesC( CMTPObjectMetaData::ESuid ) ); + object->SetUint( CMTPObjectMetaData::EFormatCode, formatCode ); + GetWrapperL().AddObjectL( *object ); + PRINT2( _L( "MM MTP => CMediaMtpDataProvider::ObjectAddedL formatCode=0x%x Suid=%S" ), formatCode, &(object->DesC( CMTPObjectMetaData::ESuid ) ) ); + CleanupStack::PopAndDestroy( object ); + PRINT( _L( "MM MTP <= CMediaMtpDataProvider::ObjectAddedL" ) ); + } + +// ----------------------------------------------------------------------------- // CMediaMtpDataProvider::StartObjectEnumerationL // Start object enumeration // ----------------------------------------------------------------------------- @@ -400,6 +449,7 @@ //EMTPFormatCode3GPContainer, aStrings.AppendL(KFormatExtension3GP); + aStrings.AppendL(KFormatExtension3G2); //EMTPFormatCodeAAC, aStrings.AppendL(KFormatExtensionAAC); @@ -415,9 +465,7 @@ #endif //ODF container aStrings.AppendL(KFormatExtensionODFAudio3GPP); - aStrings.AppendL(KFormatExtensionODFAudioMP4); aStrings.AppendL(KFormatExtensionODFVideo3GPP); - aStrings.AppendL(KFormatExtensionODFVideoMP4); aStrings.AppendL(KFormatExtensionO4A); aStrings.AppendL(KFormatExtensionO4V); @@ -500,7 +548,7 @@ // ----------------------------------------------------------------------------- // CMediaMtpDataProvider::GetWrapper -// return the reference of CMmMtpDpMetadataAccessWrapper to enumerator +// return wrapper references // ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper& CMediaMtpDataProvider::GetWrapperL() @@ -508,6 +556,26 @@ return CMmMtpDpAccessSingleton::GetAccessWrapperL(); } +// ----------------------------------------------------------------------------- +// CMediaMtpDataProvider::PropSettingUtility +// return The utility to setting properties +// ----------------------------------------------------------------------------- +// +CPropertySettingUtility* CMediaMtpDataProvider::PropSettingUtility() + { + return iPropSettingUtility; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProvider::DescriptionUtility +// return The utiltiy to setting descriptions +// ----------------------------------------------------------------------------- +// +CDescriptionUtility* CMediaMtpDataProvider::DescriptionUtility() + { + return iDescriptionUtility; + } + // --------------------------------------------------------------------------- // CMediaMtpDataProvider::GetSupportedFormat // diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidercopyobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidercopyobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidercopyobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include #include @@ -65,7 +64,7 @@ // CMediaMtpDataProviderCopyObject::~CMediaMtpDataProviderCopyObject() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -78,7 +77,7 @@ MMmMtpDpConfig& aDpConfig ) : CCopyObject( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -124,10 +123,6 @@ { iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// *textData ); } CleanupStack::PopAndDestroy( textData ); // - textData @@ -148,10 +143,6 @@ { iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// *desData ); } CleanupStack::PopAndDestroy( desData ); // - desData @@ -173,19 +164,13 @@ { iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// uint16 ); } - } break; case EMTPObjectPropCodeWidth: case EMTPObjectPropCodeHeight: case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: case EMTPObjectPropCodeSampleRate: case EMTPObjectPropCodeAudioWAVECodec: case EMTPObjectPropCodeAudioBitRate: @@ -204,9 +189,6 @@ { iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value()); -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// uint32 ); } } break; @@ -220,14 +202,9 @@ if ( drmStatus == EMTPDrmStatusProtected ) result.Set( 1 ); - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8 ); iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, result.Value()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// EMTPTypeUINT8, -// result ); } break; @@ -239,12 +216,9 @@ } // centralize logic to handle error, doing so, that's on need to trap the - // leave for KErrNotSupported in base class like previous version. - if ( ( err == KErrNotFound ) - || ( ( err == KErrNotSupported ) - && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF ) - || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container ) - || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) ) ) + // Ignore all errors came from mpx db. + // It's enough that only file copied successfully no matter metadata got whatever failure. + if ( err != KErrNone ) { iPropertyElement = NULL; } @@ -255,121 +229,4 @@ PRINT( _L( "MM MTP <= CMediaMtpDataProviderCopyObject::ServiceSpecificObjectPropertyL" ) ); } -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL -// -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL" ) ); - TMTPResponseCode responseCode( EMTPRespCodeOK ); - - switch ( aPropCode ) - { - case EMTPObjectPropCodeArtist: - case EMTPObjectPropCodeGenre: - case EMTPObjectPropCodeComposer: - case EMTPObjectPropCodeOriginalReleaseDate: - case EMTPObjectPropCodeAlbumName: - case EMTPObjectPropCodeParentalRating: - case EMTPObjectPropCodeEncodingProfile: - { - CMTPTypeString* stringData = - CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData - - responseCode = ServiceMetaDataToWrapper( aPropCode, - *stringData, - aObject ); - - CleanupStack::PopAndDestroy( stringData ); // - stringData - } - break; - - case EMTPObjectPropCodeVideoBitRate: - { - responseCode = EMTPRespCodeAccessDenied; - } - break; - - case EMTPObjectPropCodeDescription: - { - CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData -// aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData ); - desData->SetByDesL(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue)); - //desData(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue)); - - responseCode = ServiceMetaDataToWrapper( aPropCode, - *desData, - aObject ); - CleanupStack::PopAndDestroy( desData ); // - desData - } - break; - - case EMTPObjectPropCodeWidth: - case EMTPObjectPropCodeHeight: - case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: - case EMTPObjectPropCodeSampleRate: - case EMTPObjectPropCodeAudioWAVECodec: - case EMTPObjectPropCodeAudioBitRate: - case EMTPObjectPropCodeVideoFourCCCodec: - case EMTPObjectPropCodeFramesPerThousandSeconds: - case EMTPObjectPropCodeKeyFrameDistance: - { - TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) ); - responseCode = ServiceMetaDataToWrapper( aPropCode, - uint32, - aObject ); - } - break; - - case EMTPObjectPropCodeTrack: - case EMTPObjectPropCodeNumberOfChannels: - case EMTPObjectPropCodeScanType: - case EMTPObjectPropCodeDRMStatus: - { - TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue )); - responseCode = ServiceMetaDataToWrapper( aPropCode, - uint16, - aObject ); - } - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - { - TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) ); - - if (drmStatus == EMTPDrmStatusUnknown) - { - responseCode = EMTPRespCodeAccessDenied; - } - else - { - TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); - - // there's no DB field to remember the value, so return an error - // if there's a mismatch to CAF protection status - if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( newValue.Value() == 0 ) ) || - ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) ) - { - responseCode = EMTPRespCodeAccessDenied; - } - } - } - break; - - default: - { - User::Leave( KErrNotSupported ); - } - break; - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderCopyObject::ServiceSetSpecificObjectPropertyL" ) ); - - return responseCode; - } - // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderdescriptionutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderdescriptionutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,738 @@ +/* +* 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: Media dp specific property description construction utility. +* Used by all request processors which related to property description +* +*/ + +#include +#include + +#include "cmediamtpdataproviderdescriptionutility.h" +#include "mediamtpdataproviderconst.h" +#include "tobjectdescription.h" +#include "mmmtpdpconfig.h" +#include "mmmtpdplogger.h" + + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewL +// +// ----------------------------------------------------------------------------- +// +CMediaMtpDataProviderDescriptionUtility* CMediaMtpDataProviderDescriptionUtility::NewL() + { + CMediaMtpDataProviderDescriptionUtility* self = + new( ELeave ) CMediaMtpDataProviderDescriptionUtility(); + + return self; + } + +CMediaMtpDataProviderDescriptionUtility::CMediaMtpDataProviderDescriptionUtility() + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL +// Construct media dp specific interdependent property description. +// ----------------------------------------------------------------------------- +// +CMTPTypeInterdependentPropDesc* CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode ) + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) ); + + TBool audioWaveCodecSupported = EFalse; + TBool audioBitRateSupported = EFalse; + TBool videoFourCcCodecSupported = EFalse; + TBool videoBitRateSupported = EFalse; + + const RArray* properties = aDpConfig.GetSupportedPropertiesL( aFormatCode ); + + TInt count = properties->Count(); + for ( TInt i = 0; i < count; i++ ) + { + switch ( ( *properties )[i] ) + { + case EMTPObjectPropCodeAudioWAVECodec: + audioWaveCodecSupported = ETrue; + break; + case EMTPObjectPropCodeAudioBitRate: + audioBitRateSupported = ETrue; + break; + case EMTPObjectPropCodeVideoFourCCCodec: + videoFourCcCodecSupported = ETrue; + break; + case EMTPObjectPropCodeVideoBitRate: + videoBitRateSupported = ETrue; + break; + default: + // do nothing + break; + } + } + + CMTPTypeInterdependentPropDesc* interdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL(); + CleanupStack::PushL( interdependentPropDesc ); // + interdependentPropDesc + + if ( audioWaveCodecSupported && audioBitRateSupported ) + { + if ( ( aFormatCode == EMTPFormatCodeWMA ) + || ( aFormatCode == EMTPFormatCodeWMV ) + || ( aFormatCode == EMTPFormatCodeASF ) ) + { + AppendWMAudioInterdepentPropDescL( interdependentPropDesc ); + } + else + { + CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL(); + CleanupStack::PushL( properties ); + + CMTPTypeObjectPropDesc* propertyDesc1 = NewAudioWaveCodecPropDescL( aFormatCode ); + CleanupStack::PushL( propertyDesc1 ); // + propertyDesc1 + properties->AppendL( propertyDesc1 ); + CleanupStack::Pop( propertyDesc1 ); // - propertyDesc1 + + CMTPTypeObjectPropDesc* propertyDesc2 = NewAudioBitratePropDescL( aFormatCode ); + CleanupStack::PushL( propertyDesc2 ); // + propertyDesc2 + properties->AppendL( propertyDesc2 ); + CleanupStack::Pop( propertyDesc2 ); // - propertyDesc2 + + interdependentPropDesc->AppendL( properties ); + CleanupStack::Pop( properties ); + } + } + + if ( videoFourCcCodecSupported && videoBitRateSupported ) + { + CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL(); + CleanupStack::PushL( properties ); // + properties + + CMTPTypeObjectPropDesc* propertyDesc1 = NewVideoFourCCCodecPropDescL( aFormatCode ); + CleanupStack::PushL( propertyDesc1 ); // + propertyDesc1 + properties->AppendL( propertyDesc1 ); + CleanupStack::Pop( propertyDesc1 ); // - propertyDesc1 + + CMTPTypeObjectPropDesc* propertyDesc2 = NewVideoBitratePropDescL( aFormatCode ); + CleanupStack::PushL( propertyDesc2 ); // + propertyDesc2 + properties->AppendL( propertyDesc2 ); + CleanupStack::Pop( propertyDesc2 ); // - propertyDesc2 + + interdependentPropDesc->AppendL( properties ); + CleanupStack::Pop( properties ); // - properties + } + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewInterdepentPropDescL" ) ); + CleanupStack::Pop( interdependentPropDesc ); // - interdependentPropDesc + return interdependentPropDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewWMAudioInterdepentPropDescL +// Append WM Audio specific to interdpendent property description. +// ----------------------------------------------------------------------------- +// +void CMediaMtpDataProviderDescriptionUtility::AppendWMAudioInterdepentPropDescL(CMTPTypeInterdependentPropDesc* aInterdependentPropDesc) + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::AppendWMAudioInterdepentPropDescL" ) ); + + CMTPTypeInterdependentProperties* properties1 = CMTPTypeInterdependentProperties::NewL(); + CleanupStack::PushL( properties1 ); // + properties1 + + CMTPTypeObjectPropDescEnumerationForm* form = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 ); + CleanupStack::PushL( form ); // + form + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) ); + + CMTPTypeObjectPropDesc* propertyDesc1 = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form ); + + CleanupStack::PopAndDestroy( form ); // - form + CleanupStack::PushL( propertyDesc1 ); // + propertyDesc1 + properties1->AppendL( propertyDesc1 ); + CleanupStack::Pop( propertyDesc1 ); // - propertyDesc1 + + CMTPTypeObjectPropDesc* propertyDesc2 = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPWMAMinBitrate, + EMTPWMAMaxBitrate, + EMTPAudioBitrateStep ); + + CleanupStack::PushL( propertyDesc2 ); // + propertyDesc2 + properties1->AppendL( propertyDesc2 ); + CleanupStack::Pop( propertyDesc2 ); // - propertyDesc2 + + aInterdependentPropDesc->AppendL( properties1 ); + CleanupStack::Pop( properties1 ); // - properties1 + + CMTPTypeInterdependentProperties* properties2 = CMTPTypeInterdependentProperties::NewL(); + CleanupStack::PushL( properties2 ); // + properties2 + + form = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 ); + CleanupStack::PushL( form ); // + form + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMAPro ) ); + + CMTPTypeObjectPropDesc* propertyDesc3 = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form ); + + CleanupStack::PopAndDestroy( form ); // - form + CleanupStack::PushL( propertyDesc3 ); // + propertyDesc3 + properties2->AppendL( propertyDesc3 ); + CleanupStack::Pop( propertyDesc3 ); // - propertyDesc3 + + CMTPTypeObjectPropDesc* propertyDesc4 = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPWMAProMinBitrate, + EMTPWMAProMaxBitrate, + EMTPAudioBitrateStep ); + + CleanupStack::PushL( propertyDesc4 ); // + propertyDesc4 + properties2->AppendL( propertyDesc4 ); + CleanupStack::Pop( propertyDesc4 ); // - propertyDesc4 + + aInterdependentPropDesc->AppendL( properties2 ); + CleanupStack::Pop( properties2 ); // - properties2 + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::AppendWMAudioInterdepentPropDescL" ) ); + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL +// Construct media dp specific property description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode ) + { + CMTPTypeObjectPropDesc* propertyDesc = NULL; + + switch ( aPropCode ) + { + // format specific + case EMTPObjectPropCodeArtist: // Artist + case EMTPObjectPropCodeTrack: // Track + case EMTPObjectPropCodeGenre: // Genre + case EMTPObjectPropCodeAlbumName: // Album Name + case EMTPObjectPropCodeAlbumArtist: // Album Artist + case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date + case EMTPObjectPropCodeComposer: // Composer + case EMTPObjectPropCodeParentalRating: + propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode ); + break; + + // Number of Channels (m) + case EMTPObjectPropCodeNumberOfChannels: + propertyDesc = NewNumberOfChannelsPropDescL(); + break; + + // Sample Rate (HAS MINIMUM AND MAX VALUE) + case EMTPObjectPropCodeSampleRate: + propertyDesc = NewCodeSampleRatePropDescL(); + break; + + // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED) + case EMTPObjectPropCodeAudioWAVECodec: + propertyDesc = NewAudioWaveCodecPropDescL( aFormatCode ); + break; + + // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED) + case EMTPObjectPropCodeAudioBitRate: + propertyDesc = NewAudioBitratePropDescL( aFormatCode ); + break; + + // Duration + case EMTPObjectPropCodeDuration: + propertyDesc = NewRangeFormDescriptionL( aPropCode, + EMTPMinDuration, + EMTPMaxDuration, + EMTPDurationStep ); + break; + + // Description + case EMTPObjectPropCodeDescription: + propertyDesc = NewDescriptionPropDescL(); + break; + + case EMTPObjectPropCodeWidth: + propertyDesc = NewRangeFormDescriptionL( aPropCode, + EMTPMinWidth, + EMTPMaxWidth, + EMTPStepWidth ); + break; + + case EMTPObjectPropCodeHeight: + propertyDesc = NewRangeFormDescriptionL( aPropCode, + EMTPMinHeight, + EMTPMaxHeight, + EMTPStepHeight ); + break; + + case EMTPObjectPropCodeScanType: + propertyDesc = NewScanTypeDescriptionPropDescL(); + break; + + case EMTPObjectPropCodeVideoFourCCCodec: + propertyDesc = NewVideoFourCCCodecPropDescL( aFormatCode ); + break; + + case EMTPObjectPropCodeVideoBitRate: + propertyDesc = NewVideoBitratePropDescL( aFormatCode ); + break; + + case EMTPObjectPropCodeFramesPerThousandSeconds: + propertyDesc = NewRangeFormDescriptionL( aPropCode, + EMTPMinFramesPerThousandSeconds, + EMTPMaxFramesPerThousandSeconds, + EMTPStepFramesPerThousandSeconds ); + break; + + case EMTPObjectPropCodeKeyFrameDistance: + propertyDesc = NewRangeFormDescriptionL( aPropCode, + EMTPMinKeyFrameDistance, + EMTPMaxKeyFrameDistance, + EMTPStepKeyFrameDistance ); + break; + + case EMTPObjectPropCodeEncodingProfile: + propertyDesc = NewEncodingProfileDescriptionPropDescL(); + break; + + case EMTPObjectPropCodeDRMStatus: + propertyDesc = NewDRMStatusPropDescL(); + break; + + case EMTPExtObjectPropCodeOmaDrmStatus: + propertyDesc = NewOMADRMStatusPropDescL(); + break; + + default: + // do nothing + break; + } + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewAudioWaveCodecPropDescL +// Construct audio wave codec property description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewAudioWaveCodecPropDescL( TUint aFormatCode ) + { + CMTPTypeObjectPropDescEnumerationForm* form = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + form + + switch( aFormatCode ) + { + case EMTPFormatCodeWMA: + case EMTPFormatCodeWMV: + case EMTPFormatCodeASF: + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) ); + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMAPro ) ); + break; + + case EMTPFormatCodeMP3: + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) ); + break; + + case EMTPFormatCodeMP4Container: + case EMTPFormatCode3GPContainer: + case EMTPFormatCodeAAC: + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) ); + break; + + case EMTPFormatCodeWAV: + form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) ); + break; + + default: + User::Leave( KErrNotSupported ); + break; + } + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form ); + + CleanupStack::PopAndDestroy( form ); // - form + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewAudioWaveCodecPropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL +// Construct audio bitrate property description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL( TUint aFormatCode ) + { + PRINT1( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL, iFormatCode = 0x%x" ), aFormatCode ); + CMTPTypeObjectPropDesc* propertyDesc = NULL; + switch( aFormatCode ) + { + case EMTPFormatCodeWMA: + case EMTPFormatCodeWMV: + case EMTPFormatCodeASF: + propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPWMAMinBitrate, + EMTPWMAProMaxBitrate, + EMTPAudioBitrateStep ); + break; + + case EMTPFormatCodeMP3: + propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPMP3MinBitrate, + EMTPMP3MaxBitrate, + EMTPAudioBitrateStep ); + break; + + case EMTPFormatCodeAAC: + propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPAACMinBitrate, + EMTPAACMaxBitrate, + EMTPAudioBitrateStep ); + break; + + case EMTPFormatCodeWAV: + propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPPCMMinBitrate, + EMTPPCMMaxBitrate, + EMTPAudioBitrateStep ); + break; + + case EMTPFormatCodeMP4Container: + case EMTPFormatCode3GPContainer: + propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, + EMTPAACPlusMinBitrate, + EMTPAACPlusMaxBitrate, + EMTPAudioBitrateStep ); + break; + + default: + // do nothing + break; + } + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewAudioBitratePropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL +// Construct property description of video fourCC codec. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL( TUint aFormatCode ) + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL" ) ); + + CMTPTypeObjectPropDesc* propertyDesc = NULL; + + if ( ( EMTPFormatCodeWMV == aFormatCode ) + || ( EMTPFormatCodeASF == aFormatCode ) ) + { + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm + + TUint32 values[] = + { + EMTPVideoFourCCCodecWMV3 + }; + + TInt numValues = sizeof( values ) / sizeof( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint32 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeVideoFourCCCodec, + *expectedForm ); + + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + } + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewVideoFourCCCodecPropDescL" ) ); + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL +// Construct property description of VideoBitrate. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL( TUint aFormatCode ) + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL" ) ); + + CMTPTypeObjectPropDesc* propertyDesc = NULL; + + if ( ( EMTPFormatCodeWMV == aFormatCode ) + || ( EMTPFormatCodeASF == aFormatCode ) ) + { + propertyDesc = NewRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate, + EMTPWMVMinBitrate, + EMTPWMVMaxBitrate, + EMTPVideoBitrateStep, + ETrue ); + } + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewVideoBitratePropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL() +// Construct property description of number of channels. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm + + TUint16 values[] = + { + EMTPChannelMono, + EMTPChannelStereo + }; + + TInt numValues = sizeof( values ) / sizeof( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint16 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels, + *expectedForm ); + + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewNumberOfChannelsPropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL +// Construct property description of code sample rate. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm + + TUint32 values[] = + { + EMTPSampleRate8K, + EMTPSampleRate16K, + EMTPSampleRate22_05K, + EMTPSampleRate24K, + EMTPSampleRate32K, + EMTPSampleRate44_1K, + EMTPSampleRate48K + }; + + TInt numValues = sizeof( values ) / sizeof( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint32 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate, + CMTPTypeObjectPropDesc::EEnumerationForm, + expectedForm ); + + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewCodeSampleRatePropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL() +// Construct property description of description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL" ) ); + + TMTPTypeUint32 uint32Data( KMTPMaxDescriptionLen ); + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription, + CMTPTypeObjectPropDesc::ELongStringForm, + &uint32Data ); + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewDescriptionPropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL +// Construct property description of scan type description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm + + TUint16 values[] = + { + EMTPScanTypeProgressive + }; + + TInt numValues = sizeof( values ) / sizeof( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint16 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc* propertyDesc = NULL; + propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType, + *expectedForm ); + + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewScanTypeDescriptionPropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL +// Construct property description of encoding profile description. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm + + CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) ); // + string + expectedForm->AppendSupportedValueL( *string ); + string->SetL( _L("SP@ML")); + expectedForm->AppendSupportedValueL( *string ); + string->SetL( _L("MP@LL")); + expectedForm->AppendSupportedValueL( *string ); + + // newly added to support 720p content as suggested by Helix team + string->SetL( _L("MP@ML")); + expectedForm->AppendSupportedValueL( *string ); + string->SetL( _L("MP@HL")); + expectedForm->AppendSupportedValueL( *string ); + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeString; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; + propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite; + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile, + propertyInfo, + expectedForm ); + + CleanupStack::PopAndDestroy( string ); // - string + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewEncodingProfileDescriptionPropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL +// Construct property description of DRM status. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm + + TUint16 values[] = + { + EMTPDrmNoProtection, + EMTPDrmProtection, + EMTPDrmReserveForMTP, + EMTPDrmVenderExtension + }; + + TInt numValues = sizeof( values ) / sizeof( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint16 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus, + *expectedForm ); + + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderDescriptionUtility::NewDRMStatusPropDescL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderDescriptionUtility::NewOMADRMStatusPropDescL +// Construct property description of OMADRM status. +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CMediaMtpDataProviderDescriptionUtility::NewOMADRMStatusPropDescL() + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::NewOMADRMStatusPropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm + + TUint8 values[] = + { + EMTPOMADrmNoProtection, + EMTPOMADrmProtection, + }; + + TInt numValues = sizeof( values ) / sizeof( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint8 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeUINT8; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus, + propertyInfo, + expectedForm ); + + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::NewOMADRMStatusPropDescL" ) ); + + return propertyDesc; + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderenumerator.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderenumerator.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderenumerator.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -20,19 +20,12 @@ #include #include #include -#include -#include "mediamtpdataproviderconst.h" #include "cmediamtpdataproviderenumerator.h" #include "cmediamtpdataprovider.h" #include "mmmtpdplogger.h" -#include "mmmtpdputility.h" -#include "cmmmtpdpaccesssingleton.h" #include "cmmmtpdpmetadataaccesswrapper.h" -// Unit: microsecond -const TInt KThresholdOfEnumerationLoopDuration = 1000 * 1000; // microsecond - const TInt KMTPDriveGranularity = 5; const TInt KMediaDpArrayGranularity = 2; @@ -65,14 +58,10 @@ CMediaMtpDataProvider& aDataProvider ) : CActive( EPriorityLow ), // EPriorityStandard ? sure? iFramework( aFramework ), - iObjectMgr( aFramework.ObjectMgr() ), - iDataProviderId( aFramework.DataProviderId() ), iDataProvider( aDataProvider ), - iDirStack( KMediaDpArrayGranularity ), - iStorages( KMediaDpArrayGranularity ), - iScanningDir( EFalse ) + iStorages( KMediaDpArrayGranularity ) { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::CMediaMtpDataProviderEnumerator, iDataProviderId = %d" ), iDataProviderId ); + PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::CMediaMtpDataProviderEnumerator, DataProviderId = %d" ), iFramework.DataProviderId() ); } // ----------------------------------------------------------------------------- @@ -84,8 +73,6 @@ { PRINT( _L( "MM MTP => CMediaMtpDataProviderEnumerator::~CMediaMtpDataProviderEnumerator" ) ); Cancel(); - iDir.Close(); - iDirStack.Close(); iStorages.Close(); #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) @@ -121,10 +108,9 @@ } CleanupStack::PopAndDestroy( &storages ); // - storages } - else if ( aStorageId != KMTPNotSpecified32 ) + else if ( aStorageId != KMTPNotSpecified32 + && storageMgr.ValidStorageId( aStorageId ) ) { - __ASSERT_DEBUG( storageMgr.ValidStorageId( aStorageId ), User::Invariant() ); - const CMTPStorageMetaData& storage( storageMgr.StorageL( aStorageId ) ); if ( storage.Uint( CMTPStorageMetaData::EStorageSystemType ) @@ -149,15 +135,9 @@ } iStorageId = aStorageId; - - if ( iStorages.Count() > 0 ) - { - ScanStorageL( iStorages[0] ); - } - else - { - SignalCompleteL( iDataProvider ); - } + TRequestStatus* status = &iStatus; + User::RequestComplete( status, iStatus.Int() ); + SetActive(); PRINT( _L( "MM MTP <= CMediaMtpDataProviderEnumerator::StartL" ) ); } @@ -169,240 +149,38 @@ // void CMediaMtpDataProviderEnumerator::DoCancel() { - iDir.Close(); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::ScanStorageL -// -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::ScanStorageL( TUint32 aStorageId ) - { - const CMTPStorageMetaData& storage( iFramework.StorageMgr().StorageL( aStorageId ) ); - - __ASSERT_DEBUG( ( storage.Uint( CMTPStorageMetaData::EStorageSystemType ) == CMTPStorageMetaData::ESystemTypeDefaultFileSystem ), - User::Invariant() ); - - TFileName root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) ); - PRINT2( _L("MM MTP <> CMediaMtpDataProviderEnumerator::ScanStorageL aStorageId = 0x%x, StorageSuid = %S"), aStorageId, &root ); - - iParentHandle = KMTPHandleNone; - iPath.Set( root, NULL, NULL); - iDir.Close(); - User::LeaveIfError( iDir.Open( iFramework.Fs(), - iPath.DriveAndPath(), - KEntryAttNormal | KEntryAttDir ) ); - ScanDirL(); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::ScanNextStorageL -// -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::ScanNextStorageL() - { - // If there are one or more unscanned storages left - // (the currently scanned one is still on the list) - if ( iStorages.Count() > 1 ) - { - // Round trip suppport - const CMTPStorageMetaData& storage( iFramework.StorageMgr().StorageL( iStorages[0] ) ); - TFileName root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) ); - GetModifiedContentL( root ); - iDataProvider.GetWrapperL().UpdateMusicCollectionL(); - - iStorages.Remove( 0 ); - ScanStorageL( iStorages[0] ); - } - else - { - - // Round trip suppport - const CMTPStorageMetaData& storage( iFramework.StorageMgr().StorageL( iStorages[0] ) ); - TFileName root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) ); - GetModifiedContentL( root ); - - // We are done - iStorages.Reset(); - - SignalCompleteL( iDataProvider ); - } - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::ScanDirL -// -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::ScanDirL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderEnumerator::ScanDirL" ) ); - - StartEnumerationCount(); - - iFirstUnprocessed = 0; - - iScanningDir = ETrue; - PERFLOGSTART( KDirectoryScan ); - iDir.Read( iEntries, iStatus ); - SetActive(); - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderEnumerator::ScanDirL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::ScanNextDirL -// Recurse into the next directory on the stack -// and scan it for entries. -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::ScanNextDirL() - { - TInt count = iDirStack.Count(); - - if ( count == 0 ) - { - // No more directories on the stack, try the next storage - ScanNextStorageL(); - } - else - { - TEntry* entry = iDirStack[count - 1]; - if ( entry != NULL ) - { - - // Empty TEntry, no more subdirectories in - // the current path - if ( entry->iName == KNullDesC ) - { - // Remove current dir from path - iPath.PopDir(); - iDirStack.Remove( count - 1 ); - delete entry; - entry = NULL; - iDir.Close(); - - // Scan the next directory of the parent - ScanNextDirL(); - } - // Going into a subdirectory of current - else - { - // Add directory to path - iPath.AddDir( entry->iName ); - // Remove directory so we don't think it's a subdirectory - iDirStack.Remove( count - 1 ); - delete entry; - entry = NULL; - ScanNextSubdirL(); - } - } - } - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::ScanNextSubdirL -// Scan next sub dir -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::ScanNextSubdirL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderEnumerator::ScanNextSubdirL" ) ); - - // A empty (non-constructed) TEntry is our marker telling us to pop a directory - // from iPath when we see this - TEntry* entry = new TEntry( TEntry() ); - - User::LeaveIfNull( entry ); - - iDirStack.AppendL( entry ); - - // Leave with KErrNotFound if we don't find the object handle since it shouldn't be on the - // dirstack if the entry wasn't added - TPtrC suid = iPath.DriveAndPath().Left( iPath.DriveAndPath().Length() ); - // Update the current parenthandle with object of the directory - PERFLOGSTART( KObjectManagerObjectUid ); - iParentHandle = iFramework.ObjectMgr().HandleL( suid ); - PERFLOGSTOP( KObjectManagerObjectUid ); - PRINT1( _L( "MM MTP <> iParentHandle = 0x%Lx" ), iParentHandle ); - - // Kick-off a scan of the next directory - iDir.Close(); - - TInt err = iDir.Open( iFramework.Fs(), - iPath.DriveAndPath(), - KEntryAttNormal | KEntryAttDir ); - - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::ScanNextSubdirL, RDir::Open err = %d" ), err ); - - if ( err == KErrNone ) - ScanDirL(); - else - { - iEntries = TEntryArray(); - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, iStatus.Int() ); - SetActive(); - } - - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderEnumerator::ScanNextSubdirL" ) ); } // ----------------------------------------------------------------------------- // CMediaMtpDataProviderEnumerator::RunL -// +// Update the mpx db flag for round trip // ----------------------------------------------------------------------------- // void CMediaMtpDataProviderEnumerator::RunL() { - if ( iScanningDir ) - { - PERFLOGSTOP( KDirectoryScan ); - } + PRINT1( _L( "MM MTP => CMediaMtpDataProviderEnumerator::RunL iStorages.Count() = %d" ), iStorages.Count() ); - iScanningDir = EFalse; - if ( iEntries.Count() == 0 ) + if ( iStorages.Count() > 0 ) { - // No entries to process, scan next dir or storage - ScanNextDirL(); - } - else if ( iFirstUnprocessed < iEntries.Count() ) - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::RunL iFirstUnprocessed = %d" ), iFirstUnprocessed); - TRAPD( err, ProcessEntriesL();); + const CMTPStorageMetaData& storage( iFramework.StorageMgr().StorageL( iStorages[0] ) ); + TPtrC root( storage.DesC( CMTPStorageMetaData::EStorageSuid ) ); + GetModifiedContentL( root ); + TRAPD( err, iDataProvider.GetWrapperL().UpdateMusicCollectionL( root ) ); if ( err != KErrNone ) { - iFirstUnprocessed++; + PRINT1( _L("MM MTP <> CMediaMtpDataProviderEnumerator::RunL, UpdateMusicCollectionL err =%d "), err ); } - - // Complete ourselves with current TRequestStatus - // since we need to run again to either scan a new dir or drive - // or process more entries + iStorages.Remove( 0 ); TRequestStatus* status = &iStatus; User::RequestComplete( status, iStatus.Int() ); SetActive(); } else { - switch ( iStatus.Int() ) - { - case KErrNone: - // There are still entries left to be read - ScanDirL(); - break; - - case KErrEof: - // There are no more entries - default: - // Error, ignore and continue with next dir - ScanNextDirL(); - break; - } + iStorages.Reset(); + SignalCompleteL( iDataProvider ); } + PRINT( _L( "MM MTP <= CMediaMtpDataProviderEnumerator::RunL" ) ); } // ----------------------------------------------------------------------------- @@ -412,7 +190,8 @@ // TInt CMediaMtpDataProviderEnumerator::RunError( TInt aError ) { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::RunError with error %d" ), aError ); + if ( aError != KErrNone ) + PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::RunError with error %d" ), aError ); TRAP_IGNORE( SignalCompleteL( iDataProvider ) ); @@ -428,13 +207,6 @@ { CActiveScheduler::Add( this ); - TTimeIntervalMicroSeconds32 tickPeriod = 0; - TInt err = UserHal::TickPeriod(tickPeriod); - - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::ConstructL, UserHal::TickPeriod err = %d" ), err); - User::LeaveIfError( err ); - iTickPeriod = tickPeriod.Int(); - #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) iPerfLog = CMmMtpDpPerfLog::NewL( _L( "MediaMtpDataProviderEnumerator" ) ); #endif @@ -453,154 +225,6 @@ } // ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::ProcessEntriesL -// Iterates iEntries adding entries as needed to object manager and iDirStack. -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::ProcessEntriesL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderEnumerator::ProcessEntriesL" ) ); - - TBuf path = iPath.DriveAndPath(); - - while ( !IsOverThreshold() && iFirstUnprocessed < iEntries.Count() ) - { - const TEntry& entry = iEntries[iFirstUnprocessed]; - path.Append( entry.iName ); - PRINT1( _L( "MM MTP <> path = %S" ), &path ); - - TInt len = entry.iName.Length(); - - if ( entry.IsDir() ) - { - path.Append( '\\' ); - ++len; - - // we don't need to process folder, just remember - // the folder - TEntry* dirEntry = new TEntry( entry ); - User::LeaveIfNull( dirEntry ); - iDirStack.AppendL( dirEntry ); - } - else if ( IsFileAccepted( path ) ) - { - AddEntryL( path ); - } - - // Remove filename part - path.SetLength( path.Length() - len ); - - iFirstUnprocessed++; - } - - StartEnumerationCount(); - PRINT( _L( "MM MTP <= CMediaMtpDataProviderEnumerator::ProcessEntriesL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::AddEntryL -// Add a file entry to the object store -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::AddEntryL( const TDesC& aFullFileName ) - { - PRINT1( _L( "MM MTP => CMediaDataProviderEnumerator::AddEntryL aFullFileName = %S" ), &aFullFileName ); - - CMTPObjectMetaData* object( CMTPObjectMetaData::NewLC( iDataProviderId, - iFormatCode, - iStorages[0], - aFullFileName ) ); // + object - - object->SetUint( CMTPObjectMetaData::EParentHandle, iParentHandle ); - - if ( ( iFormatCode == EMTPFormatCodeMP4Container ) - || ( iFormatCode == EMTPFormatCode3GPContainer ) - || ( iFormatCode == EMTPFormatCodeASF ) ) - { - TMmMtpSubFormatCode subFormatCode; - - // Note: Delay the file parsing until external enumeration phase to avoid time-out - subFormatCode = EMTPSubFormatCodeUnknown; - - object->SetUint( CMTPObjectMetaData::EFormatSubCode, (TUint)subFormatCode ); - } - - PERFLOGSTART( KObjectManagerInsert ); - iObjectMgr.InsertObjectL( *object ); - PERFLOGSTOP( KObjectManagerInsert ); - - CleanupStack::PopAndDestroy( object ); // - object - - PRINT1( _L( "MM MTP <= CMediaMtpDataProviderEnumerator::AddEntryL, entry inserted, iFormatCode = 0x%x" ), iFormatCode); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::GetObjectFormatCode -// Returns a TMTPFormatCode for the requested object -// ----------------------------------------------------------------------------- -// -TMTPFormatCode CMediaMtpDataProviderEnumerator::GetObjectFormatCode( const TDesC& aFullFileName ) - { - PRINT1( _L("MM MTP <> CMediaMtpDataProviderEnumerator::GetObjectFormatCodeL aFullFileName = %S"), &aFullFileName ); - TMTPFormatCode formatCode = MmMtpDpUtility::FormatFromFilename( aFullFileName ); - return formatCode; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderEnumerator::IsFileAccepted -// Is the file format is supported by this Dp -// ----------------------------------------------------------------------------- -// -TBool CMediaMtpDataProviderEnumerator::IsFileAccepted( const TDesC& aFullFileName ) - { - PERFLOGSTART(KFormatFilter); - iFormatCode = GetObjectFormatCode( aFullFileName ); - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderEnumerator::IsFileAcceptedL formatCode = 0x%x" ), iFormatCode ); - TBool accepted = EFalse; - TInt count = sizeof( KMediaMtpDataProviderSupportedFormats ) / sizeof( TUint16 ); - for ( TInt i = 0; i < count; i++ ) - { - if ( iFormatCode == KMediaMtpDataProviderSupportedFormats[i] ) - { - accepted = ETrue; - break; - } - } - - PERFLOGSTOP(KFormatFilter); - return accepted; - } - -// ----------------------------------------------------------------------------- -// CMediaDpMtpEnumerator::StartEnumerationCount -// start record system tick -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderEnumerator::StartEnumerationCount() - { - iTickCountBegin = User::TickCount(); - } - -// ----------------------------------------------------------------------------- -// CMediaDpMtpEnumerator::IsOverThreshold -// Is system tick more than the predefined value? -// ----------------------------------------------------------------------------- -// -TBool CMediaMtpDataProviderEnumerator::IsOverThreshold() - { - TUint tcNow = User::TickCount(); - - if ( ( tcNow - iTickCountBegin ) * iTickPeriod >= KThresholdOfEnumerationLoopDuration ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -// ----------------------------------------------------------------------------- // CMediaDpMtpEnumerator::GetModifiedContentL() // Get Modified Content and report to Framework // ----------------------------------------------------------------------------- @@ -612,14 +236,15 @@ CDesCArray* modifiedContents = new ( ELeave ) CDesCArrayFlat( KMTPDriveGranularity ); CleanupStack::PushL( modifiedContents ); // + modifiedContents - iDataProvider.GetWrapperL().GetModifiedContentL( aStorageRoot, arrayCount, *modifiedContents ); + TRAPD( err, iDataProvider.GetWrapperL().GetModifiedContentL( aStorageRoot, arrayCount, *modifiedContents ) ); + if ( err != KErrNone ) + PRINT1( _L("MM MTP <> GetModifiedContentL err =%d "), err ); if ( arrayCount > 0 ) { CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC(); // + object for ( TInt i = 0; i < arrayCount; i++ ) { - if ( iFramework.ObjectMgr().ObjectL( ( *modifiedContents )[i], *object ) ) { object->SetUint( CMTPObjectMetaData::EObjectMetaDataUpdate , 1 ); @@ -642,7 +267,6 @@ // void CMediaMtpDataProviderEnumerator::SessionClosedL() { - iDataProvider.GetWrapperL().UpdateMusicCollectionL(); iDataProvider.GetWrapperL().CleanupDatabaseL(); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetformatcapabilities.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetformatcapabilities.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,795 +0,0 @@ -/* -* 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 -#include -#include - -#include "cmediamtpdataprovidergetobjectpropdesc.h" -#include "mediamtpdataproviderconst.h" -#include "cmediamtpdataprovidergetformatcapabilities.h" -#include "mmmtpdplogger.h" - -const TUint32 KMTPDescriptionLen = 0x00000200; - -// forward declaration -class MMmMtpDpConfig; -class CMTPTypeObjectPropDesc; -class CMTPTypeInterdependentPropDesc; -class CMTPTypeObjectPropDesc; -class CMTPTypeString; -class CGetFormatCapabilities; - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CMediaMtpDataProviderGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CMediaMtpDataProviderGetFormatCapabilities* self = - new ( ELeave ) CMediaMtpDataProviderGetFormatCapabilities( aFramework, - aConnection, - aDpConfig ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetFormatCapabilities::ConstructL() - { - CGetFormatCapabilities::ConstructL(); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::~CMediaMtpDataProviderGetFormatCapabilities() -// Destructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderGetFormatCapabilities::~CMediaMtpDataProviderGetFormatCapabilities() - { - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::CMediaMtpDataProviderGetFormatCapabilities -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderGetFormatCapabilities::CMediaMtpDataProviderGetFormatCapabilities( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CGetFormatCapabilities( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL -// -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL" ) ); - - iInterdependentPropDesc = CMTPTypeInterdependentPropDesc::NewL(); - - TBool audioWaveCodecSupported = EFalse; - TBool audioBitRateSupported = EFalse; - TBool videoFourCcCodecSupported = EFalse; - TBool videoBitRateSupported = EFalse; - - switch ( iFormatCode ) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeMP3: - case EMTPFormatCodeAAC: - case EMTPFormatCodeWAV: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryAudio[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - case EMTPFormatCodeMP4Container: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryAudio[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - case EMTPFormatCode3GPContainer: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryAudio[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryWMV ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryWMV[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - case EMTPObjectPropCodeVideoFourCCCodec: - videoFourCcCodecSupported = ETrue; - break; - case EMTPObjectPropCodeVideoBitRate: - videoBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - default: - { - User::Leave( KErrNotSupported ); - } - break; - } - - - if ( audioWaveCodecSupported && audioBitRateSupported ) - { - CMTPTypeInterdependentProperties* properties = CMTPTypeInterdependentProperties::NewL(); - if ( videoFourCcCodecSupported && videoBitRateSupported ) - { - // TODO: need to confirm - properties->AppendL( ServiceVideoFourCCCodecL() ); - properties->AppendL( ServiceVideoBitrateL() ); - iInterdependentPropDesc->AppendL( properties ); - } - properties = CMTPTypeInterdependentProperties::NewL(); - properties->AppendL( ServiceAudioWaveCodecL() ); - properties->AppendL( ServiceAudioBitrateL() ); - iInterdependentPropDesc->AppendL( properties ); - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceInterdepentPropDescL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL -// -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL() - { - PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL, iFormatCode = 0x%X" ), iFormatCode ); - CMTPTypeObjectPropDescEnumerationForm* form = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + form - - switch( iFormatCode ) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) ); - break; - - case EMTPFormatCodeMP3: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) ); - break; - - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: - case EMTPFormatCodeAAC: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) ); - break; - - case EMTPFormatCodeWAV: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) ); - break; - - default: - User::Leave( KErrNotSupported ); - break; - } - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( EMTPObjectPropCodeAudioWAVECodec, *form ); // + propertyDesc - - // Set group code - propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, - EGroupCodeMediaDB ); - CleanupStack::Pop( propertyDesc ); // - propertyDesc - CleanupStack::PopAndDestroy( form ); // - form - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioWaveCodecL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL -// -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL() - { - PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL, iFormatCode = 0x%X" ), iFormatCode ); - CMTPTypeObjectPropDesc* propertyDesc = NULL; - switch( iFormatCode ) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPWMAMinBitrate, - EMTPWMAMaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeMP3: - propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPMP3MinBitrate, - EMTPMP3MaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeAAC: - propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPAACMinBitrate, - EMTPAACMaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeWAV: - propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPPCMMinBitrate, - EMTPPCMMaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: - propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPAACPlusMinBitrate, - EMTPAACPlusMaxBitrate, - EMTPAudioBitrateStep ); - break; - - default: - User::Leave( KErrNotSupported ); - break; - } - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceAudioBitrateL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL" ) ); - CMTPTypeObjectPropDesc* propertyDesc = NULL; - if ( ( EMTPFormatCodeWMV == iFormatCode ) - || ( EMTPFormatCodeASF == iFormatCode ) ) - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm - - TUint32 values[] = - { - EMTPVideoFourCCCodecWMV3 - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ); - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint32 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - propertyDesc = CMTPTypeObjectPropDesc::NewLC( EMTPObjectPropCodeVideoFourCCCodec, - *expectedForm ); // + propertyDesc - // Set group code - propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, - EGroupCodeMediaDB ); - CleanupStack::Pop( propertyDesc ); // - propertyDesc - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoFourCCCodecL" ) ); - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL" ) ); - CMTPTypeObjectPropDesc* propertyDesc = NULL; - if ( ( EMTPFormatCodeWMV == iFormatCode ) - || ( EMTPFormatCodeASF == iFormatCode ) ) - { - propertyDesc = ServiceRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate, - EMTPWMVMinBitrate, - EMTPWMVMaxBitrate, - EMTPVideoBitrateStep, - ETrue ); - } - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceVideoBitrateL" ) ); - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL -// -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL( TUint16 aPropertyCode, - TUint32 aMinValue, - TUint32 aMaxValue, - TUint32 aStepValue, - TBool aIsReadOnly ) - { - PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL, aPropertyCode = 0x%X" ), - aPropertyCode ); - CMTPTypeObjectPropDescRangeForm* form = - CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form - - // Set expected values - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue ); - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeUINT32; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; - propertyInfo.iGetSet = !aIsReadOnly; - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( aPropertyCode, - propertyInfo, - form ); // + propertyDesc - // Set group code - propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, EGroupCodeMediaDB ); - - CleanupStack::Pop( propertyDesc ); // - propertyDesc - CleanupStack::PopAndDestroy( form ); // - form - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceRangeFormDescriptionL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificpropertyDescL -// -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL( TUint16 aPropertyCode ) - { - PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL, aPropertyCode = 0x%X" ), aPropertyCode ); - // Property object to return with the desc value - CMTPTypeObjectPropDesc* propertyDesc = NULL; - - switch ( aPropertyCode ) - { - // format specific - case EMTPObjectPropCodeArtist: // Artist - case EMTPObjectPropCodeTrack: // Track - case EMTPObjectPropCodeGenre: // Genre - case EMTPObjectPropCodeUseCount: // Use Count - case EMTPObjectPropCodeAlbumName: // Album Name - case EMTPObjectPropCodeAlbumArtist: // Album Artist - case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date - case EMTPObjectPropCodeComposer: // Composer - case EMTPObjectPropCodeParentalRating: - propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropertyCode ); - break; - - // Number of Channels (m) - case EMTPObjectPropCodeNumberOfChannels: - propertyDesc = ServiceNumberOfChannelsL(); - break; - - // Sample Rate (HAS MINIMUM AND MAX VALUE) - case EMTPObjectPropCodeSampleRate: - propertyDesc = ServiceCodeSampleRateL(); - break; - - // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED) - case EMTPObjectPropCodeAudioWAVECodec: - propertyDesc = ServiceAudioWaveCodecL(); - break; - - // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED) - case EMTPObjectPropCodeAudioBitRate: - propertyDesc = ServiceAudioBitrateL(); - break; - - // Duration - case EMTPObjectPropCodeDuration: - propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode, - EMTPMinDuration, - EMTPMaxDuration, - EMTPDurationStep ); - break; - - // Description - case EMTPObjectPropCodeDescription: - propertyDesc = ServiceDescriptionL(); - break; - - case EMTPObjectPropCodeWidth: - propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode, - EMTPMinWidth, - EMTPMaxWidth, - EMTPStepWidth ); - break; - - case EMTPObjectPropCodeHeight: - propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode, - EMTPMinHeight, - EMTPMaxHeight, - EMTPStepHeight ); - break; - - case EMTPObjectPropCodeScanType: - propertyDesc = ServiceScanTypeDescriptionL(); - break; - - case EMTPObjectPropCodeVideoFourCCCodec: - propertyDesc = ServiceVideoFourCCCodecL(); - break; - - case EMTPObjectPropCodeVideoBitRate: - propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode, - EMTPWMVMinBitrate, - EMTPWMVMaxBitrate, - EMTPVideoBitrateStep, - ETrue ); - break; - - case EMTPObjectPropCodeFramesPerThousandSeconds: - propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode, - EMTPMinFramesPerThousandSeconds, - EMTPMaxFramesPerThousandSeconds, - EMTPStepFramesPerThousandSeconds ); - break; - - case EMTPObjectPropCodeKeyFrameDistance: - propertyDesc = ServiceRangeFormDescriptionL( aPropertyCode, - EMTPMinKeyFrameDistance, - EMTPMaxKeyFrameDistance, - EMTPStepKeyFrameDistance ); - break; - - case EMTPObjectPropCodeEncodingProfile: - propertyDesc = ServiceEncodingProfileDescriptionL(); - break; - - case EMTPObjectPropCodeDRMStatus: - propertyDesc = ServiceDRMStatusL(); - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - propertyDesc = ServiceOMADRMStatusL(); - break; - - default: - User::Leave( KErrNotSupported ); - break; - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceSpecificPropertyDescL" ) ); - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL() -// Create list of possible Channel numbers and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm - - TUint16 values[] = - { - EMTPChannelMono, - EMTPChannelStereo - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ); - - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels, - *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceNumberOfChannelsL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -//CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL -// Create list of possible Sample rate list and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm - - TUint32 values[] = - { - EMTPSampleRate8K, - EMTPSampleRate16K, - EMTPSampleRate22_05K, - EMTPSampleRate24K, - EMTPSampleRate32K, - EMTPSampleRate44_1K, - EMTPSampleRate48K - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ); - - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint32 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate, - CMTPTypeObjectPropDesc::EEnumerationForm, - expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceCodeSampleRateL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL() -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL" ) ); - - TMTPTypeUint32 uint32Data( KMTPDescriptionLen ); - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription, - CMTPTypeObjectPropDesc::ELongStringForm, - &uint32Data ); - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceDescriptionL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -//CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm - - TUint16 values[] = - { - EMTPScanTypeProgressive - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ); - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc* propertyDesc = NULL; - propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType, - *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceScanTypeDescriptionL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm - - CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) ); // + string - expectedForm->AppendSupportedValueL( *string ); - string->SetL( _L("SP@ML")); - expectedForm->AppendSupportedValueL( *string ); - string->SetL( _L("MP@LL")); - expectedForm->AppendSupportedValueL( *string ); - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeString; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite; - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile, - propertyInfo, - expectedForm ); - - CleanupStack::PopAndDestroy( string ); // - string - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceEncodingProfileDescriptionL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm - - TUint16 values[] = - { - EMTPDrmNoProtection, - EMTPDrmProtection, - EMTPDrmReserveForMTP, - EMTPDrmVenderExtension - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ); - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus, - *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceDRMStatusL" ) ); - - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm - - TUint8 values[] = - { - EMTPOMADrmNoProtection, - EMTPOMADrmProtection, - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ); - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint8 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeUINT8; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus, - propertyInfo, - expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetFormatCapabilities::ServiceOMADRMStatusL" ) ); - - return propertyDesc; - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetinterdependentpropdesc.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetinterdependentpropdesc.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,461 +0,0 @@ -/* -* 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: Implement the operation: GetInterdenpendentPropDesc -* -*/ - - -#include "cmediamtpdataprovidergetinterdependentpropdesc.h" -#include "mediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "tobjectdescription.h" -#include "mmmtpdpdefs.h" -#include "mmmtpdpconfig.h" - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CMediaMtpDataProviderGetInterDependentPropDesc::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CMediaMtpDataProviderGetInterDependentPropDesc* self = - new ( ELeave ) CMediaMtpDataProviderGetInterDependentPropDesc( aFramework, - aConnection ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CMediaDpMtpGetInterDependentPropDesc::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetInterDependentPropDesc::ConstructL() - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::~CMediaMtpDataProviderGetInterDependentPropDesc -// Destructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderGetInterDependentPropDesc::~CMediaMtpDataProviderGetInterDependentPropDesc() - { - delete iDataset; - delete iProperties; - } - -// ----------------------------------------------------------------------------- -// CMTPGetInterDependentPropDesc::CMTPGetInterDependentPropDesc -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderGetInterDependentPropDesc::CMediaMtpDataProviderGetInterDependentPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ) : - CRequestProcessor( aFramework, aConnection, 0, NULL ) - { - PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::CheckRequestL -// Verify the reqeust and returns it -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CMediaMtpDataProviderGetInterDependentPropDesc::CheckRequestL() - { - TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL(); - iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); - - if ( EMTPRespCodeOK == responseCode ) - { - TInt count = sizeof( KMediaMtpDataProviderSupportedFormats ) / sizeof( TUint16 ); - - responseCode = EMTPRespCodeInvalidObjectFormatCode; - - for ( TInt i = 0; i < count; i++ ) - { - if ( iFormatCode == KMediaMtpDataProviderSupportedFormats[i] ) - { - responseCode = EMTPRespCodeOK; - break; - } - } - } - - return responseCode; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL -// service a request at request phase -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL" ) ); - - // Clear the data set. - delete iDataset; - iDataset = NULL; - iDataset = CMTPTypeInterdependentPropDesc::NewL(); - - TBool audioWaveCodecSupported = EFalse; - TBool audioBitRateSupported = EFalse; - TBool videoFourCcCodecSupported = EFalse; - TBool videoBitRateSupported = EFalse; - - switch ( iFormatCode ) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeMP3: - case EMTPFormatCodeAAC: - case EMTPFormatCodeWAV: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryAudio[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - default: - PRINT( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL default" ) ); - // do nothing - break; - } - } - } - break; - - case EMTPFormatCodeMP4Container: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryAudio[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - case EMTPFormatCode3GPContainer: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryAudio ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch ( KMmMtpDpSupportedPropMandatoryAudio[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - TInt count = sizeof( KMmMtpDpSupportedPropMandatoryWMV ) / sizeof( TUint16 ); - - for ( TInt i = 0; i < count; i++ ) - { - switch (KMmMtpDpSupportedPropMandatoryWMV[i] ) - { - case EMTPObjectPropCodeAudioWAVECodec: - audioWaveCodecSupported = ETrue; - break; - case EMTPObjectPropCodeAudioBitRate: - audioBitRateSupported = ETrue; - break; - case EMTPObjectPropCodeVideoFourCCCodec: - videoFourCcCodecSupported = ETrue; - break; - case EMTPObjectPropCodeVideoBitRate: - videoBitRateSupported = ETrue; - break; - default: - // do nothing - break; - } - } - } - break; - - default: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - } - break; - } - - if ( audioWaveCodecSupported && audioBitRateSupported ) - { - if ( videoFourCcCodecSupported && videoBitRateSupported ) - { - iProperties = CMTPTypeInterdependentProperties::NewL(); - ServiceVideoFourCCCodecL(); - ServiceVideoBitrateL(); - iDataset->AppendL( iProperties ); -// CleanupStack::Pop(); - iProperties = NULL; - } - - iProperties = CMTPTypeInterdependentProperties::NewL(); - ServiceAudioWaveCodecL(); - ServiceAudioBitrateL(); - iDataset->AppendL( iProperties ); -// CleanupStack::Pop(); - iProperties = NULL; - } - - // Send the dataset. - SendDataL( *iDataset ); - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetInterDependentPropDesc::ServiceL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL -// -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL() - { - CMTPTypeObjectPropDescEnumerationForm* form = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); - - switch( iFormatCode ) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecWMA ) ); - break; - - case EMTPFormatCodeMP3: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecMP3 ) ); - break; - - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: - case EMTPFormatCodeAAC: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecAAC ) ); - break; - - case EMTPFormatCodeWAV: - form->AppendSupportedValueL( TMTPTypeUint32( EMTPAudioWAVECodecPCM ) ); - break; - - default: - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - break; - } - - CMTPTypeObjectPropDesc::TPropertyInfo propInfo; - propInfo.iDataType = EMTPTypeUINT32; - propInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - propInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite; - SetFormForResponseL( EMTPObjectPropCodeAudioWAVECodec, propInfo, form ); - CleanupStack::PopAndDestroy( form ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL -// -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL() - { - switch( iFormatCode ) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPWMAMinBitrate, - EMTPWMAMaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeMP3: - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPMP3MinBitrate, - EMTPMP3MaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeAAC: - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPAACMinBitrate, - EMTPAACMaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeWAV: - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPPCMMinBitrate, - EMTPPCMMaxBitrate, - EMTPAudioBitrateStep ); - break; - - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPAACPlusMinBitrate, - EMTPAACPlusMaxBitrate, - EMTPAudioBitrateStep ); - break; - - default: - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceAudioBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL() - { - switch( iFormatCode ) - { - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - CMTPTypeObjectPropDescEnumerationForm* form = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 ); - CleanupStack::PushL( form ); // + form - - TUint32 values[] = - { - EMTPVideoFourCCCodecWMV3 - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint32 data( values[i] ); - form->AppendSupportedValueL( data ); - } - // TODO: - CMTPTypeObjectPropDesc::TPropertyInfo propInfo; - propInfo.iDataType = EMTPTypeUINT32; - propInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - propInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite; - SetFormForResponseL( EMTPObjectPropCodeVideoFourCCCodec, propInfo, form ); - CleanupStack::PopAndDestroy( form ); // - form - } - break; - - default: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - } - break; - } - } - -void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoBitrateL() - { - switch( iFormatCode ) - { - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - ServiceRangeFormDescriptionL( EMTPObjectPropCodeVideoBitRate, - EMTPWMVMinBitrate, - EMTPWMVMaxBitrate, - EMTPVideoBitrateStep, - ETrue ); - break; - - default: - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetInterDependentPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - break; - } - } - -void CMediaMtpDataProviderGetInterDependentPropDesc::ServiceRangeFormDescriptionL( TUint16 aPropCode, - TUint32 aMinValue, - TUint32 aMaxValue, - TUint32 aStepValue, - TBool aIsReadOnly ) - { - CMTPTypeObjectPropDescRangeForm* form = - CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form - - // Set expected values - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue ); - - CMTPTypeObjectPropDesc::TPropertyInfo propInfo; - propInfo.iDataType = EMTPTypeUINT32; - propInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; - propInfo.iGetSet = !aIsReadOnly; - SetFormForResponseL( aPropCode, propInfo, form ); - CleanupStack::PopAndDestroy( form ); // - form - } - -void CMediaMtpDataProviderGetInterDependentPropDesc::SetFormForResponseL( TUint16 aPropertyCode, - CMTPTypeObjectPropDesc::TPropertyInfo& aPropInfo, - const MMTPType* aForm ) - { - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewLC( aPropertyCode, - aPropInfo, - aForm ); - // Set group code - propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, EGroupCodeMediaDB ); - - iProperties->AppendL( propertyDesc ); - CleanupStack::Pop( propertyDesc ); - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropdesc.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropdesc.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,716 +0,0 @@ -/* -* 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: Implement the operation: GetObjectPropDesc -* -*/ - -#include -#include -#include - -#include "cmediamtpdataprovidergetobjectpropdesc.h" -#include "mediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "mmmtpdpdefs.h" - -const TUint32 KMTPDescriptionLen = 0x00000200; - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CMediaMtpDataProviderGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CMediaMtpDataProviderGetObjectPropDesc* self = - new ( ELeave ) CMediaMtpDataProviderGetObjectPropDesc( aFramework, - aConnection, - aDpConfig ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::ConstructL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ConstructL() - { - CGetObjectPropDesc::ConstructL(); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc -// Destructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderGetObjectPropDesc::~CMediaMtpDataProviderGetObjectPropDesc() - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc -// Standard c++ constructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderGetObjectPropDesc::CMediaMtpDataProviderGetObjectPropDesc( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CGetObjectPropDesc( aFramework, aConnection, aDpConfig ) - { - - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceSpecificObjectPropertyL(TUint16 aPropCode) - { - switch (aPropCode) - { - // format specific - case EMTPObjectPropCodeArtist: // Artist - case EMTPObjectPropCodeTrack: // Track - case EMTPObjectPropCodeGenre: // Genre - case EMTPObjectPropCodeUseCount: // Use Count - case EMTPObjectPropCodeAlbumName: // Album Name - case EMTPObjectPropCodeAlbumArtist: // Album Artist - case EMTPObjectPropCodeOriginalReleaseDate: // Original Release Date - case EMTPObjectPropCodeComposer: // Composer - case EMTPObjectPropCodeParentalRating: - iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode ); - break; - - // Number of Channels (m) - case EMTPObjectPropCodeNumberOfChannels: - ServiceNumberOfChannelsL(); - break; - - // Sample Rate (HAS MINIMUM AND MAX VALUE) - case EMTPObjectPropCodeSampleRate: - ServiceCodeSampleRateL(); - break; - - // Audio Wave Codec (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED) - case EMTPObjectPropCodeAudioWAVECodec: - ServiceCodeWaveCodecL(); - break; - - // Audio Bit Rate (MAY REQUIRED LIMITED NUMBER TO BE PRODUCED) - case EMTPObjectPropCodeAudioBitRate: - ServiceCodeAudioBitrateL(); - break; - - // Duration - case EMTPObjectPropCodeDuration: - ServiceDurationL(); - break; - - // Description - case EMTPObjectPropCodeDescription: - ServiceDescriptionL(); - break; - - case EMTPObjectPropCodeWidth: - ServiceRangeFormDescriptionL( aPropCode, - EMTPMinWidth, - EMTPMaxWidth, - EMTPStepWidth ); - break; - - case EMTPObjectPropCodeHeight: - ServiceRangeFormDescriptionL( aPropCode, - EMTPMinHeight, - EMTPMaxHeight, - EMTPStepHeight ); - break; - - case EMTPObjectPropCodeScanType: - ServiceScanTypeDescriptionL(); - break; - - case EMTPObjectPropCodeVideoFourCCCodec: - ServiceVideoFourCCCodecL(); - break; - - case EMTPObjectPropCodeVideoBitRate: - ServiceRangeFormDescriptionL( aPropCode, - EMTPWMVMinBitrate, - EMTPWMVMaxBitrate, - EMTPVideoBitrateStep, - ETrue ); - break; - - case EMTPObjectPropCodeFramesPerThousandSeconds: - ServiceRangeFormDescriptionL( aPropCode, - EMTPMinFramesPerThousandSeconds, - EMTPMaxFramesPerThousandSeconds, - EMTPStepFramesPerThousandSeconds ); - break; - - case EMTPObjectPropCodeKeyFrameDistance: - ServiceRangeFormDescriptionL( aPropCode, - EMTPMinKeyFrameDistance, - EMTPMaxKeyFrameDistance, - EMTPStepKeyFrameDistance ); - break; - - case EMTPObjectPropCodeEncodingProfile: - ServiceEncodingProfileDescriptionL(); - break; - - case EMTPObjectPropCodeDRMStatus: - ServiceDRMStatusL(); - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - ServiceOMADRMStatusL(); - break; - - default: - User::Leave( KErrNotSupported ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL() -// Create Description and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceDescriptionL() - { - TMTPTypeUint32 uint32Data( KMTPDescriptionLen ); - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDescription, - CMTPTypeObjectPropDesc::ELongStringForm, - &uint32Data ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL -// Create list of possible Channel numbers and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceNumberOfChannelsL() - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) ); - - CMTPTypeObjectPropDescEnumerationForm* expectedForm = CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - - TUint16 values[] = - { - EMTPChannelMono, - EMTPChannelStereo - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNumberOfChannels, *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL -// Create list of possible Sample rate list and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL() - { - // if some format does not support the sample rate, - // here still need an instance of CMTPTypeObjectPropDesc. - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) ); - - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + expectedForm - - TUint32 values[] = - { - EMTPSampleRate8K , - EMTPSampleRate16K, - EMTPSampleRate22_05K, - EMTPSampleRate24K, - EMTPSampleRate32K, - EMTPSampleRate44_1K, - EMTPSampleRate48K - }; - - TInt numValues = sizeof( values ) / sizeof( values[0] ) ; - - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint32 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeSampleRate, CMTPTypeObjectPropDesc::EEnumerationForm, expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeSampleRateL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::ServiceWaveCodecL -// Create list of possible bitrate types and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL() - { - PRINT1( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL, format = 0x%x" ), iFormatCode ); - - CMTPTypeObjectPropDescEnumerationForm* form = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT32 ); // + form - - switch (iFormatCode) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode ); - TMTPTypeUint32 data( EMTPAudioWAVECodecWMA ); - form->AppendSupportedValueL( data ); - } - break; - - case EMTPFormatCodeMP3: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode ); - TMTPTypeUint32 data( EMTPAudioWAVECodecMP3 ); - form->AppendSupportedValueL( data ); - } - break; - - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: - case EMTPFormatCodeAAC: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x" ), iFormatCode ); - TMTPTypeUint32 data( EMTPAudioWAVECodecAAC ); - form->AppendSupportedValueL( data ); - } - break; - - case EMTPFormatCodeWAV: - { - PRINT1( _L("MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL format = 0x%x"), iFormatCode ); - TMTPTypeUint32 data( EMTPAudioWAVECodecPCM ); - form->AppendSupportedValueL( data ); - } - break; - - default: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave(KErrNotSupported); - } - break; - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeAudioWAVECodec, *form ); - CleanupStack::PopAndDestroy( form ); // - form - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeWaveCodecL" ) ); - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrateL() - { - PRINT1( _L("MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitrate, format = 0x%x"), iFormatCode ); - - switch (iFormatCode) - { - case EMTPFormatCodeWMA: - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPWMAMinBitrate, - EMTPWMAMaxBitrate, - EMTPAudioBitrateStep ); - } - break; - - case EMTPFormatCodeMP3: - { - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPMP3MinBitrate, - EMTPMP3MaxBitrate, - EMTPAudioBitrateStep ); - } - break; - - case EMTPFormatCodeAAC: - { - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPAACMinBitrate, - EMTPAACMaxBitrate, - EMTPAudioBitrateStep ); - } - break; - - case EMTPFormatCodeWAV: - { - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPPCMMinBitrate, - EMTPPCMMaxBitrate, - EMTPAudioBitrateStep ); - } - break; - - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: - { - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPAACPlusMinBitrate, - EMTPAACPlusMaxBitrate, - EMTPAudioBitrateStep ); - } - break; - - default: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - } - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceCodeAudioBitRateL" ) ); - } - -// ----------------------------------------------------------------------------- -// CGetObjectPropDesc::ServiceDurationL() -// Create list of Duration types and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL() - { - - PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) ); - - CMTPTypeObjectPropDescRangeForm* form = CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form - - // Set expected values - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, EMTPMinDuration ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, EMTPMaxDuration ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, EMTPDurationStep ); - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDuration, *form ); - CleanupStack::PopAndDestroy( form ); // - form - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderGetObjectPropDesc::ServiceDurationL" ) ); - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceScanTypeDescriptionL() - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - - TUint16 values[] = - { - EMTPScanTypeProgressive - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeScanType, *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL() - { - switch( iFormatCode ) - { - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT32 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - - TUint32 values[] = - { - EMTPVideoFourCCCodecWMV3 - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint32 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // comment out asf fourcc for mp2a and mp4a, not sure if this is needed - /*if ( iFormatCode == EMTPFormatCodeASF ) - { - TUint32 additionalValues[] = - { - EMTPVideoFourCCCodecMP2A, - EMTPVideoFourCCCodecMP4A - }; - - for ( TInt j = 0; i < sizeof(additionalValues) / sizeof(additionalValues[0]) ) - { - TMTPTypeUint32 data( additionalValues[i] ); - expectedForm->AppendSupportedValueL( data ); - } - }*/ - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeVideoFourCCCodec, *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - break; - - default: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoFourCCCodecL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - } - break; - } - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL() - { - switch( iFormatCode ) - { - case EMTPFormatCodeWMV: - case EMTPFormatCodeASF: - { - ServiceRangeFormDescriptionL( EMTPObjectPropCodeAudioBitRate, - EMTPWMVMinBitrate, - EMTPWMVMaxBitrate, - EMTPVideoBitrateStep, - ETrue ); - } - break; - - default: - { - PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropDesc::ServiceVideoBitrateL leave because of invalid formatcode = 0x%x" ), iFormatCode ); - User::Leave( KErrNotSupported ); - } - break; - } - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceEncodingProfileDescriptionL() - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeString ); // + expectedForm - - CMTPTypeString* string = CMTPTypeString::NewLC( _L( "SP@LL" ) ); - expectedForm->AppendSupportedValueL( *string ); - string->SetL(_L("SP@ML")); - expectedForm->AppendSupportedValueL( *string ); - string->SetL(_L("MP@LL")); - expectedForm->AppendSupportedValueL( *string ); - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeString; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadWrite; - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeEncodingProfile, - propertyInfo, - expectedForm ); - - CleanupStack::PopAndDestroy( string ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - -void CMediaMtpDataProviderGetObjectPropDesc::ServiceRangeFormDescriptionL( TUint16 aPropCode, - TUint32 aMinValue, - TUint32 aMaxValue, - TUint32 aStepValue, - TBool aIsReadOnly ) - { - CMTPTypeObjectPropDescRangeForm* form = - CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form - - // Set expected values - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue ); - form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue ); - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeUINT32; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; - propertyInfo.iGetSet = !aIsReadOnly; - iObjectProperty = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, form ); - - CleanupStack::PopAndDestroy( form ); // - form - } - -// ----------------------------------------------------------------------------- -// CGetObjectPropDesc::ServiceDRMStatusL -// Create list of possible DRM status and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceDRMStatusL() - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - - TUint16 values[] = - { - EMTPDrmNoProtection, - EMTPDrmProtection, - EMTPDrmReserveForMTP, - EMTPDrmVenderExtension - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeDRMStatus, *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL -// Create list of possible OMA DRM status and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderGetObjectPropDesc::ServiceOMADRMStatusL() - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT8 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - - TUint8 values[] = - { - EMTPOMADrmNoProtection, - EMTPOMADrmProtection, - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint8 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeUINT8; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPExtObjectPropCodeOmaDrmStatus, - propertyInfo, - expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectproplist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectproplist.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include #include @@ -54,7 +53,7 @@ // CMediaMtpDataProviderGetObjectPropList::~CMediaMtpDataProviderGetObjectPropList() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -63,10 +62,11 @@ // ----------------------------------------------------------------------------- // CMediaMtpDataProviderGetObjectPropList::CMediaMtpDataProviderGetObjectPropList( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CGetObjectPropList( aFramework, aConnection, aDpConfig ) + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) : + CGetObjectPropList( aFramework, aConnection, aDpConfig ) { + // Do nothing } // ----------------------------------------------------------------------------- @@ -96,7 +96,6 @@ switch ( aPropCode ) { - //case EMTPObjectPropCodeName: case EMTPObjectPropCodeArtist: case EMTPObjectPropCodeGenre: case EMTPObjectPropCodeComposer: @@ -113,11 +112,8 @@ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL err = %d" ), err ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars()); - } + iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars()); CleanupStack::PopAndDestroy( textData ); // - textData } @@ -133,12 +129,9 @@ PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL err = %d" ), err ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData); - } - + iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); + iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData); + CleanupStack::PopAndDestroy( desData ); // - desData } break; @@ -154,18 +147,14 @@ *iObject ) ); PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL err = %d" ), err ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value()); - } + iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value()); } break; case EMTPObjectPropCodeWidth: case EMTPObjectPropCodeHeight: case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: case EMTPObjectPropCodeSampleRate: case EMTPObjectPropCodeAudioWAVECodec: case EMTPObjectPropCodeAudioBitRate: @@ -180,11 +169,8 @@ *iObject ) ); PRINT1( _L( "MM MTP <> CMediaMtpDataProviderGetObjectPropList::ServiceSpecificObjectPropertyL err = %d" ), err ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value()); - } + iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); + iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value()); } break; @@ -192,10 +178,10 @@ { TInt drmStatus = MmMtpDpUtility::GetDrmStatus( iObject->DesC( CMTPObjectMetaData::ESuid ) ); TMTPTypeUint8 result; - result.Set( 0 ); + result.Set( EMTPDrmStatusNotProtected ); if ( drmStatus == EMTPDrmStatusProtected ) - result.Set( 1 ); + result.Set( EMTPDrmStatusProtected ); iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropvalue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidergetobjectpropvalue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include @@ -54,7 +53,7 @@ // void CMediaMtpDataProviderGetObjectPropValue::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -64,7 +63,7 @@ // CMediaMtpDataProviderGetObjectPropValue::~CMediaMtpDataProviderGetObjectPropValue() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -77,10 +76,10 @@ MMmMtpDpConfig& aDpConfig ) : CGetObjectPropValue( aFramework, aConnection, aDpConfig ) { - + // Do nothing } -void CMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL(TUint16 aPropCode) +void CMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL( TUint16 aPropCode ) { PRINT( _L( "MM MTP => CMediaMtpDataProviderGetObjectPropValue::ServiceSpecificObjectPropertyL" ) ); switch ( aPropCode ) @@ -120,7 +119,6 @@ case EMTPObjectPropCodeWidth: // 0xDC87 case EMTPObjectPropCodeHeight: // 0xDC88 case EMTPObjectPropCodeDuration: // 0xDC89 - case EMTPObjectPropCodeUseCount: // 0xDC91 case EMTPObjectPropCodeSampleRate: // 0xDE93 case EMTPObjectPropCodeAudioWAVECodec: // 0xDE99 case EMTPObjectPropCodeAudioBitRate: // 0xDE9A @@ -151,7 +149,7 @@ TInt drmStatus = MmMtpDpUtility::GetDrmStatus( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); iMTPTypeUint8.Set( 0 ); - if (drmStatus == EMTPDrmStatusProtected) + if ( drmStatus == EMTPDrmStatusProtected ) iMTPTypeUint8.Set( 1 ); SendDataL( iMTPTypeUint8 ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidermoveobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidermoveobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidermoveobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -1,22 +1,21 @@ /* -* 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: Implement the operation: Copy Object -* -*/ + * 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: Implement the operation: Move Object + * + */ -#include #include #include #include @@ -65,7 +64,7 @@ // CMediaMtpDataProviderMoveObject::~CMediaMtpDataProviderMoveObject() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -78,7 +77,7 @@ MMmMtpDpConfig& aDpConfig ) : CMoveObject( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -90,7 +89,8 @@ TUint32 aHandle, const CMTPObjectMetaData& aObject ) { - PRINT1( _L( "MM MTP => CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL aPropCode(0x%x)" ), aPropCode ); + PRINT1( _L( "MM MTP => CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL aPropCode(0x%x)" ), + aPropCode ); CMTPTypeString* textData = NULL; CMTPTypeArray* desData = NULL; @@ -112,7 +112,7 @@ case EMTPObjectPropCodeParentalRating: case EMTPObjectPropCodeEncodingProfile: { - textData = CMTPTypeString::NewLC(); // + textData + textData = CMTPTypeString::NewLC(); // + textData TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode, *textData, @@ -122,29 +122,21 @@ if ( err == KErrNone ) { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// *textData ); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars() ); } - else if ( err == KErrNotFound ) - { + else + { iPropertyElement = NULL; - } - else - { - User::Leave( err ); - } + } - CleanupStack::PopAndDestroy( textData ); // - textData + CleanupStack::PopAndDestroy( textData ); // - textData } break; case EMTPObjectPropCodeDescription: { - desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData + desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode, *desData, @@ -154,24 +146,15 @@ if ( err == KErrNone ) { - - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// *desData ); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetArrayL( CMTPTypeObjectPropListElement::EValue, *desData ); } - else if ( err == KErrNotFound ) + else { iPropertyElement = NULL; } - else - { - User::Leave( err ); - } - CleanupStack::PopAndDestroy( desData ); // - desData + CleanupStack::PopAndDestroy( desData ); // - desData } break; @@ -188,21 +171,12 @@ if ( err == KErrNone ) { - - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// uint16 ); - } - else if ( err == KErrNotFound ) - { - iPropertyElement = NULL; + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, uint16.Value() ); } else { - User::Leave( err ); + iPropertyElement = NULL; } } break; @@ -210,7 +184,6 @@ case EMTPObjectPropCodeWidth: case EMTPObjectPropCodeHeight: case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: case EMTPObjectPropCodeSampleRate: case EMTPObjectPropCodeAudioWAVECodec: case EMTPObjectPropCodeAudioBitRate: @@ -227,20 +200,12 @@ if ( err == KErrNone ) { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// uint32 ); - } - else if ( err == KErrNotFound ) - { - iPropertyElement = NULL; + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, uint32.Value() ); } else { - User::Leave( err ); + iPropertyElement = NULL; } } break; @@ -254,129 +219,9 @@ if ( drmStatus == EMTPDrmStatusProtected ) result.Set( 1 ); - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8); - iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, result.Value()); - -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( aHandle, -// aPropCode, -// EMTPTypeUINT8, -// result ); - } - break; - - default: - { - User::Leave( KErrNotSupported ); - } - break; - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL -// -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL" ) ); - TMTPResponseCode responseCode( EMTPRespCodeOK ); - - switch ( aPropCode ) - { - case EMTPObjectPropCodeArtist: - case EMTPObjectPropCodeGenre: - case EMTPObjectPropCodeComposer: - case EMTPObjectPropCodeOriginalReleaseDate: - case EMTPObjectPropCodeAlbumName: - case EMTPObjectPropCodeParentalRating: - case EMTPObjectPropCodeEncodingProfile: - { - CMTPTypeString* stringData = - CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData - - responseCode = ServiceMetaDataToWrapper( aPropCode, - *stringData, - aObject ); - - CleanupStack::PopAndDestroy( stringData );// - stringData - } - break; - - case EMTPObjectPropCodeVideoBitRate: - { - responseCode = EMTPRespCodeAccessDenied; - } - break; - - case EMTPObjectPropCodeDescription: - { - CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData -// aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData ); - - desData->SetByDesL(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue )); - responseCode = ServiceMetaDataToWrapper( aPropCode, - *desData, - aObject ); - CleanupStack::PopAndDestroy( desData ); // - desData - } - break; - - case EMTPObjectPropCodeWidth: - case EMTPObjectPropCodeHeight: - case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: - case EMTPObjectPropCodeSampleRate: - case EMTPObjectPropCodeAudioWAVECodec: - case EMTPObjectPropCodeAudioBitRate: - case EMTPObjectPropCodeVideoFourCCCodec: - case EMTPObjectPropCodeFramesPerThousandSeconds: - case EMTPObjectPropCodeKeyFrameDistance: - { - TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) ); - responseCode = ServiceMetaDataToWrapper( aPropCode, - uint32, - aObject ); - } - break; - - case EMTPObjectPropCodeTrack: - case EMTPObjectPropCodeNumberOfChannels: - case EMTPObjectPropCodeScanType: - case EMTPObjectPropCodeDRMStatus: - { - TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue )); - responseCode = ServiceMetaDataToWrapper( aPropCode, - uint16, - aObject ); - } - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - { - TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( - CMTPObjectMetaData::ESuid ) ); - - if ( drmStatus == EMTPDrmStatusUnknown ) - { - responseCode = EMTPRespCodeAccessDenied; - } - else - { - TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); - - // there's no DB field to remember the value, so return an error - // if there's a mismatch to CAF protection status - if ( ( ( drmStatus == EMTPDrmStatusProtected ) && ( newValue.Value() == 0 ) ) - || ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) ) - { - responseCode = EMTPRespCodeAccessDenied; - } - } + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EDatatype, EMTPTypeUINT8 ); + iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, result.Value() ); } break; @@ -387,9 +232,7 @@ break; } - PRINT( _L( "MM MTP <= CMediaMtpDataProviderMoveObject::ServiceSetSpecificObjectPropertyL" ) ); - - return responseCode; + PRINT( _L( "MM MTP <= CMediaMtpDataProviderMoveObject::ServiceSpecificObjectPropertyL" ) ); } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderpropertysettingutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataproviderpropertysettingutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,188 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include +#include + +#include "tobjectdescription.h" +#include "cmmmtpdpmetadataaccesswrapper.h" +#include "mmmtpdpconfig.h" +#include "mmmtpdputility.h" + +#include "cmediamtpdataproviderpropertysettingutility.h" +#include "mmmtpdplogger.h" + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderPropertySettingUtility::NewL +// Two-phase construction method +// ----------------------------------------------------------------------------- +// +CMediaMtpDataProviderPropertySettingUtility* CMediaMtpDataProviderPropertySettingUtility::NewL() + { + CMediaMtpDataProviderPropertySettingUtility* self = + new ( ELeave ) CMediaMtpDataProviderPropertySettingUtility(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderPropertySettingUtility::~CMediaMtpDataProviderPropertySettingUtility +// Destructor +// ----------------------------------------------------------------------------- +// +CMediaMtpDataProviderPropertySettingUtility::~CMediaMtpDataProviderPropertySettingUtility() + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CMediaMtpDataProviderSetObjectPropList::CMediaMtpDataProviderSetObjectPropList +// Standard C++ Constructor +// ----------------------------------------------------------------------------- +// +CMediaMtpDataProviderPropertySettingUtility::CMediaMtpDataProviderPropertySettingUtility() + { + // Do nothing + } + +TMTPResponseCode CMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig, + TUint16 aPropCode, + const CMTPObjectMetaData& aObject, + const CMTPTypeObjectPropListElement& aElement ) + { + PRINT( _L( "MM MTP => CMediaMtpDataProviderPropertySettingUtility::SetSpecificObjectPropertyL" ) ); + TMTPResponseCode responseCode( EMTPRespCodeOK ); + + switch ( aPropCode ) + { + case EMTPObjectPropCodeArtist: + case EMTPObjectPropCodeGenre: + case EMTPObjectPropCodeComposer: + case EMTPObjectPropCodeOriginalReleaseDate: + case EMTPObjectPropCodeAlbumName: + case EMTPObjectPropCodeParentalRating: + case EMTPObjectPropCodeEncodingProfile: + { + CMTPTypeString* stringData = + CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData + + responseCode = SetMetaDataToWrapper( aDpConfig, + aPropCode, + *stringData, + aObject ); + + CleanupStack::PopAndDestroy( stringData );// - stringData + } + break; + + case EMTPObjectPropCodeVideoBitRate: + /* + spec: + * Object properties that are get-only (0x00 GET) + * should accept values during object creation by + * way of the SendObjectPropList command. + */ + break; + + case EMTPObjectPropCodeDescription: + { + CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData + desData->SetByDesL( aElement.ArrayL( CMTPTypeObjectPropListElement::EValue ) ); + responseCode = SetMetaDataToWrapper( aDpConfig, + aPropCode, + *desData, + aObject ); + CleanupStack::PopAndDestroy( desData ); // - desData + } + break; + + case EMTPObjectPropCodeWidth: + case EMTPObjectPropCodeHeight: + case EMTPObjectPropCodeDuration: + case EMTPObjectPropCodeSampleRate: + case EMTPObjectPropCodeAudioWAVECodec: + case EMTPObjectPropCodeAudioBitRate: + case EMTPObjectPropCodeVideoFourCCCodec: + case EMTPObjectPropCodeFramesPerThousandSeconds: + case EMTPObjectPropCodeKeyFrameDistance: + { + TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) ); + responseCode = SetMetaDataToWrapper( aDpConfig, + aPropCode, + uint32, + aObject ); + } + break; + + case EMTPObjectPropCodeTrack: + case EMTPObjectPropCodeNumberOfChannels: + case EMTPObjectPropCodeScanType: + case EMTPObjectPropCodeDRMStatus: + { + TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ) ); + responseCode = SetMetaDataToWrapper( aDpConfig, + aPropCode, + uint16, + aObject ); + } + break; + + case EMTPExtObjectPropCodeOmaDrmStatus: + { + TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) ); + + if ( drmStatus == EMTPDrmStatusUnknown ) + { + responseCode = EMTPRespCodeAccessDenied; + } + else + { + TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); + + // there's no DB field to remember the value, so return an error + // if there's a mismatch to CAF protection status + if ( ( ( drmStatus == EMTPDrmStatusProtected ) + && ( newValue.Value() == 0 ) ) + || ( ( drmStatus == EMTPDrmStatusNotProtected ) + && ( newValue.Value() == 1 ) ) ) + { + responseCode = EMTPRespCodeAccessDenied; + } + } + } + break; + + default: + { + // Should not happen, property code should have been checked before set to store. + User::Leave( KErrNotSupported ); + } + break; + } + + PRINT( _L( "MM MTP <= CMediaMtpDataProviderPropertySettingUtility::ServiceSpecificObjectPropertyL" ) ); + + return responseCode; + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersendobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersendobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,289 +0,0 @@ -/* - * 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: Implement the operation: SendObjectInfo/SendObjectPropList/SendObject - * - */ - -#include -#include -#include -#include - -#include "cmediamtpdataprovidersendobject.h" -#include "mediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "cmmmtpdpmetadataaccesswrapper.h" -#include "mmmtpdputility.h" - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSendObject::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CMediaMtpDataProviderSendObject::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig) - { - CMediaMtpDataProviderSendObject* self = new ( ELeave ) CMediaMtpDataProviderSendObject( aFramework, aConnection, aDpConfig ); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSendObject::~CMediaMtpDataProviderSendObject -// Destructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderSendObject::~CMediaMtpDataProviderSendObject() - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSendObject::CMediaMtpDataProviderSendObject -// Standard C++ Constructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderSendObject::CMediaMtpDataProviderSendObject( - MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig) : - CSendObject(aFramework, aConnection, aDpConfig) - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSendObject::ConstructL -// 2nd Phase Constructor -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderSendObject::ConstructL() - { - CSendObject::ConstructL(); - } - -TMTPResponseCode CMediaMtpDataProviderSendObject::CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType ) - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderSendObject::CheckSepecificPropType" ) ); - TMTPResponseCode responseCode( EMTPRespCodeOK ); - - switch ( aPropCode ) - { - case EMTPObjectPropCodeArtist: // 0xDC46 - case EMTPObjectPropCodeGenre: // 0xDC8C - case EMTPObjectPropCodeParentalRating: // 0xDC94 - case EMTPObjectPropCodeComposer: // 0xDC96 - case EMTPObjectPropCodeOriginalReleaseDate: // 0xDC99 - case EMTPObjectPropCodeAlbumName: // 0xDC9A - case EMTPObjectPropCodeEncodingProfile: // 0xDEA1 - if ( aDataType != EMTPTypeString) - { - responseCode = EMTPRespCodeInvalidObjectPropFormat; - } - break; - - case EMTPObjectPropCodeDescription: - if ( aDataType != EMTPTypeAUINT16) - { - responseCode = EMTPRespCodeInvalidObjectPropFormat; - } - break; - - case EMTPObjectPropCodeTrack: // 0xDC8B - case EMTPObjectPropCodeDRMStatus: // 0xDC9D - case EMTPObjectPropCodeNumberOfChannels: // 0xDE94 - case EMTPObjectPropCodeScanType: // 0xDE97 - if ( aDataType != EMTPTypeUINT16) - { - responseCode = EMTPRespCodeInvalidObjectPropFormat; - } - break; - - //Get Data for Int32 objects - case EMTPObjectPropCodeWidth: // 0xDC87 - case EMTPObjectPropCodeHeight: // 0xDC88 - case EMTPObjectPropCodeDuration: // 0xDC89 - case EMTPObjectPropCodeUseCount: // 0xDC91 - case EMTPObjectPropCodeSampleRate: // 0xDE93 - case EMTPObjectPropCodeAudioWAVECodec: // 0xDE99 - case EMTPObjectPropCodeAudioBitRate: // 0xDE9A - case EMTPObjectPropCodeVideoFourCCCodec: // 0xDE9B - case EMTPObjectPropCodeFramesPerThousandSeconds: // 0xDE9D - case EMTPObjectPropCodeKeyFrameDistance: // 0xDE9E - if ( aDataType != EMTPTypeUINT32) - { - responseCode = EMTPRespCodeInvalidObjectPropFormat; - } - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - if ( aDataType != EMTPTypeUINT8) - { - responseCode = EMTPRespCodeInvalidObjectPropFormat; - } - break; - - default: - // It's not possible to run here. - responseCode = EMTPRespCodeInvalidObjectPropCode; - break; - - } - PRINT1( _L( "MM MTP <= CMediaMtpDataProviderSendObject::CheckSepecificPropType, responseCode = 0x%X" ), responseCode ); - return responseCode; - } - -TMTPResponseCode CMediaMtpDataProviderSendObject::SetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderSendObject::SetSpecificObjectPropertyL" ) ); - TMTPResponseCode responseCode(EMTPRespCodeOK); - - switch ( aPropCode ) - { - case EMTPObjectPropCodeArtist: - case EMTPObjectPropCodeGenre: - case EMTPObjectPropCodeComposer: - case EMTPObjectPropCodeOriginalReleaseDate: - case EMTPObjectPropCodeAlbumName: - case EMTPObjectPropCodeParentalRating: - case EMTPObjectPropCodeEncodingProfile: - { - CMTPTypeString* stringData = - CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData - - responseCode = SetMetaDataToWrapperL( aPropCode, - *stringData, - aObject ); - - CleanupStack::PopAndDestroy( stringData );// - stringData - } - break; - - case EMTPObjectPropCodeVideoBitRate: - // TODO: Does anything need to be done? - /* spec: - * Object properties that are get-only (0x00 GET) - * should accept values during object creation by - * way of the SendObjectPropList command. - */ - break; - - case EMTPObjectPropCodeDescription: - { - CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData - // aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData ); - desData->SetByDesL( aElement.ArrayL( CMTPTypeObjectPropListElement::EValue ) ); - responseCode = SetMetaDataToWrapperL( aPropCode, - *desData, - aObject ); - CleanupStack::PopAndDestroy( desData ); // - desData - } - break; - - case EMTPObjectPropCodeWidth: - case EMTPObjectPropCodeHeight: - case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: - case EMTPObjectPropCodeSampleRate: - case EMTPObjectPropCodeAudioWAVECodec: - case EMTPObjectPropCodeAudioBitRate: - case EMTPObjectPropCodeVideoFourCCCodec: - case EMTPObjectPropCodeFramesPerThousandSeconds: - case EMTPObjectPropCodeKeyFrameDistance: - { - TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) ); - responseCode = SetMetaDataToWrapperL( aPropCode, - uint32, - aObject ); - } - break; - - case EMTPObjectPropCodeTrack: - case EMTPObjectPropCodeNumberOfChannels: - case EMTPObjectPropCodeScanType: - case EMTPObjectPropCodeDRMStatus: - { - TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue ) ); - responseCode = SetMetaDataToWrapperL( aPropCode, - uint16, - aObject ); - } - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - { - TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) ); - - if ( drmStatus == EMTPDrmStatusUnknown ) - { - responseCode = EMTPRespCodeAccessDenied; - } - else - { - TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); - - // there's no DB field to remember the value, so return an error - // if there's a mismatch to CAF protection status - if ( ( ( drmStatus == EMTPDrmStatusProtected ) - && ( newValue.Value() == 0 ) ) - || ( ( drmStatus == EMTPDrmStatusNotProtected ) - && ( newValue.Value() == 1 ) ) ) - { - responseCode = EMTPRespCodeAccessDenied; - } - } - } - break; - - default: - { - PRINT( _L( "MM MTP <> Default CASE leaving CMedia...tInfo::SetSpecificObjectPropertyL" ) ); - User::Leave( KErrNotSupported ); - } - break; - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderSendObject::ServiceSpecificObjectPropertyL" ) ); - - return responseCode; - } - -// TODO: Is it necessary? -TInt CMediaMtpDataProviderSendObject::HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& aObject ) - { - PRINT( _L( "MM MTP <> CMediaMtpDataProviderSendObject::HandleSpecificWrapperError" ) ); - TInt err = aError; - - if ( ( err == KErrNotSupported ) - && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF ) - || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container ) - || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) ) - { - // do nothing, handle gracefully - // should only happens for container case where metadata field does not match in different DB - err = KErrNone; - PRINT( _L( "MM MTP <> CMediaMtpDataProviderSendObject::HandleSpecificWrapperError, gracefully dealt with error" ) ); - } - - return err; - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectproplist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,211 +0,0 @@ -/* -* 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: Implement the operation: getobjectproplist -* -*/ - - -#include -#include -#include -#include - -#include "cmediamtpdataprovidersetobjectproplist.h" -#include "mediamtpdataproviderconst.h" -#include "mmmtpdplogger.h" -#include "cmmmtpdpmetadataaccesswrapper.h" -#include "mmmtpdputility.h" - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSetObjectPropList::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -MMmRequestProcessor* CMediaMtpDataProviderSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) - { - CMediaMtpDataProviderSetObjectPropList* self = - new ( ELeave ) CMediaMtpDataProviderSetObjectPropList( aFramework, aConnection, aDpConfig ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSetObjectPropList::~CMediaMtpDataProviderSetObjectPropList -// Destructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderSetObjectPropList::~CMediaMtpDataProviderSetObjectPropList() - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSetObjectPropList::CMediaMtpDataProviderSetObjectPropList -// Standard C++ Constructor -// ----------------------------------------------------------------------------- -// -CMediaMtpDataProviderSetObjectPropList::CMediaMtpDataProviderSetObjectPropList( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CSetObjectPropList( aFramework, aConnection, aDpConfig ) - { - - } - -// ----------------------------------------------------------------------------- -// CMediaMtpDataProviderSetObjectPropList::ConstructL -// 2nd Phase Constructor -// ----------------------------------------------------------------------------- -// -void CMediaMtpDataProviderSetObjectPropList::ConstructL() - { - CSetObjectPropList::ConstructL(); - } - -TMTPResponseCode CMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL( TUint16 aPropCode, const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) - { - PRINT( _L( "MM MTP => CMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL" ) ); - TMTPResponseCode responseCode( EMTPRespCodeOK ); - - switch ( aPropCode ) - { - case EMTPObjectPropCodeArtist: - case EMTPObjectPropCodeGenre: - case EMTPObjectPropCodeComposer: - case EMTPObjectPropCodeOriginalReleaseDate: - case EMTPObjectPropCodeAlbumName: - case EMTPObjectPropCodeParentalRating: - case EMTPObjectPropCodeEncodingProfile: - { - CMTPTypeString* stringData = - CMTPTypeString::NewLC( aElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData - - responseCode = ServiceMetaDataToWrapperL( aPropCode, - *stringData, - aObject ); - - CleanupStack::PopAndDestroy( stringData );// - stringData - } - break; - - case EMTPObjectPropCodeVideoBitRate: - { - responseCode = EMTPRespCodeAccessDenied; - } - break; - - case EMTPObjectPropCodeDescription: - { - CMTPTypeArray* desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData -// aElement.GetL( CMTPTypeObjectPropListElement::EValue, *desData ); - desData->SetByDesL(aElement.ArrayL(CMTPTypeObjectPropListElement::EValue )); - responseCode = ServiceMetaDataToWrapperL( aPropCode, - *desData, - aObject ); - CleanupStack::PopAndDestroy( desData ); // - desData - } - break; - - case EMTPObjectPropCodeWidth: - case EMTPObjectPropCodeHeight: - case EMTPObjectPropCodeDuration: - case EMTPObjectPropCodeUseCount: - case EMTPObjectPropCodeSampleRate: - case EMTPObjectPropCodeAudioWAVECodec: - case EMTPObjectPropCodeAudioBitRate: - case EMTPObjectPropCodeVideoFourCCCodec: - case EMTPObjectPropCodeFramesPerThousandSeconds: - case EMTPObjectPropCodeKeyFrameDistance: - { - TMTPTypeUint32 uint32( aElement.Uint32L( CMTPTypeObjectPropListElement::EValue ) ); - responseCode = ServiceMetaDataToWrapperL( aPropCode, - uint32, - aObject ); - } - break; - - case EMTPObjectPropCodeTrack: - case EMTPObjectPropCodeNumberOfChannels: - case EMTPObjectPropCodeScanType: - case EMTPObjectPropCodeDRMStatus: - { - TMTPTypeUint16 uint16( aElement.Uint16L( CMTPTypeObjectPropListElement::EValue )); - responseCode = ServiceMetaDataToWrapperL( aPropCode, - uint16, - aObject ); - } - break; - - case EMTPExtObjectPropCodeOmaDrmStatus: - { - TInt drmStatus = MmMtpDpUtility::GetDrmStatus( aObject.DesC( CMTPObjectMetaData::ESuid ) ); - - if (drmStatus == EMTPDrmStatusUnknown) - { - responseCode = EMTPRespCodeAccessDenied; - } - else - { - TMTPTypeUint8 newValue( aElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); - - // there's no DB field to remember the value, so return an error - // if there's a mismatch to CAF protection status - if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( newValue.Value() == 0 ) ) || - ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) ) - { - responseCode = EMTPRespCodeAccessDenied; - } - } - } - break; - - default: - { - User::Leave( KErrNotSupported ); - } - break; - } - - PRINT( _L( "MM MTP <= CMediaMtpDataProviderSetObjectPropList::ServiceSpecificObjectPropertyL" ) ); - - return responseCode; - } - -TInt CMediaMtpDataProviderSetObjectPropList::HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& aObject) - { - TInt err = aError; - - if ( ( err == KErrNotSupported ) - && ( ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeASF ) - || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeMP4Container ) - || ( aObject.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCode3GPContainer ) ) ) - { - // do nothing, handle gracefully - // should only happens for container case where metadata field does not match in different DB - err = KErrNone; - PRINT( _L( "MM MTP <> CMediaMtpDataProviderSetObjectPropList::HandleSpecificWrapperError, gracefully dealt with error" ) ); - } - - return err; - } - -// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectpropvalue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/cmediamtpdataprovidersetobjectpropvalue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include #include @@ -54,7 +53,7 @@ // void CMediaMtpDataProviderSetObjectPropValue::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -65,9 +64,9 @@ CMediaMtpDataProviderSetObjectPropValue::CMediaMtpDataProviderSetObjectPropValue( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CSetObjectPropValue( aFramework, aConnection, aDpConfig ) + CSetObjectPropValue( aFramework, aConnection, aDpConfig ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -77,7 +76,7 @@ // CMediaMtpDataProviderSetObjectPropValue::~CMediaMtpDataProviderSetObjectPropValue() { - + // Do nothing } TBool CMediaMtpDataProviderSetObjectPropValue::IsSpecificPropCodeReadOnly( TUint16 aPropCode ) const @@ -132,7 +131,6 @@ case EMTPObjectPropCodeWidth: // 0xDC87 case EMTPObjectPropCodeHeight: // 0xDC88 case EMTPObjectPropCodeDuration: // 0xDC89 - case EMTPObjectPropCodeUseCount: // 0xDC91 case EMTPObjectPropCodeSampleRate: // 0xDE93 case EMTPObjectPropCodeAudioWAVECodec: // 0xDE99 case EMTPObjectPropCodeAudioBitRate: // 0xDE9A @@ -185,7 +183,6 @@ case EMTPObjectPropCodeWidth: //0xDC87 case EMTPObjectPropCodeHeight: //0xDC88 case EMTPObjectPropCodeDuration: //0xDC89 - case EMTPObjectPropCodeUseCount: //0xDC91 case EMTPObjectPropCodeSampleRate: //0xDE93 case EMTPObjectPropCodeAudioWAVECodec: //0xDE99 case EMTPObjectPropCodeAudioBitRate: //0xDE9A @@ -221,12 +218,10 @@ } else { - TMTPTypeUint8 newValue( iMTPTypeUint8 ); - // there's no DB field to remember the value, so return an error // if there's a mismatch to CAF protection status - if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( newValue.Value() == 0 ) ) || - ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( newValue.Value() == 1 ) ) ) + if ( ( ( drmStatus == EMTPDrmStatusProtected) && ( iMTPTypeUint8.Value() == 0 ) ) || + ( ( drmStatus == EMTPDrmStatusNotProtected ) && ( iMTPTypeUint8.Value() == 1 ) ) ) { responseCode = EMTPRespCodeAccessDenied; } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataprovidercontrollerimp.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataprovidercontrollerimp.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataprovidercontrollerimp.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -26,7 +26,7 @@ // static const TImplementationProxy ImplementationTable[] = { - {{0x10207C4B}, (TProxyNewLPtr) ( CMediaMtpDataProvider::NewL )} + { { 0x10207C4B }, ( TProxyNewLPtr ) ( CMediaMtpDataProvider::NewL ) } }; // ----------------------------------------------------------------------------- @@ -36,7 +36,7 @@ EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); return ImplementationTable; } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataproviderprocessor.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataproviderprocessor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/mediamtpdataprovider/src/mediamtpdataproviderprocessor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,54 +18,51 @@ #include -//Include the standard request processor headers #include "crequestunknown.h" - #include "mediamtpdataproviderprocessor.h" +#include "mmmtpdplogger.h" //Include the required header for carrying out the specified request -#include "mmmtpdplogger.h" - #include "cgetobjectpropssupported.h" -#include "cmediamtpdataprovidergetobjectpropdesc.h" -#include "cmediamtpdataprovidergetinterdependentpropdesc.h" +#include "cgetobjectpropdesc.h" +#include "cgetinterdependentpropdesc.h" #include "cgetobject.h" #include "cgetobjectinfo.h" #include "cmediamtpdataprovidergetobjectpropvalue.h" #include "cmediamtpdataprovidergetobjectproplist.h" -#include "cmediamtpdataprovidersendobject.h" +#include "csendobject.h" #include "cmediamtpdataprovidersetobjectpropvalue.h" -#include "cmediamtpdataprovidersetobjectproplist.h" +#include "csetobjectproplist.h" #include "cgetobjectreferences.h" #include "csetobjectreferences.h" #include "cdeleteobject.h" #include "cmediamtpdataprovidercopyobject.h" #include "cmediamtpdataprovidermoveobject.h" #include "cgetpartialobject.h" -#include "cmediamtpdataprovidergetformatcapabilities.h" +#include "cgetformatcapabilities.h" /** A mapping table from the operation code to the request processor factory method */ const TMediaMtpDataProviderRequestProcessorEntry KKMediaMtpDataProviderRequestProcessorTable[] = { - {EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL}, //Get Supported Props - {EMTPOpCodeGetObjectPropDesc, CMediaMtpDataProviderGetObjectPropDesc::NewL}, //Get Props Description - {EMTPOpCodeGetInterdependentPropDesc, CMediaMtpDataProviderGetInterDependentPropDesc::NewL},//Get Interdependent PropDesc - {EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL}, //GetObjectInfo - {EMTPOpCodeGetObject, CGetObject::NewL}, //GetObject - {EMTPOpCodeGetObjectPropValue, CMediaMtpDataProviderGetObjectPropValue::NewL}, //Get Props Value - {EMTPOpCodeGetObjectPropList, CMediaMtpDataProviderGetObjectPropList::NewL}, //GetObjectPropList - {EMTPOpCodeSendObjectInfo, CMediaMtpDataProviderSendObject::NewL}, //SendObjectInfo (routed to SendObject) - {EMTPOpCodeSendObject, CMediaMtpDataProviderSendObject::NewL}, //SendObject - {EMTPOpCodeSendObjectPropList, CMediaMtpDataProviderSendObject::NewL}, // SendobjectPropList (routed to SendObject) - {EMTPOpCodeSetObjectPropValue, CMediaMtpDataProviderSetObjectPropValue::NewL}, //Set Props Value - {EMTPOpCodeSetObjectPropList, CMediaMtpDataProviderSetObjectPropList::NewL}, //SetObjectPropList - {EMTPOpCodeDeleteObject, CDeleteObject::NewL}, //DeleteObject - {EMTPOpCodeCopyObject, CMediaMtpDataProviderCopyObject::NewL}, // Copy Object - {EMTPOpCodeMoveObject, CMediaMtpDataProviderMoveObject::NewL}, // Move Object - {EMTPOpCodeGetPartialObject, CGetPartialObject::NewL}, // GetPartialObject - {EMTPOpCodeSetObjectReferences, CSetObjectReferences::NewL}, //Set Object References - {EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL}, //Get Object References - {EMTPOpCodeGetFormatCapabilities, CMediaMtpDataProviderGetFormatCapabilities::NewL} // GetFormatCapabilities + { EMTPOpCodeGetObjectPropsSupported, CGetObjectPropsSupported::NewL }, //Get Supported Props + { EMTPOpCodeGetObjectPropDesc, CGetObjectPropDesc::NewL }, //Get Props Description + { EMTPOpCodeGetInterdependentPropDesc, CGetInterdependentPropDesc::NewL },//Get Interdependent PropDesc + { EMTPOpCodeGetObjectInfo, CGetObjectInfo::NewL }, //GetObjectInfo + { EMTPOpCodeGetObject, CGetObject::NewL }, //GetObject + { EMTPOpCodeGetObjectPropValue, CMediaMtpDataProviderGetObjectPropValue::NewL }, //Get Props Value + { EMTPOpCodeGetObjectPropList, CMediaMtpDataProviderGetObjectPropList::NewL }, //GetObjectPropList + { EMTPOpCodeSendObjectInfo, CSendObject::NewL }, //SendObjectInfo (routed to SendObject) + { EMTPOpCodeSendObject, CSendObject::NewL }, //SendObject + { EMTPOpCodeSendObjectPropList, CSendObject::NewL }, // SendobjectPropList (routed to SendObject) + { EMTPOpCodeSetObjectPropValue, CMediaMtpDataProviderSetObjectPropValue::NewL }, //Set Props Value + { EMTPOpCodeSetObjectPropList, CSetObjectPropList::NewL }, //SetObjectPropList + { EMTPOpCodeDeleteObject, CDeleteObject::NewL }, //DeleteObject + { EMTPOpCodeCopyObject, CMediaMtpDataProviderCopyObject::NewL }, // Copy Object + { EMTPOpCodeMoveObject, CMediaMtpDataProviderMoveObject::NewL }, // Move Object + { EMTPOpCodeGetPartialObject, CGetPartialObject::NewL }, // GetPartialObject + { EMTPOpCodeSetObjectReferences, CSetObjectReferences::NewL }, //Set Object References + { EMTPOpCodeGetObjectReferences, CGetObjectReferences::NewL }, //Get Object References + { EMTPOpCodeGetFormatCapabilities, CGetFormatCapabilities::NewL } // GetFormatCapabilities }; // ----------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def Wed Jun 23 17:51:16 2010 +0100 @@ -3,152 +3,148 @@ ?DoHandleResponsePhaseL@CSetObjectPropValue@@MAEHXZ @ 2 NONAME ; int CSetObjectPropValue::DoHandleResponsePhaseL(void) ?NewL@CDeleteObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 3 NONAME ; class MMmRequestProcessor * CDeleteObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) ?StartL@CRenameObject@@QAEXKABVTDesC16@@@Z @ 4 NONAME ; void CRenameObject::StartL(unsigned long, class TDesC16 const &) - ?ConstructL@CGetObjectPropDesc@@IAEXXZ @ 5 NONAME ; void CGetObjectPropDesc::ConstructL(void) - ??1CRequestUnknown@@UAE@XZ @ 6 NONAME ; CRequestUnknown::~CRequestUnknown(void) - ?Release@CRequestProcessor@@MAEXXZ @ 7 NONAME ; void CRequestProcessor::Release(void) - ?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 8 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase) - ?OpenSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 9 NONAME ; void CMmMtpDpAccessSingleton::OpenSessionL(void) - ?ServiceL@CGetPartialObject@@MAEXXZ @ 10 NONAME ; void CGetPartialObject::ServiceL(void) - ??0CGetObjectInfo@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 11 NONAME ; CGetObjectInfo::CGetObjectInfo(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?DoHandleResponsePhaseL@CRequestProcessor@@MAEHXZ @ 12 NONAME ; int CRequestProcessor::DoHandleResponsePhaseL(void) - ?RunError@CCopyObject@@MAEHH@Z @ 13 NONAME ; int CCopyObject::RunError(int) - ??0CGetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 14 NONAME ; CGetObjectPropValue::CGetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?ServiceMetaDataToWrapper@CCopyObject@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 15 NONAME ; enum TMTPResponseCode CCopyObject::ServiceMetaDataToWrapper(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ?RunL@CRequestProcessor@@MAEXXZ @ 16 NONAME ; void CRequestProcessor::RunL(void) - ?ServiceL@CDeleteObject@@MAEXXZ @ 17 NONAME ; void CDeleteObject::ServiceL(void) - ?DoCancel@CSetObjectPropList@@MAEXXZ @ 18 NONAME ; void CSetObjectPropList::DoCancel(void) - ?CleanupDatabaseL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 19 NONAME ; void CMmMtpDpMetadataAccessWrapper::CleanupDatabaseL(void) - ?ServiceL@CGetObjectPropsSupported@@MAEXXZ @ 20 NONAME ; void CGetObjectPropsSupported::ServiceL(void) - ?NewL@CSetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 21 NONAME ; class MMmRequestProcessor * CSetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?ServiceMetaDataToWrapperL@CSetObjectPropList@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 22 NONAME ; enum TMTPResponseCode CSetObjectPropList::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ??0CGetObjectPropDesc@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 23 NONAME ; CGetObjectPropDesc::CGetObjectPropDesc(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 24 NONAME ; void CMmMtpDpAccessSingleton::Release(void) - ?UsbDisconnect@CSendObject@@MAEXXZ @ 25 NONAME ; void CSendObject::UsbDisconnect(void) - ?DoSetObjectReferencesL@CSetObjectReferences@@MAEXAAVCMmMtpDpMetadataAccessWrapper@@GABVTDesC16@@AAVCDesC16Array@@@Z @ 26 NONAME ; void CSetObjectReferences::DoSetObjectReferencesL(class CMmMtpDpMetadataAccessWrapper &, unsigned short, class TDesC16 const &, class CDesC16Array &) - ?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 27 NONAME ; void CGetFormatCapabilities::ServiceL(void) - ?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVCDesC16Array@@@Z @ 28 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMPXMedia *, class CDesC16Array &) - ??1CSetObjectPropList@@UAE@XZ @ 29 NONAME ; CSetObjectPropList::~CSetObjectPropList(void) - ?ServiceL@CSetObjectPropList@@MAEXXZ @ 30 NONAME ; void CSetObjectPropList::ServiceL(void) - ??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 31 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ??0CRequestUnknown@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 32 NONAME ; CRequestUnknown::CRequestUnknown(class MMTPDataProviderFramework &, class MMTPConnection &) - ?ConstructL@CGetObjectPropList@@IAEXXZ @ 33 NONAME ; void CGetObjectPropList::ConstructL(void) - ??1CSendObject@@UAE@XZ @ 34 NONAME ; CSendObject::~CSendObject(void) - ?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 35 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 36 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ??1CGetObjectPropValue@@UAE@XZ @ 37 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void) - ??1CGetFormatCapabilities@@UAE@XZ @ 38 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void) - ?SetMetaDataToWrapperL@CSendObject@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 39 NONAME ; enum TMTPResponseCode CSendObject::SetMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ?ServiceL@CSetObjectReferences@@EAEXXZ @ 40 NONAME ; void CSetObjectReferences::ServiceL(void) - ?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 41 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void) - ??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 42 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?ConstructL@CCopyObject@@IAEXXZ @ 43 NONAME ; void CCopyObject::ConstructL(void) - ?ServiceL@CGetObjectPropValue@@MAEXXZ @ 44 NONAME ; void CGetObjectPropValue::ServiceL(void) - ??1CRenameObject@@UAE@XZ @ 45 NONAME ; CRenameObject::~CRenameObject(void) - ?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 46 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const - ?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 47 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void) - ?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 48 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &) - ?RunL@CRenameObject@@MAEXXZ @ 49 NONAME ; void CRenameObject::RunL(void) - ??0CSendObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 50 NONAME ; CSendObject::CSendObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ??0CSetObjectReferences@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 51 NONAME ; CSetObjectReferences::CSetObjectReferences(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 52 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *) - ?ServiceL@CSendObject@@MAEXXZ @ 53 NONAME ; void CSendObject::ServiceL(void) - ?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 54 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const - ?CreateL@CMmMtpDpAccessSingleton@@SAXAAVRFs@@AAVMMTPDataProviderFramework@@@Z @ 55 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class RFs &, class MMTPDataProviderFramework &) - ?ServiceMetaDataToWrapper@CMoveObject@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 56 NONAME ; enum TMTPResponseCode CMoveObject::ServiceMetaDataToWrapper(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 57 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void) - ?DoCancel@CRequestProcessor@@MAEXXZ @ 58 NONAME ; void CRequestProcessor::DoCancel(void) - ?ConstructL@CSetObjectPropList@@IAEXXZ @ 59 NONAME ; void CSetObjectPropList::ConstructL(void) - ?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 60 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &) - ?ConstructL@CGetObjectInfo@@AAEXXZ @ 61 NONAME ; void CGetObjectInfo::ConstructL(void) - ?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 62 NONAME ; void CRequestProcessor::UsbDisconnect(void) - ?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 63 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(void) - ??1CMoveObject@@UAE@XZ @ 64 NONAME ; CMoveObject::~CMoveObject(void) - ?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 65 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void) - ??1CRequestProcessor@@MAE@XZ @ 66 NONAME ; CRequestProcessor::~CRequestProcessor(void) - ?DoCancel@CDeleteObject@@MAEXXZ @ 67 NONAME ; void CDeleteObject::DoCancel(void) - ?RunL@CMoveObject@@MAEXXZ @ 68 NONAME ; void CMoveObject::RunL(void) - ??1CGetObject@@UAE@XZ @ 69 NONAME ; CGetObject::~CGetObject(void) - ?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 70 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void) - ?GetPlaylistNameL@CMmMtpDpMetadataAccessWrapper@@QAEXPAVCMPXMedia@@AAVTDes16@@@Z @ 71 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetPlaylistNameL(class CMPXMedia *, class TDes16 &) - ?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 72 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void) - ??1CGetObjectPropsSupported@@UAE@XZ @ 73 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void) - ?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 74 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void) - ?HasDataphase@CRequestProcessor@@MBEHXZ @ 75 NONAME ; int CRequestProcessor::HasDataphase(void) const - ?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 76 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 77 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const - ??1CGetPartialObject@@UAE@XZ @ 78 NONAME ; CGetPartialObject::~CGetPartialObject(void) - ?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 79 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?RunError@CSetObjectPropList@@MAEHH@Z @ 80 NONAME ; int CSetObjectPropList::RunError(int) - ?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 81 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const - ?ServiceL@CMoveObject@@MAEXXZ @ 82 NONAME ; void CMoveObject::ServiceL(void) - ?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 83 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &) - ?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 84 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void) - ?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 85 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void) - ?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 86 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 87 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &) - ?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 88 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void) - ?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 89 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const - ??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 90 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 91 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void) - ?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 92 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *) - ??0CGetPartialObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 93 NONAME ; CGetPartialObject::CGetPartialObject(class MMTPDataProviderFramework &, class MMTPConnection &) - ?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 94 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void) - ??0CSetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 95 NONAME ; CSetObjectPropList::CSetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 96 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &) - ?IsVideoL@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 97 NONAME ; int MmMtpDpUtility::IsVideoL(class TDesC16 const &) - ??1CGetObjectInfo@@UAE@XZ @ 98 NONAME ; CGetObjectInfo::~CGetObjectInfo(void) - ?ServiceL@CRequestUnknown@@MAEXXZ @ 99 NONAME ; void CRequestUnknown::ServiceL(void) - ?HasDataphase@CSetObjectPropList@@MBEHXZ @ 100 NONAME ; int CSetObjectPropList::HasDataphase(void) const - ?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 101 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?ConstructL@CGetFormatCapabilities@@IAEXXZ @ 102 NONAME ; void CGetFormatCapabilities::ConstructL(void) - ?DoCancel@CRenameObject@@MAEXXZ @ 103 NONAME ; void CRenameObject::DoCancel(void) - ??0CGetFormatCapabilities@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 104 NONAME ; CGetFormatCapabilities::CGetFormatCapabilities(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ??1CSetObjectReferences@@UAE@XZ @ 105 NONAME ; CSetObjectReferences::~CSetObjectReferences(void) - ?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 106 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const - ??1CCopyObject@@UAE@XZ @ 107 NONAME ; CCopyObject::~CCopyObject(void) - ?RunError@CMoveObject@@MAEHH@Z @ 108 NONAME ; int CMoveObject::RunError(int) - ?ConstructL@CSendObject@@IAEXXZ @ 109 NONAME ; void CSendObject::ConstructL(void) - ?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 110 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &) - ?RunL@CGetObjectPropList@@MAEXXZ @ 111 NONAME ; void CGetObjectPropList::RunL(void) - ?RunL@CCopyObject@@MAEXXZ @ 112 NONAME ; void CCopyObject::RunL(void) - ?RunError@CRequestProcessor@@MAEHH@Z @ 113 NONAME ; int CRequestProcessor::RunError(int) - ?SessionId@CRequestProcessor@@MAEKXZ @ 114 NONAME ; unsigned long CRequestProcessor::SessionId(void) - ?SetPlaylistL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAVCDesC16Array@@@Z @ 115 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetPlaylistL(class TDesC16 const &, class CDesC16Array &) - ?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 116 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &) - ?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 117 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?HasDataphase@CSetObjectReferences@@EBEHXZ @ 118 NONAME ; int CSetObjectReferences::HasDataphase(void) const - ?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@0@Z @ 119 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class TDesC16 const &, class TDesC16 const &) - ?RunError@CGetObjectPropList@@MAEHH@Z @ 120 NONAME ; int CGetObjectPropList::RunError(int) - ?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 121 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void) - ??0CDeleteObject@@AAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 122 NONAME ; CDeleteObject::CDeleteObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ?GetAllPlaylistL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@PAPAVCMPXMediaArray@@@Z @ 123 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllPlaylistL(class TDesC16 const &, class CMPXMediaArray * *) - ?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 124 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &) - ?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 125 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) - ?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 126 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &) - ??1CGetObjectPropDesc@@UAE@XZ @ 127 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void) - ?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 128 NONAME ; void CGetObjectPropDesc::ServiceL(void) - ?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 129 NONAME ; int CSetObjectPropValue::HasDataphase(void) const - ?ServiceL@CCopyObject@@MAEXXZ @ 130 NONAME ; void CCopyObject::ServiceL(void) - ?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 131 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void) - ?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 132 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void) - ?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 133 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &) - ?ConstructL@CMoveObject@@IAEXXZ @ 134 NONAME ; void CMoveObject::ConstructL(void) - ?RunL@CSetObjectPropList@@MAEXXZ @ 135 NONAME ; void CSetObjectPropList::RunL(void) - ??1CGetObjectReferences@@UAE@XZ @ 136 NONAME ; CGetObjectReferences::~CGetObjectReferences(void) - ?HasDataphase@CSendObject@@MBEHXZ @ 137 NONAME ; int CSendObject::HasDataphase(void) const - ??1CSetObjectPropValue@@UAE@XZ @ 138 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void) - ?ConstructL@CRenameObject@@IAEXXZ @ 139 NONAME ; void CRenameObject::ConstructL(void) - ?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 140 NONAME ; int CSendObject::DoHandleResponsePhaseL(void) - ?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 141 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &) - ?DoCancel@CGetObjectPropList@@MAEXXZ @ 142 NONAME ; void CGetObjectPropList::DoCancel(void) - ?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 143 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void) - ?ServiceL@CSetObjectPropValue@@MAEXXZ @ 144 NONAME ; void CSetObjectPropValue::ServiceL(void) - ?RunError@CRenameObject@@MAEHH@Z @ 145 NONAME ; int CRenameObject::RunError(int) - ??1CDeleteObject@@UAE@XZ @ 146 NONAME ; CDeleteObject::~CDeleteObject(void) - ?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 147 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void) - ?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 148 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void) - ??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 149 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) - ??1CGetObjectPropList@@UAE@XZ @ 150 NONAME ; CGetObjectPropList::~CGetObjectPropList(void) - ?ServiceL@CGetObjectPropList@@MAEXXZ @ 151 NONAME ; void CGetObjectPropList::ServiceL(void) - ??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 152 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &) + ??1CRequestUnknown@@UAE@XZ @ 5 NONAME ; CRequestUnknown::~CRequestUnknown(void) + ?DeleteObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@@Z @ 6 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteObjectL(class CMTPObjectMetaData const &) + ?UpdateMusicCollectionL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 7 NONAME ; void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL(class TDesC16 const &) + ?Release@CRequestProcessor@@MAEXXZ @ 8 NONAME ; void CRequestProcessor::Release(void) + ?HandleRequestL@CRequestProcessor@@MAEHABVTMTPTypeRequest@@W4TMTPTransactionPhase@@@Z @ 9 NONAME ; int CRequestProcessor::HandleRequestL(class TMTPTypeRequest const &, enum TMTPTransactionPhase) + ??1CGetInterdependentPropDesc@@UAE@XZ @ 10 NONAME ; CGetInterdependentPropDesc::~CGetInterdependentPropDesc(void) + ?OpenSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 11 NONAME ; void CMmMtpDpAccessSingleton::OpenSessionL(void) + ?ServiceL@CGetPartialObject@@MAEXXZ @ 12 NONAME ; void CGetPartialObject::ServiceL(void) + ?DoHandleResponsePhaseL@CRequestProcessor@@MAEHXZ @ 13 NONAME ; int CRequestProcessor::DoHandleResponsePhaseL(void) + ?NewL@CGetObjectPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 14 NONAME ; class MMmRequestProcessor * CGetObjectPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ??0CGetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 15 NONAME ; CGetObjectPropValue::CGetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?CheckRequestL@CSetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 16 NONAME ; enum TMTPResponseCode CSetObjectPropList::CheckRequestL(void) + ?RunL@CRequestProcessor@@MAEXXZ @ 17 NONAME ; void CRequestProcessor::RunL(void) + ?ServiceL@CDeleteObject@@MAEXXZ @ 18 NONAME ; void CDeleteObject::ServiceL(void) + ?DoCancel@CSetObjectPropList@@MAEXXZ @ 19 NONAME ; void CSetObjectPropList::DoCancel(void) + ?CleanupDatabaseL@CMmMtpDpMetadataAccessWrapper@@QAEXXZ @ 20 NONAME ; void CMmMtpDpMetadataAccessWrapper::CleanupDatabaseL(void) + ?ServiceL@CGetObjectPropsSupported@@MAEXXZ @ 21 NONAME ; void CGetObjectPropsSupported::ServiceL(void) + ?NewL@CSetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 22 NONAME ; class MMmRequestProcessor * CSetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?Release@CMmMtpDpAccessSingleton@@SAXXZ @ 23 NONAME ; void CMmMtpDpAccessSingleton::Release(void) + ?UsbDisconnect@CSendObject@@MAEXXZ @ 24 NONAME ; void CSendObject::UsbDisconnect(void) + ?ServiceL@CGetFormatCapabilities@@MAEXXZ @ 25 NONAME ; void CGetFormatCapabilities::ServiceL(void) + ??1CSetObjectPropList@@UAE@XZ @ 26 NONAME ; CSetObjectPropList::~CSetObjectPropList(void) + ?ServiceL@CSetObjectPropList@@MAEXXZ @ 27 NONAME ; void CSetObjectPropList::ServiceL(void) + ??0CMoveObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 28 NONAME ; CMoveObject::CMoveObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?ConstructL@CGetObjectPropList@@IAEXXZ @ 29 NONAME ; void CGetObjectPropList::ConstructL(void) + ??1CSendObject@@UAE@XZ @ 30 NONAME ; CSendObject::~CSendObject(void) + ?ServiceMetaDataFromWrapperL@CGetObjectPropValue@@IAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 31 NONAME ; void CGetObjectPropValue::ServiceMetaDataFromWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) + ?NewL@CGetObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 32 NONAME ; class MMmRequestProcessor * CGetObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ??1CGetObjectPropValue@@UAE@XZ @ 33 NONAME ; CGetObjectPropValue::~CGetObjectPropValue(void) + ?ActiveToIdleStatusChange@CMmMtpDpAccessSingleton@@SAXXZ @ 34 NONAME ; void CMmMtpDpAccessSingleton::ActiveToIdleStatusChange(void) + ?CreateL@CMmMtpDpAccessSingleton@@SAXAAVMMTPDataProviderFramework@@@Z @ 35 NONAME ; void CMmMtpDpAccessSingleton::CreateL(class MMTPDataProviderFramework &) + ??1CGetFormatCapabilities@@UAE@XZ @ 36 NONAME ; CGetFormatCapabilities::~CGetFormatCapabilities(void) + ?ServiceL@CSetObjectReferences@@EAEXXZ @ 37 NONAME ; void CSetObjectReferences::ServiceL(void) + ?DoHandleDataIToRPhaseL@CRequestProcessor@@MAEHXZ @ 38 NONAME ; int CRequestProcessor::DoHandleDataIToRPhaseL(void) + ??0CGetObjectPropList@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 39 NONAME ; CGetObjectPropList::CGetObjectPropList(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?ConstructL@CCopyObject@@IAEXXZ @ 40 NONAME ; void CCopyObject::ConstructL(void) + ?SetMetaDataToWrapper@CPropertySettingUtility@@QAE?AW4TMTPResponseCode@@AAVMMmMtpDpConfig@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 41 NONAME ; enum TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapper(class MMmMtpDpConfig &, unsigned short, class MMTPType &, class CMTPObjectMetaData const &) + ?ServiceL@CGetObjectPropValue@@MAEXXZ @ 42 NONAME ; void CGetObjectPropValue::ServiceL(void) + ??1CRenameObject@@UAE@XZ @ 43 NONAME ; CRenameObject::~CRenameObject(void) + ?Match@CRequestProcessor@@MBEHABVTMTPTypeEvent@@AAVMMTPConnection@@@Z @ 44 NONAME ; int CRequestProcessor::Match(class TMTPTypeEvent const &, class MMTPConnection &) const + ?DoHandleCompletingPhaseL@CSendObject@@MAEHXZ @ 45 NONAME ; int CSendObject::DoHandleCompletingPhaseL(void) + ?GetDrmStatus@MmMtpDpUtility@@SAHABVTDesC16@@@Z @ 46 NONAME ; int MmMtpDpUtility::GetDrmStatus(class TDesC16 const &) + ?RunL@CRenameObject@@MAEXXZ @ 47 NONAME ; void CRenameObject::RunL(void) + ?SetPSStatus@MmMtpDpUtility@@SAXW4TMtpPSStatus@@@Z @ 48 NONAME ; void MmMtpDpUtility::SetPSStatus(enum TMtpPSStatus) + ??0CRequestProcessor@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@HPBUTMTPRequestElementInfo@@@Z @ 49 NONAME ; CRequestProcessor::CRequestProcessor(class MMTPDataProviderFramework &, class MMTPConnection &, int, struct TMTPRequestElementInfo const *) + ?ServiceL@CSendObject@@MAEXXZ @ 50 NONAME ; void CSendObject::ServiceL(void) + ?Request@CRequestProcessor@@MBEABVTMTPTypeRequest@@XZ @ 51 NONAME ; class TMTPTypeRequest const & CRequestProcessor::Request(void) const + ?CheckRequestL@CGetPartialObject@@MAE?AW4TMTPResponseCode@@XZ @ 52 NONAME ; enum TMTPResponseCode CGetPartialObject::CheckRequestL(void) + ?DoCancel@CRequestProcessor@@MAEXXZ @ 53 NONAME ; void CRequestProcessor::DoCancel(void) + ?NewL@CRequestUnknown@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@@Z @ 54 NONAME ; class MMmRequestProcessor * CRequestUnknown::NewL(class MMTPDataProviderFramework &, class MMTPConnection &) + ?ConstructL@CGetObjectInfo@@AAEXXZ @ 55 NONAME ; void CGetObjectInfo::ConstructL(void) + ?UsbDisconnect@CRequestProcessor@@MAEXXZ @ 56 NONAME ; void CRequestProcessor::UsbDisconnect(void) + ??1CMoveObject@@UAE@XZ @ 57 NONAME ; CMoveObject::~CMoveObject(void) + ?CheckRequestL@CSendObject@@MAE?AW4TMTPResponseCode@@XZ @ 58 NONAME ; enum TMTPResponseCode CSendObject::CheckRequestL(void) + ??1CRequestProcessor@@MAE@XZ @ 59 NONAME ; CRequestProcessor::~CRequestProcessor(void) + ?DoCancel@CDeleteObject@@MAEXXZ @ 60 NONAME ; void CDeleteObject::DoCancel(void) + ??1CGetObject@@UAE@XZ @ 61 NONAME ; CGetObject::~CGetObject(void) + ?NewL@CGetInterdependentPropDesc@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 62 NONAME ; class MMmRequestProcessor * CGetInterdependentPropDesc::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?AddObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@@Z @ 63 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddObjectL(class CMTPObjectMetaData const &) + ?DoHandleResponsePhaseL@CSetObjectReferences@@EAEHXZ @ 64 NONAME ; int CSetObjectReferences::DoHandleResponsePhaseL(void) + ?GetAccessWrapperL@CMmMtpDpAccessSingleton@@SAAAVCMmMtpDpMetadataAccessWrapper@@XZ @ 65 NONAME ; class CMmMtpDpMetadataAccessWrapper & CMmMtpDpAccessSingleton::GetAccessWrapperL(void) + ??1CGetObjectPropsSupported@@UAE@XZ @ 66 NONAME ; CGetObjectPropsSupported::~CGetObjectPropsSupported(void) + ?CheckRequestL@CGetObjectPropList@@MAE?AW4TMTPResponseCode@@XZ @ 67 NONAME ; enum TMTPResponseCode CGetObjectPropList::CheckRequestL(void) + ?HasDataphase@CRequestProcessor@@MBEHXZ @ 68 NONAME ; int CRequestProcessor::HasDataphase(void) const + ?NewL@CGetObjectPropsSupported@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 69 NONAME ; class MMmRequestProcessor * CGetObjectPropsSupported::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?Connection@CRequestProcessor@@MBEAAVMMTPConnection@@XZ @ 70 NONAME ; class MMTPConnection & CRequestProcessor::Connection(void) const + ??1CPropertySettingUtility@@UAE@XZ @ 71 NONAME ; CPropertySettingUtility::~CPropertySettingUtility(void) + ??1CGetPartialObject@@UAE@XZ @ 72 NONAME ; CGetPartialObject::~CGetPartialObject(void) + ?NewL@CGetObjectInfo@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 73 NONAME ; class MMmRequestProcessor * CGetObjectInfo::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?RunError@CSetObjectPropList@@MAEHH@Z @ 74 NONAME ; int CSetObjectPropList::RunError(int) + ?CheckRequestL@CGetInterdependentPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 75 NONAME ; enum TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL(void) + ?Match@CRequestUnknown@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 76 NONAME ; int CRequestUnknown::Match(class TMTPTypeRequest const &, class MMTPConnection &) const + ?ServiceL@CMoveObject@@MAEXXZ @ 77 NONAME ; void CMoveObject::ServiceL(void) + ?CreateDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 78 NONAME ; void CMmMtpDpMetadataAccessWrapper::CreateDummyFile(class TDesC16 const &) + ?CheckRequestL@CGetObjectPropDesc@@MAE?AW4TMTPResponseCode@@XZ @ 79 NONAME ; enum TMTPResponseCode CGetObjectPropDesc::CheckRequestL(void) + ?DoHandleRToIPhaseL@CRequestProcessor@@MAEHXZ @ 80 NONAME ; int CRequestProcessor::DoHandleRToIPhaseL(void) + ?ServiceMetaDataToWrapperL@CSetObjectPropValue@@IAE?AW4TMTPResponseCode@@GAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 81 NONAME ; enum TMTPResponseCode CSetObjectPropValue::ServiceMetaDataToWrapperL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) + ?FormatFromFilename@MmMtpDpUtility@@SA?AW4TMTPFormatCode@@ABVTDesC16@@@Z @ 82 NONAME ; enum TMTPFormatCode MmMtpDpUtility::FormatFromFilename(class TDesC16 const &) + ?GetAllReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@AAVCDesC16Array@@@Z @ 83 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL(class CMTPObjectMetaData const &, class CDesC16Array &) + ?CheckRequestL@CSetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 84 NONAME ; enum TMTPResponseCode CSetObjectPropValue::CheckRequestL(void) + ??0CPropertySettingUtility@@IAE@XZ @ 85 NONAME ; CPropertySettingUtility::CPropertySettingUtility(void) + ?Match@CRequestProcessor@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 86 NONAME ; int CRequestProcessor::Match(class TMTPTypeRequest const &, class MMTPConnection &) const + ??0CCopyObject@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 87 NONAME ; CCopyObject::CCopyObject(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?CheckRequestL@CRequestProcessor@@MAE?AW4TMTPResponseCode@@XZ @ 88 NONAME ; enum TMTPResponseCode CRequestProcessor::CheckRequestL(void) + ?SendResponseL@CRequestProcessor@@IAEXW4TMTPResponseCode@@HPAK@Z @ 89 NONAME ; void CRequestProcessor::SendResponseL(enum TMTPResponseCode, int, unsigned long *) + ?CancelActiveToIdleStatusChange@CMmMtpDpAccessSingleton@@SAXXZ @ 90 NONAME ; void CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(void) + ?DoHandleCompletingPhaseL@CRequestProcessor@@MAEHXZ @ 91 NONAME ; int CRequestProcessor::DoHandleCompletingPhaseL(void) + ?DeleteDummyFile@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 92 NONAME ; void CMmMtpDpMetadataAccessWrapper::DeleteDummyFile(class TDesC16 const &) + ??1CGetObjectInfo@@UAE@XZ @ 93 NONAME ; CGetObjectInfo::~CGetObjectInfo(void) + ?ServiceL@CRequestUnknown@@MAEXXZ @ 94 NONAME ; void CRequestUnknown::ServiceL(void) + ?HasDataphase@CSetObjectPropList@@MBEHXZ @ 95 NONAME ; int CSetObjectPropList::HasDataphase(void) const + ?NewL@CGetObjectReferences@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 96 NONAME ; class MMmRequestProcessor * CGetObjectReferences::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?DoCancel@CRenameObject@@MAEXXZ @ 97 NONAME ; void CRenameObject::DoCancel(void) + ??1CSetObjectReferences@@UAE@XZ @ 98 NONAME ; CSetObjectReferences::~CSetObjectReferences(void) + ?Match@CSendObject@@MBEHABVTMTPTypeRequest@@AAVMMTPConnection@@@Z @ 99 NONAME ; int CSendObject::Match(class TMTPTypeRequest const &, class MMTPConnection &) const + ?NewL@CSetObjectPropList@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 100 NONAME ; class MMmRequestProcessor * CSetObjectPropList::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ??1CCopyObject@@UAE@XZ @ 101 NONAME ; CCopyObject::~CCopyObject(void) + ?GetModifiedContentL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAHAAVCDesC16Array@@@Z @ 102 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL(class TDesC16 const &, int &, class CDesC16Array &) + ?RunL@CGetObjectPropList@@MAEXXZ @ 103 NONAME ; void CGetObjectPropList::RunL(void) + ?NewRangeFormDescriptionL@CDescriptionUtility@@QAEPAVCMTPTypeObjectPropDesc@@GKKKH@Z @ 104 NONAME ; class CMTPTypeObjectPropDesc * CDescriptionUtility::NewRangeFormDescriptionL(unsigned short, unsigned long, unsigned long, unsigned long, int) + ?RunError@CRequestProcessor@@MAEHH@Z @ 105 NONAME ; int CRequestProcessor::RunError(int) + ?SessionId@CRequestProcessor@@MAEKXZ @ 106 NONAME ; unsigned long CRequestProcessor::SessionId(void) + ??0CDescriptionUtility@@IAE@XZ @ 107 NONAME ; CDescriptionUtility::CDescriptionUtility(void) + ?HandleEventL@CRequestProcessor@@MAEXABVTMTPTypeEvent@@@Z @ 108 NONAME ; void CRequestProcessor::HandleEventL(class TMTPTypeEvent const &) + ?NewL@CGetPartialObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 109 NONAME ; class MMmRequestProcessor * CGetPartialObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?HasDataphase@CSetObjectReferences@@EBEHXZ @ 110 NONAME ; int CSetObjectReferences::HasDataphase(void) const + ?RunError@CGetObjectPropList@@MAEHH@Z @ 111 NONAME ; int CGetObjectPropList::RunError(int) + ?DoHandleResponsePhaseL@CSetObjectPropList@@MAEHXZ @ 112 NONAME ; int CSetObjectPropList::DoHandleResponsePhaseL(void) + ?NewL@CRenameObject@@SAPAV1@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 113 NONAME ; class CRenameObject * CRenameObject::NewL(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &) + ?RenameObjectL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@ABVTDesC16@@@Z @ 114 NONAME ; void CMmMtpDpMetadataAccessWrapper::RenameObjectL(class CMTPObjectMetaData const &, class TDesC16 const &) + ?GetObjectMetadataValueL@CMmMtpDpMetadataAccessWrapper@@QAEXGAAVMMTPType@@ABVCMTPObjectMetaData@@@Z @ 115 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL(unsigned short, class MMTPType &, class CMTPObjectMetaData const &) + ?GetAllAbstractMediaL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@AAVCDesC16Array@@W4TMPXGeneralCategory@@@Z @ 116 NONAME ; void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL(class TDesC16 const &, class CDesC16Array &, enum TMPXGeneralCategory) + ?AddDummyFileL@CMmMtpDpMetadataAccessWrapper@@QAEXABVTDesC16@@@Z @ 117 NONAME ; void CMmMtpDpMetadataAccessWrapper::AddDummyFileL(class TDesC16 const &) + ??1CGetObjectPropDesc@@UAE@XZ @ 118 NONAME ; CGetObjectPropDesc::~CGetObjectPropDesc(void) + ?ServiceL@CGetObjectPropDesc@@MAEXXZ @ 119 NONAME ; void CGetObjectPropDesc::ServiceL(void) + ?HasDataphase@CSetObjectPropValue@@MBEHXZ @ 120 NONAME ; int CSetObjectPropValue::HasDataphase(void) const + ?ServiceL@CCopyObject@@MAEXXZ @ 121 NONAME ; void CCopyObject::ServiceL(void) + ?CheckRequestL@CGetObjectPropValue@@MAE?AW4TMTPResponseCode@@XZ @ 122 NONAME ; enum TMTPResponseCode CGetObjectPropValue::CheckRequestL(void) + ?CloseSessionL@CMmMtpDpAccessSingleton@@SAXXZ @ 123 NONAME ; void CMmMtpDpAccessSingleton::CloseSessionL(void) + ?NewL@CGetFormatCapabilities@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 124 NONAME ; class MMmRequestProcessor * CGetFormatCapabilities::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?ReceiveDataL@CRequestProcessor@@IAEXAAVMMTPType@@@Z @ 125 NONAME ; void CRequestProcessor::ReceiveDataL(class MMTPType &) + ??1CDescriptionUtility@@UAE@XZ @ 126 NONAME ; CDescriptionUtility::~CDescriptionUtility(void) + ?ConstructL@CMoveObject@@IAEXXZ @ 127 NONAME ; void CMoveObject::ConstructL(void) + ?NewL@CSendObject@@SAPAVMMmRequestProcessor@@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 128 NONAME ; class MMmRequestProcessor * CSendObject::NewL(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ?RunL@CSetObjectPropList@@MAEXXZ @ 129 NONAME ; void CSetObjectPropList::RunL(void) + ??1CGetObjectReferences@@UAE@XZ @ 130 NONAME ; CGetObjectReferences::~CGetObjectReferences(void) + ?HasDataphase@CSendObject@@MBEHXZ @ 131 NONAME ; int CSendObject::HasDataphase(void) const + ??1CSetObjectPropValue@@UAE@XZ @ 132 NONAME ; CSetObjectPropValue::~CSetObjectPropValue(void) + ?ConstructL@CRenameObject@@IAEXXZ @ 133 NONAME ; void CRenameObject::ConstructL(void) + ?DoHandleResponsePhaseL@CSendObject@@MAEHXZ @ 134 NONAME ; int CSendObject::DoHandleResponsePhaseL(void) + ?SendDataL@CRequestProcessor@@IAEXABVMMTPType@@@Z @ 135 NONAME ; void CRequestProcessor::SendDataL(class MMTPType const &) + ?SetReferenceL@CMmMtpDpMetadataAccessWrapper@@QAEXABVCMTPObjectMetaData@@AAVCDesC16Array@@@Z @ 136 NONAME ; void CMmMtpDpMetadataAccessWrapper::SetReferenceL(class CMTPObjectMetaData const &, class CDesC16Array &) + ?DoCancel@CGetObjectPropList@@MAEXXZ @ 137 NONAME ; void CGetObjectPropList::DoCancel(void) + ?ServiceL@CGetInterdependentPropDesc@@MAEXXZ @ 138 NONAME ; void CGetInterdependentPropDesc::ServiceL(void) + ?DoHandleRequestPhaseL@CRequestProcessor@@MAEHXZ @ 139 NONAME ; int CRequestProcessor::DoHandleRequestPhaseL(void) + ?ServiceL@CSetObjectPropValue@@MAEXXZ @ 140 NONAME ; void CSetObjectPropValue::ServiceL(void) + ?RunError@CRenameObject@@MAEHH@Z @ 141 NONAME ; int CRenameObject::RunError(int) + ??1CDeleteObject@@UAE@XZ @ 142 NONAME ; CDeleteObject::~CDeleteObject(void) + ?DoHandleResponsePhaseL@CGetPartialObject@@MAEHXZ @ 143 NONAME ; int CGetPartialObject::DoHandleResponsePhaseL(void) + ??0CSetObjectPropValue@@IAE@AAVMMTPDataProviderFramework@@AAVMMTPConnection@@AAVMMmMtpDpConfig@@@Z @ 144 NONAME ; CSetObjectPropValue::CSetObjectPropValue(class MMTPDataProviderFramework &, class MMTPConnection &, class MMmMtpDpConfig &) + ??1CGetObjectPropList@@UAE@XZ @ 145 NONAME ; CGetObjectPropList::~CGetObjectPropList(void) + ?CheckRequestL@CGetFormatCapabilities@@MAE?AW4TMTPResponseCode@@XZ @ 146 NONAME ; enum TMTPResponseCode CGetFormatCapabilities::CheckRequestL(void) + ??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 147 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &) + ?ServiceL@CGetObjectPropList@@MAEXXZ @ 148 NONAME ; void CGetObjectPropList::ServiceL(void) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def Wed Jun 23 17:51:16 2010 +0100 @@ -4,255 +4,262 @@ _ZN10CGetObjectD1Ev @ 3 NONAME _ZN10CGetObjectD2Ev @ 4 NONAME _ZN11CCopyObject10ConstructLEv @ 5 NONAME - _ZN11CCopyObject24ServiceMetaDataToWrapperEtR8MMTPTypeRK18CMTPObjectMetaData @ 6 NONAME - _ZN11CCopyObject4RunLEv @ 7 NONAME - _ZN11CCopyObject8RunErrorEi @ 8 NONAME - _ZN11CCopyObject8ServiceLEv @ 9 NONAME - _ZN11CCopyObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 10 NONAME - _ZN11CCopyObjectD0Ev @ 11 NONAME - _ZN11CCopyObjectD1Ev @ 12 NONAME - _ZN11CCopyObjectD2Ev @ 13 NONAME - _ZN11CMoveObject10ConstructLEv @ 14 NONAME - _ZN11CMoveObject24ServiceMetaDataToWrapperEtR8MMTPTypeRK18CMTPObjectMetaData @ 15 NONAME - _ZN11CMoveObject4RunLEv @ 16 NONAME - _ZN11CMoveObject8RunErrorEi @ 17 NONAME - _ZN11CMoveObject8ServiceLEv @ 18 NONAME - _ZN11CMoveObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 19 NONAME - _ZN11CMoveObjectD0Ev @ 20 NONAME - _ZN11CMoveObjectD1Ev @ 21 NONAME - _ZN11CMoveObjectD2Ev @ 22 NONAME - _ZN11CSendObject10ConstructLEv @ 23 NONAME - _ZN11CSendObject13CheckRequestLEv @ 24 NONAME - _ZN11CSendObject13UsbDisconnectEv @ 25 NONAME - _ZN11CSendObject21SetMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 26 NONAME - _ZN11CSendObject22DoHandleResponsePhaseLEv @ 27 NONAME - _ZN11CSendObject24DoHandleCompletingPhaseLEv @ 28 NONAME - _ZN11CSendObject8ServiceLEv @ 29 NONAME - _ZN11CSendObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 30 NONAME - _ZN11CSendObjectD0Ev @ 31 NONAME - _ZN11CSendObjectD1Ev @ 32 NONAME - _ZN11CSendObjectD2Ev @ 33 NONAME - _ZN13CDeleteObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 34 NONAME - _ZN13CDeleteObject4RunLEv @ 35 NONAME - _ZN13CDeleteObject8DoCancelEv @ 36 NONAME - _ZN13CDeleteObject8ServiceLEv @ 37 NONAME - _ZN13CDeleteObjectD0Ev @ 38 NONAME - _ZN13CDeleteObjectD1Ev @ 39 NONAME - _ZN13CDeleteObjectD2Ev @ 40 NONAME - _ZN13CRenameObject10ConstructLEv @ 41 NONAME - _ZN13CRenameObject4NewLER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 42 NONAME - _ZN13CRenameObject4RunLEv @ 43 NONAME - _ZN13CRenameObject6StartLEmRK7TDesC16 @ 44 NONAME - _ZN13CRenameObject8DoCancelEv @ 45 NONAME - _ZN13CRenameObject8RunErrorEi @ 46 NONAME - _ZN13CRenameObjectC1ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 47 NONAME - _ZN13CRenameObjectC2ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 48 NONAME - _ZN13CRenameObjectD0Ev @ 49 NONAME - _ZN13CRenameObjectD1Ev @ 50 NONAME - _ZN13CRenameObjectD2Ev @ 51 NONAME - _ZN14CGetObjectInfo10ConstructLEv @ 52 NONAME - _ZN14CGetObjectInfo4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 53 NONAME - _ZN14CGetObjectInfoD0Ev @ 54 NONAME - _ZN14CGetObjectInfoD1Ev @ 55 NONAME - _ZN14CGetObjectInfoD2Ev @ 56 NONAME - _ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 57 NONAME - _ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 58 NONAME - _ZN14MmMtpDpUtility8IsVideoLERK7TDesC16 @ 59 NONAME - _ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 60 NONAME - _ZN15CRequestUnknown8ServiceLEv @ 61 NONAME - _ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 62 NONAME - _ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME - _ZN15CRequestUnknownD0Ev @ 64 NONAME - _ZN15CRequestUnknownD1Ev @ 65 NONAME - _ZN15CRequestUnknownD2Ev @ 66 NONAME - _ZN17CGetPartialObject13CheckRequestLEv @ 67 NONAME - _ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 68 NONAME - _ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 69 NONAME - _ZN17CGetPartialObject8ServiceLEv @ 70 NONAME - _ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 71 NONAME - _ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 72 NONAME - _ZN17CGetPartialObjectD0Ev @ 73 NONAME - _ZN17CGetPartialObjectD1Ev @ 74 NONAME - _ZN17CGetPartialObjectD2Ev @ 75 NONAME - _ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 76 NONAME - _ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 77 NONAME - _ZN17CRequestProcessor13CheckRequestLEv @ 78 NONAME - _ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 79 NONAME - _ZN17CRequestProcessor13UsbDisconnectEv @ 80 NONAME - _ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 81 NONAME - _ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 82 NONAME - _ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 83 NONAME - _ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 84 NONAME - _ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 85 NONAME - _ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 86 NONAME - _ZN17CRequestProcessor4RunLEv @ 87 NONAME - _ZN17CRequestProcessor7ReleaseEv @ 88 NONAME - _ZN17CRequestProcessor8DoCancelEv @ 89 NONAME - _ZN17CRequestProcessor8RunErrorEi @ 90 NONAME - _ZN17CRequestProcessor9SendDataLERK8MMTPType @ 91 NONAME - _ZN17CRequestProcessor9SessionIdEv @ 92 NONAME - _ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 93 NONAME - _ZN17CRequestProcessorD0Ev @ 94 NONAME - _ZN17CRequestProcessorD1Ev @ 95 NONAME - _ZN17CRequestProcessorD2Ev @ 96 NONAME - _ZN18CGetObjectPropDesc10ConstructLEv @ 97 NONAME - _ZN18CGetObjectPropDesc13CheckRequestLEv @ 98 NONAME - _ZN18CGetObjectPropDesc8ServiceLEv @ 99 NONAME - _ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 100 NONAME - _ZN18CGetObjectPropDescD0Ev @ 101 NONAME - _ZN18CGetObjectPropDescD1Ev @ 102 NONAME - _ZN18CGetObjectPropDescD2Ev @ 103 NONAME - _ZN18CGetObjectPropList10ConstructLEv @ 104 NONAME - _ZN18CGetObjectPropList13CheckRequestLEv @ 105 NONAME - _ZN18CGetObjectPropList4RunLEv @ 106 NONAME - _ZN18CGetObjectPropList8DoCancelEv @ 107 NONAME - _ZN18CGetObjectPropList8RunErrorEi @ 108 NONAME - _ZN18CGetObjectPropList8ServiceLEv @ 109 NONAME - _ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 110 NONAME - _ZN18CGetObjectPropListD0Ev @ 111 NONAME - _ZN18CGetObjectPropListD1Ev @ 112 NONAME - _ZN18CGetObjectPropListD2Ev @ 113 NONAME - _ZN18CSetObjectPropList10ConstructLEv @ 114 NONAME - _ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 115 NONAME - _ZN18CSetObjectPropList25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 116 NONAME - _ZN18CSetObjectPropList4RunLEv @ 117 NONAME - _ZN18CSetObjectPropList8DoCancelEv @ 118 NONAME - _ZN18CSetObjectPropList8RunErrorEi @ 119 NONAME - _ZN18CSetObjectPropList8ServiceLEv @ 120 NONAME - _ZN18CSetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 121 NONAME - _ZN18CSetObjectPropListD0Ev @ 122 NONAME - _ZN18CSetObjectPropListD1Ev @ 123 NONAME - _ZN18CSetObjectPropListD2Ev @ 124 NONAME - _ZN19CGetObjectPropValue13CheckRequestLEv @ 125 NONAME - _ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 126 NONAME - _ZN19CGetObjectPropValue8ServiceLEv @ 127 NONAME - _ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 128 NONAME - _ZN19CGetObjectPropValueD0Ev @ 129 NONAME - _ZN19CGetObjectPropValueD1Ev @ 130 NONAME - _ZN19CGetObjectPropValueD2Ev @ 131 NONAME - _ZN19CSetObjectPropValue13CheckRequestLEv @ 132 NONAME - _ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 133 NONAME - _ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 134 NONAME - _ZN19CSetObjectPropValue8ServiceLEv @ 135 NONAME - _ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 136 NONAME - _ZN19CSetObjectPropValueD0Ev @ 137 NONAME - _ZN19CSetObjectPropValueD1Ev @ 138 NONAME - _ZN19CSetObjectPropValueD2Ev @ 139 NONAME - _ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 140 NONAME - _ZN20CGetObjectReferencesD0Ev @ 141 NONAME - _ZN20CGetObjectReferencesD1Ev @ 142 NONAME - _ZN20CGetObjectReferencesD2Ev @ 143 NONAME - _ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 144 NONAME - _ZN20CSetObjectReferences22DoSetObjectReferencesLER29CMmMtpDpMetadataAccessWrappertRK7TDesC16R12CDesC16Array @ 145 NONAME - _ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME - _ZN20CSetObjectReferences8ServiceLEv @ 147 NONAME - _ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 148 NONAME - _ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 149 NONAME - _ZN20CSetObjectReferencesD0Ev @ 150 NONAME - _ZN20CSetObjectReferencesD1Ev @ 151 NONAME - _ZN20CSetObjectReferencesD2Ev @ 152 NONAME - _ZN22CGetFormatCapabilities10ConstructLEv @ 153 NONAME - _ZN22CGetFormatCapabilities13CheckRequestLEv @ 154 NONAME - _ZN22CGetFormatCapabilities8ServiceLEv @ 155 NONAME - _ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 156 NONAME - _ZN22CGetFormatCapabilitiesD0Ev @ 157 NONAME - _ZN22CGetFormatCapabilitiesD1Ev @ 158 NONAME - _ZN22CGetFormatCapabilitiesD2Ev @ 159 NONAME - _ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 160 NONAME - _ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 161 NONAME - _ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 162 NONAME - _ZN23CMmMtpDpAccessSingleton7CreateLER3RFsR25MMTPDataProviderFramework @ 163 NONAME - _ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 164 NONAME - _ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 165 NONAME - _ZN24CGetObjectPropsSupported8ServiceLEv @ 166 NONAME - _ZN24CGetObjectPropsSupportedD0Ev @ 167 NONAME - _ZN24CGetObjectPropsSupportedD1Ev @ 168 NONAME - _ZN24CGetObjectPropsSupportedD2Ev @ 169 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper12SetPlaylistLERK7TDesC16R12CDesC16Array @ 170 NONAME + _ZN11CCopyObject8ServiceLEv @ 6 NONAME + _ZN11CCopyObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 7 NONAME + _ZN11CCopyObjectD0Ev @ 8 NONAME + _ZN11CCopyObjectD1Ev @ 9 NONAME + _ZN11CCopyObjectD2Ev @ 10 NONAME + _ZN11CMoveObject10ConstructLEv @ 11 NONAME + _ZN11CMoveObject8ServiceLEv @ 12 NONAME + _ZN11CMoveObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 13 NONAME + _ZN11CMoveObjectD0Ev @ 14 NONAME + _ZN11CMoveObjectD1Ev @ 15 NONAME + _ZN11CMoveObjectD2Ev @ 16 NONAME + _ZN11CSendObject13CheckRequestLEv @ 17 NONAME + _ZN11CSendObject13UsbDisconnectEv @ 18 NONAME + _ZN11CSendObject22DoHandleResponsePhaseLEv @ 19 NONAME + _ZN11CSendObject24DoHandleCompletingPhaseLEv @ 20 NONAME + _ZN11CSendObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 21 NONAME + _ZN11CSendObject8ServiceLEv @ 22 NONAME + _ZN11CSendObjectD0Ev @ 23 NONAME + _ZN11CSendObjectD1Ev @ 24 NONAME + _ZN11CSendObjectD2Ev @ 25 NONAME + _ZN13CDeleteObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 26 NONAME + _ZN13CDeleteObject4RunLEv @ 27 NONAME + _ZN13CDeleteObject8DoCancelEv @ 28 NONAME + _ZN13CDeleteObject8ServiceLEv @ 29 NONAME + _ZN13CDeleteObjectD0Ev @ 30 NONAME + _ZN13CDeleteObjectD1Ev @ 31 NONAME + _ZN13CDeleteObjectD2Ev @ 32 NONAME + _ZN13CRenameObject10ConstructLEv @ 33 NONAME + _ZN13CRenameObject4NewLER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 34 NONAME + _ZN13CRenameObject4RunLEv @ 35 NONAME + _ZN13CRenameObject6StartLEmRK7TDesC16 @ 36 NONAME + _ZN13CRenameObject8DoCancelEv @ 37 NONAME + _ZN13CRenameObject8RunErrorEi @ 38 NONAME + _ZN13CRenameObjectC1ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 39 NONAME + _ZN13CRenameObjectC2ER25MMTPDataProviderFrameworkR29CMmMtpDpMetadataAccessWrapper @ 40 NONAME + _ZN13CRenameObjectD0Ev @ 41 NONAME + _ZN13CRenameObjectD1Ev @ 42 NONAME + _ZN13CRenameObjectD2Ev @ 43 NONAME + _ZN14CGetObjectInfo10ConstructLEv @ 44 NONAME + _ZN14CGetObjectInfo4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 45 NONAME + _ZN14CGetObjectInfoD0Ev @ 46 NONAME + _ZN14CGetObjectInfoD1Ev @ 47 NONAME + _ZN14CGetObjectInfoD2Ev @ 48 NONAME + _ZN14MmMtpDpUtility11SetPSStatusE12TMtpPSStatus @ 49 NONAME + _ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 50 NONAME + _ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 51 NONAME + _ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 52 NONAME + _ZN15CRequestUnknown8ServiceLEv @ 53 NONAME + _ZN15CRequestUnknownD0Ev @ 54 NONAME + _ZN15CRequestUnknownD1Ev @ 55 NONAME + _ZN15CRequestUnknownD2Ev @ 56 NONAME + _ZN17CGetPartialObject13CheckRequestLEv @ 57 NONAME + _ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 58 NONAME + _ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 59 NONAME + _ZN17CGetPartialObject8ServiceLEv @ 60 NONAME + _ZN17CGetPartialObjectD0Ev @ 61 NONAME + _ZN17CGetPartialObjectD1Ev @ 62 NONAME + _ZN17CGetPartialObjectD2Ev @ 63 NONAME + _ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 64 NONAME + _ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 65 NONAME + _ZN17CRequestProcessor13CheckRequestLEv @ 66 NONAME + _ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 67 NONAME + _ZN17CRequestProcessor13UsbDisconnectEv @ 68 NONAME + _ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 69 NONAME + _ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 70 NONAME + _ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 71 NONAME + _ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 72 NONAME + _ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 73 NONAME + _ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 74 NONAME + _ZN17CRequestProcessor4RunLEv @ 75 NONAME + _ZN17CRequestProcessor7ReleaseEv @ 76 NONAME + _ZN17CRequestProcessor8DoCancelEv @ 77 NONAME + _ZN17CRequestProcessor8RunErrorEi @ 78 NONAME + _ZN17CRequestProcessor9SendDataLERK8MMTPType @ 79 NONAME + _ZN17CRequestProcessor9SessionIdEv @ 80 NONAME + _ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 81 NONAME + _ZN17CRequestProcessorD0Ev @ 82 NONAME + _ZN17CRequestProcessorD1Ev @ 83 NONAME + _ZN17CRequestProcessorD2Ev @ 84 NONAME + _ZN18CGetObjectPropDesc13CheckRequestLEv @ 85 NONAME + _ZN18CGetObjectPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 86 NONAME + _ZN18CGetObjectPropDesc8ServiceLEv @ 87 NONAME + _ZN18CGetObjectPropDescD0Ev @ 88 NONAME + _ZN18CGetObjectPropDescD1Ev @ 89 NONAME + _ZN18CGetObjectPropDescD2Ev @ 90 NONAME + _ZN18CGetObjectPropList10ConstructLEv @ 91 NONAME + _ZN18CGetObjectPropList13CheckRequestLEv @ 92 NONAME + _ZN18CGetObjectPropList4RunLEv @ 93 NONAME + _ZN18CGetObjectPropList8DoCancelEv @ 94 NONAME + _ZN18CGetObjectPropList8RunErrorEi @ 95 NONAME + _ZN18CGetObjectPropList8ServiceLEv @ 96 NONAME + _ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 97 NONAME + _ZN18CGetObjectPropListD0Ev @ 98 NONAME + _ZN18CGetObjectPropListD1Ev @ 99 NONAME + _ZN18CGetObjectPropListD2Ev @ 100 NONAME + _ZN18CSetObjectPropList13CheckRequestLEv @ 101 NONAME + _ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 102 NONAME + _ZN18CSetObjectPropList4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 103 NONAME + _ZN18CSetObjectPropList4RunLEv @ 104 NONAME + _ZN18CSetObjectPropList8DoCancelEv @ 105 NONAME + _ZN18CSetObjectPropList8RunErrorEi @ 106 NONAME + _ZN18CSetObjectPropList8ServiceLEv @ 107 NONAME + _ZN18CSetObjectPropListD0Ev @ 108 NONAME + _ZN18CSetObjectPropListD1Ev @ 109 NONAME + _ZN18CSetObjectPropListD2Ev @ 110 NONAME + _ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 111 NONAME + _ZN19CDescriptionUtilityC2Ev @ 112 NONAME + _ZN19CDescriptionUtilityD0Ev @ 113 NONAME + _ZN19CDescriptionUtilityD1Ev @ 114 NONAME + _ZN19CDescriptionUtilityD2Ev @ 115 NONAME + _ZN19CGetObjectPropValue13CheckRequestLEv @ 116 NONAME + _ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 117 NONAME + _ZN19CGetObjectPropValue8ServiceLEv @ 118 NONAME + _ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 119 NONAME + _ZN19CGetObjectPropValueD0Ev @ 120 NONAME + _ZN19CGetObjectPropValueD1Ev @ 121 NONAME + _ZN19CGetObjectPropValueD2Ev @ 122 NONAME + _ZN19CSetObjectPropValue13CheckRequestLEv @ 123 NONAME + _ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 124 NONAME + _ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 125 NONAME + _ZN19CSetObjectPropValue8ServiceLEv @ 126 NONAME + _ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 127 NONAME + _ZN19CSetObjectPropValueD0Ev @ 128 NONAME + _ZN19CSetObjectPropValueD1Ev @ 129 NONAME + _ZN19CSetObjectPropValueD2Ev @ 130 NONAME + _ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 131 NONAME + _ZN20CGetObjectReferencesD0Ev @ 132 NONAME + _ZN20CGetObjectReferencesD1Ev @ 133 NONAME + _ZN20CGetObjectReferencesD2Ev @ 134 NONAME + _ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 135 NONAME + _ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 136 NONAME + _ZN20CSetObjectReferences8ServiceLEv @ 137 NONAME + _ZN20CSetObjectReferencesD0Ev @ 138 NONAME + _ZN20CSetObjectReferencesD1Ev @ 139 NONAME + _ZN20CSetObjectReferencesD2Ev @ 140 NONAME + _ZN22CGetFormatCapabilities13CheckRequestLEv @ 141 NONAME + _ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 142 NONAME + _ZN22CGetFormatCapabilities8ServiceLEv @ 143 NONAME + _ZN22CGetFormatCapabilitiesD0Ev @ 144 NONAME + _ZN22CGetFormatCapabilitiesD1Ev @ 145 NONAME + _ZN22CGetFormatCapabilitiesD2Ev @ 146 NONAME + _ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 147 NONAME + _ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 148 NONAME + _ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 149 NONAME + _ZN23CMmMtpDpAccessSingleton24ActiveToIdleStatusChangeEv @ 150 NONAME + _ZN23CMmMtpDpAccessSingleton30CancelActiveToIdleStatusChangeEv @ 151 NONAME + _ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 152 NONAME + _ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 153 NONAME + _ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 154 NONAME + _ZN23CPropertySettingUtilityC2Ev @ 155 NONAME + _ZN23CPropertySettingUtilityD0Ev @ 156 NONAME + _ZN23CPropertySettingUtilityD1Ev @ 157 NONAME + _ZN23CPropertySettingUtilityD2Ev @ 158 NONAME + _ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 159 NONAME + _ZN24CGetObjectPropsSupported8ServiceLEv @ 160 NONAME + _ZN24CGetObjectPropsSupportedD0Ev @ 161 NONAME + _ZN24CGetObjectPropsSupportedD1Ev @ 162 NONAME + _ZN24CGetObjectPropsSupportedD2Ev @ 163 NONAME + _ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 164 NONAME + _ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 165 NONAME + _ZN26CGetInterdependentPropDesc8ServiceLEv @ 166 NONAME + _ZN26CGetInterdependentPropDescD0Ev @ 167 NONAME + _ZN26CGetInterdependentPropDescD1Ev @ 168 NONAME + _ZN26CGetInterdependentPropDescD2Ev @ 169 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper10AddObjectLERK18CMTPObjectMetaData @ 170 NONAME _ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 171 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK7TDesC16S2_ @ 172 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 173 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 174 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper15GetAllPlaylistLERK7TDesC16PP14CMPXMediaArray @ 175 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 176 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 177 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper16GetPlaylistNameLEP9CMPXMediaR6TDes16 @ 178 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13DeleteObjectLERK18CMTPObjectMetaData @ 172 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 173 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 174 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 175 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 176 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 177 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 178 NONAME _ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 179 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLEv @ 180 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 181 NONAME - _ZNK11CSendObject12HasDataphaseEv @ 182 NONAME - _ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 183 NONAME - _ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 184 NONAME - _ZNK17CRequestProcessor10ConnectionEv @ 185 NONAME - _ZNK17CRequestProcessor12HasDataphaseEv @ 186 NONAME - _ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 187 NONAME - _ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 188 NONAME - _ZNK17CRequestProcessor7RequestEv @ 189 NONAME - _ZNK18CSetObjectPropList12HasDataphaseEv @ 190 NONAME - _ZNK19CSetObjectPropValue12HasDataphaseEv @ 191 NONAME - _ZNK20CSetObjectReferences12HasDataphaseEv @ 192 NONAME - _ZTI10CGetObject @ 193 NONAME - _ZTI11CCopyObject @ 194 NONAME - _ZTI11CMoveObject @ 195 NONAME - _ZTI11CSendObject @ 196 NONAME - _ZTI13CDeleteObject @ 197 NONAME - _ZTI13CRenameObject @ 198 NONAME - _ZTI14CGetObjectInfo @ 199 NONAME - _ZTI15CRequestChecker @ 200 NONAME - _ZTI15CRequestUnknown @ 201 NONAME - _ZTI15TMTPTypeFlatBuf @ 202 NONAME - _ZTI17CGetPartialObject @ 203 NONAME - _ZTI17CRequestProcessor @ 204 NONAME - _ZTI18CGetObjectPropDesc @ 205 NONAME - _ZTI18CGetObjectPropList @ 206 NONAME - _ZTI18CHXMetaDataUtility @ 207 NONAME - _ZTI18CSetObjectPropList @ 208 NONAME - _ZTI19CGetObjectPropValue @ 209 NONAME - _ZTI19CSetObjectPropValue @ 210 NONAME - _ZTI20CGetObjectReferences @ 211 NONAME - _ZTI20CSetObjectReferences @ 212 NONAME - _ZTI22CGetFormatCapabilities @ 213 NONAME - _ZTI23CMmMtpDpAccessSingleton @ 214 NONAME - _ZTI24CGetObjectPropsSupported @ 215 NONAME - _ZTI25CMmMtpDpMetadataMpxAccess @ 216 NONAME - _ZTI27CMmMtpDpMetadataVideoAccess @ 217 NONAME - _ZTI29CMmMtpDpMetadataAccessWrapper @ 218 NONAME - _ZTV10CGetObject @ 219 NONAME - _ZTV11CCopyObject @ 220 NONAME - _ZTV11CMoveObject @ 221 NONAME - _ZTV11CSendObject @ 222 NONAME - _ZTV13CDeleteObject @ 223 NONAME - _ZTV13CRenameObject @ 224 NONAME - _ZTV14CGetObjectInfo @ 225 NONAME - _ZTV15CRequestChecker @ 226 NONAME - _ZTV15CRequestUnknown @ 227 NONAME - _ZTV15TMTPTypeFlatBuf @ 228 NONAME - _ZTV17CGetPartialObject @ 229 NONAME - _ZTV17CRequestProcessor @ 230 NONAME - _ZTV18CGetObjectPropDesc @ 231 NONAME - _ZTV18CGetObjectPropList @ 232 NONAME - _ZTV18CHXMetaDataUtility @ 233 NONAME - _ZTV18CSetObjectPropList @ 234 NONAME - _ZTV19CGetObjectPropValue @ 235 NONAME - _ZTV19CSetObjectPropValue @ 236 NONAME - _ZTV20CGetObjectReferences @ 237 NONAME - _ZTV20CSetObjectReferences @ 238 NONAME - _ZTV22CGetFormatCapabilities @ 239 NONAME - _ZTV23CMmMtpDpAccessSingleton @ 240 NONAME - _ZTV24CGetObjectPropsSupported @ 241 NONAME - _ZTV25CMmMtpDpMetadataMpxAccess @ 242 NONAME - _ZTV27CMmMtpDpMetadataVideoAccess @ 243 NONAME - _ZTV29CMmMtpDpMetadataAccessWrapper @ 244 NONAME - _ZThn28_N11CSendObject13UsbDisconnectEv @ 245 NONAME - _ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 246 NONAME - _ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 247 NONAME - _ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 248 NONAME - _ZThn28_N17CRequestProcessor7ReleaseEv @ 249 NONAME - _ZThn28_N17CRequestProcessor9SessionIdEv @ 250 NONAME - _ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 251 NONAME - _ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 252 NONAME - _ZThn28_NK17CRequestProcessor10ConnectionEv @ 253 NONAME - _ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 254 NONAME - _ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 255 NONAME - _ZThn28_NK17CRequestProcessor7RequestEv @ 256 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16R12CDesC16Array19TMPXGeneralCategory @ 180 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLERK7TDesC16 @ 181 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 182 NONAME + _ZNK11CSendObject12HasDataphaseEv @ 183 NONAME + _ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 184 NONAME + _ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 185 NONAME + _ZNK17CRequestProcessor10ConnectionEv @ 186 NONAME + _ZNK17CRequestProcessor12HasDataphaseEv @ 187 NONAME + _ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 188 NONAME + _ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 189 NONAME + _ZNK17CRequestProcessor7RequestEv @ 190 NONAME + _ZNK18CSetObjectPropList12HasDataphaseEv @ 191 NONAME + _ZNK19CSetObjectPropValue12HasDataphaseEv @ 192 NONAME + _ZNK20CSetObjectReferences12HasDataphaseEv @ 193 NONAME + _ZTI10CGetObject @ 194 NONAME + _ZTI11CCopyObject @ 195 NONAME + _ZTI11CMoveObject @ 196 NONAME + _ZTI11CSendObject @ 197 NONAME + _ZTI13CDeleteObject @ 198 NONAME + _ZTI13CRenameObject @ 199 NONAME + _ZTI14CGetObjectInfo @ 200 NONAME + _ZTI15CRequestChecker @ 201 NONAME + _ZTI15CRequestUnknown @ 202 NONAME + _ZTI15TMTPTypeFlatBuf @ 203 NONAME + _ZTI17CGetPartialObject @ 204 NONAME + _ZTI17CRequestProcessor @ 205 NONAME + _ZTI18CGetObjectPropDesc @ 206 NONAME + _ZTI18CGetObjectPropList @ 207 NONAME + _ZTI18CHXMetaDataUtility @ 208 NONAME + _ZTI18CSetObjectPropList @ 209 NONAME + _ZTI19CDescriptionUtility @ 210 NONAME + _ZTI19CGetObjectPropValue @ 211 NONAME + _ZTI19CSetObjectPropValue @ 212 NONAME + _ZTI20CGetObjectReferences @ 213 NONAME + _ZTI20CSetObjectReferences @ 214 NONAME + _ZTI22CGetFormatCapabilities @ 215 NONAME + _ZTI23CMmMtpDpAccessSingleton @ 216 NONAME + _ZTI23CPropertySettingUtility @ 217 NONAME + _ZTI24CGetObjectPropsSupported @ 218 NONAME + _ZTI25CMmMtpDpMetadataMpxAccess @ 219 NONAME + _ZTI26CGetInterdependentPropDesc @ 220 NONAME + _ZTI27CMmMtpDpMetadataVideoAccess @ 221 NONAME + _ZTI29CMmMtpDpMetadataAccessWrapper @ 222 NONAME + _ZTV10CGetObject @ 223 NONAME + _ZTV11CCopyObject @ 224 NONAME + _ZTV11CMoveObject @ 225 NONAME + _ZTV11CSendObject @ 226 NONAME + _ZTV13CDeleteObject @ 227 NONAME + _ZTV13CRenameObject @ 228 NONAME + _ZTV14CGetObjectInfo @ 229 NONAME + _ZTV15CRequestChecker @ 230 NONAME + _ZTV15CRequestUnknown @ 231 NONAME + _ZTV15TMTPTypeFlatBuf @ 232 NONAME + _ZTV17CGetPartialObject @ 233 NONAME + _ZTV17CRequestProcessor @ 234 NONAME + _ZTV18CGetObjectPropDesc @ 235 NONAME + _ZTV18CGetObjectPropList @ 236 NONAME + _ZTV18CHXMetaDataUtility @ 237 NONAME + _ZTV18CSetObjectPropList @ 238 NONAME + _ZTV19CDescriptionUtility @ 239 NONAME + _ZTV19CGetObjectPropValue @ 240 NONAME + _ZTV19CSetObjectPropValue @ 241 NONAME + _ZTV20CGetObjectReferences @ 242 NONAME + _ZTV20CSetObjectReferences @ 243 NONAME + _ZTV22CGetFormatCapabilities @ 244 NONAME + _ZTV23CMmMtpDpAccessSingleton @ 245 NONAME + _ZTV23CPropertySettingUtility @ 246 NONAME + _ZTV24CGetObjectPropsSupported @ 247 NONAME + _ZTV25CMmMtpDpMetadataMpxAccess @ 248 NONAME + _ZTV26CGetInterdependentPropDesc @ 249 NONAME + _ZTV27CMmMtpDpMetadataVideoAccess @ 250 NONAME + _ZTV29CMmMtpDpMetadataAccessWrapper @ 251 NONAME + _ZThn28_N11CSendObject13UsbDisconnectEv @ 252 NONAME + _ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 253 NONAME + _ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 254 NONAME + _ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 255 NONAME + _ZThn28_N17CRequestProcessor7ReleaseEv @ 256 NONAME + _ZThn28_N17CRequestProcessor9SessionIdEv @ 257 NONAME + _ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 258 NONAME + _ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 259 NONAME + _ZThn28_NK17CRequestProcessor10ConnectionEv @ 260 NONAME + _ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 261 NONAME + _ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 262 NONAME + _ZThn28_NK17CRequestProcessor7RequestEv @ 263 NONAME diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/group/mmmtpdprequestprocessor.mmp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/group/mmmtpdprequestprocessor.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/group/mmmtpdprequestprocessor.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -54,6 +54,9 @@ SOURCE cmoveobject.cpp SOURCE crenameobject.cpp SOURCE cgetformatcapabilities.cpp +SOURCE cgetinterdependentpropdesc.cpp +SOURCE cdescriptionutility.cpp +SOURCE cpropertysettingutility.cpp SOURCEPATH ../../src SOURCE cmmmtpdpmetadatampxaccess.cpp @@ -79,7 +82,6 @@ LIBRARY contentlistingframework.lib LIBRARY caf.lib - #if defined(__WINDOWS_MEDIA) STATICLIBRARY hxmetadatautil.lib #endif @@ -90,4 +92,3 @@ #else DEBUGLIBRARY hal.lib #endif - diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/ccopyobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/ccopyobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/ccopyobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -21,8 +21,6 @@ #include "crequestprocessor.h" -class RFs; -class CFileMan; class CMTPObjectMetaData; class CMTPTypeObjectPropList; class CMTPTypeObjectPropListElement; @@ -35,17 +33,6 @@ { public: /** - * Two-phase construction method - * @param aFramework The data provider framework - * @param aConnection The connection from which the request comes - * @param aWrapper medadata access interface - * @return a pointer to the created request processor object - */ - //IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - // MMTPConnection& aConnection, - // CMmMtpDpMetadataAccessWrapper& aWrapper ); - - /** * Destructor */ IMPORT_C virtual ~CCopyObject(); @@ -55,8 +42,8 @@ * Standard c++ constructor */ IMPORT_C CCopyObject( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); /** * Second phase constructor @@ -70,115 +57,74 @@ */ IMPORT_C void ServiceL(); - /** - * Set MetaData to CMetadataAccessWrapper, for internal use - * @param aPropCode, specify property code of aMediaProp - * @param aNewData, object property value which will be get from - * aObjectMetaData - * @param aObjectMetaData, owner of the property which should be - * inserted or updated into database - * @return response code - */ - IMPORT_C TMTPResponseCode ServiceMetaDataToWrapper( const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObject ); - virtual void ServiceGetSpecificObjectPropertyL( TUint16 aPropCode, TUint32 aHandle, const CMTPObjectMetaData& aObjectMetaData ) = 0; - virtual TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) = 0; - - // from CActive - IMPORT_C void RunL(); - - IMPORT_C TInt RunError( TInt aError ); - private: /** * Retrieve the parameters of the request */ void GetParametersL(); + /** + * Set a default destination if it is not specified + */ void SetDefaultParentObjectL(); /** - * Copy object operation + * Copy file and metadata and send response to pc + * If everything was right, the handle of newly created file + * should be sent back */ - void CopyObjectL( TUint32& aNewHandle ); + void CopyObjectL(); /** - * Check if we can copy the file to the new location + * Check if the file can be copied + * @param aOldName used to get file size + * @param aNewName the full path name of newly copied file */ TMTPResponseCode CanCopyObjectL( const TDesC& aOldName, - const TDesC& aNewName ) const; + const TDesC& aNewName ) const; /** * Save the object properties before doing the copy */ - void GetPreviousPropertiesL( const CMTPObjectMetaData& aObject ); + void GetPreviousPropertiesL(); /** * Set the object properties after doing the copy */ - void SetPreviousPropertiesL( const CMTPObjectMetaData& aObject ); + void SetPreviousPropertiesL(); /** * A helper function of CopyObjectL. * @param aNewFileName the new full filename after copy. - * @return objectHandle of new copy of object. + * @return handle of the newly copied object. */ TUint32 CopyFileL( const TDesC& aNewFileName ); - /* - * Generate the list of handles that need to be copied to the new location. - */ - void GenerateObjectHandleListL( TUint32 aParentHandle ); - /** - * A helper function of CopyObjectL. - * @param aNewFolderName the new full file folder name after copy. - * @return objecthandle of new copy of the folder. - */ - TUint32 CopyFolderL( const TDesC& aNewFolderName ); - - /** - * Set the object properties in the object property store. + * Add metadata of the newly created file into database and + * update related references + * @param aOldObjectName old reference owner + * @param aNewObjectName new reference owner + * @return handle of the newly copied object */ - void SetPropertiesL( const TDesC& aOldFileName, - const TDesC& aNewFileName, - const CMTPObjectMetaData& aObject ); - - /** - * Update object info in the database. - */ - TUint32 UpdateObjectInfoL( const TDesC& aOldObjectName, - const TDesC& aNewObjectName); - - /* - * A helper function of CopyObjectL - * Copy a single object and update the database - */ - void CopyAndUpdateL( TUint32 objectHandle ); + TUint32 AddObjectToStoreL( const TDesC& aOldObjectName, + const TDesC& aNewObjectName ); protected: CMTPTypeObjectPropListElement* iPropertyElement; MMmMtpDpConfig& iDpConfig; CMTPTypeObjectPropList* iPropertyList; + private: - CMTPObjectMetaData* iObjectInfo; // Not owned - RArray iObjectHandles; - CFileMan* iFileMan; + TUint32 iStorageId; + CMTPObjectMetaData* iSourceObject; + CMTPObjectMetaData* iTargetObject; HBufC* iDest; TUint32 iNewParentHandle; - TUint32 iHandle; - TUint32 iStorageId; - TInt iCopyObjectIndex; - TInt iNumberOfObjects; - HBufC* iPathToCopy; - HBufC* iNewRootFolder; TTime iPreviousModifiedTime; }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdeleteobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdeleteobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdeleteobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -19,16 +19,11 @@ #ifndef CDELETEOBJECT_H #define CDELETEOBJECT_H -#include #include -#include #include "crequestprocessor.h" //forward declaration -class RFs; -class CMTPTypeArray; -class MMTPObjectMgr; class MMmMtpDpConfig; /** @@ -60,7 +55,7 @@ * @param aConnection The connection from which the request comes * @param aWrapper medadata access interface */ - IMPORT_C CDeleteObject( MMTPDataProviderFramework& aFramework, + CDeleteObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); @@ -110,12 +105,6 @@ void DeleteObjectL( const CMTPObjectMetaData& aObjectInfo ); private: - // MTP Object Manager - MMTPObjectMgr& iObjectMgr; - - // File server used to open the database - RFs& iFs; - // Array of all the objects to delete RArray iObjectsToDelete; @@ -127,6 +116,7 @@ // Accessor of DB MMmMtpDpConfig& iDpConfig; + }; #endif // CDELETEOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdescriptionutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cdescriptionutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,97 @@ +/* +* 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 CDESCRIPTIONUTILITY_H +#define CDESCRIPTIONUTILITY_H + +class CMTPTypeObjectPropDesc; +class CMTPTypeInterdependentPropDesc; +class MMmMtpDpConfig; + +class CDescriptionUtility : public CBase + { +protected: + /** + * + */ + IMPORT_C CDescriptionUtility(); + +public: + /** + * + */ + IMPORT_C virtual ~CDescriptionUtility(); + +public: + /** + * + */ + CMTPTypeObjectPropDesc* NewCommonObjectPropertyL( TUint16 aPropCode ); + + /** + * New RangeForm Description + * @param aMinValue The minimal value + * @param aMaxValue The maximal value + * @param aStepValue The step value + * @return CMTPTypeObjectPropDesc + */ + IMPORT_C CMTPTypeObjectPropDesc* NewRangeFormDescriptionL( TUint16 aPropCode, + TUint32 aMinValue, + TUint32 aMaxValue, + TUint32 aStepValue, + TBool aIsReadOnly = EFalse ); + + /** + * Get group code + * @param aPropCode Specify the property code of which the group code needed + * @return Group code of specified property + */ + TUint32 GetGroupCode( TUint32 aPropCode ); + + /** + * + */ + virtual CMTPTypeInterdependentPropDesc* NewInterdepentPropDescL( MMmMtpDpConfig& aDpConfig, TUint aFormatCode ) = 0; + + /** + * + */ + virtual CMTPTypeObjectPropDesc* NewSpecificPropDescL( TUint aFormatCode, TUint16 aPropCode ) = 0; + +private: + /** + * New a property description of protection status + * @return CMTPTypeObjectPropDesc + */ + CMTPTypeObjectPropDesc* NewProtectionStatusPropDescL(); + + /** + * Get property description of file name + * @return CMTPTypeObjectPropDesc + */ + CMTPTypeObjectPropDesc* NewFileNamePropDescL(); + + /** + * New a property description of nonconsumable + * @return CMTPTypeObjectPropDesc + */ + CMTPTypeObjectPropDesc* NewNonConsumablePropDescL(); + + }; + +#endif // CDESCRIPTIONUTILITY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetformatcapabilities.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetformatcapabilities.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetformatcapabilities.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,16 +20,10 @@ #include #include "crequestprocessor.h" -#include "mmmtpdplogger.h" -#include "mmmtpdpconfig.h" // forward declaration -class MMTPRequestProcessor; class MMmMtpDpConfig; class CMTPTypeObjectPropDesc; -class CMTPTypeInterdependentPropDesc; -class CMTPTypeObjectPropDesc; -class CMTPTypeString; /** Implements the file data provider CMTPGetFormatCapabilities request processor. @@ -39,18 +33,29 @@ { public: /** + * Two-phase construction method + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aDpConfig Configuration of data provider + * @return The pointer to the created request processor object + */ + IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); + + /** * Destructor */ IMPORT_C virtual ~CGetFormatCapabilities(); -protected: +private: /** * Standard c++ constructor * @param aFramework The data provider framework * @param aConnection The connection from which the request comes * @param aDpConfig, The interface of dataprovider configuration */ - IMPORT_C CGetFormatCapabilities( MMTPDataProviderFramework& aFramework, + CGetFormatCapabilities( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); @@ -58,7 +63,7 @@ * Constructor * Second phase constructor */ - IMPORT_C void ConstructL(); + void ConstructL(); protected: // from CMTPRequestProcessor @@ -74,73 +79,35 @@ */ IMPORT_C TMTPResponseCode CheckRequestL(); -protected: - // new virtuals +private: /** - * Service specific object property - * @param aPropCode, The prop code - * @return MTPType object propdesc - */ - virtual CMTPTypeObjectPropDesc* ServiceSpecificPropertyDescL( TUint16 aPropCode ) = 0; + * Handle one format's capabilities + */ + void ServiceOneFormatCapabilitiesL( TUint aFormatCode ); /** - * Service interdepent propdesc - * @param aFormatCode, The format code - * @return MTPTypeInterdependentPropDesc - */ - virtual void ServiceInterdepentPropDescL() = 0; - -private: - /** - * Get PropDesc via PropCode + * Handle one property description of one format * @param aPropCode The Property Code * @return The MTPTypeObject PropDesc */ - CMTPTypeObjectPropDesc* ServicePropDescL( TUint16 aPropCode ); - - /** - * Get PropDesc with Protection status - * @return The MTPTypeObject PropDesc - */ - CMTPTypeObjectPropDesc* ServiceProtectionStatusL(); - - /** - * Get PropDesc with file name - * @return The MTPTypeObject PropDesc - */ - CMTPTypeObjectPropDesc* ServiceFileNameL(); + CMTPTypeObjectPropDesc* ServiceOnePropDescL( TUint16 aPropCode ); - /** - * Get PropDesc with nonconsumable - * @return The MTPTypeObject PropDesc - */ - CMTPTypeObjectPropDesc* ServiceNonConsumableL(); - - /** - * Get group code - * @param aPropCode Specify the property code of which the group code needed - * @return Group code of specified property - */ - TUint32 GetGroupCode( TUint32 aPropCode ); - -protected: +private: /* * Format code. */ TUint iFormatCode; - CMTPTypeInterdependentPropDesc* iInterdependentPropDesc; + /* + * MMmMtpDpConfig. + */ + MMmMtpDpConfig& iDpConfig; -private: // Owned /* * CMTPTypeCapabilityList dataset. */ CMTPTypeFormatCapabilityList* iCapabilityList; - /* - * MMmMtpDpConfig. - */ - MMmMtpDpConfig& iDpConfig; }; #endif // CMTPGETFORMATCAPABILITLIST_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetinterdependentpropdesc.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetinterdependentpropdesc.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,72 @@ +/* +* 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: GetInterdependentPropDesc operation +* +*/ + +#ifndef CGETINTERDEPENDENTPROPDESC_H +#define CGETINTERDEPENDENTPROPDESC_H + +#include "crequestprocessor.h" + +class MMmMtpDpConfig; +class CMTPTypeInterdependentPropDesc; + +class CGetInterdependentPropDesc : public CRequestProcessor + { +public: + /** + * + */ + IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); + + /** + * Destructor + */ + IMPORT_C virtual ~CGetInterdependentPropDesc(); + +protected: + /** + * Standard C++ Constructor + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aWrapper Medadata access interface + */ + CGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); + + /** + * 2nd Phase Constructor + */ + void ConstructL(); + +protected: + // from CRequestProcessor + IMPORT_C TMTPResponseCode CheckRequestL(); + + IMPORT_C void ServiceL(); + +protected: + MMmMtpDpConfig& iDpConfig; + + CMTPTypeInterdependentPropDesc* iDataset; + + TUint32 iFormatCode; + + }; + +#endif // CGETINTERDEPENDENTPROPDESC_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -22,7 +22,6 @@ #include "crequestprocessor.h" // forward declaration -class RFs; class CMTPTypeFile; class MMmMtpDpConfig; @@ -78,17 +77,14 @@ void GetObjectL( const TDesC& aFileName ); private: - // File server used to open the database - RFs& iFs; - // File Object to encapsulate the object to send back CMTPTypeFile* iFileObject; // Object Info CMTPObjectMetaData* iObjectInfo; - // TMTPResponseCode iError; + }; #endif // CGETOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectinfo.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectinfo.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectinfo.h Wed Jun 23 17:51:16 2010 +0100 @@ -22,7 +22,6 @@ #include "crequestprocessor.h" // forward declacration -class CMmMtpDpMetadataAccessWrapper; class CMTPTypeObjectInfo; class MMmMtpDpConfig; @@ -62,7 +61,7 @@ * @param aConnection The connection from which the request comes * @param aWrapper medadata access interface */ - IMPORT_C CGetObjectInfo( MMTPDataProviderFramework& aFramework, + CGetObjectInfo( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); @@ -78,10 +77,10 @@ void BuildObjectInfoL(); private: - CMTPTypeObjectInfo* iObjectInfo; MMmMtpDpConfig& iDpConfig; + }; #endif // CGETOBJECTINFO_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropdesc.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropdesc.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropdesc.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,11 +11,10 @@ * * Contributors: * -* Description: Get object properties descript operation +* Description: Request processor which handle common property description * */ - #ifndef CGETOBJECTPROPDESC_H #define CGETOBJECTPROPDESC_H @@ -32,33 +31,39 @@ { public: /** + * Two-phase construction method + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aDpConfig Configuration of data provider + * @return The pointer to the created request processor object + */ + IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); + + /** * Destructor */ IMPORT_C virtual ~CGetObjectPropDesc(); -protected: +private: /** * Standard c++ constructor * @param aFramework The data provider framework * @param aConnection The connection from which the request comes * @param aWrapper Medadata access interface */ - IMPORT_C CGetObjectPropDesc( MMTPDataProviderFramework& aFramework, + CGetObjectPropDesc( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); - + /** * Second phase constructor */ - IMPORT_C void ConstructL(); + void ConstructL(); protected: - //from CRequestProcessor - /** - * GetObjectPropDesc request handler - */ - IMPORT_C void ServiceL(); - + // from CRequestProcessor /** * Check the current request * @return EMTPRespCodeOK if the reqeust is good, otherwise, @@ -66,9 +71,10 @@ */ IMPORT_C TMTPResponseCode CheckRequestL(); -protected: - // new virtuals - virtual void ServiceSpecificObjectPropertyL( TUint16 aPropCode ) = 0; + /** + * GetObjectPropDesc request handler + */ + IMPORT_C void ServiceL(); private: /** @@ -85,37 +91,16 @@ */ TMTPResponseCode CheckPropCodeL() const; - /** - * Create list of possible protection status and create new ObjectPropDesc - */ - void ServiceProtectionStatusL(); - - /** - * Create Regular expression for a file name and create new ObjectPropDesc - */ - void ServiceFileNameL(); - - /** - * Create list of possible nonConsumable values and create new ObjectPropDesc - */ - void ServiceNonConsumableL(); - - /* - * Get group code according to property code - * @param aPropCode Specify the property code of which the group code needed - * @return Group code of specified property - */ - TUint32 GetGroupCode( TUint16 aPropCode ); - - -protected: - // Property object to return with the desc value - CMTPTypeObjectPropDesc* iObjectProperty; - - //Format code - TUint32 iFormatCode; +private: + TUint iFormatCode; MMmMtpDpConfig& iDpConfig; + + TUint iPropCode; + + // property description + CMTPTypeObjectPropDesc* iPropertyDesc; + }; #endif // CGETOBJECTPROPDESC_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectproplist.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectproplist.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectproplist.h Wed Jun 23 17:51:16 2010 +0100 @@ -161,8 +161,6 @@ void GetPropertiesL( RArray& aPropArray, TUint32 aGroupCode, TUint16 aFormatCode ) const; - void SetSubFormatCodeL(); - protected: CMTPTypeObjectPropListElement* iPropertyElement; // used by media DP directly diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropssupported.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropssupported.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropssupported.h Wed Jun 23 17:51:16 2010 +0100 @@ -70,6 +70,7 @@ private: CMTPTypeArray* iObjectPropsSupported; MMmMtpDpConfig& iDpConfig; + }; #endif // CGETOBJECTPROPSSUPPORTED_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropvalue.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropvalue.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectpropvalue.h Wed Jun 23 17:51:16 2010 +0100 @@ -29,7 +29,6 @@ class TMTPTypeUint128; class CMTPTypeString; class CMTPTypeArray; -class TMTPObjectInfo; class MMmMtpDpConfig; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectreferences.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectreferences.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetobjectreferences.h Wed Jun 23 17:51:16 2010 +0100 @@ -20,6 +20,7 @@ #define CGETOBJECTREFERENCES_H #include "crequestprocessor.h" +#include "cmmmtpdpperflog.h" // forward declaration class CMTPTypeArray; @@ -62,16 +63,31 @@ * @param aWrapper Medadata access interface */ CGetObjectReferences( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ); + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); /** * Two-phase construction */ void ConstructL(); + /** + * Add references of specified object into reference db, + * for the insertion delayed until the first time it was queried by pc + * @param aRefOwnerSuid, specify the reference owner of which references should be added into db + * @param aReferences, suid array which stored references + */ + void AddReferencesL( const TDesC& aRefOwnerSuid, + CDesCArray& aReferences ); + private: // Array object to store object references CMTPTypeArray* iReferences; + MMmMtpDpConfig& iDpConfig; + +#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) + CMmMtpDpPerfLog* iPerfLog; +#endif }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetpartialobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetpartialobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cgetpartialobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -21,9 +21,6 @@ #include "crequestprocessor.h" -class MMTPDataProviderFramework; -class RFs; -class TMTPTypeFlatBase; class CMTPTypeFile; class CMmMtpDpMetadataAccessWrapper; class MMmMtpDpConfig; @@ -56,7 +53,7 @@ * @param aFramework The data provider framework * @param aConnection The connection from which the request comes */ - IMPORT_C CGetPartialObject( MMTPDataProviderFramework& aFramework, + CGetPartialObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection ); protected: @@ -100,16 +97,11 @@ private: MMTPDataProviderFramework& iFramework; - RFs& iFs; - TMTPTypeFlatBase* iPartialData; - HBufC8* iBuffer; - TPtr8 iBufferPtr8; - TInt iOffset; - TInt iPartialDataLength; - TBool iCompleteFile; - CMTPTypeFile* iFileObject; - TBuf iFileSuid; - TUint32 iObjectHandle; + TUint iOffset; + TUint iPartialDataLength; + + CMTPTypeFile* iFileObject; + TUint32 iObjectHandle; }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cmoveobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cmoveobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cmoveobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -21,9 +21,7 @@ #include "crequestprocessor.h" -class CFileMan; class CMTPObjectMetaData; -class CMmMtpDpMetadataAccessWrapper; class CMTPTypeObjectPropList; class CMTPTypeObjectPropListElement; class MMmMtpDpConfig; @@ -35,18 +33,6 @@ { public: /** - * Two-phase construction method - * @param aFramework The data provider framework - * @param aConnection The connection from which the request comes - * @param aWrapper medadata access interface - * @return a pointer to the created request processor object - */ - //IMPORT_C static MMmRequestProcessor* NewL( - // MMTPDataProviderFramework& aFramework, - // MMTPConnection& aConnection, - // CMmMtpDpMetadataAccessWrapper& aWrapper ); - - /** * Destructor */ IMPORT_C virtual ~CMoveObject(); @@ -56,8 +42,8 @@ * Standard c++ constructor */ IMPORT_C CMoveObject( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ); + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); /** * Second phase constructor @@ -71,34 +57,18 @@ */ IMPORT_C void ServiceL(); - // from CActive - IMPORT_C void RunL(); - - IMPORT_C TInt RunError( TInt aError ); - - protected: // new virtuals /** * Set MetaData to CMetadataAccessWrapper, for internal use - * @param aPropCode, specify property code of aMediaProp - * @param aNewData, object property value which will be get from - * aObjectMetaData - * @param aObjectMetaData, owner of the property which should be + * @param aPropCode, specify property code of an object + * @param aHandle, object handles of which the properties are needed + * @param aObject, owner of the properties which should be * inserted or updated into database - * @return response code */ - IMPORT_C TMTPResponseCode ServiceMetaDataToWrapper( const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObject ); - virtual void ServiceGetSpecificObjectPropertyL( TUint16 aPropCode, - TUint32 aHandle, - const CMTPObjectMetaData& aObject ) = 0; - - virtual TMTPResponseCode ServiceSetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) = 0; + TUint32 aHandle, + const CMTPObjectMetaData& aObject ) = 0; private: /** @@ -115,13 +85,13 @@ * move object operations * @return A valid MTP response code. */ - TMTPResponseCode MoveObjectL(); + void MoveObjectL(); /** * Check if we can move the file to the new location */ TMTPResponseCode CanMoveObjectL( const TDesC& aOldName, - const TDesC& aNewName ) const; + const TDesC& aNewName ) const; /** * Save the object properties before moving @@ -131,8 +101,7 @@ /** * Set the object properties after moving */ - - void SetPreviousPropertiesL( const CMTPObjectMetaData& aObject ); + void SetPreviousPropertiesL(); /** * A helper function of MoveObjectL. * @param aNewFileName the new file name after the object is moved. @@ -140,32 +109,9 @@ void MoveFileL( const TDesC& aNewFileName ); /** - * A helper function of MoveObjectL - */ - void MoveFolderL(); - - /* Move the objects through iterations of RunL. It currently move 20 objects - * at a time and the number can be adjusted by changing - * "KMoveObjectGranularity" - */ - TBool MoveOwnedObjectsL(); - - /** * Set the object properties in the object property store. */ - void SetPropertiesL( const TDesC& aOldFileName, - const TDesC& aNewFileName, - const CMTPObjectMetaData& aNewObject ); - - /* - * This function will actually delete the orginal folders from the file system. - */ - TMTPResponseCode FinalPhaseMove(); - - /* - * Generate the list of handles that need to be moved to the new location. - */ - void GenerateObjectHandleListL( TUint32 aParentHandle ); + void SetPropertiesL( const TDesC& aNewFileName ); /* * Move a single object and update the database @@ -179,17 +125,12 @@ CMTPTypeObjectPropList* iPropertyList; private: TBool iSameStorage; - CFileMan* iFileMan; - CMTPObjectMetaData* iObjectInfo; //Not owned. + CMTPObjectMetaData* iObjectInfo; // Not owned HBufC* iDest; - HBufC* iNewRootFolder; TUint32 iNewParentHandle; TUint32 iStorageId; TTime iPreviousModifiedTime; - HBufC* iPathToMove; - RArray iObjectHandles; - TInt iMoveObjectIndex; - TInt iNumberOfObjects; + }; #endif // CMOVEOBJCT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cpropertysettingutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/cpropertysettingutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,67 @@ +/* +* 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 CPROPERTYSETTINGUTILITY_H +#define CPROPERTYSETTINGUTILITY_H + +#include // TMTPResponseCode + +class MMmMtpDpConfig; +class MMTPType; +class CMTPObjectMetaData; +class CMTPTypeObjectPropListElement; + +class CPropertySettingUtility : public CBase + { +protected: + IMPORT_C CPropertySettingUtility(); + +public: + IMPORT_C virtual ~CPropertySettingUtility(); + +public: + /** + * Set metadata to database for processors which need set common property list + * @param aDpConfig, handler to get db access wrapper + * @param aPropCode, specify property code of aMediaProp + * @param aNewData, object property value which will be get from + * aObjectMetaData + * @param aObjectMetaData, owner of the property which should be + * inserted or updated into database + * @return response code + */ + IMPORT_C TMTPResponseCode SetMetaDataToWrapper( MMmMtpDpConfig& aDpConfig, + const TUint16 aPropCode, + MMTPType& aNewData, + const CMTPObjectMetaData& aObjectMetaData ); + + /** + * Interface to set metadata to database for dp specific objectproplist + * @param aDpConfig, handler to get db access wrapper + * @param aPropCode, specify property code of aMediaProp + * @param aObjectMetaData, owner of the property which should be + * inserted or updated into database + * @param aElement, property list element + */ + virtual TMTPResponseCode SetSpecificObjectPropertyL( MMmMtpDpConfig& aDpConfig, + TUint16 aPropCode, + const CMTPObjectMetaData& aObject, + const CMTPTypeObjectPropListElement& aElement ) = 0; + + }; + +#endif // CPROPERTYSETTINGUTILITY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crenameobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crenameobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crenameobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -22,7 +22,6 @@ // Forward declarations class MMTPDataProviderFramework; class CMmMtpDpMetadataAccessWrapper; -class MMTPObjectMgr; class CMTPObjectMetaData; class CRenameObject: public CActive @@ -92,6 +91,7 @@ private: CActiveSchedulerWait* iRenameWaiter; TUint32 iParentHandle; + }; #endif // CRENAMEOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestchecker.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestchecker.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestchecker.h Wed Jun 23 17:51:16 2010 +0100 @@ -19,11 +19,9 @@ #ifndef CREQUESTCHECKER_H #define CREQUESTCHECKER_H -#include -#include #include +#include -class CMTPObjectMetaData; class MMTPDataProviderFramework; class MMTPConnection; @@ -121,7 +119,7 @@ * @return a pointer to the created request checker object */ static CRequestChecker* NewL( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ); + MMTPConnection& aConnection ); /** * Destructor diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h Wed Jun 23 17:51:16 2010 +0100 @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -19,22 +19,24 @@ #ifndef CREQUESTPROCESSOR_H #define CREQUESTPROCESSOR_H -#include + +#include #include #include #include -#include + +// for derived processors +#include #include "crequestchecker.h" class MMTPConnection; class TMTPTypeRequest; -class CMTPDataProviderPlugin; class MMTPDataProviderFramework; class TMTPTypeEvent; class CMTPObjectInfo; -static const TInt KMmMtpRArrayGranularity = 2; +const TInt KMmMtpRArrayGranularity = 2; /** * Defines a request processor interface @@ -100,8 +102,8 @@ /* * Get the session id associated with current request object - * This interface was added to avoid the case that the data member iRequest - * was sometimes invalid in session close phase, and getting session id from + * This interface was added to avoid the case that the data member iRequest + * was sometimes invalid in session close phase, and getting session id from * request would cause panic * @return session id */ @@ -111,9 +113,8 @@ /** * Defines a processor factory function pointer */ -typedef MMmRequestProcessor - * (*TMTPRequestProcessorCreateFunc)( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ); +typedef MMmRequestProcessor* (*TMTPRequestProcessorCreateFunc)( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection ); /** * Defines an entry which maps from operation code to the request processor @@ -237,12 +238,13 @@ /* * Get the session id associated with current request object - * This interface was added to avoid the case that the data member iRequest - * was sometimes invalid in session close phase, and getting session id from + * This interface was added to avoid the case that the data member iRequest + * was sometimes invalid in session close phase, and getting session id from * request would cause panic * @return session id */ IMPORT_C TUint32 SessionId(); + protected: // from CActive /** @@ -261,7 +263,7 @@ IMPORT_C TInt RunError( TInt aError ); protected: - //new virtuals + // new virtuals /** * Handle the request phase of the current request * @return EFalse @@ -309,7 +311,6 @@ /** * Set P&S Status to avoid MPX access conflict */ - void SetPSStatus(); private: /** diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestunknown.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestunknown.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestunknown.h Wed Jun 23 17:51:16 2010 +0100 @@ -45,7 +45,7 @@ /** * Standard c++ constructor */ - IMPORT_C CRequestUnknown( MMTPDataProviderFramework& aFramework, + CRequestUnknown( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection ); protected: diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csendobject.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csendobject.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csendobject.h Wed Jun 23 17:51:16 2010 +0100 @@ -40,25 +40,37 @@ { public: /** + * Two-phase construction method + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aDpConfig Configuration of data provider + * @return The pointer to the created request processor object + */ + IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); + + /** * Destructor */ IMPORT_C virtual ~CSendObject(); protected: /** - * Standard C++ Constructor - * @param aFramework The data provider framework - * @param aConnection The connection from which the request comes - * @param aWrapper Medadata access interface + * Standard C++ construction method + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aDpConfig Configuration of data provider + * @return The pointer to the created request processor object */ - IMPORT_C CSendObject( MMTPDataProviderFramework& aFramework, + CSendObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); /** * 2nd Phase Constructor */ - IMPORT_C void ConstructL(); + void ConstructL(); protected: // from CRequestProcessor @@ -104,31 +116,6 @@ */ IMPORT_C void UsbDisconnect(); - // new protected function - /** - * Called by dp derived processor - */ - IMPORT_C TMTPResponseCode SetMetaDataToWrapperL( const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ); - -protected: - // new virtual functions - /** - * - */ - virtual TMTPResponseCode SetSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) = 0; - - /** - * Check datatypes for DP specific PropCodes - */ - virtual TMTPResponseCode CheckSepecificPropType( TUint16 aPropCode, TUint16 aDataType ) = 0; - - virtual TInt HandleSpecificWrapperError(TInt aError, - const CMTPObjectMetaData& aObject) = 0; - private: /** * Verify if the SendObject request comes after SendObjectInfo request @@ -186,7 +173,7 @@ /* * Handle response phase of SetObjectPropListL operation */ - TMTPResponseCode SetObjectPropListL( const CMTPTypeObjectPropList& aPropList ); + TMTPResponseCode SetObjectPropListL(); /** * @@ -197,13 +184,7 @@ * Check if the object is too large * @return ETrue if yes, otherwise EFalse */ - TBool IsTooLarge( TUint32 aObjectSize ) const; - - /** - * Check if we can store the file on the storage - * @return ETrue if yes, otherwise EFalse - */ - TBool CanStoreFileL( TUint32 aStorageId, TInt64 aObjectSize ) const; + TBool IsTooLarge( TUint64 aObjectSize ) const; /** * Get the full path name of the object to be saved @@ -221,12 +202,12 @@ /** * Reserve object information before SendObject */ - void ReserveObjectL(); + TInt ReserveObjectL(); /** * Set protection status of object which could be read/write-only */ - void SetProtectionStatusL(); + void SetProtectionStatus(); /** * Save object information of object whose size is zero @@ -240,10 +221,13 @@ void AddMediaToStoreL(); /** - * delete the file, which transfer incompletely + * Rollback functions */ void Rollback(); + void UnreserveObjectL(); + void RemoveObjectFromDbL(); + void RemoveObjectFromFs(); private: enum TMTPSendingObjectState @@ -257,6 +241,8 @@ ESendObjectFail }; + typedef void ( CSendObject::*TMmMtpRollbackAction )(); + private: RFs& iFs; MMTPObjectMgr& iObjectMgr; @@ -295,10 +281,11 @@ // params which is needed for reserve handle TMTPTypeRequest iExpectedSendObjectRequest; - TBool iNoRollback; + RArray iRollbackList; TUint32 iPreviousTransactionID; TUint32 iPreviousOperation; + }; #endif // CSENDOBJECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectproplist.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectproplist.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectproplist.h Wed Jun 23 17:51:16 2010 +0100 @@ -36,39 +36,47 @@ public: /** * Two-phase construction method - * @param aFramework, The data provider framework - * @param aConnection, The connection from which the request comes - * @param aWrapper medadata access interface - * @return a pointer to the created request processor object + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aDpConfig Configuration of data provider + * @return The pointer to the created request processor object */ - //IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, - // MMTPConnection& aConnection, - // CMmMtpDpMetadataAccessWrapper& aWrapper ); + IMPORT_C static MMmRequestProcessor* NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ); /** * Destructor */ IMPORT_C virtual ~CSetObjectPropList(); -protected: +private: /** * Standard c++ constructor - * @param aFramework The data provider framework - * @param aConnection The connection from which the request comes - * @param aWrapper medadata access interface + * @param aFramework The data provider framework + * @param aConnection The connection from which the request comes + * @param aDpConfig Configuration of data provider + * @return The pointer to the created request processor object */ - IMPORT_C CSetObjectPropList( MMTPDataProviderFramework& aFramework, + CSetObjectPropList( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); /** * 2nd Phase Constructor */ - IMPORT_C void ConstructL(); + void ConstructL(); protected: // from CRequestProcessor /** + * Verify the reqeust + * @return EMTPRespCodeOK if request is verified, otherwise one of + * the error response codes + */ + IMPORT_C TMTPResponseCode CheckRequestL(); + + /** * SetObjectPropList request handler */ IMPORT_C void ServiceL(); @@ -100,28 +108,6 @@ */ IMPORT_C TInt RunError( TInt aError ); -protected: - // new virtuals - /** - * Set MetaData to CMetadataAccessWrapper, for internal use - * @param aPropCode, specify property code of aMediaProp - * @param aNewData, object property value which will be get from - * aObjectMetaData - * @param aObjectMetaData, owner of the property which should be - * inserted or updated into database - * @return response code - */ - IMPORT_C TMTPResponseCode ServiceMetaDataToWrapperL( const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ); - - virtual TMTPResponseCode ServiceSpecificObjectPropertyL( TUint16 aPropCode, - const CMTPObjectMetaData& aObject, - const CMTPTypeObjectPropListElement& aElement ) = 0; - - virtual TInt HandleSpecificWrapperError( TInt aError, - const CMTPObjectMetaData& aObject) = 0; - private: /* * Handle response phase of SetObjectPropListL operation diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectpropvalue.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectpropvalue.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectpropvalue.h Wed Jun 23 17:51:16 2010 +0100 @@ -30,6 +30,7 @@ class CMTPObjectMetaData; class MMTPObjectMgr; class MMmMtpDpConfig; +class RFs; /** * Defines SetObjectPropValue request processor for common @@ -127,6 +128,7 @@ CMTPObjectMetaData* iObjectInfo; MMTPObjectMgr& iObjectMgr; MMmMtpDpConfig& iDpConfig; + RFs& iFs; }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectreferences.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectreferences.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/csetobjectreferences.h Wed Jun 23 17:51:16 2010 +0100 @@ -57,23 +57,16 @@ * @param aConnection The connection from which the request comes * @param aWrapper medadata access interface */ - IMPORT_C CSetObjectReferences( MMTPDataProviderFramework& aFramework, + CSetObjectReferences( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ); protected: /** * set references to DB - * @param aWrapper medadata access interface - * @param aObjectFormat the format of the file - * @param aSrcFileName file name, from - * @param aRefFileArray the array of file names, to + * @param aObject, the reference owner */ - IMPORT_C virtual void - DoSetObjectReferencesL( CMmMtpDpMetadataAccessWrapper& aWrapper, - TUint16 aObjectFormat, - const TDesC& aSrcFileName, - CDesCArray& aRefFileArray ); + void DoSetObjectReferencesL( const CMTPObjectMetaData& aObject ); private: //from CRequestProcessor diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -1,28 +1,25 @@ /* -* 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: Implement the operation: CopyObject -* -*/ - + * 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: Implement the operation: CopyObject + * + */ #include -#include #include #include #include -#include #include #include #include @@ -33,16 +30,17 @@ #include "mmmtpdputility.h" #include "mmmtpdpconfig.h" #include "cmmmtpdpmetadataaccesswrapper.h" +#include "cpropertysettingutility.h" /** -* Verification data for the CopyObject request -*/ + * Verification data for the CopyObject request + */ const TMTPRequestElementInfo KMTPCopyObjectPolicy[] = { { TMTPTypeRequest::ERequestParameter1, EMTPElementTypeObjectHandle, - EMTPElementAttrFileOrDir, + EMTPElementAttrFile, 0, 0, 0 @@ -74,14 +72,12 @@ { Cancel(); + delete iTargetObject; delete iDest; - delete iFileMan; - iObjectHandles.Close(); + if ( iPropertyElement ) delete iPropertyElement; delete iPropertyList; - delete iPathToCopy; - delete iNewRootFolder; } // ----------------------------------------------------------------------------- @@ -92,17 +88,28 @@ EXPORT_C CCopyObject::CCopyObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( aFramework, - aConnection, - sizeof ( KMTPCopyObjectPolicy ) / sizeof(TMTPRequestElementInfo), - KMTPCopyObjectPolicy ), - iDpConfig( aDpConfig ), - iObjectHandles( KMmMtpRArrayGranularity ) + CRequestProcessor( aFramework, + aConnection, + sizeof( KMTPCopyObjectPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPCopyObjectPolicy ), + iDpConfig( aDpConfig ), + iSourceObject( NULL ), + iTargetObject( NULL ) { PRINT( _L( "Operation: CopyObject(0x101A)" ) ); } // ----------------------------------------------------------------------------- +// CCopyObject::ConstructL +// Second phase constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C void CCopyObject::ConstructL() + { + iPropertyList = CMTPTypeObjectPropList::NewL(); + } + +// ----------------------------------------------------------------------------- // CCopyObject::ServiceL // CopyObject request handler // ----------------------------------------------------------------------------- @@ -110,223 +117,56 @@ EXPORT_C void CCopyObject::ServiceL() { PRINT( _L( "MM MTP => CCopyObject::ServiceL" ) ); - iHandle = KMTPHandleNone; - CopyObjectL( iHandle ); + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + CopyObjectL(); PRINT( _L( "MM MTP <= CCopyObject::ServiceL" ) ); } // ----------------------------------------------------------------------------- -// CCopyObject::ConstructL -// Second phase constructor -// ----------------------------------------------------------------------------- -// -EXPORT_C void CCopyObject::ConstructL() - { - CActiveScheduler::Add( this ); - - iPropertyList = CMTPTypeObjectPropList::NewL(); - - // Set the CenRep value of MTP status, - // also need to do in other processors which related to MPX - SetPSStatus(); - } - -// ----------------------------------------------------------------------------- -// CCopyObject::RunL -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CCopyObject::RunL() - { - PRINT( _L( "MM MTP => CCopyObject::RunL" ) ); - - if ( iCopyObjectIndex < iNumberOfObjects ) - { - CopyAndUpdateL( iObjectHandles[iCopyObjectIndex++] ); - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, iStatus.Int() ); - SetActive(); - } - else - { - PRINT1( _L( "MM MTP <> CCopyObject::RunL iHandle = 0x%x" ), iHandle ); - SendResponseL( EMTPRespCodeOK, 1, &iHandle ); - } - - PRINT( _L( "MM MTP <= CCopyObject::RunL" ) ); - } - -// ----------------------------------------------------------------------------- -// CCopyObject::CopyFileL -// A helper function of CopyObjectL -// ----------------------------------------------------------------------------- -// -TUint32 CCopyObject::CopyFileL( const TDesC& aNewFileName ) - { - const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); - PRINT2( _L( "MM MTP => CCopyObject::CopyFileL old name = %S, aNewFileName = %S" ), - &suid, - &aNewFileName ); - - GetPreviousPropertiesL( *iObjectInfo ); - User::LeaveIfError( iFileMan->Copy( suid, aNewFileName ) ); // iDest just folder - User::LeaveIfError( iFramework.Fs().SetModified( aNewFileName, iPreviousModifiedTime ) ); - TUint32 handle = UpdateObjectInfoL( suid, aNewFileName ); - - PRINT1( _L( "MM MTP <= CCopyObject::CopyFileL handle = 0x%x" ), handle ); - - return handle; - } - -// ----------------------------------------------------------------------------- -// CCopyObject::GenerateObjectHandleListL -// Generate the list of handles that need to be copied to the new location -// ----------------------------------------------------------------------------- -// -void CCopyObject::GenerateObjectHandleListL( TUint32 aParentHandle ) - { - PRINT1( _L( "MM MTP => CCopyObject::GenerateObjectHandleListL aParentHandle = 0x%x" ), - aParentHandle ); - RMTPObjectMgrQueryContext context; - RArray handles; - CleanupClosePushL( context ); // + context - CleanupClosePushL( handles ); // + handles - - TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll, - aParentHandle ); - do - { - iFramework.ObjectMgr().GetObjectHandlesL( params, context, handles ); - - TInt numberOfObjects = handles.Count(); - for ( TInt i = 0; i < numberOfObjects; i++ ) - { - if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == iFramework.DataProviderId() ) - { - iObjectHandles.AppendL( handles[i] ); - continue; - } - - // Folder - if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == 0 ) // We know that the device dp id is always 0, otherwise the whole MTP won't work. - { - GenerateObjectHandleListL( handles[i] ); - } - } - } - while ( !context.QueryComplete() ); - - CleanupStack::PopAndDestroy( &handles ); // - handles - CleanupStack::PopAndDestroy( &context ); // - context - PRINT( _L( "MM MTP <= CCopyObject::GenerateObjectHandleListL" ) ); - } - -// ----------------------------------------------------------------------------- -// CCopyObject::CopyFolderL -// A helper function of CopyObjectL -// ----------------------------------------------------------------------------- -// -TUint32 CCopyObject::CopyFolderL( const TDesC& aNewFolderName ) - { - PRINT1( _L( "MM MTP => CCopyObject::CopyFolderL aNewFolderName = %S" ), &aNewFolderName ); - TUint32 handle = iFramework.ObjectMgr().HandleL( aNewFolderName ); // just get it - - GenerateObjectHandleListL( iObjectInfo->Uint( CMTPObjectMetaData::EHandle ) ); - iCopyObjectIndex = 0; - iNumberOfObjects = iObjectHandles.Count(); - PRINT1( _L( "MM MTP <> CCopyObject::CopyFolderL iNumberOfObjects = %d" ), iNumberOfObjects ); - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, iStatus.Int() ); - SetActive(); - - PRINT1( _L( "MM MTP <= CCopyObject::CopyFolderL handle = 0x%x" ), handle ); - return handle; - } - -// ----------------------------------------------------------------------------- // CCopyObject::CopyObjectL // Copy object operation // ----------------------------------------------------------------------------- // -void CCopyObject::CopyObjectL( TUint32& aNewHandle ) +void CCopyObject::CopyObjectL() { PRINT( _L( "MM MTP => CCopyObject::CopyObjectL" ) ); + TMTPResponseCode responseCode = EMTPRespCodeOK; - aNewHandle = KMTPHandleNone; GetParametersL(); RBuf newObjectName; + newObjectName.CreateL( KMaxFileName ); newObjectName.CleanupClosePushL(); // + newObjectName - newObjectName.CreateL( KMaxFileName ); newObjectName = *iDest; - const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + const TDesC& suid( iSourceObject->DesC( CMTPObjectMetaData::ESuid ) ); TParsePtrC fileNameParser( suid ); + if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() ) + <= newObjectName.MaxLength() ) + { + newObjectName.Append( fileNameParser.NameAndExt() ); + responseCode = CanCopyObjectL( suid, newObjectName ); - // Check if the object is a folder or a file. - TBool isFolder = EFalse; - User::LeaveIfError( BaflUtils::IsFolder( iFramework.Fs(), suid, isFolder ) ); - - if ( !isFolder ) - { - if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() ) <= newObjectName.MaxLength() ) + TUint32 newHandle = KMTPHandleNone; + if ( responseCode == EMTPRespCodeOK ) { - newObjectName.Append( fileNameParser.NameAndExt() ); - } - responseCode = CanCopyObjectL( suid, newObjectName ); - } - else // It is a folder. - { - TFileName rightMostFolderName; - User::LeaveIfError( BaflUtils::MostSignificantPartOfFullName( suid, - rightMostFolderName ) ); - if ( ( newObjectName.Length() + rightMostFolderName.Length() + 1 ) <= newObjectName.MaxLength() ) - { - newObjectName.Append( rightMostFolderName ); - // Add backslash. - _LIT( KBackSlash, "\\" ); - newObjectName.Append( KBackSlash ); + newHandle = CopyFileL( newObjectName ); + SendResponseL( EMTPRespCodeOK, 1, &newHandle ); + PRINT2( _L( "MM MTP <= CCopyObject::CopyObjectL responseCode = 0x%x, aNewHandle = 0x%x" ), + responseCode, + newHandle ); } - } - - delete iNewRootFolder; - iNewRootFolder = NULL; - iNewRootFolder = newObjectName.AllocL(); - - if ( responseCode == EMTPRespCodeOK ) - { - delete iFileMan; - iFileMan = NULL; - iFileMan = CFileMan::NewL( iFramework.Fs() ); - - if ( !isFolder ) // It is a file. - { - aNewHandle = CopyFileL( newObjectName ); -// if ( responseCode == EMTPRespCodeOK ) - SendResponseL( EMTPRespCodeOK, 1, &aNewHandle ); -// else -// SendResponseL( responseCode ); - } - else // It is a folder. - { - delete iPathToCopy; - iPathToCopy = NULL; - iPathToCopy = suid.AllocL(); - PRINT1( _L( "MM MTP <> CCopyObject::CopyObjectL iPathToCopy = %S" ), iPathToCopy ); - aNewHandle = CopyFolderL( newObjectName ); - } + else + SendResponseL( responseCode ); } else - SendResponseL( responseCode ); + // Destination is not appropriate for the full path name shouldn't be longer than 255 + SendResponseL( EMTPRespCodeInvalidDataset ); CleanupStack::PopAndDestroy( &newObjectName ); // - newObjectName - PRINT2( _L( "MM MTP <= CCopyObject::CopyObjectL responseCode = 0x%x, aNewHandle = 0x%x" ), - responseCode, aNewHandle ); } // ----------------------------------------------------------------------------- @@ -337,37 +177,41 @@ void CCopyObject::GetParametersL() { PRINT( _L( "MM MTP => CCopyObject::GetParametersL" ) ); + __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) ); TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); iStorageId = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); - TUint32 parentObjectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter3 ); - PRINT3( _L( "MM MTP <> CCopyObject::GetParametersL Object Hanlde = 0x%x, StorageId = 0x%x, Parent Handle = 0x%x" ), - objectHandle, iStorageId, parentObjectHandle ); + iNewParentHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter3 ); + PRINT3( _L( "MM MTP <> CCopyObject::GetParametersL Object Handle = 0x%x, StorageId = 0x%x, Parent Handle = 0x%x" ), + objectHandle, + iStorageId, + iNewParentHandle ); // not taking owernship - iObjectInfo = iRequestChecker->GetObjectInfo( objectHandle ); - __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) ); + iSourceObject = iRequestChecker->GetObjectInfo( objectHandle ); + __ASSERT_DEBUG( iSourceObject, Panic( EMmMTPDpObjectNull ) ); - if ( parentObjectHandle == 0 ) + if ( iNewParentHandle == KMTPHandleNone ) { SetDefaultParentObjectL(); } else { - CMTPObjectMetaData* parentObjectInfo = iRequestChecker->GetObjectInfo( parentObjectHandle ); - __ASSERT_DEBUG( parentObjectInfo, Panic( EMmMTPDpObjectNull ) ); + CMTPObjectMetaData* parentObject = iRequestChecker->GetObjectInfo( iNewParentHandle ); + __ASSERT_DEBUG( parentObject, Panic( EMmMTPDpObjectNull ) ); + delete iDest; iDest = NULL; - iDest = parentObjectInfo->DesC( CMTPObjectMetaData::ESuid ).AllocL(); - iNewParentHandle = parentObjectHandle; + iDest = parentObject->DesC( CMTPObjectMetaData::ESuid ).AllocL(); + PRINT1( _L( "MM MTP <> CMoveObject::GetParametersL iDest = %S" ), iDest ); } PRINT( _L( "MM MTP <= CCopyObject::GetParametersL" ) ); } // ----------------------------------------------------------------------------- // CCopyObject::SetDefaultParentObjectL -// Get a default parent object, ff the request does not specify a parent object, +// Set a default destination, if the request does not specify a parent object, // ----------------------------------------------------------------------------- // void CCopyObject::SetDefaultParentObjectL() @@ -376,11 +220,11 @@ delete iDest; iDest = NULL; - iDest = ( iFramework.StorageMgr().StorageL( iStorageId ).DesC( - CMTPStorageMetaData::EStorageSuid ) ).AllocL(); - PRINT1( _L( "MM MTP <> CCopyObject::SetDefaultParentObjectL Destination location is %S" ), iDest ); + iDest = iFramework.StorageMgr().StorageL( iStorageId ).DesC( CMTPStorageMetaData::EStorageSuid ).AllocL(); + iNewParentHandle = KMTPHandleNoParent; - PRINT( _L( "MM MTP <= CCopyObject::SetDefaultParentObjectL" ) ); + + PRINT1( _L( "MM MTP <= CCopyObject::SetDefaultParentObjectL, iDest = %S" ), iDest ); } // ----------------------------------------------------------------------------- @@ -392,17 +236,18 @@ const TDesC& aNewName ) const { PRINT2( _L( "MM MTP => CCopyObject::CanCopyObjectL aOldName = %S, aNewName = %S" ), - &aOldName, &aNewName ); + &aOldName, + &aNewName ); TMTPResponseCode result = EMTPRespCodeOK; TEntry fileEntry; User::LeaveIfError( iFramework.Fs().Entry( aOldName, fileEntry ) ); - TDriveNumber drive( static_cast( iFramework.StorageMgr().DriveNumber( iStorageId ) ) ); + TInt drive = iFramework.StorageMgr().DriveNumber( iStorageId ); User::LeaveIfError( drive ); TVolumeInfo volumeInfo; User::LeaveIfError( iFramework.Fs().Volume( volumeInfo, drive ) ); - if ( volumeInfo.iFree < fileEntry.iSize ) + if ( volumeInfo.iFree < fileEntry.FileSize() ) { result = EMTPRespCodeStoreFull; } @@ -433,7 +278,7 @@ #endif } // This is used to keep the same behavior in mass storage and device file manager. - else if ( iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode ) + else if ( iSourceObject->Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeAbstractAudioVideoPlaylist ) { PRINT( _L( "MM MTP <> CCopyObject::CanCopyObjectL playlist file can't copy" ) ); @@ -445,38 +290,62 @@ } // ----------------------------------------------------------------------------- +// CCopyObject::CopyFileL +// A helper function of CopyFileL +// ----------------------------------------------------------------------------- +// +TUint32 CCopyObject::CopyFileL( const TDesC& aNewFileName ) + { + PRINT( _L( "MM MTP => CCopyObject::CopyFileL" ) ); + + GetPreviousPropertiesL(); + + // TODO: Need rollback mechanism for consistant with image dp in fw. + // Not sure if it should be trap if something wrong with MPX db. + TPtrC oldFileName( iSourceObject->DesC( CMTPObjectMetaData::ESuid ) ); + TUint32 handle = AddObjectToStoreL( oldFileName, aNewFileName ); + + // Only leave when getting proplist element from data received by fw. + // It should not happen after ReceiveDataL in which construction of proplist already succeed. + SetPreviousPropertiesL(); + + CFileMan* fileMan = CFileMan::NewL( iFramework.Fs() ); + User::LeaveIfError( fileMan->Copy( oldFileName, aNewFileName ) ); + delete fileMan; + fileMan = NULL; + + PRINT( _L( "MM MTP <= CCopyObject::CopyFileL" ) ); + return handle; + } + +// ----------------------------------------------------------------------------- // CCopyObject::GetPreviousPropertiesL // Save the object properties before doing the copy // ----------------------------------------------------------------------------- // -void CCopyObject::GetPreviousPropertiesL( const CMTPObjectMetaData& aObject ) +void CCopyObject::GetPreviousPropertiesL() { PRINT( _L( "MM MTP => CCopyObject::GetPreviousPropertiesL" ) ); - const TDesC& suid( aObject.DesC( CMTPObjectMetaData::ESuid ) ); - - User::LeaveIfError( iFramework.Fs().Modified( suid, iPreviousModifiedTime ) ); - - TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode ); + TUint formatCode = iSourceObject->Uint( CMTPObjectMetaData::EFormatCode ); const RArray* properties = iDpConfig.GetSupportedPropertiesL( formatCode ); TInt count = properties->Count(); - CMTPTypeString* textData = NULL; TInt err = KErrNone; TUint16 propCode; - TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle ) ; + TUint32 handle = iSourceObject->Uint( CMTPObjectMetaData::EHandle ); - if ( iPropertyElement ) + if ( iPropertyElement != NULL ) { delete iPropertyElement; iPropertyElement = NULL; } - + for ( TInt i = 0; i < count; i++ ) { - propCode = (*properties)[i]; + propCode = ( *properties )[i]; - switch( propCode ) + switch ( propCode ) { case EMTPObjectPropCodeStorageID: case EMTPObjectPropCodeObjectFormat: @@ -485,53 +354,51 @@ case EMTPObjectPropCodeObjectFileName: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: break; + case EMTPObjectPropCodeNonConsumable: + iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) ); + iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, + iSourceObject->Uint( CMTPObjectMetaData::ENonConsumable ) ); + break; + case EMTPObjectPropCodeName: case EMTPObjectPropCodeDateAdded: - if ( ( propCode == EMTPObjectPropCodeName ) - || ( ( !MmMtpDpUtility::IsVideoL( aObject.DesC( CMTPObjectMetaData::ESuid ), iFramework ) ) - && ( propCode == EMTPObjectPropCodeDateAdded ) ) ) - { - textData = CMTPTypeString::NewLC(); // + textData + case EMTPObjectPropCodeAlbumArtist: + { + CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData - TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( propCode, - *textData, - aObject ) ); + TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( propCode, + *textData, + *iSourceObject ) ); - PRINT1( _L( "MM MTP <> CCopyObject::GetPreviousPropertiesL::ServiceSpecificObjectPropertyL err = %d" ), err ); + PRINT1( _L( "MM MTP <> CCopyObject::GetPreviousPropertiesL err = %d" ), err ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL(handle, propCode)); - iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars()); -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( -// handle, propCode, *textData ); - } - else if ( err == KErrNotFound ) - { - iPropertyElement = NULL; - } - else - { - User::Leave( err ); - } + if ( err == KErrNone ) + { + iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) ); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, + textData->StringChars() ); + } + else + { + iPropertyElement = NULL; + } - CleanupStack::PopAndDestroy( textData ); // - textData - } + CleanupStack::PopAndDestroy( textData ); // - textData + } break; default: { - ServiceGetSpecificObjectPropertyL( propCode, handle, aObject ); + ServiceGetSpecificObjectPropertyL( propCode, handle, *iSourceObject ); } break; } - if ( iPropertyElement ) + if ( iPropertyElement != NULL ) { iPropertyList->CommitPropElemL( *iPropertyElement ); iPropertyElement = NULL; @@ -542,78 +409,29 @@ } // ----------------------------------------------------------------------------- -// CCopyObject::ServiceMetaDataToWrapper -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TMTPResponseCode CCopyObject::ServiceMetaDataToWrapper( - const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObject ) - { - TMTPResponseCode resCode = EMTPRespCodeOK; - - TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode, - aNewData, - aObject ) ); - - PRINT1( _L("MM MTP <> CCopyObject::ServiceMetaDataToWrapper err = %d"), err); - - if ( err == KErrNone ) - { - resCode = EMTPRespCodeOK; - } - else if ( err == KErrTooBig ) - // according to the codes of S60 - { - resCode = EMTPRespCodeInvalidDataset; - } - else if ( err == KErrPermissionDenied ) - { - resCode = EMTPRespCodeAccessDenied; - } - else if ( err == KErrNotFound ) - { - if ( MmMtpDpUtility::HasMetadata( aObject.Uint( CMTPObjectMetaData::EFormatCode ) ) ) - resCode = EMTPRespCodeAccessDenied; - else - resCode = EMTPRespCodeOK; - } - else - { - resCode = EMTPRespCodeGeneralError; - } - - PRINT1( _L("MM MTP <= CCopyObject::ServiceMetaDataToWrapper resCode = 0x%x"), resCode); - - return resCode; - } - -// ----------------------------------------------------------------------------- // CCopyObject::SetPreviousPropertiesL // Set the object properties after doing the copy // ----------------------------------------------------------------------------- // -void CCopyObject::SetPreviousPropertiesL( const CMTPObjectMetaData& aObject ) +void CCopyObject::SetPreviousPropertiesL() { PRINT( _L( "MM MTP => CCopyObject::SetPreviousPropertiesL" ) ); - const TInt count( iPropertyList->NumberOfElements() ); - PRINT1( _L( "MM MTP <> CCopyObject::SetPreviousPropertiesL count = %d" ), count ); + TMTPResponseCode respcode = EMTPRespCodeOK; - CMTPTypeString* stringData = NULL; + iPropertyList->ResetCursor(); + const TInt count = iPropertyList->NumberOfElements(); for ( TInt i = 0; i < count; i++ ) { CMTPTypeObjectPropListElement& element = iPropertyList->GetNextElementL(); - TUint32 handle = element.Uint32L( - CMTPTypeObjectPropListElement::EObjectHandle ); - TUint16 propertyCode = element.Uint16L( - CMTPTypeObjectPropListElement::EPropertyCode ); - TUint16 dataType = element.Uint16L( - CMTPTypeObjectPropListElement::EDatatype ); + TUint32 handle = element.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle ); + TUint16 propertyCode = element.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode ); + TUint16 dataType = element.Uint16L( CMTPTypeObjectPropListElement::EDatatype ); PRINT3( _L( "MM MTP <> CCopyObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ), - handle, propertyCode, dataType ); + handle, + propertyCode, + dataType ); switch ( propertyCode ) { @@ -624,21 +442,28 @@ case EMTPObjectPropCodeObjectFileName: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: case EMTPObjectPropCodeDateAdded: break; + case EMTPObjectPropCodeNonConsumable: + iTargetObject->SetUint( CMTPObjectMetaData::ENonConsumable, + element.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); + // should wait all property setting finished then insert object, or not? + // need to investigate if it will affect performance result + iFramework.ObjectMgr().ModifyObjectL( *iTargetObject ); + break; + case EMTPObjectPropCodeName: + case EMTPObjectPropCodeAlbumArtist: { - stringData = CMTPTypeString::NewLC( - element.StringL( - CMTPTypeObjectPropListElement::EValue)); // + stringData + CMTPTypeString *stringData = CMTPTypeString::NewLC( element.StringL( CMTPTypeObjectPropListElement::EValue ) ); // + stringData - respcode = ServiceMetaDataToWrapper( propertyCode, + respcode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapper( iDpConfig, + propertyCode, *stringData, - aObject ); + *iTargetObject ); CleanupStack::PopAndDestroy( stringData ); // - stringData } @@ -646,17 +471,19 @@ default: { - respcode = ServiceSetSpecificObjectPropertyL( propertyCode, - aObject, - element ); + respcode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig, + propertyCode, + *iTargetObject, + element ); } break; } } // end of for loop - if( respcode == EMTPRespCodeOK ) + // ignore errors + if ( respcode == EMTPRespCodeOK ) { - // do nothing, ignore warning + // do nothing, just to get rid of build warning } PRINT1( _L( "MM MTP <= CCopyObject::SetPreviousPropertiesL respcode = 0x%x" ), respcode ); @@ -667,168 +494,42 @@ // Update object info in the database // ----------------------------------------------------------------------------- // -TUint32 CCopyObject::UpdateObjectInfoL( const TDesC& aOldObjectName, const TDesC& aNewObjectName ) +TUint32 CCopyObject::AddObjectToStoreL( const TDesC& aOldObjectName, + const TDesC& aNewObjectName ) { - PRINT2( _L( "MM MTP => CCopyObject::UpdateObjectInfoL aOldObjectName = %S, aNewObjectName = %S" ), - &aOldObjectName, &aNewObjectName ); - // We should not modify this object's handle, so just get a "copy". - CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo - const TMTPTypeUint32 objectHandle( iObjectInfo->Uint( CMTPObjectMetaData::EHandle ) ); - if ( iFramework.ObjectMgr().ObjectL( objectHandle, *objectInfo) ) + PRINT2( _L( "MM MTP => CCopyObject::AddObjectToStoreL aOldObjectName = %S, aNewObjectName = %S" ), + &aOldObjectName, + &aNewObjectName ); + + iTargetObject = CMTPObjectMetaData::NewL(); + + // 1. Add new object into objectMgr db + iTargetObject->SetUint( CMTPObjectMetaData::EDataProviderId, iSourceObject->Uint( CMTPObjectMetaData::EDataProviderId ) ); + TUint formatCode = iSourceObject->Uint( CMTPObjectMetaData::EFormatCode ); + iTargetObject->SetUint( CMTPObjectMetaData::EFormatCode, formatCode ); + TUint subFormatCode = iSourceObject->Uint( CMTPObjectMetaData::EFormatSubCode ); + iTargetObject->SetUint( CMTPObjectMetaData::EFormatSubCode, subFormatCode ); + iTargetObject->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle ); + iTargetObject->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); + iTargetObject->SetDesCL( CMTPObjectMetaData::ESuid, aNewObjectName ); + iFramework.ObjectMgr().InsertObjectL( *iTargetObject ); + + // 2. Add new object into MPX db + iDpConfig.GetWrapperL().AddObjectL( *iTargetObject ); + + // 3. Set references into references db + if ( formatCode == EMTPFormatCodeM3UPlaylist ) { - objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewObjectName ); - objectInfo->SetUint( CMTPObjectMetaData::EParentHandle, - iNewParentHandle ); - // Modify storage Id. - objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); - iFramework.ObjectMgr().InsertObjectL( *objectInfo ); - } - else - { - User::Leave( KErrCorrupt ); + MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); + CDesCArray* references = referenceMgr.ReferencesLC( aOldObjectName ); // + references + referenceMgr.SetReferencesL( aNewObjectName, *references ); + CleanupStack::PopAndDestroy( references ); // - references } - TUint32 handle = objectInfo->Uint( CMTPObjectMetaData::EHandle ); - PRINT1( _L( "MM MTP <> CCopyObject::UpdateObjectInfoL handle = 0x%x" ), handle ); - SetPropertiesL( aOldObjectName, aNewObjectName, *objectInfo ); - CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo - PRINT( _L( "MM MTP <= CCopyObject::UpdateObjectInfoL" ) ); + TUint32 handle = iTargetObject->Uint( CMTPObjectMetaData::EHandle ); + + PRINT1( _L( "MM MTP <= CCopyObject::AddObjectToStoreL handle = 0x%x" ), handle ); return handle; } -// ----------------------------------------------------------------------------- -// CCopyObject::CopyAndUpdateL -// Move a single object and update the database -// ----------------------------------------------------------------------------- -// -void CCopyObject::CopyAndUpdateL( TUint32 aObjectHandle ) - { - PRINT1( _L( "MM MTP => CopyObject::CopyAndUpdateL aObjectHanlde = 0x%x" ), aObjectHandle ); - CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo - - if ( iFramework.ObjectMgr().ObjectL( aObjectHandle, *objectInfo ) ) - { - // This is used to keep the same behavior in mass storage and device file manager. - if ( objectInfo->Uint( CMTPObjectMetaData::EFormatCode ) - == EMTPFormatCodeAbstractAudioVideoPlaylist ) - { - PRINT( _L( "MM MTP <> CopyObject::CopyAndUpdateL Playlist file don't to be copieds" ) ); - CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo - return; - } - - RBuf fileName; // This is the source object name. - fileName.CleanupClosePushL(); // + fileName - fileName.CreateL( KMaxFileName ); - - RBuf oldFileName; - oldFileName.CleanupClosePushL(); // + oldFileName - oldFileName.CreateL( KMaxFileName ); - - RBuf rightPartName; - rightPartName.CleanupClosePushL(); // + rightPartName - rightPartName.CreateL( KMaxFileName ); - - fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); - oldFileName = fileName; - - rightPartName = fileName.Right( fileName.Length() - - iPathToCopy->Length() ); - - if ( ( iNewRootFolder->Length() + rightPartName.Length() ) > fileName.MaxLength() ) - { - User::Leave( KErrCorrupt ); - } - - fileName.Zero(); - fileName.Append( *iNewRootFolder ); - fileName.Append( rightPartName ); - PRINT1( _L( "MM MTP <> CopyAndUpdateL fileName = %S" ), &fileName ); - - if ( objectInfo->Uint( CMTPObjectMetaData::EDataProviderId ) - == iFramework.DataProviderId() ) - { - // should copy before the set metadata DB - GetPreviousPropertiesL( *objectInfo ); - TInt err = iFileMan->Copy( oldFileName, fileName ); - PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL err = %d" ), err ); - User::LeaveIfError( err ); - User::LeaveIfError( iFramework.Fs().SetModified( fileName, - iPreviousModifiedTime ) ); - - // Modify Suid - objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, fileName ); - - // Modify parentHandle - TParsePtrC parentSuid( fileName ); - PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL parentSuid = %S" ), &(parentSuid.DriveAndPath()) ); - - TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parentSuid.DriveAndPath() ); - objectInfo->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle ); - PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL parentHandle = 0x%x" ), parentHandle ); - - // Modify storage Id. - objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); - TRAP( err, iFramework.ObjectMgr().InsertObjectL( *objectInfo ) ); - if ( err != KErrNone ) - PRINT1( _L( "MM MTP <> CCopyObject::CopyAndUpdateL err = %d" ), err ); - // Set the properties of the new object - SetPropertiesL( oldFileName, fileName, *objectInfo ); - } - // Else this is not the owner of this object, so don't update the object store. - - CleanupStack::PopAndDestroy( &rightPartName ); // - rightPartName - CleanupStack::PopAndDestroy( &oldFileName ); // - oldFileName - CleanupStack::PopAndDestroy( &fileName ); // - fileName - } - else - { - User::Leave( KErrCorrupt ); - } - - CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo - - PRINT( _L( "MM MTP <= CopyObject::CopyAndUpdateL" ) ); - } - -// ----------------------------------------------------------------------------- -// CCopyObject::SetPropertiesL -// Set the object properties in the object property store -// ----------------------------------------------------------------------------- -// -void CCopyObject::SetPropertiesL( const TDesC& aOldFileName, - const TDesC& aNewFileName, - const CMTPObjectMetaData& aObject ) - { - PRINT( _L( "MM MTP => CCopyObject::SetPropertiesL" ) ); - // won't leave with KErrAlreadyExist - iDpConfig.GetWrapperL().AddObjectL( aNewFileName ); - - TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode ); - if ( formatCode == EMTPFormatCodeM3UPlaylist ) - { - MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); - CDesCArray* references = referenceMgr.ReferencesLC( aOldFileName ); // + references - referenceMgr.SetReferencesL( aNewFileName, *references ); - CleanupStack::PopAndDestroy( references ); // - references - } - - SetPreviousPropertiesL( aObject ); - PRINT( _L( "MM MTP <= CCopyObject::SetPropertiesL" ) ); - } - -// ----------------------------------------------------------------------------- -// CCopyObject::RunError -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CCopyObject::RunError( TInt aError ) - { - if ( aError != KErrNone ) - PRINT1( _L( "MM MTP <> CCopyObject::RunError aError = %d" ), aError ); - - TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) ); - return KErrNone; - } - // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,16 +16,17 @@ */ -#include #include -#include +#include #include "cdeleteobject.h" #include "mmmtpdplogger.h" #include "mmmtpdpconfig.h" #include "cmmmtpdpmetadataaccesswrapper.h" +#include "mmmtpdputility.h" -// static const TInt KMTPDriveGranularity = 5; +const TInt KMaxDeletionTimes = 10; +const TInt KDeletionThreshold = 100 * 1000; // (100 millisec) // ----------------------------------------------------------------------------- // Verification data for the DeleteObject request @@ -63,7 +64,6 @@ void CDeleteObject::ConstructL() { CActiveScheduler::Add( this ); - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -89,9 +89,7 @@ aConnection, sizeof( KMTPDeleteObjectPolicy ) / sizeof( TMTPRequestElementInfo ), KMTPDeleteObjectPolicy ), - iObjectMgr( aFramework.ObjectMgr() ), - iFs( aFramework.Fs() ), - iObjectsToDelete( KMmMtpRArrayGranularity ), + iObjectsToDelete( KMmMtpRArrayGranularity ), iDeleteError( KErrNone ), iDpConfig( aDpConfig ) { @@ -105,6 +103,8 @@ // EXPORT_C void CDeleteObject::ServiceL() { + MmMtpDpUtility::SetPSStatus( EMtpPSStatusActive ); + iObjectsToDelete.Reset(); iDeleteError = KErrNone; TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); @@ -126,7 +126,6 @@ { iIsMultiDelete = EFalse; // Not Owned the object - // TODO: need to check if this is best way and if it is applicable to other processors CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle ); if ( objectInfo->Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeAssociation ) @@ -191,9 +190,10 @@ CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo TUint32 handle = iObjectsToDelete[0]; - iObjectMgr.ObjectL( handle, *objectInfo ); - TFileName fileName( objectInfo->DesC( CMTPObjectMetaData::ESuid ) ); - PRINT2( _L( "MM MTP <> CDeleteObject::RunL delete object handle is 0x%x, fileName is %S" ), handle, &fileName ); + iFramework.ObjectMgr().ObjectL( handle, *objectInfo ); + PRINT2( _L( "MM MTP <> CDeleteObject::RunL delete object handle is 0x%x, fileName is %S" ), + handle, + &( objectInfo->DesC( CMTPObjectMetaData::ESuid ) ) ); if ( objectInfo->Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeAssociation ) { @@ -222,17 +222,14 @@ // void CDeleteObject::DeleteObjectL( const CMTPObjectMetaData& aObjectInfo ) { - TFileName fileName( aObjectInfo.DesC( CMTPObjectMetaData::ESuid ) ); + TPtrC fileName( aObjectInfo.DesC( CMTPObjectMetaData::ESuid ) ); PRINT1( _L( "MM MTP <> CDeleteObject::DeleteObjectL fileName = %S" ), &fileName ); - TParsePtrC parse( fileName ); - iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() ); - // To capture special situation: After copy, move, rename playlist folder name, // record in MPX is not inlined with framework db, playlist should not be deleted // until next session. // This is used to keep the same behavior in mass storage and device file manager. - if ( aObjectInfo.Uint(CMTPObjectMetaData::EFormatCode ) + if ( aObjectInfo.Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeAbstractAudioVideoPlaylist && !iDpConfig.GetWrapperL().IsExistL( fileName ) ) { @@ -243,26 +240,45 @@ // 1. Delete object from file system TEntry fileInfo; - iFs.Entry( fileName, fileInfo ); + iFramework.Fs().Entry( fileName, fileInfo ); if ( fileInfo.IsReadOnly() ) { iDeleteError = KErrAccessDenied; PRINT1( _L( "MM MTP <= CDeleteObject::DeleteObjectL, \"%S\" is a read-only file"), &fileName ); return; } - iDeleteError = iFs.Delete( fileName ); - if ( iDeleteError != KErrNone && iDeleteError != KErrNotFound ) + // Some other component might be holding on to the file (MDS background harvesting), + // try again after 100 millisec, up to 10 times, before give up + TInt count = KMaxDeletionTimes; + while ( count > 0 ) { - PRINT1( _L( "MM MTP <= CDeleteObject::DeleteObjectL, Delete from file system failed, err = %d" ), iDeleteError ); - return; + iDeleteError = iFramework.Fs().Delete( fileName ); + if ( iDeleteError == KErrNone || iDeleteError == KErrNotFound ) + { + break; + } + else if ( ( iDeleteError == KErrInUse ) && ( count > 1 ) ) + { + User::After( KDeletionThreshold ); + count--; + } + else + { + PRINT1( _L( "MM MTP <= CDeleteObject::DeleteObjectL, Delete from file system failed, err = %d" ), iDeleteError ); + return; + } } // 2. Delete object from metadata db - TRAP( iDeleteError, iDpConfig.GetWrapperL().DeleteObjectL( fileName, aObjectInfo.Uint( CMTPObjectMetaData::EFormatCode ) )); + TRAP( iDeleteError, iDpConfig.GetWrapperL().DeleteObjectL( aObjectInfo ) ); PRINT1( _L( "MM MTP <> CDeleteObject::DeleteObjectL, Delete from Media DB, err = %d" ), iDeleteError ); // 3. Delete object from framework db - iObjectMgr.RemoveObjectL( aObjectInfo.Uint( CMTPObjectMetaData::EHandle ) ); + iFramework.ObjectMgr().RemoveObjectL( aObjectInfo.Uint( CMTPObjectMetaData::EHandle ) ); + + // 4. If the object has references, Delete references from reference manager + if ( MmMtpDpUtility::HasReference( aObjectInfo.Uint( CMTPObjectMetaData::EFormatCode ) ) ) + iFramework.ReferenceMgr().RemoveReferencesL( aObjectInfo.DesC( CMTPObjectMetaData::ESuid ) ); PRINT( _L( "MM MTP <= CDeleteObject::DeleteObjectL" ) ); } @@ -298,10 +314,14 @@ { SendResponseL( EMTPRespCodePartialDeletion ); } - else if( !iIsMultiDelete && iDeleteError == KErrAccessDenied ) + else if ( !iIsMultiDelete && iDeleteError == KErrAccessDenied ) { SendResponseL( EMTPRespCodeObjectWriteProtected ); } + else if ( iDeleteError == KErrInUse ) + { + SendResponseL( EMTPRespCodeDeviceBusy ); + } else { SendResponseL( EMTPRespCodeAccessDenied ); @@ -342,7 +362,7 @@ else { CMTPObjectMetaData* objectInfo = CMTPObjectMetaData::NewLC(); // + objectInfo - iObjectMgr.ObjectL( handles[i], *objectInfo ); + iFramework.ObjectMgr().ObjectL( handles[i], *objectInfo ); if ( EMTPFormatCodeAssociation == objectInfo->Uint( CMTPObjectMetaData::EFormatCode ) ) { GetObjectHandlesL( KMTPStorageAll, handles[i] ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdescriptionutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdescriptionutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,229 @@ +/* +* 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 +#include +#include + +#include "cdescriptionutility.h" +#include "tobjectdescription.h" + +#include "mmmtpdplogger.h" + + +_LIT( KMtpObjDescObjFileName, + "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" ); +// RegEx is [a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 7}\.[[a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 2}]? + +EXPORT_C CDescriptionUtility::CDescriptionUtility() + { + // Do nothing + } + +EXPORT_C CDescriptionUtility::~CDescriptionUtility() + { + // Do nothing + } + +CMTPTypeObjectPropDesc* CDescriptionUtility::NewCommonObjectPropertyL( TUint16 aPropCode ) + { + CMTPTypeObjectPropDesc* propertyDesc = NULL; + + switch ( aPropCode ) + { + case EMTPObjectPropCodeStorageID: + case EMTPObjectPropCodeObjectFormat: + case EMTPObjectPropCodeObjectSize: + case EMTPObjectPropCodeParentObject: + case EMTPObjectPropCodePersistentUniqueObjectIdentifier: + case EMTPObjectPropCodeName: + case EMTPObjectPropCodeDateAdded: + case EMTPObjectPropCodeAlbumArtist: + propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode ); + break; + + // Protection Status (m) + case EMTPObjectPropCodeProtectionStatus: + propertyDesc = NewProtectionStatusPropDescL(); + break; + + // FileName + case EMTPObjectPropCodeObjectFileName: + propertyDesc = NewFileNamePropDescL(); + break; + + // Consumable (m) + case EMTPObjectPropCodeNonConsumable: + propertyDesc = NewNonConsumablePropDescL(); + break; + + case EMTPObjectPropCodeDateModified: // Date Modified + case EMTPObjectPropCodeDateCreated: // Date Created + { + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeString; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EDateTimeForm; + propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; + propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode, + propertyInfo, + NULL ); + } + break; + + default: + break; + } + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CDescriptionUtility::NewRangeFormDescriptionL +// +// ----------------------------------------------------------------------------- +// +EXPORT_C CMTPTypeObjectPropDesc* CDescriptionUtility::NewRangeFormDescriptionL( TUint16 aPropertyCode, + TUint32 aMinValue, + TUint32 aMaxValue, + TUint32 aStepValue, + TBool aIsReadOnly ) + { + PRINT1( _L( "MM MTP => CDescriptionUtility::NewRangeFormDescriptionL, aPropertyCode = 0x%x" ), + aPropertyCode ); + CMTPTypeObjectPropDescRangeForm* form = + CMTPTypeObjectPropDescRangeForm::NewLC( EMTPTypeUINT32 ); // + form + + // Set expected values + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMinimumValue, aMinValue ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EMaximumValue, aMaxValue ); + form->SetUint32L( CMTPTypeObjectPropDescRangeForm::EStepSize, aStepValue ); + + CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; + propertyInfo.iDataType = EMTPTypeUINT32; + propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::ERangeForm; + propertyInfo.iGetSet = !aIsReadOnly; + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropertyCode, + propertyInfo, + form ); // + propertyDesc + + CleanupStack::PopAndDestroy( form ); // - form + PRINT( _L( "MM MTP <= CDescriptionUtility::NewRangeFormDescriptionL" ) ); + + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CDescriptionUtility::GetGroupCode +// Get MTPTypeObjectPropDesc according to property code +// ----------------------------------------------------------------------------- +// +TUint32 CDescriptionUtility::GetGroupCode( TUint32 aPropCode ) + { + TInt count = sizeof( KPropGroupMapTable ) / sizeof( KPropGroupMapTable[0] ); + + for( TInt i = 0; i < count; i++ ) + { + if ( aPropCode == KPropGroupMapTable[i].iPropCode ) + return KPropGroupMapTable[i].iGroupCode; + } + return EGroupCodeNotDefined; + } + +// ----------------------------------------------------------------------------- +// CDescriptionUtility::NewProtectionStatusPropDescL +// New MTPTypeObjectPropDesc protection status +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CDescriptionUtility::NewProtectionStatusPropDescL() + { + PRINT( _L( "MM MTP => CDescriptionUtility::NewProtectionStatusPropDescL" ) ); + + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm + + TUint16 values[] = + { + EMTPProtectionNoProtection, + EMTPProtectionReadOnly + }; + + TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint16 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm ); + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CDescriptionUtility::NewProtectionStatusPropDescL" ) ); + return propertyDesc; + } + +// ----------------------------------------------------------------------------- +// CDescriptionUtility::NewFileNamePropDescL +// Get MTPTypeObjectPropDesc New file name +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CDescriptionUtility::NewFileNamePropDescL() + { + PRINT( _L( "MM MTP => CDescriptionUtility::NewFileNamePropDescL" ) ); + CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form + + CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName, + CMTPTypeObjectPropDesc::ERegularExpressionForm, + form ); + + CleanupStack::PopAndDestroy( form ); // - form + PRINT( _L( "MM MTP <= CDescriptionUtility::NewFileNamePropDescL" ) ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CDescriptionUtility::NewFileNamePropDescL +// Get MTPTypeObjectPropDesc New file name +// ----------------------------------------------------------------------------- +// +CMTPTypeObjectPropDesc* CDescriptionUtility::NewNonConsumablePropDescL() + { + PRINT( _L( "MM MTP => CDescriptionUtility::NewNonConsumablePropDescL" ) ); + CMTPTypeObjectPropDescEnumerationForm* expectedForm = + CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm + TUint8 values[] = + { + EMTPConsumable, + EMTPNonConsumable + }; + + TInt numValues = sizeof ( values ) / sizeof ( values[0] ); + for ( TInt i = 0; i < numValues; i++ ) + { + TMTPTypeUint8 data( values[i] ); + expectedForm->AppendSupportedValueL( data ); + } + + CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable, + CMTPTypeObjectPropDesc::EEnumerationForm, + expectedForm ); + CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm + + PRINT( _L( "MM MTP <= CDescriptionUtility::NewNonConsumablePropDescL" ) ); + return ret; + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetformatcapabilities.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -11,50 +11,63 @@ * * Contributors: * -* Description: +* Description: * */ #include #include -#include -#include -#include - #include "cgetformatcapabilities.h" -#include "mmmtpdplogger.h" +#include "cdescriptionutility.h" #include "mmmtpdpconfig.h" -#include "tobjectdescription.h" +#include "mmmtpdplogger.h" -_LIT( KMtpObjDescObjFileName, "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" ); +// ----------------------------------------------------------------------------- +// CGetFormatCapabilities::NewL +// Constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C MMmRequestProcessor* CGetFormatCapabilities::NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) + { + CGetFormatCapabilities* self = new ( ELeave ) CGetFormatCapabilities( aFramework, aConnection, aDpConfig ); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } // ----------------------------------------------------------------------------- // CGetFormatCapabilities::CGetFormatCapabilities // Standard c++ constructor // ----------------------------------------------------------------------------- // -EXPORT_C CGetFormatCapabilities::CGetFormatCapabilities( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( aFramework, aConnection, 0, NULL ), - iDpConfig( aDpConfig ) +CGetFormatCapabilities::CGetFormatCapabilities( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) : + CRequestProcessor( aFramework, aConnection, 0, NULL ), + iDpConfig( aDpConfig ) { PRINT( _L( "Operation: CGetFormatCapabilities(0x930A)" ) ); } // ----------------------------------------------------------------------------- // CGetFormatCapabilities::ConstructL -// Second phase constructor +// The second phase constructor // ----------------------------------------------------------------------------- // -EXPORT_C void CGetFormatCapabilities::ConstructL() +void CGetFormatCapabilities::ConstructL() { + // Do nothing } // ----------------------------------------------------------------------------- // CGetFormatCapabilities::~CGetFormatCapabilities -// Second phase constructor +// Destructor // ----------------------------------------------------------------------------- // EXPORT_C CGetFormatCapabilities::~CGetFormatCapabilities() @@ -91,7 +104,7 @@ } } - PRINT1( _L( "MM MTP <= CGetFormatCapabilities::CheckRequestL, response = 0x%X" ), response ); + PRINT1( _L( "MM MTP <= CGetFormatCapabilities::CheckRequestL, response = 0x%x" ), response ); return response; } @@ -108,7 +121,6 @@ iCapabilityList = NULL; iCapabilityList = CMTPTypeFormatCapabilityList::NewL(); - iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); if ( KMTPFormatsAll == iFormatCode ) { @@ -117,102 +129,55 @@ for( TInt i = 0; i < count; i++ ) { PRINT( _L( "MM MTP <> CGetFormatCapabilities::ServiceL, KMTPFormatsAll!!!" ) ); + iFormatCode = ( *formatArray )[i]; - ServiceInterdepentPropDescL(); - CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( iFormatCode, iInterdependentPropDesc ); - const RArray* propertiesArray = iDpConfig.GetSupportedPropertiesL( iFormatCode ); - TInt num = propertiesArray->Count(); - for( TInt j = 0;j < num; j++ ) - { - CMTPTypeObjectPropDesc* propertyDesc = ServicePropDescL( (*propertiesArray)[j] ); - if ( propertyDesc != NULL ) - { - frmCap->AppendL( propertyDesc ); - } - }//end for j - iCapabilityList->AppendL( frmCap ); - }//end for i - }//end if + ServiceOneFormatCapabilitiesL( iFormatCode ); + } + } else - { - ServiceInterdepentPropDescL(); - PRINT1( _L( "MM MTP <> CGetFormatCapabilities::ServiceL, ONLY one Format!!! formatCode = 0x%X" ), iFormatCode ); - - CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( iFormatCode, iInterdependentPropDesc ); - const RArray* propertiesArray = iDpConfig.GetSupportedPropertiesL( iFormatCode ); - TInt num = propertiesArray->Count(); - for( TInt j = 0;j < num; j++ ) - { - CMTPTypeObjectPropDesc* propertyDesc = ServicePropDescL( ( *propertiesArray )[j] ); - if ( propertyDesc != NULL ) - { - frmCap->AppendL( propertyDesc ); - } - }//end for j - iCapabilityList->AppendL( frmCap ); - } + ServiceOneFormatCapabilitiesL( iFormatCode ); SendDataL( *iCapabilityList ); PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceL" ) ); } +void CGetFormatCapabilities::ServiceOneFormatCapabilitiesL( TUint aFormatCode ) + { + CMTPTypeInterdependentPropDesc* interdependentPropDesc = iDpConfig.DescriptionUtility()->NewInterdepentPropDescL( iDpConfig, aFormatCode ); + CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewL( aFormatCode, interdependentPropDesc ); + + const RArray* properties = iDpConfig.GetSupportedPropertiesL( aFormatCode ); + TInt num = properties->Count(); + for ( TInt i = 0; i < num; i++ ) + { + CMTPTypeObjectPropDesc* propertyDesc = ServiceOnePropDescL( ( *properties )[i] ); + if ( propertyDesc != NULL ) + { + frmCap->AppendL( propertyDesc ); + } + } + iCapabilityList->AppendL( frmCap ); + } + // ----------------------------------------------------------------------------- // CGetFormatCapabilities::ServicePropDescL // Get MTPTypeObjectPropDesc according to property code // ----------------------------------------------------------------------------- // -CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServicePropDescL( TUint16 aPropCode ) +CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceOnePropDescL( TUint16 aPropCode ) { - PRINT1( _L( "MM MTP => CGetFormatCapabilities::ServicePropDescL, aPropCode = 0x%X" ), aPropCode ); - // implement just like what we did in CGetpropertyDescc::ServiceL - CMTPTypeObjectPropDesc* propertyDesc; - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - - /* Create new PropDesc object to return to device - m - signals only limited supported values - hence these requests require the expected form - variable to be passed into the NewL contstuctor as well */ - switch( aPropCode ) - { - case EMTPObjectPropCodeStorageID: // Storage ID - case EMTPObjectPropCodeObjectFormat: // Format Code - case EMTPObjectPropCodeObjectSize: // Object Size - case EMTPObjectPropCodeParentObject: // Parent Object - case EMTPObjectPropCodePersistentUniqueObjectIdentifier: // Unique Object Identifier - case EMTPObjectPropCodeName: // Name - case EMTPObjectPropCodeDateAdded: // Date Added - propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode ); - break; + PRINT1( _L( "MM MTP => CGetFormatCapabilities::ServicePropDescL, aPropCode = 0x%x" ), aPropCode ); - // Protection Status (m) - case EMTPObjectPropCodeProtectionStatus: - propertyDesc = ServiceProtectionStatusL(); - break; - - // FileName - case EMTPObjectPropCodeObjectFileName: - propertyDesc = ServiceFileNameL(); - break; + // implement just like what we did in CGetpropertyDescc::ServiceL + CMTPTypeObjectPropDesc* propertyDesc = + iDpConfig.DescriptionUtility()->NewCommonObjectPropertyL( aPropCode ); - // Consumable (m) - case EMTPObjectPropCodeNonConsumable: - propertyDesc = ServiceNonConsumableL(); - break; + if ( propertyDesc == NULL ) + propertyDesc = iDpConfig.DescriptionUtility()->NewSpecificPropDescL( iFormatCode, aPropCode ); - case EMTPObjectPropCodeDateModified: // Date Modified - case EMTPObjectPropCodeDateCreated: // Date Created - propertyInfo.iDataType = EMTPTypeString; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EDateTimeForm; - propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; - propertyDesc = CMTPTypeObjectPropDesc::NewL( aPropCode, propertyInfo, NULL); - break; - - default: - propertyDesc = ServiceSpecificPropertyDescL( aPropCode ); - break; - } if ( propertyDesc != NULL ) { - TUint32 groupCode = GetGroupCode( aPropCode ); + TUint32 groupCode = iDpConfig.DescriptionUtility()->GetGroupCode( aPropCode ); propertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode ); } @@ -221,108 +186,4 @@ return propertyDesc; } -// ----------------------------------------------------------------------------- -// CGetFormatCapabilities::GetGroupCode -// Get MTPTypeObjectPropDesc according to property code -// ----------------------------------------------------------------------------- -// -TUint32 CGetFormatCapabilities::GetGroupCode( TUint32 aPropCode ) - { - TInt count = sizeof( KPropGroupMapTable ); - // TODO: if need to refine the search approach to improve performance - for( TInt i = 0; i < count; i++ ) - { - if ( aPropCode == KPropGroupMapTable[i].iPropCode ) - return KPropGroupMapTable[i].iGroupCode; - } - return EGroupCodeNotDefined; - } - -// ----------------------------------------------------------------------------- -// CGetFormatCapabilities::ServiceProtectionStatusL -// Get MTPTypeObjectPropDesc protection status -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceProtectionStatusL() - { - PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceProtectionStatusL" ) ); - - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT16 ); // + expectedForm - - TUint16 values[] = - { - EMTPProtectionNoProtection, - EMTPProtectionReadOnly - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc* propertyDesc = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceProtectionStatusL" ) ); - return propertyDesc; - } - -// ----------------------------------------------------------------------------- -// CGetFormatCapabilities::ServiceFileNameL -// Get MTPTypeObjectPropDesc service file name -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceFileNameL() - { - PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceFileNameL" ) ); - CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form - - CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName, - CMTPTypeObjectPropDesc::ERegularExpressionForm, - form ); - - CleanupStack::PopAndDestroy( form ); // - form - PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceFileNameL" ) ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CGetFormatCapabilities::ServiceFileNameL -// Get MTPTypeObjectPropDesc service file name -// ----------------------------------------------------------------------------- -// -CMTPTypeObjectPropDesc* CGetFormatCapabilities::ServiceNonConsumableL() - { - PRINT( _L( "MM MTP => CGetFormatCapabilities::ServiceNonConsumableL" ) ); - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewLC( EMTPTypeUINT8 ); // + expectedForm - TUint8 values[] = - { - EMTPConsumable, - EMTPNonConsumable - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ); - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint8 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeUINT8; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; - CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable, - propertyInfo, - expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - - PRINT( _L( "MM MTP <= CGetFormatCapabilities::ServiceNonConsumableL" ) ); - return ret; - } - // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetinterdependentpropdesc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetinterdependentpropdesc.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,132 @@ +/* +* 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: Implement the operation: GetInterdenpendentPropDesc +* +*/ + +#include + +#include "cgetinterdependentpropdesc.h" +#include "mmmtpdplogger.h" +#include "mmmtpdpconfig.h" +#include "cdescriptionutility.h" + +// ----------------------------------------------------------------------------- +// CGetInterdependentPropDesc::NewL +// Destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C MMmRequestProcessor* CGetInterdependentPropDesc::NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) + { + CGetInterdependentPropDesc* self = new ( ELeave ) CGetInterdependentPropDesc( aFramework, aConnection, aDpConfig ); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + +// ----------------------------------------------------------------------------- +// CGetInterdependentPropDesc::~CGetInterdependentPropDesc +// Destructor +// ----------------------------------------------------------------------------- +// +EXPORT_C CGetInterdependentPropDesc::~CGetInterdependentPropDesc() + { + delete iDataset; + iDataset = NULL; + } + +// ----------------------------------------------------------------------------- +// CMTPGetInterDependentPropDesc::CMTPGetInterDependentPropDesc +// Standard c++ constructor +// ----------------------------------------------------------------------------- +// +CGetInterdependentPropDesc::CGetInterdependentPropDesc( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) : + CRequestProcessor( aFramework, aConnection, 0, NULL ), + iDpConfig( aDpConfig ) + { + PRINT( _L( "Operation: GetInterdependentPropDesc(0x9807)" ) ); + } + +// ----------------------------------------------------------------------------- +// CMediaDpMtpGetInterDependentPropDesc::ConstructL +// Two-phase construction method +// ----------------------------------------------------------------------------- +// +void CGetInterdependentPropDesc::ConstructL() + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CGetInterdependentPropDesc::CheckRequestL +// Verify the reqeust and returns it +// ----------------------------------------------------------------------------- +// +EXPORT_C TMTPResponseCode CGetInterdependentPropDesc::CheckRequestL() + { + PRINT( _L( "MM MTP => CGetInterdependentPropDesc::CheckRequestL" ) ); + + TMTPResponseCode responseCode = CRequestProcessor::CheckRequestL(); + iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); + + // check if it is what dp supported + responseCode = EMTPRespCodeInvalidObjectFormatCode; + + const RArray* format = iDpConfig.GetSupportedFormat(); + TInt count = format->Count(); + + for ( TInt i = 0; i < count; i++ ) + { + if ( iFormatCode == ( *format )[i] ) + { + responseCode = EMTPRespCodeOK; + break; + } + } + + // Clear the data set. + delete iDataset; + iDataset = NULL; + + PRINT2( _L( "MM MTP <= CGetInterdependentPropDesc::CheckRequestL, iFormatCode = 0x%x, responseCode = 0x%x" ), + iFormatCode, + responseCode ); + + return responseCode; + } + +// ----------------------------------------------------------------------------- +// CGetInterdependentPropDesc::ServiceL +// service a request at request phase +// ----------------------------------------------------------------------------- +// +EXPORT_C void CGetInterdependentPropDesc::ServiceL() + { + PRINT( _L( "MM MTP => CGetInterdependentPropDesc::ServiceL" ) ); + + iDataset = iDpConfig.DescriptionUtility()->NewInterdepentPropDescL( iDpConfig, iFormatCode ); + + // Send the dataset. + SendDataL( *iDataset ); + PRINT( _L( "MM MTP <= CGetInterdependentPropDesc::ServiceL" ) ); + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,11 +16,10 @@ */ -#include -#include #include #include "cgetobject.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" // ----------------------------------------------------------------------------- @@ -62,7 +61,6 @@ // void CGetObject::ConstructL() { - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -84,12 +82,11 @@ // CGetObject::CGetObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection ) : - CRequestProcessor( aFramework, - aConnection, - sizeof( KMTPGetObjectPolicy ) / sizeof( TMTPRequestElementInfo ), - KMTPGetObjectPolicy ), - iFs( iFramework.Fs() ), - iError( EMTPRespCodeOK ) + CRequestProcessor( aFramework, + aConnection, + sizeof( KMTPGetObjectPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPGetObjectPolicy ), + iError( EMTPRespCodeOK ) { PRINT( _L( "Operation: GetObject(0x1009)" ) ); } @@ -102,6 +99,8 @@ void CGetObject::ServiceL() { PRINT( _L( "MM MTP => CGetObject::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); // Get the objectinfo TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); @@ -141,7 +140,7 @@ // Create the file object delete iFileObject; iFileObject = NULL; - iFileObject = CMTPTypeFile::NewL( iFs, aFileName, EFileRead ); + iFileObject = CMTPTypeFile::NewL( iFramework.Fs(), aFileName, EFileRead ); PRINT( _L( "MM MTP <= CGetObject::GetObjectL" ) ); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include @@ -26,9 +25,8 @@ #include "tmmmtpdppanic.h" #include "mmmtpdplogger.h" #include "mmmtpdpconfig.h" +#include "tobjectdescription.h" -_LIT( KMtpDateTimeFormat, "%F%Y%M%DT%H%T%S" ); -const TInt KMtpMaxDateTimeStringLength = 15; // ----------------------------------------------------------------------------- // Verification data for GetObjectInfo request @@ -98,8 +96,6 @@ EXPORT_C void CGetObjectInfo::ConstructL() { CActiveScheduler::Add( this ); - - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -110,6 +106,8 @@ void CGetObjectInfo::ServiceL() { PRINT( _L( "MM MTP => CGetObjectInfo::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); delete iObjectInfo; iObjectInfo = NULL; @@ -164,7 +162,7 @@ TUint32 width(0); TUint32 height(0); TInt err = KErrNone; - TRAP( err, iDpConfig.GetWrapperL().GetImageObjPropL( suid, width, height ) ); + TRAP( err, iDpConfig.GetWrapperL().GetImageObjPropL( *object, width, height ) ); if( err != KErrNone ) PRINT1( _L( "MM MTP <> CGetObjectInfo::BuildObjectInfoL TRAP iWrapper.GetImageObjPropL err = %d" ), err ); @@ -188,11 +186,9 @@ TParsePtrC parse( suid ); iObjectInfo->SetStringL( CMTPTypeObjectInfo::EFilename, parse.NameAndExt() ); - TTime dataModified; - dataModified = MmMtpDpUtility::GetObjectDateModifiedL( iFramework.Fs(), suid ); + TBuf date; + MmMtpDpUtility::GetObjectDateModifiedL( iFramework.Fs(), suid, date ); - TBuf date; - dataModified.FormatL( date, KMtpDateTimeFormat ); PRINT1( _L( "MM MTP <> CGetObjectInfo::BuildObjectInfo date is %S" ), &date ); // Date Created diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropdesc.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropdesc.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropdesc.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -11,22 +11,35 @@ * * Contributors: * -* Description: Implement operation: GetObjectPropDesc +* Description: Request processor which handle common property description * */ - #include -#include #include "cgetobjectpropdesc.h" +#include "cdescriptionutility.h" +#include "mmmtpdpconfig.h" #include "tmmmtpdppanic.h" #include "mmmtpdplogger.h" -#include "tobjectdescription.h" -#include "mmmtpdpconfig.h" -_LIT( KMtpObjDescObjFileName, "[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 7}\\.[[a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~][a-zA-Z!#\\$%&'\\(\\)\\-0-9@\\^_\\`\\{\\}\\~ ]{0, 2}]?" ); -// RegEx is [a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 7}\.[[a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~][a-zA-Z!#\$%&'\(\)\-0-9@\^_\`\{\}\~ ]{0, 2}]? +// ----------------------------------------------------------------------------- +// CGetObjectPropDesc::NewL +// Constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C MMmRequestProcessor* CGetObjectPropDesc::NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) + { + CGetObjectPropDesc* self = new ( ELeave ) CGetObjectPropDesc( aFramework, aConnection, aDpConfig ); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } // ----------------------------------------------------------------------------- // CGetObjectPropDesc::~CGetObjectPropDesc @@ -35,7 +48,8 @@ // EXPORT_C CGetObjectPropDesc::~CGetObjectPropDesc() { - delete iObjectProperty; + delete iPropertyDesc; + iPropertyDesc = NULL; } // ----------------------------------------------------------------------------- @@ -43,24 +57,24 @@ // Standard c++ constructor // ----------------------------------------------------------------------------- // -EXPORT_C CGetObjectPropDesc::CGetObjectPropDesc( MMTPDataProviderFramework& aFramework, +CGetObjectPropDesc::CGetObjectPropDesc( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( aFramework, aConnection, 0, NULL ), - iObjectProperty( NULL ), - iDpConfig( aDpConfig ) + CRequestProcessor( aFramework, aConnection, 0, NULL ), + iDpConfig( aDpConfig ), + iPropertyDesc( NULL ) { PRINT( _L( "Operation: GetObjectPropDesc(0x9802)" ) ); } // ----------------------------------------------------------------------------- // CGetObjectPropDesc::ConstructL -// Second phase constructor +// The second phase constructor // ----------------------------------------------------------------------------- // -EXPORT_C void CGetObjectPropDesc::ConstructL() +void CGetObjectPropDesc::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -72,6 +86,12 @@ { TMTPResponseCode response = CRequestProcessor::CheckRequestL(); + iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); + iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); + PRINT2( _L( "MM MTP <> CGetObjectPropDesc::CheckPropCode, propCode = 0x%x, iFormatCode = 0x%x" ), + iPropCode, + iFormatCode ); + if ( response == EMTPRespCodeOK ) { response = CheckFormatL(); @@ -87,203 +107,22 @@ } // ----------------------------------------------------------------------------- -// CGetObjectPropDesc::ServiceL -// GetObjectPropDesc request handler -// ----------------------------------------------------------------------------- -// -EXPORT_C void CGetObjectPropDesc::ServiceL() - { - PRINT( _L( "MM MTP => CGetObjectPropDesc::ServiceL" ) ); - delete iObjectProperty; - iObjectProperty = NULL; - - TUint32 propCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); - iFormatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); - PRINT2( _L( "MM MTP <> CGetObjectPropDesc::ServiceL propCode = 0x%x, iFormatCode = 0x%x" ), - propCode, - iFormatCode ); - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - - /* Create new PropDesc object to return to device - m - signals only limited supported values - hence these requests require the expected form - variable to be passed into the NewL contstuctor as well */ - switch ( propCode ) - { - case EMTPObjectPropCodeStorageID: // Storage ID - case EMTPObjectPropCodeObjectFormat: // Format Code - case EMTPObjectPropCodeObjectSize: // Object Size - case EMTPObjectPropCodeParentObject: // Parent Object - case EMTPObjectPropCodePersistentUniqueObjectIdentifier: // Unique Object Identifier - case EMTPObjectPropCodeName: // Name - case EMTPObjectPropCodeDateAdded: // Date Added - iObjectProperty = CMTPTypeObjectPropDesc::NewL( propCode ); - break; - - // Protection Status (m) - case EMTPObjectPropCodeProtectionStatus: - ServiceProtectionStatusL(); - break; - - // FileName - case EMTPObjectPropCodeObjectFileName: - ServiceFileNameL(); - break; - - // Consumable (m) - case EMTPObjectPropCodeNonConsumable: - ServiceNonConsumableL(); - break; - - case EMTPObjectPropCodeDateModified: // Date Modified - case EMTPObjectPropCodeDateCreated: // Date Created - propertyInfo.iDataType = EMTPTypeString; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EDateTimeForm; - propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; - iObjectProperty = CMTPTypeObjectPropDesc::NewL( propCode, propertyInfo, NULL); - break; - - // Error - Should be caught by CheckRequestL - default: - ServiceSpecificObjectPropertyL( propCode ); - break; - } - - // Set group code - TUint32 groupCode = GetGroupCode( propCode ); - PRINT1( _L("MM MTP <> CGetObjectPropDesc::ServiceL, groupCode = 0x%x"), groupCode ); - iObjectProperty->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode ); - - __ASSERT_DEBUG( iObjectProperty, Panic( EMmMTPDpObjectPropertyNull ) ); - - SendDataL( *iObjectProperty ); - - PRINT( _L( "MM MTP <= CGetObjectPropDesc::ServiceL" ) ); - } - -// ----------------------------------------------------------------------------- -// CGetObjectPropDesc::ServiceProtectionStatusL -// Create list of possible protection status and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CGetObjectPropDesc::ServiceProtectionStatusL() - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT16 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - - TUint16 values[] = - { - EMTPProtectionNoProtection, - EMTPProtectionReadOnly - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ) ; - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint16 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeProtectionStatus, *expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - -// ----------------------------------------------------------------------------- -// CGetObjectPropDesc::ServiceFileNameL() -// Create Regular expression for a file name and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CGetObjectPropDesc::ServiceFileNameL() - { - CMTPTypeString* form = CMTPTypeString::NewLC( KMtpObjDescObjFileName ); // + form - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeObjectFileName, - CMTPTypeObjectPropDesc::ERegularExpressionForm, - form ); - - CleanupStack::PopAndDestroy( form ); // - form - } - -// ----------------------------------------------------------------------------- -// CGetObjectPropDesc::ServiceNonConsumableL -// Create list of possible nonConsumable values and create new ObjectPropDesc -// ----------------------------------------------------------------------------- -// -void CGetObjectPropDesc::ServiceNonConsumableL() - { - CMTPTypeObjectPropDescEnumerationForm* expectedForm = - CMTPTypeObjectPropDescEnumerationForm::NewL( EMTPTypeUINT8 ); - CleanupStack::PushL( expectedForm ); // + expectedForm - TUint8 values[] = - { - EMTPConsumable, - EMTPNonConsumable - }; - - TInt numValues = sizeof ( values ) / sizeof ( values[0] ); - for ( TInt i = 0; i < numValues; i++ ) - { - TMTPTypeUint8 data( values[i] ); - expectedForm->AppendSupportedValueL( data ); - } - - // Althrough iObjectProperty is released in ServiceL(), - // release it here maybe a more safer way :) - if ( iObjectProperty != NULL ) - { - delete iObjectProperty; - iObjectProperty = NULL; - } - - CMTPTypeObjectPropDesc::TPropertyInfo propertyInfo; - propertyInfo.iDataType = EMTPTypeUINT8; - propertyInfo.iFormFlag = CMTPTypeObjectPropDesc::EEnumerationForm; - propertyInfo.iGetSet = CMTPTypeObjectPropDesc::EReadOnly; - iObjectProperty = CMTPTypeObjectPropDesc::NewL( EMTPObjectPropCodeNonConsumable, - propertyInfo, - expectedForm ); - CleanupStack::PopAndDestroy( expectedForm ); // - expectedForm - } - -// ----------------------------------------------------------------------------- // CGetObjectPropList::CheckFormatL -// Ensures the object format operation parameter is valid +// Ensure the object format operation parameter is valid // ----------------------------------------------------------------------------- // TMTPResponseCode CGetObjectPropDesc::CheckFormatL() const { - TMTPResponseCode response = EMTPRespCodeOK; - - TUint32 formatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); - PRINT1( _L( "MM MTP <> CGetObjectPropDesc::CheckFormatL formatCode = 0x%x" ), formatCode ); + TMTPResponseCode response = EMTPRespCodeInvalidObjectFormatCode; - if( formatCode != 0) + if( iFormatCode != KMTPFormatsAll ) { - response = EMTPRespCodeInvalidObjectFormatCode; - const RArray* format = iDpConfig.GetSupportedFormat(); TInt count = format->Count(); for ( TInt i = 0; i < count; i++ ) { - if ( formatCode == (*format)[i] ) + if ( iFormatCode == (*format)[i] ) { response = EMTPRespCodeOK; break; @@ -296,60 +135,59 @@ // ----------------------------------------------------------------------------- // CGetObjectPropDesc::CheckPropCodeL -// Ensures the object prop code operation parameter is valid +// Ensure the object prop code operation parameter is valid // ----------------------------------------------------------------------------- // TMTPResponseCode CGetObjectPropDesc::CheckPropCodeL() const { - TMTPResponseCode response = EMTPRespCodeOK; + TMTPResponseCode response = EMTPRespCodeInvalidObjectPropCode; - TUint32 propCode = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); - PRINT1( _L( "MM MTP <> CGetObjectPropDesc::CheckPropCode, propCode = 0x%x" ), propCode ); - - if ( propCode == 0 ) + if ( iPropCode != KMTPNotSpecified32 && iPropCode != KMTPObjectPropCodeAll ) { - // A propCode of 0 means specification by group (which is not supported) - response = EMTPRespCodeSpecificationByGroupUnsupported; - } - else - { - TUint32 formatCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); - - const RArray* properties = NULL; - if ( formatCode == KMTPFormatsAll ) - properties= iDpConfig.GetAllSupportedProperties(); - else - properties = iDpConfig.GetSupportedPropertiesL( formatCode ); + const RArray* properties = iDpConfig.GetSupportedPropertiesL( iFormatCode ); const TInt count = properties->Count(); - TInt i = 0; - for( i = 0; i < count; i++ ) + for( TInt i = 0; i < count; i++ ) { - if ( (*properties)[i] == propCode ) + if ( (*properties)[i] == iPropCode ) { + response = EMTPRespCodeOK; break; } } - - if ( i == count ) - { - response = EMTPRespCodeInvalidObjectPropCode; - } } return response; } -TUint32 CGetObjectPropDesc::GetGroupCode( TUint16 aPropCode ) +// ----------------------------------------------------------------------------- +// CGetObjectPropDesc::ServiceL +// GetObjectPropDesc request handler +// ----------------------------------------------------------------------------- +// +EXPORT_C void CGetObjectPropDesc::ServiceL() { - TInt count = sizeof( KPropGroupMapTable ); - // TODO: if need to refine the search approach to improve performance - for( TInt i = 0; i < count; i++ ) - { - if ( aPropCode == KPropGroupMapTable[i].iPropCode ) - return KPropGroupMapTable[i].iGroupCode; - } - return EGroupCodeNotDefined; + PRINT( _L( "MM MTP => CGetObjectPropDesc::ServiceL" ) ); + + delete iPropertyDesc; + iPropertyDesc = NULL; + + iPropertyDesc = iDpConfig.DescriptionUtility()->NewCommonObjectPropertyL( iPropCode ); + + // if iPropertyDesc == NULL, iPropCode is not common property but dp specific one. + if( iPropertyDesc == NULL ) + iPropertyDesc = iDpConfig.DescriptionUtility()->NewSpecificPropDescL( iFormatCode, iPropCode ); + + __ASSERT_DEBUG( iPropertyDesc, Panic( EMmMTPDpObjectPropertyNull ) ); + + // Set group code + TUint32 groupCode = iDpConfig.DescriptionUtility()->GetGroupCode( iPropCode ); + PRINT1( _L("MM MTP <> CGetObjectPropDesc::ServiceL, groupCode = 0x%x"), groupCode ); + iPropertyDesc->SetUint32L( CMTPTypeObjectPropDesc::EGroupCode, groupCode ); + + SendDataL( *iPropertyDesc ); + + PRINT( _L( "MM MTP <= CGetObjectPropDesc::ServiceL" ) ); } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,12 +18,11 @@ #include #include -#include + #include #include #include #include -#include #include "tobjectdescription.h" #include "cgetobjectproplist.h" @@ -34,12 +33,7 @@ #include "cmmmtpdpmetadataaccesswrapper.h" static const TUint32 KMTPAll = 0xffffffff; -_LIT( KMtpDateTimeFormat, "%F%Y%M%DT%H%T%S" ); -const TInt KMtpMaxDateTimeStringLength = 15; -#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) -_LIT( KSubFormatParse, "SubFormatParse" ); -#endif // Verification data for the getObjectPropList request const TMTPRequestElementInfo KMTPGetObjectPropListPolicy[] = @@ -82,13 +76,13 @@ EXPORT_C CGetObjectPropList::CGetObjectPropList( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( aFramework, - aConnection, - sizeof ( KMTPGetObjectPropListPolicy ) / sizeof( TMTPRequestElementInfo ), - KMTPGetObjectPropListPolicy ), - iHandles ( KMmMtpRArrayGranularity ), - iDpConfig( aDpConfig ), - iPropertyArray( KMmMtpRArrayGranularity ) + CRequestProcessor( aFramework, + aConnection, + sizeof ( KMTPGetObjectPropListPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPGetObjectPropListPolicy ), + iHandles ( KMmMtpRArrayGranularity ), + iDpConfig( aDpConfig ), + iPropertyArray( KMmMtpRArrayGranularity ) { PRINT( _L( "Operation: GetObjectPropList(0x9805)" ) ); } @@ -104,8 +98,6 @@ iPropertyList = CMTPTypeObjectPropList::NewL(); - SetPSStatus(); - #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) iPerfLog = CMmMtpDpPerfLog::NewL( _L( "MediaMtpDataProviderEnumerator" ) ); #endif @@ -144,11 +136,13 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::ServiceL -// service a request at request phase +// GetObjectPropList request handler // ----------------------------------------------------------------------------- // EXPORT_C void CGetObjectPropList::ServiceL() { + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + GetObjectHandlesL(); TInt numOfObjects = iHandles.Count(); PRINT2( _L( "MM MTP <> CGetObjectPropList::ServiceL, numOfObjects = %d, iPropCode = 0x%x" ), @@ -167,7 +161,7 @@ TInt err = KErrNone; for ( TInt i = 0; i < numOfObjects; i++ ) { - TUint32 handle = iHandles[i ]; + TUint32 handle = iHandles[i]; if ( iFramework.ObjectMgr().ObjectOwnerId( handle ) == iFramework.DataProviderId() ) @@ -178,8 +172,6 @@ if ( iFramework.ObjectMgr().ObjectL( handle, *iObject ) ) // Populate the object meta data { - SetSubFormatCodeL(); - err = ServiceOneObjectPropertyL( handle, iPropCode ); if ( err != KErrNone && err != KErrNotSupported ) break; @@ -187,9 +179,14 @@ } } PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceL, one property was queried, Send data to PC! err = %d" ), err ); - if ( err == KErrNone || err == KErrNotSupported ) + if ( err == KErrNone + || ( err == KErrNotSupported && 0 < iPropertyList->NumberOfElements() ) ) + // Make sure the dataset which is returned to pc is valid SendDataL( *iPropertyList ); - else if ( err == KErrNotFound ) + else if ( err == KErrNotFound || err == KErrNotSupported ) + // The object entry is not in db + // or the ONLY required metadata is not in db. + // The second case is the same with GetObjectPropValue and device has nothing to return. SendResponseL( EMTPRespCodeAccessDenied ); else SendResponseL( EMTPRespCodeGeneralError ); @@ -200,7 +197,7 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::CheckFormatL -// Ensures the object format operation parameter is valid +// Ensure the object format operation parameter is valid // ----------------------------------------------------------------------------- // TMTPResponseCode CGetObjectPropList::CheckFormatL() const @@ -223,7 +220,7 @@ for ( TInt i = 0; i < count; i++ ) { - if ( formatCode == (*format)[i ] ) + if ( formatCode == (*format)[i] ) { response = EMTPRespCodeOK; break; @@ -238,7 +235,7 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::CheckPropCodeL -// Ensures the object prop code operation parameter is valid +// Ensure the object prop code operation parameter is valid // ----------------------------------------------------------------------------- // TMTPResponseCode CGetObjectPropList::CheckPropCodeL() const @@ -259,12 +256,11 @@ PRINT1( _L( "MM MTP <> CGetObjectPropList::CheckPropCode, Group Code = 0x%x" ), groupCode ); // check if groupCode is supported - TInt count = sizeof ( KSupportedGroupCode ) - / sizeof ( KSupportedGroupCode[0] ); + TInt count = sizeof ( KSupportedGroupCode ) / sizeof ( KSupportedGroupCode[0] ); TInt i = 0; for ( ; i < count; i++ ) { - if ( groupCode == KSupportedGroupCode[i ] ) + if ( groupCode == KSupportedGroupCode[i] ) break; } if ( i == count ) @@ -275,15 +271,12 @@ { PRINT1( _L( "MM MTP <> CGetObjectPropList::CheckPropCode, Property(0x%x) was queried." ), iPropCode ); - TInt err = KErrNone; const RArray* properties = NULL; if ( formatCode == KMTPFormatsAll ) properties = iDpConfig.GetAllSupportedProperties(); else properties = iDpConfig.GetSupportedPropertiesL( formatCode ); - User::LeaveIfError( err ); - const TInt count = properties->Count(); TInt i = 0; for ( i = 0; i < count; i++ ) @@ -312,7 +305,7 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::CheckDepth -// Ensures the depth operation parameter is valid +// Ensure the depth operation parameter is valid // ----------------------------------------------------------------------------- // TMTPResponseCode CGetObjectPropList::CheckDepth() const @@ -341,7 +334,7 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::GetObjectHandlesL -// Gets the handles for the objects that we want the properties for +// Get the handles for the objects that we want the properties for // ----------------------------------------------------------------------------- // void CGetObjectPropList::GetObjectHandlesL() @@ -361,9 +354,6 @@ else { CMTPObjectMetaData* meta( iRequestChecker->GetObjectInfo( iHandle ) ); - TPtrC suid( meta->DesC( CMTPObjectMetaData::ESuid ) ); - TParsePtrC parse( suid ); - iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() ); __ASSERT_DEBUG( meta, Panic( EMmMTPDpObjectNull ) ); @@ -383,12 +373,12 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::GetObjectHandlesL -// Gets all object handles (for GetObjectHandlesL) +// Get all object handles (for GetObjectHandlesL) // ----------------------------------------------------------------------------- // void CGetObjectPropList::GetObjectHandlesL( TUint32 aStorageId, TUint32 aParentHandle, - TUint16 aFormat /*= 0x0000*/) + TUint16 aFormat /*= 0x0000*/ ) { PRINT2( _L( "MM MTP => CGetObjectPropList::GetObjectHandlesL, aStorageId = 0x%x, aParentHandle = 0x%x" ), aStorageId, @@ -496,7 +486,7 @@ PRINT1( _L( "MM MTP => CGetObjectPropList::ServiceAllPropertiesL aHandle = 0x%x" ), aHandle ); // Append the current object info onto our list - TFileName fileName( iObject->DesC( CMTPObjectMetaData::ESuid ) ); + TPtrC fileName( iObject->DesC( CMTPObjectMetaData::ESuid ) ); TUint32 formatCode = iObject->Uint( CMTPObjectMetaData::EFormatCode ); PRINT2( _L( "MM MTP <> CGetObjectPropList::ServiceAllPropertiesL, fileName = %S, formatCode = 0x%x" ), @@ -512,25 +502,39 @@ const TInt count = properties->Count(); TInt err = KErrNone; + TBool successQuery = EFalse; for ( TInt i = 0; i < count; i++ ) { - // no need to do the trap anymore, this is being handle internally in Media DP's ServiceSpecificObjectPropertyL, also, this base class should not know too much of different handling between different formats + // no need to do the trap anymore, this is being handle internally in Media DP's ServiceSpecificObjectPropertyL, + // also, this base class should not know too much of different handling between different formats err = ServiceOneObjectPropertyL( aHandle, (*properties)[i] ); - if ( err == KErrNotSupported ) // Skip + if ( err == KErrNone ) + successQuery = ETrue; + if ( err == KErrNotSupported || err == KErrNotFound ) // Skip err = KErrNone; if ( err != KErrNone ) break; } + // In PC Suite combined mode, a file that was found at the beginning could be deleted by PC Suite protocol + // Need to fail it here. + if ( successQuery == EFalse ) + err = KErrNotFound; + PRINT1( _L( "MM MTP <= CGetObjectPropList::ServiceAllPropertiesL err = %d" ), err ); return err; } +// ----------------------------------------------------------------------------- +// CGetObjectPropList::ServiceGroupPropertiesL +// Get the grouped object properties for specific object +// ----------------------------------------------------------------------------- +// TInt CGetObjectPropList::ServiceGroupPropertiesL( TUint32 aHandle ) { PRINT1( _L( "MM MTP => CGetObjectPropList::ServiceGroupPropertiesL aHandle = 0x%x" ), aHandle ); - TFileName fileName( iObject->DesC( CMTPObjectMetaData::ESuid ) ); + TPtrC fileName( iObject->DesC( CMTPObjectMetaData::ESuid ) ); TUint32 formatCode = iObject->Uint( CMTPObjectMetaData::EFormatCode ); PRINT2( _L( "MM MTP <> CGetObjectPropList::ServiceGroupPropertiesL, fileName = %S, formatCode = 0x%x" ), @@ -548,7 +552,7 @@ for ( TInt i = 0; i < count; i++ ) { err = ServiceOneObjectPropertyL( aHandle, iPropertyArray[i] ); - if ( err == KErrNotSupported ) // Skip + if ( err == KErrNotSupported || err == KErrNotFound ) // Skip err = KErrNone; if ( err != KErrNone ) break; @@ -561,7 +565,7 @@ // ----------------------------------------------------------------------------- // CGetObjectPropList::ServiceOneObjectPropertyL -// Gets the object property information for the required object +// Get the object property information for the required object // ----------------------------------------------------------------------------- // TInt CGetObjectPropList::ServiceOneObjectPropertyL( TUint32 aHandle, @@ -585,8 +589,8 @@ case EMTPObjectPropCodeStorageID: { TMTPTypeUint32 storageId( iObject->Uint( CMTPObjectMetaData::EStorageId ) ); - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint32L(CMTPTypeObjectPropListElement::EValue, storageId.Value()); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, storageId.Value() ); } break; @@ -594,8 +598,8 @@ case EMTPObjectPropCodeObjectFormat: { TMTPTypeUint16 objectFormat( iObject->Uint( CMTPObjectMetaData::EFormatCode ) ); - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint16L(CMTPTypeObjectPropListElement::EValue, objectFormat.Value()); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, objectFormat.Value() ); } break; @@ -604,8 +608,8 @@ { TMTPTypeUint16 protectionStatus( MmMtpDpUtility::GetProtectionStatusL( iFramework.Fs(), iObject->DesC( CMTPObjectMetaData::ESuid ) ) ); - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint16L(CMTPTypeObjectPropListElement::EValue, protectionStatus.Value()); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint16L( CMTPTypeObjectPropListElement::EValue, protectionStatus.Value() ); } break; @@ -630,8 +634,8 @@ #endif // _DEBUG TParsePtrC parse( iObject->DesC( CMTPObjectMetaData::ESuid ) ); textData = CMTPTypeString::NewLC( parse.NameAndExt() ); // + textData - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars()); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode) ); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars() ); CleanupStack::PopAndDestroy( textData ); // - textData } break; @@ -639,8 +643,8 @@ // Parent Object case EMTPObjectPropCodeParentObject: { - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint32L(CMTPTypeObjectPropListElement::EValue, iObject->Uint( CMTPObjectMetaData::EParentHandle )); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint32L( CMTPTypeObjectPropListElement::EValue, iObject->Uint( CMTPObjectMetaData::EParentHandle ) ); } break; @@ -648,51 +652,42 @@ case EMTPObjectPropCodePersistentUniqueObjectIdentifier: { TMTPTypeUint128 puid = iFramework.ObjectMgr().PuidL( aHandle ); - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint128L(CMTPTypeObjectPropListElement::EValue,puid.UpperValue(), puid.LowerValue() ); + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetUint128L( CMTPTypeObjectPropListElement::EValue,puid.UpperValue(), puid.LowerValue() ); } break; case EMTPObjectPropCodeName: case EMTPObjectPropCodeDateAdded: + case EMTPObjectPropCodeAlbumArtist: { - if ( ( aPropCode == EMTPObjectPropCodeName ) - || ( ( !MmMtpDpUtility::IsVideoL( iObject->DesC( CMTPObjectMetaData::ESuid ), iFramework ) ) - && ( aPropCode == EMTPObjectPropCodeDateAdded ) ) ) - { - textData = CMTPTypeString::NewLC(); // + textData - - TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode, - *textData, - *iObject ) ); + textData = CMTPTypeString::NewLC(); // + textData - PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceOneObjectPropertyL err = %d" ), err ); + TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( aPropCode, + *textData, + *iObject ) ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); - iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars()); - } + PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceOneObjectPropertyL err = %d" ), err ); - CleanupStack::PopAndDestroy( textData ); // - textData - } + iPropertyElement = &( iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, textData->StringChars() ); + + CleanupStack::PopAndDestroy( textData ); // - textData } break; case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: { - TTime dataModified; - dataModified = MmMtpDpUtility::GetObjectDateModifiedL( iFramework.Fs(), - iObject->DesC( CMTPObjectMetaData::ESuid ) ); + TBuf timeStr; + MmMtpDpUtility::GetObjectDateModifiedL( iFramework.Fs(), + iObject->DesC( CMTPObjectMetaData::ESuid ), + timeStr ); + PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceOneObjectPropertyL Date time %S" ), &timeStr ); - TBuf timeStr; - dataModified.FormatL( timeStr, KMtpDateTimeFormat ); - PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceOneObjectPropertyL Date time %S" ), &timeStr ); CMTPTypeString* datastring = CMTPTypeString::NewLC( timeStr ); // + datastring - - iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, datastring->StringChars()); + iPropertyElement = &(iPropertyList->ReservePropElemL( aHandle, aPropCode ) ); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, datastring->StringChars() ); CleanupStack::PopAndDestroy( datastring ); // - datastring } break; @@ -701,12 +696,15 @@ case EMTPObjectPropCodeNonConsumable: { iPropertyElement = &(iPropertyList->ReservePropElemL(aHandle, aPropCode)); - iPropertyElement->SetUint8L(CMTPTypeObjectPropListElement::EValue,0); + iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, + iObject->Uint( CMTPObjectMetaData::ENonConsumable ) ); } break; default: { + // "err == KErrNotFound" means the object entry does not exist in DB, + // "err == KErrNotSupported" means the entry is there but this metadata not. err = ServiceSpecificObjectPropertyL( aPropCode, aHandle ); } break; @@ -744,8 +742,6 @@ if ( iFramework.ObjectMgr().ObjectL( handle, *iObject ) ) // Populate the object meta data { - SetSubFormatCodeL(); - if ( iPropCode == KMTPAll ) err = ServiceAllPropertiesL( handle ); else if ( iPropCode == EMTPObjectPropCodeUndefined ) @@ -773,7 +769,8 @@ } else // all handles processed, can send data { - PRINT( _L( "MM MTP <> CGetObjectPropList::RunL, Finished, Send data to PC!" ) ); + PRINT1( _L( "MM MTP <> CGetObjectPropList::RunL, Finished, Send data to PC!, iPropertyList->NumberOfElements() = %d" ), + iPropertyList->NumberOfElements() ); SendDataL( *iPropertyList ); } } @@ -785,8 +782,10 @@ // EXPORT_C TInt CGetObjectPropList::RunError( TInt aError ) { - PRINT1( _L( "MM MTP <> CGetObjectPropList::RunError aError = %d" ), aError ); - TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) ); + if ( aError != KErrNone ) + PRINT1( _L( "MM MTP <> CGetObjectPropList::RunError aError = %d" ), aError ); + + TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) ); return KErrNone; } @@ -798,8 +797,6 @@ // EXPORT_C void CGetObjectPropList::DoCancel() { - // TODO: need to send the data here? - // SendDataL( *iPropertyList ); } void CGetObjectPropList::GetPropertiesL( RArray& aPropArray, @@ -819,7 +816,7 @@ { for ( TInt j = 0; j < count; j++ ) { - if( KPropGroupMapTable[j].iPropCode == (*properties)[i] + if( KPropGroupMapTable[j].iPropCode == ( *properties )[i] && KPropGroupMapTable[j].iGroupCode == aGroupCode ) { aPropArray.Append( (*properties)[i] ); @@ -829,35 +826,4 @@ } } -void CGetObjectPropList::SetSubFormatCodeL() - { - __ASSERT_DEBUG( iObject, Panic( EMmMTPDpObjectNull ) ); - - // Note: Parsing out subformat code in external enumeration phase. - // This process was delayed in internal phase to avoid time-out. - TUint16 formatCode = iObject->Uint( CMTPObjectMetaData::EFormatCode ); - TUint subFormatCode = iObject->Uint( CMTPObjectMetaData::EFormatSubCode ); - PRINT2( _L( "MM MTP <> CGetObjectPropList::SetSubFormatCode, formatCode = 0x%x, subFormatCode = 0x%x" ), - formatCode, - subFormatCode ); - - TBool ifNeedParse = ( ( formatCode == EMTPFormatCodeMP4Container ) - || ( formatCode == EMTPFormatCode3GPContainer ) - || ( formatCode== EMTPFormatCodeASF ) ) - && ( subFormatCode == EMTPSubFormatCodeUnknown ); - if ( ifNeedParse ) - { - PERFLOGSTART( KSubFormatParse ); - - if ( MmMtpDpUtility::IsVideoL( iObject->DesC( CMTPObjectMetaData::ESuid ) ) ) - subFormatCode = EMTPSubFormatCodeVideo; - else - subFormatCode = EMTPSubFormatCodeAudio; - - PERFLOGSTOP( KSubFormatParse ); - - iObject->SetUint( CMTPObjectMetaData::EFormatSubCode, subFormatCode ); - } - } - // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,9 +18,7 @@ #include #include -#include #include -#include #include #include "cgetobjectpropvalue.h" @@ -28,9 +26,8 @@ #include "cmmmtpdpmetadataaccesswrapper.h" #include "mmmtpdplogger.h" #include "mmmtpdpconfig.h" +#include "tobjectdescription.h" -_LIT( KMtpDateTimeFormat, "%F%Y%M%DT%H%T%S" ); -const TInt KMtpMaxDateTimeStringLength = 15; // ----------------------------------------------------------------------------- // Verification data for the GetObjectPropValue request @@ -73,7 +70,6 @@ KMTPGetObjectPropValuePolicy ), iDpConfig( aDpConfig ) { - SetPSStatus(); PRINT( _L( "Operation: GetObjectPropValue(0x9803)" ) ); } @@ -99,10 +95,13 @@ return EMTPRespCodeInvalidObjectHandle; } - TFileName fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); TUint32 formatCode = objectInfo->Uint( CMTPObjectMetaData::EFormatCode ); - PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ), objectHandle, &fileName, formatCode); + PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ), + objectHandle, + &( objectInfo->DesC( CMTPObjectMetaData::ESuid ) ), + formatCode ); + const RArray* properties = iDpConfig.GetSupportedPropertiesL( formatCode ); TInt count = properties->Count(); @@ -133,20 +132,19 @@ EXPORT_C void CGetObjectPropValue::ServiceL() { PRINT( _L( "MM MTP => CGetObjectPropValue::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus( EMtpPSStatusActive ); //Get the request information TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); TUint32 propCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); PRINT2( _L( "MM MTP <> CGetObjectPropValue::ServiceL objectHandle = 0x%x, propCode = 0x%x" ), - objectHandle, propCode ); + objectHandle, propCode ); // don't have the ownship of the object iObjectInfo = iRequestChecker->GetObjectInfo( objectHandle ); TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); PRINT1( _L( "MM MTP <> CGetObjectPropValue::ServiceL object file name is %S" ), &suid ); - TParsePtrC parse( suid ); - - iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() ); if ( iMTPTypeString != NULL ) { @@ -181,8 +179,7 @@ case EMTPObjectPropCodeProtectionStatus: { iMTPTypeUint16.Set( 0 ); - iMTPTypeUint16 = MmMtpDpUtility::GetProtectionStatusL( iFramework.Fs(), - iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + iMTPTypeUint16 = MmMtpDpUtility::GetProtectionStatusL( iFramework.Fs(), suid ); SendDataL( iMTPTypeUint16 ); } break; @@ -191,8 +188,7 @@ case EMTPObjectPropCodeObjectSize: { iMTPTypeUint64.Set( 0 ); - iMTPTypeUint64 = MmMtpDpUtility::GetObjectSizeL( iFramework.Fs(), - iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + iMTPTypeUint64 = MmMtpDpUtility::GetObjectSizeL( iFramework.Fs(), suid ); SendDataL( iMTPTypeUint64 ); } break; @@ -200,11 +196,7 @@ // Filename case EMTPObjectPropCodeObjectFileName: { - const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); - PRINT1( _L( "MM MTP <> CGetObjectPropValue::ServiceL SUID = %S" ), &suid ); - - TPtrC path( suid.Ptr(), suid.Length() ); - TParsePtrC parse( path ); + TParsePtrC parse( suid ); iMTPTypeString = CMTPTypeString::NewL( parse.NameAndExt() ); SendDataL( *iMTPTypeString ); } @@ -231,26 +223,19 @@ // Name and DataAdded (audio only) fall under the same branch while dateadded(video)/modified/created fall under another case EMTPObjectPropCodeName: // 0xDC44 case EMTPObjectPropCodeDateAdded: // 0xDC4E + case EMTPObjectPropCodeAlbumArtist: { - if ( ( propCode == EMTPObjectPropCodeName) - || ( ( !MmMtpDpUtility::IsVideoL(iObjectInfo->DesC( CMTPObjectMetaData::ESuid ), iFramework ) ) - && ( propCode == EMTPObjectPropCodeDateAdded ) ) ) - { - iMTPTypeString = CMTPTypeString::NewL(); - ServiceMetaDataFromWrapperL( propCode, *iMTPTypeString, *iObjectInfo ); - break; - } + iMTPTypeString = CMTPTypeString::NewL(); + ServiceMetaDataFromWrapperL( propCode, *iMTPTypeString, *iObjectInfo ); } + break; //lint -fallthrough case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: { - TTime dataModified; - dataModified = MmMtpDpUtility::GetObjectDateModifiedL( iFramework.Fs(), - iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + TBuf timeStr; + MmMtpDpUtility::GetObjectDateModifiedL( iFramework.Fs(), suid, timeStr ); - TBuf timeStr; - dataModified.FormatL( timeStr, KMtpDateTimeFormat ); PRINT1( _L( "MM MTP <> CGetObjectPropValue::ServiceL Date time %S" ), &timeStr ); iMTPTypeString = CMTPTypeString::NewL( timeStr ); SendDataL( *iMTPTypeString ); @@ -260,7 +245,7 @@ // Consumable case EMTPObjectPropCodeNonConsumable: { - iMTPTypeUint8.Set( 0 ); + iMTPTypeUint8.Set( iObjectInfo->Uint( CMTPObjectMetaData::ENonConsumable ) ); SendDataL( iMTPTypeUint8 ); } break; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -17,16 +17,27 @@ #include -#include #include +#include #ifdef _DEBUG -#include -#include #include #endif #include "cgetobjectreferences.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" +#include "cmmmtpdpperflog.h" +#include "mmmtpdpconfig.h" +#include "cmmmtpdpmetadataaccesswrapper.h" +#include "tmmmtpdppanic.h" + +const TInt KMTPDriveGranularity = 5; + +#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) +_LIT( KMpxQueryAbstractMediaReference, "MpxQueryAbstractMediaReference" ); +_LIT( KReferenceManagerSetReference, "ReferenceManagerSetReference" ); +_LIT( KObjectManagerHandle, "ObjectManagerHandle" ); +#endif // ----------------------------------------------------------------------------- // Verification data for the GetReferences request @@ -51,10 +62,11 @@ // EXPORT_C MMmRequestProcessor* CGetObjectReferences::NewL( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, - MMmMtpDpConfig& /*aDpConfig*/ ) + MMmMtpDpConfig& aDpConfig ) { CGetObjectReferences* self = new ( ELeave ) CGetObjectReferences( aFramework, - aConnection ); + aConnection, + aDpConfig ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -69,7 +81,9 @@ // void CGetObjectReferences::ConstructL() { - SetPSStatus(); +#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) + iPerfLog = CMmMtpDpPerfLog::NewL( _L( "CAbstractMediaMtpDataProviderEnumerator" ) ); +#endif } // ----------------------------------------------------------------------------- @@ -80,6 +94,10 @@ EXPORT_C CGetObjectReferences::~CGetObjectReferences() { delete iReferences; + +#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) + delete iPerfLog; +#endif // _DEBUG } // ----------------------------------------------------------------------------- @@ -88,11 +106,13 @@ // ----------------------------------------------------------------------------- // CGetObjectReferences::CGetObjectReferences( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection ) : - CRequestProcessor( aFramework, - aConnection, - sizeof ( KMTPGetObjectReferencesPolicy ) / sizeof( TMTPRequestElementInfo ), - KMTPGetObjectReferencesPolicy ) + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) : + CRequestProcessor( aFramework, + aConnection, + sizeof ( KMTPGetObjectReferencesPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPGetObjectReferencesPolicy ), + iDpConfig( aDpConfig ) { PRINT( _L( "Operation: GetObjectReferences(0x9810)" ) ); } @@ -105,13 +125,45 @@ void CGetObjectReferences::ServiceL() { PRINT( _L( "MM MTP => CGetObjectReferences::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus( EMtpPSStatusActive ); TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); PRINT1( _L( "MM MTP <> CGetObjectReferences::ServiceL objectHandle = 0x%x" ), - objectHandle ); - MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); + objectHandle ); + + CMTPObjectMetaData* parentObject = iRequestChecker->GetObjectInfo( objectHandle ); + __ASSERT_DEBUG( parentObject, Panic( EMmMTPDpObjectNull ) ); + + iFramework.ObjectMgr().ObjectL( objectHandle, *parentObject ); + TUint subFormatCode = parentObject->Uint( CMTPObjectMetaData::EFormatSubCode ); + PRINT1( _L( "MM MTP <> CGetObjectReferences::ServiceL subFormatCode = 0x%x" ), + subFormatCode ); + + if ( MmMtpDpUtility::HasReference( parentObject->Uint( CMTPObjectMetaData::EFormatCode ) ) + && ( subFormatCode == EMTPSubFormatCodeUnknown ) ) + { + CDesCArray* references = new ( ELeave ) CDesCArrayFlat( KMTPDriveGranularity ); + CleanupStack::PushL( references ); // + references + + PERFLOGSTART( KMpxQueryAbstractMediaReference ); + TRAP_IGNORE( iDpConfig.GetWrapperL().GetAllReferenceL( *parentObject, *references ) ); + PERFLOGSTOP( KMpxQueryAbstractMediaReference ); + + // insert references into reference db + TPtrC parentSuid( parentObject->DesC( CMTPObjectMetaData::ESuid ) ); + AddReferencesL( parentSuid, *references ); + + CleanupStack::PopAndDestroy( references ); // - references + + parentObject->SetUint( CMTPObjectMetaData::EFormatSubCode, EMTPSubFormatCodeUndefined ); // set it to something else + iFramework.ObjectMgr().ModifyObjectL( *parentObject ); + } + + delete iReferences; iReferences = NULL; + MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); iReferences = referenceMgr.ReferencesLC( TMTPTypeUint32( objectHandle ) ); CleanupStack::Pop( iReferences ); SendDataL( *iReferences ); @@ -140,4 +192,44 @@ PRINT( _L( "MM MTP <= CGetObjectReferences::ServiceL" ) ); } +// ----------------------------------------------------------------------------- +// CGetObjectReferences::AddReferencesL +// GetObjectInfo request handler +// ----------------------------------------------------------------------------- +// +void CGetObjectReferences::AddReferencesL( const TDesC& aRefOwnerSuid, + CDesCArray& aReferences ) + { + TInt count = aReferences.Count(); + PRINT2( _L("MM MTP => CGetObjectReferences::AddReferencesL aRefOwnerSuid = %S, ref count = %d"), &aRefOwnerSuid, count ); + + // check if references are valid + TInt removeCount = 0; + for ( TInt i = 0; i < count; i++ ) + { + TInt index = i - removeCount; + TPtrC temp( aReferences[index] ); + PRINT2( _L( "MM MTP <> CGetObjectReferences::AddReferencesL ref[%d]'s name = %S" ), index, &temp ); + PERFLOGSTART( KObjectManagerHandle ); + TUint32 handle = iFramework.ObjectMgr().HandleL( temp ); + PERFLOGSTOP( KObjectManagerHandle ); + if ( handle == KMTPHandleNone ) // object doesn't exist + { + PRINT1( _L( "MM MTP <> CGetObjectReferences::AddReferencesL, [%S] doesn't existed in handle db, remove this from reference array" ), &temp ); + + // if handle is invalid, remove from reference array + aReferences.Delete( index, 1 ); + removeCount++; + } + } + + // add all references into references db + MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); + PERFLOGSTART( KReferenceManagerSetReference ); + referenceMgr.SetReferencesL( aRefOwnerSuid, aReferences ); + PERFLOGSTOP( KReferenceManagerSetReference ); + + PRINT( _L( "MM MTP <= CGetObjectReferences::AddReferencesL" ) ); + } + // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -17,13 +17,11 @@ #include -#include -#include #include "cgetpartialobject.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" #include "tmmmtpdppanic.h" -#include "ttypeflatbuf.h" #include "mmmtpdpconfig.h" /** @@ -41,7 +39,7 @@ // EXPORT_C MMmRequestProcessor* CGetPartialObject::NewL( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig ) + MMmMtpDpConfig& /*aDpConfig*/ ) { CGetPartialObject* self = new (ELeave) CGetPartialObject( aFramework, aConnection ); CleanupStack::PushL( self ); @@ -57,8 +55,6 @@ // EXPORT_C CGetPartialObject::~CGetPartialObject() { - delete iBuffer; - delete iPartialData; delete iFileObject; } @@ -67,20 +63,27 @@ // Standard c++ constructor // ----------------------------------------------------------------------------- // -EXPORT_C CGetPartialObject::CGetPartialObject( MMTPDataProviderFramework& aFramework, +CGetPartialObject::CGetPartialObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection ) : - CRequestProcessor( aFramework, - aConnection, - sizeof( KMTPGetPartialObjectPolicy ) / sizeof( TMTPRequestElementInfo ), - KMTPGetPartialObjectPolicy ), - iFramework ( aFramework ), - iFs( iFramework.Fs() ), - iBufferPtr8( NULL, 0 ) + CRequestProcessor( aFramework, + aConnection, + sizeof( KMTPGetPartialObjectPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPGetPartialObjectPolicy ), + iFramework ( aFramework ) { PRINT( _L( "Operation: GetPartialObject(0x101B)" ) ); } // ----------------------------------------------------------------------------- +// CGetPartialObject::ConstructL() +// Second-phase construction +// ----------------------------------------------------------------------------- +// +void CGetPartialObject::ConstructL() + { + } + +// ----------------------------------------------------------------------------- // CGetPartialObject::CheckRequestL // Check the GetPartialObject reqeust // ----------------------------------------------------------------------------- @@ -106,14 +109,17 @@ TBool CGetPartialObject::VerifyParametersL() { PRINT( _L( "MM MTP => CGetPartialObject::VerifyParametersL" ) ); + __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) ); TBool result = EFalse; iObjectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); - PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iObjectHandle = 0x%x" ), iObjectHandle ); iOffset = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); - PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iOffset = %d" ), iOffset ); - TUint32 maxLength = Request().Uint32( TMTPTypeRequest::ERequestParameter3 ); - PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL maxLength = %d" ), maxLength ); + iPartialDataLength = Request().Uint32( TMTPTypeRequest::ERequestParameter3 ); + + PRINT3( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iObjectHandle = 0x%x, iOffset = 0x%x, iMaxLength = 0x%x " ), + iObjectHandle, + iOffset, + iPartialDataLength ); //get object info, but do not have the ownship of the object CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( iObjectHandle ); @@ -122,28 +128,12 @@ const TDesC& suid( objectInfo->DesC( CMTPObjectMetaData::ESuid ) ); PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL suid = %S" ), &suid ); - if ( objectInfo->Uint( CMTPObjectMetaData::EDataProviderId ) - == iFramework.DataProviderId() ) - result = ETrue; - TEntry fileEntry; - User::LeaveIfError( iFs.Entry( suid, fileEntry ) ); - TInt64 fileSize = fileEntry.iSize; - if( ( iOffset < fileEntry.iSize ) && result ) + User::LeaveIfError( iFramework.Fs().Entry( suid, fileEntry ) ); + if ( iOffset < fileEntry.FileSize() ) { - if ( maxLength == fileSize ) - { - iCompleteFile = ETrue; - } - - if( iOffset + maxLength > fileSize ) - { - maxLength = fileSize - iOffset; - } - iPartialDataLength = maxLength; result = ETrue; } - PRINT1( _L( "MM MTP <> CGetPartialObject::VerifyParametersL iPartialDataLength = %d" ), iPartialDataLength ); PRINT1( _L( "MM MTP <= CGetPartialObject::VerifyParametersL result = %d" ), result ); return result; @@ -157,29 +147,23 @@ EXPORT_C void CGetPartialObject::ServiceL() { PRINT( _L( "MM MTP => CGetPartialObject::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + // Get file information CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( iObjectHandle ); __ASSERT_DEBUG( objectInfo, Panic( EMmMTPDpObjectNull ) ); - iFileSuid.SetLength( 0 ); - iFileSuid.Append( objectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + + TPtrC fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); - if ( iCompleteFile ) - { - // Pass the complete file back to the host - delete iFileObject; - iFileObject = NULL; - iFileObject = CMTPTypeFile::NewL( iFramework.Fs(), iFileSuid, EFileRead ); - SendDataL( *iFileObject ); - } - else - { - // Send partial file fragment back. - BuildPartialDataL(); - delete iPartialData; - iPartialData = NULL; - iPartialData = new (ELeave) TMTPTypeFlatBuf( iBufferPtr8 ); - SendDataL( *iPartialData ); - } + iFileObject = CMTPTypeFile::NewL( iFramework.Fs(), + fileName, + ( TFileMode ) ( EFileRead | EFileShareReadersOnly ), + iPartialDataLength, + iOffset ); + + SendDataL( *iFileObject ); + PRINT( _L( "MM MTP <= CGetPartialObject::ServiceL" ) ); } @@ -191,50 +175,12 @@ EXPORT_C TBool CGetPartialObject::DoHandleResponsePhaseL() { PRINT( _L( "MM MTP => CGetPartialObject::DoHandleResponsePhaseL" ) ); - TUint32 dataLength = iPartialDataLength; - PRINT1( _L( "MM MTP <> CGetPartialObject::DoHandleResponsePhaseL dataLength = %d" ), dataLength ); + + TUint32 dataLength = iFileObject->GetByteSent(); SendResponseL( EMTPRespCodeOK, 1, &dataLength ); - PRINT( _L( "MM MTP <= CGetPartialObject::DoHandleResponsePhaseL" ) ); + + PRINT1( _L( "MM MTP <= CGetPartialObject::DoHandleResponsePhaseL dataLength = %d" ), dataLength ); return EFalse; } -// ----------------------------------------------------------------------------- -// CGetPartialObject::ConstructL() -// Second-phase construction -// ----------------------------------------------------------------------------- -// -void CGetPartialObject::ConstructL() - { - SetPSStatus(); - } - -// ----------------------------------------------------------------------------- -// CGetPartialObject::BuildPartialDataL() -// Populate the partial data object -// ----------------------------------------------------------------------------- -// -void CGetPartialObject::BuildPartialDataL() - { - PRINT( _L( "MM MTP => CGetPartialObject::BuildPartialDataL" ) ); - __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) ); - - if ( iBuffer ) - { - delete iBuffer; - iBuffer = NULL; - } - - // We might fail if we have insufficient memory... - iBuffer = HBufC8::NewL( iPartialDataLength ); - iBuffer->Des().Zero(); - iBufferPtr8.Set( iBuffer->Des() ); - - RFile file; - User::LeaveIfError( file.Open( iFs, iFileSuid, EFileRead ) ); - CleanupClosePushL( file ); // + file - User::LeaveIfError( file.Read( iOffset, iBufferPtr8, iPartialDataLength ) ); - CleanupStack::PopAndDestroy( &file ); // - file - PRINT( _L( "MM MTP <= CGetPartialObject::BuildPartialDataL" ) ); - } - // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -17,14 +17,12 @@ #include -#include #include #include -#include -#include #include #include #include +#include #include "cmoveobject.h" #include "mmmtpdplogger.h" @@ -32,6 +30,7 @@ #include "mmmtpdputility.h" #include "cmmmtpdpmetadataaccesswrapper.h" #include "mmmtpdpconfig.h" +#include "cpropertysettingutility.h" /** * Verification data for the MoveObject request @@ -39,37 +38,32 @@ const TMTPRequestElementInfo KMTPMoveObjectPolicy[] = { { - TMTPTypeRequest::ERequestParameter1, EMTPElementTypeObjectHandle, - EMTPElementAttrFileOrDir | EMTPElementAttrWrite, 0, 0, 0 + TMTPTypeRequest::ERequestParameter1, + EMTPElementTypeObjectHandle, + EMTPElementAttrFile | EMTPElementAttrWrite, + 0, + 0, + 0 }, { - TMTPTypeRequest::ERequestParameter2, EMTPElementTypeStorageId, - EMTPElementAttrWrite, 0, 0, 0 + TMTPTypeRequest::ERequestParameter2, + EMTPElementTypeStorageId, + EMTPElementAttrWrite, + 0, + 0, + 0 }, { - TMTPTypeRequest::ERequestParameter3, EMTPElementTypeObjectHandle, - EMTPElementAttrDir | EMTPElementAttrWrite, 1, 0, 0 + TMTPTypeRequest::ERequestParameter3, + EMTPElementTypeObjectHandle, + EMTPElementAttrDir | EMTPElementAttrWrite, + 1, + 0, + 0 } }; // ----------------------------------------------------------------------------- -// CMoveObject::NewL -// Two-phase construction method -// ----------------------------------------------------------------------------- -// -//EXPORT_C MMmRequestProcessor* CMoveObject::NewL( MMTPDataProviderFramework& aFramework, -// MMTPConnection& aConnection, -// CMmMtpDpMetadataAccessWrapper& aWrapper ) -// { -// CMoveObject* self = new (ELeave) CMoveObject( aFramework, aConnection, aWrapper ); -// CleanupStack::PushL( self ); -// self->ConstructL(); -// CleanupStack::Pop( self ); -// -// return self; -// } - -// ----------------------------------------------------------------------------- // CMoveObject::~CMoveObject // Destructor // ----------------------------------------------------------------------------- @@ -79,12 +73,10 @@ Cancel(); delete iDest; - delete iFileMan; - delete iPathToMove; - delete iNewRootFolder; - iObjectHandles.Close(); + if ( iPropertyElement ) delete iPropertyElement; + delete iPropertyList; } @@ -94,18 +86,28 @@ // ----------------------------------------------------------------------------- // EXPORT_C CMoveObject::CMoveObject( MMTPDataProviderFramework& aFramework, - MMTPConnection& aConnection, - MMmMtpDpConfig& aDpConfig) : - CRequestProcessor( aFramework, aConnection, sizeof( KMTPMoveObjectPolicy ) - /sizeof( TMTPRequestElementInfo ), KMTPMoveObjectPolicy), - iDpConfig( aDpConfig ), - iObjectHandles( KMmMtpRArrayGranularity ), - iMoveObjectIndex( 0 ) + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) : + CRequestProcessor( aFramework, + aConnection, + sizeof( KMTPMoveObjectPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPMoveObjectPolicy ), + iDpConfig( aDpConfig ) { PRINT( _L( "Operation: MoveObject(0x1019)" ) ); } // ----------------------------------------------------------------------------- +// CMoveObject::ConstructL +// Second phase constructor +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMoveObject::ConstructL() + { + iPropertyList = CMTPTypeObjectPropList::NewL(); + } + +// ----------------------------------------------------------------------------- // CMoveObject::ServiceL // MoveObject request handler // ----------------------------------------------------------------------------- @@ -113,156 +115,19 @@ EXPORT_C void CMoveObject::ServiceL() { PRINT( _L( "MM MTP => CMoveObject::ServiceL" ) ); - TMTPResponseCode ret = MoveObjectL(); - PRINT1( _L( "MM MTP <> CMoveObject::ServiceL ret = 0x%x" ), ret ); - if ( EMTPRespCodeOK != ret ) - { - SendResponseL( ret ); - } + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + MoveObjectL(); + PRINT( _L( "MM MTP <= CMoveObject::ServiceL" ) ); } // ----------------------------------------------------------------------------- -// CMoveObject::ConstructL -// Second phase constructor -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMoveObject::ConstructL() - { - CActiveScheduler::Add( this ); - - iPropertyList = CMTPTypeObjectPropList::NewL(); - SetPSStatus(); - } - -// ----------------------------------------------------------------------------- -// CMoveObject::RunL -// -// ----------------------------------------------------------------------------- -// -EXPORT_C void CMoveObject::RunL() - { - PRINT( _L( "MM MTP => CMoveObject::RunL" ) ); - if ( MoveOwnedObjectsL() ) - { - // Reset iMoveObjectIndex count since move completed - iMoveObjectIndex = 0; - - TMTPResponseCode ret = EMTPRespCodeOK; - // Delete the original folders in the device dp. - if ( iObjectInfo->Uint( CMTPObjectMetaData::EDataProviderId ) - == iFramework.DataProviderId() ) - { - ret = FinalPhaseMove(); - } - PRINT1( _L("MM MTP <> CMoveObject::RunL ret = 0x%x"), ret ); - SendResponseL( ret ); - } - PRINT( _L( "MM MTP <= CMoveObject::RunL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMoveObject::RunError -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CMoveObject::RunError( TInt aError ) - { - if ( aError != KErrNone ) - PRINT1( _L( "MM MTP <> CMoveObject::RunError aError = %d" ), aError ); - TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) ); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CMoveObject::MoveFileL -// A helper function of MoveObjectL +// CMoveObject::MoveObjectL +// Move object operation // ----------------------------------------------------------------------------- // -void CMoveObject::MoveFileL( const TDesC& aNewFileName ) - { - PRINT1( _L( "MM MTP => CMoveObject::MoveFileL aNewFileName = %S" ), &aNewFileName ); - const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); - TFileName oldFileName( suid ); // save the old file name, the suid will be modified - PRINT1( _L( "MM MTP <> CMoveObject::MoveFileL oldFileName = %S" ), &suid ); - - if ( iStorageId == iObjectInfo->Uint( CMTPObjectMetaData::EStorageId ) ) - iSameStorage = ETrue; - else - iSameStorage = EFalse; - GetPreviousPropertiesL( *iObjectInfo ); - User::LeaveIfError( iFileMan->Move( suid, aNewFileName ) ); // iDest just Folder - User::LeaveIfError( iFramework.Fs().SetModified( aNewFileName, iPreviousModifiedTime ) ); - - iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName ); - iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); - iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle ); - iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); - SetPropertiesL( oldFileName, aNewFileName, *iObjectInfo ); - PRINT( _L( "MM MTP <= CMoveObject::MoveFileL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMoveObject::MoveOwnedObjectsL -// Move the objects through iterations of RunL -// ----------------------------------------------------------------------------- -// -TBool CMoveObject::MoveOwnedObjectsL() - { - PRINT( _L( "MM MTP => CMoveObject::MoveOwnedObjectsL" ) ); - TBool ret = EFalse; - - if ( iMoveObjectIndex < iNumberOfObjects ) - { - MoveAndUpdateL( iObjectHandles[iMoveObjectIndex++] ); - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, iStatus.Int() ); - SetActive(); - } - else - { - ret = ETrue; - } - - PRINT1( _L( "MM MTP <= CMoveObject::MoveOwnedObjectsL ret = %d" ), ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CMoveObject::MoveFolderL -// A helper function of MoveObjectL -// ----------------------------------------------------------------------------- -// -void CMoveObject::MoveFolderL() - { - PRINT( _L( "MM MTP => CMoveObject::MoveFolderL" ) ); - RBuf oldFolderName; - oldFolderName.CreateL( KMaxFileName ); - oldFolderName.CleanupClosePushL(); // + oldFileName - oldFolderName = iObjectInfo->DesC( CMTPObjectMetaData::ESuid ); - PRINT1( _L( "MM MTP <> CMoveObject::MoveFolderL oldFolderName = %S" ), &oldFolderName ); - iPathToMove = oldFolderName.AllocL(); - CleanupStack::PopAndDestroy( &oldFolderName ); // - oldFolderName - - GenerateObjectHandleListL( iObjectInfo->Uint( CMTPObjectMetaData::EHandle ) ); - - iNumberOfObjects = iObjectHandles.Count(); - PRINT1( _L( "MM MTP <> CMoveObject::MoveFolderL iNumberOfObjects = %d" ), iNumberOfObjects ); - - TRequestStatus* status = &iStatus; - User::RequestComplete( status, iStatus.Int() ); - SetActive(); - - PRINT( _L( "MM MTP <= CMoveObject::MoveFolderL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMoveObject::MoveObjectL -// move object operations -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CMoveObject::MoveObjectL() +void CMoveObject::MoveObjectL() { PRINT( _L( "MM MTP => CMoveObject::MoveObjectL" ) ); TMTPResponseCode responseCode = EMTPRespCodeOK; @@ -274,57 +139,26 @@ newObjectName.CleanupClosePushL(); // + newObjectName newObjectName = *iDest; - const TDesC& suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); TParsePtrC fileNameParser( suid ); - - // Check if the object is a folder or a file. - TBool isFolder = EFalse; - User::LeaveIfError( BaflUtils::IsFolder( iFramework.Fs(), suid, isFolder ) ); - - if ( !isFolder ) - { - if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() ) <= newObjectName.MaxLength() ) - { - newObjectName.Append( fileNameParser.NameAndExt() ); - } - responseCode = CanMoveObjectL( suid, newObjectName ); - } - else // It is a folder. + if ( ( newObjectName.Length() + fileNameParser.NameAndExt().Length() ) + <= newObjectName.MaxLength() ) { - TFileName rightMostFolderName; - User::LeaveIfError( BaflUtils::MostSignificantPartOfFullName( suid, - rightMostFolderName ) ); - if ( ( newObjectName.Length() + rightMostFolderName.Length() + 1 ) <= newObjectName.MaxLength() ) - { - newObjectName.Append( rightMostFolderName ); - // Add backslash. - _LIT( KBackSlash, "\\" ); - newObjectName.Append( KBackSlash ); - } - } - - iNewRootFolder = newObjectName.AllocL(); + newObjectName.Append( fileNameParser.NameAndExt() ); + responseCode = CanMoveObjectL( suid, newObjectName ); - if ( responseCode == EMTPRespCodeOK ) - { - delete iFileMan; - iFileMan = NULL; - iFileMan = CFileMan::NewL( iFramework.Fs() ); - - if ( !isFolder ) - { + if ( responseCode == EMTPRespCodeOK ) MoveFileL( newObjectName ); - SendResponseL( responseCode ); - } - else - { - MoveFolderL(); - } } - CleanupStack::PopAndDestroy( &newObjectName ); // - newObjectName. + else + // Destination is not appropriate for the full path name shouldn't be longer than 255 + responseCode = EMTPRespCodeInvalidDataset; + + SendResponseL( responseCode ); + + CleanupStack::PopAndDestroy( &newObjectName ); // - newObjectName PRINT1( _L( "MM MTP <= CMoveObject::MoveObjectL responseCode = 0x%x" ), responseCode ); - return responseCode; } // ----------------------------------------------------------------------------- @@ -335,30 +169,33 @@ void CMoveObject::GetParametersL() { PRINT( _L( "MM MTP => CMoveObject::GetParametersL" ) ); + __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) ); TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); iStorageId = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); iNewParentHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter3 ); - PRINT3( _L( "MM MTP <> objectHandle = 0x%x, iStoargeId = 0x%x, iNewParentHandle = 0x%x" ), - objectHandle, iStorageId, iNewParentHandle ); + PRINT3( _L( "MM MTP <> objectHandle = 0x%x, iStorageId = 0x%x, iNewParentHandle = 0x%x" ), + objectHandle, + iStorageId, + iNewParentHandle ); // not taking owernship iObjectInfo = iRequestChecker->GetObjectInfo( objectHandle ); __ASSERT_DEBUG( iObjectInfo, Panic( EMmMTPDpObjectNull ) ); - if ( iNewParentHandle == 0 ) + if ( iNewParentHandle == KMTPHandleNone ) { SetDefaultParentObjectL(); } else { - CMTPObjectMetaData* parentObjectInfo = - iRequestChecker->GetObjectInfo( iNewParentHandle ); - __ASSERT_DEBUG( parentObjectInfo, Panic( EMmMTPDpObjectNull ) ); + CMTPObjectMetaData* parentObject = iRequestChecker->GetObjectInfo( iNewParentHandle ); + __ASSERT_DEBUG( parentObject, Panic( EMmMTPDpObjectNull ) ); + delete iDest; iDest = NULL; - iDest = parentObjectInfo->DesC( CMTPObjectMetaData::ESuid ).AllocL(); + iDest = parentObject->DesC( CMTPObjectMetaData::ESuid ).AllocL(); PRINT1( _L( "MM MTP <> CMoveObject::GetParametersL iDest = %S" ), iDest ); } PRINT( _L( "MM MTP <= CMoveObject::GetParametersL" ) ); @@ -375,11 +212,10 @@ delete iDest; iDest = NULL; - iDest = ( iFramework.StorageMgr().StorageL( iStorageId ).DesC( - CMTPStorageMetaData::EStorageSuid ) ).AllocL(); - PRINT1( _L( "MM MTP <> CMoveObject::SetDefaultParentObjectL iDest = %S" ), iDest ); + iDest = iFramework.StorageMgr().StorageL( iStorageId ).DesC( CMTPStorageMetaData::EStorageSuid ).AllocL(); iNewParentHandle = KMTPHandleNoParent; - PRINT( _L( "MM MTP <= CMoveObject::SetDefaultParentObjectL" ) ); + + PRINT1( _L( "MM MTP <= CMoveObject::SetDefaultParentObjectL, iDest = %S" ), iDest ); } // ----------------------------------------------------------------------------- @@ -388,19 +224,21 @@ // ----------------------------------------------------------------------------- // TMTPResponseCode CMoveObject::CanMoveObjectL( const TDesC& aOldName, - const TDesC& aNewName ) const + const TDesC& aNewName ) const { - PRINT( _L( "MM MTP => CMoveObject::CanMoveObjectL" ) ); + PRINT2( _L( "MM MTP => CMoveObject::CanMoveObjectL aOldName = %S, aNewName = %S" ), + &aOldName, + &aNewName ); TMTPResponseCode result = EMTPRespCodeOK; TEntry fileEntry; User::LeaveIfError( iFramework.Fs().Entry( aOldName, fileEntry ) ); - TDriveNumber drive( static_cast( iFramework.StorageMgr().DriveNumber( iStorageId ) ) ); + TInt drive = iFramework.StorageMgr().DriveNumber( iStorageId ); User::LeaveIfError( drive ); TVolumeInfo volumeInfo; User::LeaveIfError( iFramework.Fs().Volume( volumeInfo, drive ) ); - if ( volumeInfo.iFree < fileEntry.iSize ) + if ( volumeInfo.iFree < fileEntry.FileSize() ) { result = EMTPRespCodeStoreFull; } @@ -435,6 +273,39 @@ } // ----------------------------------------------------------------------------- +// CMoveObject::MoveFileL +// A helper function of MoveObjectL +// ----------------------------------------------------------------------------- +// +void CMoveObject::MoveFileL( const TDesC& aNewFileName ) + { + HBufC* oldFileName = iObjectInfo->DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + oldFileName + PRINT2( _L( "MM MTP => CMoveObject::MoveFileL old name = %S, aNewFileName = %S" ), + oldFileName, + &aNewFileName ); + + if ( iStorageId == iObjectInfo->Uint( CMTPObjectMetaData::EStorageId ) ) + iSameStorage = ETrue; + else + iSameStorage = EFalse; + + // Move the file first no matter if it will fail in Get/SetPreviousPropertiesL + // Already trapped inside + GetPreviousPropertiesL( *iObjectInfo ); + TRAPD( err, SetPropertiesL( aNewFileName ) ); + + CFileMan* fileMan = CFileMan::NewL( iFramework.Fs() ); + err = fileMan->Move( *oldFileName, aNewFileName ); + + CleanupStack::PopAndDestroy( oldFileName ); // - oldFileName + + if ( err != KErrNone ) + PRINT1( _L( "MM MTP <> CMoveObject::MoveFileL err = %d" ), err ); + + PRINT( _L( "MM MTP <= CMoveObject::MoveFileL" ) ); + } + +// ----------------------------------------------------------------------------- // CMoveObject::GetPreviousPropertiesL // Save the object properties before doing the move // ----------------------------------------------------------------------------- @@ -445,8 +316,6 @@ const TDesC& suid( aObject.DesC( CMTPObjectMetaData::ESuid ) ); - User::LeaveIfError( iFramework.Fs().Modified( suid, iPreviousModifiedTime ) ); - // same storage, not necessary to get the properties if ( iSameStorage ) return; @@ -454,12 +323,11 @@ TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode ); const RArray* properties = iDpConfig.GetSupportedPropertiesL( formatCode ); TInt count = properties->Count(); - CMTPTypeString* textData = NULL; TInt err = KErrNone; TUint16 propCode; - TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle ) ; + TUint32 handle = aObject.Uint( CMTPObjectMetaData::EHandle ); - if ( iPropertyElement ) + if ( iPropertyElement != NULL ) { delete iPropertyElement; iPropertyElement = NULL; @@ -467,8 +335,9 @@ for ( TInt i = 0; i < count; i++ ) { - propCode = (*properties)[i]; - switch( propCode ) + propCode = ( *properties )[i]; + + switch ( propCode ) { case EMTPObjectPropCodeStorageID: case EMTPObjectPropCodeObjectFormat: @@ -477,43 +346,40 @@ case EMTPObjectPropCodeObjectFileName: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: break; + case EMTPObjectPropCodeNonConsumable: + iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) ); + iPropertyElement->SetUint8L( CMTPTypeObjectPropListElement::EValue, + aObject.Uint( CMTPObjectMetaData::ENonConsumable ) ); + break; + case EMTPObjectPropCodeName: case EMTPObjectPropCodeDateAdded: - if ( ( propCode == EMTPObjectPropCodeName ) - || ( ( !MmMtpDpUtility::IsVideoL( aObject.DesC( CMTPObjectMetaData::ESuid ), iFramework ) ) - && ( propCode == EMTPObjectPropCodeDateAdded ) ) ) - { - textData = CMTPTypeString::NewLC(); // + textData + case EMTPObjectPropCodeAlbumArtist: + { + CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData - TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( propCode, - *textData, - aObject ) ); - - PRINT1( _L( "MM MTP <> CMoveObject::GetPreviousPropertiesL::ServiceSpecificObjectPropertyL err = %d" ), err ); + TRAP( err, iDpConfig.GetWrapperL().GetObjectMetadataValueL( propCode, + *textData, + aObject ) ); + PRINT1( _L( "MM MTP <> CMoveObject::GetPreviousPropertiesL err = %d" ), err ); - if ( err == KErrNone ) - { - iPropertyElement = &(iPropertyList->ReservePropElemL(handle, propCode)); - iPropertyElement->SetStringL(CMTPTypeObjectPropListElement::EValue, textData->StringChars()); -// iPropertyElement = CMTPTypeObjectPropListElement::NewL( -// handle, propCode, *textData ); - } - else if ( err == KErrNotFound ) - { - iPropertyElement = NULL; - } - else - { - User::Leave( err ); - } + if ( err == KErrNone ) + { + iPropertyElement = &( iPropertyList->ReservePropElemL( handle, propCode ) ); + iPropertyElement->SetStringL( CMTPTypeObjectPropListElement::EValue, + textData->StringChars() ); + } + else + { + iPropertyElement = NULL; + } - CleanupStack::PopAndDestroy( textData ); // - textData - } + CleanupStack::PopAndDestroy( textData ); // - textData + } break; default: @@ -523,92 +389,40 @@ break; } - if ( iPropertyElement ) + if ( iPropertyElement != NULL ) { iPropertyList->CommitPropElemL( *iPropertyElement ); - iPropertyElement = NULL; } - } // end of for loop PRINT1( _L( "MM MTP <= CMoveObject::GetPreviousPropertiesL err = %d" ), err ); } // ----------------------------------------------------------------------------- -// CMoveObject::ServiceMetaDataToWrapper -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TMTPResponseCode CMoveObject::ServiceMetaDataToWrapper( - const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObject ) - { - TMTPResponseCode resCode = EMTPRespCodeOK; - - TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode, - aNewData, - aObject ) ); - - PRINT1( _L("MM MTP <> CMoveObject::ServiceMetaDataToWrapper err = %d"), err); - - if ( err == KErrNone ) - { - resCode = EMTPRespCodeOK; - } - else if ( err == KErrTooBig ) - // according to the codes of S60 - { - resCode = EMTPRespCodeInvalidDataset; - } - else if ( err == KErrPermissionDenied ) - { - resCode = EMTPRespCodeAccessDenied; - } - else if ( err == KErrNotFound ) - { - if ( MmMtpDpUtility::HasMetadata( aObject.Uint( CMTPObjectMetaData::EFormatCode ) ) ) - resCode = EMTPRespCodeAccessDenied; - else - resCode = EMTPRespCodeOK; - } - else - { - resCode = EMTPRespCodeGeneralError; - } - - PRINT1( _L("MM MTP <= CMoveObject::ServiceMetaDataToWrapper resCode = 0x%x"), resCode); - - return resCode; - } - -// ----------------------------------------------------------------------------- // CMoveObject::SetPreviousPropertiesL // Set the object properties after doing the move // ----------------------------------------------------------------------------- // -void CMoveObject::SetPreviousPropertiesL( const CMTPObjectMetaData& aObject ) +void CMoveObject::SetPreviousPropertiesL() { PRINT( _L( "MM MTP => CMoveObject::SetPreviousPropertiesL" ) ); - const TInt count( iPropertyList->NumberOfElements() ); - PRINT1( _L( "MM MTP <> CMoveObject::SetPreviousPropertiesL count = %d" ), count ); + TMTPResponseCode respcode = EMTPRespCodeOK; - CMTPTypeString* stringData = NULL; + iPropertyList->ResetCursor(); - + const TInt count = iPropertyList->NumberOfElements(); for ( TInt i = 0; i < count; i++ ) { - CMTPTypeObjectPropListElement& element = iPropertyList->GetNextElementL( ); + CMTPTypeObjectPropListElement& element = iPropertyList->GetNextElementL(); - TUint32 handle = element.Uint32L( - CMTPTypeObjectPropListElement::EObjectHandle ); - TUint16 propertyCode = element.Uint16L( - CMTPTypeObjectPropListElement::EPropertyCode ); - TUint16 dataType = element.Uint16L( - CMTPTypeObjectPropListElement::EDatatype ); + TUint32 handle = element.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle ); + TUint16 propertyCode = element.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode ); + TUint16 dataType = element.Uint16L( CMTPTypeObjectPropListElement::EDatatype ); PRINT3( _L( "MM MTP <> CMoveObject::SetPreviousPropertiesL = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ), - handle, propertyCode, dataType ); + handle, + propertyCode, + dataType ); switch ( propertyCode ) { @@ -619,20 +433,26 @@ case EMTPObjectPropCodeObjectFileName: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: case EMTPObjectPropCodeDateAdded: break; + case EMTPObjectPropCodeNonConsumable: + iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, + element.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); + iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); + break; + case EMTPObjectPropCodeName: + case EMTPObjectPropCodeAlbumArtist: { - stringData = CMTPTypeString::NewLC( - element.StringL(CMTPTypeObjectPropListElement::EValue)); // + stringData + CMTPTypeString *stringData = CMTPTypeString::NewLC( element.StringL( CMTPTypeObjectPropListElement::EValue ) ); // + stringData - respcode = ServiceMetaDataToWrapper( propertyCode, + respcode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapper( iDpConfig, + propertyCode, *stringData, - aObject ); + *iObjectInfo ); CleanupStack::PopAndDestroy( stringData ); // - stringData } @@ -640,17 +460,19 @@ default: { - respcode = ServiceSetSpecificObjectPropertyL( propertyCode, - aObject, - element ); + respcode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig, + propertyCode, + *iObjectInfo, + element ); } break; } } // end of for loop - if( respcode == EMTPRespCodeOK ) + // ignore errors + if ( respcode == EMTPRespCodeOK ) { - // do nothing, ignore warning + // do nothing, just to get rid of build warning } PRINT1( _L( "MM MTP <= CMoveObject::SetPreviousPropertiesL respcode = 0x%x" ), respcode ); @@ -661,189 +483,55 @@ // Set the object properties in the object property store. // ----------------------------------------------------------------------------- // -void CMoveObject::SetPropertiesL( const TDesC& aOldFileName, const TDesC& aNewFileName, - const CMTPObjectMetaData& aNewObject ) +void CMoveObject::SetPropertiesL( const TDesC& aNewFileName ) { - PRINT2( _L( "MM MTP => CMoveObject::SetPropertiesL aOldFileName = %S, aNewFileName = %S" ), - &aOldFileName, &aNewFileName ); + PRINT1( _L( "MM MTP => CMoveObject::SetPropertiesL, aNewFileName = %S" ), &aNewFileName ); - TUint32 formatCode = aNewObject.Uint( CMTPObjectMetaData::EFormatCode ); - // This is used to keep the same behavior in mass storage and device file manager. + TUint32 formatCode = iObjectInfo->Uint( CMTPObjectMetaData::EFormatCode ); if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist ) { + // This is used to keep the same behavior in mass storage and device file manager. PRINT( _L( "MM MTP <> CMoveObject::SetPropertiesL Playlist file do not update the MPX DB" ) ); - } - else - { - // if the two object in different stoarge, we should delete the old one and insert new one - if ( iSameStorage ) - iDpConfig.GetWrapperL().RenameObjectL( aOldFileName, aNewFileName ); - else - { - iDpConfig.GetWrapperL().DeleteObjectL( aOldFileName, formatCode ); - iDpConfig.GetWrapperL().AddObjectL( aNewFileName ); - SetPreviousPropertiesL( aNewObject ); - } + iDpConfig.GetWrapperL().DeleteDummyFile( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + iDpConfig.GetWrapperL().AddDummyFileL( aNewFileName ); } - // Reference DB is used PUID -// if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist -// || formatCode == EMTPFormatCodeM3UPlaylist ) -// { -// MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); -// CDesCArray* references = referenceMgr.ReferencesLC( aOldFileName ); // + references -// referenceMgr.SetReferencesL( aNewFileName, *references ); -// CleanupStack::PopAndDestroy( references ); // - references -// // delete the old references -// referenceMgr.RemoveReferencesL( aOldFileName ); -// } + if (iSameStorage) + { + iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, aNewFileName ); + iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName ); + iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); + iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle ); + iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); + } + else // if the two object in different storage, we should delete the old one and insert new one + { + iDpConfig.GetWrapperL().DeleteObjectL( *iObjectInfo ); + HBufC* oldFileName = iObjectInfo->DesC(CMTPObjectMetaData::ESuid).AllocLC(); // + oldFileName + iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, aNewFileName ); + iObjectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); + iObjectInfo->SetUint( CMTPObjectMetaData::EParentHandle, iNewParentHandle ); + iFramework.ObjectMgr().ModifyObjectL(*iObjectInfo); + + iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo ); + + if ( formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist + || formatCode == EMTPFormatCodeAbstractAudioAlbum ) + { + MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); + CDesCArray* references = referenceMgr.ReferencesLC( aNewFileName ); // + references + iDpConfig.GetWrapperL().SetReferenceL( *iObjectInfo, *references ); + CleanupStack::PopAndDestroy( references ); // - references + } + CleanupStack::PopAndDestroy( oldFileName ); // - oldFileName + + // Only leave when getting proplist element from data received by fw. + // It should not happen after ReceiveDataL in which construction of proplist already succeed. + SetPreviousPropertiesL(); + } PRINT( _L( "MM MTP <= CMoveObject::SetPropertiesL" ) ); } -// ----------------------------------------------------------------------------- -// CMoveObject::FinalPhaseMove -// This function will actually delete the orginal folders from the file system -// ----------------------------------------------------------------------------- -// -TMTPResponseCode CMoveObject::FinalPhaseMove() - { - PRINT( _L( "MM MTP => CMoveObject::FinalPhaseMove" ) ); - TMTPResponseCode ret = EMTPRespCodeOK; - - TInt rel = iFileMan->RmDir( *iPathToMove ); - PRINT1( _L( "MM MTP <> CMoveObject::FinalPhaseMove rel = %d" ), rel ); - - if ( rel != KErrNone ) - { - ret = EMTPRespCodeGeneralError; - } - - PRINT1( _L( "MM MTP <= CMoveObject::FinalPhaseMove ret = 0x%x" ), ret ); - return ret; - } - -// ----------------------------------------------------------------------------- -// CMoveObject::GenerateObjectHandleListL -// Generate the list of handles that need to be moved to the new location -// ----------------------------------------------------------------------------- -// -void CMoveObject::GenerateObjectHandleListL( TUint32 aParentHandle ) - { - PRINT1( _L( "MM MTP => CMoveObject::GenerateObjectHandleListL aParentHandle = 0x%x" ), aParentHandle ); - RMTPObjectMgrQueryContext context; - RArray handles; - TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll, - aParentHandle ); - CleanupClosePushL( context ); // + context - CleanupClosePushL( handles ); // - handles - - do - { - iFramework.ObjectMgr().GetObjectHandlesL( params, context, handles ); - - TInt numberOfObjects = handles.Count(); - for ( TInt i = 0; i < numberOfObjects; i++ ) - { - if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == iFramework.DataProviderId() ) - { - iObjectHandles.AppendL( handles[i] ); - continue; - } - - // Folder - if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == 0 ) // We know that the device dp id is always 0, otherwise the whole MTP won't work. - { - GenerateObjectHandleListL( handles[i] ); - } - } - } - while ( !context.QueryComplete() ); - - CleanupStack::PopAndDestroy( &handles ); // - handles - CleanupStack::PopAndDestroy( &context ); // - contect - - PRINT( _L( "MM MTP <= CMoveObject::GenerateObjectHandleListL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMoveObject::MoveAndUpdateL -// Move a single object and update the database -// ----------------------------------------------------------------------------- -// -void CMoveObject::MoveAndUpdateL( TUint32 aObjectHandle ) - { - PRINT1( _L( "MM MTP => CMoveObject::MoveAndUpdateL aObjectHanlde = 0x%x" ), aObjectHandle ); - - CMTPObjectMetaData* objectInfo( CMTPObjectMetaData::NewLC() ); // + objectInfo - - RBuf fileName; - fileName.CreateL( KMaxFileName ); - fileName.CleanupClosePushL(); // + fileName - - RBuf rightPartName; - rightPartName.CreateL( KMaxFileName ); - rightPartName.CleanupClosePushL(); // + rightPartName - - RBuf oldName; - oldName.CreateL( KMaxFileName ); - oldName.CleanupClosePushL(); // + oldName - - if ( iFramework.ObjectMgr().ObjectL( TMTPTypeUint32( aObjectHandle ), *objectInfo ) ) - { - fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); - oldName = fileName; - - if ( objectInfo->Uint( CMTPObjectMetaData::EDataProviderId ) - == iFramework.DataProviderId() ) - { - rightPartName = fileName.Right( fileName.Length() - iPathToMove->Length() ); - - if ( ( iNewRootFolder->Length() + rightPartName.Length() ) > fileName.MaxLength() ) - { - User::Leave( KErrCorrupt ); - } - - fileName.Zero(); - fileName.Append( *iNewRootFolder ); - fileName.Append( rightPartName ); - PRINT1( _L( "MM MTP <> MoveAndUpdateL fileName = %S" ), &fileName ); - - if ( iStorageId == objectInfo->Uint( CMTPObjectMetaData::EStorageId ) ) - iSameStorage = ETrue; - else - iSameStorage = EFalse; - GetPreviousPropertiesL( *objectInfo ); - TInt err = iFileMan->Move( oldName, fileName ); - PRINT1( _L( "MM MTP <> CMoveObject::MoveAndUpdateL Move error code = %d" ), err ); - User::LeaveIfError( err ); - User::LeaveIfError( iFramework.Fs().SetModified( fileName, iPreviousModifiedTime ) ); - - objectInfo->SetDesCL( CMTPObjectMetaData::ESuid, fileName ); - objectInfo->SetUint( CMTPObjectMetaData::EStorageId, iStorageId ); - TParsePtrC parentSuid( fileName ); - TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parentSuid.DriveAndPath() ); - objectInfo->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle ); - - //TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parentSuid.DriveAndPath() ); - PRINT1( _L( "MM MTP <> CMoveObject::MoveAndUpdateL parentHandle = 0x%x" ), parentHandle ); - - iFramework.ObjectMgr().ModifyObjectL( *objectInfo ); - - SetPropertiesL( oldName, fileName, *objectInfo ); - } - } - else - { - User::Leave( KErrCorrupt ); - } - - CleanupStack::PopAndDestroy( &oldName ); // - oldName - CleanupStack::PopAndDestroy( &rightPartName ); // - rightPartName - CleanupStack::PopAndDestroy( &fileName ); // - fileName - CleanupStack::PopAndDestroy( objectInfo ); // - objectInfo - PRINT( _L( "MM MTP <= CMoveObject::MoveAndUpdateL" ) ); - } - // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cpropertysettingutility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cpropertysettingutility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,69 @@ +/* +* 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 +#include +#include +#include +#include +#include +#include + +#include "cpropertysettingutility.h" +#include "cmmmtpdpmetadataaccesswrapper.h" +#include "mmmtpdpconfig.h" +#include "mmmtpdputility.h" +#include "mmmtpdplogger.h" + +EXPORT_C CPropertySettingUtility::CPropertySettingUtility() + { + // Do nothing + } + +EXPORT_C CPropertySettingUtility::~CPropertySettingUtility() + { + // Do nothing + } + +// ----------------------------------------------------------------------------- +// CPropertySettingUtility::SetMetaDataToWrapper +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TMTPResponseCode CPropertySettingUtility::SetMetaDataToWrapper( MMmMtpDpConfig& aDpConfig, + const TUint16 aPropCode, + MMTPType& aNewData, + const CMTPObjectMetaData& aObjectMetaData ) + { + TMTPResponseCode responseCode = EMTPRespCodeOK; + TRAPD( err, aDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode, + aNewData, + aObjectMetaData ) ); + + PRINT1( _L("MM MTP <> CPropertySettingUtility::SetMetaDataToWrapper err = %d"), err); + + if ( err == KErrNone ) + responseCode = EMTPRespCodeOK; + else // Other errors are not SetMetaDataToWrapper related, should be respond before this calling + responseCode = EMTPRespCodeGeneralError; + + PRINT1( _L( "MM MTP <= CPropertySettingUtility::SetMetaDataToWrapper resCode = 0x%x" ), responseCode ); + + return responseCode; + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,15 +18,14 @@ #include -#include #include -#include #include #include "crenameobject.h" #include "mmmtpdplogger.h" #include "cmmmtpdpmetadataaccesswrapper.h" #include "crequestprocessor.h" // refer to KMmMtpRArrayGranularity +#include "mmmtpdputility.h" // ----------------------------------------------------------------------------- // CRenameObject::NewL @@ -34,7 +33,7 @@ // ----------------------------------------------------------------------------- // EXPORT_C CRenameObject* CRenameObject::NewL( MMTPDataProviderFramework& aFramework, - CMmMtpDpMetadataAccessWrapper& aWrapper ) + CMmMtpDpMetadataAccessWrapper& aWrapper ) { PRINT( _L( "MM MTP => CRenameObject::NewL" ) ); @@ -59,6 +58,7 @@ iObjectHandles( KMmMtpRArrayGranularity ), iWrapper ( aWrapper ) { + // Do nothing } // ----------------------------------------------------------------------------- @@ -99,6 +99,8 @@ PRINT1( _L( "MM MTP <> CRenameObject::StartL, handle count = %d" ), iCount ); if ( iCount > 0 ) { + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + // get the old/new folder full file name GetParentSuidL( aParentHandle, aOldFolderName ); @@ -121,7 +123,7 @@ // EXPORT_C void CRenameObject::DoCancel() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -150,12 +152,13 @@ iFileName.Append( iNewFolderName ); iFileName.Append( iRightPartName ); PRINT1( _L( "MM MTP <> CRenameObject::RunL new file name(%S)" ), &iFileName ); + + PerformAdditionalActionL(); + // update framework metadata DB iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, iFileName ); iObjectInfo->SetUint( CMTPObjectMetaData::EObjectMetaDataUpdate, 1 ); iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); - - PerformAdditionalActionL(); } } @@ -169,6 +172,8 @@ { if( iRenameWaiter->IsStarted() ) iRenameWaiter->AsyncStop(); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); } PRINT( _L( "MM MTP <= CRenameObject::RunL" ) ); @@ -220,8 +225,7 @@ CleanupClosePushL( context ); // + context CleanupClosePushL( handles ); // + handles - TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll, - aParentHandle ); + TMTPObjectMgrQueryParams params( KMTPStorageAll, KMTPFormatsAll, aParentHandle ); do { iFramework.ObjectMgr().GetObjectHandlesL( params, context, handles ); @@ -232,14 +236,8 @@ if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == iFramework.DataProviderId() ) { iObjectHandles.AppendL( handles[i] ); - continue; - } + // NOTE: Fw changed the mechanism of notification, no need to iterate - // Folder - // TODO: need to modify, should not know device dp id - if ( iFramework.ObjectMgr().ObjectOwnerId( handles[i] ) == 0 ) // We know that the device dp id is always 0, otherwise the whole MTP won't work. - { - GenerateObjectHandleListL( handles[i] ); } } } @@ -260,7 +258,8 @@ const TDesC& aFolderName ) { PRINT2( _L( "MM MTP => CRenameObject::GetParentSuidL aHandle(0x%x), aFolderName(%S)" ), - aHandle, &aFolderName ); + aHandle, + &aFolderName ); CMTPObjectMetaData* objectInfo( CMTPObjectMetaData::NewLC() ); // + objectInfo // get the old folder suid if ( iFramework .ObjectMgr().ObjectL( aHandle, *objectInfo ) ) @@ -268,15 +267,10 @@ iNewFolderName.Zero(); iNewFolderName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); PRINT1( _L( "MM MTP <> CRenameObject::GetParentSuidL new folder full file name(%S)" ), &iNewFolderName ); - const TInt length = iNewFolderName.Length(); - - TParsePtrC parentSuid( iNewFolderName.Left( length - 1 ) ); iOldFolderFullName.Zero(); - iOldFolderFullName.Append( parentSuid.DriveAndPath() ); iOldFolderFullName.Append( aFolderName ); // just name not suid - _LIT( KBackSlash, "\\" ); - iOldFolderFullName.Append( KBackSlash ); + PRINT1( _L( "MM MTP <> CRenameObject::GetParentSuidL = %S" ), &iOldFolderFullName ); } else @@ -297,7 +291,7 @@ PRINT( _L( "MM MTP => CRenameObject::PerformAdditionalActionL" ) ); // update MPX DB - TRAPD( err, iWrapper.RenameObjectL( iOldFileName, iFileName ) ); + TRAPD( err, iWrapper.RenameObjectL( *iObjectInfo, iFileName ) ); // should not fail for 1 file, keep it going, as folder already renamed if ( err != KErrNone ) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestchecker.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestchecker.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestchecker.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -11,12 +11,11 @@ * * Contributors: * -* Description: +* Description: * */ -#include #include #include #include @@ -54,7 +53,7 @@ iHandles( KMTPRequestCheckerHandleGranularity ), iObjectArray( KMTPRequestCheckerHandleGranularity ) { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -64,7 +63,7 @@ // void CRequestChecker::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -80,12 +79,12 @@ // ----------------------------------------------------------------------------- // CRequestChecker::VerifyRequestL -// Verfiy the request +// Verify the request // ----------------------------------------------------------------------------- // TMTPResponseCode CRequestChecker::VerifyRequestL( const TMTPTypeRequest& aRequest, - TInt aCount, - const TMTPRequestElementInfo* aElementInfo ) + TInt aCount, + const TMTPRequestElementInfo* aElementInfo ) { TMTPResponseCode result = EMTPRespCodeOK; iHandles.Close(); @@ -96,9 +95,11 @@ for ( TInt i = 0; i < aCount && EMTPRespCodeOK == result; i++ ) { TUint32 parameter = aRequest.Uint32( aElementInfo[i].iElementIndex ); - PRINT3( _L( "MM MTP <> CRequestChecker parameter %d/%d = %d" ), - i + 1, aCount, parameter ); - + PRINT3( _L( "MM MTP <> CRequestChecker parameter %d/%d = %d" ), + i + 1, + aCount, + parameter ); + if ( !IsSpecialValue( parameter, aElementInfo[i] ) ) { switch ( aElementInfo[i].iElementType ) @@ -198,7 +199,7 @@ ret = EMTPRespCodeSessionNotOpen; } } - + return ret; } @@ -209,7 +210,7 @@ // ----------------------------------------------------------------------------- // TMTPResponseCode CRequestChecker::VerifySessionId( TUint32 aSessionId, - const TMTPRequestElementInfo& /*aElementInfo*/ ) const + const TMTPRequestElementInfo& /*aElementInfo*/ ) const { TMTPResponseCode ret = EMTPRespCodeOK; @@ -224,7 +225,7 @@ { ret = EMTPRespCodeInvalidParameter; } - + return ret; } @@ -235,7 +236,7 @@ // ----------------------------------------------------------------------------- // TMTPResponseCode CRequestChecker::VerifyObjectHandleL( TUint32 aHandle, - const TMTPRequestElementInfo& aElementInfo ) + const TMTPRequestElementInfo& aElementInfo ) { PRINT1( _L("MM MTP => CRequestChecker::VerifyObjectHandleL aHandle = 0x%x"), aHandle ); TMTPResponseCode ret = EMTPRespCodeOK; @@ -252,61 +253,35 @@ const TDesC& suid( object->DesC( CMTPObjectMetaData::ESuid ) ); TEntry entry; TInt err = iFramework.Fs().Entry( suid, entry ); - - if ( object->Uint( CMTPObjectMetaData::EFormatCode ) == EMTPFormatCodeAssociation ) -// && ( object->Uint( CMTPObjectMetaData::EFormatSubCode ) == EMTPAssociationTypeGenericFolder ) ) - { - // Special association type .. not always present on the filesystem. - return ret; - } - else + + if ( err == KErrNotFound ) { - User::LeaveIfError( err ); - + iFramework.ObjectMgr().RemoveObjectL( suid ); + // TODO: workaround for abstractalbumart + // ret = EMTPRespCodeInvalidObjectHandle; + } + else if ( err != KErrNone ) + ret = EMTPRespCodeGeneralError; + else if ( object->Uint( CMTPObjectMetaData::EFormatCode ) != EMTPFormatCodeAssociation ) + { if ( iFramework.ObjectMgr().ObjectOwnerId( aHandle ) != iFramework.DataProviderId() ) - { - PRINT( _L(" ewrwe ret = EMTPRespCodeInvalidObjectHandle;")); ret = EMTPRespCodeInvalidObjectHandle; - } - } - if ( aElementInfo.iElementAttr & EMTPElementAttrWrite ) - { - if ( entry.IsReadOnly() ) - { + if ( ( aElementInfo.iElementAttr & EMTPElementAttrWrite ) && entry.IsReadOnly() ) ret = EMTPRespCodeObjectWriteProtected; - } - } - - //((EMTPRespCodeOK == ret) && (aElementInfo.iElementAttr & EMTPElementAttrFileOrDir)) is - // covered implicitly here, EMTPRespCodeOK will be returned. It is a valid case for an object to be either a folder or file - // for certain operation's request parameter, for instance the first parameter of copyObject or - // moveObject can be either a file or a directory. - // Other cases. - if ( ( EMTPRespCodeOK == ret ) && ( aElementInfo.iElementAttr & EMTPElementAttrFile) ) - { - if ( entry.IsDir() ) - { + if ( ( EMTPRespCodeOK == ret ) && ( aElementInfo.iElementAttr & EMTPElementAttrFile ) && entry.IsDir() ) ret = EMTPRespCodeInvalidObjectHandle; - } - } - if ( ( EMTPRespCodeOK == ret ) && ( aElementInfo.iElementAttr & EMTPElementAttrDir ) ) - { - if (!entry.IsDir()) - { + if ( ( EMTPRespCodeOK == ret ) && ( aElementInfo.iElementAttr & EMTPElementAttrDir ) && !entry.IsDir() ) ret = EMTPRespCodeInvalidParentObject; - } } } else - { - PRINT( _L( "MM MTP <> CRequestChecker::VerifyObjectHandleL, Object does not exist." ) ); ret = EMTPRespCodeInvalidObjectHandle; - } + PRINT1( _L( "MM MTP <= CRequestChecker::VerifyObjectHandleL ret = 0x%x" ), ret ); - + return ret; } @@ -316,7 +291,7 @@ // ----------------------------------------------------------------------------- // TMTPResponseCode CRequestChecker::VerifyStorageIdL( TUint32 aStorageId, - const TMTPRequestElementInfo& aElementInfo ) const + const TMTPRequestElementInfo& aElementInfo ) const { MMTPStorageMgr& mgr( iFramework.StorageMgr() ); TMTPResponseCode ret( EMTPRespCodeOK ); @@ -357,7 +332,7 @@ } } } - + return ret; } @@ -367,7 +342,7 @@ // ----------------------------------------------------------------------------- // TMTPResponseCode CRequestChecker::VerifyFormatCode( TUint32 aFormatCode, - const TMTPRequestElementInfo& aElementInfo ) const + const TMTPRequestElementInfo& aElementInfo ) const { PRINT1( _L( "MM MTP => CRequestChecker::VerifyFormatCode aFormatCode = 0x%x" ), aFormatCode ); TMTPResponseCode ret = EMTPRespCodeInvalidObjectFormatCode; @@ -395,7 +370,7 @@ } PRINT1( _L( "MM MTP => CRequestChecker::VerifyFormatCode ret = 0x%x" ), ret ); - + return ret; } @@ -405,7 +380,7 @@ // ----------------------------------------------------------------------------- // TBool CRequestChecker::IsSpecialValue( TUint32 aParameter, - const TMTPRequestElementInfo& aElementInfo ) const + const TMTPRequestElementInfo& aElementInfo ) const { TBool result = EFalse; switch ( aElementInfo.iCount ) @@ -413,16 +388,16 @@ case 1: result = ( aParameter == aElementInfo.iValue1 ); break; - + case 2: result = ( aParameter == aElementInfo.iValue1 || aParameter == aElementInfo.iValue2 ); break; - + default: break; } - + return result; } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,15 +18,13 @@ #include #include -#include #include #include #include -#include -#include #include "crequestprocessor.h" #include "crequestchecker.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" static const TInt KNullBufferSize = 4096; @@ -39,13 +37,15 @@ EXPORT_C CRequestProcessor::CRequestProcessor( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, TInt aElementCount, - const TMTPRequestElementInfo* aElements ): - CActive( EPriorityStandard ), - iFramework( aFramework ), - iConnection( aConnection ), - iElementCount( aElementCount ), - iElements( aElements ) + const TMTPRequestElementInfo* aElements ) : + CActive( EPriorityStandard ), + iFramework( aFramework ), + iConnection( aConnection ), + iElementCount( aElementCount ), + iElements( aElements ) { + // Note: It has been moved to specific operation handler + // Some operations don't need add into active scheduler // CActiveScheduler::Add( this ); } @@ -56,7 +56,9 @@ // EXPORT_C CRequestProcessor::~CRequestProcessor() { -// Cancel(); + // Note: It has been moved to specific operation handler + // Some operations don't need add into active scheduler + // Cancel(); iNullBuffer.Close(); delete iRequestChecker; } @@ -135,7 +137,6 @@ // EXPORT_C void CRequestProcessor::UsbDisconnect() { - // TODO: reset the CenRep value } // ----------------------------------------------------------------------------- @@ -211,6 +212,7 @@ break; case ECompletingPhase: + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); result = DoHandleCompletingPhaseL(); break; @@ -390,7 +392,7 @@ // EXPORT_C void CRequestProcessor::RunL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -400,7 +402,7 @@ // EXPORT_C void CRequestProcessor::DoCancel() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -410,8 +412,11 @@ // EXPORT_C TInt CRequestProcessor::RunError( TInt aError ) { - PRINT1( _L( "MM MTP <> CRequestProcessor RunError = %d" ), aError ); + if ( aError != KErrNone ) + PRINT1( _L( "MM MTP <> CRequestProcessor RunError = %d" ), aError ); + TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) ); + return KErrNone; } @@ -421,23 +426,6 @@ } // ----------------------------------------------------------------------------- -// CRequestProcessor::SetPSStatus -// Set P&S Status to avoid MPX access conflict -// ----------------------------------------------------------------------------- -// -void CRequestProcessor::SetPSStatus() - { - TInt mtpStatus; - RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); - - if ( mtpStatus != EMtpPSStatusActive ) - { - TInt err = RProperty::Set( KMtpPSUid, KMtpPSStatus, EMtpPSStatusActive ); - PRINT1( _L("MM MTP <> CRequestProcessor::SetPSStatus err = %d" ), err ); - } - } - -// ----------------------------------------------------------------------------- // CRequestProcessor::ExtractSessionTransactionId // retrieve the session id and transaction code from the current request // ----------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestunknown.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestunknown.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestunknown.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -42,7 +42,7 @@ // void CRequestUnknown::ConstructL() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -52,7 +52,7 @@ // EXPORT_C CRequestUnknown::~CRequestUnknown() { - + // Do nothing } // ----------------------------------------------------------------------------- @@ -60,9 +60,9 @@ // Standard c++ constructor // ----------------------------------------------------------------------------- // -EXPORT_C CRequestUnknown::CRequestUnknown( MMTPDataProviderFramework& aFramework, +CRequestUnknown::CRequestUnknown( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection ) : - CRequestProcessor( aFramework, aConnection, 0, NULL ) + CRequestProcessor( aFramework, aConnection, 0, NULL ) { PRINT( _L( "Operation: Unknown" ) ); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,14 +16,11 @@ */ -#include #include #include -#include #include #include #include -#include #include #include @@ -32,8 +29,11 @@ #include "mmmtpdputility.h" #include "tmmmtpdppanic.h" #include "mmmtpdplogger.h" +#include "cpropertysettingutility.h" #include "cmmmtpdpmetadataaccesswrapper.h" +const TInt KMtpRollbackFuncCnt = 3; + // Verification data for the SendObjectInfo request const TMTPRequestElementInfo KMTPSendObjectInfoPolicy[] = { @@ -57,21 +57,32 @@ }; // ----------------------------------------------------------------------------- +// CSendObject::NewL +// Two-phase construction method +// ----------------------------------------------------------------------------- +// +EXPORT_C MMmRequestProcessor* CSendObject::NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) + { + CSendObject* self = new ( ELeave ) CSendObject( aFramework, aConnection, aDpConfig ); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } + +// ----------------------------------------------------------------------------- // CSendObject::~CSendObject // Destructor // ----------------------------------------------------------------------------- // EXPORT_C CSendObject::~CSendObject() { - if ( ( iProgress == EObjectInfoSucceed - || iProgress == EObjectInfoFail - || iProgress == EObjectInfoInProgress ) - && !iNoRollback ) - { - // Not finished SendObjectInfo \ SendObject pair detected. - Rollback(); - PRINT( _L( "MM MTP <> CSendObject::~CSendObject, Rollback" ) ); - } + Rollback(); + iRollbackList.Close(); delete iFileReceived; delete iParentSuid; @@ -88,13 +99,14 @@ // Standard C++ Constructor // ----------------------------------------------------------------------------- // -EXPORT_C CSendObject::CSendObject( MMTPDataProviderFramework& aFramework, +CSendObject::CSendObject( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( aFramework, aConnection, 0, NULL), + CRequestProcessor( aFramework, aConnection, 0, NULL ), iFs( iFramework.Fs() ), iObjectMgr( iFramework.ObjectMgr() ), - iDpConfig( aDpConfig ) + iDpConfig( aDpConfig ), + iRollbackList( KMtpRollbackFuncCnt ) { PRINT( _L( "Operation: SendObjectInfo/SendObject/SendObjectPropList(0x100C/0x100D/0x9808)" ) ); } @@ -104,7 +116,7 @@ // 2nd Phase Constructor // ----------------------------------------------------------------------------- // -EXPORT_C void CSendObject::ConstructL() +void CSendObject::ConstructL() { PRINT( _L( "MM MTP => CSendObject::ConstructL" ) ); @@ -117,9 +129,6 @@ PRINT1( _L( "MM MTP <> CSendObject::ConstructL DataProviderId = 0x%x" ), iFramework.DataProviderId()); - iNoRollback = EFalse; - - SetPSStatus(); PRINT( _L( "MM MTP <= CSendObject::ConstructL" ) ); } @@ -287,11 +296,6 @@ { responseCode = EMTPRespCodeObjectTooLarge; } - - if ( ( responseCode != EMTPRespCodeOK ) && !CanStoreFileL( iStorageId, iObjectSize ) ) - { - responseCode = EMTPRespCodeStoreFull; - } } } @@ -319,6 +323,8 @@ EXPORT_C void CSendObject::ServiceL() { PRINT( _L( "MM MTP => CSendObject::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); if ( iProgress == EObjectNone ) { @@ -379,22 +385,7 @@ void CSendObject::ServiceObjectL() { PRINT( _L( "MM MTP => CSendObject::ServiceObjectL" ) ); - - delete iFileReceived; - iFileReceived = NULL; - - PRINT2( _L( "MM MTP <> CSendObject::ServiceObjectL, iFullPath is %S, iObjectSize: %Lu" ), &iFullPath, iObjectSize ); - TRAPD( err, iFileReceived = CMTPTypeFile::NewL( iFs, - iFullPath, - EFileWrite ) ); - - PRINT1( _L("MM MTP <> CSendObject::ServiceObjectL, Leave Code is: %d"), err ); - User::LeaveIfError( err ); - - iFileReceived->SetSizeL( iObjectSize ); - ReceiveDataL( *iFileReceived ); - iProgress = ESendObjectInProgress; PRINT( _L( "MM MTP <= CSendObject::ServiceObjectL" ) ); @@ -466,12 +457,7 @@ if ( IsTooLarge( iObjectSize ) ) { SendResponseL( EMTPRespCodeObjectTooLarge ); - result = EFalse; - } - - if ( result && !CanStoreFileL( iStorageId, iObjectSize ) ) - { - SendResponseL( EMTPRespCodeStoreFull ); + Rollback(); result = EFalse; } @@ -483,6 +469,7 @@ && iProtectionStatus != EMTPProtectionReadOnly ) { SendResponseL( EMTPRespCodeParameterNotSupported ); + Rollback(); result = EFalse; } } @@ -494,6 +481,7 @@ { // File and/or parent pathname invalid. SendResponseL( EMTPRespCodeInvalidDataset ); + Rollback(); } } @@ -501,16 +489,19 @@ { if ( ExistsL( iFullPath ) ) { - // Object with the same name already exists. - iNoRollback = ETrue; SendResponseL( EMTPRespCodeAccessDenied ); + Rollback(); result = EFalse; } } if ( result ) - ReserveObjectL(); - + { + if ( KErrNone != ReserveObjectL() ) + { + result = EFalse; + } + } PRINT1( _L( "MM MTP <= CSendObject::DoHandleResponsePhaseInfoL result = %d" ), result ); return result; @@ -529,6 +520,7 @@ TInt invalidParameterIndex = KErrNotFound; responseCode = VerifyObjectPropListL( invalidParameterIndex ); + TInt err = KErrNone; if ( responseCode != EMTPRespCodeOK ) { @@ -538,18 +530,18 @@ parameters[2] = 0; parameters[3] = invalidParameterIndex; SendResponseL( responseCode, 4, parameters ); + Rollback(); } else if ( ExistsL( iFullPath ) ) { - // Object with the same name already exists. - iNoRollback = ETrue; SendResponseL( EMTPRespCodeAccessDenied ); + Rollback(); } else - ReserveObjectL(); + err = ReserveObjectL(); PRINT( _L( "MM MTP <= CSendObject::DoHandleResponsePhasePropListL" ) ); - return ( responseCode == EMTPRespCodeOK ); + return ( responseCode == EMTPRespCodeOK && err == KErrNone); } // ----------------------------------------------------------------------------- @@ -563,21 +555,19 @@ TBool result = ETrue; - delete iFileReceived; - iFileReceived = NULL; - TEntry fileEntry; User::LeaveIfError( iFs.Entry( iFullPath, fileEntry ) ); - if ( fileEntry.iSize != iObjectSize ) + if ( fileEntry.FileSize() != iObjectSize ) { iFs.Delete( iFullPath ); iObjectMgr.UnreserveObjectHandleL( *iReceivedObjectInfo ); TMTPResponseCode responseCode = EMTPRespCodeObjectTooLarge; - if ( fileEntry.iSize < iObjectSize ) + if ( fileEntry.FileSize() < iObjectSize ) { responseCode = EMTPRespCodeIncompleteTransfer; } SendResponseL( responseCode ); + Rollback(); result = EFalse; } @@ -586,23 +576,28 @@ { iFramework.RouteRequestUnregisterL( iExpectedSendObjectRequest, iConnection ); + SendResponseL( EMTPRespCodeTransactionCancelled ); Rollback(); - SendResponseL( EMTPRespCodeTransactionCancelled ); } else if ( result && !iCancelled ) { if ( iObjectSize > 0 ) // media file { - AddMediaToStoreL(); + TRAPD( err, AddMediaToStoreL() ); + PRINT1( _L( "MM MTP <= CSendObject::DoHandleResponsePhaseObjectL err = %d" ), err ); - if( iPreviousOperation == EMTPOpCodeSendObjectPropList ) + if ( ( iPreviousOperation == EMTPOpCodeSendObjectPropList ) + && ( err == KErrNone ) ) { - SetObjectPropListL( *iObjectPropList ); + // Only leave when getting proplist element from data received by fw. + // It should not happen after ReceiveDataL in which construction of proplist already succeed. + SetObjectPropListL(); } // Commits into MTP data object enumeration store the object handle and // storage space previously reserved for the specified object. iFramework.ObjectMgr().CommitReservedObjectHandleL( *iReceivedObjectInfo ); + iRollbackList.Append( &CSendObject::RemoveObjectFromDbL ); } // Commit object to MTP data store @@ -641,6 +636,9 @@ result = EFalse; } + if ( result ) + iRollbackList.Reset(); + PRINT2( _L( "MM MTP <= CSendObject::DoHandleCompletingPhaseL iProgress= %d, result = %d" ), iProgress, result ); @@ -684,7 +682,7 @@ } } - PRINT1( _L( "MM MTP <= CSendObject::VerifyObjectPropListL, responseCode = 0x%X" ), responseCode ); + PRINT1( _L( "MM MTP <= CSendObject::VerifyObjectPropListL, responseCode = 0x%x" ), responseCode ); return responseCode; } @@ -703,7 +701,7 @@ const RArray* properties = iDpConfig.GetSupportedPropertiesL( iObjectFormat ); TUint16 propCode = aElement.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode ); TUint16 dataType = aElement.Uint16L( CMTPTypeObjectPropListElement::EDatatype ); - PRINT2( _L( "MM MTP => CSendObject::CheckPropCodeL propCode = 0x%X, dataType = 0x%X" ), propCode, dataType ); + PRINT2( _L( "MM MTP => CSendObject::CheckPropCodeL propCode = 0x%x, dataType = 0x%x" ), propCode, dataType ); responseCode = EMTPRespCodeInvalidObjectPropCode; const TInt count = properties->Count(); @@ -785,7 +783,6 @@ break; case EMTPObjectPropCodeDateCreated: - // TODO: this property is read-only, should response EMTPRespCodeAccessDenied or set nothing? case EMTPObjectPropCodeDateModified: case EMTPObjectPropCodeObjectFileName: case EMTPObjectPropCodeName: @@ -805,11 +802,15 @@ default: // check types of DP specific properties // TODO: Is there anything except datatype need to be checked? - responseCode = CheckSepecificPropType( propCode, dataType ); + responseCode = MmMtpDpUtility::CheckPropType( propCode, dataType ); + if ( responseCode == EMTPRespCodeAccessDenied ) + { + responseCode = EMTPRespCodeOK; + } break; } - PRINT1( _L( "MM MTP <= CSendObject::CheckPropCode, responseCode = 0x%X" ), responseCode ); + PRINT1( _L( "MM MTP <= CSendObject::CheckPropCode, responseCode = 0x%x" ), responseCode ); return responseCode; } @@ -858,7 +859,7 @@ break; } - PRINT1( _L( "MM MTP <= CSendObject::ExtractPropertyL, responseCode = 0x%X" ), responseCode ); + PRINT1( _L( "MM MTP <= CSendObject::ExtractPropertyL, responseCode = 0x%x" ), responseCode ); return responseCode; } @@ -867,7 +868,7 @@ // Reserve object proplist into database // ----------------------------------------------------------------------------- // -TMTPResponseCode CSendObject::SetObjectPropListL( const CMTPTypeObjectPropList& aPropList ) +TMTPResponseCode CSendObject::SetObjectPropListL() { PRINT( _L( "MM MTP => CSendObject::SetObjectPropListL" ) ); @@ -882,13 +883,13 @@ TUint16 propertyCode = element.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode ); TUint16 dataType = element.Uint16L( CMTPTypeObjectPropListElement::EDatatype ); PRINT2( _L( "MM MTP <> SetObjectPropListL propertyCode = 0x%x, dataType = 0x%x" ), - propertyCode, dataType ); + propertyCode, + dataType ); switch ( propertyCode ) { case EMTPObjectPropCodeStorageID: case EMTPObjectPropCodeObjectFormat: - case EMTPObjectPropCodeProtectionStatus: case EMTPObjectPropCodeObjectSize: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: @@ -896,11 +897,15 @@ break; case EMTPObjectPropCodeNonConsumable: + iReceivedObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, + element.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); + break; + case EMTPObjectPropCodeDateAdded: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: case EMTPObjectPropCodeObjectFileName: - // TODO: Does anything need to be done on these read-only properties? + // Do nothing for read-only properties /* spec: * Object properties that are get-only (0x00 GET) * should accept values during object creation by @@ -908,11 +913,18 @@ */ break; + case EMTPObjectPropCodeProtectionStatus: + // Already done in AddMediaToStore, it's not necessary to set it again. + // SetProtectionStatus(); + break; + case EMTPObjectPropCodeName: + case EMTPObjectPropCodeAlbumArtist: { CMTPTypeString* stringData = CMTPTypeString::NewLC( element.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData - responseCode = SetMetaDataToWrapperL( propertyCode, + responseCode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapper( iDpConfig, + propertyCode, *stringData, *iReceivedObjectInfo ); @@ -922,7 +934,8 @@ default: { - responseCode = SetSpecificObjectPropertyL( propertyCode, + responseCode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig, + propertyCode, *iReceivedObjectInfo, element ); } @@ -935,53 +948,6 @@ } // ----------------------------------------------------------------------------- -// CSendObject::SetMetaDataToWrapperL -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TMTPResponseCode CSendObject::SetMetaDataToWrapperL( const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ) - { - TMTPResponseCode resCode = EMTPRespCodeOK; - TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode, - aNewData, - aObjectMetaData ) ); - - PRINT1( _L("MM MTP <> CSendObject::SetMetaDataToWrapperL err = %d"), err); - - if ( err == KErrNone ) - { - resCode = EMTPRespCodeOK; - } - else if ( err == KErrTooBig ) - // according to the codes of S60 - { - resCode = EMTPRespCodeInvalidDataset; - } - else if ( err == KErrPermissionDenied ) - { - resCode = EMTPRespCodeAccessDenied; - } - else if ( err == KErrNotFound ) - { - if ( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) ) - SendResponseL( EMTPRespCodeAccessDenied ); - } - else - { - err = HandleSpecificWrapperError( err, aObjectMetaData ); - - if ( err != KErrNone ) - resCode = EMTPRespCodeGeneralError; - } - - PRINT1( _L( "MM MTP <= CSendObject::SetMetaDataToWrapperL resCode = 0x%x" ), resCode ); - - return resCode; - } - -// ----------------------------------------------------------------------------- // CSendObject::MatchStoreAndParentL // ----------------------------------------------------------------------------- // @@ -991,14 +957,14 @@ iStorageId = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); iParentHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); - PRINT2( _L( "MM MTP <> CSendObject::MatchStoreAndParentL, iStorageId = 0x%X, iParentHandle = 0x%X" ), + PRINT2( _L( "MM MTP <> CSendObject::MatchStoreAndParentL, iStorageId = 0x%x, iParentHandle = 0x%x" ), iStorageId, iParentHandle ); if ( iStorageId == KMTPStorageDefault ) { iStorageId = iDpConfig.GetDefaultStorageIdL(); - PRINT1( _L( "MM MTP <> CSendObject::GetDefaultStorageIdL, iStorageId = 0x%X" ), iStorageId ); + PRINT1( _L( "MM MTP <> CSendObject::GetDefaultStorageIdL, iStorageId = 0x%x" ), iStorageId ); } delete iParentSuid; @@ -1046,38 +1012,14 @@ // @return ETrue if yes, otherwise EFalse // ----------------------------------------------------------------------------- // -TBool CSendObject::IsTooLarge( TUint32 aObjectSize ) const +TBool CSendObject::IsTooLarge( TUint64 aObjectSize ) const { - TBool ret = ( aObjectSize > KMaxTInt ); - PRINT2( _L( "MM MTP <> CSendObject::IsTooLarge aObjectSize = %d, ret = %d" ), aObjectSize, ret ); + const TUint64 KMaxSupportedFileSize = 0xFFFFFFFF; //Maximal file size supported (4GB-1) + TBool ret = ( aObjectSize > KMaxSupportedFileSize ); + PRINT2( _L( "MM MTP <> CSendObject::IsTooLarge aObjectSize = 0x%Lx, ret = %d" ), aObjectSize, ret ); return ret; } -// ----------------------------------------------------------------------------- -// CSendObject::CanStoreFileL -// Check if we can store the file on the storage -// @return ETrue if yes, otherwise EFalse -// ----------------------------------------------------------------------------- -// -TBool CSendObject::CanStoreFileL( TUint32 aStorageId, - TInt64 aObjectSize ) const - { - PRINT( _L( "MM MTP => CSendObject::CanStoreFileL" ) ); - - TBool result = ETrue; - TVolumeInfo volumeInfo; - TInt driveNo = iFramework.StorageMgr().DriveNumber( aStorageId ); - User::LeaveIfError( iFs.Volume( volumeInfo, driveNo ) ); - - if ( volumeInfo.iFree < aObjectSize ) - { - result = EFalse; - } - - PRINT1( _L( "MM MTP <= CSendObject::CanStoreFileL , result = %d" ), result ); - - return result; - } // ----------------------------------------------------------------------------- // CSendObject::GetFullPathNameL @@ -1091,21 +1033,45 @@ PRINT1( _L("MM MTP => CSendObject::GetFullPathNameL aFileName = %S"), &aFileName ); TBool result( EFalse ); + + TParsePtrC parser( aFileName ); if ( aFileName.Length() > 0 ) { iFullPath.Zero(); iFullPath.Append( *iParentSuid ); - if ( ( iFullPath.Length() + aFileName.Length() ) < KMaxFileName ) + + // TODO: need to be done in derived class + // Only add extension for alb to pass winlogo test cases + TInt length = iFullPath.Length() + aFileName.Length(); + + TBool isAlbWithoutExt = + ( ( iObjectFormat == EMTPFormatCodeAbstractAudioAlbum ) && ( !parser.ExtPresent() ) ); + if ( isAlbWithoutExt ) + length += KTxtExtensionALB().Length(); + + if ( length < KMaxFileName ) { iFullPath.Append( aFileName ); + if ( isAlbWithoutExt ) + iFullPath.Append( KTxtExtensionALB ); PRINT1( _L( "MM MTP <> CSendObject::GetFullPathNameL iFullPath = %S" ), &iFullPath ); result = iFramework.Fs().IsValidName( iFullPath ); } } + if ( result && ( iObjectFormat != MmMtpDpUtility::FormatFromFilename( iFullPath ) ) ) { - PRINT2( _L( "MM MTP <> %S does not match 0x%x" ), &iFullPath, iObjectFormat ); - result = EFalse; + if ( ( iObjectFormat == EMTPFormatCode3GPContainer ) && ( parser.Ext().CompareF( KTxtExtensionODF ) == 0)) + { + PRINT( _L( "MM MTP <> might happen if function is called before physical file arrives" ) ); + // might happen if function is called before physical file arrives + // do nothing + } + else + { + PRINT2( _L( "MM MTP <> %S does not match 0x%x" ), &iFullPath, iObjectFormat ); + result = EFalse; + } } PRINT1( _L( "MM MTP <= CSendObject::GetFullPathNameL result = %d" ), result ); @@ -1157,7 +1123,7 @@ // CSendObject::ReserveObjectL // ----------------------------------------------------------------------------- // -void CSendObject::ReserveObjectL() +TInt CSendObject::ReserveObjectL() { PRINT( _L( "MM MTP => CSendObject::ReserveObjectL" ) ); TInt err = KErrNone; @@ -1172,54 +1138,114 @@ // Reserves space for and assigns an object handle to the object described // by the specified object information record. TRAP( err, iObjectMgr.ReserveObjectHandleL( *iReceivedObjectInfo, - iObjectSize ) ); + iObjectSize ) ); + iRollbackList.Append( &CSendObject::UnreserveObjectL ); PRINT2( _L( "MM MTP => CSendObject::ReserveObjectL iObjectsize = %Lu, Operation: 0x%x" ), iObjectSize, iOperationCode ); if ( err != KErrNone ) - PRINT1( _L( "MM MTP <> CSendObject::ReserveObjectL err = %d" ), err ); - if ( iObjectSize == 0 ) + { + PRINT1( _L( "MM MTP <> ReserveObjectHandleL err = %d" ), err ); + } + + if ( err == KErrNone ) { - SaveEmptyFileL(); - iObjectMgr.CommitReservedObjectHandleL( *iReceivedObjectInfo ); + delete iFileReceived; + iFileReceived = NULL; + PRINT2( _L( "MM MTP <> CSendObject::ServiceObjectL, iFullPath is %S, iObjectSize: %Lu" ), &iFullPath, iObjectSize ); + iRollbackList.Append( &CSendObject::RemoveObjectFromFs ); + TRAP( err, iFileReceived = CMTPTypeFile::NewL( iFs, iFullPath, EFileWrite ) ); + + PRINT1( _L("MM MTP <> CMTPTypeFile::NewL Leave Code is: %d"), err ); + } + + if ( err == KErrNone ) + { + TRAP( err, iFileReceived->SetSizeL( iObjectSize ) ); + PRINT1( _L( "MM MTP <> SetSizeL leave code:%d" ), err ); + if ( err == KErrDiskFull ) + { + SendResponseL( EMTPRespCodeStoreFull ); + Rollback(); + return err; + } } - iExpectedSendObjectRequest.SetUint32( TMTPTypeRequest::ERequestSessionID, - iSessionId ); - iFramework.RouteRequestRegisterL( iExpectedSendObjectRequest, iConnection ); + if ( err == KErrNone && iObjectSize == 0 ) + { + // Already trapped inside SaveEmptyFileL. + SaveEmptyFileL(); + if ( iOperationCode == EMTPOpCodeSendObjectPropList ) + { + // Only leave when getting proplist element from data received by fw. + // It should not happen after ReceiveDataL in which construction of proplist already succeed. + SetObjectPropListL(); + } + + iObjectMgr.CommitReservedObjectHandleL( *iReceivedObjectInfo ); + iRollbackList.Reset(); + } - TUint32 parameters[3]; - parameters[0] = iStorageId; - parameters[1] = iParentHandle; - parameters[2] = iReceivedObjectInfo->Uint( CMTPObjectMetaData::EHandle ); - SendResponseL( EMTPRespCodeOK, 3, parameters ); + if ( err == KErrNone ) + { + iExpectedSendObjectRequest.SetUint32( TMTPTypeRequest::ERequestSessionID, iSessionId ); + iFramework.RouteRequestRegisterL( iExpectedSendObjectRequest, iConnection ); + + TUint32 parameters[3]; + parameters[0] = iStorageId; + parameters[1] = iParentHandle; + parameters[2] = iReceivedObjectInfo->Uint( CMTPObjectMetaData::EHandle ); + SendResponseL( EMTPRespCodeOK, 3, parameters ); + } + else + { + SendResponseL( EMTPRespCodeGeneralError ); + Rollback(); + } PRINT( _L( "MM MTP <= CSendObject::ReserveObjectL" ) ); + return err; } // ----------------------------------------------------------------------------- -// CSendObject::SetProtectionStatusL +// CSendObject::SetProtectionStatus // ----------------------------------------------------------------------------- // -void CSendObject::SetProtectionStatusL() +void CSendObject::SetProtectionStatus() { - PRINT1( _L( "MM MTP => CSendObject::SetProtectionStatusL iProtectionStatus = %d" ), iProtectionStatus ); + PRINT1( _L( "MM MTP => CSendObject::SetProtectionStatus iProtectionStatus = %d" ), iProtectionStatus ); - if ( iProtectionStatus == EMTPProtectionNoProtection - || iProtectionStatus == EMTPProtectionReadOnly ) + if ( iFileReceived != NULL ) { - // TODO: wait for review - TInt err = KErrNone; - if ( iProtectionStatus == EMTPProtectionNoProtection ) + if ( iProtectionStatus == EMTPProtectionNoProtection + || iProtectionStatus == EMTPProtectionReadOnly ) { - iFs.SetAtt( iFullPath, KEntryAttNormal, KEntryAttReadOnly ); + TInt err = KErrNone; + if ( iProtectionStatus == EMTPProtectionNoProtection ) + { + err = iFileReceived->File().SetAtt( KEntryAttNormal, KEntryAttReadOnly ); + } + else + { + err = iFileReceived->File().SetAtt( KEntryAttReadOnly, KEntryAttNormal ); + } + + if ( err != KErrNone ) + { + PRINT1( _L("MM MTP <> CSendObject::SetProtectionStatus err = %d" ), err ); + } + } + // Close the file after SetProtectionStatus to make sure other process won't open + // the file successfully right at the time calling RFile::SetAtt. + if ( iObjectSize > 0 ) + { + delete iFileReceived; + iFileReceived = NULL; } else - { - iFs.SetAtt( iFullPath, KEntryAttReadOnly, KEntryAttNormal ); - } - User::LeaveIfError( err ); + iFileReceived->File().Close(); } - PRINT( _L( "MM MTP <= CSendObject::SetProtectionStatusL" ) ); + + PRINT( _L( "MM MTP <= CSendObject::SetProtectionStatus" ) ); } // ----------------------------------------------------------------------------- @@ -1230,30 +1256,29 @@ { PRINT( _L( "MM MTP => CSendObject::SaveEmptyFileL" ) ); - RFile file; - User::LeaveIfError( file.Create( iFs, iFullPath, EFileWrite ) ); - file.Close(); - - // set entry protection status and modified date - SetProtectionStatusL(); - - // add playlist to MPX DB - TParsePtrC parse( iFullPath ); - iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() ); - iDpConfig.GetWrapperL().AddObjectL( iFullPath ); - if ( EMTPFormatCodeAbstractAudioVideoPlaylist == iObjectFormat ) { - TInt err = KErrNone; - err = iFs.SetAtt( iFullPath, - KEntryAttSystem | KEntryAttHidden, + TInt err = iFileReceived->File().SetAtt( KEntryAttSystem | KEntryAttHidden, KEntryAttReadOnly | KEntryAttNormal ); if ( err != KErrNone ) PRINT1( _L( "MM MTP <> CSendObject::SaveEmptyFileL err = %d" ), err ); iDpConfig.GetWrapperL().AddDummyFileL( iFullPath ); } - PRINT( _L( "MM MTP <= CSendObject::SaveEmptyFileL" ) ); + // Set subformat code to avoid MPX query for the first time to GetObjectReference, + // in which case references has been kept in fw. + if ( MmMtpDpUtility::HasReference( iObjectFormat ) ) + iReceivedObjectInfo->SetUint( CMTPObjectMetaData::EFormatSubCode, EMTPSubFormatCodeUndefined ); + + // add playlist to MPX DB + TRAPD( err, AddMediaToStoreL() ); + + if ( err != KErrNone ) + iRollbackList.Append( &CSendObject::RemoveObjectFromDbL ); + else + iRollbackList.Reset(); + + PRINT1( _L( "MM MTP <= CSendObject::SaveEmptyFileL err = %d" ), err ); } // ----------------------------------------------------------------------------- @@ -1265,56 +1290,15 @@ { PRINT( _L( "MM MTP => CSendObject::AddMediaToStoreL" ) ); - TBool isVideo = EFalse; - switch ( iObjectFormat ) - { - case EMTPFormatCode3GPContainer: - case EMTPFormatCodeMP4Container: - case EMTPFormatCodeASF: - { - TMmMtpSubFormatCode subFormatCode; - - if ( MmMtpDpUtility::IsVideoL( iFullPath ) ) - { - subFormatCode = EMTPSubFormatCodeVideo; - isVideo = ETrue; - } - else - { - subFormatCode = EMTPSubFormatCodeAudio; - isVideo = EFalse; - } - - iReceivedObjectInfo->SetUint( CMTPObjectMetaData::EFormatSubCode, - ( TUint ) subFormatCode ); - } - break; + // SetProtectionStatus here make sure no matter the previous operation is SendObjectInfo + // or SendObjectPropList + // Might need to set dateadded and datemodify for further extension. + SetProtectionStatus(); - // put all just video format codes here - case EMTPFormatCodeWMV: - { - isVideo = ETrue; - } - break; - - default: - PRINT( _L( "MM MTP <> CSendObject::DoHandleResponsePhaseObjectL default" ) ); - break; - } + PRINT1( _L( "MM MTP <> CSendObject::AddMediaToStoreL iFullPath = %S" ), &iFullPath ); + iDpConfig.GetWrapperL().AddObjectL( *iReceivedObjectInfo ); - TPtrC suid( iReceivedObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); - PRINT1( _L( "MM MTP <> CSendObject::AddMediaToStoreL suid = %S" ), &suid ); - TParsePtrC parse( suid ); - iDpConfig.GetWrapperL().SetStorageRootL( parse.Drive() ); - iDpConfig.GetWrapperL().AddObjectL( iFullPath, isVideo ); - - if ( isVideo ) - { - TInt err = KErrNone; - TRAP( err, iDpConfig.GetWrapperL().SetImageObjPropL( iFullPath, iWidth, iHeight ) ); - - PRINT1( _L( "MM MTP <= CSendObject::AddVideoToStoreL err = %d" ), err ); - } + iDpConfig.GetWrapperL().SetImageObjPropL( *iReceivedObjectInfo, iWidth, iHeight ); PRINT( _L( "MM MTP <= CSendObject::AddMediaToStoreL" ) ); } @@ -1338,14 +1322,49 @@ // void CSendObject::Rollback() { - // Delete this object from file system. - if ( iProgress == ESendObjectInProgress ) + PRINT( _L("MM MTP => CSendObject::Rollback") ); + + TInt count = iRollbackList.Count(); + PRINT1( _L("MM MTP => CSendObject::Rollback, iRollbackList.Count() = %d"), iRollbackList.Count() ); + + for ( TInt i = 0; i < count; i++ ) { - PRINT1( _L( "MM MTP <> CSendObject::Rollback ROLLBACK_FILE %S" ), &iFullPath ); - iFramework.Fs().Delete( iFullPath ); - TRAP_IGNORE( iFramework.ObjectMgr().UnreserveObjectHandleL( *iReceivedObjectInfo ) ); - iProgress = EObjectNone; + TMmMtpRollbackAction tmp = iRollbackList[i]; + ( this->*((TMmMtpRollbackAction)(iRollbackList[i])))(); } + iRollbackList.Reset(); + + PRINT( _L("MM MTP <= CSendObject::Rollback") ); + } + +void CSendObject::UnreserveObjectL() + { + PRINT( _L("MM MTP => CSendObject::UnreserveObjectL") ); + iFramework.ObjectMgr().UnreserveObjectHandleL( *iReceivedObjectInfo ); + PRINT( _L("MM MTP <= CSendObject::UnreserveObjectL") ); + } + +void CSendObject::RemoveObjectFromDbL() + { + PRINT( _L("MM MTP => CSendObject::RemoveObjectFromDbL") ); + iFramework.ObjectMgr().RemoveObjectL( iReceivedObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); + iDpConfig.GetWrapperL().DeleteObjectL( *iReceivedObjectInfo ); + PRINT( _L("MM MTP <= CSendObject::RemoveObjectFromDbL") ); + } + +void CSendObject::RemoveObjectFromFs() + { + PRINT( _L("MM MTP => CSendObject::RemoveObjectFromFs") ); + + delete iFileReceived; + iFileReceived = NULL; + + TInt err = iFramework.Fs().Delete( iFullPath ); + if ( err != KErrNone ) + { + PRINT1( _L("MM MTP <> CSendObject::RemoveObjectFromFs err = %d"), err ); + } + PRINT( _L("MM MTP <= CSendObject::RemoveObjectFromFs") ); } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include #include @@ -27,38 +26,39 @@ #include "mmmtpdputility.h" #include "mmmtpdplogger.h" #include "mmmtpdpconfig.h" +#include "cpropertysettingutility.h" // ----------------------------------------------------------------------------- -// CSetObjectPropList::NewL +// CSendObject::NewL // Two-phase construction method // ----------------------------------------------------------------------------- // -//EXPORT_C MMmRequestProcessor* CSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework, -// MMTPConnection& aConnection, -// CMmMtpDpMetadataAccessWrapper& aWrapper ) -// { -// CSetObjectPropList* self = new ( ELeave ) CSetObjectPropList( aFramework, -// aConnection, -// aWrapper ); -// CleanupStack::PushL( self ); -// self->ConstructL(); -// CleanupStack::Pop( self ); -// return self; -// } +EXPORT_C MMmRequestProcessor* CSetObjectPropList::NewL( MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + MMmMtpDpConfig& aDpConfig ) + { + CSetObjectPropList* self = new ( ELeave ) CSetObjectPropList( aFramework, aConnection, aDpConfig ); + + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + + return self; + } // ----------------------------------------------------------------------------- // CSetObjectPropList::CSetObjectPropList // Standard c++ constructor // ----------------------------------------------------------------------------- // -EXPORT_C CSetObjectPropList::CSetObjectPropList( MMTPDataProviderFramework& aFramework, +CSetObjectPropList::CSetObjectPropList( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( aFramework, aConnection, 0, NULL), - iObjectMgr( aFramework.ObjectMgr() ), - iFs( aFramework.Fs() ), - iDpConfig( aDpConfig ), - iUnprocessedIndex ( 0 ) + CRequestProcessor( aFramework, aConnection, 0, NULL), + iObjectMgr( aFramework.ObjectMgr() ), + iFs( aFramework.Fs() ), + iDpConfig( aDpConfig ), + iUnprocessedIndex ( 0 ) { PRINT( _L( "Operation: SetObjectPropList(0x9806)" ) ); } @@ -68,12 +68,11 @@ // 2nd Phase Constructor // ----------------------------------------------------------------------------- // -EXPORT_C void CSetObjectPropList::ConstructL() +void CSetObjectPropList::ConstructL() { CActiveScheduler::Add( this ); iPropertyList = CMTPTypeObjectPropList::NewL(); - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -88,6 +87,26 @@ } // ----------------------------------------------------------------------------- +// CSetObjectPropList::CheckRequestL +// +// ----------------------------------------------------------------------------- +// +EXPORT_C TMTPResponseCode CSetObjectPropList::CheckRequestL() + { + PRINT( _L( "MM MTP => CSetObjectPropList::CheckRequestL" ) ); + + TMTPResponseCode result = CRequestProcessor::CheckRequestL(); + if ( result == EMTPRespCodeObjectWriteProtected ) + { + // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected + result = EMTPRespCodeAccessDenied; + } + + PRINT( _L( "MM MTP <= CSetObjectPropList::CheckRequestL" ) ); + return result; + } + +// ----------------------------------------------------------------------------- // CSetObjectPropList::ServiceL // SetObjectPropList request handler // ----------------------------------------------------------------------------- @@ -95,6 +114,9 @@ EXPORT_C void CSetObjectPropList::ServiceL() { PRINT( _L( "MM MTP => CSetObjectPropList::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + // Recieve the data from the property list ReceiveDataL( *iPropertyList ); PRINT( _L( "MM MTP <= CSetObjectPropList::ServiceL" ) ); @@ -132,22 +154,23 @@ // Set object proplist // ----------------------------------------------------------------------------- // -TMTPResponseCode CSetObjectPropList::SetObjectPropListL( - const CMTPTypeObjectPropListElement& aPropListElement ) +TMTPResponseCode CSetObjectPropList::SetObjectPropListL( const CMTPTypeObjectPropListElement& aPropListElement ) { PRINT( _L( "MM MTP => CSetObjectPropList::SetObjectPropListL" ) ); - TMTPTypeUint16 protectionStatus( EMTPProtectionNoProtection ); TMTPResponseCode responseCode( EMTPRespCodeOK ); TUint32 handle = aPropListElement.Uint32L( CMTPTypeObjectPropListElement::EObjectHandle ); TUint16 propertyCode = aPropListElement.Uint16L( CMTPTypeObjectPropListElement::EPropertyCode ); TUint16 dataType = aPropListElement.Uint16L( CMTPTypeObjectPropListElement::EDatatype ); PRINT3( _L( "MM MTP <> handle = 0x%x, propertyCode = 0x%x, dataType = 0x%x" ), - handle, propertyCode, dataType ); + handle, + propertyCode, + dataType ); responseCode = MmMtpDpUtility::CheckPropType( propertyCode, dataType ); PRINT1( _L( "MM MTP <> CheckPropType response code is 0x%x" ), responseCode ); + if( responseCode != EMTPRespCodeOK ) return responseCode; @@ -155,12 +178,16 @@ == iFramework.DataProviderId() ) { PRINT( _L( "MM MTP => CSetObjectPropList::SetObjectPropListL enter" ) ); + CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC(); // + object iFramework.ObjectMgr().ObjectL( handle, *object ); - if ( protectionStatus.Value() != EMTPProtectionNoProtection ) + // Check the file attribution first. If it is Read-Only, nothing should be set into db which is inlined with P4S cases. + TUint16 protectionStatus = EMTPProtectionNoProtection; + protectionStatus = MmMtpDpUtility::GetProtectionStatusL( iFs, object->DesC( CMTPObjectMetaData::ESuid ) ); + if ( protectionStatus != EMTPProtectionNoProtection ) { - //for some reason, P4S expects Access Denied response instead of write protected + // NOTE: P4S expects AccessDenied response instead of ObjectWriteProtected return EMTPRespCodeAccessDenied; // EMTPRespCodeObjectWriteProtected; } @@ -172,7 +199,6 @@ case EMTPObjectPropCodeObjectSize: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeDateAdded: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: @@ -181,34 +207,50 @@ } break; + case EMTPObjectPropCodeNonConsumable: + object->SetUint( CMTPObjectMetaData::ENonConsumable, + aPropListElement.Uint8L( CMTPTypeObjectPropListElement::EValue ) ); + // TODO: need to reconsider, + // if propList comprise both non-consumable and objectFileName, + // ModifyObjectL would be called twice, need to investigate if it won't affect + // performance + iFramework.ObjectMgr().ModifyObjectL( *object ); + break; + case EMTPObjectPropCodeObjectFileName: { TPtrC suid( object->DesC( CMTPObjectMetaData::ESuid ) ); - TBuf newSuid( aPropListElement.StringL( - CMTPTypeObjectPropListElement::EValue ) ); - TInt err = KErrNone; - err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), suid, newSuid ); - PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err ); - if ( KErrOverflow == err ) // full path name is too long - { + TPtrC ptr( aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) ); + if ( KMaxFileName < ptr.Length() ) responseCode = EMTPRespCodeInvalidDataset; - } - else if ( ( KErrNone == err ) || ( KErrAlreadyExists == err ) ) + else { - TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB - PRINT1( _L( "MM MTP <> Rename Object err = %d" ), err ); - // it is ok if file is not found in DB, following S60 solution - if ( KErrNotFound == err ) + TFileName newSuid( ptr ); + TInt err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), suid, newSuid ); + PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err ); + if ( KErrOverflow == err ) // full path name is too long + { + responseCode = EMTPRespCodeInvalidDataset; + } + else if ( KErrNone == err ) // TODO: ( KErrAlreadyExists == err ) { - TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) ); - PRINT1( _L( "MM MTP <> Add Object err = %d" ), err ); - } + TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( *object, newSuid ) ); //Update MPX DB - if ( KErrNone == err ) - { + PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err ); + // it is ok if file is not found in DB, following S60 solution + if ( KErrNotFound == err ) + { + TRAP( err, iDpConfig.GetWrapperL().AddObjectL( *object ) ); + PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err ); + } + object->SetDesCL( CMTPObjectMetaData::ESuid, newSuid ); iFramework.ObjectMgr().ModifyObjectL( *object ); } + else if ( KErrInUse == err ) // object file is being used by other program + { + responseCode = EMTPRespCodeDeviceBusy; + } else { responseCode = EMTPRespCodeGeneralError; @@ -218,13 +260,15 @@ break; case EMTPObjectPropCodeName: + case EMTPObjectPropCodeAlbumArtist: { CMTPTypeString* stringData = CMTPTypeString::NewLC( - aPropListElement.StringL( - CMTPTypeObjectPropListElement::EValue ) );// + stringData + aPropListElement.StringL( CMTPTypeObjectPropListElement::EValue ) );// + stringData - responseCode = ServiceMetaDataToWrapperL( propertyCode, - *stringData, *object ); + responseCode = iDpConfig.PropSettingUtility()->SetMetaDataToWrapper( iDpConfig, + propertyCode, + *stringData, + *object ); CleanupStack::PopAndDestroy( stringData );// - stringData } @@ -232,15 +276,9 @@ default: { - /*// trap and handle with response code here, so correct fail index should report - TRAPD( err, responseCode = ServiceSpecificObjectPropertyL( propertyCode, *object, aPropListElement ) ); - PRINT1( _L("MM MTP <> CSetObjectPropList::SetObjectPropListL, ServiceSpecificObjectPropertyL, err = %d"), err ); - - if ( err == KErrNotSupported ) - { - responseCode = EMTPRespCodeAccessDenied; - }*/ - responseCode = ServiceSpecificObjectPropertyL( propertyCode, *object, + responseCode = iDpConfig.PropSettingUtility()->SetSpecificObjectPropertyL( iDpConfig, + propertyCode, + *object, aPropListElement ); } break; @@ -264,56 +302,6 @@ } // ----------------------------------------------------------------------------- -// CSetObjectPropList::ServiceMetaDataToWrapperL -// -// ----------------------------------------------------------------------------- -// -EXPORT_C TMTPResponseCode CSetObjectPropList::ServiceMetaDataToWrapperL( - const TUint16 aPropCode, - MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ) - { - TMTPResponseCode resCode = EMTPRespCodeOK; - - TRAPD( err, iDpConfig.GetWrapperL().SetObjectMetadataValueL( aPropCode, - aNewData, - aObjectMetaData ) ); - - PRINT1( _L("MM MTP <> CSetObjectPropList::ServiceMetaDataToWrapperL err = %d"), err); - - if ( err == KErrNone ) - { - resCode = EMTPRespCodeOK; - } - else if ( err == KErrTooBig ) - // according to the codes of S60 - { - resCode = EMTPRespCodeInvalidDataset; - } - else if ( err == KErrPermissionDenied ) - { - resCode = EMTPRespCodeAccessDenied; - } - else if ( err == KErrNotFound ) - { - if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) ) - SendResponseL( EMTPRespCodeAccessDenied ); - } - else - { - // add new virtual call to see if the above condition can be handle probably - err = HandleSpecificWrapperError( err, aObjectMetaData ); - - if ( err != KErrNone ) - resCode = EMTPRespCodeGeneralError; - } - - PRINT1( _L( "MM MTP <= CSetObjectPropList::ServiceMetaDataToWrapperL resCode = 0x%x" ), resCode ); - - return resCode; - } - -// ----------------------------------------------------------------------------- // CSetObjectPropList::RunL // // ----------------------------------------------------------------------------- @@ -351,15 +339,9 @@ // EXPORT_C TInt CSetObjectPropList::RunError( TInt aError ) { - PRINT1( _L( "MM MTP <> CSetObjectPropList::RunError with error %d" ), aError ); + if ( aError != KErrNone ) + PRINT1( _L( "MM MTP <> CGetObjectPropList::RunError aError = %d" ), aError ); - // Reschedule ourselves - // TODO: go to next index or increase? - // iUnprocessedIndex++ -// TRequestStatus* status = &iStatus; -// User::RequestComplete( status, aError ); -// SetActive(); - PRINT1( _L( "MM MTP <> CGetObjectPropList::RunError aError = %d" ), aError ); TRAP_IGNORE( SendResponseL( EMTPRespCodeGeneralError ) ); return KErrNone; @@ -372,7 +354,6 @@ // EXPORT_C void CSetObjectPropList::DoCancel() { - } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,7 +16,6 @@ */ -#include #include #include #include @@ -72,9 +71,9 @@ sizeof(KMTPSetObjectPropValuePolicy) / sizeof(TMTPRequestElementInfo), KMTPSetObjectPropValuePolicy ), iObjectMgr( aFramework.ObjectMgr() ), - iDpConfig( aDpConfig ) + iDpConfig( aDpConfig ), + iFs( aFramework.Fs() ) { - SetPSStatus(); PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) ); } @@ -107,13 +106,15 @@ case EMTPObjectPropCodeObjectSize: case EMTPObjectPropCodeParentObject: case EMTPObjectPropCodePersistentUniqueObjectIdentifier: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeDateAdded: case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: //case EMTPObjectPropCodeVideoBitRate: // move to specific dp returnCode = ETrue; break; + case EMTPObjectPropCodeNonConsumable: + // It's settable, return EFalse here. + break; default: returnCode = IsSpecificPropCodeReadOnly(aPropCode); @@ -133,43 +134,46 @@ PRINT( _L( "MM MTP => CSetObjectPropValue::CheckRequestL" ) ); TMTPResponseCode result = CRequestProcessor::CheckRequestL(); + if ( result == EMTPRespCodeObjectWriteProtected ) + { + // Return AccessDenied for P4S pass rate, instead of EMTPRespCodeObjectWriteProtected + result = EMTPRespCodeAccessDenied; + } // Check if property is supported if ( result == EMTPRespCodeOK ) { iPropCode = Request().Uint32( TMTPTypeRequest::ERequestParameter2 ); PRINT1( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL iPropCode = 0x%x" ), iPropCode ); - result = EMTPRespCodeInvalidObjectPropCode; TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( objectHandle ); - - if (!objectInfo) + if ( objectInfo == NULL ) { - PRINT(_L("MM MTP <> CGetObjectPropValue::CheckRequestL, objectInfo is NULL")); + PRINT( _L("MM MTP <> CSetObjectPropValue::CheckRequestL, objectInfo is NULL" ) ); return EMTPRespCodeInvalidObjectHandle; } - TFileName fileName = objectInfo->DesC(CMTPObjectMetaData::ESuid); - TUint32 formatCode = objectInfo->Uint(CMTPObjectMetaData::EFormatCode); - - PRINT3( _L( "MM MTP <> CGetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ), - objectHandle, - &fileName, - formatCode ); + TPtrC fileName = objectInfo->DesC( CMTPObjectMetaData::ESuid ); + TUint32 formatCode = objectInfo->Uint( CMTPObjectMetaData::EFormatCode ); + PRINT3( _L( "MM MTP <> CSetObjectPropValue::CheckRequestL, handle = 0x%x, filename = %S, formatCode = 0x%x" ), + objectHandle, + &fileName, + formatCode ); const RArray* properties = iDpConfig.GetSupportedPropertiesL( formatCode ); TInt count = properties->Count(); + + result = EMTPRespCodeInvalidObjectPropCode; for ( TInt i = 0; i < count; i++ ) { // Object property code is supported, but can not be set which is read only. - if ( (*properties)[i] == iPropCode - && IsPropCodeReadonly( iPropCode ) ) + if ( ( *properties )[i] == iPropCode && IsPropCodeReadonly( iPropCode ) ) { result = EMTPRespCodeAccessDenied; break; } // Object property code is supported and can be set. - else if ( iPropCode == (*properties)[i] ) + else if ( iPropCode == ( *properties )[i] ) { result = EMTPRespCodeOK; break; @@ -194,6 +198,9 @@ EXPORT_C void CSetObjectPropValue::ServiceL() { PRINT( _L( "MM MTP => CSetObjectPropValue::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus( EMtpPSStatusActive ); + __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) ); TUint32 handle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); PRINT1( _L( "MM MTP <> CSetObjectPropValue::ServiceL handle = 0x%x" ), handle ); @@ -212,16 +219,20 @@ case EMTPObjectPropCodeDateAdded: // 0xDC4E case EMTPObjectPropCodeDateCreated: // Date Created(0xDC08) case EMTPObjectPropCodeDateModified: // Modified Date(0xDC09) - case EMTPObjectPropCodeNonConsumable: // Non Consumable(0xDC4F) case EMTPObjectPropCodeVideoBitRate: // 0xDE9C { SendResponseL( EMTPRespCodeAccessDenied ); } break; + case EMTPObjectPropCodeNonConsumable: // Non Consumable(0xDC4F) + ReceiveDataL( iMTPTypeUint8 ); + break; + // Get Data for String objects case EMTPObjectPropCodeObjectFileName: // 0xDC07 case EMTPObjectPropCodeName: // 0xDC44 + case EMTPObjectPropCodeAlbumArtist: { delete iMTPTypeString; iMTPTypeString = NULL; @@ -252,36 +263,49 @@ switch ( iPropCode ) { + case EMTPObjectPropCodeNonConsumable: + iObjectInfo->SetUint( CMTPObjectMetaData::ENonConsumable, iMTPTypeUint8.Value() ); + iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); + break; + case EMTPObjectPropCodeObjectFileName: { TPtrC suid( iObjectInfo->DesC( CMTPObjectMetaData::ESuid ) ); - TBuf newSuid( iMTPTypeString->StringChars() ); - PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid ); - TInt err = KErrNone; - err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), - suid, - newSuid ); - PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err ); - if ( KErrOverflow == err ) // full path name is too long - { + TPtrC ptr ( iMTPTypeString->StringChars() ); + if ( KMaxFileName < ptr.Length() ) responseCode = EMTPRespCodeInvalidDataset; - } - else if ( ( KErrNone == err ) || ( KErrAlreadyExists == err ) ) + else { - TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( suid, newSuid ) ); //Update MPX DB - PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err ); - // it is ok if file is not found in DB, following S60 solution - if ( KErrNotFound == err ) + TFileName newSuid( ptr ); + PRINT2( _L( "MM MTP <> old name = %S, new name = %S" ), &suid, &newSuid ); + TInt err = KErrNone; + err = MmMtpDpUtility::UpdateObjectFileName( iFramework.Fs(), + suid, + newSuid ); + // TODO: if the new name is the same with old name + PRINT1( _L( "MM MTP <> Update object file name err = %d" ), err ); + if ( KErrOverflow == err ) // full path name is too long { - TRAP( err, iDpConfig.GetWrapperL().AddObjectL( newSuid ) ); - PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err ); + responseCode = EMTPRespCodeInvalidDataset; } + else if ( KErrNone == err ) + { + TRAP( err, iDpConfig.GetWrapperL().RenameObjectL( *iObjectInfo, newSuid ) ); //Update MPX DB + PRINT1( _L( "MM MTP <> Rename MPX object file name err = %d" ), err ); + // it is ok if file is not found in DB, following S60 solution + if ( KErrNotFound == err ) + { + TRAP( err, iDpConfig.GetWrapperL().AddObjectL( *iObjectInfo ) ); + PRINT1( _L( "MM MTP <> Add MPX object file name err = %d" ), err ); + } - if ( KErrNone == err ) - { iObjectInfo->SetDesCL( CMTPObjectMetaData::ESuid, newSuid ); iFramework.ObjectMgr().ModifyObjectL( *iObjectInfo ); } + else if ( KErrInUse == err ) // object file is being used by other program + { + responseCode = EMTPRespCodeDeviceBusy; + } else { responseCode = EMTPRespCodeGeneralError; @@ -291,6 +315,7 @@ break; case EMTPObjectPropCodeName: // 0xDC44 + case EMTPObjectPropCodeAlbumArtist: { responseCode = ServiceMetaDataToWrapperL( iPropCode, *iMTPTypeString, @@ -343,12 +368,8 @@ } else if ( err == KErrNotFound ) { -// TMTPFormatCode formatCode = -// MmMtpDpUtility::FormatFromFilename( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) ); if( MmMtpDpUtility::HasMetadata( aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ) ) ) SendResponseL( EMTPRespCodeAccessDenied ); - else - SendDataL( aNewData ); } else { diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -18,7 +18,6 @@ #include #include -#include #include #include "csetobjectreferences.h" @@ -28,6 +27,8 @@ #include "mmmtpdputility.h" #include "mmmtpdpconfig.h" +const TInt KMmMtpRefArrayGranularity = 3; + // ----------------------------------------------------------------------------- // Verification data for the SetReferences request // ----------------------------------------------------------------------------- @@ -69,7 +70,6 @@ // void CSetObjectReferences::ConstructL() { - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -88,16 +88,14 @@ // Standard c++ constructor // ----------------------------------------------------------------------------- // -EXPORT_C CSetObjectReferences::CSetObjectReferences( - MMTPDataProviderFramework& aFramework, +CSetObjectReferences::CSetObjectReferences( MMTPDataProviderFramework& aFramework, MMTPConnection& aConnection, MMmMtpDpConfig& aDpConfig ) : - CRequestProcessor( - aFramework, - aConnection, - sizeof( KMTPSetObjectReferencesPolicy )/sizeof( TMTPRequestElementInfo ), - KMTPSetObjectReferencesPolicy ), - iDpConfig( aDpConfig ) + CRequestProcessor( aFramework, + aConnection, + sizeof( KMTPSetObjectReferencesPolicy ) / sizeof( TMTPRequestElementInfo ), + KMTPSetObjectReferencesPolicy ), + iDpConfig( aDpConfig ) { PRINT( _L( "Operation: SetObjectReferences(0x9811)" ) ); } @@ -107,12 +105,15 @@ // set references to DB // ----------------------------------------------------------------------------- // -EXPORT_C void CSetObjectReferences::DoSetObjectReferencesL( CMmMtpDpMetadataAccessWrapper& aWrapper, - TUint16 aObjectFormat, - const TDesC& aSrcFileName, - CDesCArray& aRefFileArray ) +void CSetObjectReferences::DoSetObjectReferencesL( const CMTPObjectMetaData& aObject ) { - // do nothing, do special thing by inheriting + TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode ); + TBool hasReference = MmMtpDpUtility::HasReference( formatCode ); + + if ( hasReference ) + { + iDpConfig.GetWrapperL().SetReferenceL( aObject, *iReferenceSuids ); + } } // ----------------------------------------------------------------------------- @@ -124,6 +125,9 @@ EXPORT_C void CSetObjectReferences::ServiceL() { PRINT( _L( "MM MTP => CSetObjectReferences::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + delete iReferences; iReferences = NULL; iReferences = CMTPTypeArray::NewL( EMTPTypeAUINT32 ); @@ -142,7 +146,7 @@ delete iReferenceSuids; iReferenceSuids = NULL; - iReferenceSuids = new ( ELeave ) CDesCArrayFlat( 3 ); + iReferenceSuids = new ( ELeave ) CDesCArrayFlat( KMmMtpRefArrayGranularity ); if ( !VerifyReferenceHandlesL() ) { @@ -152,17 +156,18 @@ { MMTPReferenceMgr& referenceMgr = iFramework.ReferenceMgr(); TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); - PRINT1( _L( "MM MTP <>CSetObjectReferences::DoHandleResponsePhaseL objectHandle = 0x%x" ), objectHandle ); + PRINT1( _L( "MM MTP <> CSetObjectReferences::DoHandleResponsePhaseL objectHandle = 0x%x" ), objectHandle ); referenceMgr.SetReferencesL( TMTPTypeUint32( objectHandle ), *iReferences ); CMTPObjectMetaData* object = CMTPObjectMetaData::NewLC(); // + object iFramework.ObjectMgr().ObjectL( objectHandle, *object ); PRINT1( _L( "MM MTP <> object file name is %S" ), &(object->DesC( CMTPObjectMetaData::ESuid ) ) ); - DoSetObjectReferencesL( iDpConfig.GetWrapperL(), - object->Uint( CMTPObjectMetaData::EFormatCode ), - object->DesC( CMTPObjectMetaData::ESuid ), - *iReferenceSuids ); + DoSetObjectReferencesL( *object ); + + // set it to something else other than EMTPSubFormatCodeUnknown to prevent being queried from MPX later in the same session + object->SetUint( CMTPObjectMetaData::EFormatSubCode, EMTPSubFormatCodeUndefined ); + iFramework.ObjectMgr().ModifyObjectL( *object ); CleanupStack::PopAndDestroy( object ); // - object @@ -196,8 +201,9 @@ result = EFalse; break; } - - iReferenceSuids->AppendL( object->DesC( CMTPObjectMetaData::ESuid ) ); + // Only audio in playlist is supported + if ( iDpConfig.GetWrapperL().Category( *object ) == EMPXSong ) + iReferenceSuids->AppendL( object->DesC( CMTPObjectMetaData::ESuid ) ); } CleanupStack::PopAndDestroy( object ); // - object PRINT( _L( "MM MTP <= CSetObjectReferences::VerifyReferenceHandlesL" ) ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp --- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -21,6 +21,7 @@ #include "cmmmtpdpaccesssingleton.h" #include "cmmmtpdpmetadataaccesswrapper.h" #include "mmmtpdplogger.h" +#include "mmmtpdputility.h" // ----------------------------------------------------------------------------- // CMmMtpDpAccessSingleton::~CMmMtpDpAccessSingleton @@ -30,6 +31,12 @@ CMmMtpDpAccessSingleton::~CMmMtpDpAccessSingleton() { delete iWrapper; + + if (iDelayStatusChanger) + { + iDelayStatusChanger->Cancel(); + delete iDelayStatusChanger; + } } // ----------------------------------------------------------------------------- @@ -50,14 +57,13 @@ // create singleton instance // ----------------------------------------------------------------------------- // -EXPORT_C void CMmMtpDpAccessSingleton::CreateL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ) +EXPORT_C void CMmMtpDpAccessSingleton::CreateL( MMTPDataProviderFramework& aFramework ) { CMmMtpDpAccessSingleton* self = reinterpret_cast( Dll::Tls() ); if ( self == NULL ) { - self = CMmMtpDpAccessSingleton::NewL( aRfs, aFramework ); + self = CMmMtpDpAccessSingleton::NewL( aFramework ); Dll::SetTls( reinterpret_cast( self ) ); } else @@ -135,12 +141,11 @@ // two-phase construction // ----------------------------------------------------------------------------- // -CMmMtpDpAccessSingleton* CMmMtpDpAccessSingleton::NewL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ) +CMmMtpDpAccessSingleton* CMmMtpDpAccessSingleton::NewL( MMTPDataProviderFramework& aFramework ) { CMmMtpDpAccessSingleton* self = new(ELeave) CMmMtpDpAccessSingleton; CleanupStack::PushL( self ); - self->ConstructL(aRfs, aFramework); + self->ConstructL( aFramework ); CleanupStack::Pop( self ); return self; } @@ -150,11 +155,76 @@ // two-phase construction // ----------------------------------------------------------------------------- // -void CMmMtpDpAccessSingleton::ConstructL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ) +void CMmMtpDpAccessSingleton::ConstructL( MMTPDataProviderFramework& aFramework ) { - iWrapper = CMmMtpDpMetadataAccessWrapper::NewL( aRfs, aFramework ); + iWrapper = CMmMtpDpMetadataAccessWrapper::NewL( aFramework ); + iDelayStatusChanger = CIdle::NewL(CActive::EPriorityIdle); + } + +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::ActiveToIdleStatusChange +// Issue ActiveToIdle Status Change (ActiveObject) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMmMtpDpAccessSingleton::ActiveToIdleStatusChange() + { + PRINT( _L( "CMmMtpDpAccessSingleton::ActiveToIdleStatusChange" ) ); + CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance(); + + if (self != NULL) + { + CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(); + + if (self->DelayStatusChanger() != NULL) + self->DelayStatusChanger()->Start(TCallBack(DoActiveToIdleStatusChange, self)); + } } +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::CancelActiveToIdleChange +// Cancel Outstanding ActiveToIdle Status Change +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange() + { + CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance(); + + if ((self != NULL) && (self->DelayStatusChanger() != NULL)) + { + if (self->DelayStatusChanger()->IsActive()) + { + PRINT( _L( "CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange, cancel outstanding request" ) ); + self->DelayStatusChanger()->Cancel(); + } + } + } + +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::DelayStatusChanger +// get DelayStatusChanger instance, internal use only +// ----------------------------------------------------------------------------- +// +CIdle* CMmMtpDpAccessSingleton::DelayStatusChanger() + { + CIdle* delayStatusChanger = NULL; + CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance(); + + if (self != NULL) + delayStatusChanger = self->iDelayStatusChanger; + + return delayStatusChanger; + } + +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::DoActiveToIdleChange +// Perform actural ActiveToIdle Status Change after active object callback +// ----------------------------------------------------------------------------- +// +TInt CMmMtpDpAccessSingleton::DoActiveToIdleStatusChange(TAny* /*Any*/) + { + PRINT( _L( "CMmMtpDpAccessSingleton::DoActiveToIdleStatusChange ") ); + MmMtpDpUtility::DoSetPSStatus(EMtpPSStatusReadyToSync); + return KErrNone; + } // end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp --- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -16,37 +16,41 @@ */ +#include +#include +#include +#include #include #include -#include #include -#include +#include +#include "mmmtpdp_variant.hrh" #include "cmmmtpdpmetadataaccesswrapper.h" #include "cmmmtpdpmetadatampxaccess.h" #include "cmmmtpdpmetadatavideoaccess.h" #include "mmmtpdputility.h" +#include "tobjectdescription.h" #include "mmmtpdplogger.h" -const TInt KMMMTPDummyFileArrayGranularity = 5; +const TInt KMmMtpDummyFileArrayGranularity = 5; -CMmMtpDpMetadataAccessWrapper* CMmMtpDpMetadataAccessWrapper::NewL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ) +CMmMtpDpMetadataAccessWrapper* CMmMtpDpMetadataAccessWrapper::NewL( MMTPDataProviderFramework& aFramework ) { - CMmMtpDpMetadataAccessWrapper* me = new (ELeave) CMmMtpDpMetadataAccessWrapper( aRfs, aFramework ); + CMmMtpDpMetadataAccessWrapper* me = new (ELeave) CMmMtpDpMetadataAccessWrapper( aFramework ); CleanupStack::PushL( me ); me->ConstructL(); CleanupStack::Pop( me ); - + return me; } -CMmMtpDpMetadataAccessWrapper::CMmMtpDpMetadataAccessWrapper( RFs& aRfs, - MMTPDataProviderFramework& aFramework ) : - iRfs( aRfs ), - iFramework( aFramework ) +CMmMtpDpMetadataAccessWrapper::CMmMtpDpMetadataAccessWrapper( MMTPDataProviderFramework& aFramework ) : + iFramework( aFramework ), + iFs( aFramework.Fs() ), + iOpenCount( 0 ) { - + // Do nothing } // --------------------------------------------------------------------------- @@ -58,21 +62,27 @@ { PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::ConstructL" ) ); - iMmMtpDpMetadataMpxAccess = CMmMtpDpMetadataMpxAccess::NewL( iRfs, iFramework ); + iMmMtpDpMetadataMpxAccess = CMmMtpDpMetadataMpxAccess::NewL( iFs ); - iMmMtpDpMetadataVideoAccess = CMmMtpDpMetadataVideoAccess::NewL( iRfs ); - - iPlaylistArray = new ( ELeave ) CDesCArrayFlat( KMMMTPDummyFileArrayGranularity ); - + iMmMtpDpMetadataVideoAccess = CMmMtpDpMetadataVideoAccess::NewL( iFs ); + + iAbstractMediaArray = new ( ELeave ) CDesCArrayFlat( KMmMtpDummyFileArrayGranularity ); + // Create the PS key to notify subscribers that MTP mode is activated _LIT_SECURITY_POLICY_C1(KKeyReadPolicy, ECapabilityReadUserData); _LIT_SECURITY_POLICY_C1(KKeyWritePolicy, ECapabilityWriteUserData); - RProperty::Define( KMtpPSUid, - KMtpPSStatus, - RProperty::EInt, - KKeyReadPolicy, + RProperty::Define( KMtpPSUid, + KMtpPSStatus, + RProperty::EInt, + KKeyReadPolicy, KKeyWritePolicy); +#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION + MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized); +#else + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); +#endif // MMMTPDP_RESET_STATUS_CLOSESESSION + PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ConstructL" ) ); } @@ -86,37 +96,40 @@ PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::~CMmMtpDpMetadataAccessWrapper" ) ); RemoveDummyFiles(); - delete iPlaylistArray; + delete iAbstractMediaArray; delete iMmMtpDpMetadataVideoAccess; delete iMmMtpDpMetadataMpxAccess; - + // unblock MPX - RProperty::Set( KMtpPSUid, - KMtpPSStatus, - EMtpPSStatusUninitialized); + MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::~CMmMtpDpMetadataAccessWrapper" ) ); } // ----------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::SetPlaylist -// Set playlist to DB +// CMmMtpDpMetadataAccessWrapper::SetReferenceL +// Set abstract media to DB // ----------------------------------------------------------------------------- // -EXPORT_C void CMmMtpDpMetadataAccessWrapper::SetPlaylistL( const TDesC& aPlaylistFileName, CDesCArray& aRefFileArray ) +EXPORT_C void CMmMtpDpMetadataAccessWrapper::SetReferenceL( const CMTPObjectMetaData& aObject, + CDesCArray& aRefFileArray ) { - PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetPlaylistL aPlaylistFileName = %S" ), &aPlaylistFileName ); + TPtrC refOwner( aObject.DesC( CMTPObjectMetaData::ESuid ) ); + PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetReferenceL reference owner = %S" ), + &refOwner ); - if ( !MmMtpDpUtility::IsVideoL( aPlaylistFileName, iFramework ) ) + TMPXGeneralCategory category = Category( aObject ); + if ( category == EMPXPlaylist || category == EMPXAbstractAlbum ) { - iMmMtpDpMetadataMpxAccess->SetPlaylistL( aPlaylistFileName, aRefFileArray ); + iMmMtpDpMetadataMpxAccess->SetReferenceL( refOwner, aRefFileArray, category ); } - PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetPlaylistL" ) ); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetReferenceL" ) ); } // --------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::AddMediaL +// CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL // Gets a piece of metadata from the collection // --------------------------------------------------------------------------- // @@ -126,18 +139,53 @@ { PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL" ) ); - TPtrC fullFileName( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) ); - if ( !MmMtpDpUtility::IsVideoL( fullFileName, iFramework ) ) + TMPXGeneralCategory category = Category( aObjectMetaData ); + switch ( category ) { - iMmMtpDpMetadataMpxAccess->GetObjectMetadataValueL( aPropCode, - aNewData, - aObjectMetaData ); - } - else - { - iMmMtpDpMetadataVideoAccess->GetObjectMetadataValueL( aPropCode, - aNewData, - aObjectMetaData ); + case EMPXAbstractAlbum: + if ( aPropCode == EMTPObjectPropCodeDateAdded && EMTPTypeString == aNewData.Type() ) + { + TBuf timeStr; + MmMtpDpUtility::GetObjectDateModifiedL( iFs, + aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ), + timeStr ); + PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceOneObjectPropertyL Date time %S" ), &timeStr ); + + ( ( CMTPTypeString & ) aNewData ).SetL( timeStr ); + break; + } + // else + // get from mpx + case EMPXPlaylist: + case EMPXSong: + { + iMmMtpDpMetadataMpxAccess->GetObjectMetadataValueL( aPropCode, + aNewData, + aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ), + category ); + } + break; + case EMPXVideo: + if ( aPropCode == EMTPObjectPropCodeDateAdded && EMTPTypeString == aNewData.Type() ) + { + TBuf timeStr; + MmMtpDpUtility::GetObjectDateModifiedL( iFs, + aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ), + timeStr ); + PRINT1( _L( "MM MTP <> CGetObjectPropList::ServiceOneObjectPropertyL Date time %S" ), &timeStr ); + + ( ( CMTPTypeString & ) aNewData ).SetL( timeStr ); + } + else + { + iMmMtpDpMetadataVideoAccess->GetObjectMetadataValueL( aPropCode, + aNewData, + aObjectMetaData ); + } + break; + default: + // do nothing + break; } PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::GetObjectMetadataValueL" ) ); @@ -154,96 +202,90 @@ { PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetObjectMetadataValueL" ) ); - TPtrC fullFileName( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) ); - if ( MmMtpDpUtility::IsVideoL( fullFileName, iFramework ) ) + TMPXGeneralCategory category = Category( aObjectMetaData ); + switch ( category ) { - iMmMtpDpMetadataVideoAccess->SetObjectMetadataValueL( aPropCode, - aNewData, - aObjectMetaData ); + case EMPXAbstractAlbum: + case EMPXSong: + case EMPXPlaylist: + iMmMtpDpMetadataMpxAccess->SetObjectMetadataValueL( aPropCode, + aNewData, + aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ), + category ); + break; + case EMPXVideo: + iMmMtpDpMetadataVideoAccess->SetObjectMetadataValueL( aPropCode, + aNewData, + aObjectMetaData ); + break; + default: + break; } - else - { - iMmMtpDpMetadataMpxAccess->SetObjectMetadataValueL( aPropCode, - aNewData, - aObjectMetaData ); - } - PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetObjectMetadataValueL" ) ); } // --------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::SetObjectMetadataValueL +// CMmMtpDpMetadataAccessWrapper::RenameObjectL // Renames the file part of a record in the collection database // --------------------------------------------------------------------------- // -EXPORT_C void CMmMtpDpMetadataAccessWrapper::RenameObjectL( const TDesC& aOldFileName, +EXPORT_C void CMmMtpDpMetadataAccessWrapper::RenameObjectL( const CMTPObjectMetaData& aOldObject, const TDesC& aNewFileName ) { + TPtrC oldFileName( aOldObject.DesC( CMTPObjectMetaData::ESuid ) ); PRINT2( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::RenameObjectL old = %S, new = %S" ), - &aOldFileName, + &oldFileName, &aNewFileName ); - - TMTPFormatCode formatCode = MmMtpDpUtility::FormatFromFilename( aOldFileName ); - if ( formatCode == EMTPFormatCodeWMV ) + + TMPXGeneralCategory category = Category( aOldObject ); + switch ( category ) { - iMmMtpDpMetadataVideoAccess->RenameRecordL( aOldFileName, aNewFileName ); + case EMPXSong: + case EMPXAbstractAlbum: + case EMPXPlaylist: + { + iMmMtpDpMetadataMpxAccess->RenameObjectL( oldFileName, + aNewFileName, + category ); + } + break; + case EMPXVideo: + iMmMtpDpMetadataVideoAccess->RenameRecordL( oldFileName, aNewFileName ); + break; + default: + break; } - else - { - if ( !MmMtpDpUtility::IsVideoL( aNewFileName , iFramework ) ) - { - iMmMtpDpMetadataMpxAccess->RenameObjectL( aOldFileName, aNewFileName, formatCode ); - } - else - { - iMmMtpDpMetadataVideoAccess->RenameRecordL( aOldFileName, aNewFileName ); - } - } + PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::RenameObjectL" ) ); } // --------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::SetObjectMetadataValueL +// CMmMtpDpMetadataAccessWrapper::DeleteObjectL // Deletes metadata information associated with the object // --------------------------------------------------------------------------- // -void CMmMtpDpMetadataAccessWrapper::DeleteObjectL( const TDesC& aFullFileName, - const TUint aFormatCode ) +EXPORT_C void CMmMtpDpMetadataAccessWrapper::DeleteObjectL( const CMTPObjectMetaData& aObject ) { - PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::DeleteObjectL" ) ); + TPtrC fileName( aObject.DesC( CMTPObjectMetaData::ESuid ) ); + PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::DeleteObjectL name = %S" ), &fileName ); - TMPXGeneralCategory category = Category( aFormatCode ); - - // Have to do this. File might not be in file system anymore, have to - // reply on ObjectManager - if ( ( aFormatCode == EMTPFormatCodeMP4Container ) - || ( aFormatCode == EMTPFormatCode3GPContainer ) - || ( aFormatCode == EMTPFormatCodeASF ) ) - { - if ( MmMtpDpUtility::IsVideoL( aFullFileName, iFramework ) ) - { - category = EMPXVideo; - } - else - { - category = EMPXSong; - } - } - + TMPXGeneralCategory category = Category( aObject ); + switch ( category ) { + case EMPXSong: + case EMPXAbstractAlbum: case EMPXPlaylist: - case EMPXSong: { - iMmMtpDpMetadataMpxAccess->DeleteObjectL( aFullFileName, category ); + iMmMtpDpMetadataMpxAccess->DeleteObjectL( fileName, category ); } break; case EMPXVideo: { - iMmMtpDpMetadataVideoAccess->DeleteRecordL( aFullFileName ); + iMmMtpDpMetadataVideoAccess->DeleteRecordL( fileName ); } break; @@ -255,33 +297,23 @@ PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::DeleteObjectL" ) ); } -// --------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::SetStorageRootL -// Sets current Drive info -// --------------------------------------------------------------------------- -// -void CMmMtpDpMetadataAccessWrapper::SetStorageRootL( const TDesC& aStorageRoot ) - { - PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::SetStorageRootL" ) ); - - iMmMtpDpMetadataVideoAccess->SetStorageRootL( aStorageRoot ); - iMmMtpDpMetadataMpxAccess->SetStorageRootL( aStorageRoot ); - - PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::SetStorageRootL" ) ); - } // ----------------------------------------------------------------------------- // CMmMtpDpMetadataMpxAccess::SetImageObjPropL // set image specific properties specific to videos // ----------------------------------------------------------------------------- // -void CMmMtpDpMetadataAccessWrapper::SetImageObjPropL( const TDesC& aFullFileName, +void CMmMtpDpMetadataAccessWrapper::SetImageObjPropL( const CMTPObjectMetaData& aObject, const TUint32 aWidth, const TUint32 aHeight ) { - if ( MmMtpDpUtility::IsVideoL( aFullFileName, iFramework ) ) + TMPXGeneralCategory category = Category( aObject ); + if ( category == EMPXVideo ) { - iMmMtpDpMetadataVideoAccess->SetStorageRootL( aFullFileName ); - iMmMtpDpMetadataVideoAccess->SetImageObjPropL( aFullFileName, aWidth, aHeight ); + TPtrC fullFileName( aObject.DesC( CMTPObjectMetaData::ESuid ) ); + iMmMtpDpMetadataVideoAccess->SetStorageRootL( fullFileName ); + iMmMtpDpMetadataVideoAccess->SetImageObjPropL( fullFileName, + aWidth, + aHeight ); } } @@ -290,24 +322,32 @@ // get image specific properties specific to videos // ----------------------------------------------------------------------------- // -void CMmMtpDpMetadataAccessWrapper::GetImageObjPropL( const TDesC& aFullFileName, +void CMmMtpDpMetadataAccessWrapper::GetImageObjPropL( const CMTPObjectMetaData& aObject, TUint32& aWidth, TUint32& aHeight ) { - if ( MmMtpDpUtility::IsVideoL( aFullFileName, iFramework ) ) + TMPXGeneralCategory category = Category( aObject ); + if ( category == EMPXVideo ) { - iMmMtpDpMetadataVideoAccess->SetStorageRootL( aFullFileName ); - iMmMtpDpMetadataVideoAccess->GetImageObjPropL( aFullFileName, aWidth, aHeight ); + TPtrC fullFileName( aObject.DesC( CMTPObjectMetaData::ESuid ) ); + iMmMtpDpMetadataVideoAccess->SetStorageRootL( fullFileName ); + iMmMtpDpMetadataVideoAccess->GetImageObjPropL( fullFileName, aWidth, aHeight ); } } -// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper::OpenSessionL // Called when the MTP session is initialised // ----------------------------------------------------------------------------- // void CMmMtpDpMetadataAccessWrapper::OpenSessionL() { - iOpenSession = ETrue; + iOpenCount++; + +#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION + if (iOpenCount == 1) + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); +#endif // MMMTPDP_RESET_STATUS_CLOSESESSION } // ----------------------------------------------------------------------------- @@ -317,15 +357,26 @@ // void CMmMtpDpMetadataAccessWrapper::CloseSessionL() { - if ( iOpenSession ) + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL count = %d" ), iOpenCount ); + + if ( iOpenCount >= 1 ) { - PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL close" ) ); - iMmMtpDpMetadataVideoAccess->CloseSessionL(); - iOpenSession = EFalse; + iOpenCount--; + + if ( iOpenCount == 0 ) + { + PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL close" ) ); + iMmMtpDpMetadataMpxAccess->CloseSession(); // trigger close and flush CollectionHelper + iMmMtpDpMetadataVideoAccess->CloseSessionL(); + +#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION + MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized); +#endif // MMMTPDP_RESET_STATUS_CLOSESESSION + } } else { - PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL alreay close" ) ); + PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL already close" ) ); } } @@ -334,29 +385,61 @@ // Get category according format code // --------------------------------------------------------------------------- // -TMPXGeneralCategory CMmMtpDpMetadataAccessWrapper::Category( const TUint aFormatCode ) +TMPXGeneralCategory CMmMtpDpMetadataAccessWrapper::Category( const CMTPObjectMetaData& aObject ) { TMPXGeneralCategory category = EMPXNoCategory; - switch ( aFormatCode ) + TUint formatCode = aObject.Uint( CMTPObjectMetaData::EFormatCode ); + switch ( formatCode ) { + case EMTPFormatCodeASF: + case EMTPFormatCodeMP4Container: + case EMTPFormatCode3GPContainer: + { + TUint aSubFormatCode = aObject.Uint( CMTPObjectMetaData::EFormatSubCode ); + if ( aSubFormatCode == EMTPSubFormatCodeUnknown ) + { + TRAP_IGNORE( category = ContainerCategoryL( aObject.DesC( CMTPObjectMetaData::ESuid ) ) ); + if ( category == EMPXSong ) + aSubFormatCode = EMTPSubFormatCodeAudio; + else if ( category == EMPXVideo ) + aSubFormatCode = EMTPSubFormatCodeVideo; + else + aSubFormatCode = EMTPSubFormatCodeUndefined; + const_cast(aObject).SetUint( CMTPObjectMetaData::EFormatSubCode, aSubFormatCode ); + // If object doesn't exist, do nothing + TRAP_IGNORE( iFramework.ObjectMgr().ModifyObjectL( aObject ) ); + } + else if ( aSubFormatCode == EMTPSubFormatCodeAudio ) + category = EMPXSong; + else if ( aSubFormatCode == EMTPSubFormatCodeVideo ) + category = EMPXVideo; + else if( aSubFormatCode == EMTPSubFormatCodeUndefined ) + category = EMPXOther; + } + break; + case EMTPFormatCodeMP3: case EMTPFormatCodeWAV: case EMTPFormatCodeWMA: case EMTPFormatCodeAAC: - case EMTPFormatCodeASF: - case EMTPFormatCodeMP4Container: - case EMTPFormatCode3GPContainer: { category = EMPXSong; } break; + case EMTPFormatCodeM3UPlaylist: case EMTPFormatCodeAbstractAudioVideoPlaylist: { category = EMPXPlaylist; } break; + case EMTPFormatCodeAbstractAudioAlbum: + { + category = EMPXAbstractAlbum; + } + break; + case EMTPFormatCodeWMV: { category = EMPXVideo; @@ -366,84 +449,102 @@ default: break; } + PRINT1( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::Category category = %d" ), category ); + return category; + } + +TMPXGeneralCategory CMmMtpDpMetadataAccessWrapper::ContainerCategoryL( const TDesC& aFullFileName ) + { + PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::ContainerCategoryL aFullFileName = %S" ), &aFullFileName ); + + TMPXGeneralCategory category = EMPXNoCategory; + TParsePtrC pathParser( aFullFileName ); + TPtrC ext( pathParser.Ext() ); + + if ( ext.Length() <= 0 ) + category = EMPXOther; + else if ( ext.CompareF( KTxtExtensionO4A ) == 0 + || ext.CompareF( KTxtExtensionM4A ) == 0 ) + category = EMPXSong; + else if ( ext.CompareF( KTxtExtensionO4V ) == 0 ) + category = EMPXVideo; + else + { + HBufC8* mimetype = NULL; + + if ( ext.CompareF( KTxtExtensionMP4 ) == 0 + || ext.CompareF( KTxtExtension3GP ) == 0 + || ext.CompareF( KTxtExtension3G2 ) == 0 ) + mimetype = MmMtpDpUtility::Mp4MimeTypeL( aFullFileName ); + else if ( ext.CompareF( KTxtExtensionODF ) == 0 ) + mimetype = MmMtpDpUtility::OdfMimeTypeL( aFullFileName ); + else if ( ext.CompareF( KTxtExtensionASF ) == 0 ) + mimetype = MmMtpDpUtility::AsfMimeTypeL( aFullFileName ); + if ( mimetype != NULL ) + { + TMmMtpSubFormatCode subFormatCode = + MmMtpDpUtility::SubFormatCodeFromMime( *mimetype ); + + if ( subFormatCode == EMTPSubFormatCodeVideo ) + category = EMPXVideo; + else if( subFormatCode == EMTPSubFormatCodeAudio ) + category = EMPXSong; + else + category = EMPXOther; + } + } + + PRINT1( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ContainerCategoryL, category = %d" ), category ); return category; } // --------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::GetAllPlaylistL -// +// CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL +// // --------------------------------------------------------------------------- -EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllPlaylistL( const TDesC& aStoreRoot, CMPXMediaArray** aPlaylists ) +EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllAbstractMediaL( const TDesC& aStoreRoot, CDesCArray& aAbstractMedias, TMPXGeneralCategory aCategory ) { - iMmMtpDpMetadataMpxAccess->GetAllPlaylistL( aStoreRoot, aPlaylists ); + iMmMtpDpMetadataMpxAccess->GetAllAbstractMediaL( aStoreRoot, aAbstractMedias, aCategory ); } // --------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper::GetAllReferenceL -// +// // --------------------------------------------------------------------------- -//s -EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL( CMPXMedia* aPlaylist, CDesCArray& aReferences ) +// +EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetAllReferenceL( const CMTPObjectMetaData& aRefOwner, CDesCArray& aReferences ) { - iMmMtpDpMetadataMpxAccess->GetAllReferenceL( aPlaylist, aReferences ); + TMPXGeneralCategory category = Category( aRefOwner ); + if ( category == EMPXPlaylist || category == EMPXAbstractAlbum ) + iMmMtpDpMetadataMpxAccess->GetAllReferenceL( aRefOwner.DesC( CMTPObjectMetaData::ESuid ), category, aReferences ); } -// --------------------------------------------------------------------------- -// CMmMtpDpMetadataAccessWrapper::GetPlaylistNameL -// -// --------------------------------------------------------------------------- -// -EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetPlaylistNameL( CMPXMedia* aPlaylist, TDes& aPlaylistName ) - { - iMmMtpDpMetadataMpxAccess->GetPlaylistNameL( aPlaylist, aPlaylistName ); - } - -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper::AddObjectL -// Add object (music, video and playlist) info to DB +// Add object (music, video, playlist and abstract media) info to DB // ----------------------------------------------------------------------------- // -void CMmMtpDpMetadataAccessWrapper::AddObjectL( const TDesC& aFullFileName, TBool aIsVideo /*= EFalse */ ) +EXPORT_C void CMmMtpDpMetadataAccessWrapper::AddObjectL( const CMTPObjectMetaData& aObject ) { - PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL aFullFileName = %S" ), &aFullFileName ); + PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL" ) ); + TMPXGeneralCategory category = Category( aObject ); - if ( aFullFileName.Length() <= 0) - { - User::Leave( KErrArgument ); - } - if ( aIsVideo ) + TPtrC fullFileName( aObject.DesC( CMTPObjectMetaData::ESuid ) ); + if ( category == EMPXVideo ) { PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL Addvideo" ) ); - iMmMtpDpMetadataVideoAccess->AddVideoL( aFullFileName ); + iMmMtpDpMetadataVideoAccess->AddVideoL( fullFileName ); } - else + else if ( category == EMPXPlaylist || category == EMPXAbstractAlbum ) { - if ( MmMtpDpUtility::IsVideoL( aFullFileName, iFramework ) ) - { - PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL Addvideo" ) ); - iMmMtpDpMetadataVideoAccess->AddVideoL( aFullFileName ); - } - else - { - TMTPFormatCode formatCode = MmMtpDpUtility::FormatFromFilename( aFullFileName ); - - if ( formatCode == EMTPFormatCodeM3UPlaylist - || formatCode == EMTPFormatCodeMPLPlaylist - || formatCode == EMTPFormatCodeAbstractAudioVideoPlaylist - || formatCode == EMTPFormatCodeAbstractAudioPlaylist - || formatCode == EMTPFormatCodeAbstractVideoPlaylist - || formatCode == EMTPFormatCodeASXPlaylist - || formatCode == EMTPFormatCodePLSPlaylist ) - { - PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddPlaylist" ) ); - iMmMtpDpMetadataMpxAccess->AddPlaylistL( aFullFileName ); - } - else - { - PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddSong" ) ); - iMmMtpDpMetadataMpxAccess->AddSongL( aFullFileName ); - } - } + PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddPlaylist/AbstractAlbum" ) ); + iMmMtpDpMetadataMpxAccess->AddAbstractMediaL( fullFileName, + category ); + } + else if ( category == EMPXSong ) + { + PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::AddObjectL AddSong" ) ); + iMmMtpDpMetadataMpxAccess->AddSongL( fullFileName ); } PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::AddObjectL" ) ); @@ -454,8 +555,8 @@ // Get Modified content // --------------------------------------------------------------------------- // -EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL( const TDesC& aStorageRoot, - TInt& arrayCount, +EXPORT_C void CMmMtpDpMetadataAccessWrapper::GetModifiedContentL( const TDesC& aStorageRoot, + TInt& arrayCount, CDesCArray& aModifiedcontent ) { iMmMtpDpMetadataMpxAccess->SetStorageRootL( aStorageRoot ); @@ -474,12 +575,10 @@ // TBool CMmMtpDpMetadataAccessWrapper::IsExistL( const TDesC& aSuid ) { - TParsePtrC parse( aSuid ); - iMmMtpDpMetadataMpxAccess->SetStorageRootL( parse.Drive() ); return iMmMtpDpMetadataMpxAccess->IsExistL( aSuid ); } -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper::AddDummyFile // Add one dummy file to dummy files array // ----------------------------------------------------------------------------- @@ -487,10 +586,10 @@ EXPORT_C void CMmMtpDpMetadataAccessWrapper::AddDummyFileL( const TDesC& aDummyFileName ) { PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::AddDummyFile aDummyFileName(%S)" ), &aDummyFileName ); - iPlaylistArray->AppendL( aDummyFileName ); + iAbstractMediaArray->AppendL( aDummyFileName ); } -// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper::DeleteDummyFile // Delete one dummy file from dummy files array // ----------------------------------------------------------------------------- @@ -499,12 +598,12 @@ { PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::DeleteDummyFile aDummyFileName(%S)" ), &aDummyFileName ); TInt pos = 0; - if ( iPlaylistArray->Count() > 0 ) + if ( iAbstractMediaArray->Count() > 0 ) { - if ( 0 == iPlaylistArray->Find( aDummyFileName, pos ) ) + if ( 0 == iAbstractMediaArray->Find( aDummyFileName, pos ) ) { PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::DeleteDummyFile pos = %d" ), pos ); - iPlaylistArray->Delete( pos ); + iAbstractMediaArray->Delete( pos ); } } } @@ -518,57 +617,67 @@ { PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::CreateDummyFile, filename = %S" ), &aPlaylistName ); - if ( MmMtpDpUtility::FormatFromFilename( aPlaylistName ) == - EMTPFormatCodeAbstractAudioVideoPlaylist ) + RFile newfile; + TInt err = newfile.Replace( iFs, aPlaylistName, EFileWrite ); + + if ( err != KErrNone ) { - RFile newfile; - TInt err = newfile.Replace( iFramework.Fs(), aPlaylistName, EFileWrite ); - + newfile.Close(); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CreateDummyFile err = %d" ), err ); + } + else // File created OK + { + err = newfile.Flush(); + newfile.Close(); + err = iFs.SetAtt( aPlaylistName, KEntryAttSystem | KEntryAttHidden, + KEntryAttReadOnly | KEntryAttNormal ); if ( err != KErrNone ) - { - newfile.Close(); - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CreateDummyFile err = %d" ), err ); - } - else // File created OK - { - err = newfile.Flush(); - newfile.Close(); - err = iFramework.Fs().SetAtt( aPlaylistName, KEntryAttSystem | KEntryAttHidden, - KEntryAttReadOnly | KEntryAttNormal ); - if ( err != KErrNone ) - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CreateDummyFile Dummy Playlist file created. err = %d" ), err ); - } + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CreateDummyFile Dummy Playlist file created. err = %d" ), err ); } } // ----------------------------------------------------------------------------- // CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles -// Remove all dummy file of which format is "pla", and leave the "m3u" +// Remove all dummy file of which format is "pla" and "alb", and leave the "m3u" // ----------------------------------------------------------------------------- // void CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles() { PRINT( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles" ) ); - - TInt count = iPlaylistArray->Count(); + + TInt count = iAbstractMediaArray->Count(); + PRINT1( _L( "MM MTP => CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles, count = %d" ), count ); // Check if playlist file is a dummy file or an imported file for ( TInt i = 0; i < count; i++ ) { - if ( MmMtpDpUtility::FormatFromFilename( (*iPlaylistArray)[i] ) != - EMTPFormatCodeM3UPlaylist ) + TPtrC fileName( (*iAbstractMediaArray)[i] ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles, fileName = %S" ), &fileName ); + + TMTPFormatCode format = MmMtpDpUtility::FormatFromFilename( fileName ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles, format = 0x%x" ), format ); + if ( format == EMTPFormatCodeAbstractAudioAlbum ) { - // delete the virtual playlist - // iFramework has release don't use iFramework.FS() - TInt err = iRfs.Delete( (*iPlaylistArray)[i] ); - - PRINT2( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile filename = %S, err %d" ), - &( (*iPlaylistArray)[i] ), - err ); + // delete the abstract album if its size is zero + TEntry entry; + TInt err = iFs.Entry( fileName, entry ); + if ( err == KErrNone && entry.iSize == 0 ) + { + TRAP( err, iMmMtpDpMetadataMpxAccess->DeleteObjectL( fileName, EMPXAbstractAlbum ) ); + if( err == KErrNone ) + { + err = iFs.Delete( fileName ); + } + } + PRINT3( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile filename = %S, err %d, entry.iSize = %d" ), + &fileName, err, entry.iSize ); } else { - // leave the Imported playlist in the file system - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile, Don't delete m3u file [%S]" ), &( (*iPlaylistArray)[i] ) ); + TInt err = iFs.Delete( fileName ); + + PRINT2( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::RemoveDummyFile filename = %S, err %d" ), + &fileName, + err ); } } PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::RemoveDummyFiles" ) ); @@ -579,8 +688,9 @@ // Update Music collection // --------------------------------------------------------------------------- // -EXPORT_C void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL() +EXPORT_C void CMmMtpDpMetadataAccessWrapper::UpdateMusicCollectionL( const TDesC& aStorageRoot ) { + iMmMtpDpMetadataMpxAccess->SetStorageRootL( aStorageRoot ); iMmMtpDpMetadataMpxAccess->UpdateMusicCollectionL( ); } diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp --- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatampxaccess.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -24,9 +24,7 @@ #include #include #include -#include #include -#include #include // from MPX #include @@ -44,26 +42,34 @@ #include "mmmtpdplogger.h" #include "mmmtpdputility.h" #include "tmmmtpdppanic.h" +#include "tobjectdescription.h" static const TInt KMtpInvalidSongID = 0x1FFFFFFF; static const TInt KMtpChannelMono = 1; static const TInt KMtpChannelStereo = 2; -static const TInt KMtpDateTimeStringLength = 15; -static const TInt KMtpMaxStringLength = 255; -static const TInt KMtpMaxDescriptionLength = 0x200; -_LIT( KMtpDateTimeFormat, "%F%Y%M%DT%H%T%S" ); + _LIT( KMtpDateTimeConnector, "T" ); _LIT( KEmptyText, "" ); -#ifdef _DEBUG -_LIT( KMtpMpxPanic, "CMmMtpDpMetadataMpxAccess" ); +#if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) +_LIT( KMpxCollectionNewL, "MpxCollectionNewL" ); +_LIT( KMpxCollectionAddL, "MpxCollectionAddL" ); +_LIT( KMpxCollectionGetL, "MpxCollectionGetL" ); +_LIT( KMpxCollectionSetL, "MpxCollectionSetL" ); +_LIT( KMpxCollectionSetReferenceL, "MpxCollectionSetReferenceL" ); +_LIT( KMpxCollectionGetAbstractMedia, "MpxCollectionGetAbstractMedia" ); +_LIT( KMpxCollectionGetReference, "MpxCollectionGetReference" ); +_LIT( KMpxCollectionFindAllLValidate, "MpxCollectionValidate" ); +_LIT( KMpxCollectionFindAllLBeforeAdd, "MpxCollectionFindAllLBeforeAdd" ); +_LIT( KMpxCollectionFindAllLModified, "MpxCollectionFindAllLModified" ); +_LIT( KMpxCollectionCleanupDeletedMediasL, "KMpxCollectionCleanupDeletedMediasL" ); +_LIT( KSetMetadataValue, "SetMetadataValueL" ); #endif -CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs, - MMTPDataProviderFramework& aFramework ) +CMmMtpDpMetadataMpxAccess* CMmMtpDpMetadataMpxAccess::NewL( RFs& aRfs ) { - CMmMtpDpMetadataMpxAccess* self = new(ELeave) CMmMtpDpMetadataMpxAccess( aRfs, aFramework ); + CMmMtpDpMetadataMpxAccess* self = new( ELeave ) CMmMtpDpMetadataMpxAccess( aRfs ); CleanupStack::PushL( self ); self->ConstructL(); CleanupStack::Pop( self ); @@ -71,12 +77,12 @@ return self; } -CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs, - MMTPDataProviderFramework& aFramework ): +CMmMtpDpMetadataMpxAccess::CMmMtpDpMetadataMpxAccess( RFs& aRfs ) : iRfs( aRfs ), - iFramework( aFramework ) + iSampleData( NULL ), + iHasCleanUp( EFalse ) { - + // Do nothing } // --------------------------------------------------------------------------- @@ -99,12 +105,14 @@ // CMmMtpDpMetadataMpxAccess::~CMmMtpDpMetadataMpxAccess() { - if ( iCollectionHelper ) + if ( iCollectionHelper != NULL ) { iCollectionHelper->Close(); iCollectionHelper = NULL; } + delete iSampleData; + // for performance measurement purpose #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) delete iPerfLog; @@ -112,31 +120,55 @@ } // --------------------------------------------------------------------------- +// CMmMtpDpMetadataMpxAccess::OpenSession +// This is introduced to fix CollectionHelper Flush problem +// --------------------------------------------------------------------------- +// +void CMmMtpDpMetadataMpxAccess::OpenSession() + { + // do nothing + } + +// --------------------------------------------------------------------------- +// CMmMtpDpMetadataMpxAccess::CloseSession +// This is introduced to fix CollectionHelper Flush problem +// --------------------------------------------------------------------------- +// +void CMmMtpDpMetadataMpxAccess::CloseSession() + { + PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::CloseSession" ) ); + + // flush cache + if ( iCollectionHelper != NULL ) + { + PRINT( _L( "MM MTP <> Delete & Close CollectionHelper" ) ); + iCollectionHelper->Close(); + iCollectionHelper = NULL; + } + + iHasCleanUp = EFalse; // must reset, as class is not always destoryed + PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::CloseSession" ) ); + } + +// --------------------------------------------------------------------------- // CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL // Gets a piece of metadata from the collection // --------------------------------------------------------------------------- // void CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL( const TUint16 aPropCode, MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ) + const TDesC& aFullFileName, + TMPXGeneralCategory aCategory ) { PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); - // File Path - HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid - TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ); - TMPXGeneralCategory category = ( format == EMTPFormatCodeAbstractAudioVideoPlaylist ) || - ( format == EMTPFormatCodeM3UPlaylist ) ? EMPXPlaylist : EMPXSong; - PERFLOGSTART( KMpxCollectionGetL ); - const CMPXMedia& media = CollectionHelperL()->GetL( *suid, category ); + const CMPXMedia& media = CollectionHelperL()->GetL( aFullFileName, aCategory ); PERFLOGSTOP( KMpxCollectionGetL ); - CleanupStack::PopAndDestroy( suid ); // - suid - - TMPXAttributeData attrib( MpxAttribFromPropL( media, aPropCode ) ); + TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) ); TBool isSupported = media.IsSupported( attrib ); - PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported); + PRINT1(_L( "MM MTP <> CMmMtpDpMetadataMpxAccess::GetObjectMetadataValueL isSupported = %d" ), isSupported ); if ( aPropCode != EMTPObjectPropCodeOriginalReleaseDate && aPropCode != EMTPObjectPropCodeDRMStatus @@ -193,7 +225,7 @@ case EMTPObjectPropCodeDateCreated: { TTime time( *media.Value ( attrib ) ); - TBuf timeStr; + TBuf timeStr; time.FormatL( timeStr, KMtpDateTimeFormat ); if ( EMTPTypeString == aNewData.Type() ) @@ -245,7 +277,7 @@ case EMTPObjectPropCodeOriginalReleaseDate: { // Compose DateTime string in format YYYYMMDDTHHMMSS - TBuf dateTime; + TBuf dateTime; dateTime.Zero(); // NOTE: Handled specially, shouldn't leave like other property, following S60 @@ -346,9 +378,9 @@ // as a General Error if ( iCollectionHelper == NULL ) { - PERFLOGSTART(KMpxCollectionNewL); + PERFLOGSTART( KMpxCollectionNewL ); iCollectionHelper = CMPXCollectionHelperFactory::NewCollectionCachedHelperL(); - PERFLOGSTOP(KMpxCollectionNewL); + PERFLOGSTOP( KMpxCollectionNewL ); // Do a search for a song ID that does not exist // This is to validate the presence of the media database. @@ -364,7 +396,10 @@ searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); searchMedia->SetTObjectValueL( KMPXMediaGeneralId, KMtpInvalidSongID ); - searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot ); + if ( iStoreRoot.Length() > 0 ) + { + searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot ); + } RArray songAttributes; CleanupClosePushL( songAttributes ); // + songAttributes @@ -418,7 +453,6 @@ searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup ); searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); searchMedia->SetTObjectValueL( aWMPMediaID, aFlag ); - searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot ); RArray songAttributes; @@ -427,9 +461,10 @@ PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC searchMedia setup with no problems" ) ); - CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( - *searchMedia, + PERFLOGSTART(KMpxCollectionFindAllLModified); + CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia, songAttributes.Array() ); + PERFLOGSTOP(KMpxCollectionFindAllLModified); PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::FindWMPMediaLC foundMedia assigned from FindAllL" ) ); CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes @@ -543,9 +578,9 @@ KMPXMediaGeneralModified, EFalse ); // Update the song's metadata with the media object - PERFLOGSTART(KMpxCollectionSetL); + PERFLOGSTART( KMpxCollectionSetL ); CollectionHelperL()->SetL( media ); - PERFLOGSTOP(KMpxCollectionSetL); + PERFLOGSTOP( KMpxCollectionSetL ); CleanupStack::PopAndDestroy( media ); // - media } @@ -560,7 +595,14 @@ // as there is NOT a separate database for deleted files. PRINT( _L( "MM MTP <> Deleting metadata for deleted files" ) ); - CollectionHelperL()->CleanupDeletedMediasL(); + if ( !iHasCleanUp ) + { + PERFLOGSTART( KMpxCollectionCleanupDeletedMediasL ); + CollectionHelperL()->CleanupDeletedMediasL(); + PERFLOGSTOP( KMpxCollectionCleanupDeletedMediasL ); + + iHasCleanUp = ETrue; + } PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::UpdateMusicCollectionL" ) ); } @@ -593,27 +635,14 @@ // void CMmMtpDpMetadataMpxAccess::RenameObjectL( const TDesC& aOldFileName, const TDesC& aNewFileName, - TUint aFormatCode ) + TMPXGeneralCategory aCategory ) { PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::RenameObjectL aOldFileName = %S, aNewFileName = %S" ), - &aOldFileName, &aNewFileName ); + &aOldFileName, + &aNewFileName ); TInt err = KErrNone; - - if ( ( aFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist ) - || ( aFormatCode == EMTPFormatCodeM3UPlaylist ) ) - { - PRINT( _L( "MM MTP <> Playlist" ) ); - TRAP( err, CollectionHelperL()->RenameL( - aOldFileName, - aNewFileName, - EMPXPlaylist ) ); - } - else // Not a playlist - { - PRINT( _L( "MM MTP <> Non-Playlist" ) ); - TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, EMPXSong ) ); - } + TRAP( err, CollectionHelperL()->RenameL( aOldFileName, aNewFileName, aCategory ) ); if ( KErrNotFound == err ) { @@ -632,119 +661,47 @@ // ----------------------------------------------------------------------------- void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode, const MMTPType& aNewData, - const TDesC& aSuid ) + const TDesC& aFullFileName, + TMPXGeneralCategory aCategory ) { - PRINT2( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x aSuid = %S" ), - aPropCode, - &aSuid ); - CMPXMedia* media = NULL; + PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); - // Creat media properties for the song RArray contentIDs; CleanupClosePushL( contentIDs ); // + contentIDs + contentIDs.AppendL( KMPXMediaIdGeneral ); - contentIDs.AppendL( KMPXMediaIdAudio ); - contentIDs.AppendL( KMPXMediaIdMusic ); - contentIDs.AppendL( KMPXMediaIdMTP ); - media = CMPXMedia::NewL( contentIDs.Array() ); - CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs + if ( aCategory == EMPXSong ) + { + contentIDs.AppendL( KMPXMediaIdAudio ); + contentIDs.AppendL( KMPXMediaIdMusic ); + contentIDs.AppendL( KMPXMediaIdMTP ); + } + + CMPXMedia* media = CMPXMedia::NewL( contentIDs.Array() ); CleanupStack::PushL( media ); // + media - media->SetTObjectValueL( - KMPXMediaGeneralCategory, - EMPXSong ); + media->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); // MPXMedia default types media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - // Get file path - TParsePtrC parse( aSuid ); - media->SetTextValueL( KMPXMediaGeneralUri, aSuid ); + TParsePtrC parse( aFullFileName ); + media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); - - TRAPD( err, SetMetadataValueL( aPropCode, aNewData, *media ) ); - - if ( err == KErrNone ) - { - SetStorageRootL( parse.Drive() ); - - // Update the song's metadata with the media object - PERFLOGSTART( KMpxCollectionSetL ); - CollectionHelperL()->SetL( media ); - PERFLOGSTOP( KMpxCollectionSetL ); - } - else - { - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL ERROR = %d" ), err ); - - User::Leave( err ); - } - - CleanupStack::PopAndDestroy( media ); // - media - PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL" ) ); - } - -// ----------------------------------------------------------------------------- -// CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL -// Updated object metadata in MPX database -// ----------------------------------------------------------------------------- -void CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL( const TUint16 aPropCode, - const MMTPType& aNewData, - const CMTPObjectMetaData& aObjectMetaData ) - { - PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL aPropCode = 0x%x" ), aPropCode ); - CMPXMedia* media = NULL; - - RArray contentIDs; - CleanupClosePushL( contentIDs ); // + contentIDs + media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse ); - TUint format = aObjectMetaData.Uint( CMTPObjectMetaData::EFormatCode ); - if ( ( format == EMTPFormatCodeAbstractAudioVideoPlaylist ) - || ( format == EMTPFormatCodeM3UPlaylist ) ) - { - PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetObjectMetadataValueL format is playlist" ) ); - contentIDs.AppendL( KMPXMediaIdGeneral ); - - media = CMPXMedia::NewL( contentIDs.Array() ); - CleanupStack::PushL( media ); // + media - - media->SetTObjectValueL( - KMPXMediaGeneralCategory, - EMPXPlaylist ); - } - else - { - // Creat media properties for the song - contentIDs.AppendL( KMPXMediaIdGeneral ); - contentIDs.AppendL( KMPXMediaIdAudio ); - contentIDs.AppendL( KMPXMediaIdMusic ); - contentIDs.AppendL( KMPXMediaIdMTP ); - - media = CMPXMedia::NewL( contentIDs.Array() ); - CleanupStack::PushL( media ); // + media - - media->SetTObjectValueL( - KMPXMediaGeneralCategory, - EMPXSong ); - } - - // MPXMedia default types - media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - - // Get file path - HBufC* suid = aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ).AllocLC(); // + suid - TParsePtrC parse( *suid ); - media->SetTextValueL( KMPXMediaGeneralUri, *suid ); - media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); - CleanupStack::PopAndDestroy( suid ); // - suid - + PERFLOGSTART( KSetMetadataValue ); SetMetadataValueL( aPropCode, aNewData, *media ); + PERFLOGSTOP( KSetMetadataValue ); // Update the song's metadata with the media object - PERFLOGSTART(KMpxCollectionSetL); + PERFLOGSTART( KMpxCollectionSetL ); CollectionHelperL()->SetL( media ); - PERFLOGSTOP(KMpxCollectionSetL); + PERFLOGSTOP( KMpxCollectionSetL ); + + delete iSampleData; + iSampleData = NULL; CleanupStack::PopAndDestroy( 2, &contentIDs ); // - media, contentIDs @@ -760,12 +717,11 @@ CMPXMedia& aMediaProp ) { PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetMetadataValueL aPropCode = 0x%x" ), aPropCode ); - CMTPTypeString* textData = CMTPTypeString::NewLC(); // + textData CMTPTypeArray* desData = NULL; TMTPTypeUint16 uint16Data; TMTPTypeUint32 uint32Data; - TMPXAttributeData attrib( MpxAttribFromPropL( aMediaProp, aPropCode ) ); + TMPXAttributeData attrib( MpxAttribFromPropL( aPropCode ) ); switch ( aPropCode ) { @@ -776,14 +732,12 @@ case EMTPObjectPropCodeComposer: case EMTPObjectPropCodeAlbumArtist: { - PRINT1( _L( "MM MTP <> SetMetadataValueL Before Copy, string length = %d" ), aNewData.Size() ); - MMTPType::CopyL( aNewData, *textData ); - PRINT1( _L( "MM MTP <> SetMetadataValueL string length = %d" ), textData->StringChars().Length() ); - aMediaProp.SetTextValueL( attrib, textData->StringChars() ); - HBufC* log = textData->StringChars().AllocL(); - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), log ); - delete log; - log = NULL; + const CMTPTypeString& textData = static_cast( aNewData ); + HBufC* string = textData.StringChars().AllocLC(); // + string + PRINT2( _L( "MM MTP <> SetMetadataValueL des.ptr() = 0x%x, string length = %d" ),string->Des().Ptr(), string->Des().Length() ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL string = %S" ), string ); + aMediaProp.SetTextValueL( attrib, string->Des() ); + CleanupStack::PopAndDestroy( string ); // - string } break; @@ -827,13 +781,13 @@ case EMTPObjectPropCodeOriginalReleaseDate: { - MMTPType::CopyL( aNewData, *textData ); + const CMTPTypeString& textData = static_cast( aNewData ); TBuf data; - data.Copy( textData->StringChars().Left( KMtpDateTimeStringLength ) ); + data.Copy( textData.StringChars().Left( KMtpMaxDateTimeStringLength ) ); PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date = %S" ), &data ); - if ( data.Length() < KMtpDateTimeStringLength ) + if ( data.Length() < KMtpMaxDateTimeStringLength ) { PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL 0xDC99 date string is too short" ) ); break; @@ -906,27 +860,25 @@ case EMTPObjectPropCodeDescription: { #ifdef __MUSIC_ID_SUPPORT - //WriteMusicIdsL(*longString); + // WriteMusicIdsL(*longString); #else desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData MMTPType::CopyL( aNewData, *desData ); TUint length = desData->NumElements(); PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL length = %d" ), length ); - if ( length != 0 ) - { - TBuf text; - text.Zero(); - for ( TUint i = 0; i < length; i++ ) - text.Append( desData->ElementUint( i ) ); - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ), - &text ); - aMediaProp.SetTextValueL( KMPXMediaGeneralComment, text ); - } - else - { - aMediaProp.SetTextValueL( KMPXMediaGeneralComment, KEmptyText ); - } + + length = ( length < KMTPMaxDescriptionLen ) ? length : KMTPMaxDescriptionLen; + HBufC* text = HBufC::NewLC( length ); // + text + TPtr ptr = text->Des(); + + for ( TUint i = 0; i < length; i++ ) + ptr.Append( desData->ElementUint( i ) ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ), + text ); + aMediaProp.SetTextValueL( KMPXMediaGeneralComment, text->Des() ); + CleanupStack::PopAndDestroy( text ); // - text + CleanupStack::PopAndDestroy( desData ); // - desData #endif //__MUSIC_ID_SUPPORT } @@ -940,6 +892,30 @@ } break; + case EMTPObjectPropCodeRepresentativeSampleData: + { + const CMTPTypeArray& mtpTypeArray = static_cast( aNewData ); + TUint32 numElements = mtpTypeArray.NumElements(); + const TDesC& suid = aMediaProp.ValueText( KMPXMediaGeneralUri ); + PRINT2( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData numElements = %d, suid = %S" ), numElements, &suid ); + + delete iSampleData; + iSampleData = NULL; + + iSampleData = HBufC8::NewL( numElements * sizeof( TUint8 ) ); + TPtr8 samplePtr = iSampleData->Des(); + mtpTypeArray.ToDes( samplePtr ); + RFile sampleFile; + CleanupClosePushL( sampleFile ); + User::LeaveIfError( sampleFile.Replace( iRfs, suid, EFileWrite ) ); + User::LeaveIfError( sampleFile.Write( samplePtr ) ); + aMediaProp.SetTObjectValueL( KMPXMediaMTPSampleData, (TInt)iSampleData ); + aMediaProp.SetTObjectValueL( attrib, ETrue ); + CleanupStack::PopAndDestroy( &sampleFile ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL SampleData is ready = %u" ), 1 ); + } + break; + default: { User::Leave( KErrNotSupported ); @@ -947,7 +923,6 @@ break; } - CleanupStack::PopAndDestroy( textData ); // - textData PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetMetadataValueL" ) ); } @@ -970,10 +945,11 @@ CleanupStack::PushL( searchMedia ); // + searchMedia searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); + searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); - searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - - searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); + TParsePtrC parse( aFullFileName ); + searchMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); RArray songAttributes; CleanupClosePushL( songAttributes ); // + songAttributes @@ -981,11 +957,10 @@ PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL searchMedia setup with no problems" ) ); - PERFLOGSTART(KMpxCollectionFindAllLBeforeAdd); - CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( - *searchMedia, + PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd ); + CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia, songAttributes.Array() ); - PERFLOGSTOP(KMpxCollectionFindAllLBeforeAdd); + PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd ); CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia @@ -1022,15 +997,12 @@ CleanupStack::PushL( media ); // + media // MPXMedia default types - media->SetTObjectValueL( - KMPXMediaGeneralType, + media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - media->SetTObjectValueL( - KMPXMediaGeneralCategory, + media->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); // File Path // - TParsePtrC parse( aFullFileName ); media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); @@ -1050,17 +1022,17 @@ if ( foundItemCount == 0 ) { - PERFLOGSTART(KMpxCollectionAddL); + PERFLOGSTART( KMpxCollectionAddL ); CollectionHelperL()->AddL( media ); - PERFLOGSTOP(KMpxCollectionAddL); + PERFLOGSTOP( KMpxCollectionAddL ); PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL Media added into collection" ) ); } else { - PERFLOGSTART(KMpxCollectionSetL); + PERFLOGSTART( KMpxCollectionSetL ); CollectionHelperL()->SetL( media ); - PERFLOGSTOP(KMpxCollectionSetL); + PERFLOGSTOP( KMpxCollectionSetL ); PRINT( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::AddSongL Media metadata updated in collection" ) ); } @@ -1074,15 +1046,15 @@ } // ----------------------------------------------------------------------------- -// CMmMtpDpMetadataMpxAccess::AddPlaylistL -// Adds Playlist to Mpx DB +// CMmMtpDpMetadataMpxAccess::AddAbstractMediaL +// Adds abstract media to Mpx DB // ----------------------------------------------------------------------------- // -void CMmMtpDpMetadataMpxAccess::AddPlaylistL( const TDesC& aFullFileName ) +void CMmMtpDpMetadataMpxAccess::AddAbstractMediaL( const TDesC& aFullFileName, TMPXGeneralCategory aCategory ) { - PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::AddPlaylistL aFullFileName = %S" ), &aFullFileName ); + PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::AddAbstractMediaL aFullFileName = %S" ), &aFullFileName ); - // Does a record already exist for this playlist? + // Does a record already exist for this AbstractMedia? RArray contentIDs; CleanupClosePushL( contentIDs ); // + contentIDs contentIDs.AppendL( KMPXMediaIdGeneral ); @@ -1092,21 +1064,21 @@ CleanupStack::PushL( searchMedia ); // + searchMedia searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); searchMedia->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); - RArray playlistAttributes; - CleanupClosePushL( playlistAttributes ); // + playlistAttributes - playlistAttributes.AppendL( KMPXMediaGeneralId ); - playlistAttributes.AppendL( KMPXMediaGeneralTitle ); - playlistAttributes.AppendL( KMPXMediaGeneralUri ); + RArray abstractMediaAttributes; + CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes + abstractMediaAttributes.AppendL( KMPXMediaGeneralId ); + abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle ); + abstractMediaAttributes.AppendL( KMPXMediaGeneralUri ); - PERFLOGSTART(KMpxCollectionFindAllLBeforeAdd); + PERFLOGSTART( KMpxCollectionFindAllLBeforeAdd ); CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia, - playlistAttributes.Array() ); - PERFLOGSTOP(KMpxCollectionFindAllLBeforeAdd); + abstractMediaAttributes.Array() ); + PERFLOGSTOP( KMpxCollectionFindAllLBeforeAdd ); - CleanupStack::PopAndDestroy( &playlistAttributes ); // - playlistAttributes + CleanupStack::PopAndDestroy( &abstractMediaAttributes ); // - abstractMediaAttributes CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia CleanupStack::PushL( foundMedia ); // + foundMedia @@ -1117,12 +1089,12 @@ if ( foundItemCount != 0 ) { - PRINT( _L( "MM MTP <> Playlist Media already exists in the collection" ) ); + PRINT( _L( "MM MTP <> Abstract Media already exists in the collection" ) ); } else { - // Creat media properties for the playlist - PRINT( _L( "MM MTP <> Create playlist media properties" ) ); + // Creat media properties for the abstractMedia + PRINT( _L( "MM MTP <> Create abstract media properties" ) ); RArray contentIDs; CleanupClosePushL( contentIDs ); // + contentIDs contentIDs.AppendL( KMPXMediaIdGeneral ); @@ -1131,62 +1103,60 @@ CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs CleanupStack::PushL( media ); // + media - CMPXMediaArray* playlistArray = CMPXMediaArray::NewL(); - CleanupStack::PushL( playlistArray ); // + playlistArray; + CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray; // MPXMedia default types media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); media->SetTObjectValueL( KMPXMediaGeneralCategory, - EMPXPlaylist ); + aCategory ); // File Path // media->SetTextValueL( KMPXMediaGeneralUri, aFullFileName ); TParsePtrC parse( aFullFileName ); - media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); media->SetTextValueL( KMPXMediaGeneralTitle, parse.Name() ); media->SetTObjectValueL( KMPXMediaGeneralSynchronized, ETrue ); - media->SetCObjectValueL( KMPXMediaArrayContents, playlistArray ); - media->SetTObjectValueL( KMPXMediaArrayCount, playlistArray->Count() ); + media->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray ); + media->SetTObjectValueL( KMPXMediaArrayCount, abstractMediaArray->Count() ); + if ( aCategory == EMPXAbstractAlbum ) + { + media->SetTObjectValueL( KMPXMediaMTPSampleDataFlag, EFalse ); + } - PERFLOGSTART(KMpxCollectionAddL); + PERFLOGSTART( KMpxCollectionAddL ); CollectionHelperL()->AddL( media ); - PERFLOGSTOP(KMpxCollectionAddL); + PERFLOGSTOP( KMpxCollectionAddL ); // Clear the array - CleanupStack::PopAndDestroy( playlistArray ); // - playlistArray + CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray CleanupStack::PopAndDestroy( media ); // - media } CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia - PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddPlaylistL" ) ); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::AddAbstractMediaL" ) ); } // ----------------------------------------------------------------------------- -// CMmMtpDpMetadataMpxAccess::SetPlaylistL -// Set playlist to DB +// CMmMtpDpMetadataMpxAccess::SetReferenceL +// Set abstract media to DB // ----------------------------------------------------------------------------- // -void CMmMtpDpMetadataMpxAccess::SetPlaylistL( const TDesC& aPlaylistFileName, - CDesCArray& aRefFileArray ) +void CMmMtpDpMetadataMpxAccess::SetReferenceL( const TDesC& aRefOwnerName, + CDesCArray& aRefFileArray, + TMPXGeneralCategory aCategory ) { - PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetPlaylistL" ) ); - CMPXMediaArray* playlistArray = CMPXMediaArray::NewL(); - CleanupStack::PushL( playlistArray ); // + playlistArray + PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetReferenceL" ) ); + CMPXMediaArray* abstractMediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL( abstractMediaArray ); // + abstractMediaArray TUint count = aRefFileArray.Count(); for ( TUint j = 0; j < count; j++ ) { - // if the file is video, skip it and continue - if ( MmMtpDpUtility::IsVideoL( aRefFileArray[j], iFramework ) ) - { - continue; - } - // Creat media properties for the song RArray contentIDs; CleanupClosePushL( contentIDs ); // + contentIDs @@ -1204,14 +1174,15 @@ EMPXItem ); media->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - // File Path - // + + media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] ); + // TODO: need to confirm that should set drive letter or storage root path. TParsePtrC parse( aRefFileArray[j] ); - media->SetTextValueL( KMPXMediaGeneralUri, aRefFileArray[j] ); media->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); + media->SetTObjectValueL( KMPXMediaGeneralModified, EFalse ); // Add media into array contents - playlistArray->AppendL( media ); + abstractMediaArray->AppendL( media ); CleanupStack::Pop( media ); // - media } @@ -1220,35 +1191,30 @@ CleanupClosePushL( contentIDs ); // + contentIDs contentIDs.AppendL( KMPXMediaIdGeneral ); - CMPXMedia* playlistMedia = CMPXMedia::NewL( contentIDs.Array() ); + CMPXMedia* abstractMedia = CMPXMedia::NewL( contentIDs.Array() ); CleanupStack::PopAndDestroy( &contentIDs ); // - contentIDs - CleanupStack::PushL( playlistMedia ); // + playlistMedia - - playlistMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + CleanupStack::PushL( abstractMedia ); // + abstractMedia - playlistMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); - - playlistMedia->SetTextValueL( KMPXMediaGeneralUri, aPlaylistFileName ); - - TParsePtrC parse( aPlaylistFileName ); - playlistMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); - playlistMedia->SetTObjectValueL( KMPXMediaGeneralSynchronized, + abstractMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + abstractMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); + abstractMedia->SetTextValueL( KMPXMediaGeneralUri, aRefOwnerName ); + TParsePtrC parse( aRefOwnerName ); + abstractMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); + abstractMedia->SetTObjectValueL( KMPXMediaGeneralSynchronized, ETrue ); - playlistMedia->SetCObjectValueL( KMPXMediaArrayContents, playlistArray ); - playlistMedia->SetTObjectValueL( KMPXMediaArrayCount, - playlistArray->Count() ); + abstractMedia->SetCObjectValueL( KMPXMediaArrayContents, abstractMediaArray ); + abstractMedia->SetTObjectValueL( KMPXMediaArrayCount, + abstractMediaArray->Count() ); - // Update the duplicate playlist(s) with the new playlist array - PERFLOGSTART(KMpxCollectionSetL); - CollectionHelperL()->SetL( playlistMedia ); - PERFLOGSTOP(KMpxCollectionSetL); + // Update the duplicate abstractMedia(s) with the new abstractMedia array + PERFLOGSTART( KMpxCollectionSetReferenceL ); + CollectionHelperL()->SetL( abstractMedia ); + PERFLOGSTOP( KMpxCollectionSetReferenceL ); - CleanupStack::PopAndDestroy( playlistMedia ); // - playlistMedia + CleanupStack::PopAndDestroy( abstractMedia ); // - abstractMedia + CleanupStack::PopAndDestroy( abstractMediaArray ); // - abstractMediaArray - // Clear the array - CleanupStack::PopAndDestroy( playlistArray ); // - playlistArray - - PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetPlaylistL" ) ); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetReferenceL" ) ); } // --------------------------------------------------------------------------- @@ -1261,8 +1227,7 @@ PRINT1( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::SetStorageRoot aStoreRoot = %S" ), &aStorageRoot ); // get the drive number - TParse pathParser; - User::LeaveIfError( pathParser.Set( aStorageRoot, NULL, NULL ) ); + TParsePtrC pathParser( aStorageRoot ); TChar driveChar( pathParser.Drive()[0] ); TInt driveNumber; @@ -1299,36 +1264,55 @@ aMediaProp.SetTextValueL( KMPXMediaMusicGenre, KNullDesC ); // Composer aMediaProp.SetTextValueL( KMPXMediaMusicComposer, KNullDesC ); - // Album artFilename - aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtFileName, KNullDesC ); + // Album Artist + aMediaProp.SetTextValueL( KMPXMediaMusicAlbumArtist, KNullDesC ); // URL aMediaProp.SetTextValueL( KMPXMediaMusicURL, KNullDesC ); + + // add below for P4S failed case, that get metadata from cached CMPXMedia object + // DateAdded + TTime time; + time.HomeTime(); + aMediaProp.SetTObjectValueL( KMPXMediaGeneralDate, time.Int64() ); + // SampleRate + aMediaProp.SetTObjectValueL( KMPXMediaAudioSamplerate, 0 ); + // AudioBitrate + aMediaProp.SetTObjectValueL( KMPXMediaAudioBitrate, 0 ); + // Duration + aMediaProp.SetTObjectValueL( KMPXMediaGeneralDuration, 0 ); + // DrmStatus + aMediaProp.SetTObjectValueL( KMPXMediaMTPDrmStatus, 0 ); + // NumberOfChannels + aMediaProp.SetTObjectValueL( KMPXMediaAudioNumberOfChannels, 0 ); + // AudioCodec + aMediaProp.SetTObjectValueL( KMPXMediaAudioAudioCodec, 0 ); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::SetDefaultL" ) ); } -TMPXAttributeData CMmMtpDpMetadataMpxAccess::MpxAttribFromPropL( const CMPXMedia& aMedia, - const TUint16 aPropCode ) +TMPXAttributeData CMmMtpDpMetadataMpxAccess::MpxAttribFromPropL( const TUint16 aPropCode ) { const TMetadataTable KMetadataTable[] = - { - { EMTPObjectPropCodeName, KMPXMediaGeneralTitle }, - { EMTPObjectPropCodeArtist, KMPXMediaMusicArtist }, - { EMTPObjectPropCodeAlbumName, KMPXMediaMusicAlbum }, - { EMTPObjectPropCodeDateModified, KMPXMediaGeneralDate }, - { EMTPObjectPropCodeDateAdded, KMPXMediaGeneralDate }, - { EMTPObjectPropCodeDuration, KMPXMediaGeneralDuration }, - { EMTPObjectPropCodeTrack, KMPXMediaMusicAlbumTrack }, - { EMTPObjectPropCodeComposer, KMPXMediaMusicComposer }, - { EMTPObjectPropCodeOriginalReleaseDate, KMPXMediaMusicYear }, - { EMTPObjectPropCodeGenre, KMPXMediaMusicGenre }, - { EMTPObjectPropCodeDRMStatus, KMPXMediaMTPDrmStatus }, - { EMTPObjectPropCodeDescription, KMPXMediaGeneralComment }, - { EMTPObjectPropCodeNumberOfChannels, KMPXMediaAudioNumberOfChannels }, - { EMTPObjectPropCodeAudioBitRate, KMPXMediaAudioBitrate }, - { EMTPObjectPropCodeSampleRate, KMPXMediaAudioSamplerate }, - { EMTPObjectPropCodeAudioWAVECodec, KMPXMediaAudioAudioCodec }, - { EMTPObjectPropCodeAlbumArtist, KMPXMediaMusicArtist } - }; + { + { EMTPObjectPropCodeName, KMPXMediaGeneralTitle }, + { EMTPObjectPropCodeArtist, KMPXMediaMusicArtist }, + { EMTPObjectPropCodeAlbumName, KMPXMediaMusicAlbum }, + { EMTPObjectPropCodeDateModified, KMPXMediaGeneralDate }, + { EMTPObjectPropCodeDateAdded, KMPXMediaGeneralDate }, + { EMTPObjectPropCodeDuration, KMPXMediaGeneralDuration }, + { EMTPObjectPropCodeTrack, KMPXMediaMusicAlbumTrack }, + { EMTPObjectPropCodeComposer, KMPXMediaMusicComposer }, + { EMTPObjectPropCodeOriginalReleaseDate, KMPXMediaMusicYear }, + { EMTPObjectPropCodeGenre, KMPXMediaMusicGenre }, + { EMTPObjectPropCodeDRMStatus, KMPXMediaMTPDrmStatus }, + { EMTPObjectPropCodeDescription, KMPXMediaGeneralComment }, + { EMTPObjectPropCodeNumberOfChannels, KMPXMediaAudioNumberOfChannels }, + { EMTPObjectPropCodeAudioBitRate, KMPXMediaAudioBitrate }, + { EMTPObjectPropCodeSampleRate, KMPXMediaAudioSamplerate }, + { EMTPObjectPropCodeAudioWAVECodec, KMPXMediaAudioAudioCodec }, + { EMTPObjectPropCodeAlbumArtist, KMPXMediaMusicAlbumArtist }, + { EMTPObjectPropCodeRepresentativeSampleData,KMPXMediaMTPSampleDataFlag } + }; TInt i = 0; TInt count = sizeof( KMetadataTable ) / sizeof( KMetadataTable[0] ); @@ -1349,14 +1333,15 @@ } // --------------------------------------------------------------------------- -// CMmMtpDpMetadataMpxAccess::GetAllPlaylistL -// Get all playlists from MPX database in the assigned store +// CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL +// Get all abstract medias from MPX database in the assigned store // --------------------------------------------------------------------------- // -void CMmMtpDpMetadataMpxAccess::GetAllPlaylistL( const TDesC& aStoreRoot, - CMPXMediaArray** aPlaylists ) +void CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL( const TDesC& aStoreRoot, + CDesCArray& aAbstractMedias, + TMPXGeneralCategory aCategory ) { - PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllPlaylistL" ) ); + PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) ); SetStorageRootL( aStoreRoot ); @@ -1369,21 +1354,22 @@ CleanupStack::PushL( searchMedia ); // + searchMedia searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); - searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); searchMedia->SetTextValueL( KMPXMediaGeneralDrive, iStoreRoot ); - RArray playlistAttributes; - CleanupClosePushL( playlistAttributes ); // + playlistAttributes - playlistAttributes.AppendL( KMPXMediaGeneralId ); - playlistAttributes.AppendL( KMPXMediaGeneralTitle ); - playlistAttributes.AppendL( KMPXMediaGeneralUri ); + RArray abstractMediaAttributes; + CleanupClosePushL( abstractMediaAttributes ); // + abstractMediaAttributes + abstractMediaAttributes.AppendL( KMPXMediaGeneralId ); + abstractMediaAttributes.AppendL( KMPXMediaGeneralTitle ); + + abstractMediaAttributes.AppendL( KMPXMediaGeneralUri ); - PERFLOGSTART(KMpxCollectionGetPlaylist); + PERFLOGSTART( KMpxCollectionGetAbstractMedia ); CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia, - playlistAttributes.Array() ); - PERFLOGSTOP(KMpxCollectionGetPlaylist); + abstractMediaAttributes.Array() ); + PERFLOGSTOP( KMpxCollectionGetAbstractMedia ); - CleanupStack::PopAndDestroy( &playlistAttributes ); // - playlistAttributes + CleanupStack::PopAndDestroy( &abstractMediaAttributes ); // - abstractMediaAttributes CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia CleanupStack::PushL( foundMedia ); // + foundMedia @@ -1392,9 +1378,9 @@ User::Leave( KErrNotSupported ); } - TInt count = *foundMedia->Value ( KMPXMediaArrayCount ); + TInt count = *foundMedia->Value( KMPXMediaArrayCount ); - PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllPlaylistL [%d] playlists found in Playlist Database"), count ); + PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL [%d] abstractMedias found in Database"), count ); if ( count > 0 ) { @@ -1403,13 +1389,14 @@ User::Leave( KErrNotSupported ); } - *aPlaylists = CMPXMediaArray::NewL( *( foundMedia->Value ( - KMPXMediaArrayContents ) ) ); + CMPXMediaArray* mediaArray = foundMedia->Value ( KMPXMediaArrayContents ); + for ( TInt i = 0; i < count; i++ ) + aAbstractMedias.AppendL( ( *mediaArray )[i]->ValueText( KMPXMediaGeneralUri ) ); } CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia - PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAllPlaylistL" ) ); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetAllAbstractMediaL" ) ); } // --------------------------------------------------------------------------- @@ -1417,15 +1404,36 @@ // Get all references of specified playlist // --------------------------------------------------------------------------- // -void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( CMPXMedia* aPlaylist, - CDesCArray& aReferences ) +void CMmMtpDpMetadataMpxAccess::GetAllReferenceL( const TDesC& aRefOwnerSuid, + TMPXGeneralCategory aCategory, + CDesCArray& aReferences ) { PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL" ) ); - __ASSERT_DEBUG( aPlaylist, User::Panic( KMtpMpxPanic, KErrArgument ) ); + // 1. Get CMPXMedia object by the reference owner suid + RArray attributes; + CleanupClosePushL( attributes ); // + attributes + attributes.AppendL( KMPXMediaGeneralId ); + attributes.AppendL( KMPXMediaGeneralTitle ); + attributes.AppendL( KMPXMediaGeneralUri ); + + CMPXMedia* refOwner = CollectionHelperL()->GetL( aRefOwnerSuid, + attributes.Array(), + aCategory ); - // Extract the playlist id from the found object - TUint32 playlistId = *(*aPlaylist).Value ( KMPXMediaGeneralId ); + __ASSERT_DEBUG( refOwner, Panic( EMmMTPDpObjectNull ) ); + + CleanupStack::PushL( refOwner ); // + refOwner + + // 2. Extract the general id from the found object + if ( !refOwner->IsSupported( KMPXMediaGeneralId ) ) + PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL Before GeneralId" ) ); + + TUint32 abstractMediaId = *( *refOwner ).Value( KMPXMediaGeneralId ); + PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetAllReferenceL After GeneralId" ) ); + + CleanupStack::PopAndDestroy( refOwner ); // - refOwner + CleanupStack::PopAndDestroy( &attributes ); // - attributes // find the media object that contains a list of songs in the playlist RArray contentIDs; @@ -1438,17 +1446,17 @@ searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXGroup ); searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXSong ); - searchMedia->SetTObjectValueL ( KMPXMediaGeneralId, playlistId ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralId, abstractMediaId ); RArray songAttributes; CleanupClosePushL( songAttributes ); // + songAttributes songAttributes.AppendL( KMPXMediaGeneralId ); songAttributes.AppendL( KMPXMediaGeneralUri ); - PERFLOGSTART(KMpxCollectionGetReference); + PERFLOGSTART( KMpxCollectionGetReference ); CMPXMedia* foundMedia = CollectionHelperL()->FindAllL( *searchMedia, songAttributes.Array() ); - PERFLOGSTOP(KMpxCollectionGetReference); + PERFLOGSTOP( KMpxCollectionGetReference ); CleanupStack::PopAndDestroy( &songAttributes ); // - songAttributes CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia @@ -1483,7 +1491,7 @@ // may replace the following 3 statements into the following: // AppendL(refMedia->ValueText(KMPXMediaGeneralUri)); - HBufC* musicFileLocation = refMedia->ValueText( KMPXMediaGeneralUri ).AllocLC(); + HBufC* musicFileLocation = refMedia->ValueText( KMPXMediaGeneralUri ).AllocLC(); // + musicFileLocation aReferences.AppendL( *musicFileLocation ); PRINT1( _L("MM MTP <> CMmMtpDpMetadataMpxAccess::GetAllReferenceL, [%S] found from MPX db"), musicFileLocation ); @@ -1498,32 +1506,12 @@ } // --------------------------------------------------------------------------- -// CMmMtpDpMetadataMpxAccess::GetPlaylistNameL -// -// --------------------------------------------------------------------------- -// -void CMmMtpDpMetadataMpxAccess::GetPlaylistNameL( CMPXMedia* aPlaylist, - TDes& aPlaylistName ) - { - PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetPlaylistNameL" ) ); - - if ( !aPlaylist->IsSupported( KMPXMediaGeneralUri ) ) - { - User::Leave( KErrNotSupported ); - } - - aPlaylistName.Copy( aPlaylist->ValueText( KMPXMediaGeneralUri ) ); - - PRINT( _L( "MM MTP <= CMmMtpDpMetadataMpxAccess::GetPlaylistNameL" ) ); - } - -// --------------------------------------------------------------------------- // CMmMtpDpMetadataMpxAccess::GetModifiedContentL // Get modified content // --------------------------------------------------------------------------- // void CMmMtpDpMetadataMpxAccess::GetModifiedContentL( TInt& arrayCount, - CDesCArray& aModifiedcontent ) + CDesCArray& aModifiedcontent ) { PRINT( _L( "MM MTP => CMmMtpDpMetadataMpxAccess::GetModifiedContentL" ) ); CMPXMedia* foundMedia; @@ -1598,6 +1586,9 @@ searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, EMPXPlaylist ); searchMedia->SetTextValueL( KMPXMediaGeneralUri, aSuid ); + TParsePtrC parse( aSuid ); + searchMedia->SetTextValueL( KMPXMediaGeneralDrive, parse.Drive() ); + RArray playlistAttributes; CleanupClosePushL( playlistAttributes ); // + playlistAttributes playlistAttributes.AppendL( KMPXMediaGeneralId ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp --- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadatavideoaccess.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -38,9 +38,8 @@ #include "mmmtpdputility.h" #include "tmmmtpdppanic.h" #include "mmmtpvideodbdefs.h" +#include "tobjectdescription.h" -static const TInt KMtpMaxStringLength = 255; -static const TInt KMtpMaxDescriptionLength = 0x200; const TInt KStorageRootMaxLength = 10; #ifdef _DEBUG @@ -304,10 +303,6 @@ formatBuf.Append( KMtpVideoParentalRatingType ); formatBuf.Append( KMtpVideoCommaSign ); - formatBuf.Append( KMtpVideoUseCount ); - formatBuf.Append( KMtpVideoUseCountType ); - formatBuf.Append( KMtpVideoCommaSign ); - formatBuf.Append( KMtpVideoDRM ); formatBuf.Append( KMtpVideoDRMType ); formatBuf.Append( KMtpVideoCommaSign ); @@ -663,9 +658,6 @@ num = iColSet->ColNo( KMtpVideoParentalRating ); iRecordSet.SetColL( num, KNullDesC ); - num = iColSet->ColNo( KMtpVideoUseCount ); - iRecordSet.SetColL( num, 0 ); - num = iColSet->ColNo( KMtpVideoDRM ); iRecordSet.SetColL( num, 0 ); } @@ -1007,22 +999,6 @@ } break; - case EMTPObjectPropCodeUseCount: - { - PRINT( _L( "MM MTP <> EMTPObjectPropCodeUseCount-MD" ) ); - num = iColSet->ColNo( KMtpVideoUseCount ); - uInt32 = iRecordSet.ColUint32( num ); - if ( EMTPTypeUINT32 == aNewData.Type() ) - { - ( ( TMTPTypeUint32 & ) aNewData ).Set( uInt32 ); - } - else - { - User::Leave( KErrArgument ); - } - } - break; - case EMTPObjectPropCodeDRMStatus: { PRINT( _L( "MM MTP <> EMTPObjectPropCodeDRMStatus-MD" ) ); @@ -1087,18 +1063,8 @@ // Get file path TPtrC suid( aObjectMetaData.DesC( CMTPObjectMetaData::ESuid ) ); - TParsePtrC parse( suid ); SetRecordL( suid, ERecordWrite ); - TRAPD( err, SetMetadataL( aPropCode, aNewData ) ); - - if ( err < KErrNone ) // EPOC error condition - { - PRINT1( _L( "MM MTP <> Metadata write failed, with error %d" ), err ); - SetRecordL( suid, EFailedWrite ); - } - - if ( err != KErrNone ) - User::Leave( err ); + SetMetadataL( aPropCode, aNewData ); PRINT( _L( "MM MTP <= CMmMtpDpMetadataVideoAccess::SetObjectMetadataValueL" ) ); } @@ -1150,18 +1116,21 @@ desData = CMTPTypeArray::NewLC( EMTPTypeAUINT16 ); // + desData MMTPType::CopyL( aNewData, *desData ); TUint length = desData->NumElements(); - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataVideoAccess::SetMetadataL length = %d" ), length ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL length = %d" ), + length ); if ( length != 0 ) { - TBuf text; - text.Zero(); + length = ( length < KMTPMaxDescriptionLen ) ? length : KMTPMaxDescriptionLen; + HBufC* text = HBufC::NewLC( length ); // + text + TPtr ptr = text->Des(); + for ( TUint i = 0; i < length; i++ ) - { - text.Append( desData->ElementUint( i ) ); - } - PRINT1( _L( "MM MTP <> CMmMtpDpMetadataVideoAccess::SetMetadataL text = %S" ), - &text ); - WriteLongTextL( KMtpVideoComment, text ); + ptr.Append( desData->ElementUint( i ) ); + PRINT1( _L( "MM MTP <> CMmMtpDpMetadataMpxAccess::SetMetadataValueL text = %S" ), + text ); + + WriteLongTextL( KMtpVideoComment, *text ); + CleanupStack::PopAndDestroy( text ); // - text } else { @@ -1182,7 +1151,6 @@ case EMTPObjectPropCodeVideoBitRate: case EMTPObjectPropCodeFramesPerThousandSeconds: case EMTPObjectPropCodeKeyFrameDistance: - case EMTPObjectPropCodeUseCount: { if ( EMTPTypeUINT32 != aNewData.Type() ) { @@ -1507,7 +1475,6 @@ { EMTPObjectPropCodeScanType, KMtpVideoScanType }, { EMTPObjectPropCodeEncodingProfile, KMtpVideoEncodingProfile }, { EMTPObjectPropCodeParentalRating, KMtpVideoParentalRating }, - { EMTPObjectPropCodeUseCount, KMtpVideoUseCount }, { EMTPObjectPropCodeAudioWAVECodec, KMtpVideoAudioCodec }, { EMTPObjectPropCodeDRMStatus, KMtpVideoDRM }, }; @@ -1533,8 +1500,7 @@ PRINT1( _L( "MM MTP => CMmMtpDpMetadataVideoAccess::SetStorageRoot aStoreRoot = %S" ), &aStorageRoot ); // get the drive number - TParse pathParser; - User::LeaveIfError( pathParser.Set( aStorageRoot, NULL, NULL ) ); + TParsePtrC pathParser( aStorageRoot ); TChar driveChar( pathParser.Drive()[0] ); User::LeaveIfError( RFs::CharToDrive( driveChar, iStoreNum ) ); diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp --- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -27,6 +27,7 @@ #include #include #include +#include // for RProperty // for asf mimetype parsing #ifdef __WINDOWS_MEDIA @@ -36,7 +37,10 @@ #include "mmmtpdputility.h" #include "mmmtpdpfiledefs.h" +#include "tobjectdescription.h" #include "mmmtpdplogger.h" +#include "mmmtpdp_variant.hrh" +#include "cmmmtpdpaccesssingleton.h" using namespace ContentAccess; @@ -44,6 +48,9 @@ _LIT( KHxMimeTypeWma, "audio/x-hx-wma" ); _LIT( KHxMimeTypeWmv, "video/x-hx-wmv" ); +const TInt KMaxRenameTimes = 10; +const TInt KRenameThreshold = 100 * 1000; // (100 millisec) + // ----------------------------------------------------------------------------- // MmMtpDpUtility::FormatFromFilename // Utility function to get the type of an object from the filename @@ -53,72 +60,78 @@ // EXPORT_C TMTPFormatCode MmMtpDpUtility::FormatFromFilename( const TDesC& aFullFileName ) { + TMTPFormatCode format = EMTPFormatCodeUndefined; + if ( aFullFileName.Right( 1 ).CompareF( KTxtBackSlash ) == 0 ) // We have a directory name { - return EMTPFormatCodeAssociation; + format = EMTPFormatCodeAssociation; } - - TParsePtrC file( aFullFileName ); + else + { + TParsePtrC file( aFullFileName ); - // need to do it in popularity of format, to optmize performance - if ( file.Ext().CompareF( KTxtExtensionMP3 ) == 0 ) - return EMTPFormatCodeMP3; - + if ( file.ExtPresent() ) + { + // need to do it in popularity of format, to optmize performance + if ( file.Ext().CompareF( KTxtExtensionMP3 ) == 0 ) + format = EMTPFormatCodeMP3; #ifdef __WINDOWS_MEDIA - if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 ) - return EMTPFormatCodeWMA; + else if ( file.Ext().CompareF( KTxtExtensionWMA ) == 0 ) + format = EMTPFormatCodeWMA; #endif // __WINDOWS_MEDIA - - if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) ) - return EMTPFormatCodeMP4Container; - - if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) ) - return EMTPFormatCode3GPContainer; - - if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 ) - return EMTPFormatCodeAAC; - - if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 ) - return EMTPFormatCodeWAV; - + else if (( file.Ext().CompareF( KTxtExtensionPLA ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionVIR ) == 0 ) ) + format = EMTPFormatCodeAbstractAudioVideoPlaylist; + else if ( ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionM4A ) == 0 ) ) + format = EMTPFormatCodeMP4Container; + else if ( ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) + || ( file.Ext().CompareF( KTxtExtension3G2 ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionO4A ) == 0 ) + || ( file.Ext().CompareF( KTxtExtensionO4V ) == 0 ) ) + format = EMTPFormatCode3GPContainer; + else if ( file.Ext().CompareF( KTxtExtensionAAC ) == 0 ) + format = EMTPFormatCodeAAC; + else if ( file.Ext().CompareF( KTxtExtensionWAV ) == 0 ) + format = EMTPFormatCodeWAV; #ifdef __WINDOWS_MEDIA - if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 ) - return EMTPFormatCodeWMV; - - if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 ) - return EMTPFormatCodeASF; - + else if ( file.Ext().CompareF( KTxtExtensionWMV ) == 0 ) + format = EMTPFormatCodeWMV; + else if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 ) + format = EMTPFormatCodeASF; #endif // __WINDOWS_MEDIA + else if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 ) + { + HBufC8* mime(NULL); + TRAP_IGNORE( mime = MmMtpDpUtility::OdfMimeTypeL( file.FullName() ) ); + if ( mime != NULL ) + { + // 3GP + if ( mime->CompareF( KMimeTypeAudio3gpp ) == 0 + || mime->CompareF( KMimeTypeVideo3gpp ) == 0 ) + { + delete mime; + mime = NULL; + format = EMTPFormatCode3GPContainer; + } + } - if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 ) - { - HBufC8* mime = MmMtpDpUtility::ContainerMimeType( file.FullName() ); - if ( mime != NULL ) - { - // 3GP - if ( mime->CompareF( KMimeTypeAudio3gpp ) == 0 - || mime->CompareF( KMimeTypeVideo3gpp ) == 0 ) - { - delete mime; - mime = NULL; - return EMTPFormatCode3GPContainer; + if ( mime != NULL ) + { + delete mime; + mime = NULL; + } } - } - - if ( mime != NULL ) - { - delete mime; - mime = NULL; +#ifdef MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + else if ( file.Ext().CompareF( KTxtExtensionALB ) == 0 ) + format = EMTPFormatCodeAbstractAudioAlbum; +#endif // MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT + else if ( file.Ext().CompareF( KTxtExtensionM3U ) == 0 ) + format = EMTPFormatCodeM3UPlaylist; } } - if (( file.Ext().CompareF( KTxtExtensionPLA ) == 0 ) || ( file.Ext().CompareF( KTxtExtensionVIR ) == 0 ) ) - return EMTPFormatCodeAbstractAudioVideoPlaylist; - - if ( file.Ext().CompareF( KTxtExtensionM3U ) == 0 ) - return EMTPFormatCodeM3UPlaylist; - - return EMTPFormatCodeUndefined; + return format; } // ----------------------------------------------------------------------------- @@ -144,101 +157,18 @@ } // ----------------------------------------------------------------------------- -// MmMtpDpUtility::IsVideoL (Slow Version) -// Utility function to determine whether a format is Video or not +// MmMtpDpUtility::HasReference +// Utility function to decide if there is any reference // ----------------------------------------------------------------------------- // -EXPORT_C TBool MmMtpDpUtility::IsVideoL( const TDesC& aFullFileName ) +TBool MmMtpDpUtility::HasReference( TUint16 aObjFormatCode ) { - PRINT1( _L( "MM MTP => MmMtpDpUtility::IsVideoL (Slow Version) aFullFileName = %S" ), &aFullFileName ); - - TParse pathParser; - User::LeaveIfError( pathParser.Set( aFullFileName, NULL, NULL ) ); - - TPtrC ext( pathParser.Ext() ); - - if ( ext.Length() <= 0 ) - { - PRINT( _L( "MM MTP <> MmMtpDpUtility::IsVideoL ext len <= 0, return false" ) ); - return EFalse; - } - - // move WMV early to optmize comparison - if ( ext.CompareF( KTxtExtensionWMV ) == 0 ) - { - return ETrue; - } - else if ( ext.CompareF( KTxtExtensionMP4 ) == 0 - || ext.CompareF( KTxtExtension3GP ) == 0 - || ext.CompareF( KTxtExtensionODF ) == 0 - || ext.CompareF( KTxtExtensionASF ) == 0 ) - { - HBufC8* mimetype = ContainerMimeType( aFullFileName ); - User::LeaveIfNull( mimetype ); - - CleanupStack::PushL( mimetype ); // + mimetype - - TMmMtpSubFormatCode subFormatCode; - - User::LeaveIfError( SubFormatCodeFromMime( *mimetype, subFormatCode ) ); - CleanupStack::PopAndDestroy( mimetype ); // - mimetype - - if ( subFormatCode == EMTPSubFormatCodeVideo ) - { - return ETrue; - } - else - { - return EFalse; - } - } - else if ( ext.CompareF( KTxtExtensionO4V ) == 0 ) + if ( aObjFormatCode == EMTPFormatCodeAbstractAudioAlbum + || aObjFormatCode == EMTPFormatCodeAbstractAudioVideoPlaylist + || aObjFormatCode == EMTPFormatCodeM3UPlaylist ) return ETrue; - - // other format, as audio - return EFalse; - } - -// ----------------------------------------------------------------------------- -// MmMtpDpUtility::IsVideoL (Fast Version) -// Utility function to determine whether a format is Video or not -// ----------------------------------------------------------------------------- -// -TBool MmMtpDpUtility::IsVideoL( const TDesC& aFullFileName, - const MMTPDataProviderFramework& aFramework ) - { - PRINT1( _L( "MM MTP => MmMtpDpUtility::IsVideoL (Fast Version) aFullFileName = %S" ), &aFullFileName ); - - CMTPObjectMetaData* info = CMTPObjectMetaData::NewLC(); // + info - aFramework.ObjectMgr().ObjectL( aFullFileName, *info ); - - TUint formatCode = info->Uint( CMTPObjectMetaData::EFormatCode ); - TUint subFormatCode = info->Uint( CMTPObjectMetaData::EFormatSubCode ); - - CleanupStack::PopAndDestroy( info ); // - info - - if ( formatCode == EMTPFormatCodeWMV ) - { - return ETrue; - } - else if ( ( formatCode == EMTPFormatCodeMP4Container ) - || ( formatCode == EMTPFormatCode3GPContainer ) - || ( formatCode == EMTPFormatCodeASF ) ) - { - if ( subFormatCode == EMTPSubFormatCodeAudio ) - { - return EFalse; - } - else if ( subFormatCode == EMTPSubFormatCodeVideo ) - { - return ETrue; - } - } - - PRINT( _L( "MM MTP <= MmMtpDpUtility::IsVideoL (Fast Version)" ) ); - - // other format, as audio - return EFalse; + else + return EFalse; } // ----------------------------------------------------------------------------- @@ -269,7 +199,7 @@ TEntry fileInfo; // Shouldn't leave User::LeaveIfError( aFs.Entry( aFileName, fileInfo ) ); - return fileInfo.iSize; + return fileInfo.FileSize(); } // ----------------------------------------------------------------------------- @@ -277,16 +207,14 @@ // Get the file date modified. // ----------------------------------------------------------------------------- // -TTime MmMtpDpUtility::GetObjectDateModifiedL( RFs& aFs, const TDesC& aFullFileName ) +void MmMtpDpUtility::GetObjectDateModifiedL( RFs& aFs, const TDesC& aFullFileName, TDes& aDateModified ) { - TTime dataModified; + TTime date; TEntry fileInfo; // Shouldn't leave User::LeaveIfError( aFs.Entry( aFullFileName, fileInfo ) ); - - dataModified = fileInfo.iModified; - - return dataModified; + date = fileInfo.iModified; + date.FormatL( aDateModified, KMtpDateTimeFormat ); } // ----------------------------------------------------------------------------- @@ -306,6 +234,10 @@ protectionStatus = EMTPProtectionReadOnly; } + PRINT2( _L( "MM MTP <> MmMtpDpUtility::GetProtectionStatusL aFullFileName = %S, protectionStatus = 0x%x" ), + &aFullFileName, + protectionStatus ); + return protectionStatus; } @@ -314,10 +246,10 @@ // Check if property type match datatype. // ----------------------------------------------------------------------------- // -TMTPResponseCode MmMtpDpUtility::CheckPropType(TUint16 aPropertyCode, TUint16 aDataType) +TMTPResponseCode MmMtpDpUtility::CheckPropType( TUint16 aPropertyCode, TUint16 aDataType ) { - PRINT2( _L( "MM MTP => MmMtpDpUtility::CheckPropCode aPropertyCode = 0x%x, aDataType = 0x%x" ), - aPropertyCode, + PRINT2( _L( "MM MTP => MmMtpDpUtility::CheckPropCode aPropertyCode = 0x%x, aDataType = 0x%x" ), + aPropertyCode, aDataType ); TMTPResponseCode responseCode = EMTPRespCodeOK; @@ -333,8 +265,11 @@ case EMTPObjectPropCodeDateCreated: case EMTPObjectPropCodeDateModified: case EMTPObjectPropCodeDateAdded: - case EMTPObjectPropCodeNonConsumable: case EMTPObjectPropCodeVideoBitRate: + case EMTPObjectPropCodeRepresentativeSampleFormat: + case EMTPObjectPropCodeRepresentativeSampleSize: + case EMTPObjectPropCodeRepresentativeSampleHeight: + case EMTPObjectPropCodeRepresentativeSampleWidth: { responseCode = EMTPRespCodeAccessDenied; } @@ -350,6 +285,7 @@ case EMTPObjectPropCodeOriginalReleaseDate: // 0xDC99 case EMTPObjectPropCodeAlbumName: // 0xDC9A case EMTPObjectPropCodeEncodingProfile: // 0xDEA1 + case EMTPObjectPropCodeAlbumArtist: // 0xDC9B { if ( aDataType != EMTPTypeString ) { @@ -371,7 +307,6 @@ case EMTPObjectPropCodeWidth: // 0xDC87 case EMTPObjectPropCodeHeight: // 0xDC88 case EMTPObjectPropCodeDuration: // 0xDC89 - case EMTPObjectPropCodeUseCount: // 0xDC91 case EMTPObjectPropCodeSampleRate: // 0xDE93 case EMTPObjectPropCodeAudioWAVECodec: // 0xDE99 case EMTPObjectPropCodeAudioBitRate: // 0xDE9A @@ -399,13 +334,33 @@ } break; + // Uint8 properties + case EMTPObjectPropCodeNonConsumable: + case EMTPExtObjectPropCodeOmaDrmStatus: // 0xDB01 + { + if ( aDataType != EMTPTypeUINT8 ) + { + responseCode = EMTPRespCodeInvalidObjectPropFormat; + } + } + break; + + case EMTPObjectPropCodeRepresentativeSampleData: + { + if ( aDataType != EMTPTypeAUINT8 ) + { + responseCode = EMTPRespCodeInvalidObjectPropFormat; + } + } + break; + default: { responseCode = EMTPRespCodeInvalidObjectPropCode; } break; } - PRINT1( _L( "MM MTP <= MmMtpDpUtility::CheckPropCode responseCode = 0x%x" ), + PRINT1( _L( "MM MTP <= MmMtpDpUtility::CheckPropCode responseCode = 0x%x" ), responseCode ); return responseCode; } @@ -433,60 +388,27 @@ aNewName.Insert( 0, ptr ); } - return aFs.Rename( aFullFileName, aNewName ); - } - -// ----------------------------------------------------------------------------- -// MetadataAccessWrapper::ContainerMimeType -// Get mime type from file -// ----------------------------------------------------------------------------- -// -HBufC8* MmMtpDpUtility::ContainerMimeType( const TDesC& aFullPath ) - { - PRINT( _L( "MM MTP => MmMtpDpUtility::ContainerMimeType" ) ); - - // parse the file path - TParse pathParser; - TInt retCode = pathParser.Set( aFullPath, NULL, NULL ); - if ( retCode != KErrNone ) + TInt ret = KErrNone; + // Some other component might be holding on to the file (MDS background harvesting), + // try again after 100 millisec, up to 10 times, before give up + TInt count = KMaxRenameTimes; + while ( count > 0 ) { - PRINT( _L( "MM MTP <> MmMtpDpUtility::ContainerMimeType parse path failed" ) ); - return NULL; + ret = aFs.Rename( aFullFileName, aNewName ); + if ( ( ret == KErrInUse ) && ( count > 1 ) ) + { + User::After( KRenameThreshold ); + count--; + } + else + { + break; + } } - // get the extension of file - TPtrC ext( pathParser.Ext() ); - if ( ext.Length() <= 0 ) - { - PRINT( _L( "MM MTP <> MmMtpDpUtility::ContainerMimeType file ext len == 0" ) ); - return NULL; - } - - HBufC8* mimebuf = NULL; - TInt err = KErrNone; + PRINT1( _L( "MM MTP <> MmMtpDpUtility::UpdateObjectFileName, ret = %d" ), ret ); - // MP4/3GP - if ( ext.CompareF( KTxtExtensionMP4 ) == 0 - || ext.CompareF( KTxtExtension3GP ) == 0 ) - { - TRAP( err, mimebuf = Mp4MimeTypeL( aFullPath ) ); - PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, Mp4MimeTypeL err = %d"), err ); - } - else if ( ext.CompareF( KTxtExtensionODF ) == 0 ) - { - TRAP( err, mimebuf = Mp4MimeTypeL( aFullPath ) ); - PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, OdfMimeTypeL err = %d"), err ); - } -#ifdef __WINDOWS_MEDIA - else if ( ext.CompareF( KTxtExtensionASF ) == 0 ) - { - TRAP( err, mimebuf = AsfMimeTypeL( aFullPath ) ); - PRINT1( _L("MM MTP <> MmMtpDpUtility::ContainerMimeType, AsfMimeTypeL err = %d"), err ); - } -#endif - - PRINT( _L( "MM MTP <= MmMtpDpUtility::ContainerMimeType" ) ); - return mimebuf; + return ret; } // ----------------------------------------------------------------------------- @@ -499,9 +421,10 @@ PRINT( _L( "MM MTP => MmMtpDpUtility::Mp4MimeTypeL" ) ); HBufC8* mimebuf = NULL; TParsePtrC file( aFullPath ); - + if ( file.Ext().CompareF( KTxtExtensionMP4 ) == 0 - || file.Ext().CompareF( KTxtExtension3GP ) == 0 ) + || file.Ext().CompareF( KTxtExtension3GP ) == 0 + || file.Ext().CompareF( KTxtExtension3G2 ) == 0 ) { // get mime from file MP4Handle mp4Handle = NULL; @@ -537,7 +460,8 @@ if ( mp4err == MP4_OK ) { - if ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) + if ( file.Ext().CompareF( KTxtExtension3GP ) == 0 + || file.Ext().CompareF( KTxtExtension3G2 ) == 0 ) { mimebuf = KMimeTypeAudio3gpp().Alloc(); } @@ -550,7 +474,8 @@ // is video file else if ( mp4err == MP4_OK ) { - if ( file.Ext().CompareF( KTxtExtension3GP ) == 0 ) + if ( file.Ext().CompareF( KTxtExtension3GP ) == 0 + || file.Ext().CompareF( KTxtExtension3G2 ) == 0 ) { mimebuf = KMimeTypeVideo3gpp().Alloc(); } @@ -573,7 +498,7 @@ { User::Leave( KErrNotSupported ); } - + if ( mimebuf == NULL ) { User::Leave( KErrNotFound ); @@ -591,46 +516,37 @@ { PRINT( _L( "MM MTP => MmMtpDpUtility::OdfMimeTypeL" ) ); HBufC8* mimebuf = NULL; - - TParsePtrC file( aFullPath ); - - if ( file.Ext().CompareF( KTxtExtensionODF ) == 0 ) - { - CContent* content = CContent::NewL( aFullPath ); - CleanupStack::PushL( content ); // + content - - HBufC* buffer = HBufC::NewL( KMimeTypeMaxLength ); - CleanupStack::PushL( buffer ); // + buffer - - TPtr data = buffer->Des(); - TInt err = content->GetStringAttribute( EMimeType, data ); - - if ( err == KErrNone ) - { - mimebuf = HBufC8::New( buffer->Length() ); - - if (mimebuf == NULL) - { - User::LeaveIfError( KErrNotFound ); - } - - mimebuf->Des().Copy( *buffer ); - } - - // leave if NULL + + CContent* content = CContent::NewL( aFullPath ); + CleanupStack::PushL( content ); // + content + + HBufC* buffer = HBufC::NewL( KMimeTypeMaxLength ); + CleanupStack::PushL( buffer ); // + buffer + + TPtr data = buffer->Des(); + TInt err = content->GetStringAttribute( EMimeType, data ); + + if ( err == KErrNone ) + { + mimebuf = HBufC8::New( buffer->Length() ); + if ( mimebuf == NULL ) { - User::Leave( KErrNotFound ); + User::LeaveIfError( KErrNotFound ); } - - CleanupStack::PopAndDestroy( buffer ); // - buffer - CleanupStack::PopAndDestroy( content ); // - content + + mimebuf->Des().Copy( *buffer ); } - else + + // leave if NULL + if ( mimebuf == NULL ) { - User::Leave( KErrNotSupported ); + User::Leave( KErrNotFound ); } - + + CleanupStack::PopAndDestroy( buffer ); // - buffer + CleanupStack::PopAndDestroy( content ); // - content + PRINT( _L( "MM MTP <= MmMtpDpUtility::OdfMimeTypeL" ) ); return mimebuf; } @@ -642,70 +558,61 @@ // HBufC8* MmMtpDpUtility::AsfMimeTypeL( const TDesC& aFullPath ) { - PRINT( _L( "MM MTP => MmMtpDpUtility::AsfMimeTypeL" ) ); - + PRINT1( _L( "MM MTP => MmMtpDpUtility::AsfMimeTypeL, aFullPath = %S" ), &aFullPath ); + HBufC8* mimebuf = NULL; - + #ifdef __WINDOWS_MEDIA - TParsePtrC file( aFullPath ); - - if ( file.Ext().CompareF( KTxtExtensionASF ) == 0 ) + CHXMetaDataUtility *hxUtility = CHXMetaDataUtility::NewL(); + CleanupStack::PushL( hxUtility ); + + hxUtility->OpenFileL( aFullPath ); + PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL OpenFileL" ) ); + + HXMetaDataKeys::EHXMetaDataId id; + TUint count = 0; + TBool isAudio = EFalse; + hxUtility->GetMetaDataCount( count ); + for ( TUint i = 0; i < count; i++ ) { - CHXMetaDataUtility *hxUtility = CHXMetaDataUtility::NewL(); - CleanupStack::PushL( hxUtility ); - - hxUtility->OpenFileL( aFullPath ); - - HXMetaDataKeys::EHXMetaDataId id; - TUint count = 0; - TBool isAudio = EFalse; - hxUtility->GetMetaDataCount( count ); - for ( TUint i = 0; i < count; i++ ) - { - HBufC* buf = NULL; - hxUtility->GetMetaDataAt( i, id, buf ); + HBufC* buf = NULL; + hxUtility->GetMetaDataAt( i, id, buf ); - if ( id == HXMetaDataKeys::EHXMimeType ) + if ( id == HXMetaDataKeys::EHXMimeType ) + { + TPtr des = buf->Des(); + + if ( des.Find( KHxMimeTypeWma() ) != KErrNotFound ) { - TPtr des = buf->Des(); - - if ( des.Find( KHxMimeTypeWma() ) != KErrNotFound ) - { - isAudio = ETrue; - } - else if ( des.Find( KHxMimeTypeWmv() ) != KErrNotFound ) - { - PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, video" ) ); - mimebuf = KMimeTypeVideoWm().Alloc(); - break; - } + isAudio = ETrue; } - else if ( i == count - 1 ) + else if ( des.Find( KHxMimeTypeWmv() ) != KErrNotFound ) { - if ( isAudio ) - { - PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, audio" ) ); - mimebuf = KMimeTypeAudioWm().Alloc(); - } - else - { - User::Leave( KErrNotFound ); - } + PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, video" ) ); + mimebuf = KMimeTypeVideoWm().Alloc(); + break; } } - - hxUtility->ResetL(); - CleanupStack::PopAndDestroy( hxUtility ); - } - else - { - User::Leave( KErrNotSupported ); + else if ( i == count - 1 ) + { + if ( isAudio ) + { + PRINT( _L( "MM MTP <> MmMtpDpUtility::AsfMimeTypeL, audio" ) ); + mimebuf = KMimeTypeAudioWm().Alloc(); + } + else + { + User::Leave( KErrNotFound ); + } + } } + hxUtility->ResetL(); + CleanupStack::PopAndDestroy( hxUtility ); #else User::Leave( KErrNotSupported ); #endif - + PRINT( _L( "MM MTP <= MmMtpDpUtility::AsfMimeTypeL" ) ); return mimebuf; } @@ -715,11 +622,12 @@ // Get subformat code from mime string // ----------------------------------------------------------------------------- // -TInt MmMtpDpUtility::SubFormatCodeFromMime( const TDesC8& aMimeType, - TMmMtpSubFormatCode& aSubFormatCode ) +TMmMtpSubFormatCode MmMtpDpUtility::SubFormatCodeFromMime( const TDesC8& aMimeType ) { PRINT( _L( "MM MTP => MmMtpDpUtility::SubFormatCodeFromMime" ) ); + TMmMtpSubFormatCode subFormatCode = EMTPSubFormatCodeUnknown; + if ( aMimeType.CompareF( KMimeTypeVideoMp4 ) == 0 || aMimeType.CompareF( KMimeTypeVideo3gpp ) == 0 #ifdef __WINDOWS_MEDIA @@ -727,7 +635,7 @@ #endif ) { - aSubFormatCode = EMTPSubFormatCodeVideo; + subFormatCode = EMTPSubFormatCodeVideo; } else if ( aMimeType.CompareF( KMimeTypeAudioMp4 ) == 0 || aMimeType.CompareF( KMimeTypeAudio3gpp ) == 0 @@ -736,16 +644,17 @@ #endif ) { - aSubFormatCode = EMTPSubFormatCodeAudio; + subFormatCode = EMTPSubFormatCodeAudio; } else { PRINT( _L( "MM MTP <= MmMtpDpUtility::SubFormatCodeFromMime format not supported" ) ); - return KErrNotFound; + subFormatCode = EMTPSubFormatCodeUndefined; } - PRINT( _L( "MM MTP <= MmMtpDpUtility::SubFormatCodeFromMime" ) ); - return KErrNone; + PRINT1( _L( "MM MTP <= MmMtpDpUtility::SubFormatCodeFromMime SubFormatCode = %d" ), subFormatCode ); + + return subFormatCode; } // ----------------------------------------------------------------------------- @@ -791,8 +700,40 @@ } PRINT1( _L( "MM MTP <= MmMtpDpUtility::GetDrmStatus, drmStatus: %d" ), drmStatus ); - + return drmStatus; } -//end of file +EXPORT_C void MmMtpDpUtility::SetPSStatus( TMtpPSStatus aStatus ) + { + TBool changeScheduled = EFalse; + CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(); // cancel any outstanding delay status change + + if ( aStatus == EMtpPSStatusReadyToSync ) + { + TInt mtpStatus; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus ); + + if ( mtpStatus == EMtpPSStatusActive ) + { + CMmMtpDpAccessSingleton::ActiveToIdleStatusChange(); + changeScheduled = ETrue; + } + } + + if ( !changeScheduled ) + DoSetPSStatus( aStatus ); + } + +void MmMtpDpUtility::DoSetPSStatus( TMtpPSStatus aStatus ) + { + TInt mtpStatus; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus ); + + if ( mtpStatus != aStatus ) + { + TInt err = RProperty::Set( KMtpPSUid, KMtpPSStatus, aStatus ); + PRINT3( _L("MM MTP <> CRequestProcessor::DoSetPSStatus err = %d, previous = %d, current = %d" ), err , mtpStatus, aStatus); + } + } +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/playbackhelper/group/playbackhelper.mmp --- a/mmappcomponents/playbackhelper/group/playbackhelper.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/playbackhelper/group/playbackhelper.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -15,9 +15,7 @@ * */ -// Version : %version: 5 % - - +// Version : %version: 9 % #include @@ -47,16 +45,15 @@ LIBRARY apmime.lib LIBRARY charconv.lib LIBRARY mmfcontrollerframework.lib -LIBRARY flogger.lib -LIBRARY mmfdevsound.lib +LIBRARY mmfdevsound.lib #ifdef __WINDOWS_MEDIA LIBRARY asxparser.lib #endif #if defined(ARMCC) -deffile ../eabi/ +deffile ../eabi/ #elif defined(WINSCW) -deffile ../bwinscw/ +deffile ../bwinscw/ #endif diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/playbackhelper/inc/playbackhelper_log.h --- a/mmappcomponents/playbackhelper/inc/playbackhelper_log.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/playbackhelper/inc/playbackhelper_log.h Wed Jun 23 17:51:16 2010 +0100 @@ -15,9 +15,7 @@ * */ -// Version : %version: 4 % - - +// Version : %version: 7 % #ifndef PLAYBACKHELPER_LOG_H @@ -26,21 +24,6 @@ // INCLUDES #include #include -#include - - - -// #define _PLAYBACKHELPER_FILE_LOGGING_ - -#ifdef _DEBUG - #define PLAYBACKHELPER_DEBUG RDebug::Print -#else - #ifdef _PLAYBACKHELPER_FILE_LOGGING_ - #define PLAYBACKHELPER_DEBUG PlaybackHelperDebug::FileLog - #else - #define PLAYBACKHELPER_DEBUG RDebug::Print - #endif -#endif class PlaybackHelperDebug @@ -49,18 +32,15 @@ inline static void NullLog( TRefByValue /*aFmt*/, ... ) { } +}; - inline static void FileLog( TRefByValue aFmt, ... ) - { - VA_LIST list; - VA_START(list,aFmt); - RFileLogger::WriteFormat( _L("PlaybackHelper"), - _L("playbackhelper.log"), - EFileLoggingModeAppend, - aFmt, - list ); - } -}; + +#ifdef _DEBUG + #define PLAYBACKHELPER_DEBUG RDebug::Print +#else + #define PLAYBACKHELPER_DEBUG PlaybackHelperDebug::NullLog +#endif + #endif // PLAYBACKHELPER_LOG_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/playlistengine/group/bld.inf --- a/mmappcomponents/playlistengine/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/playlistengine/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -23,9 +23,12 @@ PRJ_EXPORTS ../rom/mpxplaylistengine.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mpxplaylistengine.iby) -../rom/mpxplaylistrecognizerplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mpxplaylistrecognizerplugin.iby) + +//MMMW has a generic recognizer that takes care of m3u files +//../rom/mpxplaylistrecognizerplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mpxplaylistrecognizerplugin.iby) PRJ_MMPFILES -mpxplaylistrecognizer.mmp +//MMMW has a generic recognizer that takes care of m3u files +//mpxplaylistrecognizer.mmp mpxplaylistengine.mmp diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/playlistengine/inc/mpxplaylistrecognizer.h --- a/mmappcomponents/playlistengine/inc/mpxplaylistrecognizer.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/playlistengine/inc/mpxplaylistrecognizer.h Wed Jun 23 17:51:16 2010 +0100 @@ -29,6 +29,8 @@ class CMPXPluginHandlerBase; /** +* Deprecated. replaced by playlist recognizer in mw/mmmw. +* * Concrete implementation of the recognizer API used to recognize playlist files. * * This is used by the application framework, as well as CMPXPlaylistEngine to diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/playlistengine/src/mpxplaylistengine.cpp --- a/mmappcomponents/playlistengine/src/mpxplaylistengine.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/playlistengine/src/mpxplaylistengine.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -59,7 +59,6 @@ #include "mpxplaylistenginedefs.hrh" #include "mpxplaylistplugin.h" #include "mpxplaylistengine.h" -#include "mpxplaylistrecognizer.h" // ============================ CONSTANTS ===================================== const TInt KMPXBufExpandSize = 0x40; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp --- a/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/videoplaylistutility/group/videoplaylistutility.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -15,9 +15,7 @@ * */ -// Version : %version: 3 % - - +// Version : %version: 6 % #include @@ -43,8 +41,7 @@ LIBRARY sysutil.lib LIBRARY apmime.lib LIBRARY charconv.lib -LIBRARY flogger.lib -LIBRARY playbackhelper.lib +LIBRARY playbackhelper.lib LIBRARY mpxcommon.lib LIBRARY estor.lib diff -r 5daa7cafd16d -r 8ef777f529f0 mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h --- a/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappcomponents/videoplaylistutility/inc/videoplaylistutility_log.h Wed Jun 23 17:51:16 2010 +0100 @@ -15,130 +15,106 @@ * */ -// Version : %version: 2 % - - +// Version : %version: 6 % #ifndef VIDEOPLAYLISTUTILITY_LOG_H #define VIDEOPLAYLISTUTILITY_LOG_H + // INCLUDES #include #include #include #include -#include #include - -// #define _VPU_FILE_LOGGING_ - +// +// MACROS +// #ifdef _DEBUG - #define VPU_DEBUG RDebug::Print + #define VIDEOPLAYLISTUTILITY_DEBUG TVideoPlaylistUtilityLog::VideoPlaylistUtilityLog + #define VIDEOPLAYLISTUTILITY_ENTER_EXIT TEnterExitLog _s #else - #ifdef _VPU_FILE_LOGGING_ - #define VPU_DEBUG VideoPlaylistUtilityDebug::FileLog - #else - #define VPU_DEBUG RDebug::Print - #endif -#endif + #define VIDEOPLAYLISTUTILITY_DEBUG TVideoPlaylistUtilityLog::NullLog + #define VIDEOPLAYLISTUTILITY_ENTER_EXIT TVideoPlaylistUtilityLog::NullLog +#endif -class VideoPlaylistUtilityDebug +class TVideoPlaylistUtilityLog : public TDes16Overflow { public: + inline static void NullLog( TRefByValue /*aFmt*/, ... ) { } - inline static void FileLog( TRefByValue aFmt, ... ) - { - VA_LIST list; - VA_START(list,aFmt); - RFileLogger::WriteFormat( _L("VideoPlaylistUtility"), - _L("videoplaylistutility.log"), - EFileLoggingModeAppend, - aFmt, - list ); - } -}; - - - -// MACROS -#define VIDEOPLAYLISTUTILITY_DEBUG TVideoPlaylistUtilityLog::VideoPlaylistUtilityLog -#define VIDEOPLAYLISTUTILITY_ENTER_EXIT TEnterExitLog _s - -class TVideoPlaylistUtilityLog : public TDes16Overflow -{ - public: - inline static void VideoPlaylistUtilityLog( TRefByValue aFmt, ... ) { TBuf< 512 > buffer; - + VA_LIST list; VA_START( list, aFmt ); buffer.AppendFormatList( aFmt, list ); VA_END(list); - - VPU_DEBUG(_L("#VideoPlaylistUtility# %S"), &buffer ); + + RDebug::Print(_L("#VideoPlaylistUtility# %S"), &buffer ); } }; class TEnterExitLog : public TDes16Overflow { public: - + void Overflow(TDes16& /*aDes*/) { - VPU_DEBUG(_L("%S Logging Overflow"), &iFunctionName); + RDebug::Print(_L("%S Logging Overflow"), &iFunctionName); } TEnterExitLog( TRefByValue aFunctionName, TRefByValue aFmt, ... ) { iFunctionName = HBufC::New( TDesC(aFunctionName).Length() ); - + if ( iFunctionName ) { iFunctionName->Des().Copy(aFunctionName); } - + TBuf< 512 > buffer; - + VA_LIST list; VA_START( list, aFmt ); buffer.AppendFormatList( aFmt, list, this ); VA_END(list); - - VPU_DEBUG(_L("#VideoPlaylistUtility# --> %S %S"), iFunctionName, &buffer ); + + RDebug::Print(_L("#VideoPlaylistUtility# --> %S %S"), iFunctionName, &buffer ); } - + TEnterExitLog( TRefByValue aFunctionName ) { iFunctionName = HBufC::New( TDesC(aFunctionName).Length() ); - + if ( iFunctionName ) { iFunctionName->Des().Copy(aFunctionName); } - - VPU_DEBUG(_L("#VideoPlaylistUtility# --> %S"), iFunctionName ); + + RDebug::Print(_L("#VideoPlaylistUtility# --> %S"), iFunctionName ); } - + ~TEnterExitLog() { - VPU_DEBUG(_L("#VideoPlaylistUtility# <-- %S"), iFunctionName ); + RDebug::Print(_L("#VideoPlaylistUtility# <-- %S"), iFunctionName ); delete iFunctionName; } - + private: HBufC* iFunctionName; }; + _LIT(_KVPUErrorInfo, "#VideoPlaylistUtility# Error : error %d file %s line %d"); #define VIDEOPLAYLISTUTILITY_S(a) _S(a) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/inc/CollectionHelperTestClass.h --- a/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/inc/CollectionHelperTestClass.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/inc/CollectionHelperTestClass.h Wed Jun 23 17:51:16 2010 +0100 @@ -73,6 +73,28 @@ _LIT( KRenameOldUri, "c:\\Blackbird.aac"); _LIT( KRenameNewUri, "c:\\data\\Blackbird.aac"); +_LIT( KFileWmaSong, "f:\\1.wma"); + +_LIT( KFile1, "e:\\data\\sounds\\digital\\1.mp3"); //ok +_LIT( KOldAbstractAlbumName, "1.wma"); //ok +_LIT( KNewAbstractAlbumName, "The 99 Most Essential Beethoven MasterpiecesVarious Artists"); //ok +_LIT( KFile3, "e:\\data\\sounds\\digital\\(01) Amber - Yes.mp3"); //ok +_LIT( KFilet, "e:\\data\\sounds\\digital\\02 What A Wonderful World.mp3"); //ok + + +_LIT( KTestFile3, "e:\\data\\sounds\\digital\\Atomic Kitten - It's Ok.mp3"); //ok +_LIT( KSongtest, "e:\\data\\sounds\\digital\\02 What A Wonderful World.mp3"); //ok + +_LIT( KAbstractalbum1, "f:\\1.alb"); +_LIT( KAbstractalbum2, "f:\\2.alb"); +_LIT( KAbstractalbum3, "f:\\3.alb"); +_LIT( KStoreRoot, "f:\\"); + +_LIT( KAbstractAlbumName, "The 99 Most Essential Beethoven MasterpiecesVarious Artists"); + +_LIT( KAlbumArtistShort, "testAlbumArtist"); + + // FORWARD DECLARATIONS class CCollectionHelperTestClass; @@ -300,7 +322,6 @@ TInt SetAllowedPanic( CStifItemParser& aItem ); void CreateTestMediaL( CMPXMedia*& aNewProperty ); - /** * Connect to the default client to the server * @since S60 3.2 @@ -316,8 +337,21 @@ virtual TInt CloseUiHelperL(CStifItemParser& aItem); virtual TInt CloseHelperL(CStifItemParser& aItem); virtual TInt CloseCachedHelperL(CStifItemParser& aItem); - + virtual TInt AddSongL(CStifItemParser& aItem); + TInt FindMediaL(const TDesC& aPath, TMPXGeneralCategory aCategory); + virtual TInt RemoveSongL(CStifItemParser& aItem ); + virtual TInt AddAbstractAlbumL(CStifItemParser& aItem); + virtual TInt RemoveAbstractAlbumL(CStifItemParser& aItem); + virtual TInt SetAbstractAlbumL(CStifItemParser& aItem); + virtual TInt SetSongAlbumArtistL(CStifItemParser& aItem); + virtual TInt GetSongAlbumArtistL(CStifItemParser& aItem); + virtual TInt SetAbstractAlbumArtistL(CStifItemParser& aItem); + virtual TInt GetAbstractAlbumArtistL(CStifItemParser& aItem); + virtual TInt UpdateAbstractAlbumNameL(CStifItemParser& aItem); + virtual TInt GetAbstractAlbumAndSongsL(CStifItemParser& aItem); + virtual TInt RenameAbstractAlbumL(CStifItemParser& aItem); + void AttachSongsL(CMPXMediaArray* aAbstractalbumArray, const TDesC& aPath); /** * From MMPXCollectionRemoveObserver * Handles removing a collection path @@ -339,7 +373,8 @@ * @param aError error code */ void HandleFindAllL(const CMPXMedia& aResults, TBool aComplete,TInt aError); - + + public: // Data protected: // Data diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/src/CollectionHelperTestClassBlocks.cpp --- a/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/src/CollectionHelperTestClassBlocks.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/collection_helper_api/tsrc/CollectionHelperTestClass/src/CollectionHelperTestClassBlocks.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -30,6 +30,7 @@ #include #include #include "debug.h" +#include // EXTERNAL DATA STRUCTURES //extern ?external_data; @@ -134,6 +135,18 @@ ENTRY( "NewUiHelper", CCollectionHelperTestClass::NewUiHelperL ), ENTRY( "NewHelper", CCollectionHelperTestClass::NewHelperL ), ENTRY( "NewCachedHelper", CCollectionHelperTestClass::NewCachedHelperL ), + ENTRY( "AddSong", CCollectionHelperTestClass::AddSongL ), + ENTRY( "RemoveSong", CCollectionHelperTestClass::RemoveSongL ), + ENTRY( "AddAbstractAlbum", CCollectionHelperTestClass::AddAbstractAlbumL ), + ENTRY( "RemoveAbstractAlbum", CCollectionHelperTestClass::RemoveAbstractAlbumL ), + ENTRY( "SetAbstractAlbum", CCollectionHelperTestClass::SetAbstractAlbumL ), + ENTRY( "SetSongAlbumArtist", CCollectionHelperTestClass::SetSongAlbumArtistL ), + ENTRY( "GetSongAlbumArtist", CCollectionHelperTestClass::GetSongAlbumArtistL ), + ENTRY( "SetAbstractAlbumArtist", CCollectionHelperTestClass::SetAbstractAlbumArtistL ), + ENTRY( "GetAbstractAlbumArtist", CCollectionHelperTestClass::GetAbstractAlbumArtistL ), + ENTRY( "UpdateAbstractAlbumName", CCollectionHelperTestClass::UpdateAbstractAlbumNameL ), + ENTRY("GetAbstractAlbumAndSongs",CCollectionHelperTestClass::GetAbstractAlbumAndSongsL), + ENTRY( "RenameAbstractAlbum", CCollectionHelperTestClass::RenameAbstractAlbumL ), ENTRY( "CloseUiHelper", CCollectionHelperTestClass::CloseUiHelperL ), ENTRY( "CloseHelper", CCollectionHelperTestClass::CloseHelperL ), ENTRY( "CloseCachedHelper", CCollectionHelperTestClass::CloseCachedHelperL ), @@ -511,6 +524,640 @@ return result; } + + +//Removing song from collection +//By calling CMPXCollectionCachedHelper API RemoveL +TInt CCollectionHelperTestClass::RemoveSongL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::RemoveSongL"))); + TRAPD(result, iCachedHelper->RemoveL(KFileWmaSong, EMPXSong)); + iLog->Log(_L("CCollectionHelperTestClass::RemoveSong done with result=[%d]"), result); + return result; + } + +//Removing AbstractAlbum from collection +//By calling CMPXCollectionCachedHelper API RemoveL +//precondition: e:\\data\\sounds\\digital\\1.alb on test HW +//output: 1.alb is delete from MPX DB +TInt CCollectionHelperTestClass::RemoveAbstractAlbumL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::RemoveAbstractAlbumL"))); + TRAPD(result, iCachedHelper->RemoveL(KAbstractalbum1, EMPXAbstractAlbum)); + iLog->Log(_L("CCollectionHelperTestClass::RemoveAbstractAlbumL done with result=[%d]"), result); + return result; + } +//Adds song to the database +//WMP to MTP step1 +//By calling CMPXCollectionCachedHelper API AddL +//precondition: c:\\data\\sounds\\digital\\1.wma on test emulator +//precondition: e:\\data\\sounds\\digital\\1.wma on test HW +//output: 1.wma is added into MPX DB +TInt CCollectionHelperTestClass::AddSongL(CStifItemParser& /*aItem*/ ) + { + FTRACE(FPrint(_L("CCollectionHelperTest::AddSongL"))); + //Does a record already exist for this abstractalbum? + //this is the part to check if the song already exist in db? + TInt result; + TPtrC name(KFileWmaSong); + TInt mediafound = FindMediaL(name, EMPXSong); + + //media already in collection DB, no need to add + if (mediafound == 1) + { + return 0; + } + + else if (mediafound == 0) //media not in collection DB, continue to add*/ + { + // Create media properties for the song will added + iLog->Log(_L("Create media properties")); + RArray contentIDs; + contentIDs.AppendL(KMPXMediaIdGeneral); + contentIDs.AppendL(KMPXMediaIdAudio); + contentIDs.AppendL(KMPXMediaIdMusic); + contentIDs.AppendL(KMPXMediaIdMTP); + + CMPXMedia* media = CMPXMedia::NewL(contentIDs.Array()); + CleanupStack::PushL(media); + contentIDs.Close(); + + // MPXMedia default types + media->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); + media->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXSong); + + // File Path + TParsePtrC parse(name); + + media->SetTextValueL(KMPXMediaGeneralUri, name); + media->SetTextValueL(KMPXMediaGeneralDrive, parse.Drive()); + + // Title + media->SetTextValueL(KMPXMediaGeneralTitle, parse.NameAndExt()); + // Comment + media->SetTextValueL(KMPXMediaGeneralComment, KNullDesC); + // Artist + media->SetTextValueL(KMPXMediaMusicArtist, KNullDesC); + // Album + media->SetTextValueL(KMPXMediaMusicAlbum, KNullDesC); + //AlbumArtist + media->SetTextValueL(KMPXMediaMusicAlbumArtist, KAlbumArtistShort); + // Track + media->SetTextValueL(KMPXMediaMusicAlbumTrack, KNullDesC); + // Genre + media->SetTextValueL(KMPXMediaMusicGenre, KNullDesC); + // Composer + media->SetTextValueL(KMPXMediaMusicComposer, KNullDesC); + // URL + media->SetTextValueL(KMPXMediaMusicURL, KNullDesC); + iLog->Log(_L("Default values set to Media")); + + // Update MPX WMP Roundtrip Metadata of the media object + media->SetTObjectValueL(KMPXMediaGeneralDeleted, EFalse); + media->SetTObjectValueL(KMPXMediaGeneralModified, EFalse); + media->SetTObjectValueL(KMPXMediaGeneralSynchronized, ETrue); + + media->SetTObjectValueL(KMPXMediaGeneralFlags, KMPXMediaGeneralFlagsIsInvalid|KMPXMediaGeneralFlagsIsCorrupted); + + // Add new media to collection + TRAP(result, iCachedHelper->AddL(media)); + FTRACE(FPrint(_L("CCollectionHelperTestClass::AddSongL, Media added into collection"))); + + CleanupStack::PopAndDestroy(media); + } + iLog->Log(_L("CCollectionHelperTestClass::AddSongL done with result=[%d]"), result); + + return result; + } + +//Adds abstractalbum to the database, *.alb file +//WMP to MTP step2 +//By calling CMPXCollectionCachedHelper API AddL +//precondition: c:\\data\\sounds\\digital\\1.alb on test emulator +//precondition: e:\\data\\sounds\\digital\\1.alb on test HW +//output: 1.alb is added into MPX DB +TInt CCollectionHelperTestClass::AddAbstractAlbumL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTestClass::AddAbstractAlbumL"))); + TInt result; + TPtrC name(KAbstractalbum1); + TInt mediafound = FindMediaL(name, EMPXAbstractAlbum); + + //media already in collection DB, no need to add + if (mediafound == 1) + { + return 0; + } + + else if(mediafound == 0) // media not in collection DB, continue to add*/ + { + RArray contentIDs; + contentIDs.AppendL(KMPXMediaIdGeneral); + + CMPXMediaArray* abstractalbumArray = CMPXMediaArray::NewL(); + CleanupStack::PushL(abstractalbumArray); + + CMPXMedia* media = CMPXMedia::NewL(contentIDs.Array()); + CleanupStack::PushL(media); + contentIDs.Close(); + + // MPXMedia default types + media->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); + //EMPXAbstractAlbum is the new category added for non-embedded art + media->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXAbstractAlbum); + + // File Path + media->SetTextValueL(KMPXMediaGeneralUri, name); + TParsePtrC parse(name); + media->SetTextValueL(KMPXMediaGeneralDrive, parse.Drive()); + media->SetTextValueL(KMPXMediaGeneralTitle, parse.Name()); + + //AlbumArtist + media->SetTextValueL(KMPXMediaMusicAlbumArtist, KAlbumArtistShort); + media->SetTObjectValueL(KMPXMediaGeneralSynchronized, ETrue); + media->SetTObjectValueL( KMPXMediaMTPSampleDataFlag, EFalse ); + media->SetCObjectValueL(KMPXMediaArrayContents, abstractalbumArray); + media->SetTObjectValueL(KMPXMediaArrayCount, abstractalbumArray->Count()); + + // Add new media to collection + TRAP( result, iCachedHelper->AddL(media)); + CleanupStack::PopAndDestroy(media); + + // Clear the array + CleanupStack::PopAndDestroy(abstractalbumArray); + } + iLog->Log(_L("CCollectionHelperTestClass::AddAbstractAlbumL done with result=[%d]"), result); + return result; + } + +//Associate abstractalbum with songs +//WMP to MTP step3 +//By calling CMPXCollectionCachedHelper API SetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.wma +// c:\\data\\sounds\\digital\\1.alb +//precondition on HW : f:\\1.wma +// f:\\1.alb +//output: 1.wma and 1.alb is associated +TInt CCollectionHelperTestClass::SetAbstractAlbumL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::SetAbstractAlbumL"))); + + CMPXMediaArray* mediaArray = CMPXMediaArray::NewL(); + CleanupStack::PushL(mediaArray); + //add songs to media array + AttachSongsL(mediaArray, KFileWmaSong()); + iLog->Log(_L("song added to abstractalbumArray, mediaArray->Count()=%d"), mediaArray->Count() ); + RArray contentIDs; + contentIDs.AppendL(KMPXMediaIdGeneral); + + CMPXMedia* abstractalbumMedia = CMPXMedia::NewL(contentIDs.Array()); + CleanupStack::PushL(abstractalbumMedia); + contentIDs.Close(); + + abstractalbumMedia->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); + abstractalbumMedia->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXAbstractAlbum); + + abstractalbumMedia->SetTextValueL(KMPXMediaGeneralUri, KAbstractalbum1()); + + TParsePtrC parse(KAbstractalbum1()); + abstractalbumMedia->SetTextValueL(KMPXMediaGeneralDrive, parse.Drive()); + abstractalbumMedia->SetTObjectValueL(KMPXMediaGeneralSynchronized, ETrue); + + abstractalbumMedia->SetCObjectValueL(KMPXMediaArrayContents, mediaArray); + abstractalbumMedia->SetTObjectValueL(KMPXMediaArrayCount, mediaArray->Count()); + + TRAPD( result, iCachedHelper->SetL(abstractalbumMedia)); + CleanupStack::PopAndDestroy(abstractalbumMedia); + + // Clear the array + CleanupStack::PopAndDestroy(mediaArray); + iLog->Log(_L("CCollectionHelperTestClass::SetAbstractAlbumL done with result=[%d]"), result); + + return result; +} + +//Update AlbumArtist field in Music table +//By calling CMPXCollectionCachedHelper API SetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.wma +//precondition on HW: f:\\1.wma +//output: MUSIC.AlbumArtist field of song 1.wma is changed +TInt CCollectionHelperTestClass::SetSongAlbumArtistL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::SetSongAlbumArtistL"))); + + CMPXMedia* media = NULL; + + // Creat media properties for the song + RArray contentIDs; + contentIDs.AppendL( KMPXMediaIdGeneral ); + contentIDs.AppendL( KMPXMediaIdAudio ); + contentIDs.AppendL( KMPXMediaIdMusic ); + contentIDs.AppendL( KMPXMediaIdMTP ); + + media = CMPXMedia::NewL( contentIDs.Array() ); + CleanupStack::PushL( media ); // + media + contentIDs.Close(); + + media->SetTObjectValueL( + KMPXMediaGeneralCategory, + EMPXSong ); + + // MPXMedia default types + media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + + // Get file path + media->SetTextValueL( KMPXMediaGeneralUri, KFileWmaSong() ); //wma test file + + media->SetTextValueL( KMPXMediaGeneralDrive, KStoreRoot() ); + media->SetTextValueL( KMPXMediaMusicAlbumArtist, KAlbumArtistShort()); + + TRAPD( result, iCachedHelper->SetL(media)); + + CleanupStack::PopAndDestroy( media ); // - media + iLog->Log(_L("CCollectionHelperTestClass::SetSongAlbumArtistL done with result=[%d]"), result); + + return result; +} +//Retrive MUSIC.AlbumArtist field +//By calling CMPXCollectionCachedHelper GetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.wma +//precondition on HW: f:\\1.wma +//output: song 1.wma is returned and MUSIC.AlbumArtist field of song 1.wma is retrived. +TInt CCollectionHelperTestClass::GetSongAlbumArtistL(CStifItemParser& /*aItem*/) +{ + FTRACE(FPrint(_L("CCollectionHelperTest::GetSongAlbumArtistL"))); + TMPXGeneralCategory category = EMPXSong; + // CMPXMedia* foundMedia= NULL; + + const CMPXMedia& foundMedia = iCachedHelper->GetL( KFileWmaSong(), category ); + + if (foundMedia.IsSupported(KMPXMediaMusicAlbumArtist)) + { + const TDesC& albumartist = foundMedia.ValueText( KMPXMediaMusicAlbumArtist ); + } + iLog->Log(_L("CCollectionHelperTestClass::GetSongAlbumArtistL done ")); + + return 1; +} + + + +//Update ABSTRACTALBUM.AlbumArtist +//Update AlbumArtist field in Abstractalbum table +//By calling CMPXCollectionCachedHelper API SetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.alb +//precondition on HW: f:\\1.alb +//output: ABSTRACTALBUM.AlbumArtist field of abstractalbum 1.alb is changed +TInt CCollectionHelperTestClass::SetAbstractAlbumArtistL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::SetAbstractAlbumArtistL"))); + + CMPXMedia* media = NULL; + + RArray contentIDs; + contentIDs.AppendL( KMPXMediaIdGeneral ); + + media = CMPXMedia::NewL( contentIDs.Array() ); + CleanupStack::PushL( media ); // + media + contentIDs.Close(); + media->SetTObjectValueL( KMPXMediaGeneralCategory, + EMPXAbstractAlbum ); + media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + + media->SetTextValueL( KMPXMediaGeneralUri, KAbstractalbum1() ); + media->SetTextValueL( KMPXMediaGeneralDrive, KStoreRoot() ); + + media->SetTextValueL( KMPXMediaMusicAlbumArtist, KAlbumArtistShort() ); + + TRAPD( result, iCachedHelper->SetL(media)); + + CleanupStack::PopAndDestroy(media); + iLog->Log(_L("CCollectionHelperTestClass::SetAbstractAlbumArtistL done with result=[%d]"), result); + + + return result; +} + +//Retrieve ABSTRACTALBUM.AlbumArtist +//By calling CMPXCollectionCachedHelper API GetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.alb +//precondition on HW: f:\\1.alb +//output: abstractalbum 1.alb is returned and ABSTRACTALBUM.AlbumArtist field of 1.alb is retrived. +TInt CCollectionHelperTestClass::GetAbstractAlbumArtistL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::GetAbstractAlbumArtistL"))); + TMPXGeneralCategory category = EMPXAbstractAlbum; + const CMPXMedia& foundMedia = iCachedHelper->GetL( KAbstractalbum1(), category ); //wma test file + + + //print out foundMedia attributes + if (foundMedia.IsSupported(KMPXMediaMusicAlbumArtist)) + { + iLog->Log(_L("CCollectionHelperTestClass::GetAbstractAlbumArtistL, ABSTRACTALBUM.AlbumArtist retrived")); + + + + + const TDesC& albumartist = foundMedia.ValueText( KMPXMediaMusicAlbumArtist ); + + } + + if (foundMedia.IsSupported(KMPXMediaGeneralTitle)) + { + + + // HBufC* albumartist; + // albumartist = foundMedia.ValueText( KMPXMediaMusicAlbumArtist ).AllocLC(); // + data + const TDesC& name = foundMedia.ValueText( KMPXMediaGeneralTitle ); + iLog->Log(_L("CCollectionHelperTestClass::GetAbstractAlbumArtistL, ABSTRACTALBUM.name retrived")); + + + + } + if (foundMedia.IsSupported(KMPXMediaGeneralUri)) + { + + + // HBufC* albumartist; + // albumartist = foundMedia.ValueText( KMPXMediaMusicAlbumArtist ).AllocLC(); // + data + const TDesC& uri = foundMedia.ValueText( KMPXMediaGeneralUri ); + iLog->Log(_L("CCollectionHelperTestClass::GetAbstractAlbumArtistL, ABSTRACTALBUM.uri retrived")); + + } + iLog->Log(_L("CCollectionHelperTestClass::GetAbstractAlbumArtistL done")); + return 1; + } + + +//Update ABSTRACTALBUM.Name +//Update Name field in Abstractalbum table +//By calling CMPXCollectionCachedHelper API SetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.alb +//precondition on HW: f:\\1.alb +//output: ABSTRACTALBUM.name field of 1.alb is changed. +TInt CCollectionHelperTestClass::UpdateAbstractAlbumNameL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::UpdateAbstractAlbumNameL"))); + CMPXMedia* media = NULL; + + // Creat media properties for the song + RArray contentIDs; + contentIDs.AppendL( KMPXMediaIdGeneral ); + + media = CMPXMedia::NewL( contentIDs.Array() ); + + CleanupStack::PushL( media ); // + media + contentIDs.Close(); //- contentIDs + + media->SetTObjectValueL( + KMPXMediaGeneralCategory, + EMPXAbstractAlbum ); + + media->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + + media->SetTextValueL( KMPXMediaGeneralUri, KAbstractalbum1() ); + media->SetTextValueL( KMPXMediaGeneralDrive, KStoreRoot() ); + + //media->SetTextValueL( KMPXMediaMusicAlbumArtist, KAbstractAlbumName() ); + media->SetTextValueL( KMPXMediaGeneralTitle, KAbstractAlbumName() ); + // media->SetTextValueL( KMPXMediaMusicAlbumArtFileName, KNewAbstractAlbumName() ); + + TRAPD( result, iCachedHelper->SetL(media)); + CleanupStack::PopAndDestroy(media); // - media + + iLog->Log(_L("CCollectionHelperTestClass::UpdateAbstractAlbumNameL, done with result[%d]"), result); + return result; +} + + +//Find all abstractalbums on KStoreRoot +//Find all songs associated with the found Abstractalbums +//By calling CMPXCollectionCachedHelper API GetL +//precondition on emulator: c:\\data\\sounds\\digital\\1.wma +// c:\\data\\sounds\\digital\\1.alb +//1.wma and 1.alb are associated +//precondition on HW : f:\\1.wma +// f:\\1.alb +//1.wma and 1.alb are associated +//all AbstractAlbum on drive c: (e:) is returned, all songs associated with the returned AbstractAlbum are returned. +TInt CCollectionHelperTestClass::GetAbstractAlbumAndSongsL(CStifItemParser& /*aItem*/) + { + FTRACE(FPrint(_L("CCollectionHelperTest::GetAlbumAndSongsL"))); + TUint32 abstractalbumId(0); + RArray contentIDs; + contentIDs.AppendL(KMPXMediaIdGeneral); + + CMPXMedia* searchMedia = CMPXMedia::NewL(contentIDs.Array()); + CleanupStack::PushL(searchMedia); + contentIDs.Close(); + + searchMedia->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); + searchMedia->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXAbstractAlbum); + searchMedia->SetTextValueL(KMPXMediaGeneralDrive, KStoreRoot()); + + RArray abstractalbumAttributes; + CleanupClosePushL(abstractalbumAttributes); + abstractalbumAttributes.AppendL(KMPXMediaGeneralId); + abstractalbumAttributes.AppendL(KMPXMediaGeneralTitle); + abstractalbumAttributes.AppendL(KMPXMediaGeneralUri); + + //foundMedia will hold all .alb on KStoreRoot() + CMPXMedia* foundMedia = NULL; + TRAPD( err, foundMedia = iCachedHelper->FindAllL( + *searchMedia, abstractalbumAttributes.Array())); + + iLog->Log(_L("CCollectionHelperTestClass::GetAlbumAndSongsL, foundMedia assigned from FindAllL")); + + CleanupStack::PopAndDestroy(&abstractalbumAttributes); + CleanupStack::PopAndDestroy(searchMedia); + CleanupStack::PushL(foundMedia); //+ foundMedia + + if ( err != KErrNone ) + { + iLog->Log(_L("CCollectionHelperTestClass::GetAlbumAndSongsL, err = [%d]"), err ); + iCachedHelper->Close(); + iCachedHelper = NULL; + User::Leave( KErrGeneral ); + } + + if (!foundMedia->IsSupported(KMPXMediaArrayCount)) + { + User::Leave(KErrNotSupported); + } + + TInt foundItemCount = *foundMedia->Value(KMPXMediaArrayCount); + iLog->Log(_L("CCollectionHelperTestClass::GetAlbumAndSongsL, foundItemCount=%d"), foundItemCount ); + + CMPXMediaArray* foundArray = + foundMedia->Value(KMPXMediaArrayContents); + CleanupStack::PopAndDestroy(foundMedia); + + for (TInt j = 0; j < foundItemCount; ++j) + { + CMPXMedia* abstractalbumMedia = CMPXMedia::NewL(*(*foundArray)[j]); + CleanupStack::PushL(abstractalbumMedia); + + //to print out founded media attributes + if (abstractalbumMedia->IsSupported(KMPXMediaGeneralTitle)) + { + const TDesC& name = abstractalbumMedia->ValueText( KMPXMediaGeneralTitle ); + iLog->Log(_L("CCollectionHelperTestClass::GetAlbumAndSongsL, found abstractalbumName = [%s]"), name ); + } + + if (abstractalbumMedia->IsSupported(KMPXMediaGeneralId)) + { + abstractalbumId = abstractalbumMedia->ValueTObjectL(KMPXMediaGeneralId); + abstractalbumMedia->ValueTObjectL(KMPXMediaGeneralId); + } + + // find the media object that contains a list of songs in the abstractalbum + RArray contentIDs; + contentIDs.AppendL(KMPXMediaIdGeneral); + + CMPXMedia* searchMediaSong = CMPXMedia::NewL(contentIDs.Array()); + CleanupStack::PushL(searchMediaSong); + contentIDs.Close(); + + searchMediaSong->SetTObjectValueL(KMPXMediaGeneralType, EMPXGroup); + + searchMediaSong->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXSong); + searchMediaSong->SetTObjectValueL(KMPXMediaGeneralId, abstractalbumId); + + RArray songAttributes; + CleanupClosePushL(songAttributes); + songAttributes.AppendL(KMPXMediaGeneralId); + songAttributes.AppendL(KMPXMediaGeneralUri); + + //search from MPX collection to get all songs associated with .alb + CMPXMedia* foundSongs = NULL; + TRAPD( err, foundSongs = iCachedHelper->FindAllL( + *searchMediaSong, songAttributes.Array())); + + CleanupStack::PopAndDestroy(&songAttributes); + CleanupStack::PopAndDestroy(searchMediaSong); + CleanupStack::PopAndDestroy(abstractalbumMedia); + + CleanupStack::PushL( foundSongs ); // + foundSongs + if ( err != KErrNone ) + { + iLog->Log(_L("CCollectionHelperTestClass::GetAlbumAndSongsL, err = [%d]"), err ); + iCachedHelper->Close(); + iCachedHelper = NULL; + User::Leave( KErrGeneral ); + } + + if (!foundSongs->IsSupported(KMPXMediaArrayCount)) + { + User::Leave(KErrNotSupported); + } + + // Number of references + TInt numOfSongsRefs = *foundSongs->Value(KMPXMediaArrayCount); + iLog->Log(_L("CCollectionHelperTestClass::GetAlbumAndSongsL, numOfSongsRefs=%d"), numOfSongsRefs ); + CleanupStack::PopAndDestroy( foundSongs ); // - foundSong + } + return 1; + } + + +//By calling CMPXCollectionCachedHelper API RenameL +//precondition on emulator: c:\\data\\sounds\\digital\\1.wma +// c:\\data\\sounds\\digital\\1.alb +//1.wma and 1.alb are associated +//precondition on HW : f:\\1.wma +// f:\\1.alb +//output: 1.alb is renamed to 2.alb and all songs associated with 1.alb are updated in MUSIC table +TInt CCollectionHelperTestClass::RenameAbstractAlbumL(CStifItemParser& /*aItem*/) + { + TRAPD( result, iCachedHelper->RenameL( KAbstractalbum1, KAbstractalbum2, EMPXAbstractAlbum ) ); + iLog->Log(_L("CCollectionHelperTestClass::RenameAbstractAlbumL, done with result=[%d]")); + + return result; + } + +//Helper function for Finding in the MPX DB +//By calling CMPXCollectionCachedHelper API FindAllL +//output: all media with filename: aPath and aCategory is returned +TInt CCollectionHelperTestClass::FindMediaL(const TDesC& aPath, TMPXGeneralCategory aCategory) +{ + FTRACE(FPrint(_L("CCollectionHelperTestClass::FindL"))); + // Check does a record already exist for this aPath(URI)? + RArray contentIDs; + contentIDs.AppendL( KMPXMediaIdGeneral ); + + CMPXMedia* searchMedia = CMPXMedia::NewL( contentIDs.Array() ); + CleanupStack::PushL( searchMedia ); // + searchMedia + contentIDs.Close(); + searchMedia->SetTObjectValueL( KMPXMediaGeneralType, EMPXItem ); + searchMedia->SetTObjectValueL( KMPXMediaGeneralCategory, aCategory ); + searchMedia->SetTextValueL( KMPXMediaGeneralUri, aPath ); + +//note: some of the attributes are not needed + RArray mediaAttributes; + CleanupClosePushL( mediaAttributes ); // + mediaAttributes + mediaAttributes.AppendL( KMPXMediaGeneralId ); + mediaAttributes.AppendL( KMPXMediaGeneralTitle ); + mediaAttributes.AppendL( KMPXMediaGeneralUri ); + + CMPXMedia* foundMedia = iCachedHelper->FindAllL( *searchMedia, + mediaAttributes.Array() ); + + CleanupStack::PopAndDestroy( &mediaAttributes ); // - mediaAttributes + CleanupStack::PopAndDestroy( searchMedia ); // - searchMedia + CleanupStack::PushL( foundMedia ); // + foundMedia + + if ( !foundMedia->IsSupported( KMPXMediaArrayCount ) ) + { + CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia + return KErrNotSupported; + } + TInt foundItemCount = *foundMedia->Value( KMPXMediaArrayCount ); + CleanupStack::PopAndDestroy( foundMedia ); // - foundMedia + + iLog->Log(_L("CCollectionHelperTestClass::FindMediaL, foundItemCount=[%d]"), foundItemCount); + if ( foundItemCount >1) //more than 1 same item in collection + { + iLog->Log(_L("CCollectionHelperTestClass::FindMediaL, error, find more than 1 same media in collection")); + return KErrGeneral; + } + + else if ( foundItemCount ==0 || foundItemCount ==1 ) //no such item in collection + { + iLog->Log(_L("CCollectionHelperTestClass::FindMediaL, error, no this item in collection")); + return foundItemCount; + } + + return KErrNone; + } + + + +//Helper function for appending songs for SetAbstractAlbumL() +void CCollectionHelperTestClass::AttachSongsL(CMPXMediaArray* aAbstractAlbumArray, const TDesC& aPath) +{ + FTRACE(FPrint(_L("CCollectionHelperTestClass::AttachSongsL"))); + RArray contentIDs; + contentIDs.AppendL(KMPXMediaIdGeneral); + contentIDs.AppendL(KMPXMediaIdAudio); + contentIDs.AppendL(KMPXMediaIdMusic); + contentIDs.AppendL(KMPXMediaIdMTP); + CMPXMedia* media = CMPXMedia::NewL(contentIDs.Array()); + CleanupStack::PushL(media); + contentIDs.Close(); + + // MPXMedia default types + media->SetTObjectValueL(KMPXMediaGeneralType, EMPXItem); + media->SetTObjectValueL(KMPXMediaGeneralCategory, EMPXSong); + // File Path + TParsePtrC parse(aPath); + media->SetTextValueL(KMPXMediaGeneralUri, aPath); + media->SetTextValueL(KMPXMediaGeneralDrive, parse.Drive()); + + // Add media into array contents + aAbstractAlbumArray->AppendL(media); + CleanupStack::Pop(media); +} + // ----------------------------------------------------------------------------- // CCollectionHelperTestClass::CloseUiHelperL() // Returns: Symbian OS errors. diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/collection_helper_api/tsrc/conf/CollectionHelperTestClass.cfg --- a/mmappfw_plat/collection_helper_api/tsrc/conf/CollectionHelperTestClass.cfg Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/collection_helper_api/tsrc/conf/CollectionHelperTestClass.cfg Wed Jun 23 17:51:16 2010 +0100 @@ -66,4 +66,165 @@ [Endtest] +[Test] +title 4. Add Song +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test AddSong +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] +title 5. Remove Song +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test RemoveSong +test CloseCachedHelper +delete test +pause 1000 +[Endtest] + +[Test] +title 6. AddAbstractAlbum +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test AddAbstractAlbum +test CloseCachedHelper +delete test +pause 1000 +[Endtest] + +[Test] +title 7. Remove AbstractAlbum +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test RemoveAbstractAlbum +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +RemoveAbstractAlbumL + + +[Test] +title 8. Associate Song with AbstractAlbum +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test SetAbstractAlbum +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] + + +[Test] +title 9. Set SongAlbumArtist +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test SetSongAlbumArtist +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] + + +[Test] +title 10. Get SongAlbumArtist +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test GetSongAlbumArtist +test CloseCachedHelper +delete test +pause 1000 +[Endtest] + +[Test] +title 11. set AbstractAlbumArtist +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test SetAbstractAlbumArtist +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] + +[Test] +title 12. Get AbstractAlbumArtist +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test GetAbstractAlbumArtist +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] + + +[Test] +title 13. Update AbstractAlbumName +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test UpdateAbstractAlbumName +test CloseCachedHelper +delete test +pause 1000 +[Endtest] + + +title 14. Get AbstractAlbum and Songs +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test GetAbstractAlbumAndSongs +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] + +title 15. Rename AbstractAlbum +create CollectionHelperTestClass test +test OpenCollectionUtility +waittestclass test +test NewCachedHelper +test RenameAbstractAlbum +test CloseCachedHelper +delete test +pause 1000 +[Endtest] +[Test] + + + + + + + + + \ No newline at end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/collection_helper_api/tsrc/group/bld.inf --- a/mmappfw_plat/collection_helper_api/tsrc/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/collection_helper_api/tsrc/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -28,5 +28,3 @@ PRJ_TESTMMPFILES #include "../CollectionHelperTestClass/group/bld.inf" - -PRJ_TESTMMPFILES diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/collection_helper_api/tsrc/init/TestFramework.ini --- a/mmappfw_plat/collection_helper_api/tsrc/init/TestFramework.ini Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/collection_helper_api/tsrc/init/TestFramework.ini Wed Jun 23 17:51:16 2010 +0100 @@ -1,5 +1,5 @@ # -# This is STIF initialization file +# This is STIFTestFramework initialization file # Comment lines start with '#'-character. # See STIF TestFramework users guide.doc for instructions @@ -29,15 +29,12 @@ # # - 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 +# + 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 -# +# module. [Engine_Defaults] @@ -46,8 +43,9 @@ CreateTestReport= YES # Possible values: YES or NO -TestReportFilePath= C:\LOGS\TestFramework\ -TestReportFileName= TestReport_CollectionHelperTestClass +#TestReportFilePath= C:\LOGS\TestFramework\ +TestReportFilePath= c:\testing\log\ +TestReportFileName= TestReport TestReportFormat= TXT # Possible values: TXT or HTML TestReportOutput= FILE # Possible values: FILE or RDEBUG @@ -55,14 +53,6 @@ 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 [End_Defaults] # -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- @@ -88,29 +78,28 @@ # 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\CollectionHelperTestClass.cfg -[End_Module] +#[New_Module] +#ModuleName= demomodule +#[End_Module] # Load testmoduleXXX, optionally with initialization file and/or test case files -#[New_Module] -#ModuleName= testmodulexxx +[New_Module] +ModuleName= testscripter #TestModuleXXX used initialization file #IniFile= c:\testframework\init.txt #TestModuleXXX used configuration file(s) -#TestCaseFile= c:\testframework\testcases1.cfg -#TestCaseFile= c:\testframework\testcases2.cfg -#TestCaseFile= c:\testframework\manualtestcases.cfg - -#[End_Module] +#TestCaseFile= c:\testframework\epos_omasuplpostestercfg.cfg +TestCaseFile= c:\testframework\CollectionHelperTestClass.cfg +[End_Module] # -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + # -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -# Set STIF logging overwrite parameters for Logger. +# Set STIFTestFramework 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. # @@ -155,40 +144,33 @@ # + 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 +# + 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 +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' -#CreateLogDirectories= YES # Possible values: YES or NO +#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 +#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 +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG -#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND +#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 +#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] # -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/group/bld.inf --- a/mmappfw_plat/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -13,7 +13,7 @@ * * Description: Includes all the Domain API specific bld.inf files, which * export files. -* Version : %version: 1.1.4.1.3.3.4 % +* Version : %version: da1ido#1.1.4.1.3.3.8 % * */ @@ -27,6 +27,7 @@ #include "../harvester_server_api/group/bld.inf" #include "../harvester_utility_api/group/bld.inf" #include "../playlist_engine_api/group/bld.inf" +#include "../mtp_keys_api/group/bld.inf" #include "../mpx_collection_common_definition_api/group/bld.inf" #include "../mpx_collection_utility_api/group/bld.inf" #include "../mpx_common_api/group/bld.inf" @@ -45,3 +46,4 @@ #endif #include "../playback_helper_api/group/bld.inf" #include "../videoplaylist_utility_api/group/bld.inf" +#include "../qt_telephony_multimedia_service_api/group/bld.inf" diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_collection_mediator_api/inc/mpxcollectionmediator.h --- a/mmappfw_plat/harvester_collection_mediator_api/inc/mpxcollectionmediator.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_collection_mediator_api/inc/mpxcollectionmediator.h Wed Jun 23 17:51:16 2010 +0100 @@ -89,6 +89,14 @@ IMPORT_C void AddItemL( CMPXMedia*& aMediaProp ); /** + * Add a media to the collection asynchronously. + * + * @param aMediaProp media item. + * @leave KErrArgument leave if not a supported media type + */ + IMPORT_C void AddItemAsyncL( CMPXMedia*& aMediaProp ); + + /** * Add a list of files to the collection db. * @since S60 v3.2.3 * @param aArray list of media item. diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp --- a/mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_collection_mediator_api/tsrc/HarvesterCollectionMediatorTest/group/HarvesterCollectionMediatorTest.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -49,7 +49,11 @@ LIBRARY euser.lib LIBRARY bafl.lib estor.lib ecom.lib stiftestinterface.lib LIBRARY stiftestengine.lib -LIBRARY mpxcollectionmediator.lib mpxcollectionutility.lib mpxcollectionview.lib mpxcollectionengine.lib mpxcollectionhelper.lib mpxcommon.lib +LIBRARY mpxcollectionmediator.lib +LIBRARY mpxcollectionutility.lib +LIBRARY mpxcollectionengine.lib +LIBRARY mpxcollectionhelper.lib +LIBRARY mpxcommon.lib LANG SC diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_collection_mediator_api/tsrc/group/bld.inf --- a/mmappfw_plat/harvester_collection_mediator_api/tsrc/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_collection_mediator_api/tsrc/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -29,4 +29,4 @@ PRJ_TESTMMPFILES #include "../HarvesterCollectionMediatorTest/group/bld.inf" -PRJ_TESTMMPFILES + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_metadata_extractor_api/group/bld.inf --- a/mmappfw_plat/harvester_metadata_extractor_api/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_metadata_extractor_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -25,3 +25,4 @@ PRJ_EXPORTS ../inc/mpxmetadataextractor.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxmetadataextractor.h) +../inc/mpxmetadataextractorobserver.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxmetadataextractorobserver.h) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h --- a/mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h Wed Jun 23 17:51:16 2010 +0100 @@ -19,13 +19,17 @@ #ifndef CMPXMETADATAEXTRACTOR_H #define CMPXMETADATAEXTRACTOR_H +#include +#include + +// FORWARD DECLARATION class CMPXMedia; class CMPXCollectionPath; -class CMetaDataUtility; class CMPXFileInfoUtility; class CMPXDrmMediaUtility; -#include -#include +class MMPXMetadataExtractorObserver; +class CMetaDataUtility; +class CMetaDataFieldContainer; /** * Extracts metadata from a file. @@ -33,7 +37,7 @@ * @lib mpxfilehandler.lib */ class CMPXMetadataExtractor : public CBase, - public MThumbnailManagerObserver + public MThumbnailManagerObserver { public: @@ -72,6 +76,27 @@ */ IMPORT_C TInt ExtractAlbumArtL( CMPXMedia* aMedia ); + /* + * Create a media object for a file. This is a asynchronous function. + * This function will leave with KErrAbort if still processing last request. + * Callback function is HandleCreateMediaComplete() + * @since 9.2 + * @param aFile a fullpath to the file. + * @param aObs Metadata Extractor Observer + * @param aMetadataOnly extract metadata only or not. Default EFalse + */ + IMPORT_C void CreateMediaAsyncL( const TDesC& aFile, + MMPXMetadataExtractorObserver* aObs, + TBool aMetadataOnly = EFalse ); + + /** + * Cancel request. This will empty the task array and stop the wait loop. This + * will cause the CreateMediaL() to finish more quickly. Also, + * all outstanding thumbnail requests are cancelled. + * @since 9.2 + */ + IMPORT_C void CancelRequest(); + private: // New Functions: /** @@ -84,26 +109,14 @@ /** * Function to go through the metadata entries. * @since 3.2.3 - * @param aProp Media Properties to update. - * @param aFile File name */ - void SetMediaPropertiesL( CMPXMedia& aProp, - const TDesC& aFile ); + void SetMediaPropertiesL(); /** * Sets other media properties not found from metadata util. * @since 3.2.3 - * @param aProp Media Properties to update. - * @param aFile file name. - * @param aMetadataOnly extract metadata only or not Default EFalse. - * @param aFileHandle file handle to the file. - * @param aFileErr file handle error if file could not be opened */ - void SetExtMediaPropertiesL( CMPXMedia& aProp, - const TDesC& aFile, - TBool aMetadataOnly, - RFile& aFileHandle, - TInt aFileErr ); + void SetExtMediaPropertiesL(); /** * Checks to see if a container type is supported. @@ -151,22 +164,82 @@ static TInt TimeoutTimerCallback(TAny* aPtr); /** - * Get album art metadata. - * @since 5.0 - * @param aMedia - * @return error ID - */ - TInt GetMediaAlbumArtL( CMPXMedia& aMedia, - const TDesC& aFile ); - - /** * Add album art to media object. * @since 5.0 * @param aMedia */ void AddMediaAlbumArtL( CMPXMedia& aMedia, - const TDesC& aFile, - TDesC8& aValue); + const TDesC& aFile ); + + /** + * Check if can send request to TNM or not. + * @since 5.0 + * + */ + void CheckBeforeSendRequest(); + + /** + * Cancel all outstanding thumbnail requests + * @since 9.2 + * + */ + void CancelAllThumbnailRequests(); + + /** + * Create media and set default data. + * @since 9.2 + * + */ + void DoCreateMediaL(); + + /** + * Execute task at index 0. + * @since 9.2 + * + */ + void ExecuteTaskL(); + + /** + * Cancel task timer. + */ + void CancelTaskTimer(); + + /** + * Callback when the task timer expires. + */ + static TInt TaskTimerCallback(TAny* aPtr); + + /** + * Populate task array + * @since 9.2 + */ + void AddTasksL(); + + /** + * Opens the file + * @since 9.2 + * @return system error + */ + TInt OpenFile(); + + /** + * Handle task timer expired + * @since 9.2 + */ + void HandleTaskTimerExpired(); + + /** + * Clean up + * @since 9.2 + */ + void CleanUp(); + + /** + * Sets drm media properties + * @since 9.2 + */ + void SetDrmMediaPropertiesL(const CMetaDataFieldContainer& aMetaCont); + private: @@ -183,6 +256,15 @@ void ConstructL(); private: // data + enum EMetadataExtractorTasks + { + ETaskCreateMedia, + ETaskAddMetadata, + ETaskAddExtMetadata, + ETaskAddAlbumArt, + ETaskCheckBeforeSend + }; + CMetaDataUtility* iMetadataUtility; // extract metadata from file CMPXDrmMediaUtility* iDrmMediaUtility; // extra drm data from file CMPXFileInfoUtility* iFileInfoUtil; // extract duration/bitrate etc from file @@ -193,8 +275,16 @@ CThumbnailManager* iTNManager; CActiveSchedulerWait* iTNSyncWait; // wait loop use to sync thumbnail CPeriodic* iTimer; // backup timer to stop wait loop - TInt iOutstandingThumbnailRequest; - TInt iTNMBlockCount; + RArray iArrayTNRequestId; + RArray iArrayTasks; + TBool iCancelled; + CPeriodic* iTaskTimer; // timer for task execution + MMPXMetadataExtractorObserver* iObs; // metadata extractor obserer + TFileName iFileName; + RFile iFile; + CMPXMedia* iMedia; // ownership transferred + TBool iMetadataOnly; + TInt iFileOpenError; }; #endif // CMPXMETADATAEXTRACTOR_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractorobserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractorobserver.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,43 @@ +/* +* 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: Observer class for metadata extractor +* +*/ + + +#ifndef MMPXMETADATAEXTRACTOROBSERVER_H +#define MMPXMETADATAEXTRACTOROBSERVER_H + +class CMPXMediaArray; + +/** + * Metadata Extractor observer + * + * @lib mpxfilehandler.lib + * @since S60 v9.2 + */ +class MMPXMetadataExtractorObserver + { + +public: + + /** + * Callback when the CreateMediaL() is completed. + * @param aMedia media with metadata populated. Ownership transferred. + * @param aError error + */ + virtual void HandleCreateMediaComplete( CMPXMedia* aMedia, TInt aError ) = 0; + }; + +#endif // MMPXMETADATAEXTRACTOROBSERVER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_server_api/group/bld.inf --- a/mmappfw_plat/harvester_server_api/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_server_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -26,3 +26,4 @@ ../inc/mpxharvestercommon.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxharvestercommon.h) ../inc/mpxharvesterserverdefs.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxharvesterserverdefs.h) +../inc/mpxharvestercrkeys.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxharvestercrkeys.h) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h --- a/mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/harvester_server_api/inc/mpxharvestercommon.h Wed Jun 23 17:51:16 2010 +0100 @@ -69,7 +69,7 @@ EUSBMTPEndEvent, // MTP end event EUSBMTPNotActiveEvent, // MTP selected but not active ESystemEventMax, // End of event enum - EPowerKeyEjectEvent // Power key eject mmc + EDiskDismountEvent // Disk dismount notification (MPX Harvester internal) }; #endif // MPX_HARVESTER_COMMON_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/harvester_server_api/inc/mpxharvestercrkeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/harvester_server_api/inc/mpxharvestercrkeys.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,49 @@ +/* +* 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: MPX Harvester CenRep keys. +* +*/ + + +#ifndef MPXHARVESTERCRKEYS_H +#define MPXHARVESTERCRKEYS_H + + +// MPX Harvester Features Uid +const TUid KCRUIDMpxHarvesterFeatures = { 0x101FFCD2 }; + +// List of scan paths for the harvester +const TInt KMpxHarvesterScanPathKey = 1; + +// List of blocked paths for the harvester +const TInt KMpxHarvesterBlockPathKey = 2; + +// List of container types +const TInt KMpxHarvesterContainerKey = 3; + +// List of folders to monitor for file changes +const TInt KMpxHarvesterAutoScanDirectoryKey = 4; + +// Disable the podcasting feature in harvester 1=disabled 0=enabled +const TInt KMpxHarvesterDisablePodcasting = 5; + +// Enable the Ram Drive feature. +const TInt KMpxHarvesterEnableRamDisk = 6; + +// Minimum disk space in Mb on Ram Drive to allow copying of Harvester databases to the Ram Disk. +const TInt KMpxHarvesterMaxAllowedRamDiskSpace = 7; + +#endif // MPXHARVESTERCRKEYS_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_albumart_utility_api/inc/mpxalbumartutility.h --- a/mmappfw_plat/mpx_albumart_utility_api/inc/mpxalbumartutility.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_albumart_utility_api/inc/mpxalbumartutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -21,7 +21,7 @@ #include #include -#include +#include class CMPXMedia; class CMPXImageUtil; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_base_view_plugins_api/group/bld.inf --- a/mmappfw_plat/mpx_base_view_plugins_api/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_base_view_plugins_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -27,5 +27,8 @@ ../inc/mpxakndialogplugin.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxakndialogplugin.h) ../inc/mpxaknviewplugin.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxaknviewplugin.h) ../inc/mpxviewplugin.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewplugin.h) -../inc/mpxviewplugin.hrh MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewplugin.hrh) +../inc/mpxviewplugin.hrh MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewplugin.hrh) +// new for 10.1 QT +../inc/mpxviewpluginqt.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewpluginqt.h) + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_base_view_plugins_api/inc/mpxviewpluginqt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mpx_base_view_plugins_api/inc/mpxviewpluginqt.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,135 @@ +/* +* 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 MPXVIEWPLUGIN_H +#define MPXVIEWPLUGIN_H + +#ifdef BUILD_VIEWFRAMEWORK +#define VFDLL_EXPORT Q_DECL_EXPORT +#else +#define VFDLL_EXPORT Q_DECL_IMPORT +#endif + +#include + +class QGraphicsWidget; +class MpxViewPlugin; + +class VFDLL_EXPORT MpxPluginViewInterface { + + public: + virtual MpxViewPlugin *viewPlugin() = 0; + + }; + +Q_DECLARE_INTERFACE(MpxPluginViewInterface , "org.nokia.mmdt.MpxViewPlugin/1.0" ); + +class VFDLL_EXPORT MpxViewPlugin : public QObject, public MpxPluginViewInterface { + + Q_OBJECT + Q_INTERFACES(MpxPluginViewInterface) + + public: + + /* COMMENT: + * following two methods are kind of second-phase create & destroy. Rationale for this step is that + * we need some way to promote lazy resources allocation (on application demand) and early resource + * deallocation (again, on application direct command). + */ + + /** + * createView is the second operation (after plugin construction which is done somewhere + * in the plugin framework) executed in the application layer to make a fully operational + * View Plugin descendant. + * I should allocate all of those resources that are required by plugin, but which are + * too expensive to allocate in constructor (eg. in case of plugin prefetching). + */ + virtual void createView() = 0; + + /** + * destroyView is an operation that should be executed just before plugin deletion. + * Implementation should destroy all of resources allocated during createView execution. + * It's reason d'etre is based on a fact, that application doesn't controll when exactly + * plugin will be deleted, so destructor execution could be postponed still holding resources. + */ + virtual void destroyView() = 0; + + /* COMMENT: + * view activation and deactivation are reversible operations + * that allows us to give up resources that we could temporary deallocate when that + * specific view plugin goes into background. + */ + + /** + * Called to notice view activation. + */ + virtual void activateView() = 0; + + /** + * Called to notice view deactivation. + */ + virtual void deactivateView() = 0; + + /** + * gives actual view component, ready to put somewhere into the app layout. + * However, beware that calling to activate/deactivate in the meantime + * can invalidate that pointer. + * + * NOTE: Returned type is choosen to be as generic as possible, + * so please ensure that it fulfills all your needs (it was HbView* before) + */ + virtual QGraphicsWidget* getView() = 0; + + public slots: + + /** + * Signalled by application when orientation has changed. + */ + virtual void orientationChange(Qt::Orientation orientation) = 0; + + /** + * Implementation should take care either to implement + * go-back operation internally or to emit proper + * command signal to delegate that responsibility to + * framework (eg. to switch to previous view). + */ + virtual void back() = 0; + + signals: + + /** + * Command is the only way to notify from plugin to application + * about action needed to be executed. + * + * @param aCommand enumeration of command type. + * Currently supported are: ViewBack, CloseApp, GoToNowPlaying, GoToCollectionView. + * NOTE: It should be specified how to determine between broadly supported operations + * (back, close etc.) and application/plugin specific (go to collection, go to now playing etc.) + * + * There is also one major issue here, that there is no guaranted order of command delivery, + * so there is second option to use common observer pattern. Should be discussed. + */ + void command(int aCommand); + + public: + + virtual MpxViewPlugin *viewPlugin() { return this; } + +}; + +#endif /*MPXVIEWPLUGIN_H_*/ + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_common_api/inc/mpxclientlist.h --- a/mmappfw_plat/mpx_common_api/inc/mpxclientlist.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_common_api/inc/mpxclientlist.h Wed Jun 23 17:51:16 2010 +0100 @@ -258,6 +258,26 @@ */ inline void SendMsgL(TInt aIndex, const TMPXMessage& aMsg); + + /** + * Sets the primary client + * + * @since S60 9.2 + * @return system error + */ + IMPORT_C TInt SetPrimaryClient(CMPXMessageQueue& aMsgQueue); + + + + /** + * Send a sync message to the primary client + * + * @since S60 9.2 + * @return system error + */ + IMPORT_C TInt SendSyncMsg(const CMPXMessage* aMsg); + + private: /** * Encapsulates a client: all the information associated with a client of @@ -433,6 +453,7 @@ RPointerArray iClients; RArray iClientProcesses; MMPXClientlistObserver* iObserver; + CMPXMessageQueue* iPrimaryClient; }; #include "mpxclientlist.inl" diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_common_api/inc/mpxmediageneraldefs.h --- a/mmappfw_plat/mpx_common_api/inc/mpxmediageneraldefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_common_api/inc/mpxmediageneraldefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -451,7 +451,7 @@ EMPXFile, EMPXImage, EMPXVideo, - EMPXRadio, + EMPXAbstractAlbum, EMPXMessage, EMPXTag, EMPXCommand, diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_common_api/inc/mpxmediamtpdefs.h --- a/mmappfw_plat/mpx_common_api/inc/mpxmediamtpdefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_common_api/inc/mpxmediamtpdefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -34,6 +34,8 @@ * Attributes supported for KMPXMediaIdMTP */ const TMPXAttributeData KMPXMediaMTPDrmStatus = {KMPXMediaIdMTP, 0x0001}; // TUint16 +const TMPXAttributeData KMPXMediaMTPSampleDataFlag = {KMPXMediaIdMTP, 0x0002}; // TBool +const TMPXAttributeData KMPXMediaMTPSampleData = {KMPXMediaIdMTP, 0x0004}; // HBufC8* const TMPXAttributeData KMPXMediaMTPAll = {KMPXMediaIdMTP, 0xffffffff}; #endif // MPXMEDIAMTPDEFS_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h --- a/mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_common_api/inc/mpxmediamusicdefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -44,6 +44,9 @@ const TMPXAttributeData KMPXMediaMusicOriginalAlbumArtFileName={KMPXMediaIdMusic,0x200}; // Text const TMPXAttributeData KMPXMediaMusicAlbumArtThumbnail={KMPXMediaIdMusic,0x400}; // CFbsImage const TMPXAttributeData KMPXMediaMusicAlbumArtThumbnailSize={KMPXMediaIdMusic,0x800}; // TSint +const TMPXAttributeData KMPXMediaMusicAlbumArtChanged={KMPXMediaIdMusic,0x1000}; // TInt +const TMPXAttributeData KMPXMediaMusicAlbumArtist={KMPXMediaIdMusic,0x2000}; // Text +const TMPXAttributeData KMPXMediaMusicAlbumId={KMPXMediaIdMusic,0x4000}; // TMPXItemId const TMPXAttributeData KMPXMediaMusicAll={KMPXMediaIdMusic,0xffffffff}; // Text /** @@ -65,6 +68,8 @@ EMPXMediaMusicOriginalAlbumArtFileName=0x200, // Text EMPXMediaMusicAlbumArtThumbnail=0x400, EMPXMediaMusicAlbumArtThumbnailSize=0x800, + EMPXMediaMusicAlbumArtist=0x2000, + EMPXMediaMusicAlbumId=0x4000, EMPXMediaMusicAll=0xffffffff }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_common_api/inc/mpxmessagequeue.h --- a/mmappfw_plat/mpx_common_api/inc/mpxmessagequeue.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_common_api/inc/mpxmessagequeue.h Wed Jun 23 17:51:16 2010 +0100 @@ -73,6 +73,14 @@ */ IMPORT_C void Reset(); + /** + * Adds a message into the top of the queue and sends the message if slot is available. + * + * @since S60 9.2 + * @param aMessage message object, ownership not transferred. + * @return system error + */ + IMPORT_C TInt AddFirst(const CMPXMessage* aMessage, TInt aError); private: /** * C++ constructor. diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_common_definition_api/group/bld.inf --- a/mmappfw_plat/mpx_common_definition_api/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_common_definition_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -36,4 +36,5 @@ ../inc/mpxmessage2.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxmessage2.h) ../inc/mpxpathconfiguration.hrh MW_LAYER_PLATFORM_EXPORT_PATH(mpxpathconfiguration.hrh) ../inc/mpxprivatecrkeys.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxprivatecrkeys.h) -../inc/mpxsearchcriteria.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxsearchcriteria.h) \ No newline at end of file +../inc/mpxsearchcriteria.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxsearchcriteria.h) +../inc/EqualizerConstants.h MW_LAYER_PLATFORM_EXPORT_PATH(EqualizerConstants.h) \ No newline at end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackcommanddefs.h --- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackcommanddefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackcommanddefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -99,6 +99,7 @@ EPbCmdDisableEffect, EPbCmdSetVolume, // 25 Set volume to the value specified by aData EPbCmdSetAutoResume, // 26 Set autoresume value (true/false) + EPbCmdSyncMsgComplete, //27 Synchronous message is complete EPbCmdEnd // Mark for the end of command }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackframeworkdefs.h --- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackframeworkdefs.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackframeworkdefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -247,6 +247,7 @@ EPbsInitFromFile64, // 42 EPbsInitStreamingFromFile64, // 43 EPbsGetFile64, // 44 + EPbsSetPrimaryClient, //45 set primary client EPbsServerOpEnd // End of operation }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginobserver.h --- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginobserver.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginobserver.h Wed Jun 23 17:51:16 2010 +0100 @@ -110,6 +110,18 @@ */ virtual void HandlePlaybackMessage(CMPXMessage* /*aMsg*/, TInt /*aErr*/) {} + + + /** + * Handle message from plug-in. + * + * @since S60 9.2 + * @param aMsg message from the plug-in + * @return system error + */ + virtual TInt HandlePlaybackSyncMessage (const CMPXMessage& /*aMsg*/) {return KErrNotSupported;} + + }; #endif // MMPXMPLAYBACKPLUGINOBSERVER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginversion2.h --- a/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginversion2.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_common_definition_api/inc/mpxplaybackpluginversion2.h Wed Jun 23 17:51:16 2010 +0100 @@ -39,8 +39,9 @@ * @param aUri URI of the item * @param aType the mime type of the item * @param aAccessPoint the access point + * @param aPosition the starting position */ - virtual void InitStreamingL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint) = 0; + virtual void InitStreamingL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint, TInt aPosition = 0) = 0; /** * Initializes a file handle for playback. @@ -48,8 +49,9 @@ * @since S60 9.2 * @param aFile file handle of a file * @param aAccessPoint the access point + * @param aPosition the starting position */ - virtual void InitStreamingL(RFile& aFile, TInt aAccessPoint) = 0; + virtual void InitStreamingL(RFile& aFile, TInt aAccessPoint, TInt aPosition = 0) = 0; #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API /** @@ -58,17 +60,39 @@ * @since S60 9.2 * @param aFile 64 bit file handle of a file * @param aAccessPoint the access point + * @param aPosition the starting position */ - virtual void InitStreaming64L(RFile64& aFile, TInt aAccessPoint) = 0; + virtual void InitStreaming64L(RFile64& aFile, TInt aAccessPoint, TInt aPosition = 0) = 0; /** * Initializes a song for playback. * * @since S60 9.2 * @param aFile 64 bit file handle of a song + * @param aPosition the starting position */ - virtual void Initialise64L(RFile64& aSong) = 0; + virtual void Initialise64L(RFile64& aSong, TInt aPosition = 0) = 0; #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + + /** + * Initializes a song for playback. + * + * @since S60 9.2 + * @param aSong the song path + * @param aPosition the starting position + */ + virtual void InitialiseWithPositionL(const TDesC& aSong, TInt aPosition = 0) = 0; + + /** + * Initializes a song for playback. + * + * @since S60 9.2 + * @param aFile file handle of a song + * @param aPosition the starting position + */ + virtual void InitialiseWithPositionL(RFile& aSong, TInt aPosition = 0) = 0; + }; #endif // CMPXPLAYBACKPLUGINVERSION2_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/inc/mpxplaybackutility.h --- a/mmappfw_plat/mpx_playback_utility_api/inc/mpxplaybackutility.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/inc/mpxplaybackutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -413,6 +413,16 @@ */ virtual void InitStreaming64L(RFile64& /*aShareableFile*/, const TInt /*aAccessPoint*/) {}; #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + /** + * Sets the primary client + * + * @since S60 9.2 + * @return system error + */ + virtual TInt SetPrimaryClientL() {return KErrNotSupported; }; + + }; /** diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/conf/mpxplaybackutilitytest.cfg --- a/mmappfw_plat/mpx_playback_utility_api/tsrc/conf/mpxplaybackutilitytest.cfg Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/conf/mpxplaybackutilitytest.cfg Wed Jun 23 17:51:16 2010 +0100 @@ -1,40 +1,253 @@ + +[Define] +KErrNotFound -1 +KErrNotSupported -5 +KErrArgument -6 +KErrNotReady -18 +KErrAccessDenied -21 + +KTrue 1 +KFalse 0 + +// UID definition for playback mode +KPbModeDefault 271067440 // 0x10282930 Uses same player as any other player running in same. +KPbModeActivePlayer 271067441 // 0x10282931 Currently active player or any player if no active player. +KPbModeNewPlayer 271067442 // 0x10282932 New player +KPbModeAppUID 111 // Application UID + +// Category for playback utility creation. +KMPXCategoryUndefined 0 +KMPXCategoryMusic 1 +KMPXCategoryVideo 2 + +// UID for Helix Plugin +KVideoHelixPlaybackPluginUid 271066449 // 0x10282551 + +// Timers +KTimerEndTest 5000 // 5 sec + +[Enddefine] + [Test] +// +// Test NewL +// - Mode NewPlayer +// - Category Default(Music) +// title 1 MMPXPlaybackUtilityNewL -create mpxplaybackutilitytest foobar -foobar MMPXPlaybackUtilityNewL -delete foobar +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityNewL KPbModeNewPlayer +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test NewL +// - Mode ActivePlayer +// - Category Video +// +title 2 MMPXPlaybackUtilityNewL with category video +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityNewWithCatL KMPXCategoryVideo KPbModeActivePlayer +pbutil EndTest +delete pbutil [Endtest] [Test] -title 2 MMPXPlaybackUtilityUtilityL -create mpxplaybackutilitytest foobar -foobar MMPXPlaybackUtilityUtilityL -delete foobar +// +// Test UtilityL +// - Mode UID +// - Category Default(Music) +// +title 3 MMPXPlaybackUtilityUtilityL +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityL KPbModeAppUID +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test UtilityL +// - Mode Default +// - Category Video +// +title 4 MMPXPlaybackUtilityUtilityL with category video +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeDefault +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test InitL with Playlist +// - Mode NewPlayer +// - Category Default (Music) +// +title 5 MMPXPlaybackUtilityInitL(playlist) +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityL KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityInitWithPlaylistL +pause KTimerEndTest +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test InitL with URI +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - InitL with URI, File Battle_160x100_30kbps.rm +// +title 6 MMPXPlaybackUtilityInitL(uri) +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInitWithUriL Battle_160x100_30kbps.rm +pause KTimerEndTest +pbutil EndTest +delete pbutil [Endtest] [Test] -title 3 MMPXPlaybackUtilityInit64L -create mpxplaybackutilitytest foobar -foobar MMPXPlaybackUtilityNewL -foobar MMPXPlaybackUtilityInit64L Battle_160x100_30kbps.rm -delete foobar +// +// Test InitL with URI +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - InitL with URI, File XVID_176x144_15fps_261Kbps.avi +// +title 7 MMPXPlaybackUtilityInitL(uri) +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInitWithUriL XVID_176x144_15fps_261Kbps.avi +pause KTimerEndTest +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test InitL with RFile +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - InitL with RFile, File 20k_H263_WB_176x144_15fps.3gp +// +title 8 MMPXPlaybackUtilityInitL(rfile) +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInitWithRFileL 20k_H263_WB_176x144_15fps.3gp +pause KTimerEndTest +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test InitStreamingL with URI +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - InitStreamingL with URI, File 30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4 +// +title 9 MMPXPlaybackUtilityInitStreamingL(uri) +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInitStreamingWithUriL 30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4 +pause KTimerEndTest +pbutil EndTest +delete pbutil [Endtest] [Test] -title 4 MMPXPlaybackUtilityInitStreaming64L -create mpxplaybackutilitytest foobar -foobar MMPXPlaybackUtilityNewL -foobar MMPXPlaybackUtilityInitStreaming64L Battle_160x100_30kbps.rm -delete foobar +// +// Test InitStreamingL with RFile +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - InitStreamingL with RFile, File 80k_H264_AAC16M22_176x144_15fps.3gp +// +title 10 MMPXPlaybackUtilityInitStreamingL(rfile) +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInitStreamingWithRFileL 80k_H264_AAC16M22_176x144_15fps.3gp +pause KTimerEndTest +pbutil EndTest +delete pbutil +[Endtest] + +[Test] +// +// Test Init64L +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - Init64L with RFile64, File DivX_MP3_256x112_30fps_300Kbps.avi +// +title 11 MMPXPlaybackUtilityInit64L +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInit64L DivX_MP3_256x112_30fps_300Kbps.avi +pause KTimerEndTest +pbutil EndTest +delete pbutil [Endtest] [Test] -title 5 MMPXPlaybackUtilityFile64L -create mpxplaybackutilitytest foobar -foobar MMPXPlaybackUtilityNewL -foobar MMPXPlaybackUtilityInit64L Battle_160x100_30kbps.rm -foobar MMPXPlaybackUtilityFile64L -delete foobar +// +// Test InitStreaming64L +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - InitStreaming64L with RFile64, File honey_im_home_horror_ad.avi +// +title 12 MMPXPlaybackUtilityInitStreaming64L +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInitStreaming64L honey_im_home_horror_ad.avi +pause KTimerEndTest +pbutil EndTest +delete pbutil [Endtest] +[Test] +// +// Test File64L +// - UtilityL with Mode NewPlayer, Category Video +// - Add Observer +// - SelectPlayerL with HelixPlugin UID +// - Init64L with RFile64, File MPEG4_VBR_176x144_15fps.3gp +// - File64L to get RFile64 file handler +// +title 13 MMPXPlaybackUtilityFile64L +create mpxplaybackutilitytest pbutil +pbutil MMPXPlaybackUtilityUtilityWithCatL KMPXCategoryVideo KPbModeNewPlayer +pbutil MMPXPlaybackUtilityAddObserverL +pbutil MMPXPlaybackUtilityPlayerManagerSelectPlayerL KVideoHelixPlaybackPluginUid +pbutil MMPXPlaybackUtilityInit64L MPEG4_VBR_176x144_15fps.3gp +pause KTimerEndTest +pbutil MMPXPlaybackUtilityFile64L +pbutil EndTest +delete pbutil +[Endtest] + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/20k_H263_WB_176x144_15fps.3gp Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/20k_H263_WB_176x144_15fps.3gp has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4 Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4 has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/80k_H264_AAC16M22_176x144_15fps.3gp Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/80k_H264_AAC16M22_176x144_15fps.3gp has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/DivX_MP3_256x112_30fps_300Kbps.avi Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/DivX_MP3_256x112_30fps_300Kbps.avi has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/MPEG4_VBR_176x144_15fps.3gp Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/MPEG4_VBR_176x144_15fps.3gp has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/XVID_176x144_15fps_261Kbps.avi Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/XVID_176x144_15fps_261Kbps.avi has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/honey_im_home_horror_ad.avi Binary file mmappfw_plat/mpx_playback_utility_api/tsrc/data/mmc/honey_im_home_horror_ad.avi has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.mmp --- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -54,6 +54,7 @@ LIBRARY stiftestengine.lib LIBRARY mpxplaybackutility.lib LIBRARY mpxcommon.lib +LIBRARY mpxcollectionutility.lib LANG SC diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.pkg --- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.pkg Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/group/mpxplaybackutilitytest.pkg Wed Jun 23 17:51:16 2010 +0100 @@ -21,7 +21,7 @@ &EN ; Provide value for uid -#{"STIF mpxplaybackutilitytest Application"},(0x10005942),1,1,0,TYPE=SA +#{"MPX PlaybackUtility STIF"}, (0x101FB3E3), 1, 0, 1, TYPE=SA, RU ; Series60 product id for S60 3.0 [0x101F7961], 0, 0, 0, {"Series60ProductID"} @@ -32,35 +32,16 @@ ; 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\mpxplaybackutilitytest.dll" - "!:\Sys\Bin\mpxplaybackutilitytest.dll" +"..\..\init\TestFramework.ini" - "c:\testframework\TestFramework.ini" +"..\..\conf\mpxplaybackutilitytest.cfg" - "c:\testframework\mpxplaybackutilitytest.cfg" -; Install files -"..\..\data\mmc\Battle_160x100_30kbps.rm" - "e:\testing\data\Battle_160x100_30kbps.rm" - -"..\..\init\TestFramework.ini" - "c:\testframework\TestFramework.ini" -"..\..\conf\mpxplaybackutilitytest.cfg" - "c:\testframework\mpxplaybackutilitytest.cfg" - -"\epoc32\release\armv5\udeb\mpxplaybackutilitytest.dll" - "c:\Sys\Bin\mpxplaybackutilitytest.dll" - -; Embedded SIS -; None - -; End of Package body - -; PKG dependencies -; None - -; PKG capabilities -; None +"..\..\data\mmc\Battle_160x100_30kbps.rm" - "f:\testing\data\Battle_160x100_30kbps.rm" +"..\..\data\mmc\20k_H263_WB_176x144_15fps.3gp" - "f:\testing\data\20k_H263_WB_176x144_15fps.3gp" +"..\..\data\mmc\30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4" - "f:\testing\data\30k_MPEG4_AAC_8Khz_176x144_15fps_30secs.mp4" +"..\..\data\mmc\80k_H264_AAC16M22_176x144_15fps.3gp" - "f:\testing\data\80k_H264_AAC16M22_176x144_15fps.3gp" +"..\..\data\mmc\DivX_MP3_256x112_30fps_300Kbps.avi" - "f:\testing\data\DivX_MP3_256x112_30fps_300Kbps.avi" +"..\..\data\mmc\honey_im_home_horror_ad.avi" - "f:\testing\data\honey_im_home_horror_ad.avi" +"..\..\data\mmc\MPEG4_VBR_176x144_15fps.3gp" - "f:\testing\data\MPEG4_VBR_176x144_15fps.3gp" +"..\..\data\mmc\XVID_176x144_15fps_261Kbps.avi" - "f:\testing\data\XVID_176x144_15fps_261Kbps.avi" diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytest.h --- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytest.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytest.h Wed Jun 23 17:51:16 2010 +0100 @@ -27,11 +27,8 @@ #include #include #include -// 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 @@ -45,26 +42,29 @@ // data file _LIT( KmpxplaybackutilityTestFilePath, "C:\\testing\\data\\" ); #else -_LIT( KmpxplaybackutilitytestLogPath, "\\logs\\testframework\\mpxplaybackutilitytest\\" ); +_LIT( KmpxplaybackutilitytestLogPath, "f:\\logs\\testframework\\mpxplaybackutilitytest\\" ); // Log file _LIT( KmpxplaybackutilitytestLogFile, "mpxplaybackutilitytest.txt" ); _LIT( KmpxplaybackutilitytestLogFileWithTitle, "mpxplaybackutilitytest_[%S].txt" ); // data file -_LIT( KmpxplaybackutilityTestFilePath, "e:\\testing\\data\\" ); +_LIT( KmpxplaybackutilityTestFilePath, "f:\\testing\\data\\" ); #endif + // FUNCTION PROTOTYPES //?type ?function_name(?arg_list); // FORWARD DECLARATIONS //class ?FORWARD_CLASSNAME; -class Cmpxplaybackutilitytest; -class MMPXPlaybackUtility; -class MMPXPlaybackObserver; // DATA TYPES -//enum ?declaration -//typedef ?declaration -//extern ?data_type; +typedef struct +{ + TInt iEvent; + TInt iType; + TInt iData; +} TMpxPlaybackTestEvent; + +typedef CArrayPtrFlat CMpxPlaybackTestEventArray; // CLASS DECLARATION @@ -76,82 +76,151 @@ * @since ?Series60_version */ NONSHARABLE_CLASS(Cmpxplaybackutilitytest) : public CScriptBase, - public MMPXPlaybackObserver + public MMPXPlaybackObserver, + public MMPXPlaybackCallback { - public: // Constructors and destructor +public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static Cmpxplaybackutilitytest* NewL( CTestModuleIf& aTestModuleIf ); + /** + * Two-phased constructor. + */ + static Cmpxplaybackutilitytest* NewL( CTestModuleIf& aTestModuleIf ); - /** - * Destructor. - */ - virtual ~Cmpxplaybackutilitytest(); + /** + * Destructor. + */ + virtual ~Cmpxplaybackutilitytest(); - - public: // Functions from base classes +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 ); - - // From base class MMPXPlaybackObserver - /** - * Handle playback message - * - * @since 3.1 - * @param aMessage playback message - * @param aErr system error code. - */ - void HandlePlaybackMessage( - CMPXMessage* aMessage, TInt aError ); - private: + /** + * 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 ); + + // From base class MMPXPlaybackObserver + /** + * Handle playback message + * + * @since 3.1 + * @param aMessage playback message + * @param aErr system error code. + */ + void HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError ); + + /** + * Handle playback property. + * + * @since S60 3.2.3 + * @param aProperty the property + * @param aValue the value of the property + * @param aError error code + */ + void HandlePropertyL(TMPXPlaybackProperty aProperty, TInt aValue, TInt aError); - /** - * C++ default constructor. - */ - Cmpxplaybackutilitytest( 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. - */ - TInt MMPXPlaybackUtilityNewL(CStifItemParser& /*aItem*/); - TInt MMPXPlaybackUtilityUtilityL(CStifItemParser& /*aItem*/); - TInt MMPXPlaybackUtilityInit64L(CStifItemParser& /*aItem*/); - TInt MMPXPlaybackUtilityInitStreaming64L(CStifItemParser& /*aItem*/); - TInt MMPXPlaybackUtilityFile64L(CStifItemParser& /*aItem*/); - - /** - * Method used to log version of test class - */ - void SendTestClassVersion(); - //ADD NEW METHOD DEC HERE - //[TestMethods] - Do not remove - private: // Friend classes - //From mpxplaybackutility.h - MMPXPlaybackUtility* iMPXPlaybackUtility; - RFs iFs; + /** + * Method is called continously until aComplete=ETrue, signifying that + * it is done and there will be no more callbacks. + * Only new items are passed each time. + * + * @since S60 3.2.3 + * @param aPlayer UID of the subplayer + * @param aSubPlayers a list of sub players + * @param aComplete ETrue no more sub players. EFalse more subplayer + * expected + * @param aError error code + */ + void HandleSubPlayerNamesL(TUid aPlayer, + const MDesCArray* aSubPlayers, + TBool aComplete, + TInt aError); + + /** + * Call back of media request. + * + * @since S60 3.2.3 + * @param aMedia media + * @param aError error code + */ + void HandleMediaL(const CMPXMedia& aProperties, TInt aError); + + /** + * Handle completion of a asynchronous command. + * Note: All clients should implement this callback. + * + * @since S60 3.2.3 + * @param aCommandResult result of the command, NULL if error + * @param aError error code + */ + void HandlePlaybackCommandComplete(CMPXCommand* aCommandResult, TInt aError); + +private: // functions + + /** + * C++ default constructor. + */ + Cmpxplaybackutilitytest( 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(); + + /* + * Create resources + */ + void CreateL(); + + void AddExpectedEventL(TInt aEvent, TInt aType, TInt aData); + void RemoveExpectedEventL(TInt aEvent, TInt aType, TInt aData); + + /** + * Test methods are listed below. + */ + TInt MMPXPlaybackUtilityNewL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityNewWithCatL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityUtilityL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityUtilityWithCatL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInitWithPlaylistL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInitWithUriL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInitWithRFileL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInitStreamingWithUriL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInitStreamingWithRFileL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInit64L(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityInitStreaming64L(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityFile64L(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityAddObserverL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityRemoveObserverL(CStifItemParser& /*aItem*/); + TInt MMPXPlaybackUtilityPlayerManagerSelectPlayerL(CStifItemParser& /*aItem*/); + TInt EndTest(CStifItemParser& /*aItem*/); + + /** + * Method used to log version of test class + */ + void SendTestClassVersion(); + //ADD NEW METHOD DEC HERE + //[TestMethods] - Do not remove + +private: // data + MMPXPlaybackUtility* iMPXPlaybackUtility; + CMpxPlaybackTestEventArray* iExpectedEventArray; + RFs iFs; + TInt iCallbackError; + RFile iFile; #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API - RFile64 iFile64; + RFile64 iFile64; #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API }; diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytestdefs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/inc/mpxplaybackutilitytestdefs.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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: mpxplaybackutilitytestdefs header for STIF Test Framework TestScripter. +* +*/ + +#ifndef MPXPLAYBACKUTILITYTESTDEFS_H +#define MPXPLAYBACKUTILITYTESTDEFS_H + +const TInt KGeneralPlaybackMsgOffset = 0; +const TInt KVideoPlaybackMsgOffset = 100; +const TInt KStifPlaybackMsgOffset = 200; +const TInt KMPXMessageStif = 0x20011397; + + +#endif // MPXPLAYBACKUTILITYTESTDEFS_H + +// End of File diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytest.cpp --- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytest.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytest.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -131,10 +131,8 @@ EFalse ); SendTestClassVersion(); - - - iFs.Connect(); - iFs.ShareProtected(); + + CreateL(); } // ----------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytestBlocks.cpp --- a/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytestBlocks.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_playback_utility_api/tsrc/mpxplaybackutilitytest/src/mpxplaybackutilitytestBlocks.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -21,18 +21,105 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "mpxplaybackutilitytest.h" +#include "mpxplaybackutilitytestdefs.h" + // ============================ MEMBER FUNCTIONS =============================== // --------------------------------------------------------------------------- // From MMPXPlaybackObserver // Handle playback message. // --------------------------------------------------------------------------- // -void Cmpxplaybackutilitytest::HandlePlaybackMessage( - CMPXMessage* /*aMessage*/, TInt aError ) +void Cmpxplaybackutilitytest::HandlePlaybackMessage( CMPXMessage* aMessage, TInt aError ) { - iLog->Log(_L("Cmpxharvestertest::HandlePlaybackMessage: %d"), aError); + iLog->Log(_L("Cmpxharvestertest::HandlePlaybackMessage: Error %d"), aError); + if ( !aError ) + { + TMPXMessageId id( *(aMessage->Value(KMPXMessageGeneralId)) ); + TInt event( *aMessage->Value( KMPXMessageGeneralEvent ) ); + TInt type( *aMessage->Value( KMPXMessageGeneralType ) ); + TInt data( *aMessage->Value( KMPXMessageGeneralData ) ); + + if ( KMPXMessageGeneral == id ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage() General event = %d type = %d value = %d"), + event, type, data ); + RemoveExpectedEventL( KGeneralPlaybackMsgOffset + event, type, data ); + } + else if ( KMPXMediaIdVideoPlayback == id ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage() Video event = %d type = %d value = %d"), + event, type, data ); + RemoveExpectedEventL( KVideoPlaybackMsgOffset + event, type, data ); + } + else if ( KMPXMessageStif ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::HandlePlaybackMessage() STIF event = %d type = %d value = %d"), + event, type, data ); + RemoveExpectedEventL( KStifPlaybackMsgOffset + event, type, data ); + } + } + else + { + if ( !iCallbackError ) + { + iCallbackError = aError; + } + } } + +// --------------------------------------------------------------------------- +// Handle playback property. +// --------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::HandlePropertyL( TMPXPlaybackProperty aProperty, TInt aValue, TInt aError ) + { + iLog->Log(_L("Cmpxharvestertest::HandlePropertyL: Property %d, Value %d, Error %d"), + aProperty, aValue, aError); + } + +// --------------------------------------------------------------------------- +// Method is called continously until aComplete=ETrue, signifying that +// it is done and there will be no more callbacks. +// Only new items are passed each time. +// --------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::HandleSubPlayerNamesL( TUid aPlayer, + const MDesCArray* aSubPlayers, + TBool aComplete, + TInt aError ) + { + iLog->Log(_L("Cmpxharvestertest::HandleSubPlayerNamesL: Complete %d, Error %d"), aComplete, aError); + } + +// --------------------------------------------------------------------------- +// Call back of media request. +// --------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::HandleMediaL( const CMPXMedia& aProperties, TInt aError ) + { + iLog->Log(_L("Cmpxharvestertest::HandleMediaL: Error %d"), aError); + } + +// --------------------------------------------------------------------------- +// Handle completion of a asynchronous command. +// Note: All clients should implement this callback. +// --------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::HandlePlaybackCommandComplete( CMPXCommand* aCommandResult, TInt aError ) + { + iLog->Log(_L("Cmpxharvestertest::HandlePlaybackCommandComplete: Error %d"), aError); + } + // ----------------------------------------------------------------------------- // Cmpxplaybackutilitytest::Delete // Delete here all resources allocated and opened from test methods. @@ -45,7 +132,58 @@ #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API iFile64.Close(); #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + iFile.Close(); iFs.Close(); + iExpectedEventArray->ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::CreateL +// Create here all resources needed for test methods. +// Called from ConstructL(). +// ----------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::CreateL() + { + iFs.Connect(); + iFs.ShareProtected(); + + iExpectedEventArray = new (ELeave) CArrayPtrFlat( 1 ); + iCallbackError = KErrNone; + iMPXPlaybackUtility = NULL; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::AddExpectedEventL +// ----------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::AddExpectedEventL( TInt aEvent, TInt aType, TInt aData ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::AddExpectedEventL() event = %d type = %d value = %d"), + aEvent, aType, aData ); + + TMpxPlaybackTestEvent* event = new (ELeave) TMpxPlaybackTestEvent; + event->iEvent = aEvent; + event->iType = aType; + event->iData = aData; + iExpectedEventArray->AppendL( event ); + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::RemoveExpectedEventL +// ----------------------------------------------------------------------------- +// +void Cmpxplaybackutilitytest::RemoveExpectedEventL( TInt aEvent, TInt aType, TInt aData ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::RemoveExpectedEventL() event = %d type = %d value = %d"), + aEvent, aType, aData ); + + if ( (iExpectedEventArray->Count() > 0) && + ((*iExpectedEventArray)[0]->iEvent == aEvent) ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::RemoveExpectedEventL() event = %d removed."), aEvent); + iExpectedEventArray->Delete( 0 ); + } } // ----------------------------------------------------------------------------- @@ -53,32 +191,38 @@ // Run specified method. Contains also table of test mothods and their names. // ----------------------------------------------------------------------------- // -TInt Cmpxplaybackutilitytest::RunMethodL( - CStifItemParser& aItem ) +TInt Cmpxplaybackutilitytest::RunMethodL( CStifItemParser& aItem ) { - static TStifFunctionInfo const KFunctions[] = { // Copy this line for every implemented function. // First string is the function name used in TestScripter script file. // Second is the actual implementation member function. - + + //ADD NEW ENTRY HERE + // [test cases entries] - Do not remove ENTRY( "MMPXPlaybackUtilityNewL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL ), + ENTRY( "MMPXPlaybackUtilityNewWithCatL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL ), ENTRY( "MMPXPlaybackUtilityUtilityL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL ), + ENTRY( "MMPXPlaybackUtilityUtilityWithCatL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL ), + ENTRY( "MMPXPlaybackUtilityInitWithPlaylistL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL ), + ENTRY( "MMPXPlaybackUtilityInitWithUriL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL ), + ENTRY( "MMPXPlaybackUtilityInitWithRFileL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL ), + ENTRY( "MMPXPlaybackUtilityInitStreamingWithUriL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL ), + ENTRY( "MMPXPlaybackUtilityInitStreamingWithRFileL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL ), ENTRY( "MMPXPlaybackUtilityInit64L", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L ), ENTRY( "MMPXPlaybackUtilityInitStreaming64L", Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L ), ENTRY( "MMPXPlaybackUtilityFile64L", Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L ), - - //ADD NEW ENTRY HERE - // [test cases entries] - Do not remove - + ENTRY( "MMPXPlaybackUtilityAddObserverL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL ), + ENTRY( "MMPXPlaybackUtilityRemoveObserverL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL ), + ENTRY( "MMPXPlaybackUtilityPlayerManagerSelectPlayerL", Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL ), + ENTRY( "EndTest", Cmpxplaybackutilitytest::EndTest ), }; const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo ); return RunInternalL( KFunctions, count, aItem ); - } // ----------------------------------------------------------------------------- @@ -87,49 +231,325 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL(CStifItemParser& /*aItem*/) +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL( CStifItemParser& aItem ) { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewL")); TInt err = KErrNone; - - TRAP( err,iMPXPlaybackUtility = MMPXPlaybackUtility::NewL(KPbModeDefault,this )); + TInt mode; + + if ( aItem.GetNextInt(mode) != KErrNone ) + { + iLog->Log(_L("MMPXPlaybackUtilityNewL - Missing playback mode.")); + err = KErrArgument; + return err; + } + + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewL: mode %d"), mode); + TRAP( err,iMPXPlaybackUtility = MMPXPlaybackUtility::NewL(TUid::Uid(mode), this )); if (err!= KErrNone) { - iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewL: %d"), err); + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewL: error %d"), err); } return err; } // ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL +// NewL test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL( CStifItemParser& aItem ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityNewWithCatL")); + TInt err = KErrNone; + TInt mode; + TInt category; + if ( aItem.GetNextInt(category) != KErrNone ) + { + iLog->Log(_L("MMPXPlaybackUtilityNewWithCatL - Missing category.")); + err = KErrArgument; + return err; + } + + if ( aItem.GetNextInt(mode) != KErrNone ) + { + iLog->Log(_L("MMPXPlaybackUtilityNewWithCatL - Missing playback mode.")); + err = KErrArgument; + return err; + } + + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewWithCatL: category %d"), category); + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewWithCatL: mode %d"), mode); + TRAP( err,iMPXPlaybackUtility = MMPXPlaybackUtility::NewL((TMPXCategory)category, TUid::Uid(mode), this )); + + if (err!= KErrNone) + { + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityNewWithCatL: error %d"), err); + } + return err; + } + +// ----------------------------------------------------------------------------- // Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL // UtilityL test method function. // (other items were commented in a header). // ----------------------------------------------------------------------------- // -TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL(CStifItemParser& /*aItem*/) +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL( CStifItemParser& aItem ) { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityL")); TInt err = KErrNone; + TInt mode = 0; - TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL()); + aItem.GetNextInt(mode); + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityL: mode %d"), mode); + if ( mode ) + { + TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL(TUid::Uid(mode))); + } + else + { + TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL()); + } - if (err!= KErrNone) - { - iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityL: %d"), err); - } + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityL: error %d"), err); return err; } // ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL +// UtilityL test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL( CStifItemParser& aItem ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityUtilityWithCatL")); + TInt err = KErrNone; + TInt category; + TInt mode = 0; + + if ( aItem.GetNextInt(category) != KErrNone ) + { + iLog->Log(_L("MMPXPlaybackUtilityNewWithCatL - Missing category.")); + err = KErrArgument; + return err; + } + + aItem.GetNextInt(mode); + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityWithCatL: category %d"), category); + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityWithCatL: mode %d"), mode); + if ( mode ) + { + TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL((TMPXCategory)category, TUid::Uid(mode))); + } + else + { + TRAP(err,iMPXPlaybackUtility = MMPXPlaybackUtility::UtilityL((TMPXCategory)category)); + } + + iLog->Log(_L("Cmpxharvestertest::MMPXPlaybackUtilityUtilityWithCatL: error %d"), err); + + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL +// InitL(CMPXCollectionPlaylist) test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL( CStifItemParser& /*aItem*/ ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL")); + TInt err = KErrNone; + CMPXCollectionPlaylist* playlist = CMPXCollectionPlaylist::NewL(); + CleanupStack::PushL(playlist); + TRAP(err,iMPXPlaybackUtility->InitL(*playlist)); + CleanupStack::PopAndDestroy(playlist); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithPlaylistL - error=%d"),err); + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL +// InitL(Uri) test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL( CStifItemParser& aItem ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL")); + TInt err = KErrNone; + TPtrC string; + + if( aItem.GetNextString( string ) == KErrNone ) + { + TBuf<120> uri; + uri.Append(KmpxplaybackutilityTestFilePath); + uri.Append(string); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL - uri = %S."), &uri); + TRAP(err,iMPXPlaybackUtility->InitL(uri)); + + if ( !err ) + { + TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged; + AddExpectedEventL(event, 0, 0); + event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete; + AddExpectedEventL(event, 0, 0); + } + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithUriL - error=%d"),err); + } + else + { + iLog->Log(_L("MMPXPlaybackUtilityInitWithUriL - Missing file name.")); + err = KErrArgument; + } + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL +// Init64L test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL( CStifItemParser& aItem ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL")); + TInt err = KErrNone; + TPtrC string; + + if( aItem.GetNextString( string ) == KErrNone ) + { + TBuf<120> KFrom; + KFrom.Append(KmpxplaybackutilityTestFilePath); + KFrom.Append(string); + if ( iFile.SubSessionHandle() ) + { + iFile.Close(); + } + err = iFile.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters); + if ( err == KErrNone ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL - Open passed.")); + TRAP(err,iMPXPlaybackUtility->InitL(iFile)); + + if ( !err ) + { + TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged; + AddExpectedEventL(event, 0, 0); + event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete; + AddExpectedEventL(event, 0, 0); + } + } + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitWithRFileL - error=%d"),err); + } + else + { + iLog->Log(_L("MMPXPlaybackUtilityInitWithRFileL - Missing file name.")); + err = KErrArgument; + } + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL +// InitStreamingL(Uri) test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL( CStifItemParser& aItem ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL")); + TInt err = KErrNone; + TPtrC string; + TInt accessPoint = 1; + + if( aItem.GetNextString( string ) == KErrNone ) + { + TBuf<120> uri; + uri.Append(KmpxplaybackutilityTestFilePath); + uri.Append(string); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL - uri = %S."), &uri); + TRAP(err,iMPXPlaybackUtility->InitStreamingL(uri, NULL, accessPoint)); + + if ( !err ) + { + TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged; + AddExpectedEventL(event, 0, 0); + event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete; + AddExpectedEventL(event, 0, 0); + } + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithUriL - error=%d"),err); + } + else + { + iLog->Log(_L("MMPXPlaybackUtilityInitStreamingWithUriL - Missing file name.")); + err = KErrArgument; + } + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL +// InitStreamingL(RFile) test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL( CStifItemParser& aItem ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL")); + TInt err = KErrNone; + TPtrC string; + TInt accessPoint = 1; + + if( aItem.GetNextString( string ) == KErrNone ) + { + TBuf<120> KFrom; + KFrom.Append(KmpxplaybackutilityTestFilePath); + KFrom.Append(string); + if ( iFile.SubSessionHandle() ) + { + iFile.Close(); + } + err = iFile.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters); + if ( err == KErrNone ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL - Open passed.")); + TRAP(err,iMPXPlaybackUtility->InitStreamingL(iFile, accessPoint)); + + if ( !err ) + { + TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged; + AddExpectedEventL(event, 0, 0); + event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete; + AddExpectedEventL(event, 0, 0); + } + } + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreamingWithRFileL - error=%d"),err); + } + else + { + iLog->Log(_L("MMPXPlaybackUtilityInitStreamingWithRFileL - Missing file name.")); + err = KErrArgument; + } + return err; + } + +// ----------------------------------------------------------------------------- // Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L // Init64L test method function. // (other items were commented in a header). // ----------------------------------------------------------------------------- // -TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L(CStifItemParser& aItem) +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L( CStifItemParser& aItem ) { - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L testing Init64L() begin")); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L")); TInt err = KErrNone; #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API err = KErrNotSupported; @@ -149,10 +569,18 @@ err = iFile64.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters); if ( err == KErrNone ) { - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L testing Init64L() Open passed.")); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L - Open passed.")); TRAP(err,iMPXPlaybackUtility->Init64L(iFile64)); + + if ( !err ) + { + TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged; + AddExpectedEventL(event, 0, 0); + event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete; + AddExpectedEventL(event, 0, 0); + } } - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L testing Init64L() error=%d"),err); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInit64L - error=%d"),err); } else { @@ -169,13 +597,13 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L(CStifItemParser& aItem) +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L( CStifItemParser& aItem ) { - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L testing InitStreaming64L() begin")); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L")); TInt err = KErrNone; #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API err = KErrNotSupported; - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L testing InitStreaming64L() error=%d"),err); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L - error=%d"),err); #else // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API TPtrC string; TInt accessPoint = 1; @@ -192,10 +620,18 @@ err = iFile64.Open(iFs, KFrom, EFileRead | EFileShareReadersOrWriters); if ( err == KErrNone ) { - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L testing InitStreaming64L() Open passed.")); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L - Open passed.")); TRAP(err,iMPXPlaybackUtility->InitStreaming64L(iFile64, accessPoint)); + + if ( !err ) + { + TInt event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EPlayerChanged; + AddExpectedEventL(event, 0, 0); + event = KGeneralPlaybackMsgOffset + TMPXPlaybackMessage::EInitializeComplete; + AddExpectedEventL(event, 0, 0); + } } - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L testing InitStreaming64L() error=%d"),err); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityInitStreaming64L - error=%d"),err); } else { @@ -212,22 +648,106 @@ // (other items were commented in a header). // ----------------------------------------------------------------------------- // -TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L(CStifItemParser& /*aItem*/) +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L( CStifItemParser& /*aItem*/ ) { - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L testing File64L() begin")); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L")); TInt err = KErrNone; #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API err = KErrNotSupported; - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L testing File64L() error=%d"),err); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L - error=%d"),err); #else // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API - RFile64* file64Ptr; + RFile64* file64Ptr=NULL; TRAP(err, file64Ptr=iMPXPlaybackUtility->Source()->File64L()); if ( !file64Ptr->SubSessionHandle() ) { iLog->Log(_L("MMPXPlaybackUtilityFile64L - file64 = NULL.")); } - iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L testing File64L() error=%d"),err); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityFile64L - error=%d"),err); #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API return err; } +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL +// AddObserverL test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL( CStifItemParser& /*aItem*/ ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL")); + TInt err = KErrNone; + TRAP(err, iMPXPlaybackUtility->AddObserverL(*this)); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityAddObserverL - error=%d"),err); + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL +// RemoveObserverL test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL( CStifItemParser& /*aItem*/ ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL")); + TInt err = KErrNone; + TRAP(err, iMPXPlaybackUtility->RemoveObserverL(*this)); + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityRemoveObserverL - error=%d"),err); + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL +// RemoveObserverL test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL(CStifItemParser& aItem) + { + iLog->Log(_L("Cmpxplaybackutilitytest::MMPXPlaybackUtilityPlayerManagerSelectPlayerL")); + TInt uidInt; + TInt err = KErrNone; + + // read in UID + if ( aItem.GetNextInt(uidInt) != KErrNone ) + { + iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - Missing UID.")); + err = KErrArgument; + return err; + } + + iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - UID = 0x%x."), uidInt); + if ( iMPXPlaybackUtility ) + { + MMPXPlayerManager& manager = iMPXPlaybackUtility->PlayerManager(); + TRAP( err, manager.SelectPlayerL( TUid::Uid(uidInt) ) ); + iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - SelectPlayer err = %d."), err); + } + else + { + iLog->Log(_L("MMPXPlaybackUtilityPlayerManagerSelectPlayerL - MPX Playback Utility not created.")); + err = KErrGeneral; + } + return err; + } + +// ----------------------------------------------------------------------------- +// Cmpxplaybackutilitytest::EndTest +// ----------------------------------------------------------------------------- +// +TInt Cmpxplaybackutilitytest::EndTest( CStifItemParser& /*aItem*/ ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::EndTest")); + TInt err = iCallbackError; + + // check if event queue is empty + if ( !err && (iExpectedEventArray->Count() > 0 ) ) + { + iLog->Log(_L("Cmpxplaybackutilitytest::EndTest error = KErrTimedOut")); + err = KErrTimedOut; + } + return err; + } + +// end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_view_utility_api/group/bld.inf --- a/mmappfw_plat/mpx_view_utility_api/group/bld.inf Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/mpx_view_utility_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* 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" @@ -26,4 +26,7 @@ ../inc/mpxviewactivationobserver.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewactivationobserver.h) ../inc/mpxviewpluginmanager.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewpluginmanager.h) ../inc/mpxviewutility.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewutility.h) -../inc/mpxviewutilitycommanddef.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewutilitycommanddef.h) +../inc/mpxviewutilitycommanddef.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewutilitycommanddef.h) + +// new for 10.1 QT +../inc/mpxviewframeworkqt.h MW_LAYER_PLATFORM_EXPORT_PATH(mpxviewframeworkqt.h) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mpx_view_utility_api/inc/mpxviewframeworkqt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mpx_view_utility_api/inc/mpxviewframeworkqt.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,52 @@ +/* +* 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 MPXVIEWFRAMEWORK_H +#define MPXVIEWFRAMEWORK_H + +#include +#include +#include +#include + +class MpxViewPlugin; +class HbView; + +#ifdef BUILD_VIEWFRAMEWORK +#define VFDLL_EXPORT Q_DECL_EXPORT +#else +#define VFDLL_EXPORT Q_DECL_IMPORT +#endif + +class VFDLL_EXPORT MpxViewFramework : public HbMainWindow + { + Q_OBJECT + +public: + MpxViewFramework(QWidget *parent = 0, Hb::WindowFlags windowFlags = Hb::WindowFlagNone); + + virtual ~MpxViewFramework(); + + virtual MpxViewPlugin *resolvePlugin(const QList& requestedPlugins); + +private: + + Q_DISABLE_COPY(MpxViewFramework) + + }; + +#endif //VIEWFRAMEWORK_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mtp_keys_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mtp_keys_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,26 @@ +/* +* 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: File that exports the files belonging to +: MTP Keys API +* +*/ + + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +../inc/mtpprivatepskeys.h MW_LAYER_PLATFORM_EXPORT_PATH(mtpprivatepskeys.h) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mtp_keys_api/inc/MtpPrivatePSKeys.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mtp_keys_api/inc/MtpPrivatePSKeys.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,33 @@ +/* +* 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: Header Information for MTP Private Publish & Subsribe Keys +* +*/ + + +#ifndef MTPPRIVATEPSKEYS_H +#define MTPPRIVATEPSKEYS_H + +// Security Code UI Originator API +const TUid KMtpPSUid = {0x101FFC51}; // Mtp Key UID +const TInt KMtpPSStatus = 1; // Mtp UID + +enum TMtpPSStatus + { + EMtpPSStatusUninitialized = 0, + EMtpPSStatusActive, + EMtpPSStatusReadyToSync + }; + +#endif // MTPPRIVATEPSKEYS_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/mtp_keys_api/mtp_keys_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/mtp_keys_api/mtp_keys_api.metaxml Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,17 @@ + + + MTP Keys API + This API defines the Central Repository and Publish & Subscribe keys defined by MTP. + c++ + mtp + + + + + + + + no + no + + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/group/bld.inf Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,52 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/qtms.h MW_LAYER_PLATFORM_EXPORT_PATH(qtms.h) +../inc/qtmsamrformat.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsamrformat.h) +../inc/qtmsbuffer.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsbuffer.h) +../inc/qtmscall.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmscall.h) +../inc/qtmsclientsink.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsclientsink.h) +../inc/qtmsclientsource.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsclientsource.h) +../inc/qtmsdtmf.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsdtmf.h) +../inc/qtmseffect.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmseffect.h) +../inc/qtmsfactory.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsfactory.h) +../inc/qtmsformat.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsformat.h) +../inc/qtmsg711format.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsg711format.h) +../inc/qtmsg729format.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsg729format.h) +../inc/qtmsgaineffect.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsgaineffect.h) +../inc/qtmsglobalgaineffect.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalgaineffect.h) +../inc/qtmsglobalrouting.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalrouting.h) +../inc/qtmsglobalvoleffect.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsglobalvoleffect.h) +../inc/qtmsilbcformat.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsilbcformat.h) +../inc/qtmspcmformat.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmspcmformat.h) +../inc/qtmsringtone.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsringtone.h) +../inc/qtmssink.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmssink.h) +../inc/qtmssource.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmssource.h) +../inc/qtmsstream.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsstream.h) +../inc/qtmsvolumeeffect.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsvolumeeffect.h) +../inc/qtmsmicsource.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmicsource.h) +../inc/qtmsmodemsink.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmodemsink.h) +../inc/qtmsmodemsource.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsmodemsource.h) +../inc/qtmsspeakersink.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsspeakersink.h) +../inc/qtmsinbandtone.h MW_LAYER_PLATFORM_EXPORT_PATH(qtmsinbandtone.h) diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtms.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtms.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,209 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_H +#define QTMS_H + +// Include files +#include +#include + +namespace QTMS { + +// FORWARD DECLARATION +class QTMSFormat; + +// Result codes +#define QTMS_RESULT_SUCCESS ((gint)0x00000000) +#define QTMS_RESULT_ALREADY_EXIST ((gint)0x00000001) +#define QTMS_RESULT_DOES_NOT_EXIST ((gint)0x00000002) +#define QTMS_RESULT_NULL_ARGUMENT ((gint)0x00000003) +#define QTMS_RESULT_INVALID_ARGUMENT ((gint)0x00000004) +#define QTMS_RESULT_INVALID_STATE ((gint)0x00000005) +#define QTMS_RESULT_UNINITIALIZED_OBJECT ((gint)0x00000006) +#define QTMS_RESULT_INSUFFICIENT_MEMORY ((gint)0x00000007) +#define QTMS_RESULT_GENERAL_ERROR ((gint)0x00000008) +#define QTMS_RESULT_FATAL_ERROR ((gint)0x00000009) +#define QTMS_RESULT_OPERATION_CANCELLED ((gint)0x0000000A) +#define QTMS_RESULT_ILLEGAL_OPERATION ((gint)0x0000000B) +#define QTMS_RESULT_BUFFER_LATENCY_ERROR ((gint)0x0000000C) +#define QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED ((gint)0x0000000D) +#define QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED ((gint)0x0000000E) +#define QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED ((gint)0x0000000F) +#define QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED ((gint)0x00000010) +#define QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED ((gint)0x00000011) +#define QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED ((gint)0x00000012) +#define QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED ((gint)0x00000013) +#define QTMS_RESULT_VERSION_NOT_SUPPORTED ((gint)0x00000014) +#define QTMS_RESULT_FORMAT_TYPE_UNSPECIFIED ((gint)0x00000015) +#define QTMS_RESULT_FEATURE_NOT_SUPPORTED ((gint)0x00000016) + +// Reasons codes +#define QTMS_REASON_CLIENT_INITIATED ((gint)0x00000000) +#define QTMS_REASON_DEVICE_IN_USE ((gint)0x00000001) // Device not available +#define QTMS_REASON_DEVICE_TAKEN ((gint)0x00000002) // Preemption +#define QTMS_REASON_INSUFFICIENT_MEMORY ((gint)0x00000003) // Memory +#define QTMS_REASON_PERMISSION_DENIED ((gint)0x00000004) // Client app does not have perission +#define QTMS_REASON_EMERGENCY_CALL_ONGOING ((gint)0x00000005) // Already ongoing emergency call +#define QTMS_REASON_EMERGENCY_CALL_STARTED ((gint)0x00000006) // Preemption because of emergency call +#define QTMS_REASON_SOURCE_NULL ((gint)0x00000007) // Could be checked on client side +#define QTMS_REASON_SOURCE_NOT_SUPPORTED ((gint)0x00000008) +#define QTMS_REASON_FORMAT_NULL ((gint)0x00000009) // Could be checked on client side +#define QTMS_REASON_EFFECT_NOT_SUPPORTED ((gint)0x0000000A) +#define QTMS_REASON_SINK_NULL ((gint)0x0000000B) // Could be checked on client side +#define QTMS_REASON_SINK_NOT_SUPPORTED ((gint)0x0000000C) +#define QTMS_REASON_CALL_NOT_ACTIVE ((gint)0x0000000D) + +// Event codes +#define QTMS_EVENT_STREAM_STATE_CHANGED ((gint)0x00000000) +#define QTMS_EVENT_SOURCE_FILL_BUFFER ((gint)0x00000001) +#define QTMS_EVENT_SOURCE_PROCESSED_BUFFER ((gint)0x00000002) +#define QTMS_EVENT_SINK_PROCESS_BUFFER ((gint)0x00000003) +#define QTMS_EVENT_EFFECT_VOL_CHANGED ((gint)0x00000004) +#define QTMS_EVENT_EFFECT_GAIN_CHANGED ((gint)0x00000005) +#define QTMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED ((gint)0x00000006) +#define QTMS_EVENT_ROUTING_OUTPUT_CHANGED ((gint)0x00000007) +#define QTMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE ((gint)0x00000008) +#define QTMS_EVENT_RINGTONE_OPEN_COMPLETE ((gint)0x00000009) +#define QTMS_EVENT_RINGTONE_PLAY_COMPLETE ((gint)0x0000000A) +#define QTMS_EVENT_RINGTONE_DEINIT_COMPLETE ((gint)0x0000000B) +#define QTMS_EVENT_DTMF_TONE_STARTED ((gint)0x0000000C) +#define QTMS_EVENT_DTMF_TONE_STOPPED ((gint)0x0000000D) +#define QTMS_EVENT_INBAND_TONE_STARTED ((gint)0x0000000E) +#define QTMS_EVENT_INBAND_TONE_STOPPED ((gint)0x0000000F) + +// Stream states +typedef gint QTMSStreamState; +#define QTMS_STREAM_UNINITIALIZED ((gint)0x00000000) +#define QTMS_STREAM_INITIALIZED ((gint)0x00000001) +#define QTMS_STREAM_PAUSED ((gint)0x00000002) +#define QTMS_STREAM_STARTED ((gint)0x00000003) + +#define DEFAULT_CALL_CONTEXT ((gint)1) + +// QTMS object types +typedef gint QTMSStreamType; +#define QTMS_STREAM_UPLINK ((gint)0) +#define QTMS_STREAM_DOWNLINK ((gint)1) + +typedef gint QTMSBufferType; +#define QTMS_BUFFER_MEMORY ((gint)2) + +typedef gint QTMSSourceType; +#define QTMS_SOURCE_CLIENT ((gint)3) +#define QTMS_SOURCE_MODEM ((gint)4) +#define QTMS_SOURCE_MIC ((gint)5) + +typedef gint QTMSSinkType; +#define QTMS_SINK_CLIENT ((gint)6) +#define QTMS_SINK_MODEM ((gint)7) +#define QTMS_SINK_SPEAKER ((gint)8) + +typedef gint QTMSEffectType; +#define QTMS_EFFECT_GLOBAL_VOL ((gint)9) +#define QTMS_EFFECT_GLOBAL_GAIN ((gint)10) +#define QTMS_EFFECT_VOLUME ((gint)11) +#define QTMS_EFFECT_GAIN ((gint)12) + +typedef gint QTMSFormatType; +#define QTMS_FORMAT_PCM ((gint)13) +#define QTMS_FORMAT_AMR ((gint)14) +#define QTMS_FORMAT_G711 ((gint)15) +#define QTMS_FORMAT_G729 ((gint)16) +#define QTMS_FORMAT_ILBC ((gint)17) + +typedef gint QTMSRingToneType; +#define QTMS_RINGTONE_DEFAULT ((gint)0) +#define QTMS_RINGTONE_FILE ((gint)1) +#define QTMS_RINGTONE_SEQUENCE ((gint)2) +#define QTMS_RINGTONE_BEEP_ONCE ((gint)3) +#define QTMS_RINGTONE_SILENT ((gint)4) +#define QTMS_RINGTONE_UNSECURE_VOIP ((gint)5) + +typedef gint QTMSRTPSessionType; +#define QTMS_SESSION_RTP_PULL ((gint)0) +#define QTMS_SESSION_RTP_PUSH ((gint)1) + +// QTMS vectors +typedef std::vector FormatVector; +typedef std::vector BitRateVector; +typedef std::vector OutputVector; + +// Call types +typedef gint QTMSCallType; +#define QTMS_CALL_CS ((gint)0) +#define QTMS_CALL_ECS ((gint)1) +#define QTMS_CALL_IP ((gint)2) +#define QTMS_CALL_RTP ((gint)3) + +// Codec modes +typedef gint QTMSG711CodecMode; +#define QTMS_G711_CODEC_MODE_ALAW ((gint)0) +#define QTMS_G711_CODEC_MODE_MULAW ((gint)1) + +typedef gint QTMSILBCCodecMode; +#define QTMS_ILBC_CODEC_MODE_20MS_FRAME ((gint)0) +#define QTMS_ILBC_CODEC_MODE_30MS_FRAME ((gint)1) + +// Audio output types +typedef gint QTMSAudioOutput; +#define QTMS_AUDIO_OUTPUT_NONE ((gint)0) +#define QTMS_AUDIO_OUTPUT_PUBLIC ((gint)1) +#define QTMS_AUDIO_OUTPUT_PRIVATE ((gint)2) +#define QTMS_AUDIO_OUTPUT_HANDSET ((gint)3) +#define QTMS_AUDIO_OUTPUT_LOUDSPEAKER ((gint)4) +#define QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY ((gint)5) +#define QTMS_AUDIO_OUTPUT_ACCESSORY ((gint)6) +#define QTMS_AUDIO_OUTPUT_ETTY ((gint)7) +#define QTMS_AUDIO_OUTPUT_NOT_ACTIVE ((gint)8) + +typedef gint QTMSInbandToneType; +#define QTMS_INBAND_USER_BUSY ((gint)0) +#define QTMS_INBAND_RADIO_PATH_NOT_AVAIL ((gint)1) +#define QTMS_INBAND_CONGESTION ((gint)2) +#define QTMS_INBAND_SPECIAL_INFO ((gint)3) +#define QTMS_INBAND_REORDER ((gint)4) +#define QTMS_INBAND_REMOTE_ALEARTING ((gint)5) +#define QTMS_INBAND_CALL_WAITING ((gint)6) +#define QTMS_INBAND_DATA_CALL ((gint)7) +#define QTMS_INBAND_NO_SEQUENCE ((gint)8) +#define QTMS_INBAND_BEEP_SEQUENCE ((gint)9) + +// Structure signalling callback notifications +struct QTMSSignalEvent + { + guint type; + guint reason; + gpointer event_data; + gpointer user_data; + gint curr_state; + gint prev_state; + }; + +// Structure for global volume effect change event +struct QTMSVolumeEventChangeData + { + guint level; + QTMSAudioOutput output; + gboolean output_changed; + }; + +} //namespace QTMS + +#endif // QTMS_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsamrformat.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsamrformat.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,62 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_AMR_FORMAT_H +#define QTMS_AMR_FORMAT_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +/** + * QTMSAMRFormat class + * + * This class provides access methods to configure and query AMR-NB codec + * format settings. + * + * This format class can be used for both the encoder and decoder. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSAMRFormat : public QObject, + public QTMSFormat + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSAMRFormat(); + +protected: + /** + * Constructor + */ + QTMSAMRFormat(); + }; + +} //namespace QTMS + +#endif //QTMS_AMR_FORMAT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsbuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsbuffer.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,120 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_BUFFER_H +#define QTMS_BUFFER_H + +#include +#include + +namespace QTMS { + +/** + * QTMSBuffer class + * + * This interface provides data buffers to QTMS clients. This class allows + * clients to allocate data by themselves or request a specific size of the + * buffer from the factory. + * + * @lib QTMSapi.lib + * + */ +class QTMSBuffer : public QObject + { + Q_OBJECT +public: + /** + * Return buffer type. + * + * @param buftype + * Type of the buffer object (QTMS_BUFFER_MEMORY). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSBufferType& buftype) = 0; + + /** + * Returns time stamp of the buffer so that the framework can determine + * the time at which this buffer has to be rendered by the output device + * sink. + * + * @param ts + * Time stamp in microseconds. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetTimeStamp(guint64& ts) = 0; + + /** + * Sets the time stamp on the Buffer so that the framework can determine + * the time at which this buffer has to be rendered by the output device + * sink. + * + * @param ts + * Time stamp in microseconds. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint SetTimeStamp(const guint64 ts) = 0; + + /** + * Returns size of data in the buffer. + * + * @param size + * Size of data in the buffer. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetDataSize(guint& size) = 0; + + /** + * Set size of data in the buffer after filling in by the client. + * + * @param size + * Size of data in the buffer. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint SetDataSize(const guint size) = 0; + + /** + * Return pointer to the memory location of the data associated with this + * buffer. + * + * @param bufptr + * Pointer to the data stored in the buffer. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetDataPtr(guint8*& bufptr) = 0; + }; + +} //namespace QTMS + +#endif //QTMS_BUFFER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmscall.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmscall.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,157 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_CALL_H +#define QTMS_CALL_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSCall; +} + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSStream; + +/** + * QTMSCall class + * + * This class instantiates QTMS call object of one of the following types: + * QTMS_CALL_CS + * QTMS_CALL_ECS + * QTMS_CALL_IP + * + * Each QTMS call contains at least 1 stream (uplink or downlink). + * + * Usage: + * + * QTMSFactory *iFactory; + * QTMSCall *iCall; + * QTMSStream *iUplink; + * QTMSStream *iDownlink; + * gint err; + * err = QTMSFactory::CreateFactory(iFactory); + * err = iFactory->CreateCall(QTMS_CALL_IP, iCall); + * err = iCall->CreateStream(QTMS_STREAM_UPLINK, iUplink); + * err = iCall->CreateStream(QTMS_STREAM_DOWNLINK, iDownlink); + * ... + * err = iCall->DeleteStream(iDownlink); + * err = iCall->DeleteStream(iUplink); + * err = iFactory->DeleteCall(iCall); + * delete iFactory; + * ... + * + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSCall : public QObject + { + Q_OBJECT +public: + /** + * Destructor + * + */ + virtual ~QTMSCall(); + + /** + * Return call type. + * + * This function can be called at any time. + * + * Possible call types are as follows: + * QTMS_CALL_CS, + * QTMS_CALL_ECS + * QTMS_CALL_IP + * + * @return + * Call type as indicated above. + * + */ + QTMSCallType GetCallType(); + + /** + * Get call context ID. + * + * This ID is passed during the creation of the call object. + * + * @param ctxid + * Context ID. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_FATAL_ERROR if an error occured. + * + */ + gint GetCallContextId(guint& ctxid); + + /** + * Create QTMS stream of the given type. + * + * @param type + * Stream type to be created. + * + * @param strm + * Created stream. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INSUFFICIENT_MEMORY if call creation failed due to + * insufficient memory. + * QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED if stream type is not + * supported. + * QTMS_RESULT_FATAL_ERROR if an error occured. + * QTMS_REASON_EMERGENCY_CALL_ONGOING if emergency call is active. + * QTMS_REASON_PERMISSION_DENIED if permission is denied. + * + */ + gint CreateStream(const QTMSStreamType type, QTMSStream*& strm); + + /** + * Delete stream object. + * + * @param strm + * Stream to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_ARGUMENT if the stream is not valid. + */ + gint DeleteStream(QTMSStream*& strm); + +protected: + /** + * Constructor + */ + QTMSCall(); + +protected: + TMS::TMSCall* iTmsCall; + }; + +} //namespace QTMS + +#endif //QTMS_CALL_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsink.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,111 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_CLIENT_SINK_H +#define QTMS_CLIENT_SINK_H + +#include +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSink; +class TMSBuffer; +} + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSBuffer; + +/** + * QTMSClientSink class + * + * This class provides QTMS client sink interface. It serves as a data sink + * to the QTMS, which supplies the client with buffers recorded by the a/v + * recording device. The constant flow of data between the a/v recorder + * device and the client is accomplished by sending BufferProcessed() events + * in response to TMSClientSinkObserver::ProcessBuffer sink observer callbacks. + * This indicates to the QTMS that the supplied buffer has been consumed by the + * client and it is ready to receive more recorded data. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSClientSink : public QObject, + public QTMSSink + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSClientSink(); + + /** + * Tell the sink that the buffer passed in has been processed by + * the client and is ready to be reused by the Sink. + * + * This function must be called in response to the callback from the + * sink observer QTMSClientSinkObserver::ProcessBuffer(). + * + * @param buffer + * The buffer which has been processed by the client (filled in + * with data). + * + * @return + * Status of the operation. + * + */ + gint BufferProcessed(TMS::TMSBuffer* buffer); + + /** + * Return sink type. + * + * This function can be called at any time. + * + * @param sinktype + * The type of sink object (QTMS_SINK_CLIENT). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSSinkType& sinktype); + + Q_SIGNALS: + void ProcessBuffer(const TMS::TMSBuffer* buffer); + +protected: + /** + * Constructor + */ + QTMSClientSink(); + +protected: + TMS::TMSSink* iSink; + }; + +} //namespace QTMS + +#endif //QTMS_CLIENT_SINK_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsclientsource.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,173 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_CLIENT_SOURCE_H +#define QTMS_CLIENT_SOURCE_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSource; +class TMSBuffer; +} + +namespace QTMS { + +/** + * QTMSClientSource class + * + * This class instantiates QTMS client source interface. It serves as a data + * source to the QTMS, through which the client submits data buffers to the + * QTMS call server for playback on the audio and/or video output device. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSClientSource : public QObject, + public QTMSSource + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSClientSource(); + + /** + * PULL MODE ONLY + * + * Tell the source that the buffer passed in has been filled in with data + * by the client and it is ready to be sent do the QTMS for processing. + * + * This function must be called in response to the callback from the + * source observer QTMSClientSourceObserver::FillBuffer. + * + * @param buffer + * The buffer which has been processed by the client (filled in + * with data). + * + * @return + * Status of the operation. + * + */ + gint BufferFilled(TMS::TMSBuffer& buffer); + + /** + * In the PUSH MODE, tell the source that the supplied buffer filled in + * with data should be queued before being sent for processing by the + * server. All ProcessBuffer requests will be queued until client calls + * Flush(). After all queued buffers are pushed to the server and + * processed, the QTMS will respond by issuing + * QTMSClientSourceObserver::BufferProcessed + * callback event. + * + * @param buffer + * The buffer with audio data supplied by the client for playback. + * + */ + gint ProcessBuffer(TMS::TMSBuffer* buffer); + + /** + * PUSH MODE ONLY + * + * Tell the QTMS framework to queue ProcessBuffer events. To request the + * QTMS push mode operation, the SetEnqueueMode must be called with the + * flag set TRUE. Buffer enqueuing continues until the client calls + * Flush(). At this point all queued data (buffers) are sent over to the + * QTMS for processing and the enqueuing mode is turned OFF. To turn it + * ON again, the client has to call SetEnqueueMode with TRUE parameter. + * + * Has no effect in the PULL mode. + * + * @param enable + * Toggles buffer enqueuing ON and OFF. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint SetEnqueueMode(const gboolean enable); + + /** + * PUSH MODE ONLY + * + * Return current buffer enqueuing mode setting. + * Has no effect in the PULL mode. + * + * @param enable + * Current enqueuing mode. + * + */ + gint GetEnqueueMode(gboolean& enable); + + /** + * PUSH MODE ONLY + * + * Push all queued buffers by ProcessBuffer to the server for processing. + * After calling this function, the enqueuing mode is turned OFF. To set + * it ON, the client has to call SetEnqueueMode again. + * + * Has no effect in the PULL mode. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Flush(); + + /** + * Return the source type. + * + * This function can be called at any time. + * + * @param QTMSSourceType& + * The type of the source object. The supported source types are + * as follows: + * QTMS_SOURCE_CLIENT + * QTMS_SOURCE_MODEM + * QTMS_SOURCE_MIC + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSSourceType& sourcetype); + + Q_SIGNALS: + void FillBuffer(TMS::TMSBuffer& buffer); + void BufferProcessed(const TMS::TMSBuffer* buffer, gint reason); + +protected: + /** + * Constructor + */ + QTMSClientSource(); + +protected: + TMS::TMSSource* iSource; + }; + +} //namespace QTMS + +#endif //QTMS_CLIENT_SOURCE_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsdtmf.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsdtmf.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,122 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_DTMF_H +#define QTMS_DTMF_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSDTMF; +} + +namespace QTMS { + +/** + * QTMSDTMFclass + * + * This class provides DTMF playback capability to the QTMS clients. Each + * DTMF player session is associated either with an uplink or downlink stream. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSDTMF : public QObject + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSDTMF(); + + /** + * Starts DTMF playback. In the case of downlink, the tone will be played + * locally. In case of uplink, the network will play tones. + * + * Common for CS and VOIP (uplink and downlink) + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Start(); + + /** + * Stops DTMF playback. + * Common for CS and VOIP (Uplink and Downlink). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Stop(); + + /** + * Supply DTMF player with a string of tones to be played on local + * playback device or sent via the uplink. + * + * @param string + * String containing one or more DTMF digits. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint SetTone(GString* string); + + /** + * Allows a client to continue or cancel the sending of a DTMF string + * when it was stopped by the use of ‘w’ char in the string. + * The client will set sending param to true if it wishes to continue + * the DTMF string sending and will set sending param to false if it + * wishes to discard the rest of the DTMF string. + * Reference: Multimode ETel API Design Document + * + * For CS calltype + * + * @param sending + * Boolean to continue sending DTMF string. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint ContinueDTMFStringSending(gboolean sending); + + Q_SIGNALS: + void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event); + +protected: + + /** + * Constructor + */ + QTMSDTMF(); + +protected: + TMS::TMSDTMF* iDtmf; + }; + +} //namespace QTMS + +#endif //__QTMS_DTMF_H__ + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmseffect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmseffect.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,55 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_EFFECT_H +#define QTMS_EFFECT_H + +#include +#include + +namespace QTMS { + +/** + * QTMSEffect class + * + * Base class for all effect object classes. + * This is an abstract class. + * + * @lib QTMSapi.lib + * + */ +class QTMSEffect + { +public: + /** + * Return effect type. + * + * @param effecttype + * Type of the effect object. + * + * @return + * The status of the operation. + * + */ + virtual gint GetType(QTMSEffectType& effecttype) = 0; + }; + +} //namespace QTMS + +#endif //QTMS_EFFECT_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsfactory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsfactory.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,458 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_FACTORY_H +#define QTMS_FACTORY_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSCall; +class QTMSFormat; +class QTMSEffect; +class QTMSBuffer; +class QTMSSource; +class QTMSSink; +class QTMSFactoryImpl; +class QTMSVer; // QTMS version definition +class QTMSGlobalRouting; +class QTMSDTMF; +class QTMSRingTone; +class QTMSInbandTone; + +/** + * QTMSFactory class + * + * This class serves as a factory crating all necessary QTMS components. + * + * Usage: + * + * QTMSFactory* iFactory; + * QTMSCall* iCall; + * gint err; + * err = QTMSFactory::CreateFactory(iFactory); + * err = iFactory->CreateCall(QTMS_CALL_IP, iCall); + * ... + * err = iFactory->DeleteCall(iCall); + * delete iFactory; + * ... + * + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSFactory : public QObject + { + Q_OBJECT +public: + /** + * Returns pointer reference to created QTMS Factory object. The specified + * API version will allow using different QTMS API variants. + * + * @param QTMSfactory + * Created Factory object. + * + * @param ver + * API version which should be used to create QTMS components. + * + * @return + * QTMS_RESULT_SUCCESS if factory is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if factory creation failed due to + * insufficient of memory. + * QTMS_RESULT_VERSION_NOT_SUPPORTED if requested API version is not + * supported. + * + */ + static gint CreateFactory(QTMSFactory*& tmsfactory, QTMSVer& ver); + + /** + * Destructor + * + * Deletes the QTMS Factory. + * + */ + virtual ~QTMSFactory(); + + /** + * Creates QTMS Call of the given type with context ID. + * + * @param ctype + * Call type to be created. + * Supported call types: + * QTMS_CALL_CS + * QTMS_CALL_ECS + * QTMS_CALL_IP + * + * @param QTMScall + * Created Call object. + * + * @param ctxid + * The Context ID to be assigned to the call. The default is + * DEFAULT_CALL_CONTEXT. + * + * @return + * QTMS_RESULT_SUCCESS if call is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if call creation failed due to + * insufficient memory. + * QTMS_RESULT_CALL_TYPE_NOT_SUPPORTED if calltype is not supported. + * QTMS_RESULT_INVALID_ARGUMENT if the context id is not valid. + * QTMS_RESULT_FATAL_ERROR if there is any other error. + * + */ + gint CreateCall(QTMSCallType ctype, QTMSCall*& QTMScall, + guint ctxid = DEFAULT_CALL_CONTEXT); + + /** + * Deletes QTMS Call. + * + * @param QTMSct + * The call to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if call is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the call is not valid. + * + */ + gint DeleteCall(QTMSCall*& qtmsct); + + /** + * Is the given calltype supported by the QTMS API. + * + * @param ctype + * The call type to be validated. + * + * @param flag + * Indicates wheter the call type is supported or not. + * + * @return + * QTMS_RESULT_SUCCESS if operation was successful. + * QTMS_RESULT_FATAL_ERROR if operation failed. + * + */ + gint IsCallTypeSupported(QTMSCallType ctype, gboolean& flag); + + /** + * Returns supported codec format types. + * + * @param strmtype + * Stream type: Uplink or Downlink + * + * @param fmtlist + * Format vector in which the supported formats are stored + * + * @return + * QTMS_RESULT_SUCCESS if operation was successful. + * QTMS_RESULT_FATAL_ERROR if operation failed. + * + */ + gint GetSupportedFormats(const QTMSStreamType strmtype, + FormatVector& fmtlist); + + /** + * Creates Format object of the given format type. + * + * @param fmttype + * Format type to be created. + * + * @param QTMSfmt + * Crated Format object. + * + * @return + * QTMS_RESULT_SUCCESS if format is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if format creation failed due to + * insufficient of memory. + * QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED if format type is not + * supported. + * + */ + gint CreateFormat(QTMSFormatType fmttype, QTMSFormat*& qtmsfmt); + + /** + * Deletes Format object. + * + * @param QTMSfmt + * Format to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if format is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the format is not valid. + * + */ + gint DeleteFormat(QTMSFormat*& qtmsfmt); + + /** + * Creates Effect object of the given type. + * + * @param QTMSeffecttype + * Effect type to be created. + * + * @param QTMSeffect + * Created Effect object. + * + * @return + * QTMS_RESULT_SUCCESS if effect is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if effect creation failed due to + * insufficient memory. + * QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED if the effect type is not + * supported. + * + */ + gint CreateEffect(QTMSEffectType QTMSeffecttype, + QTMSEffect*& qtmseffect); + + /** + * Deletes Effect object. + * + * @param QTMSeffect + * Effect object to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if effect is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the effect is not valid. + */ + gint DeleteEffect(QTMSEffect*& qtmseffect); + + /** + * Creates Buffer object of the given type and size. + * The memory is allocated on the heap. + * + * @param buffertype + * Buffer type to be created. + * + * @param size + * Size of the buffer to be created. + * + * @param QTMSbuffer + * Created buffer object. + * + * @return + * QTMS_RESULT_SUCCESS if buffer is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if buffer creation failed due to + * insufficient memory. + * QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED if the buffer type is not + * supported. + * + */ + gint CreateBuffer(QTMSBufferType buffertype, guint size, + QTMSBuffer*& qtmsbuffer); + + /** + * Deletes the Buffer object. + * + * @param QTMSbuffer + * Buffer to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if buffer is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the buffer is not valid. + */ + gint DeleteBuffer(QTMSBuffer*& qtmsbuffer); + + /** + * Creates the Source object of the given type. + * + * @param srctype + * Source type to be created. + * + * @param QTMSsrc + * Crated source object. + * + * @return + * QTMS_RESULT_SUCCESS if source is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if source creation failed due to + * lack of memory. + * QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if the source type is not + * supported. + * + */ + gint CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc); + + /** + * Deletes the Source object. + * + * @param QTMSsrc + * Source to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if source is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the source is not valid. + * + */ + gint DeleteSource(QTMSSource*& qtmssrc); + + /** + * Creates the Sink object of the given QTMSSinkType. + * + * @param sinktype + * Sink type to be created. + * + * @param QTMSsink + * Created sink object. + * + * @return + * QTMS_RESULT_SUCCESS if sink is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if sink creation failed due to + * lack of memory. + * QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if the sink type is not + * supported. + * + */ + gint CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink); + + /** + * Deletes the Sink object. + * + * @param QTMSsink + * The sink to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if sink is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the sink is not valid. + */ + gint DeleteSink(QTMSSink*& qtmssink); + + /** + * Creates QTMSGlobalRouting object. + * + * @param globrouting + * Created global routing object. + * + * @return + * QTMS_RESULT_SUCCESS if global routing object is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY if global routing creation failed + * due to lack of memory. + * QTMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED if global routing is not + * supported. + * + */ + gint CreateGlobalRouting(QTMSGlobalRouting*& globrouting); + + /** + * Deletes QTMSGlobalRouting object. + * + * @param globrouting + * Global routing object to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if global routing object is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if the global routing object is invalid. + */ + gint DeleteGlobalRouting(QTMSGlobalRouting*& globrouting); + + /** + * Create DTMF player object. + * + * @param streamtype + * Stream ID to be used to create the DTMF player. + * QTMS_STREAM_UPLINK + * QTMS_STREAM_DOWNLINK + * + * @param dtmf + * Created DTMF player. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INSUFFICIENT_MEMORY if DTMF player creation failed due + * to insufficient memory. + * QTMS_RESULT_FATAL_ERROR if an error occured. + * QTMS_REASON_EMERGENCY_CALL_ONGOING if emergency call is active. + * QTMS_REASON_PERMISSION_DENIED if permission is denied. + * + */ + gint CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& dtmf); + + /** + * Delete DTMF player object. + * + * @param dtmf + * DTMF player to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_ARGUMENT if the DTMF player is not valid. + * + */ + gint DeleteDTMF(QTMSDTMF*& dtmf); + + /** + * Creates QTMSRingTone player object for audio ring tone. + * + * @param rt + * RingTone player object to be created. + * + * @return + * QTMS_RESULT_SUCCESS when object is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY when object creation failed due to + * insufficient memory. + */ + gint CreateRingTonePlayer(QTMSRingTone*& rt); + + /** + * Deletes QTMSRingTone object. + * + * @param rt + * RingTone player object to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS when object is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if RingTone player object is invalid. + */ + gint DeleteRingTonePlayer(QTMSRingTone*& rt); + + /** + * Creates QTMSInbandTone player object. + * + * @param inbandtone + * InbandTone player object to be created. + * + * @return + * QTMS_RESULT_SUCCESS when object is created successfully. + * QTMS_RESULT_INSUFFICIENT_MEMORY when object creation failed due to + * insufficient memory. + */ + gint CreateInbandTonePlayer(QTMSInbandTone*& inbandtone); + + /** + * Deletes QTMSInbandTone object. + * + * @param inbandtone + * InbandTone player object to be deleted. + * + * @return + * QTMS_RESULT_SUCCESS when object is deleted successfully. + * QTMS_RESULT_INVALID_ARGUMENT if InbandTone player object is invalid. + */ + gint DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone); + +private: + /** + * Constructor + */ + QTMSFactory(); + +private: + QTMSFactoryImpl* impl; + }; + +} //namespace QTMS + +#endif //QTMS_FACTORY_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsformat.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsformat.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,133 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_FORMAT_H +#define QTMS_FORMAT_H + +#include +#include "qtmswrapperexport.h" + +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +/** + * QTMSFormat class + * + * This is base class for codec format classes. Provides access methods to + * configure and query common codec format settings. + * + * This format class can be used for both the encoder and decoder. + * + * Usage: + * + * QTMSFactory* iFactory; + * QTMSFormat* iFormat + * gint err; + * err = QTMSFactory::CreateFactory(iFactory); + * err = iFactory->Create(QTMS_FORMAT_XXX,iFormat); + * ... + * + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSFormat + { +public: + /** + * Destructor + */ + virtual ~QTMSFormat(); + + /** + * Get supported bitrates. Returns list of supported bitrates for the + * selected encoder + * + * This method is allowable at all times, while actively encoding or not. + * + * @param bitrates + * The typedef std::vector BitRateVector; list of codecs. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint GetSupportedBitRates(BitRateVector& bitrates); + + /** + * Set bitrate. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param bitrate + * Bitrate to be set for the encoder. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_ARGUMENT if requested bitrate is invalid. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint SetBitRate(const guint bitrate); + + /** + * Get current encoder's bitrate. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param bitrate + * Current bitrate. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint GetBitRate(guint& bitrate); + + /** + * Return format type. + * + * @param fmttype + * Type of the format object. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSFormatType& fmttype); + +protected: + /** + * Constructor + */ + QTMSFormat(); + +protected: + TMS::TMSFormat* iFormat; + }; + +} //namespace QTMS + +#endif //QTMS_FORMAT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg711format.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg711format.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,205 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_G711_FORMAT_H +#define QTMS_G711_FORMAT_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +/** + * QTMSG711Format class + * + * This class provides access methods to configure and query G.711 codec + * format settings. + * + * This format class can be used for both the encoder and decoder. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSG711Format : public QObject, + public QTMSFormat + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSG711Format(); + + /** + * Set G.711 codec mode. + * + * This method is allowable when encoding is not active; i.e. anytime + * before encoding is started or after it is stopped. + * + * Supported G.711 codec modes are: + * QTMS_G711_CODEC_MODE_ALAW + * QTMS_G711_CODEC_MODE_MULAW + * + * @param mode + * Sets selected G.711 encoding or decoding mode. + + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_STATE if this method is used during active + * encoding or decoding operation. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint SetMode(const QTMSG711CodecMode mode); + + /** + * Return current G.711 codec mode. + * + * This method is allowable at all times, while actively encoding/decoding + * or not. + * + * Supported G.711 codec modes are: + * QTMS_G711_CODEC_MODE_ALAW + * QTMS_G711_CODEC_MODE_MULAW + * + * @param mode + * Returns current G.711 encoding or decoding mode. + + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetMode(QTMSG711CodecMode& mode); + + /** + * Toggles on and off Comfort Noise Generator (CNG) for G.711 decoder. + * Not supported by the encoder. + * + * This method is allowable when decoding is not active; i.e. anytime + * before decoding is started or after it is stopped. + * + * @param cng + * Sets CNG feature on or off. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_STATE if this method is used during active + * decoding operation. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint SetCNG(const gboolean cng); + + /** + * Returns current CNG setting of the G.711 decoder. + * + * This method is allowable when decoding is not active; i.e. anytime + * before decoding is started or after it is stopped. + * + * @param cng + * Current CNG setting of the decoder. + * + * @return gint + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetCNG(gboolean& cng); + + /** + * Toggles on and off Packet Loss Concealment (PLC) for G.711 decoder. + * Not supported by the encoder. + * + * This method is allowable when decoding is not active; i.e. anytime + * before decoding is started or after it is stopped. + * + * @param plc + * Sets PLC feature on or off. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_STATE if this method is used during active + * decoding operation. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint SetPlc(const gboolean plc); + + /** + * Returns current PLC setting of the G.711 decoder. + * + * This method is allowable at all times, while actively decoding or not. + * + * @param plc + * Current CNG setting of the decoder. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetPlc(gboolean& plc); + + /** + * Toggles on and off Voice Activation Detection (VAD) for G.711 encoder. + * Not supported by the decoder. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param vad + * Sets VAD feature on or off. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * + */ + gint SetVADMode(const gboolean vad); + + /** + * Returns current VAD setting of the G.711 encoder. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param vad + * Current VAD setting of the encoder. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetVADMode(gboolean& vad); + +protected: + /** + * Constructor + */ + QTMSG711Format(); + }; + +} //namespace QTMS + +#endif //QTMS_G711_FORMAT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg729format.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsg729format.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,96 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_G729_FORMAT_H +#define QTMS_G729_FORMAT_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +/** + * QTMSG729Format class + * + * This class provides access methods to configure and query G.729 codec + * format settings. + * + * This format class can be used for both the encoder and decoder. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSG729Format : public QObject, + public QTMSFormat + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSG729Format(); + + /** + * Toggles on and off Voice Activation Detection (VAD) for G.729 encoder. + * Not supported by the decoder. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param vad + * Sets VAD feature on or off. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does + * not exist. + * + */ + gint SetVADMode(const gboolean vad); + + /** + * Returns current VAD setting of the G.729 encoder. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param vad + * Current VAD setting of the encoder. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetVADMode(gboolean& vad); + +protected: + /** + * Constructor + */ + QTMSG729Format(); + }; + +} //namespace QTMS + +#endif //QTMS_G729_FORMAT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsgaineffect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsgaineffect.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,116 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GAIN_EFFECT_H +#define QTMS_GAIN_EFFECT_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +/** + * QTMSGainEffect class + * + * This class provides microphone gain level control in the stream scope. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSGainEffect : public QObject, + public QTMSEffect + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSGainEffect(); + + /** + * Set mic gain level. The gain level should not be higher than + * the value returned by GetMaxLevel(). + * + * @param level + * Gain level to be set. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint SetLevel(const guint level); + + /** + * Return mic gain level. + * + * @param level + * Current mic gain level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetLevel(guint& level); + + /** + * Return max microphone gain level supported by the device. + * + * @param level + * Max gain level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetMaxLevel(guint& level); + + /** + * Returns type of the effect. + * + * This function can be called at any time. + * + * @param effecttype + * Variable that contains the effect type on return. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSEffectType& effecttype); + + Q_SIGNALS: + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + +protected: + /** + * Constructor + */ + QTMSGainEffect(); + +protected: + TMS::TMSEffect *iEffect; + }; + +} //namespace QTMS + +#endif //QTMS_GAIN_EFFECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalgaineffect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalgaineffect.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,117 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GLOBAL_GAIN_EFFECT_H +#define QTMS_GLOBAL_GAIN_EFFECT_H + +#include +#include +#include "qtmswrapperexport.h" +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +/** + * QTMSGlobalGainEffect class + * + * This class provides microphone gain level control in the global QTMS scope. + * Mic gain level changes done by any client are adjusted accross all calls + * serviced by the QTMS server. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalGainEffect : public QObject, + public QTMSEffect + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSGlobalGainEffect(); + + /** + * Set global microphone gain level. The global gain level should be + * between 0 and the max value returned by GetMaxLevel(). + * + * @param level + * Gain level to be set. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint SetLevel(const guint level); + + /** + * Return current global microphone gain level. + * + * @param level + * Current mic gain level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetLevel(guint& level); + + /** + * Return max microphone gain level supported by the device. + * + * @param level + * Max mic gain level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetMaxLevel(guint& level); + + /** + * Return effect type. + * + * @param effecttype + * Type of the effect object (QTMS_EFFECT_GLOBAL_GAIN). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSEffectType& effecttype); + + Q_SIGNALS: + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + +protected: + /** + * Constructor + */ + QTMSGlobalGainEffect(); + +protected: + TMS::TMSEffect* iEffect; + }; + +} //namespace QTMS + +#endif //QTMS_GLOBAL_GAIN_EFFECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalrouting.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalrouting.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,140 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GLOBAL_ROUTING_H +#define QTMS_GLOBAL_ROUTING_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSGlobalRouting; +} + +namespace QTMS { + +/** + * QTMSGlobalRouting class + * + * This class provides audio routing control in the global QTMS scope. + * Audio routing changes done by any client are adjusted accross all calls + * serviced by the QTMS server. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalRouting : public QObject + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSGlobalRouting(); + + /** + * Set global output device audio should be routed to. + * + * Settings are call-type dependent. + * + * Common: + * QTMS_AUDIO_OUTPUT_NONE + * VoIP call type: + * QTMS_AUDIO_OUTPUT_PUBLIC + * QTMS_AUDIO_OUTPUT_PRIVATE + * CS call type: + * QTMS_AUDIO_OUTPUT_HANDSET + * QTMS_AUDIO_OUTPUT_LOUDSPEAKER + * QTMS_AUDIO_OUTPUT_WIRED_ACCESSORY + * QTMS_AUDIO_OUTPUT_ACCESSORY + * QTMS_AUDIO_OUTPUT_ETTY + * + * @param output + * Sets call-specific audio output device. + * + * @return + * QTMS_RESULT_INVALID_ARGUMENT if set to QTMS_AUDIO_OUTPUT_NONE. + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint SetOutput(const QTMSAudioOutput output); + + /** + * Return current global audio output device settings. + * + * Settings are call-type dependent. + * See SetOutput() (above) + * + * @param output + * Current audio output device. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetOutput(QTMSAudioOutput& output); + + /** + * Return previous audio output device. + * + * Settings are call-type dependent. + * See SetOutput() (above) + * + * @param output + * Previous audio output device. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetPreviousOutput(QTMSAudioOutput& output); + + /** + * Return list of supported audio output devices. + * + * Settings are call-type dependent. + * See SetOutput() (above) + * + * @param outputs + * The typedef std::vector OutputVector; list of supported + * audio output devices (QTMSAudioOutput-type). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetAvailableOutputs(OutputVector& outputs); + + Q_SIGNALS: + void GlobalRoutingEvent(const QTMSGlobalRouting& routing, + QTMSSignalEvent event, QTMSAudioOutput output); + +protected: + /** + * Constructor + */ + QTMSGlobalRouting(); + +protected: + TMS::TMSGlobalRouting* iRouting; + }; + +} //namespace QTMS + +#endif //QTMS_GLOBAL_ROUTING_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalvoleffect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsglobalvoleffect.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,116 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GLOBAL_VOL_EFFECT_H +#define QTMS_GLOBAL_VOL_EFFECT_H + +#include +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +/** + * QTMSGlobalVolEffect class + * + * This class provides volume level control in the global QTMS scope. Volume + * level changes done by any client are adjusted accross all calls serviced + * by the QTMS server. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSGlobalVolEffect : public QObject, + public QTMSEffect + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSGlobalVolEffect(); + + /** + * Set global audio volume level. The volume level should be between 0 + * and the max value returned by GetMaxLevel(). + * + * @param level + * the volume level to be set. + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + */ + gint SetLevel(const guint level); + + /** + * Return current global audio volume level. + * + * @param level + * Volume level to be set. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetLevel(guint& level); + + /** + * Return max volume level supported by the device. + * + * @param level + * Max volume level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetMaxLevel(guint& level); + + /** + * Return effect type. + * + * @param effecttype + * Type of the effect object (QTMS_EFFECT_GLOBAL_VOL). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSEffectType& effecttype); + + Q_SIGNALS: + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + +protected: + /** + * Constructor + */ + QTMSGlobalVolEffect(); + +protected: + TMS::TMSEffect* iEffect; + }; + +} //namespace QTMS + +#endif //QTMS_GLOBAL_VOL_EFFECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsilbcformat.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsilbcformat.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,177 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_ILBC_FORMAT_H +#define QTMS_ILBC_FORMAT_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +/** + * QTMSILBCFormat class + * + * This class provides access methods to configure and query iLBC codec + * format settings. + * + * This format class can be used for both the encoder and decoder. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSILBCFormat : public QObject, + public QTMSFormat + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSILBCFormat(); + + /** + * Set iLBC codec mode. + * + * This method is allowable when encoding is not active; i.e. anytime + * before encoding is started or after it is stopped. + * + * Supported iLBC codec modes are: + * QTMS_ILBC_CODEC_MODE_20MILLI_SEC_FRAME + * QTMS_ILBC_CODEC_MODE_30MILLI_SEC_FRAME + * + * @param mode + * Sets selected iLBC encoding or decoding mode. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_STATE if this method is used during active + * encoding or decoding operation. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does + * not exist. + * + */ + gint SetMode(const QTMSILBCCodecMode mode); + + /** + * Return current iLBC codec mode. + * + * This method is allowable at all times, while actively encoding/decoding + * or not. + * + * Supported iLBC codec modes are: + * QTMS_ILBC_CODEC_MODE_20MILLI_SEC_FRAME + * QTMS_ILBC_CODEC_MODE_30MILLI_SEC_FRAME + * + * @param mode + * Returns current iLBC encoding or decoding mode. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetMode(QTMSILBCCodecMode& mode); + + /** + * Toggles on and off Comfort Noise Generator (CNG) for iLBC decoder. + * Not supported by the encoder. + * + * This method is allowable when decoding is not active; i.e. anytime + * before decoding is started or after it is stopped. + * + * @param cng + * Sets CNG feature on or off. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_INVALID_STATE if this method is used during active + * decoding operation. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does + * not exist. + * + */ + gint SetCNG(const gboolean cng); + + /** + * Returns current CNG setting of the iLBC decoder. + * + * This method is allowable when decoding is not active; i.e. anytime + * before decoding is started or after it is stopped. + * + * @param cng + * Current CNG setting of the decoder. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetCNG(gboolean& cng); + + /** + * Toggles on and off Voice Activation Detection (VAD) for iLBC encoder. + * Not supported by the decoder. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param vad + * Sets VAD feature on or off. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * QTMS_RESULT_FEATURE_NOT_SUPPORTED if this method is not implemented + * by the adaptation. + * QTMS_RESULT_DOES_NOT_EXIST if the custom interface handle does + * not exist. + * + */ + gint SetVADMode(const gboolean vad); + + /** + * Returns current VAD setting of the iLBC encoder. + * + * This method is allowable at all times, while actively encoding or not. + * + * @param vad + * Current VAD setting of the encoder. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetVADMode(gboolean& vad); + +protected: + /** + * Constructor + */ + QTMSILBCFormat(); + }; + +} //namespace QTMS + +#endif //QTMS_ILBC_FORMAT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsinbandtone.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsinbandtone.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,90 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_INBAND_TONE_H +#define QTMS_INBAND_TONE_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSInbandTone; +} + +namespace QTMS { + +/** + * QTMSInbandTone class + * + * This class provides Inband tone playback capability to the QTMS clients. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSInbandTone : public QObject + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSInbandTone(); + + /** + * Starts the inband tone playback. The inband volume will correspond to + * the current downlink volume level. + * + * For CS calltype. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Start(QTMSInbandToneType inbandtonetype); + + /** + * Stops the inband tone playback. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Stop(); + + Q_SIGNALS: + void InbandToneEvent(const QTMSInbandTone& inbandtone, + QTMSSignalEvent event); + +protected: + + /** + * Constructor + */ + QTMSInbandTone(); + +protected: + TMS::TMSInbandTone* iInbandTone; + }; + +} //namespace QTMS + +#endif //__QTMS_INBAND_TONE_H__ + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmicsource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmicsource.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,80 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MIC_SOURCE_H +#define QTMS_MIC_SOURCE_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSource; +} + +namespace QTMS { + +/** + * QTMSMicSource class + * + * This class instantiates QTMS mic source object. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSMicSource : public QObject, + public QTMSSource + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSMicSource(); + + /** + * Return source type. + * + * This function can be called at any time. + * + * @param sourcetype + * The type of sink object (QTMS_SOURCE_MIC). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSSourceType& sourcetype); + +protected: + /** + * Constructor + */ + QTMSMicSource(); + +protected: + TMS::TMSSource *iSource; + }; + +} //namespace QTMS + +#endif //QTMS_MIC_SOURCE_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsink.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,80 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MODEM_SINK_H +#define QTMS_MODEM_SINK_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSink; +} + +namespace QTMS { + +/** + * QTMSModemSink class + * + * This class instantiates QTMS modem sink object. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSModemSink : public QObject, + public QTMSSink + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSModemSink(); + + /** + * Return sink type. + * + * This function can be called at any time. + * + * @param sinktype + * The type of sink object (QTMS_SINK_MODEM). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSSinkType& sinktype); + +protected: + /** + * Constructor + */ + QTMSModemSink(); + +protected: + TMS::TMSSink *iSink; + }; + +} //namespace QTMS + +#endif //QTMS_MODEM_SINK_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsmodemsource.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,80 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MODEM_SOURCE_H +#define QTMS_MODEM_SOURCE_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSource; +} + +namespace QTMS { + +/** + * QTMSModemSource class + * + * This class instantiates QTMS mode source object. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSModemSource : public QObject, + public QTMSSource + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSModemSource(); + + /** + * Return source type. + * + * This function can be called at any time. + * + * @param sourcetype + * The type of sink object (QTMS_SOURCE_MODEM). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSSourceType& sourcetype); + +protected: + /** + * Constructor + */ + QTMSModemSource(); + +protected: + TMS::TMSSource *iSource; + }; + +} //namespace QTMS + +#endif //QTMS_MODEM_SOURCE_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmspcmformat.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmspcmformat.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,61 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_PCM_FORMAT_H +#define QTMS_PCM_FORMAT_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +/** + * QTMSPCMFormat class + * + * This class provides access methods to configure and query PCM-16 codec + * format settings. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSPCMFormat : public QObject, + public QTMSFormat + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSPCMFormat(); + +protected: + /** + * Constructor + */ + QTMSPCMFormat(); + }; + +} //namespace QTMS + +#endif //QTMS_PCM_FORMAT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsringtone.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsringtone.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,144 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_RINGTONE_H +#define QTMS_RINGTONE_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSRingTone; +} + +namespace QTMS { + +/** + * QTMSRingTone class + * + * This class provides ring tone playback capability to the QTMS clients. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSRingTone : public QObject + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSRingTone(); + + /** + * Init ring tone player to play supplied content based on its type. + * + * @param type + * Type of the content descriptor. Allowed types: + * - QTMS_RINGTONE_DEFAULT - use RT from current Profile + * - QTMS_RINGTONE_FILE - A/V File + * - QTMS_RINGTONE_SEQUENCE - RNG sequence in the descriptor format + * - QTMS_RINGTONE_BEEP_ONCE - play a beep + * - QTMS_RINGTONE_SILENT - play silent tone + * - QTMS_RINGTONE_UNSECURE_VOIP - play tone for uncecure VoIP call + * + * @param str + * Content descriptor to play. String containing one of the following: + * - File with folder name + * - Nokia ring tone sequence in a descriptor format + * - NULL - Will use current Profile. + * + * @param tts + * Text to be played. When added it will be played along with the + * tone. TTS can only be played with QTMS_RINGTONE_DEFAULT and + * TMS_RINGTONE_FILE. Parameter will be ignored for all other types. + * - NULL - Will use current Profile TTS setting - caller's name + * will be played from the phone book (if available). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Init(const QTMSRingToneType type = QTMS_RINGTONE_DEFAULT, + GString* str = NULL, GString* tts = NULL); + + /** + * Deinit ring tone player. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Deinit(); + + /** + * Start ring tone playback. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Play(); + + /** + * Stop ring tone playback. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Stop(); + + /** + * Pause video ring tone playback. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Pause(); + + /** + * Mute ring tone playback. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint Mute(); + + Q_SIGNALS: + void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event); + +protected: + /** + * Constructor + */ + QTMSRingTone(); + +protected: + TMS::TMSRingTone *iRingTone; + }; + +} //namespace QTMS + +#endif //QTMS_RINGTONE_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssink.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,54 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_SINK_H +#define QTMS_SINK_H + +#include + +namespace QTMS { + +/** + * QTMSSink class + * + * Base class for QTMS data sink type objects. + * + * @lib QTMSapi.lib + * + */ +class QTMSSink + { +public: + /** + * Returns type of the concrete data sink object implementation. + * + * This function can be called at any time. + * + * @param sinktype& + * Contains data sink type on return. + * + * @return + * QTMS_RESULT_SUCCESS if sink type is returned successfully. + * + */ + virtual gint GetType(QTMSSinkType& sinktype) = 0; + }; + +} //namespace QTMS + +#endif //QTMS_SINK_H + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmssource.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,53 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_SOURCE_H +#define QTMS_SOURCE_H + +#include + +namespace QTMS { + +/** + * QTMSSource class + * + * Base class for QTMS data source type objects. + * + * @lib QTMSapi.lib + * + */ +class QTMSSource + { +public: + /** + * Returns type of the concrete data source object implementation. + * + * This function can be called at any time. + * + * @param sourcetype + * Contains data source type on return. + * + * @return + * QTMS_RESULT_SUCCESS if source type is returned successfully. + * + */ + virtual gint GetType(QTMSSourceType& sourcetype) = 0; + }; + +} //namespace QTMS + +#endif //QTMS_SOURCE_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsspeakersink.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsspeakersink.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,80 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_SPEAKER_SINK_H +#define QTMS_SPEAKER_SINK_H + +#include +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSink; +} + +namespace QTMS { + +/** + * QTMSSpeakerSink class + * + * This class instantiates QTMS speaker sink object. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSSpeakerSink : public QObject, + public QTMSSink + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSSpeakerSink(); + + /** + * Return sink type. + * + * This function can be called at any time. + * + * @param sinktype + * The type of sink object (QTMS_SINK_SPEAKER). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSSinkType& sinktype); + +protected: + /** + * Constructor + */ + QTMSSpeakerSink(); + +protected: + TMS::TMSSink *iSink; + }; + +} //namespace QTMS + +#endif //QTMS_SPEAKER_SINK_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsstream.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsstream.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,508 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_STREAM_H +#define QTMS_STREAM_H + +// Include files +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSStream; +} + +namespace QTMS { + +// Forward declarations +class QTMSSource; +class QTMSSink; +class QTMSEffect; +class QTMSFormat; +class QTMSBuffer; + +/** + * QTMSStream class + * + * QTMSStream class represents either uplink or downlink stream associated with + * a QTMSCall. + * + * This class provides means for setting up and controlling telephony + * multimedia streams associated with a Circuit Switching (CS) call or Packet + * Switching (PS) such as IP call. + * + * QTMSStream instances are created by QTMSCall instance. Multiple QTMSStream + * instances (uplink and/or downlink streams) can be created. The QTMS engine + * does not limit the number of streams created per QTMSCall object. However, + * the combination of device policy and device run-time resources (both + * software and hardware) may limit this use-case. + * + * QTMSCall is a container which owns all its QTMSStream instances. The client + * has an option of creating and deleting individual streams. However, when a + * QTMSCall instance is deleted, all the streams associated with it are + * automatically deleted as well. + * + * QTMS ver 1.0.0.0: + * (1) An initialized stream will have one source, zero or one format, + * zero or more effects, and one or more sinks. + * + * (2) In the initial version of the QTMS implementation, the CS uplink and + * downlink streams will not control or communicate with the cellular modem. + * Also, the PS (IP) uplink and downlink streams will not handle network + * protocol. It is assumed that the QTMS client will handle this functionality. + * + * States: + * (1) QTMS_STREAM_UNINITIALIZED (initial state): The stream is alive but has + * not allocated all the resources it needs to function. + * + * (2) QTMS_STREAM_INITIALIZED: The stream has all the information required to + * acquire the media resources. Stream in this state will have most of the + * resources allocated, except the critical system resources, such as policy + * and/or hardware resources. + * + * (3) QTMS_STREAM_PAUSED: The stream has all the resources allocated, which may + * include critical system resources such as policy and/or hardware resources. + * + * (4) QTMS_STREAM_STARTED: The stream has all the resources allocated, + * including critical system resources such as policy and/or hardware resources + * and is active. + * + * Usage: + * + * QTMSFactory *iFactory; + * QTMSCall *iCall; + * QTMSStream *iUplink; + * QTMSStream *iDownlink; + * gint err; + * + * err = QTMSFactory::CreateFactory(iFactory); + * err = iFactory->CreateCall(QTMS_CALL_IP, iCall); + * err = iCall->CreateStream(QTMS_STREAM_UPLINK, iUplink); + * err = iCall->CreateStream(QTMS_STREAM_DOWNLINK, iDownlink); + * // Configure CS uplink stream + * iUplinkStream->AddObserver(*this); + * iUplinkStream->AddSource(iMicSource); + * iUplinkStream->AddSink(iModemSink); + * iUplinkStream->AddEffect(iGainEffect); // To control mic gain + * iUplinkStream->Init(); + * // Wait for state change callback + * iUplinkStream->Play(); + * // Wait for state change callback + * ... + * // call terminated on the cell modem side, now signal multimedia system + * iUplinkStream->Stop(); + * ... + * err = iCall->DeleteStream(iDownlink); + * err = iCall->DeleteStream(iUplink); + * err = iFactory->DeleteCall(iCall); + * delete iFactory; + * + * + * + * @lib QTMSapi.lib + * + */ + +class QTMS_WRAPPER_DLL_EXPORT QTMSStream : public QObject + { + Q_OBJECT +public: + + /** + * Destructor + */ + virtual ~QTMSStream(); + + /** + * Add source for this stream. + * + * This function can be called only when stream is in + * QTMS_STREAM_UNINITIALIZED state. + * + * After source is added to the stream successfully, ownership of the source + * is vested in this stream. If the client wants to reuse the source, it + * should call RemoveSource() to re-claim QTMSSource ownership. + * + * @param source + * Source object to be added to the stream. + * + * @return + * QTMS_RESULT_SUCCESS if source is added successfully to the stream. + * QTMS_RESULT_NULL_ARGUMENT if source is a NULL. + * QTMS_RESULT_ALREADY_EXIST if source has already been added to the + * stream. + * QTMS_RESULT_INVALID_STATE if stream is not + * in the QTMS_STREAM_UNINITIALIZED state. + * + */ + gint AddSource(QTMSSource* source); + + /** + * Remove source from this stream. + * + * This function can be called only when stream is in + * QTMS_STREAM_UNINITIALIZED state. + * + * After source is removed from the stream successfully, ownership of + * source is re-claimed by the client. + * + * @param source + * The source to remove. + * + * @return + * QTMS_RESULT_SUCCESS if source is removed successfully from the + * stream. + * QTMS_RESULT_NULL_ARGUMENT if source is a NULL. + * QTMS_RESULT_DOES_NOT_EXIST if trying to remove the source that has + * not been added to stream. + * QTMS_RESULT_INVALID_STATE if stream is not + * in the QTMS_STREAM_UNINITIALIZED state. + * + */ + gint RemoveSource(QTMSSource* source); + + /** + * Add sink to the stream. + * + * Multiple sinks of different types can be added to a stream. + * + * This function can be called only when stream is in + * QTMS_STREAM_UNINITIALIZED state. + * + * After sink is added to the stream successfully, ownership of the sink is + * vested in the stream. If the client wants to reuse sink, it should call + * RemoveSink() to re-claim QTMSSink ownership. + * + * @param sink + * Data sink to be added to the stream. + * + * @return + * QTMS_RESULT_SUCCESS if sink is added successfully to the stream. + * QTMS_RESULT_NULL_ARGUMENT if sink is a NULL. + * QTMS_RESULT_ALREADY_EXIST if sink type is already added to the + * stream. + * QTMS_RESULT_INVALID_STATE if stream is not + * in the QTMS_STREAM_UNINITIALIZED state. + * + */ + gint AddSink(QTMSSink* sink); + + /** + * Remove sink from the stream. + * + * This function can be called only when stream is in + * QTMS_STREAM_UNINITIALIZED state. + * + * After sink is removed from the stream successfully, ownership of the + * sink is re-claimed by the client. + * + * @param sink + * Sink to removed from the stream. + * + * @return + * QTMS_RESULT_SUCCESS if sink is removed successfully from the stream. + * QTMS_RESULT_NULL_ARGUMENT if sink is a NULL. + * QTMS_RESULT_DOES_NOT_EXIST if trying to remove sink that has not + * been added to the stream. + * QTMS_RESULT_INVALID_STATE if stream is not + * in the QTMS_STREAM_UNINITIALIZED state. + * + */ + gint RemoveSink(QTMSSink* sink); + + /** + * Set data format for the stream. + * + * This function can be called only when stream is in the + * QTMS_STREAM_UNINITIALIZED state. + * + * After format is added to the stream successfully, ownership of the + * format is vested in this stream. If the client wants to reuse format, + * it should call ResetFormat() to re-claim QTMSFormat ownership. + * + * Note: In QTMS Ver 1.0.0.0, setting data format for CS call is not + * required. + * + * @param format + * Data format to be set on the stream. + * + * @return + * QTMS_RESULT_SUCCESS if format is set successfully on the stream. + * QTMS_RESULT_NULL_ARGUMENT if format is a NULL. + * QTMS_RESULT_ALREADY_EXIST if format is already set on the stream. + * QTMS_RESULT_INVALID_STATE if stream is not + * in the QTMS_STREAM_UNINITIALIZED state. + * + */ + gint SetFormat(QTMSFormat* format); + + /** + * Remove data format from the stream. + * + * This function can be called only when stream is in the + * QTMS_STREAM_UNINITIALIZED state. + * + * After format is removed from the stream successfully, ownership of + * the format object is re-claimed by the client. + * + * @param format + * Data format to be removed from the stream. + * + * @return + * QTMS_RESULT_SUCCESS if format is removed successfully from the + * stream. + * QTMS_RESULT_NULL_ARGUMENT if format is a NULL. + * QTMS_RESULT_DOES_NOT_EXIST if format is not currently set on the + * stream. + * QTMS_RESULT_INVALID_STATE if stream is not in the + * QTMS_STREAM_UNINITIALIZED state. + * + */ + gint ResetFormat(QTMSFormat* format); + + /** + * Add an effect to the stream. + * + * Multiple effect objects of different types can be added to the stream. + * + * This function can be called only when stream is in the + * QTMS_STREAM_UNINITIALIZED state. + * + * After effect is added to the stream successfully, ownership of the + * effect is vested in the stream. If the client wants to reuse the effect, + * it shall call RemoveEffect() to re-claim QTMSEffect ownership. + * + * @param effect + * Stream effect to be added to the stream. + * + * @return + * QTMS_RESULT_SUCCESS if effect is added successfully to the stream. + * QTMS_RESULT_NULL_ARGUMENT if effect is a NULL. + * QTMS_RESULT_ALREADY_EXIST if effect type is already added to the + * stream. + * QTMS_RESULT_INVALID_STATE if stream is not in the + * QTMS_STREAM_UNINITIALIZED state. + * + */ + gint AddEffect(QTMSEffect* effect); + + /** + * Remove effect from the stream. + * + * This function can be called only when stream is in the + * QTMS_STREAM_UNINITIALIZED state. + * + * After effect is removed from the stream successfully, ownership of the + * effect is re-claimed by the client. + * + * @param effect + * Stream effect to be removed from the stream. + * + * @return + * QTMS_RESULT_SUCCESS if effect is removed successfully from the + * stream. + * QTMS_RESULT_NULL_ARGUMENT if effect is a NULL. + * QTMS_RESULT_DOES_NOT_EXIST if trying to remove an effect that has + * not been added to the stream. + * QTMS_RESULT_INVALID_STATE if stream is not in the + * QTMS_STREAM_UNINITIALIZED state. + * + */ + gint RemoveEffect(QTMSEffect* effect); + + /** + * Get current state of the stream. + * + * This function can be called at any time. + * + * Possible states are: + * QTMS_STREAM_UNINITIALIZED, + * QTMS_STREAM_INITIALIZED, + * QTMS_STREAM_PAUSED, + * QTMS_STREAM_STARTED. + + * @return + * Stream's current state. + * + */ + gint GetState(); + + /** + * Get stream ID. + * + * This function can be called at any time. + * + * @return + * Unique ID of the stream. + * + */ + gint GetStreamId(); + + /** + * Get stream type. + * + * This function can be called at any time. + * + * The possible types are: + * TMS_STREAM_UPLINK + * TMS_STREAM_DOWNLINK + * + * @return + * Stream type indicating whether it is an uplink or downlink. + * + */ + gint GetStreamType(); + + /** + * Trigger stream to transition to the initialized state. + * + * This function can be called only when stream is in the + * QTMS_STREAM_UNINITIALIZED state. + * + * If Init() is called when stream is already in initialized state, the + * request will be ignored and the function will return QTMS_RESULT_SUCCESS. + * + * Upon stream's successful transition to initialized state, the stream will + * be in the QTMS_STREAM_INITIALIZED state. + * + * Before stream can transition to initialized state the following + * objects must be added to the stream: + * CS call: UPL: mic source and modem sink + * CS call: DNL: modem source and speaker sink + * IP call: UPL: mic source, codec format and client sink + * IP call: DNL: client source, codec format and speaker sink + * + * @return + * Common return codes: + * QTMS_RESULT_SUCCESS if stream transitioned to the initialized state. + * QTMS_RESULT_INVALID_STATE if stream has not transitioned to the + * QTMS_STREAM_INITIALIZED state. + * QTMS_RESULT_FORMAT_TYPE_UNSPECIFIED (IP call only) when stream + * has no format attached to it. + * QTMS_RESULT_UNINITIALIZED_OBJECT when stream has no sink or source + * element attached to it. + * + */ + gint Init(); + + /** + * Trigger stream to transition to the paused state. + * + * This function can be called only when stream is in the + * QTMS_STREAM_UNINITIALIZED or QTMS_STREAM_STARTED state. + * + * If Pause() is called when stream is already in paused state, the + * request will be ignored and the function will return QTMS_RESULT_SUCCESS. + * + * Upon stream's successful transition to the paused state, the stream will + * be in the QTMS_STREAM_PAUSED state. + * + * Note: In QTMS Ver 1.0.0.0, pausing stream for CS call is not supported. + * + * @return + * Common return codes: + * QTMS_RESULT_SUCCESS if stream successfully transitioned to the + * paused state. + * QTMS_RESULT_INVALID_STATE if stream is not in the + * QTMS_STREAM_INITIALIZED or QTMS_STREAM_PAUSED state. + * + */ + gint Pause(); + + /** + * Trigger stream to transition to the started state. + * + * This function can be called only when stream is in the + * QTMS_STREAM_INITIALIZED or QTMS_STREAM_PAUSED state. + * + * If Start() is called when stream is already in the started state, the + * request will be ignored and the function will return QTMS_RESULT_SUCCESS. + * + * If Start() is called when stream is already in the initialized state, the + * stream will implicitly pause, but the observer will only receive one + * state change callback. + * + * Upon stream's successful transition to the started state, the stream will + * be in the QTMS_STREAM_STARTED state. + * + * @return + * Common return codes: + * QTMS_RESULT_SUCCESS if stream successfully transitioned to the + * started state. + * QTMS_RESULT_INVALID_STATE if stream is not in the + * QTMS_STREAM_INITIALIZED or QTMS_STREAM_STARTED state. + * + */ + gint Start(); + + /** + * Trigger stream to transition to the initialized state. + * + * This function can be called only when stream is in the + * QTMS_STREAM_STARTED or QTMS_STREAM_PAUSED state. + * + * If Stop() is called when stream is already in the stopped state, the + * request will be ignored and the function will return QTMS_RESULT_SUCCESS. + * + * Upon stream's successful transition to the started state, the stream will + * be in the QTMS_STREAM_INITIALIZED state. + * + * @return + * Common return codes: + * QTMS_RESULT_SUCCESS if stream successfully transitioned to the + * stopped state. + * QTMS_RESULT_INVALID_STATE if stream is not in the + * QTMS_STREAM_STARTED or QTMS_STREAM_PAUSED state. + * + */ + gint Stop(); + + /** + * Trigger stream to transition to un-initialized state. + * + * This function can be called only when stream is NOT in + * QTMS_STREAM_UNINITIALIZED state. + * + * If Deinit() is called when stream is already in un-initialized state, the + * request will be ignored. + * + * Upon stream's successful transition to the un-initialized state, the + * stream will be in the QTMS_STREAM_UNINITIALIZED state. + * + */ + void Deinit(); + + Q_SIGNALS: + void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event); + +protected: + /** + * Constructor + */ + QTMSStream(); + +protected: + TMS::TMSStream *iStream; + }; + +} //namespace QTMS + +#endif // QTMS_STREAM_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsvolumeeffect.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmsvolumeeffect.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,116 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_VOLUME_EFFECT_H +#define QTMS_VOLUME_EFFECT_H + +#include +#include +#include "qtmswrapperexport.h" + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +/** + * QTMSVolumeEffect class + * + * This class provides volume level control in the stream scope. + * + * @lib QTMSapi.lib + * + */ +class QTMS_WRAPPER_DLL_EXPORT QTMSVolumeEffect : public QObject, + public QTMSEffect + { + Q_OBJECT +public: + /** + * Destructor + */ + virtual ~QTMSVolumeEffect(); + + /** + * Set audio volume level. The volume level should not be higher than + * the value returned by GetMaxLevel(). + * + * @param level + * Volume level to be set. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint SetLevel(const guint level); + + /** + * Return current audio volume level settings. + * + * @param level + * Volume level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetLevel(guint& level); + + /** + * Return max volume level supported by the device. + * + * @param level + * Max volume level. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + gint GetMaxLevel(guint& level); + + /** + * Returns type of the effect. + * + * This function can be called at any time. + * + * @param effecttype + * Variable that contains the effect type on return. + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSEffectType& effecttype); + +Q_SIGNALS: + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + +protected: + /** + * Constructor + */ + QTMSVolumeEffect(); + +protected: + TMS::TMSEffect *iEffect; + }; + +} //namespace QTMS + +#endif //QTMS_VOLUME_EFFECT_H diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmswrapperexport.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/inc/qtmswrapperexport.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,30 @@ +/* + * 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 QTMS_WRAPPER_EXPORT_H_ +#define QTMS_WRAPPER_EXPORT_H_ + +// System includes +#include + +#ifdef BUILD_TMS_WRAPPER_DLL +#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_EXPORT +#else +#define QTMS_WRAPPER_DLL_EXPORT Q_DECL_IMPORT +#endif + +#endif // QTMS_WRAPPER_EXPORT_H_ diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtestmains60.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtestmains60.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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 QTESTMAINS60 +#define QTESTMAINS60 + +#define QTEST_MAIN_S60(QTmsCsTest) \ +int main(int argc, char *argv[]) \ +{ \ +char *new_argv[3]; \ +QCoreApplication app(argc, argv); \ +\ +QString str = "C:\\data\\" + QFileInfo(QCoreApplication::applicationFilePath()).baseName() + ".log"; \ +QByteArray bytes = str.toAscii(); \ +\ +char arg1[] = "-o"; \ +\ +new_argv[0] = argv[0]; \ +new_argv[1] = arg1; \ +new_argv[2] = bytes.data(); \ +\ +QTmsCsTest tc; \ +return QTest::qExec(&tc, 3, new_argv); \ +} +#endif diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,1208 @@ +/* +* 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: QTMS CS test +* +*/ +#include +#include +#include "qtestmains60.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +using namespace QTMS; + +_LIT8(KRTBeepSequence, "\x00\x11\x0A\x0A\x08\x73\x0A\x40\x28\x0A\xF7\ +\x05\xFC\x40\x64\x0A\x08\x40\x32\x0A\xF7\x06\x0B"); +_LIT16(KTestFile1, "c:\\data\\sounds\\digital\\test_8khz.wav"); + +class QTmsCsTest : public QObject + { +Q_OBJECT +private slots: + void initTestCase(); + void CSCallSetup(); + + void CreateUplink(); + void CreateDnlink(); + void CreateMicSource(); + void AddMicSourceToStream(); + void CreateModemSink(); + void AddModemSinkToStream(); + void CreateModemSource(); + void AddModemSourceToStream(); + void CreateSpeakerSink(); + void AddSpeakerSinkToStream(); + + void CreateStreamVol(); + void CreateStreamGain(); + + void InitUplink(); + void InitDnlink(); + + void StartUplink(); + void StopUplink(); + void StartDnlink(); + + void StreamVol(); + void StreamGain(); + // void StopDnlink(); + + void CreateGlobalVol(); + void CreateGlobalGain(); + void CreateRouting_data(); + void CreateRouting(); + + void CreateInband_data(); + void CreateInband(); + void CreateDnlinkDtmf(); + void CreateUplinkDtmf(); + + void CreateRingTone(); + + void InitRingTonePlayerFromProfiles(); + void PlayRingTone(); + void PauseRingTone(); + void MuteRingTone(); + void StopRingTone(); + void CloseRingTonePlayer(); + + void CloseUplink(); + void CloseDownlink(); + void cleanupTestCase(); +public slots: + //From TMSStreamObserver + void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event); + //From TMSClientSinkObserver + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + //From TMSGlobalRoutingObserver + void GlobalRoutingEvent(const QTMSGlobalRouting& routing, + QTMSSignalEvent event, QTMSAudioOutput output); + //From TMSRingToneObserver + void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event); + //From TMSDTMFObserver + void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event); + //From TMSInbandToneObserver + void InbandToneEvent(const QTMSInbandTone& inbandtone, + QTMSSignalEvent event); + +private: + void InitRingToneSequencePlayer(); + void InitRingTonePlayerFromFile(); + void StopDnlink(); + void GetAvailableOutput(); + void DisplayDevice(QTMSAudioOutput device); + +private: + QTMSFactory *m_Factory; + QTMSCall *m_Call; + QTMSDTMF *m_Dnlnkdtmf; + QTMSDTMF *m_Uplnkdtmf; + QTMSStream *m_Dnlink; + QTMSStream *m_Uplink; + QTMSSource *m_MicSource; + QTMSSource *m_ModemSource; + QTMSSink *m_SpeakerSink; + QTMSSink *m_ModemSink; + QTMSEffect *m_Vol; + QTMSEffect *m_Gain; + QTMSEffect *m_GlobalVol; + QTMSEffect *m_GlobalGain; + QTMSGlobalRouting *m_Routing; + QTMSInbandTone *m_InbandTonePlayer; + QTMSRingTone *m_RingTonePlayer; + GString* m_RTStr; + GString* m_TTSStr; + QSignalSpy *m_UplinkSpy; + QSignalSpy *m_DnlinkSpy; + QSignalSpy *m_InbandSpy; + QSignalSpy *m_RoutingSpy; + OutputVector m_Availableoutputs; + + }; + +void QTmsCsTest::initTestCase() + { + qDebug("Start QTms CS tests"); + + g_setenv("G_SLICE", "always-malloc", 1); + m_Factory = NULL; + m_Call = NULL; + m_Dnlink = NULL; + m_Uplink = NULL; + m_MicSource = NULL; + m_ModemSource = NULL; + m_SpeakerSink = NULL; + m_ModemSink = NULL; + m_Vol = NULL; + m_Gain = NULL; + m_GlobalVol = NULL; + m_GlobalGain = NULL; + m_Routing = NULL; + m_Dnlnkdtmf = NULL; + m_Uplnkdtmf = NULL; + m_InbandTonePlayer = NULL; + m_RingTonePlayer = NULL; + m_UplinkSpy = NULL; + m_DnlinkSpy = NULL; + + QTMSVer *ver(NULL); + gint status; + status = QTMSFactory::CreateFactory(m_Factory, *ver); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + qRegisterMetaType("QTMSSignalEvent"); + qRegisterMetaType("QTMSAudioOutput"); + + + } + +void QTmsCsTest::cleanupTestCase() + { + qDebug("End QTms tests"); + + StopDnlink(); + + m_Factory->DeleteSource(m_MicSource); + m_Factory->DeleteSource(m_ModemSource); + m_Factory->DeleteSink(m_ModemSink); + m_Factory->DeleteSink(m_SpeakerSink); + + m_Factory->DeleteDTMF(m_Dnlnkdtmf); + m_Factory->DeleteInbandTonePlayer(m_InbandTonePlayer); + m_Factory->DeleteRingTonePlayer(m_RingTonePlayer); + + m_Factory->DeleteEffect(m_Vol); + m_Factory->DeleteEffect(m_Gain); + m_Factory->DeleteEffect(m_GlobalVol); + m_Factory->DeleteEffect(m_GlobalGain); + + m_Factory->DeleteGlobalRouting(m_Routing); + + m_Call->DeleteStream(m_Uplink); + m_Call->DeleteStream(m_Dnlink); + + m_Factory->DeleteCall(m_Call); + + delete m_Factory; + + } + +void QTmsCsTest::CSCallSetup() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory && !m_Call) + { + gboolean issupported(FALSE); + m_Factory->IsCallTypeSupported(QTMS_CALL_CS, issupported); + QVERIFY(issupported == TRUE); + status = m_Factory->CreateCall(QTMS_CALL_CS, m_Call, 0); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTMSCallType calltype = m_Call->GetCallType(); + QVERIFY(calltype == QTMS_CALL_CS); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + +void QTmsCsTest::CreateUplink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Call) + { + status = m_Call->CreateStream(QTMS_STREAM_UPLINK, m_Uplink); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_UplinkSpy = new QSignalSpy(m_Uplink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + QVERIFY( m_UplinkSpy->isValid() ); + + //QCOMPARE(m_UplinkSpy->count(), 0 ); + + + connect(m_Uplink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), + this, + SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + } + } + + void QTmsCsTest::CreateDnlink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Call) + { + status = m_Call->CreateStream(QTMS_STREAM_DOWNLINK, m_Dnlink); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_DnlinkSpy = new QSignalSpy(m_Dnlink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + QVERIFY( m_DnlinkSpy->isValid() ); + + //QCOMPARE(m_DnlinkSpy->count(), 0 ); + + connect(m_Dnlink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), + this, + SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + } + } + + + void QTmsCsTest::CreateModemSink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_ModemSink) + { + status = m_Factory->CreateSink(QTMS_SINK_MODEM, m_ModemSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::CreateModemSource() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_ModemSource) + { + status = m_Factory->CreateSource(QTMS_SOURCE_MODEM, m_ModemSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::AddModemSinkToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Uplink && m_ModemSink) + { + status = m_Uplink->AddSink(m_ModemSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::AddModemSourceToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Dnlink && m_ModemSource) + { + status = m_Dnlink->AddSource(m_ModemSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + + void QTmsCsTest::CreateMicSource() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_MicSource) + { + status = m_Factory->CreateSource(TMS_SOURCE_MIC, m_MicSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::AddMicSourceToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Uplink && m_MicSource) + { + status = m_Uplink->AddSource(m_MicSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::CreateSpeakerSink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_SpeakerSink) + { + status = m_Factory->CreateSink(QTMS_SINK_SPEAKER, m_SpeakerSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::AddSpeakerSinkToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Dnlink && m_SpeakerSink) + { + status = m_Dnlink->AddSink(m_SpeakerSink); + qDebug("QTMS speaker sink added to stream"); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsCsTest::InitUplink() + { + QVERIFY(m_Uplink->Init() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 1 ); + } + + void QTmsCsTest::InitDnlink() + { + QVERIFY(m_Dnlink->Init() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 1 ); + } + + void QTmsCsTest::StartUplink() + { + QVERIFY(m_Uplink->Start() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 2 ); + } + + void QTmsCsTest::StartDnlink() + { + QVERIFY(m_Dnlink->Start() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 2 ); + } +void QTmsCsTest::StopUplink() + { + QVERIFY(m_Uplink->Stop() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 3 ); + } + +void QTmsCsTest::StopDnlink() + { + QVERIFY(m_Dnlink->Stop() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 3 ); + } + +void QTmsCsTest::CloseUplink() + { + m_Uplink->Deinit(); + QTest::qWait(1000); + if (m_Uplink) + { + if (m_Gain) + { + QVERIFY(m_Uplink->RemoveEffect(m_Gain)== QTMS_RESULT_SUCCESS); + } + if (m_MicSource) + { + QVERIFY(m_Uplink->RemoveSource(m_MicSource)== QTMS_RESULT_SUCCESS); + } + if (m_ModemSink) + { + QVERIFY(m_Uplink->RemoveSink(m_ModemSink)== QTMS_RESULT_SUCCESS); + } + } + } + +void QTmsCsTest::CloseDownlink() + { + m_Dnlink->Deinit(); + QTest::qWait(1000); + if (m_Dnlink) + { + if (m_Vol) + { + QVERIFY(m_Dnlink->RemoveEffect(m_Vol)== QTMS_RESULT_SUCCESS); + } + if (m_ModemSource) + { + QVERIFY(m_Dnlink->RemoveSource(m_ModemSource)== QTMS_RESULT_SUCCESS); + } + if (m_SpeakerSink) + { + QVERIFY(m_Dnlink->RemoveSink(m_SpeakerSink) == QTMS_RESULT_SUCCESS); + } + } + + } + +void QTmsCsTest::CreateStreamVol() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_Vol) + { + status = m_Factory->CreateEffect(QTMS_EFFECT_VOLUME, m_Vol); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_Vol), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + if(m_Dnlink) + { + status = m_Dnlink->AddEffect(m_Vol); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + + } + } + +void QTmsCsTest::StreamVol() + { + gint status(QTMS_RESULT_SUCCESS); + guint maxvol(0); + if (m_Vol) + { + status = static_cast (m_Vol)->GetMaxLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + status = static_cast (m_Vol)->SetLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint vol(0); + status = static_cast (m_Vol)->GetLevel(vol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(vol,maxvol); + } + } + +void QTmsCsTest::CreateStreamGain() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_Gain) + { + status = m_Factory->CreateEffect(QTMS_EFFECT_GAIN, m_Gain); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_Gain), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + if(m_Uplink) + { + status = m_Uplink->AddEffect(m_Gain); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + } + +void QTmsCsTest::StreamGain() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Gain) + { + guint maxgain(0); + static_cast (m_Gain)->GetMaxLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + static_cast (m_Gain)->SetLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint gain(0); + static_cast (m_Gain)->GetLevel(gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(gain,maxgain); + } + + } + + +void QTmsCsTest::CreateGlobalVol() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_GlobalVol) + { + status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_VOL, m_GlobalVol); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_GlobalVol), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + guint maxvol(0); + status = static_cast(m_GlobalVol)->GetMaxLevel( + maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + status = static_cast(m_GlobalVol)->SetLevel( + maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint vol(0); + status = static_cast (m_GlobalVol)->GetLevel(vol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(vol,maxvol); + + } + } + + +void QTmsCsTest::CreateGlobalGain() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_GlobalGain) + { + status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_GAIN, m_GlobalGain); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_GlobalGain), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + guint maxgain(0); + static_cast(m_GlobalGain)->GetMaxLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + static_cast(m_GlobalGain)->SetLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint gain(0); + static_cast(m_GlobalGain)->GetLevel(gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(gain,maxgain); + + } + } + +void QTmsCsTest::CreateRouting_data() + { + gint status; + if (m_Factory && !m_Routing) + { + status = m_Factory->CreateGlobalRouting(m_Routing); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_RoutingSpy = new QSignalSpy(m_Routing, + SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent, + QTMSAudioOutput))); + + QVERIFY( m_RoutingSpy->isValid() ); + + // QCOMPARE(m_RoutingSpy->count(), 0 ); + connect(m_Routing, + SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent,QTMSAudioOutput)), + this, + SLOT(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent,QTMSAudioOutput))); + } + + //Populate data and test based on available output + GetAvailableOutput(); + } + +void QTmsCsTest::CreateRouting() + { + gint status(QTMS_RESULT_SUCCESS); + + QFETCH(QTMSAudioOutput, routing); + + if(m_Routing) + { + status = m_Routing->SetOutput(routing); + QVERIFY(status == QTMS_RESULT_SUCCESS); +#ifndef __WINSCW__ + QTest::qWait(1000); + // QCOMPARE(m_RoutingSpy->count(), 1 ); +#endif + QTMSAudioOutput current; + status = m_Routing->GetOutput(current); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + QCOMPARE(routing,current); + + QTMSAudioOutput previous; + status = m_Routing->GetPreviousOutput(previous); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("Previous routing:"); + DisplayDevice(previous); + } + } + +void QTmsCsTest::GetAvailableOutput() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Routing) + { + status = m_Routing->GetAvailableOutputs(m_Availableoutputs); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + qDebug("Available outputs: %d",m_Availableoutputs.size()); + std::vector::iterator iteroutputs = + m_Availableoutputs.begin(); + for (; iteroutputs < m_Availableoutputs.end(); iteroutputs++) + { + DisplayDevice(*iteroutputs); + } + } + } + +void QTmsCsTest::DisplayDevice(QTMSAudioOutput device) + { + QTest::addColumn("routing"); + + switch (device) + { + case QTMS_AUDIO_OUTPUT_NONE: + { + qDebug("none"); + QTest::newRow("None")<CreateDTMF(QTMS_STREAM_DOWNLINK, m_Dnlnkdtmf); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (m_Dnlnkdtmf) + { + QSignalSpy dtmfspy(m_Dnlnkdtmf, + SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + QVERIFY( dtmfspy.isValid() ); + + //QCOMPARE(dtmfspy.count(), 0 ); + + connect(m_Dnlnkdtmf, + SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this, + SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + dtmfstring = g_string_new("4723"); + status = m_Dnlnkdtmf->SetTone(dtmfstring); + + m_Dnlnkdtmf->Start(); + QTest::qWait(1000); + g_string_free(dtmfstring, TRUE); + //QCOMPARE(dtmfspy.count(), 1 ); + + status = m_Dnlnkdtmf->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(dtmfspy.count(), 2 ); + + } + } + +void QTmsCsTest::CreateUplinkDtmf() + { + gint status(QTMS_RESULT_SUCCESS); + GString* dtmfstring(NULL); + + status = m_Factory->CreateDTMF(QTMS_STREAM_UPLINK, m_Uplnkdtmf); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (m_Uplnkdtmf) + { + QSignalSpy uplinkdtmfspy(m_Uplnkdtmf, + SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + QVERIFY( uplinkdtmfspy.isValid() ); + + //QCOMPARE(dtmfspy.count(), 0 ); + + connect(m_Uplnkdtmf, + SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this, + SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + dtmfstring = g_string_new("4723"); + status = m_Uplnkdtmf->SetTone(dtmfstring); + + m_Uplnkdtmf->Start(); + QTest::qWait(1000); + g_string_free(dtmfstring, TRUE); + //QCOMPARE(dtmfspy.count(), 1 ); + + m_Uplnkdtmf->ContinueDTMFStringSending(FALSE); + + status = m_Uplnkdtmf->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(dtmfspy.count(), 2 ); + + } + } + + +void QTmsCsTest::CreateInband_data() + { + + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory && !m_InbandTonePlayer) + { + status = m_Factory->CreateInbandTonePlayer(m_InbandTonePlayer); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + m_InbandSpy = new QSignalSpy(m_InbandTonePlayer, + SIGNAL(InbandToneEvent(const QTMSInbandTone&,QTMSSignalEvent))); + + QVERIFY( m_InbandSpy->isValid() ); + + //QCOMPARE(m_InbandSpy->count(), 0 ); + connect(m_InbandTonePlayer, + SIGNAL(InbandToneEvent(const QTMSInbandTone&, QTMSSignalEvent)), + this, + SLOT(InbandToneEvent(const QTMSInbandTone&, QTMSSignalEvent))); + } + + QTest::addColumn("inbandTone"); + + QTest::newRow("Busy")<Start(inbandTone); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + // QCOMPARE(m_InbandSpy->count(), 1 ); + + status = m_InbandTonePlayer->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + // QCOMPARE(m_InbandSpy->count(), 2 ); + } + } + + +void QTmsCsTest::CreateRingTone() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory) + { + status = m_Factory->CreateRingTonePlayer(m_RingTonePlayer); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(m_RingTonePlayer, + SIGNAL(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent)), + this, + SLOT(RingtoneEvent(const QTMSRingTone&,QTMSSignalEvent))); + } + + } + +void QTmsCsTest::InitRingTonePlayerFromProfiles() + { + if (m_RingTonePlayer) + { + gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_DEFAULT); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } + + } + +void QTmsCsTest::InitRingTonePlayerFromFile() + { + if (m_RingTonePlayer) + { + TBuf buf(KTestFile1); + m_RTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length() * 2); + gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_FILE, m_RTStr); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + g_string_free(m_RTStr, TRUE); + m_RTStr = NULL; + } + + } + + +void QTmsCsTest::InitRingToneSequencePlayer() + { + if (m_RingTonePlayer) + { + TBuf8 buf(KRTBeepSequence); + m_RTStr = g_string_new_len((gchar*) buf.Ptr(), buf.Length()); + gint status = m_RingTonePlayer->Init(QTMS_RINGTONE_SEQUENCE, m_RTStr); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + g_string_free(m_RTStr, TRUE); + } + } + + +void QTmsCsTest::PlayRingTone() + { + if (m_RingTonePlayer) + { + gint status = m_RingTonePlayer->Play(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } + } + + +void QTmsCsTest::PauseRingTone() + { + if (m_RingTonePlayer) + { + gint status = m_RingTonePlayer->Pause(); //pause audio for video RT only + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } + } + + +void QTmsCsTest::StopRingTone() + { + if (m_RingTonePlayer) + { + gint status = m_RingTonePlayer->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + } + } + + +void QTmsCsTest::MuteRingTone() + { + if (m_RingTonePlayer) + { + m_RingTonePlayer->Mute(); + } + } + +void QTmsCsTest::CloseRingTonePlayer() + { + if (m_Factory && m_RingTonePlayer) + { + m_RingTonePlayer->Deinit(); + m_Factory->DeleteRingTonePlayer(m_RingTonePlayer); + } + } + +void QTmsCsTest::EffectsEvent(const QTMSEffect& tmseffect, + QTMSSignalEvent event) + { + QTMSEffectType effecttype; + const_cast (tmseffect).GetType(effecttype); + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + switch (effecttype) + { + case TMS_EFFECT_GLOBAL_VOL: + { + switch (event.type) + { + case TMS_EVENT_EFFECT_VOL_CHANGED: + qDebug("Global vol effect change"); + break; + default: + break; + } + } + break; + case TMS_EFFECT_GLOBAL_GAIN: + { + switch (event.type) + { + case TMS_EVENT_EFFECT_GAIN_CHANGED: + qDebug("Global gain effect change"); + break; + default: + break; + } + } + break; + case TMS_EFFECT_VOLUME: + qDebug("Stream vol effect change"); + break; + case TMS_EFFECT_GAIN: + qDebug("Stream gain effect change"); + break; + default: + break; + } + } + + +void QTmsCsTest::GlobalRoutingEvent(const QTMSGlobalRouting& /*routing*/, + QTMSSignalEvent event, QTMSAudioOutput /*output*/) + { + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) + { + case TMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED: + qDebug("Available outputs changed"); + break; + case TMS_EVENT_ROUTING_OUTPUT_CHANGED: + qDebug("output changed"); + break; + case TMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE: + qDebug("set output complete"); + break; + default: + break; + } + + } + +void QTmsCsTest::TMSStreamEvent(const QTMSStream& stream, + QTMSSignalEvent event) + { + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + gint streamId; + streamId = const_cast (stream).GetStreamId(); + qDebug("StreamID %d",streamId); + gint state; + state = const_cast (stream).GetState(); + QVERIFY(state == event.curr_state); + + switch (const_cast (stream).GetStreamType()) + { + case QTMS_STREAM_UPLINK: + { + switch (event.type) + { + case QTMS_EVENT_STREAM_STATE_CHANGED: + { + switch (event.curr_state) + { + case QTMS_STREAM_INITIALIZED: + { + qDebug("Uplink initialized "); + break; + } + case QTMS_STREAM_UNINITIALIZED: + qDebug("Uplink uninitialized "); + break; + case QTMS_STREAM_PAUSED: + qDebug("Uplink paused "); + break; + case QTMS_STREAM_STARTED: + qDebug("Uplink started "); + break; + default: + break; + } + break; + } + default: + break; + } + break; + } + case QTMS_STREAM_DOWNLINK: + { + switch (event.type) + { + case QTMS_EVENT_STREAM_STATE_CHANGED: + { + switch (event.curr_state) + { + case QTMS_STREAM_INITIALIZED: + { + qDebug("Downlink initialized "); + break; + } + case QTMS_STREAM_UNINITIALIZED: + qDebug("Downlink uninitialized "); + break; + case QTMS_STREAM_PAUSED: + qDebug("Downlink paused "); + break; + case QTMS_STREAM_STARTED: + qDebug("Downlink started "); + break; + default: + break; + } + break; + } + default: + break; + } + break; + } + default: + break; + } + } + + +void QTmsCsTest::RingtoneEvent(const QTMSRingTone& /*rt*/, + QTMSSignalEvent event) + { + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) + { + case TMS_EVENT_RINGTONE_OPEN_COMPLETE: + qDebug("RT Open Complete"); + break; + case TMS_EVENT_RINGTONE_PLAY_COMPLETE: + qDebug("RT Play Complete"); + break; + default: + break; + } + } + + +void QTmsCsTest::DTMFEvent(const QTMSDTMF& /*dtmf*/, QTMSSignalEvent event) + { + if(event.reason!= QTMS_RESULT_SUCCESS) + { + QEXPECT_FAIL("","Need to be in call, expect uplink dtmf to fail", Continue); + } + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + switch (event.type) + { + case QTMS_EVENT_DTMF_TONE_STARTED: + qDebug("DTMF Started"); + break; + case QTMS_EVENT_DTMF_TONE_STOPPED: + qDebug("DTMF Stopped"); + break; + default: + break; + } + } + +void QTmsCsTest::InbandToneEvent(const QTMSInbandTone& /*inbandtone*/, + QTMSSignalEvent event) + { + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) + { + case QTMS_EVENT_INBAND_TONE_STARTED: + qDebug("Inband Tone Started"); + break; + case QTMS_EVENT_INBAND_TONE_STOPPED: + qDebug("Inband Tone Stopped"); + break; + default: + break; + } + } + +QTEST_MAIN_S60(QTmsCsTest) + +#include "qtmscstest.moc" + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmscstest/qtmscstest.pro Wed Jun 23 17:51:16 2010 +0100 @@ -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: +# Project specification file for tsrc. +# + + +CONFIG += qtestlib +TEMPLATE = app +TARGET = +TARGET.CAPABILITY = CAP_APPLICATION MultimediaDD +TARGET.EPOCALLOWDLLDATA = 1 + + +LIBS += -lqtmsapi \ + -llibglib \ + -llibgobject \ + -llibgmodule \ + -llibstdcpp + +DEPENDPATH += . +INCLUDEPATH += . + + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ + $$OS_LAYER_LIBC_SYSTEMINCLUDE \ + $$OS_LAYER_GLIB_SYSTEMINCLUDE \ + ..\..\..\qt_telephony_multimedia_service_api\inc + +# Input +HEADERS += qtestmains60.h +SOURCES += qtmscstest.cpp diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtestmains60.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtestmains60.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,39 @@ +/* +* 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 QTESTMAINS60 +#define QTESTMAINS60 + +#define QTEST_MAIN_S60(QTmsVoipTest) \ +int main(int argc, char *argv[]) \ +{ \ +char *new_argv[3]; \ +QCoreApplication app(argc, argv); \ +\ +QString str = "C:\\data\\" + QFileInfo(QCoreApplication::applicationFilePath()).baseName() + ".log"; \ +QByteArray bytes = str.toAscii(); \ +\ +char arg1[] = "-o"; \ +\ +new_argv[0] = argv[0]; \ +new_argv[1] = arg1; \ +new_argv[2] = bytes.data(); \ +\ +QTmsVoipTest tc; \ +return QTest::qExec(&tc, 3, new_argv); \ +} +#endif diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,1933 @@ +/* +* 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: QTMS Voip test +* +*/ +#include +#include +#include "qtestmains60.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + +// CONSTANTS +#define __TEST_CODE_COVERAGE__ + +using namespace QTMS; + +class QTmsVoipTest : public QObject + { +Q_OBJECT +private slots: + void initTestCase(); + void init(); + void cleanup(); + void SupportedFormats(); + void CreateRouting_data(); + void CreateRouting(); + void CreateGlobalVol(); + void CreateGlobalGain(); + void CreateFormat_data(); + void CreateFormat(); + void CreateStreamVol(); + void CreateStreamGain(); + void CreateDnlinkDtmf(); + void CreateBuffer(); + + void cleanupTestCase(); +public slots: + //From TMSClientSourceObserver + void FillBuffer(TMS::TMSBuffer& buffer); + void BufferProcessed(TMS::TMSBuffer* buffer, gint reason); + //From TMSClientSinkObserver + void ProcessBuffer(const TMS::TMSBuffer* buffer); + //From TMSStreamObserver + void TMSStreamEvent(const QTMSStream& stream, QTMSSignalEvent event); + //From TMSClientSinkObserver + void EffectsEvent(const QTMSEffect& tmseffect, QTMSSignalEvent event); + //From TMSGlobalRoutingObserver + void GlobalRoutingEvent(const QTMSGlobalRouting& routing, + QTMSSignalEvent event, QTMSAudioOutput output); + //From TMSRingToneObserver + void RingtoneEvent(const QTMSRingTone& rt, QTMSSignalEvent event); + //From TMSDTMFObserver + void DTMFEvent(const QTMSDTMF& dtmf, QTMSSignalEvent event); + +private: + + void VoipCallSetup(); + + void SupportedUplinkFormats(); + void SupportedDnlinkFormats(); + + void CreateUplink(); + void CreateDnlink(); + + void CreateMicSource(); + void AddMicSourceToStream(); + + void CreateClientSink(); + void AddClientSinkToStream(); + + void CreateClientSource(); + void AddClientSourceToStream(); + + void CreateSpeakerSink(); + void AddSpeakerSinkToStream(); + + void InitUplink(); + void InitDnlink(); + + void DeinitUplink(); + void DeinitDnlink(); + + void StartUplink(); + void StopUplink(); + void StartDnlink(); + + void ResetUplnkFormat(); + void ResetDnlnkFormat(); + + void StreamVol(); + void StreamGain(); + + void CloseUplink(); + void CloseDownlink(); + + void DisplayFormat(QTMSFormatType format); + void StopDnlink(); + void CreateRingTone(); + + void ToggleVad(); + void GetVad(); + void ToggleCng(); + void GetCng(); + void TogglePlc(); + void GetPlc(); + + void SelectMinBitrate(); + void SelectMaxBitrate(); + void SetBitrate(guint bitrate); + void GetSupportedBitrates(); + gint GetSupportedBitrates(BitRateVector& aBrArr); + void GetBitrate(); + + void SetDnLinkG711ALAW(); + void SetDnLinkG711uLAW(); + void SetDnLinkILBC20MS(); + void SetDnLinkILBC30MS(); + void SetUpLinkG711ALAW(); + void SetUpLinkG711uLAW(); + void SetUpLinkILBC20MS(); + void SetUpLinkILBC30MS(); + void GetDnLinkG711Mode(); + void GetDnLinkILBCMode(); + void GetUpLinkG711Mode(); + void GetUpLinkILBCMode(); + + void DisplayDevice(QTMSAudioOutput device); + +private: + QTMSFactory *m_Factory; + QTMSCall *m_Call; + QTMSDTMF *m_Dnlnkdtmf; + QTMSStream *m_Dnlink; + QTMSStream *m_Uplink; + + QTMSSource *m_MicSource; + QTMSSource *m_ClientSource; + QTMSSink *m_ClientSink; + QTMSSink *m_SpeakerSink; + + QTMSFormat *m_G711EncFormatIntfc; + QTMSFormat *m_G711DecFormatIntfc; + QTMSFormat *m_G729EncFormatIntfc; + QTMSFormat *m_G729DecFormatIntfc; + QTMSFormat *m_ILBCEncFormatIntfc; + QTMSFormat *m_ILBCDecFormatIntfc; + QTMSFormat *m_AMRNBEncFormatIntfc; + QTMSFormat *m_AMRNBDecFormatIntfc; + QTMSFormat *m_PCM16EncFormatIntfc; + QTMSFormat *m_PCM16DecFormatIntfc; + + QTMS::FormatVector m_UplCodecs; + QTMS::FormatVector m_DnlCodecs; + + BitRateVector m_BitratesVector; + guint iBitrate; + + QTMSEffect *m_Vol; + QTMSEffect *m_Gain; + QTMSEffect *m_GlobalVol; + QTMSEffect *m_GlobalGain; + QTMSGlobalRouting *m_Routing; + + QTMSFormatType m_DnLinkCodec; + QTMSFormatType m_UpLinkCodec; + + QSignalSpy *m_UplinkSpy; + QSignalSpy *m_DnlinkSpy; + QSignalSpy *m_RoutingSpy; + + gboolean m_Vad; + gboolean m_Cng; + gboolean m_Plc; + + }; + +void QTmsVoipTest::initTestCase() + { + qDebug("Start QTms Voip tests"); + + g_setenv("G_SLICE", "always-malloc", 1); + + qRegisterMetaType("QTMSSignalEvent"); + qRegisterMetaType("QTMSAudioOutput"); + + } + +void QTmsVoipTest::cleanupTestCase() + { + qDebug("End QTms tests"); + } + +void QTmsVoipTest::init() + { + qDebug("****NEW TEST****"); + m_Factory = NULL; + m_Call = NULL; + m_Dnlink = NULL; + m_Uplink = NULL; + m_MicSource = NULL; + m_ClientSource = NULL; + m_SpeakerSink = NULL; + m_ClientSink = NULL; + m_Vol = NULL; + m_Gain = NULL; + m_GlobalVol = NULL; + m_GlobalGain = NULL; + m_Routing = NULL; + m_Dnlnkdtmf = NULL; + + m_G711EncFormatIntfc = NULL; + m_G711DecFormatIntfc = NULL; + m_G729EncFormatIntfc = NULL; + m_G729DecFormatIntfc = NULL; + m_ILBCEncFormatIntfc = NULL; + m_ILBCDecFormatIntfc = NULL; + m_AMRNBEncFormatIntfc = NULL; + m_AMRNBDecFormatIntfc = NULL; + m_PCM16EncFormatIntfc = NULL; + m_PCM16DecFormatIntfc = NULL; + + m_UplinkSpy = NULL; + m_DnlinkSpy = NULL; + + QTMSVer *ver(NULL); + gint status; + status = QTMSFactory::CreateFactory(m_Factory, *ver); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + VoipCallSetup(); + + CreateUplink(); + CreateDnlink(); + + CreateMicSource(); + AddMicSourceToStream(); + + CreateClientSink(); + AddClientSinkToStream(); + + CreateClientSource(); + AddClientSourceToStream(); + + CreateSpeakerSink(); + AddSpeakerSinkToStream(); + + } +void QTmsVoipTest::cleanup() + { + qDebug("****END TEST******"); + + ResetUplnkFormat(); + ResetDnlnkFormat(); + + CloseUplink(); + CloseDownlink(); + + if (m_MicSource) + m_Factory->DeleteSource(m_MicSource); + if (m_ClientSource) + m_Factory->DeleteSource(m_ClientSource); + if (m_ClientSink) + m_Factory->DeleteSink(m_ClientSink); + if (m_SpeakerSink) + m_Factory->DeleteSink(m_SpeakerSink); + + if (m_Dnlnkdtmf) + m_Factory->DeleteDTMF(m_Dnlnkdtmf); + + if (m_Vol) + m_Factory->DeleteEffect(m_Vol); + if (m_Gain) + m_Factory->DeleteEffect(m_Gain); + if (m_GlobalVol) + m_Factory->DeleteEffect(m_GlobalVol); + if (m_GlobalGain) + m_Factory->DeleteEffect(m_GlobalGain); + + if (m_Routing) + m_Factory->DeleteGlobalRouting(m_Routing); + + if (m_PCM16EncFormatIntfc) + m_Factory->DeleteFormat(m_PCM16EncFormatIntfc); + if (m_ILBCEncFormatIntfc) + m_Factory->DeleteFormat(m_ILBCEncFormatIntfc); + if (m_AMRNBEncFormatIntfc) + m_Factory->DeleteFormat(m_AMRNBEncFormatIntfc); + if (m_G711EncFormatIntfc) + m_Factory->DeleteFormat(m_G711EncFormatIntfc); + if (m_G729EncFormatIntfc) + m_Factory->DeleteFormat(m_G729EncFormatIntfc); + if (m_PCM16DecFormatIntfc) + m_Factory->DeleteFormat(m_PCM16DecFormatIntfc); + if (m_ILBCDecFormatIntfc) + m_Factory->DeleteFormat(m_ILBCDecFormatIntfc); + if (m_AMRNBDecFormatIntfc) + m_Factory->DeleteFormat(m_AMRNBDecFormatIntfc); + if (m_G711DecFormatIntfc) + m_Factory->DeleteFormat(m_G711DecFormatIntfc); + if (m_G729DecFormatIntfc) + m_Factory->DeleteFormat(m_G729DecFormatIntfc); + + if (m_Uplink) + m_Call->DeleteStream(m_Uplink); + if (m_Dnlink) + m_Call->DeleteStream(m_Dnlink); + + if (m_Call) + m_Factory->DeleteCall(m_Call); + + if (m_Factory) + delete m_Factory; + + } + +void QTmsVoipTest::VoipCallSetup() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory && !m_Call) + { + gboolean issupported(FALSE); + m_Factory->IsCallTypeSupported(QTMS_CALL_IP,issupported); + QVERIFY(issupported == TRUE); + status = m_Factory->CreateCall(QTMS_CALL_IP, m_Call, 0); + QVERIFY(status == QTMS_RESULT_SUCCESS); + guint ctxid; + m_Call->GetCallContextId(ctxid); + } + + } + +void QTmsVoipTest::SupportedFormats() + { + SupportedUplinkFormats(); + SupportedDnlinkFormats(); + } + +void QTmsVoipTest::SupportedUplinkFormats() + { + gint status(QTMS_RESULT_SUCCESS); + status = m_Factory->GetSupportedFormats(QTMS_STREAM_UPLINK,m_UplCodecs); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + qDebug("Supported UPL codecs"); + std::vector::iterator codecs = m_UplCodecs.begin(); + QTMSFormatType fmttype; + for (; codecs < m_UplCodecs.end(); codecs++) + { + (*codecs)->GetType(fmttype); + DisplayFormat(fmttype); + } + gint size = m_UplCodecs.size(); + for (gint i = 0; i < size; i++) + { + codecs = m_UplCodecs.begin(); + m_Factory->DeleteFormat(*codecs); + m_UplCodecs.erase(codecs); + } + + } + +void QTmsVoipTest::SupportedDnlinkFormats() + { + gint status(QTMS_RESULT_SUCCESS); + status = m_Factory->GetSupportedFormats(QTMS_STREAM_DOWNLINK,m_DnlCodecs); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + qDebug("Supported DNL codecs"); + std::vector::iterator codecs = m_DnlCodecs.begin(); + QTMSFormatType fmttype; + for (; codecs < m_DnlCodecs.end(); codecs++) + { + (*codecs)->GetType(fmttype); + DisplayFormat(fmttype); + } + gint size = m_DnlCodecs.size(); + for (gint i = 0; i < size; i++) + { + codecs = m_DnlCodecs.begin(); + m_Factory->DeleteFormat(*codecs); + m_DnlCodecs.erase(codecs); + } + } + + +void QTmsVoipTest::DisplayFormat(QTMSFormatType format) + { + switch (format) + { + case QTMS_FORMAT_AMR: + qDebug("AMR-NB"); + break; + case QTMS_FORMAT_G711: + qDebug("G.711"); + break; + case QTMS_FORMAT_G729: + qDebug("G.729"); + break; + case QTMS_FORMAT_ILBC: + qDebug("iLBC"); + break; + case QTMS_FORMAT_PCM: + qDebug("PCM-16"); + break; + default: + break; + } + } + +void QTmsVoipTest::CreateUplink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Call) + { + status = m_Call->CreateStream(QTMS_STREAM_UPLINK, m_Uplink); + + m_UplinkSpy = new QSignalSpy(m_Uplink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + QVERIFY( m_UplinkSpy->isValid() ); + + // QCOMPARE(m_UplinkSpy->count(), 0 ); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + connect(m_Uplink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), + this, + SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + } + } + + void QTmsVoipTest::CreateDnlink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Call) + { + status = m_Call->CreateStream(QTMS_STREAM_DOWNLINK, m_Dnlink); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_DnlinkSpy = new QSignalSpy(m_Dnlink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + + QVERIFY( m_DnlinkSpy->isValid() ); + + // QCOMPARE(m_DnlinkSpy->count(), 0 ); + + connect(m_Dnlink, + SIGNAL(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent)), + this, + SLOT(TMSStreamEvent(const QTMSStream&, QTMSSignalEvent))); + } + } + +void QTmsVoipTest::CreateClientSource() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory && !m_ClientSource) + { + status = m_Factory->CreateSource(QTMS_SOURCE_CLIENT, m_ClientSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + +void QTmsVoipTest::AddClientSourceToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Dnlink && m_ClientSource) + { + connect(static_cast (m_ClientSource), + SIGNAL(FillBuffer(TMS::TMSBuffer&)), this, + SLOT(FillBuffer(TMS::TMSBuffer&))); + status = m_Dnlink->AddSource(m_ClientSource); + +#ifdef __TEST_CODE_COVERAGE__ + QTMSSourceType st; + static_cast(m_ClientSource)->GetType(st); + gboolean enqueue(FALSE); + static_cast(m_ClientSource)->GetEnqueueMode(enqueue); + static_cast(m_ClientSource)->SetEnqueueMode(FALSE); + static_cast(m_ClientSource)->Flush(); +#endif //__TEST_CODE_COVERAGE__ + } + + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + + void QTmsVoipTest::CreateClientSink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_ClientSink) + { + status = m_Factory->CreateSink(QTMS_SINK_CLIENT, m_ClientSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsVoipTest::AddClientSinkToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Uplink && m_ClientSink) + { + connect(static_cast (m_ClientSink), + SIGNAL(ProcessBuffer(const TMS::TMSBuffer*)), this, + SLOT(ProcessBuffer(const TMS::TMSBuffer*))); + status = m_Uplink->AddSink(m_ClientSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + + + void QTmsVoipTest::CreateMicSource() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_MicSource) + { + status = m_Factory->CreateSource(TMS_SOURCE_MIC, m_MicSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsVoipTest::AddMicSourceToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Uplink && m_MicSource) + { + status = m_Uplink->AddSource(m_MicSource); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsVoipTest::CreateSpeakerSink() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_SpeakerSink) + { + status = m_Factory->CreateSink(QTMS_SINK_SPEAKER, m_SpeakerSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsVoipTest::AddSpeakerSinkToStream() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Dnlink && m_SpeakerSink) + { + status = m_Dnlink->AddSink(m_SpeakerSink); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + } + + void QTmsVoipTest::InitUplink() + { + QVERIFY(m_Uplink->Init() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 1 ); + + GetSupportedBitrates(); + SelectMinBitrate(); + SelectMaxBitrate(); + GetBitrate(); + + ToggleVad(); + GetVad(); + + SetUpLinkG711ALAW(); + SetUpLinkG711uLAW(); + GetUpLinkG711Mode(); + + SetUpLinkILBC20MS(); + SetUpLinkILBC30MS(); + GetUpLinkILBCMode(); + + } + + void QTmsVoipTest::InitDnlink() + { + QVERIFY(m_Dnlink->Init() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 1 ); + ToggleCng(); + GetCng(); + TogglePlc(); + GetPlc(); + + SetDnLinkG711ALAW(); + SetDnLinkG711uLAW(); + GetDnLinkG711Mode(); + + SetDnLinkILBC20MS(); + SetDnLinkILBC30MS(); + GetDnLinkILBCMode(); + + } + void QTmsVoipTest::DeinitUplink() + { + m_Uplink->Deinit(); + QTest::qWait(1000); + } + + void QTmsVoipTest::DeinitDnlink() + { + m_Dnlink->Deinit(); + QTest::qWait(1000); + } + + void QTmsVoipTest::StartUplink() + { + QVERIFY(m_Uplink->Start() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 2 ); + } + + void QTmsVoipTest::StartDnlink() + { + QVERIFY(m_Dnlink->Start() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 2 ); + } +void QTmsVoipTest::StopUplink() + { +#ifdef __TEST_CODE_COVERAGE__ + QVERIFY(m_Uplink->Pause()== QTMS_RESULT_SUCCESS); + QTest::qWait(1000); +#endif //__TEST_CODE_COVERAGE__ + + QVERIFY(m_Uplink->Stop() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_UplinkSpy->count(), 3 ); + } + +void QTmsVoipTest::StopDnlink() + { +#ifdef __TEST_CODE_COVERAGE__ + QVERIFY(m_Dnlink->Pause() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); +#endif //__TEST_CODE_COVERAGE__ + + QVERIFY(m_Dnlink->Stop() == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(m_DnlinkSpy->count(), 3 ); + } + +void QTmsVoipTest::CloseUplink() + { + m_Uplink->Deinit(); + QTest::qWait(1000); + if (m_Uplink) + { + if (m_Gain) + { + QVERIFY(m_Uplink->RemoveEffect(m_Gain)== QTMS_RESULT_SUCCESS); + } + if (m_MicSource) + { + QVERIFY(m_Uplink->RemoveSource(m_MicSource)== QTMS_RESULT_SUCCESS); + } + if (m_ClientSink) + { + QVERIFY(m_Uplink->RemoveSink(m_ClientSink)== QTMS_RESULT_SUCCESS); + } + } + } + +void QTmsVoipTest::CloseDownlink() + { + m_Dnlink->Deinit(); + QTest::qWait(1000); + if (m_Dnlink) + { + if (m_Vol) + { + QVERIFY(m_Dnlink->RemoveEffect(m_Vol)== QTMS_RESULT_SUCCESS); + } + if (m_ClientSource) + { + QVERIFY(m_Dnlink->RemoveSource(m_ClientSource)== QTMS_RESULT_SUCCESS); + } + if (m_SpeakerSink) + { + QVERIFY(m_Dnlink->RemoveSink(m_SpeakerSink) == QTMS_RESULT_SUCCESS); + } + } + + } + +void QTmsVoipTest::ResetUplnkFormat() + { + if (m_Uplink) + { + switch (m_UpLinkCodec) + { + case QTMS_FORMAT_PCM: + m_Uplink->ResetFormat(m_PCM16EncFormatIntfc); + break; + case QTMS_FORMAT_AMR: + m_Uplink->ResetFormat(m_AMRNBEncFormatIntfc); + break; + case QTMS_FORMAT_G711: + m_Uplink->ResetFormat(m_G711EncFormatIntfc); + break; + case QTMS_FORMAT_G729: + m_Uplink->ResetFormat(m_G729EncFormatIntfc); + break; + case QTMS_FORMAT_ILBC: + m_Uplink->ResetFormat(m_ILBCEncFormatIntfc); + break; + default: + break; + } + } + + } + +void QTmsVoipTest::ResetDnlnkFormat() + { + if (m_Dnlink) + { + switch (m_DnLinkCodec) + { + case QTMS_FORMAT_PCM: + m_Dnlink->ResetFormat(m_PCM16DecFormatIntfc); + break; + case QTMS_FORMAT_AMR: + m_Dnlink->ResetFormat(m_AMRNBDecFormatIntfc); + break; + case QTMS_FORMAT_G711: + m_Dnlink->ResetFormat(m_G711DecFormatIntfc); + break; + case QTMS_FORMAT_G729: + m_Dnlink->ResetFormat(m_G729DecFormatIntfc); + break; + case QTMS_FORMAT_ILBC: + m_Dnlink->ResetFormat(m_ILBCDecFormatIntfc); + break; + default: + break; + } + } + } + +void QTmsVoipTest::CreateFormat_data() + { + QTest::addColumn("format"); + +#ifndef __WINSCW__ + QTest::newRow("G711")<CreateFormat(QTMS_FORMAT_G711, + m_G711DecFormatIntfc); + encstatus = m_Factory->CreateFormat(QTMS_FORMAT_G711, + m_G711EncFormatIntfc); + setdecstatus = m_Dnlink->SetFormat(m_G711DecFormatIntfc); + setencstatus = m_Uplink->SetFormat(m_G711EncFormatIntfc); + qDebug("G.711 Set"); + + } + break; + case QTMS_FORMAT_G729: + { + decstatus = m_Factory->CreateFormat(QTMS_FORMAT_G729, + m_G729DecFormatIntfc); + encstatus = m_Factory->CreateFormat(QTMS_FORMAT_G729, + m_G729EncFormatIntfc); + setdecstatus = m_Dnlink->SetFormat(m_G729DecFormatIntfc); + setdecstatus = m_Uplink->SetFormat(m_G729EncFormatIntfc); + qDebug("G.729 Set"); + } + break; + case QTMS_FORMAT_ILBC: + { + decstatus = m_Factory->CreateFormat(QTMS_FORMAT_ILBC, + m_ILBCDecFormatIntfc); + encstatus = m_Factory->CreateFormat(QTMS_FORMAT_ILBC, + m_ILBCEncFormatIntfc); + setdecstatus = m_Dnlink->SetFormat(m_ILBCDecFormatIntfc); + setencstatus = m_Uplink->SetFormat(m_ILBCEncFormatIntfc); + qDebug("iLBC Set"); + } + break; + case QTMS_FORMAT_AMR: + { + decstatus = m_Factory->CreateFormat(QTMS_FORMAT_AMR, + m_AMRNBDecFormatIntfc); + encstatus = m_Factory->CreateFormat(QTMS_FORMAT_AMR, + m_AMRNBEncFormatIntfc); + setdecstatus = m_Dnlink->SetFormat(m_AMRNBDecFormatIntfc); + setencstatus = m_Uplink->SetFormat(m_AMRNBEncFormatIntfc); + qDebug("AMR-NB Set"); + } + break; + case QTMS_FORMAT_PCM: + { + decstatus = m_Factory->CreateFormat(QTMS_FORMAT_PCM, + m_PCM16DecFormatIntfc); + encstatus = m_Factory->CreateFormat(QTMS_FORMAT_PCM, + m_PCM16EncFormatIntfc); + setdecstatus = m_Dnlink->SetFormat(m_PCM16DecFormatIntfc); + setencstatus = m_Uplink->SetFormat(m_PCM16EncFormatIntfc); + qDebug("PCM-16 Set"); + } + break; + default: + break; + } + + QVERIFY(decstatus == QTMS_RESULT_SUCCESS); + QVERIFY(encstatus == QTMS_RESULT_SUCCESS); + QVERIFY(setdecstatus == QTMS_RESULT_SUCCESS); + QVERIFY(setencstatus == QTMS_RESULT_SUCCESS); + + InitUplink(); + InitDnlink(); + } + + +void QTmsVoipTest::ToggleVad() + { + //m_Vad = (m_Vad) ? EFalse : ETrue; + + m_Vad = ETrue; + switch (m_UpLinkCodec) + { + case QTMS_FORMAT_G711: + static_cast (m_G711EncFormatIntfc)->SetVADMode( + m_Vad); + qDebug("G711 VAD set %d", m_Vad); + break; + case QTMS_FORMAT_G729: + static_cast (m_G729EncFormatIntfc)->SetVADMode( + m_Vad); + qDebug("G729 VAD set %d",m_Vad); + break; + case QTMS_FORMAT_ILBC: + static_cast (m_ILBCEncFormatIntfc)->SetVADMode( + m_Vad); + qDebug("iLBC VAD set %d",m_Vad); + break; + case QTMS_FORMAT_AMR: + //static_cast(iAMRNBEncFormatIntfc)->SetVADMode(m_Vad); + break; + case QTMS_FORMAT_PCM: + // Not supported; just for testing failing condition + //static_cast(iPCM16EncFormatIntfc)->SetVADMode(m_Vad); + break; + default: + break; + } + } + + +void QTmsVoipTest::GetVad() + { + gint status(QTMS_RESULT_SUCCESS); + gboolean vad = EFalse; + + switch (m_UpLinkCodec) + { + case QTMS_FORMAT_G711: + status = static_cast (m_G711EncFormatIntfc)->GetVADMode( + vad); + qDebug("get G711 VAD: %d", vad); + break; + case QTMS_FORMAT_G729: + status = static_cast (m_G729EncFormatIntfc)->GetVADMode( + vad); + qDebug("get G729 VAD: %d", vad); + break; + case QTMS_FORMAT_ILBC: + status = static_cast (m_ILBCEncFormatIntfc)->GetVADMode( + vad); + qDebug("get iLBC VAD: %d", vad); + break; + default: + return; + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + // QVERIFY(vad == m_Vad); + + + } + +void QTmsVoipTest::ToggleCng() + { +// m_Cng = (m_Cng) ? EFalse : ETrue; + + m_Cng = ETrue; + switch (m_DnLinkCodec) + { + case QTMS_FORMAT_G711: + //case EG711_10MS: + static_cast (m_G711DecFormatIntfc)->SetCNG(m_Cng); + qDebug("G711 CNG set %d", m_Cng); + break; + case QTMS_FORMAT_ILBC: + static_cast (m_ILBCDecFormatIntfc)->SetCNG(m_Cng); + qDebug("iLBC CNG set %d", m_Cng); + break; + default: + break; + } + } + + +void QTmsVoipTest::GetCng() + { + gint status; + gboolean cng = EFalse; + switch (m_DnLinkCodec) + { + case QTMS_FORMAT_G711: + status = static_cast(m_G711DecFormatIntfc)->GetCNG(cng); + qDebug("G711 CNG: %d", cng); + QVERIFY(status == QTMS_RESULT_SUCCESS); + break; + case QTMS_FORMAT_ILBC: + status = static_cast(m_ILBCDecFormatIntfc)->GetCNG(cng); + qDebug("iLBC CNG: %d", cng); + QVERIFY(status == QTMS_RESULT_SUCCESS); + break; + default: + break; + } + + // QVERIFY(cng == m_Cng); + + } + + +void QTmsVoipTest::TogglePlc() + { +// m_Plc = (m_Plc) ? EFalse : ETrue; + m_Plc = ETrue; + if (m_DnLinkCodec == QTMS_FORMAT_G711) + { + static_cast (m_G711DecFormatIntfc)->SetPlc(m_Plc); + qDebug("G711 PLC set %d",m_Plc ); + } + } + +void QTmsVoipTest::GetPlc() + { + gboolean plc = EFalse; + if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) + { + gint status = + static_cast (m_G711DecFormatIntfc)->GetPlc( + plc); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("G711 PLC: %d", plc); + // QVERIFY(plc == m_Plc); + } + } + + + +void QTmsVoipTest::SelectMinBitrate() + { + if (m_BitratesVector.size() > 0) + { + std::vector::iterator bitrate = m_BitratesVector.begin(); + iBitrate = *bitrate; + SetBitrate(iBitrate); + qDebug("BR set %d",iBitrate); + } + } + + +void QTmsVoipTest::SelectMaxBitrate() + { + if (m_BitratesVector.size() > 0) + { + iBitrate = m_BitratesVector.back(); + SetBitrate(iBitrate); + qDebug("BR set %d",iBitrate); + } + } + + +void QTmsVoipTest::SetBitrate(guint bitrate) + { + switch (m_UpLinkCodec) + { + case QTMS_FORMAT_G711: + static_cast (m_G711EncFormatIntfc)->SetBitRate( + bitrate); + qDebug("Set BR %d",bitrate); + break; + case QTMS_FORMAT_G729: + static_cast (m_G729EncFormatIntfc)->SetBitRate( + bitrate); + qDebug("Set BR %d",bitrate); + break; + case QTMS_FORMAT_ILBC: + static_cast (m_ILBCEncFormatIntfc)->SetBitRate( + bitrate); + qDebug("Set BR %d",bitrate); + break; + case QTMS_FORMAT_AMR: + static_cast (m_AMRNBEncFormatIntfc)->SetBitRate( + bitrate); + qDebug("Set BR %d",bitrate); + break; + case QTMS_FORMAT_PCM: + default: + break; + } + } + + +void QTmsVoipTest::GetSupportedBitrates() + { + gint numOfItems(0); + m_BitratesVector.clear(); + gint status = GetSupportedBitrates(m_BitratesVector); + + numOfItems = m_BitratesVector.size(); + qDebug("BR Count %d", numOfItems); + std::vector::iterator itBitrates = m_BitratesVector.begin(); + for (; itBitrates < m_BitratesVector.end(); itBitrates++) + { + qDebug("BR %d", *itBitrates); + } + } + + +gint QTmsVoipTest::GetSupportedBitrates(BitRateVector& aBrArr) + { + gint status(QTMS_RESULT_SUCCESS); + + switch (m_UpLinkCodec) + { + case QTMS_FORMAT_G711: + status = m_G711EncFormatIntfc->GetSupportedBitRates(aBrArr); + break; + case QTMS_FORMAT_G729: + status = m_G729EncFormatIntfc->GetSupportedBitRates(aBrArr); + break; + case QTMS_FORMAT_ILBC: + status = m_ILBCEncFormatIntfc->GetSupportedBitRates(aBrArr); + break; + case QTMS_FORMAT_AMR: + status = m_AMRNBEncFormatIntfc->GetSupportedBitRates(aBrArr); + break; + case QTMS_FORMAT_PCM: + // not supported, but test for correct error handling + //status = m_PCM16EncFormatIntfc->GetSupportedBitRates(aBrArr); + break; + default: + status = KErrNotSupported; + break; + } + + return status; + } + + +void QTmsVoipTest::GetBitrate() + { + guint bitrate; + switch (m_UpLinkCodec) + { + case QTMS_FORMAT_G711: + static_cast (m_G711EncFormatIntfc)->GetBitRate( + bitrate); + qDebug("G711 bitrate: %d", bitrate); + break; + case QTMS_FORMAT_G729: + static_cast (m_G729EncFormatIntfc)->GetBitRate( + bitrate); + qDebug("G729 bitrate: %d", bitrate); + break; + case QTMS_FORMAT_ILBC: + static_cast (m_ILBCEncFormatIntfc)->GetBitRate( + bitrate); + qDebug("iLBC bitrate: %d", bitrate); + break; + case QTMS_FORMAT_AMR: + static_cast (m_AMRNBEncFormatIntfc)->GetBitRate( + bitrate); + qDebug("AMR bitrate: %d", bitrate); + break; + case TMS_FORMAT_PCM: + default: + break; + } + } + + +void QTmsVoipTest::SetDnLinkG711ALAW() + { + if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) + { + gint status = static_cast (m_G711DecFormatIntfc)->SetMode( + QTMS_G711_CODEC_MODE_ALAW); + qDebug("SetDnLinkG711ALAW status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("DNL G.711 Mode Set: [aLaw]"); + } + } + + +void QTmsVoipTest::SetDnLinkG711uLAW() + { + if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) + { + gint status = static_cast (m_G711DecFormatIntfc)->SetMode( + QTMS_G711_CODEC_MODE_MULAW); + qDebug("SetDnLinkG711uLAW status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("DNL G.711 Mode Set: [uLaw]"); + } + } + + +void QTmsVoipTest::GetDnLinkG711Mode() + { + QTMSG711CodecMode mode; + if (m_G711DecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_G711) + { + gint status = + static_cast (m_G711DecFormatIntfc)->GetMode( + mode); + qDebug("GetDnLinkG711Mode status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (mode == TMS_G711_CODEC_MODE_MULAW) + { + qDebug("DNL G711 Mode: [uLaw]"); + } + else + { + qDebug("DNL G711 Mode: [aLaw]"); + } + } + } + + +void QTmsVoipTest::SetDnLinkILBC20MS() + { + if (m_ILBCDecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_ILBC) + { + gint status = + static_cast (m_ILBCDecFormatIntfc)->SetMode( + TMS_ILBC_CODEC_MODE_20MS_FRAME); + qDebug("SetDnLinkILBC20MS status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("DNL iLBC Mode Set: [20ms]"); + } + } + + +void QTmsVoipTest::SetDnLinkILBC30MS() + { + if (m_ILBCDecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_ILBC) + { + gint status = + static_cast (m_ILBCDecFormatIntfc)->SetMode( + TMS_ILBC_CODEC_MODE_30MS_FRAME); + qDebug("SetDnLinkILBC30MS status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("DNL iLBC Mode Set: [30ms]"); + } + } + + +void QTmsVoipTest::GetDnLinkILBCMode() + { + QTMSILBCCodecMode mode; + if (m_ILBCDecFormatIntfc && m_DnLinkCodec == QTMS_FORMAT_ILBC) + { + gint status = + static_cast (m_ILBCDecFormatIntfc)->GetMode( + mode); + qDebug("GetDnLinkILBCMode status %d",status); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (mode == QTMS_ILBC_CODEC_MODE_30MS_FRAME) + { + qDebug("DNL iLBC Mode: [30ms]"); + } + else if (mode == QTMS_ILBC_CODEC_MODE_20MS_FRAME) + { + qDebug("DNL iLBC Mode: [20ms]"); + } + } + } + +void QTmsVoipTest::SetUpLinkG711ALAW() + { + if (m_G711EncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_G711) + { + gint status = + static_cast (m_G711EncFormatIntfc)->SetMode( + QTMS_G711_CODEC_MODE_ALAW); + + qDebug("SetUpLinkG711ALAW status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("UPL G.711 Mode Set: [aLaw]"); + } + } + +void QTmsVoipTest::SetUpLinkG711uLAW() + { + if (m_G711EncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_G711) + { + gint status = + static_cast (m_G711EncFormatIntfc)->SetMode( + QTMS_G711_CODEC_MODE_MULAW); + qDebug("SetUpLinkG711uLAW status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("UPL G.711 Mode Set: [uLaw]"); + } + } + +void QTmsVoipTest::GetUpLinkG711Mode() + { + QTMSG711CodecMode mode; + if (m_G711EncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_G711) + { + gint status = + static_cast (m_G711EncFormatIntfc)->GetMode( + mode); + qDebug("GetUpLinkG711Mode status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (mode == QTMS_G711_CODEC_MODE_MULAW) + { + qDebug("UPL G.711 Mode: [uLaw]"); + } + else if (mode == QTMS_G711_CODEC_MODE_ALAW) + { + qDebug("UPL G.711 Mode: [aLaw]"); + } + } + + } + + +void QTmsVoipTest::SetUpLinkILBC20MS() + { + if (m_ILBCEncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_ILBC) + { + gint status = + static_cast (m_ILBCEncFormatIntfc)->SetMode( + QTMS_ILBC_CODEC_MODE_20MS_FRAME); + qDebug("SetUpLinkILBC20MS status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("UPL iLBC Mode Set: [20ms]"); + } + } + + +void QTmsVoipTest::SetUpLinkILBC30MS() + { + if (m_ILBCEncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_ILBC) + { + gint status = + static_cast (m_ILBCEncFormatIntfc)->SetMode( + QTMS_ILBC_CODEC_MODE_30MS_FRAME); + qDebug("SetUpLinkILBC30MS status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("UPL iLBC Mode Set: [30ms]"); + } + } + +void QTmsVoipTest::GetUpLinkILBCMode() + { + QTMSILBCCodecMode mode; + if (m_ILBCEncFormatIntfc && m_UpLinkCodec == QTMS_FORMAT_ILBC) + { + gint status = + static_cast (m_ILBCEncFormatIntfc)->GetMode( + mode); + qDebug("GetUpLinkILBCMode status %d",status); + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (mode == QTMS_ILBC_CODEC_MODE_30MS_FRAME) + { + qDebug("UPL iLBC Mode: [30ms]"); + } + else if (mode == QTMS_ILBC_CODEC_MODE_20MS_FRAME) + { + qDebug("UPL iLBC Mode: [20ms]"); + } + } + + } + + +void QTmsVoipTest::CreateStreamVol() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && m_Dnlink && !m_Vol) + { + m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc); + m_Dnlink->SetFormat(m_PCM16DecFormatIntfc); + + status = m_Factory->CreateEffect(QTMS_EFFECT_VOLUME, m_Vol); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_Vol), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + if(m_Dnlink) + { + status = m_Dnlink->AddEffect(m_Vol); + } + QVERIFY(status == QTMS_RESULT_SUCCESS); + + InitDnlink(); + + StreamVol(); + + } + } + +void QTmsVoipTest::StreamVol() + { + gint status(QTMS_RESULT_SUCCESS); + guint maxvol(0); + if (m_Vol) + { + status = static_cast (m_Vol)->GetMaxLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + status = static_cast (m_Vol)->SetLevel(maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint vol(0); + status = static_cast (m_Vol)->GetLevel(vol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(vol,maxvol); + } + } + +void QTmsVoipTest::CreateStreamGain() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && m_Uplink && !m_Gain) + { + + m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16EncFormatIntfc); + m_Uplink->SetFormat(m_PCM16EncFormatIntfc); + status = m_Factory->CreateEffect(QTMS_EFFECT_GAIN, m_Gain); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_Gain), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + status = m_Uplink->AddEffect(m_Gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + InitUplink(); + + StreamGain(); + } + } + +void QTmsVoipTest::StreamGain() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Gain) + { + guint maxgain(0); + static_cast (m_Gain)->GetMaxLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + static_cast (m_Gain)->SetLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint gain(0); + static_cast (m_Gain)->GetLevel(gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QCOMPARE(gain,maxgain); + } + + } + +void QTmsVoipTest::CreateGlobalVol() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_GlobalVol) + { + status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_VOL, m_GlobalVol); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_GlobalVol), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + guint maxvol(0); + status = static_cast(m_GlobalVol)->GetMaxLevel( + maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("global max vol %d",maxvol); + + status = static_cast(m_GlobalVol)->SetLevel( + maxvol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint vol(0); + status = static_cast (m_GlobalVol)->GetLevel(vol); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("global vol %d",vol); + + QCOMPARE(vol,maxvol); + + } + } + + +void QTmsVoipTest::CreateGlobalGain() + { + gint status(QTMS_RESULT_SUCCESS); + + if (m_Factory && !m_GlobalGain) + { + status = m_Factory->CreateEffect(QTMS_EFFECT_GLOBAL_GAIN, m_GlobalGain); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + connect(static_cast (m_GlobalGain), + SIGNAL(EffectsEvent(const QTMSEffect&,QTMSSignalEvent)), + this, + SLOT(EffectsEvent(const QTMSEffect&,QTMSSignalEvent))); + + guint maxgain(0); + static_cast(m_GlobalGain)->GetMaxLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("global max gain %d",maxgain); + + static_cast(m_GlobalGain)->SetLevel(maxgain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + + guint gain(0); + static_cast(m_GlobalGain)->GetLevel(gain); + QVERIFY(status == QTMS_RESULT_SUCCESS); + qDebug("global gain %d",gain); + + QCOMPARE(gain,maxgain); + + } + } + +void QTmsVoipTest::CreateRouting_data() + { + + QTest::addColumn("routing"); + + QTest::newRow("Public")<CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc); + m_Dnlink->SetFormat(m_PCM16DecFormatIntfc); + + InitDnlink(); + StartDnlink(); + + status = m_Factory->CreateGlobalRouting(m_Routing); + QVERIFY(status == QTMS_RESULT_SUCCESS); + + m_RoutingSpy = new QSignalSpy(m_Routing, + SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&, + QTMSSignalEvent, + QTMSAudioOutput))); + + QVERIFY( m_RoutingSpy->isValid() ); + + //QCOMPARE(m_RoutingSpy->count(), 0 ); + connect(m_Routing, + SIGNAL(GlobalRoutingEvent(const QTMSGlobalRouting&,QTMSSignalEvent,QTMSAudioOutput)), + this, + SLOT(GlobalRoutingEvent(const QTMSGlobalRouting&,QTMSSignalEvent,QTMSAudioOutput))); + } + + if(m_Routing) + { + status = m_Routing->SetOutput(routing); + QVERIFY(status == QTMS_RESULT_SUCCESS); +#ifndef __WINSCW__ + QTest::qWait(1000); + //QCOMPARE(m_RoutingSpy->count(), 1 ); +#endif + QTMSAudioOutput current; + status = m_Routing->GetOutput(current); + DisplayDevice(current); + + QVERIFY(status == QTMS_RESULT_SUCCESS); +#ifndef __WINSCW__ + QCOMPARE(routing,current); +#endif + StopDnlink(); + } + } + + +void QTmsVoipTest::DisplayDevice(QTMSAudioOutput device) + { + qDebug("Current Output:"); + + switch (device) + { + case QTMS_AUDIO_OUTPUT_NONE: + { + qDebug("none"); + } + break; + case QTMS_AUDIO_OUTPUT_PUBLIC: + { + qDebug("Public"); + } + break; + case QTMS_AUDIO_OUTPUT_PRIVATE: + { + qDebug("Private"); + } + break; + default: + break; + } + } + + +void QTmsVoipTest::CreateDnlinkDtmf() + { + gint status(QTMS_RESULT_SUCCESS); + GString* dtmfstring(NULL); + + if (m_Factory && m_Dnlink && !m_Dnlnkdtmf) + { + m_UpLinkCodec = QTMS_FORMAT_PCM; + m_Factory->CreateFormat(QTMS_FORMAT_PCM, m_PCM16DecFormatIntfc); + m_Dnlink->SetFormat(m_PCM16DecFormatIntfc); + + InitDnlink(); + + status = m_Factory->CreateDTMF(QTMS_STREAM_DOWNLINK, m_Dnlnkdtmf); + + QVERIFY(status == QTMS_RESULT_SUCCESS); + + QSignalSpy dtmfspy(m_Dnlnkdtmf, + SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + QVERIFY( dtmfspy.isValid() ); + + //QCOMPARE(dtmfspy.count(), 0 ); + + connect(m_Dnlnkdtmf, + SIGNAL(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent)), this, + SLOT(DTMFEvent(const QTMSDTMF&,QTMSSignalEvent))); + + dtmfstring = g_string_new("4723"); + status = m_Dnlnkdtmf->SetTone(dtmfstring); + + m_Dnlnkdtmf->Start(); + QTest::qWait(1000); + g_string_free(dtmfstring, TRUE); + //QCOMPARE(dtmfspy.count(), 1 ); + + status = m_Dnlnkdtmf->Stop(); + QVERIFY(status == QTMS_RESULT_SUCCESS); + QTest::qWait(1000); + //QCOMPARE(dtmfspy.count(), 2 ); + } + } + +void QTmsVoipTest::CreateRingTone() + { + + } + + +void QTmsVoipTest::CreateBuffer() + { + gint status(QTMS_RESULT_SUCCESS); + if (m_Factory) + { + QTMSBuffer* qtmsbuffer(NULL); + QTMSBufferType buftype(QTMS_BUFFER_MEMORY); + guint size(100); + status = m_Factory->CreateBuffer(QTMS_BUFFER_MEMORY, + size, qtmsbuffer); + QVERIFY(status == QTMS_RESULT_SUCCESS); + if (qtmsbuffer) + { + qtmsbuffer->GetType(buftype); + qtmsbuffer->GetDataSize(size); + qtmsbuffer->SetDataSize(size); + guint8* pbuf(NULL); + qtmsbuffer->GetDataPtr(pbuf); + guint64 ts(0); + qtmsbuffer->GetTimeStamp(ts); + qtmsbuffer->SetTimeStamp(ts); + m_Factory->DeleteBuffer(qtmsbuffer); + } + } + } + + +void QTmsVoipTest::FillBuffer(TMS::TMSBuffer& buffer) + { + //TODO: add loopback test and file playback +#ifdef __TEST_CODE_COVERAGE__ + if(m_ClientSource) + { + static_cast (m_ClientSource)->BufferFilled( + buffer); + } +#endif + + } + +void QTmsVoipTest::BufferProcessed(TMS::TMSBuffer* /*buffer*/, gint /*reason*/) + { + } + +void QTmsVoipTest::ProcessBuffer(const TMS::TMSBuffer* buffer) + { + //TODO: add loopback test +#ifdef __TEST_CODE_COVERAGE__ + TMS::TMSBuffer* recBuf(NULL); + recBuf = const_cast (buffer); + if(m_ClientSink) + { + static_cast (m_ClientSink)->BufferProcessed( + recBuf); + } +#endif + } + + + +void QTmsVoipTest::EffectsEvent(const QTMSEffect& tmseffect, + QTMSSignalEvent event) + { + QTMSEffectType effecttype; + const_cast (tmseffect).GetType(effecttype); + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + switch (effecttype) + { + case QTMS_EFFECT_GLOBAL_VOL: + { + switch (event.type) + { + case QTMS_EVENT_EFFECT_VOL_CHANGED: + qDebug("Global vol effect change"); + break; + default: + break; + } + } + break; + case QTMS_EFFECT_GLOBAL_GAIN: + { + switch (event.type) + { + case QTMS_EVENT_EFFECT_GAIN_CHANGED: + qDebug("Global gain effect change"); + break; + default: + break; + } + } + break; + case QTMS_EFFECT_VOLUME: + { + switch (event.type) + { + case QTMS_EVENT_EFFECT_GAIN_CHANGED: + qDebug("Stream vol effect change"); + break; + default: + break; + } + } + break; + case QTMS_EFFECT_GAIN: + { + switch (event.type) + { + case QTMS_EVENT_EFFECT_GAIN_CHANGED: + qDebug("Stream gain effect change"); + break; + default: + break; + } + } + break; + default: + break; + } + } + + + +void QTmsVoipTest::GlobalRoutingEvent(const QTMSGlobalRouting& /*routing*/, + QTMSSignalEvent event, QTMSAudioOutput /*output*/) + { + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) + { + case QTMS_EVENT_ROUTING_AVAIL_OUTPUTS_CHANGED: + qDebug("Available outputs changed"); + break; + case QTMS_EVENT_ROUTING_OUTPUT_CHANGED: + qDebug("output changed"); + break; + case QTMS_EVENT_ROUTING_SET_OUTPUT_COMPLETE: + qDebug("set output complete"); + break; + default: + break; + } + + } + +void QTmsVoipTest::TMSStreamEvent(const QTMSStream& stream, + QTMSSignalEvent event) + { + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + + gint streamId; + streamId = const_cast (stream).GetStreamId(); + qDebug("StreamID %d",streamId); + gint state; + state = const_cast (stream).GetState(); + QVERIFY(state == event.curr_state); + + switch (const_cast (stream).GetStreamType()) + { + case QTMS_STREAM_UPLINK: + { + switch (event.type) + { + case QTMS_EVENT_STREAM_STATE_CHANGED: + { + switch (event.curr_state) + { + case QTMS_STREAM_INITIALIZED: + { + qDebug("Uplink initialized "); + break; + } + case QTMS_STREAM_UNINITIALIZED: + qDebug("Uplink uninitialized "); + break; + case QTMS_STREAM_PAUSED: + qDebug("Uplink paused "); + break; + case QTMS_STREAM_STARTED: + qDebug("Uplink started "); + break; + default: + break; + } + break; + } + default: + break; + } + break; + } + case QTMS_STREAM_DOWNLINK: + { + switch (event.type) + { + case QTMS_EVENT_STREAM_STATE_CHANGED: + { + switch (event.curr_state) + { + case QTMS_STREAM_INITIALIZED: + qDebug("Downlink initialized "); + break; + case QTMS_STREAM_UNINITIALIZED: + qDebug("Downlink uninitialized "); + break; + case QTMS_STREAM_PAUSED: + qDebug("Downlink paused "); + break; + case QTMS_STREAM_STARTED: + qDebug("Downlink started "); + break; + default: + break; + } + break; + } + default: + break; + } + break; + } + default: + break; + } + } + + +void QTmsVoipTest::RingtoneEvent(const QTMSRingTone& /*rt*/, + QTMSSignalEvent event) + { + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) + { + case QTMS_EVENT_RINGTONE_OPEN_COMPLETE: + qDebug("RT Open Complete"); + break; + case QTMS_EVENT_RINGTONE_PLAY_COMPLETE: + qDebug("RT Play Complete"); + break; + default: + break; + } + } + + +void QTmsVoipTest::DTMFEvent(const QTMSDTMF& /*dtmf*/, QTMSSignalEvent event) + { + + QVERIFY(event.reason == QTMS_RESULT_SUCCESS); + switch (event.type) + { + case QTMS_EVENT_DTMF_TONE_STARTED: + qDebug("DTMF Started"); + break; + case QTMS_EVENT_DTMF_TONE_STOPPED: + qDebug("DTMF Stopped"); + break; + default: + break; + } + } + + +QTEST_MAIN_S60(QTmsVoipTest) + +#include "qtmsvoiptest.moc" + diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/qtmsvoiptest/qtmsvoiptest.pro Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,42 @@ +# +# 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: +# Project specification file for tsrc. +# + +TEMPLATE = app +TARGET = +QT += testlib + + +TARGET.CAPABILITY = CAP_APPLICATION MultimediaDD +TARGET.EPOCALLOWDLLDATA = 1 + + +LIBS += -lqtmsapi \ + -llibglib \ + -llibgobject \ + -llibgmodule \ + -llibstdcpp + +DEPENDPATH += . +INCLUDEPATH += . + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ + $$OS_LAYER_LIBC_SYSTEMINCLUDE \ + $$OS_LAYER_GLIB_SYSTEMINCLUDE \ + ..\..\..\qt_telephony_multimedia_service_api\inc +# Input +HEADERS += qtestmains60.h +SOURCES += qtmsvoiptest.cpp diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/tsrc.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappfw_plat/qt_telephony_multimedia_service_api/tsrc/tsrc.pro Wed Jun 23 17:51:16 2010 +0100 @@ -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: + +#include + +TEMPLATE = subdirs + +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " + + +SUBDIRS = qtmscstest \ + qtmsvoiptest + + +SYMBIAN_PLATFORMS = DEFAULT diff -r 5daa7cafd16d -r 8ef777f529f0 mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp --- a/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp Fri Feb 19 16:32:39 2010 +0000 +++ b/mmappfw_plat/videoplaylist_utility_api/tsrc/videoplaylistutilitytest/group/videoplaylistutilitytest.mmp Wed Jun 23 17:51:16 2010 +0100 @@ -15,7 +15,7 @@ * */ -// Version : %version: 2 % +// Version : %version: 5 % #include @@ -49,7 +49,6 @@ LIBRARY libglib.lib LIBRARY libpthread.lib LIBRARY efsrv.lib -LIBRARY flogger.lib LIBRARY ServiceHandler.lib LIBRARY ecom.lib LIBRARY estor.lib diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/Conf/mpx.confml Binary file mpx/Conf/mpx.confml has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/Conf/mpx_101FFCD2.crml Binary file mpx/Conf/mpx_101FFCD2.crml has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/cenrep/101FFCD2.txt Binary file mpx/cenrep/101FFCD2.txt has changed diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h --- a/mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/collectionframework/collectionengine/inc/mpxcollectionengine.h Wed Jun 23 17:51:16 2010 +0100 @@ -79,6 +79,14 @@ * @param aData some data */ IMPORT_C void NotifyL(TMPXCollectionBroadCastMsg aMsg, TInt aData); + + + /** + * Broadcast a command to all plug-ins + * @param aCmd command to send + * @param aData some data + */ + void Command(TMPXCollectionCommand aCmd, TInt aData); /** * Retrieves the set of supported file types in the collection server diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp --- a/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/collectionframework/collectionengine/src/mpxcollectionclientcontext.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -619,6 +619,13 @@ iEngine.PluginPop(); break; } + case EMcCloseCollection: + { + // Forward to all plug-ins; argument is drive number + iEngine.Command ( aCmd, aData ); + break; + } + default: { User::Leave(KErrNotSupported); @@ -2440,7 +2447,11 @@ // Check for open playlist only mode. If in that mode, do not return the media // from the cache but call the plugin to open, as that will callback a // different HandleOpenL() with the collection path instead. - TMPXOpenMode mode( iBrowsePath->OpenNextMode() ); + TMPXOpenMode mode = EMPXOpenDefault; + if(iBrowsePath) + { + mode = iBrowsePath->OpenNextMode(); + } CMPXCollectionPlugin* plugin = LoadedPlugin(EContextBrowse); if ( !iFilter && mode != EMPXOpenPlaylistOnly ) { diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp --- a/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/collectionframework/collectionengine/src/mpxcollectionengine.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -194,6 +194,9 @@ TInt command = KErrNotSupported; TInt data = 0; TBool clearCache ( EFalse ); + TBool notify( ETrue ); + TInt count = iContexts.Count(); + CMPXCollectionClientContext* context( NULL ); switch( aMsg ) { case EMcMsgFormatStart: @@ -207,8 +210,14 @@ clearCache = ETrue; break; } + case EMcMsgDiskInserted: + for( TInt i=0; iNotifyL( aMsg, aData ); + } + notify = EFalse; case EMcMsgFormatEnd: - case EMcMsgDiskInserted: case EMcMsgUSBMassStorageEnd: { command = EMcReOpenCollection; @@ -253,12 +262,7 @@ } if( command != KErrNotSupported ) { - TArray plugins = iPluginHandler->LoadedPlugins(); - for( TInt i=0; iCommandL( (TMPXCollectionCommand)command, data)); - } + Command( (TMPXCollectionCommand)command, data ); } if( clearCache ) @@ -286,12 +290,22 @@ rfs.Close(); } - TInt count = iContexts.Count(); - for( TInt i=0; iNotifyL( aMsg, aData ); + } + } + } +void CMPXCollectionEngine::Command( TMPXCollectionCommand aCmd, TInt aData ) + { + TArray plugins = iPluginHandler->LoadedPlugins(); + for( TInt i=0; iNotifyL( aMsg, aData ); + CMPXCollectionPlugin* plugin = plugins[i]; + TRAP_IGNORE(plugin->CommandL( aCmd, aData)); } } diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/collectionframework/collectionserver/src/mpxcollectionserver.cpp --- a/mpx/collectionframework/collectionserver/src/mpxcollectionserver.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/collectionframework/collectionserver/src/mpxcollectionserver.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -72,8 +72,8 @@ CleanupStack::PushL(server); RProcess::Rendezvous(KErrNone); CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(server); CActiveScheduler::Install(NULL); - CleanupStack::PopAndDestroy(server); CleanupStack::PopAndDestroy(scheduler); } diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp --- a/mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/collectionframework/collectionserver/src/mpxcollectionserversession.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -570,14 +570,14 @@ // void CMPXCollectionSession::CancelRequests() { + if (iContext) + { + iContext->CancelRequest(this); + } if (!iMessage.IsNull()) { iMessage.Complete(KErrCancel); } - if (iContext) - { - iContext->CancelRequest(this); - } } // ---------------------------------------------------------------------------- diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/collectionframework/collectionutility/src/mpxcollectionplaylist.cpp --- a/mpx/collectionframework/collectionutility/src/mpxcollectionplaylist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/collectionframework/collectionutility/src/mpxcollectionplaylist.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -1256,6 +1256,19 @@ if( changeType == EMPXItemDeleted ) { refresh = ETrue; + MPX_DEBUG1("CMPXCollectionPlaylist::DoHandleCollectionChangeMessageL -- current item deleted"); + + TBool lastItemDeleted( iItemIndex == 0 && iItemIndexes.Count() == 1 ); + + if ( lastItemDeleted ) // playlist is now empty, notify observer immediately + { + MPX_DEBUG1("CMPXCollectionPlaylist::DoHandleCollectionChangeMessageL -- last playlist item deleted"); + Invalidate(); + if ( iPlObs ) + { + iPlObs->HandleCollectionPlaylistChange(KErrEof); + } + } } // Modified else if( changeType == EMPXItemModified ) @@ -1333,7 +1346,8 @@ } } - if (iAutoPlaylist && refresh) + // update playlist immediately when item is deleted in order to detect deletion of the last item in the playlist + if ( refresh && iItemIndexes.Count() > 0 ) { // For autoplaylist, affected by the event. // Path clip will never happen for autoplaylist diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/commonframework/common/bwinscw/mpxcommonU.DEF --- a/mpx/commonframework/common/bwinscw/mpxcommonU.DEF Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/commonframework/common/bwinscw/mpxcommonU.DEF Wed Jun 23 17:51:16 2010 +0100 @@ -284,4 +284,7 @@ ?AddClientL@CMPXClientList@@QAEXVTThreadId@@HPAVCMPXMessageQueue@@H@Z @ 283 NONAME ; void CMPXClientList::AddClientL(class TThreadId, int, class CMPXMessageQueue *, int) ?ClientCategory@CMPXClientList@@QBEHH@Z @ 284 NONAME ; int CMPXClientList::ClientCategory(int) const ?SelectPlugin64L@CMPXPluginHandlerBase@@UAEXABVRFile64@@@Z @ 285 NONAME ; void CMPXPluginHandlerBase::SelectPlugin64L(class RFile64 const &) + ?SendSyncMsg@CMPXClientList@@QAEHPBVCMPXMedia@@@Z @ 286 NONAME ; int CMPXClientList::SendSyncMsg(class CMPXMedia const *) + ?AddFirst@CMPXMessageQueue@@QAEHPBVCMPXMedia@@H@Z @ 287 NONAME ; int CMPXMessageQueue::AddFirst(class CMPXMedia const *, int) + ?SetPrimaryClient@CMPXClientList@@QAEHAAVCMPXMessageQueue@@@Z @ 288 NONAME ; int CMPXClientList::SetPrimaryClient(class CMPXMessageQueue &) diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/commonframework/common/eabi/mpxcommonU.DEF --- a/mpx/commonframework/common/eabi/mpxcommonU.DEF Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/commonframework/common/eabi/mpxcommonU.DEF Wed Jun 23 17:51:16 2010 +0100 @@ -361,4 +361,7 @@ _ZN14CMPXClientList10AddClientLE9TThreadIdiP16CMPXMessageQueuei @ 360 NONAME _ZNK14CMPXClientList14ClientCategoryEi @ 361 NONAME _ZN21CMPXPluginHandlerBase15SelectPlugin64LERK7RFile64 @ 362 NONAME + _ZN14CMPXClientList11SendSyncMsgEPK9CMPXMedia @ 363 NONAME + _ZN14CMPXClientList16SetPrimaryClientER16CMPXMessageQueue @ 364 NONAME + _ZN16CMPXMessageQueue8AddFirstEPK9CMPXMediai @ 365 NONAME diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/commonframework/common/src/mpxclientlist.cpp --- a/mpx/commonframework/common/src/mpxclientlist.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/commonframework/common/src/mpxclientlist.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -24,6 +24,41 @@ #include "mpxclientlist.h" #include +// ============================ LOCAL FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// Searches process id for target selector plugin. +// When the player has been opened in a mode, which is bound to the same engine +// than certain application's engine, then need to fetch its process id. +// (As a reference for parameter aMode see MMPXPlaybackUtility modes.) +// Otherwise target selector plugin is notified wrongly about registered client +// and key events are not propagated to correct application. +// ---------------------------------------------------------------------------- +// +static void FindProcessIdForTsp( TInt aMode, TProcessId& aProcessId ) + { + TBool processFound( EFalse ); + TFindProcess processFinder; + TFullName processName; + + while ( processFinder.Next( processName ) == KErrNone && !processFound ) + { + RProcess process; + TInt err = process.Open( processFinder ); + if( err == KErrNone ) + { + if( process.SecureId().iId == aMode && process.ExitType() == EExitPending ) + { + MPX_DEBUG4("FindProcessIdForTsp(): pid changed from %d to %d (mode 0x%x)", + TUint(aProcessId), TUint(process.Id()), aMode); + aProcessId = process.Id(); + processFound = ETrue; + } + process.Close(); + } + } + } + // ============================ MEMBER FUNCTIONS ============================== // ---------------------------------------------------------------------------- @@ -46,7 +81,8 @@ // CMPXClientList::CMPXClientList(MMPXClientlistObserver* aObserver) : iIdentity(CMPXClientList::ClientsMatch), - iObserver(aObserver) + iObserver(aObserver), + iPrimaryClient(NULL) {} // ---------------------------------------------------------------------------- @@ -108,6 +144,7 @@ iClientProcesses.AppendL(pid); if (iObserver) { + FindProcessIdForTsp(aMode, pid); iObserver->HandleClientChange(pid, MMPXClientlistObserver::EAdd); } } @@ -139,6 +176,7 @@ iClientProcesses.AppendL(pid); if (iObserver) { + FindProcessIdForTsp(aMode, pid); iObserver->HandleClientChange(pid, MMPXClientlistObserver::EAdd); } } @@ -155,7 +193,15 @@ CClientId* id( iClients[aIndex] ); iClients.Remove(aIndex); - CClientId removeId( id->iPid ); + //set primary client to NULL if primary client is removed + if (iPrimaryClient != NULL) + { + if (aIndex == Find(*iPrimaryClient)) + { + iPrimaryClient = NULL; + } + } + CClientId removeId( id->iPid ); if ( iClients.Find( &removeId, iIdentity ) == KErrNotFound ) // // There's no other client from the same process, so @@ -167,7 +213,9 @@ { if (iObserver) { - iObserver->HandleClientChange(id->iPid, MMPXClientlistObserver::ERemove); + TProcessId pid(id->iPid); + FindProcessIdForTsp(id->iMode, pid); + iObserver->HandleClientChange(pid, MMPXClientlistObserver::ERemove); } iClientProcesses.Remove(i); } @@ -484,8 +532,8 @@ : iTid(aTid), iPid(aPid), iMode(aMode), - iMsgQueue(aMsgQueue), - iCategory(aCategory) + iCategory(aCategory), + iMsgQueue(aMsgQueue) {} // ----------------------------------------------------------------------------- @@ -601,4 +649,46 @@ iSubscriptions.ResetAndDestroy(); } +// ----------------------------------------------------------------------------- +// CMPClientList::SetPrimaryClient +// Set the primary client +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMPXClientList::SetPrimaryClient(CMPXMessageQueue& aMsgQueue) + { + MPX_FUNC("CMPXClientList::SetPrimaryClient"); + TInt index = Find(aMsgQueue); + MPX_DEBUG2("CMPXClientList::SetPrimaryClient, index = %d", index); + if (index >= 0) + { + iPrimaryClient = &aMsgQueue; + return KErrNone; + } + return index; + } +// ----------------------------------------------------------------------------- +// CMPClientList::SendSyncMsg +// Send a sync message to the primary client +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CMPXClientList::SendSyncMsg(const CMPXMessage* aMsg) + { + MPX_FUNC("CMPXClientList::SendSyncMsg"); + TInt err = KErrNone; + if (iPrimaryClient == NULL) + { + return KErrNotFound; + } + TInt index = Find(*iPrimaryClient); + MPX_DEBUG2("CMPXClientList::SendSyncMsg, index = %d", index); + if (index >= 0) + { + err = iClients[index]->iMsgQueue->AddFirst(aMsg, KErrNone); + } + else + { + err = KErrNotFound; + } + return err; + } // End of File diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/commonframework/common/src/mpxdataarray.cpp --- a/mpx/commonframework/common/src/mpxdataarray.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/commonframework/common/src/mpxdataarray.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -55,7 +55,10 @@ // void RMPXDataItem::Copy(TUint aClientHandle,TAny* aSrc,TInt aSize) { - MPX_ASSERT(aSrc&&aClientHandle); + //The source could be zero-length descriptor: aSize is 0 and aSrc is NULL + //ASSERT if aSrc is NULL while aSize is not zero, invalid descriptor + MPX_ASSERT(((aSrc!=NULL)?ETrue:(aSize==0))&&aClientHandle); + // Reset(aClientHandle); RMPXHeapManager& m=RMPXHeapManager::HeapManager(aClientHandle); diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/commonframework/common/src/mpxmessagequeue.cpp --- a/mpx/commonframework/common/src/mpxmessagequeue.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/commonframework/common/src/mpxmessagequeue.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -302,4 +302,36 @@ this, data, err, ret); } +// ---------------------------------------------------------------------------- +// Adds a message into the top of the queue and sends the message if slot is available +// ---------------------------------------------------------------------------- +// +EXPORT_C TInt CMPXMessageQueue::AddFirst(const CMPXMessage* aMessage, TInt aError) + { + // aMessage should not be NULL and aError is KErrNone + MPX_ASSERT(aMessage || aError); + MPX_FUNC_EX("CMPXMessageQueue::AddFirst()"); + CMPXMessageItem* item(NULL); + TRAPD(err, item = CMPXMessageItem::NewL(aMessage, aError)); + if (KErrNone==err) + { + iMsgs.AddFirst(*item); +#ifdef _DEBUG + MPX_DEBUG3("CMPXMessageQueue::AddFirst 0x%08x, items %d", this, ++iCount); +#endif + }//else failed to create message item. + else + { + MPX_DEBUG2("CMPXMessageQueue::AddFirst Failed to create message item %d", err); + } + if (KErrNone!=err && KErrNone==iFailure) + { // Set the failure code + iFailure = err; + } + if (!iMsgRequest.IsNull()) + { // outstanding request + Send(); + } // else client has not finished current message yet + return err; + } // End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/commonframework/common/src/mpxpluginmonitor.cpp --- a/mpx/commonframework/common/src/mpxpluginmonitor.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/commonframework/common/src/mpxpluginmonitor.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -145,8 +145,11 @@ MPX_DEBUG3("CMPXPluginMonitor::RunError interface id 0x%08x, error", iInterfaceUid.iUid, aError); // Restart observer - iECs.NotifyOnChange(iStatus); - SetActive(); + if ( !IsActive() ) + { + iECs.NotifyOnChange(iStatus); + SetActive(); + } return KErrNone; } diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/bwins/mpxviewframeworkqt.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/bwins/mpxviewframeworkqt.def Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,30 @@ +EXPORTS + ?trUtf8@MpxViewPlugin@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString MpxViewPlugin::trUtf8(char const *, char const *) + ?tr@MpxViewFramework@@SA?AVQString@@PBD0H@Z @ 2 NONAME ; class QString MpxViewFramework::tr(char const *, char const *, int) + ??0MpxViewFramework@@QAE@PAVQWidget@@V?$QFlags@W4WindowFlag@Hb@@@@@Z @ 3 NONAME ; MpxViewFramework::MpxViewFramework(class QWidget *, class QFlags) + ??1MpxViewPluginResolver@@UAE@XZ @ 4 NONAME ; MpxViewPluginResolver::~MpxViewPluginResolver(void) + ?tr@MpxViewPlugin@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString MpxViewPlugin::tr(char const *, char const *, int) + ??0MpxViewPluginResolver@@QAE@ABV?$QList@H@@@Z @ 6 NONAME ; MpxViewPluginResolver::MpxViewPluginResolver(class QList const &) + ?tr@MpxViewFramework@@SA?AVQString@@PBD0@Z @ 7 NONAME ; class QString MpxViewFramework::tr(char const *, char const *) + ?qt_metacast@MpxViewFramework@@UAEPAXPBD@Z @ 8 NONAME ; void * MpxViewFramework::qt_metacast(char const *) + ?trUtf8@MpxViewFramework@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString MpxViewFramework::trUtf8(char const *, char const *, int) + ?getStaticMetaObject@MpxViewFramework@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & MpxViewFramework::getStaticMetaObject(void) + ?staticMetaObject@MpxViewFramework@@2UQMetaObject@@B @ 11 NONAME ; struct QMetaObject const MpxViewFramework::staticMetaObject + ?qt_metacall@MpxViewFramework@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12 NONAME ; int MpxViewFramework::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@MpxViewFramework@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString MpxViewFramework::trUtf8(char const *, char const *) + ?staticMetaObject@MpxViewPlugin@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const MpxViewPlugin::staticMetaObject + ?metaObject@MpxViewPlugin@@UBEPBUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const * MpxViewPlugin::metaObject(void) const + ?metaObject@MpxViewFramework@@UBEPBUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const * MpxViewFramework::metaObject(void) const + ?resolvePlugin@MpxViewPluginResolver@@QAEPAVMpxViewPlugin@@XZ @ 17 NONAME ; class MpxViewPlugin * MpxViewPluginResolver::resolvePlugin(void) + ?tr@MpxViewPlugin@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString MpxViewPlugin::tr(char const *, char const *) + ?getStaticMetaObject@MpxViewPlugin@@SAABUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const & MpxViewPlugin::getStaticMetaObject(void) + ??1MpxViewFramework@@UAE@XZ @ 20 NONAME ; MpxViewFramework::~MpxViewFramework(void) + ??_EMpxViewFramework@@UAE@I@Z @ 21 NONAME ; MpxViewFramework::~MpxViewFramework(unsigned int) + ?resolvePlugin@MpxViewFramework@@UAEPAVMpxViewPlugin@@ABV?$QList@H@@@Z @ 22 NONAME ; class MpxViewPlugin * MpxViewFramework::resolvePlugin(class QList const &) + ?qt_metacast@MpxViewPlugin@@UAEPAXPBD@Z @ 23 NONAME ; void * MpxViewPlugin::qt_metacast(char const *) + ?viewPlugin@MpxViewPlugin@@UAEPAV1@XZ @ 24 NONAME ; class MpxViewPlugin * MpxViewPlugin::viewPlugin(void) + ??_EMpxViewPluginResolver@@UAE@I@Z @ 25 NONAME ; MpxViewPluginResolver::~MpxViewPluginResolver(unsigned int) + ?qt_metacall@MpxViewPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 26 NONAME ; int MpxViewPlugin::qt_metacall(enum QMetaObject::Call, int, void * *) + ?command@MpxViewPlugin@@IAEXH@Z @ 27 NONAME ; void MpxViewPlugin::command(int) + ?trUtf8@MpxViewPlugin@@SA?AVQString@@PBD0H@Z @ 28 NONAME ; class QString MpxViewPlugin::trUtf8(char const *, char const *, int) + diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/eabi/mpxviewframeworkqt.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/eabi/mpxviewframeworkqt.def Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,34 @@ +EXPORTS + _ZN13MpxViewPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME + _ZN13MpxViewPlugin11qt_metacastEPKc @ 2 NONAME + _ZN13MpxViewPlugin16staticMetaObjectE @ 3 NONAME DATA 16 + _ZN13MpxViewPlugin19getStaticMetaObjectEv @ 4 NONAME + _ZN13MpxViewPlugin7commandEi @ 5 NONAME + _ZN16MpxViewFramework11qt_metacallEN11QMetaObject4CallEiPPv @ 6 NONAME + _ZN16MpxViewFramework11qt_metacastEPKc @ 7 NONAME + _ZN16MpxViewFramework13resolvePluginERK5QListIiE @ 8 NONAME + _ZN16MpxViewFramework16staticMetaObjectE @ 9 NONAME DATA 16 + _ZN16MpxViewFramework19getStaticMetaObjectEv @ 10 NONAME + _ZN16MpxViewFrameworkC1EP7QWidget6QFlagsIN2Hb10WindowFlagEE @ 11 NONAME + _ZN16MpxViewFrameworkC2EP7QWidget6QFlagsIN2Hb10WindowFlagEE @ 12 NONAME + _ZN16MpxViewFrameworkD0Ev @ 13 NONAME + _ZN16MpxViewFrameworkD1Ev @ 14 NONAME + _ZN16MpxViewFrameworkD2Ev @ 15 NONAME + _ZN21MpxViewPluginResolver13resolvePluginEv @ 16 NONAME + _ZN21MpxViewPluginResolverC1ERK5QListIiE @ 17 NONAME + _ZN21MpxViewPluginResolverC2ERK5QListIiE @ 18 NONAME + _ZN21MpxViewPluginResolverD0Ev @ 19 NONAME + _ZN21MpxViewPluginResolverD1Ev @ 20 NONAME + _ZN21MpxViewPluginResolverD2Ev @ 21 NONAME + _ZNK13MpxViewPlugin10metaObjectEv @ 22 NONAME + _ZNK16MpxViewFramework10metaObjectEv @ 23 NONAME + _ZTI13MpxViewPlugin @ 24 NONAME + _ZTI16MpxViewFramework @ 25 NONAME + _ZTI21MpxViewPluginResolver @ 26 NONAME + _ZTI22MpxPluginViewInterface @ 27 NONAME + _ZTV13MpxViewPlugin @ 28 NONAME + _ZTV16MpxViewFramework @ 29 NONAME + _ZTV21MpxViewPluginResolver @ 30 NONAME + _ZThn8_N16MpxViewFrameworkD0Ev @ 31 NONAME + _ZThn8_N16MpxViewFrameworkD1Ev @ 32 NONAME + diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/inc/mpxplugindata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/inc/mpxplugindata.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,105 @@ +/* +* 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 MPXPLUGINDATA_H +#define MPXPLUGINDATA_H + +// INCLUDES +#include +// CLASS DECLARATION + +/** + * QMpxPluginData + * + */ +class MpxPluginData + { +public: + enum TMPXViewPluginPriorities{ + EMPXViewPluginPriorityLowest = -20000, + EMPXViewPluginPriorityLow = -10000, + EMPXViewPluginPriorityNormal = 0, + EMPXViewPluginPriorityHigh = 10000, + EMPXViewPluginPriorityHighest = 20000 + }; + + /** + * Constructor + */ + MpxPluginData( ); + + /** + * Destructor. + */ + ~MpxPluginData(); + + /** + * Plugin id geter + * @return plugin id + */ + int id() const; + + /** + * Plugin interface id geter + * @return interface id implemented by plugin + */ + int type() const; + + /** + * Plugin priority geter + * @return priority of plugin + */ + TMPXViewPluginPriorities priority() const; + + /** + * Plugin supported functionality geter + * @return list of functionality delivered by plugin + */ + const QList< int >& supportedId() const; + + /** + * Plugin id seter + * @param value - new value of plugin id + */ + void setId( int value ); + + /** + * Plugin interface id seter + * @param value - new value of plugin interface id + */ + void setType( int value ); + + /** + * Plugin priority seter + * @param value - new plugin priority + */ + void setPriority( TMPXViewPluginPriorities value ); + + /** + * Plugin supporterd functionality seter + * @param value - new functionality supported by plugin + */ + void addSupportedId( int value ); + +private: + int pluginId; + int pluginType; + TMPXViewPluginPriorities pluginPriority; + QList< int > pluginSupportedId; + }; + +#endif // MPXPLUGINDATA_H diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/inc/mpxplugindataparser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/inc/mpxplugindataparser.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,56 @@ +/* +* 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 QMPXPLUDINDATAPARSER_H +#define QMPXPLUDINDATAPARSER_H + +class MpxPluginData; +class QString; +class QStringRef; + +/** + * QMpxPluginDataParser + * + */ +class MpxPluginDataParser + { +public: + + /** + * Constructor + */ + MpxPluginDataParser(); + + /** + * Destructor. + */ + ~MpxPluginDataParser(); + + const MpxPluginData* data() const; + + MpxPluginData* takeData(); + + void parse( const QString& aData ); +private: + bool findNextNode( const QString& aSrc, int& aOffset, QStringRef& aTagName, QStringRef& aTagContent ) const; + bool parseInt( int& aDst, const QString& aSrc ) const ; + void parseSupportedId( const QString& aValue ); +private: + MpxPluginData* dataPtr; + }; + +#endif // QMPXPLUDINDATAPARSER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: +* +*/ + +// This file defines the API for MpxViewPluginResolver.dll + +#ifndef __MPXVIEWPLUGINRESOLVER_H__ +#define __MPXVIEWPLUGINRESOLVER_H__ + +#include + +#include + +#ifdef BUILD_VIEWFRAMEWORK +#define VFDLL_EXPORT Q_DECL_EXPORT +#else +#define VFDLL_EXPORT Q_DECL_IMPORT +#endif + +class MpxViewPluginResolverPrivate; + +class VFDLL_EXPORT MpxViewPluginResolver + { +public: + // new functions + MpxViewPluginResolver( const QList& ); + virtual ~MpxViewPluginResolver(); + MpxViewPlugin* resolvePlugin(); +private: + MpxViewPluginResolverPrivate* impl; + }; + +#endif // __MPXVIEWPLUGINRESOLVER_H__ + diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/inc/mpxviewpluginresolver_p.h Wed Jun 23 17:51:16 2010 +0100 @@ -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: +* +*/ + +// This file defines the API for MpxViewPluginResolver.dll + +#ifndef __MPXVIEWPLUGINRESOLVERPRIVATE_H__ +#define __MPXVIEWPLUGINRESOLVERPRIVATE_H__ + +#include +#include +#include + +class MpxViewPlugin; +class MpxPluginViewInterface; + +class MpxViewPluginResolverPrivate +{ +public: + // new functions + MpxViewPluginResolverPrivate( const QList& ); + ~MpxViewPluginResolverPrivate(); + MpxViewPlugin* resolvePlugin(); +private: + MpxPluginViewInterface* resolveAndLoadPlugins( const QList< XQPluginInfo >& impls ); +private: + const QList requestedPlugins; +}; +#endif // __MPXVIEWPLUGINRESOLVERPRIVATE_H__ + diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/mpxviewframeworkqt.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/mpxviewframeworkqt.pro Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,79 @@ +# +# 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: +# +# + +TEMPLATE = lib + +TARGET = mpxviewframeworkqt +CONFIG += qt hb + +TARGET.UID3 = 0x2002B33F + +# QT -= gui + +DEPENDPATH += inc \ + include \ + src + +INCLUDEPATH += . \ + ./inc \ + ./include \ + ../viewframework/include \ + /epoc32/include/mw/hb/hbcore \ + /epoc32/include/mw/hb/hbinput \ + /epoc32/include/mw/hb/hbwidgets \ + /epoc32/include/mw/hb/hbfeedback \ + /epoc32/include/mw/hb/tools + +LIBS+= -lhbcore -lhbwidgets -lxqplugins + +DEFINES += BUILD_VIEWFRAMEWORK + + +HEADERS += inc/mpxplugindata.h \ + inc/mpxplugindataparser.h \ + inc/mpxviewpluginresolver_p.h \ + inc/mpxviewpluginresolver.h \ + ../../mmappfw_plat/mpx_view_utility_api/inc/mpxviewframeworkqt.h \ + ../../mmappfw_plat/mpx_base_view_plugins_api/inc/mpxviewpluginqt.h + +SOURCES += \ + src/mpxplugindata.cpp \ + src/mpxplugindataparser.cpp \ + src/mpxviewpluginresolver.cpp \ + src/mpxviewpluginresolver_p.cpp \ + src/mpxviewframework.cpp + +symbian { + +TARGET.CAPABILITY = All -TCB +TARGET.EPOCALLOWDATA = 1 +MMP_RULES += EPOCALLOWDLLDATA + +include(rom/rom.pri) + +myDefInclude = "NOSTRICTDEF" \ +"$${LITERAL_HASH}if defined(WINS)"\ +"DEFFILE bwins/mpxviewframeworkqt.def "\ +"$${LITERAL_HASH}else "\ +"DEFFILE eabi/mpxviewframeworkqt.def "\ +"$${LITERAL_HASH}endif" + +MMP_RULES += myDefInclude + + + +} diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/rom/mpxviewframeworkqt.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/rom/mpxviewframeworkqt.iby Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,27 @@ +/* +* 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 MPXVIEWFRAMEWORKQT_IBY +#define MPXVIEWFRAMEWORKQT_IBY + +#include +#include + +file=ABI_DIR\BUILD_DIR\mpxviewframeworkqt.dll SHARED_LIB_DIR\mpxviewframeworkqt.dll + + +#endif diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/rom/rom.pri --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/rom/rom.pri Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,21 @@ +# +# 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: +# + +symbian { +MP_IBY_DIR = $$section(PWD,":",1) + +BLD_INF_RULES.prj_exports += "$$MP_IBY_DIR/mpxviewframeworkqt.iby CORE_MW_LAYER_IBY_EXPORT_PATH(mpxviewframeworkqt.iby)" +} \ No newline at end of file diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/src/mpxplugindata.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/src/mpxplugindata.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,113 @@ +/* +* 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 "mpxplugindata.h" + +// ----------------------------------------------------------------------------- +// MpxPluginData +// ----------------------------------------------------------------------------- +// +MpxPluginData::MpxPluginData() +: +pluginId( 0 ), +pluginType( 0 ), +pluginPriority( EMPXViewPluginPriorityLowest ), +pluginSupportedId() +{ + // No implementation required +} + +// ----------------------------------------------------------------------------- +// ~MpxPluginData +// ----------------------------------------------------------------------------- +// +MpxPluginData::~MpxPluginData() +{ + pluginSupportedId.clear(); +} + +// ----------------------------------------------------------------------------- +// id +// ----------------------------------------------------------------------------- +// +int MpxPluginData::id()const +{ + return pluginId; +} + +// ----------------------------------------------------------------------------- +// type +// ----------------------------------------------------------------------------- +// +int MpxPluginData::type()const +{ + return pluginType; +} + +// ----------------------------------------------------------------------------- +// priority +// ----------------------------------------------------------------------------- +// +MpxPluginData::TMPXViewPluginPriorities MpxPluginData::priority() const +{ + return pluginPriority; +} + +// ----------------------------------------------------------------------------- +// supportedId +// ----------------------------------------------------------------------------- +// +const QList& MpxPluginData::supportedId() const +{ + return pluginSupportedId; +} + +// ----------------------------------------------------------------------------- +// setId +// ----------------------------------------------------------------------------- +// +void MpxPluginData::setId( int value ) +{ + pluginId = value; +} + +// ----------------------------------------------------------------------------- +// setId +// ----------------------------------------------------------------------------- +// +void MpxPluginData::setType( int value ) +{ + pluginType = value; +} + +// ----------------------------------------------------------------------------- +// setType +// ----------------------------------------------------------------------------- +// +void MpxPluginData::setPriority( TMPXViewPluginPriorities value ) +{ + pluginPriority = value; +} + +// ----------------------------------------------------------------------------- +// addSupportedId +// ----------------------------------------------------------------------------- +// +void MpxPluginData::addSupportedId( int value ) +{ + pluginSupportedId.append( value ); +} diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/src/mpxplugindataparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/src/mpxplugindataparser.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,214 @@ +/* +* 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 "mpxplugindataparser.h" +#include "mpxplugindata.h" +#include + + + +const int gParserHexBase( 16 ); +const int gParserDecBase( 10 ); + +static MpxPluginData::TMPXViewPluginPriorities parsePriority( const QStringRef& src ); + + +// ---------------------------------------------------------------------------- +// MpxPluginDataParser() +// ---------------------------------------------------------------------------- +// +MpxPluginDataParser::MpxPluginDataParser() +: +dataPtr( NULL ) +{ + // No implementation required +} + +// ---------------------------------------------------------------------------- +// ~MpxPluginDataParser() +// ---------------------------------------------------------------------------- +// +MpxPluginDataParser::~MpxPluginDataParser() +{ + if( NULL != dataPtr ){ + delete dataPtr; + } +} + +// ---------------------------------------------------------------------------- +// data() +// ---------------------------------------------------------------------------- +// +const MpxPluginData* MpxPluginDataParser::data() const +{ + return dataPtr; +} + +// ---------------------------------------------------------------------------- +// takeData() +// ---------------------------------------------------------------------------- +// +MpxPluginData* MpxPluginDataParser::takeData() +{ + MpxPluginData* retVal( dataPtr ); + if( NULL != dataPtr ){ + dataPtr = NULL; + } + return retVal; +} + +// ---------------------------------------------------------------------------- +// parse( const QString& data ) +// ---------------------------------------------------------------------------- +// +void MpxPluginDataParser::parse( const QString& data ) +{ + const QString PluginIdTag( "p" ); + const QString PluginTypeTag( "t" ); + const QString PluginPriorityTag( "i" ); + const QString PluginSupportedTag( "f" ); + + QStringRef tagName, + tagContent; + int parserOffset( 0 ); + if( NULL != dataPtr ){ + delete dataPtr; + dataPtr = NULL; + } + int integerNodeRepresentation( 0 ); + while( findNextNode( data, parserOffset, tagName, tagContent ) ){ + + if( NULL == dataPtr ){ + dataPtr = new MpxPluginData(); + } + if( PluginIdTag == tagName ){ + if( parseInt( integerNodeRepresentation, tagContent.toString() ) ) + dataPtr->setId( integerNodeRepresentation ); + }else if( PluginTypeTag == tagName ){ + if( parseInt( integerNodeRepresentation, tagContent.toString() ) ) { + dataPtr->setType( integerNodeRepresentation ); + } + }else if( PluginPriorityTag == tagName ){ + dataPtr->setPriority( parsePriority( tagContent ) ); + }else if( PluginSupportedTag == tagName ){ + parseSupportedId( tagContent.toString() ); + } + } +} + +// ---------------------------------------------------------------------------- +// findNextNode( const QString& src, int& offset, QStringRef& tagName, QStringRef& tagContent ) +// ---------------------------------------------------------------------------- +// +bool MpxPluginDataParser::findNextNode( const QString& src, int& offset, QStringRef& tagName, QStringRef& tagContent ) const +{ + const QChar endOfTag( '>' ); + const QString beginOfStopTag( "= value.length() ){ + break; + } + to = value.indexOf( coma, from ); + if( to < from ){ + to = value.length(); + } + if( parseInt( tagValue, value.mid( from, to - from ) ) ){ + dataPtr->addSupportedId( tagValue ); + } + from = ( to + 1 ); + }while( true ); +} + +// ---------------------------------------------------------------------------- +// parseSupportedId( const QString& value ) +// ---------------------------------------------------------------------------- +// +MpxPluginData::TMPXViewPluginPriorities parsePriority( const QStringRef& src ) +{ + + const QString MPXViewPluginPriorityLowestTag( "EMPXViewPluginPriorityLowest" ); + const QString MPXViewPluginPriorityLowTag( "EMPXViewPluginPriorityLow" ); + const QString MPXViewPluginPriorityNormalTag( "EMPXViewPluginPriorityNormal" ); + const QString MPXViewPluginPriorityHighTag( "EMPXViewPluginPriorityHigh" ); + const QString MPXViewPluginPriorityHighestTag( "EMPXViewPluginPriorityHighest" ); + + MpxPluginData::TMPXViewPluginPriorities + retVal( MpxPluginData::EMPXViewPluginPriorityLowest ); + if( MPXViewPluginPriorityLowTag == src ){ + retVal = MpxPluginData::EMPXViewPluginPriorityLow; + }else if( MPXViewPluginPriorityNormalTag == src ){ + retVal = MpxPluginData::EMPXViewPluginPriorityNormal; + }else if( MPXViewPluginPriorityHighTag == src ){ + retVal = MpxPluginData::EMPXViewPluginPriorityHigh; + }else if( MPXViewPluginPriorityHighestTag == src ){ + retVal = MpxPluginData::EMPXViewPluginPriorityHighest; + } + return retVal; +} + + diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/src/mpxviewframework.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/src/mpxviewframework.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -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 +#include + +#include +#include +#include + +MpxViewFramework::MpxViewFramework(QWidget *parent, Hb::WindowFlags windowFlags) +: +HbMainWindow(parent, windowFlags) +{ +} + +MpxViewFramework::~MpxViewFramework() +{ +} + +MpxViewPlugin *MpxViewFramework::resolvePlugin(const QList& requestedPlugins) +{ + MpxViewPlugin *viewPlugin = 0; + MpxViewPluginResolver *viewResolver = new MpxViewPluginResolver(requestedPlugins); + if (viewResolver!=0) { + viewPlugin = viewResolver->resolvePlugin(); + delete viewResolver; + } + return viewPlugin; +} + diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/src/mpxviewpluginresolver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/src/mpxviewpluginresolver.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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 "mpxviewpluginresolver.h" // MpxViewPluginResolver +#include "mpxviewpluginresolver_p.h" // MpxViewPluginResolverPrivate + +// ----------------------------------------------------------------------------- +// MpxViewPluginResolver() +// ----------------------------------------------------------------------------- +// +MpxViewPluginResolver::MpxViewPluginResolver( const QList& requestedPlugins ) +: +impl ( new MpxViewPluginResolverPrivate( requestedPlugins ) ) +{} + +// ----------------------------------------------------------------------------- +// ~MpxViewPluginResolver() +// ----------------------------------------------------------------------------- +// +MpxViewPluginResolver::~MpxViewPluginResolver() +{ + if( impl ) { + delete impl; + } +} +// ----------------------------------------------------------------------------- +// resolvePlugin() +// ----------------------------------------------------------------------------- +// +MpxViewPlugin* MpxViewPluginResolver::resolvePlugin() +{ + return impl ? impl->resolvePlugin() : 0; +} diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/mpxviewframeworkqt/src/mpxviewpluginresolver_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpx/mpxviewframeworkqt/src/mpxviewpluginresolver_p.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,188 @@ +/* +* 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 "mpxviewpluginresolver_p.h" // MpxViewPluginResolverPrivate +#include "mpxplugindata.h" +#include "mpxplugindataparser.h" + +#include +#include + +const char gRequestedPluginInterfaceName [] = "org.nokia.mmdt.MpxViewPlugin/1.0"; + +const int gNoneScore( 0 ); +const int gSupportedScore( 5 ); +const int gImplementationScore( 100 ); +const int gTypeScore( 1 ); + +// ---------------------------------------------------------------------------- +// score +// ---------------------------------------------------------------------------- +// +static int score( int , const MpxPluginData& ); + +// ----------------------------------------------------------------------------- +//MpxViewPluginResolverPrivate +// ----------------------------------------------------------------------------- +// +MpxViewPluginResolverPrivate::MpxViewPluginResolverPrivate( + const QList& request ) +: +requestedPlugins( request ) +{ + //No implementation needed +} + +// ----------------------------------------------------------------------------- +// ~MpxViewPluginResolverPrivate +// ----------------------------------------------------------------------------- +// +MpxViewPluginResolverPrivate::~MpxViewPluginResolverPrivate() +{ + //No implementation needed +} + +// ----------------------------------------------------------------------------- +// resolvePlugin() +// ----------------------------------------------------------------------------- +// +MpxViewPlugin* MpxViewPluginResolverPrivate::resolvePlugin() +{ + MpxPluginViewInterface* retVal = 0; + if( 0 < requestedPlugins.count() ){ + XQPluginLoader loader; + QList< XQPluginInfo > impls; + if (loader.listImplementations(gRequestedPluginInterfaceName, impls)) { + retVal = resolveAndLoadPlugins( impls ); + } + } + return (retVal!=0) ? retVal->viewPlugin() : 0; +} + +// ---------------------------------------------------------------------------- +// resolveAndLoadPlugins( const QList< XQPluginInfo >& impls ); +// ---------------------------------------------------------------------------- +// +MpxPluginViewInterface* MpxViewPluginResolverPrivate::resolveAndLoadPlugins( + const QList< XQPluginInfo >& impls ) +{ + MpxPluginViewInterface* retVal = 0; + + //parse plugin info data + QHash parsedInfo; + QList< XQPluginInfo >::const_iterator iter( impls.begin() ); + MpxPluginDataParser parser; + for( ; iter != impls.end(); ++iter ){ + if( 0 < ( *iter ).opaqueData().length() ){ + parser.parse( ( *iter ).opaqueData() ); + if( parser.data() ){ + parsedInfo.insert( &( *iter ), parser.takeData() ); + } + } + } + + //look for optimal plugin + QList uids( requestedPlugins ); + QList::iterator currentUidIter, + optimalUidIter; + QHash::iterator + currentInfoIter, + optimalInfoIter; + int currentPluginScore( 0 ), + optimalPluginScore( 0 ); + + do{ + //initialize iterators with invalid objects + optimalInfoIter = parsedInfo.end(); + + for( currentUidIter = uids.begin(); + uids.end() != currentUidIter; + ++currentUidIter ) + { + for( currentInfoIter = parsedInfo.begin(); + parsedInfo.end() != currentInfoIter; + ++currentInfoIter ) + { + currentPluginScore = score( (*currentUidIter ), + (*(*currentInfoIter) ) ); + if( gNoneScore < currentPluginScore ){ + if( parsedInfo.end() == optimalInfoIter ){ + //first plugin with no zero score. set as optimal + optimalPluginScore = currentPluginScore; + optimalInfoIter = currentInfoIter; + optimalUidIter = currentUidIter; + } + if( optimalPluginScore < currentPluginScore || + ( ( currentPluginScore == optimalPluginScore ) && + ( ( *currentInfoIter )->priority() > ( *optimalInfoIter )->priority() ) ) ) + { + //current plugin fits better then "optimal" one + optimalPluginScore = currentPluginScore; + optimalInfoIter = currentInfoIter; + optimalUidIter = currentUidIter; + } + } + } + } + if( parsedInfo.end() == optimalInfoIter ){ + //plugin was not found + break; + } + XQPluginLoader loader( optimalInfoIter.key()->uid() ); + if( loader.load() ) { + retVal = qobject_cast(loader.instance()); + } + //remove already loaded plugin description + delete ( *optimalInfoIter ); + parsedInfo.erase( optimalInfoIter ); + uids.erase( optimalUidIter ); + + }while( NULL == retVal ); + uids.clear(); + + //clear parsed data structures + for( currentInfoIter = parsedInfo.begin(); + parsedInfo.end() != currentInfoIter; + currentInfoIter = parsedInfo.erase( currentInfoIter ) ){ + delete ( *currentInfoIter ); + } + return retVal; +} +// ---------------------------------------------------------------------------- +// score +// ---------------------------------------------------------------------------- +// +int score( int uid, const MpxPluginData& pluginData ) +{ + int retVal( gNoneScore ); + QList< int >::const_iterator iter( pluginData.supportedId().begin() ); + for( ; iter != pluginData.supportedId().end(); ++iter ){ + if( ( *iter ) == uid ){ + retVal += gSupportedScore; + } + } + if( pluginData.id() == uid ){ + retVal += gImplementationScore; + } + if( pluginData.type() == uid ){ + retVal += gTypeScore; + } + + qDebug(QString("Score 0x%1: %2").arg(uid, 0, 16).arg(retVal).toLatin1().data()); + + return retVal; +} diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/inc/mpxautoresumehandler.h --- a/mpx/playbackframework/playbackengine/inc/mpxautoresumehandler.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/inc/mpxautoresumehandler.h Wed Jun 23 17:51:16 2010 +0100 @@ -136,6 +136,11 @@ * in that case */ TBool IsPlaybackRemote(); + + /** + * Handle change in voice command state. + */ + void DoHandleVoiceCmdChange(); private: // data CMPXPlaybackEngine& iEngine; @@ -148,6 +153,10 @@ // Timer for resume operation. Owned. CPeriodic* iResumeTimer; + + CMPXPSKeyWatcher* iVoiceCmdObserver; // owned + TBool iPausedForVoiceCmd; + TBool iVoiceCmdResumeOngoing; }; #endif // CMPXAUTORESUMEHANDLER_H diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h Wed Jun 23 17:51:16 2010 +0100 @@ -192,13 +192,6 @@ inline TProcessId LastActiveProcessId() const; /** - * Retursn last inactive process id - * - * @return process id of last inactive process - */ - inline TProcessId LastInactiveProcessId() const; - - /** * Initializes the player with a song in the collection * * @param aCollectionPath collection path @@ -857,11 +850,16 @@ void SavePlaybackCompleteInfoL(); /** - * Restore playback position and state if it was saved previously + * Restore playback position if it was saved previously */ - void RestorePlaybackPositionAndStateL( const CMPXMedia& aMedia ); + void RestorePlaybackPositionL( const CMPXMedia& aMedia ); /** + * Restore playback state if it was saved previously + */ + void RestorePlaybackStateL(); + + /** * Sets the volume increment depending on accessory state */ void SetVolumeIncrement( TMPXPlaybackAccessoryMode aMode ); @@ -924,6 +922,34 @@ */ void Init64L(RFile64* aFile, TInt aAccessPoint=0); #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + /** + * Callback for sync message timer + * + * @since 9.2 + * @param this + * @return systme error + */ + static TInt SyncMsgTimerCallback(TAny* aPtr); + /** + * Cancel the sync message timer + * + * @since 9.2 + */ + void CancelSyncMsgTimer(); + /** + * Stop the wait loop + * + * @since 9.2 + */ + void StopWaitLoop(); + /** + * Handle a synchronous message + * + * @since 9.2 + * @param aMsg, message + * @return system error + */ + TInt HandlePlaybackSyncMessage (const CMPXMessage& aMsg); private: friend class TCallbackReflector; @@ -992,6 +1018,8 @@ TBool iInitVolume; // Initialize volume on first creation // the index which be firstly saved when request media TInt iFirstRequestMediaIndex; + CPeriodic* iSyncMsgTimer; //timer for sync message + CActiveSchedulerWait* iSyncMsgWait; // wait loop use to sync message #if defined(__HIGH_RESOLUTION_VOLUME) // flag to indicate whether the volume setting has been rounded up last // used to adjust volume up button setting @@ -1001,6 +1029,9 @@ #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API RFile64 iFile64; #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + + TInt iPositionFromMedia; + }; #include "mpxplaybackengine.inl" diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl Wed Jun 23 17:51:16 2010 +0100 @@ -156,15 +156,6 @@ } // ---------------------------------------------------------------------------- -// Return last inactive process id -// ---------------------------------------------------------------------------- -// -inline TProcessId CMPXPlaybackEngine::LastInactiveProcessId() const - { - return iLastInactiveProcess; - } - -// ---------------------------------------------------------------------------- // CPlaybackCallbackReflector constructor // ---------------------------------------------------------------------------- // diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/inc/mpxplaybackinitializer.h --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackinitializer.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackinitializer.h Wed Jun 23 17:51:16 2010 +0100 @@ -193,7 +193,7 @@ /** * Initialize streaming */ - void InitL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint); + void InitL(const TDesC& aUri, const TDesC8& aType ); private: /** diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/src/mpxaccessoryobserver.cpp diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/src/mpxautoresumehandler.cpp --- a/mpx/playbackframework/playbackengine/src/mpxautoresumehandler.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/src/mpxautoresumehandler.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -29,6 +29,20 @@ // Time to wait before resume after call has ended. const TInt KMPXResumeWaitTime = 3000000; // 3.0s +// TODO: the following constants and definitions are copied from nssvascoreconstant.h, which is not +// included directly because it is an App layer API. Way to fix this is to ask Speechsrv to move the header file to MW layer. +const TUid KSINDUID = {KUidSystemCategoryValue}; +const TInt ERecognitionState=0; + +// Recognition state values for the P&S key ERecognitionState +enum TRecognitionStateValues + { + ERecognitionStarted = 0, + ERecognitionSpeechEnd, + ERecognitionSuccess, + ERecognitionFail + }; +// End TODO // ================= MEMBER FUNCTIONS ======================= @@ -60,6 +74,9 @@ // Listen to call type changes iTypeObserver = CMPXPSKeyWatcher::NewL(KPSUidCtsyCallInformation, KCTsyCallType,this); + + iVoiceCmdObserver = CMPXPSKeyWatcher::NewL( KSINDUID, ERecognitionState, this ); + iResumeTimer = CPeriodic::NewL(CActive::EPriorityStandard); } @@ -88,6 +105,7 @@ // CMPXAutoResumeHandler::~CMPXAutoResumeHandler() { + delete iVoiceCmdObserver; delete iStateObserver; delete iTypeObserver; if ( iResumeTimer ) @@ -135,13 +153,15 @@ MPX_DEBUG2("CMPXAutoResumeHandler::HandlePlaybackComplete(%d) entering", aError); iPausedForCall = EFalse; if ( KErrDied == aError || - KErrAccessDenied == aError ) + KErrAccessDenied == aError || + KErrInUse == aError ) { iKErrDiedTime.HomeTime(); TInt callType = EPSCTsyCallTypeNone; TInt callState = EPSCTsyCallStateNone; - + TInt voiceCmdState(0); + if (!iTypeObserver->GetValue(callType) && !iStateObserver->GetValue(callState)) { @@ -155,8 +175,16 @@ iPausedForCall = ETrue; } } + + if ( !iPausedForCall && !iVoiceCmdObserver->GetValue( voiceCmdState ) ) // key exist if voice commanding is in progress + { + // Paused due voice command activity + iPausedForVoiceCmd = ETrue; + } } - MPX_DEBUG1("CMPXAutoResumeHandler::HandlePlaybackComplete() exiting"); + + MPX_DEBUG3("CMPXAutoResumeHandler::HandlePlaybackComplete() exiting: iPausedForCall=%d, iPausedForVoiceCmd=%d", + iPausedForCall, iPausedForVoiceCmd); } // ----------------------------------------------------------------------------- @@ -175,10 +203,18 @@ // CMPXAutoResumeHandler::HandlePSEvent // ----------------------------------------------------------------------------- // -void CMPXAutoResumeHandler::HandlePSEvent(TUid /*aUid*/, TInt /*aKey*/) +void CMPXAutoResumeHandler::HandlePSEvent(TUid aUid, TInt /*aKey*/) { MPX_FUNC("CMPXAutoResumeHandler::HandlePSEvent()"); - TRAP_IGNORE(DoHandleStateChangeL()); + + if ( aUid == KSINDUID ) + { + DoHandleVoiceCmdChange(); + } + else + { + TRAP_IGNORE(DoHandleStateChangeL()); + } } // ----------------------------------------------------------------------------- @@ -246,6 +282,19 @@ iPausedForCall = ETrue; } } + + if ( shouldPause && iVoiceCmdResumeOngoing ) + { + // Resume timer has been started after a voice command, cancel it now + // so that playback is not resumed while calling + if ( iResumeTimer->IsActive() ) + { + iResumeTimer->Cancel(); + } + iVoiceCmdResumeOngoing = EFalse; + iPausedForCall = ETrue; // resume playback once call has been ended + } + MPX_DEBUG2("CMPXAutoResumeHandler::DoHandleStateChangeL(): iPausedForCall = %d", iPausedForCall); } @@ -317,6 +366,8 @@ { MPX_FUNC("CMPXAutoResumeHandler::HandleResumeTimerCallback() entering"); + iVoiceCmdResumeOngoing = EFalse; + CancelResumeTimer(); TRAP_IGNORE( iEngine.HandleCommandL( EPbCmdPlayWithFadeIn )); } @@ -374,4 +425,39 @@ iAutoResume = aAutoResume; } +// ----------------------------------------------------------------------------- +// CMPXAutoResumeHandler::DoHandleVoiceCmdChange +// ----------------------------------------------------------------------------- +// +void CMPXAutoResumeHandler::DoHandleVoiceCmdChange() + { + MPX_FUNC("CMPXAutoResumeHandler::DoHandleVoiceCmdChange()"); + + TInt voiceCmdState( 0 ); + TInt err( iVoiceCmdObserver->GetValue( voiceCmdState ) ); + + MPX_DEBUG4("CMPXAutoResumeHandler::DoHandleVoiceCmdChange(): iPausedForVoiceCmd = %d, err=%d, state=%d", + iPausedForVoiceCmd, err, voiceCmdState); + + if ( iPausedForVoiceCmd && !iPausedForCall ) + { + if ( err == KErrNotFound ) // voice command has been finished once the P&S key is deleted + { + if ( iResumeTimer->IsActive() ) + iResumeTimer->Cancel(); + + iResumeTimer->Start( KMPXResumeWaitTime, KMPXResumeWaitTime, TCallBack(ResumeTimerCallback, this) ); + + iPausedForVoiceCmd = EFalse; + + iVoiceCmdResumeOngoing = ETrue; // flag for cancelling resume timer due to a call + } + } + + if ( iPausedForCall ) // ensure that not interfering with call handling in any circumstances + { + iPausedForVoiceCmd = EFalse; + } + } + // End of File diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp --- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -47,6 +47,7 @@ const TInt KMPXSmallVolumeIncrement = 5; const TInt KMPXLargeVolumeIncrement = 10; const TInt KPercentMultiplier = 100; +const TInt KMPXSyncMsgTimer = 3000000; // 3 seconds _LIT(KWmaExtension, ".wma"); _LIT(KRaExtension, ".ra"); @@ -108,6 +109,7 @@ iState(EPbStateNotInitialised), iNextState(EPbStateNotInitialised), iPluginState(EPbStateNotInitialised), + iCategory(EMPXCategoryUndefined), iModeId(aModeId), iObserver(aObserver), iPreservedState( EPbStateNotInitialised ), @@ -115,7 +117,8 @@ iSkipping(EFalse), iPluginUid(KNullUid), iLastActiveProcess(KNullProcessId), - iLastInactiveProcess(KNullProcessId) + iLastInactiveProcess(KNullProcessId), + iPositionFromMedia( KErrNotFound ) { iProperties[EPbPropertyVolumeRamp]=KPbFadeInDurationMicroSeconds; } @@ -139,6 +142,7 @@ iNextState(EPbStateNotInitialised), iPluginState(EPbStateNotInitialised), iModeId(aModeId), + iCategory(aCategory), iObserver(aObserver), iPreservedState( EPbStateNotInitialised ), iPreservedPosition( KErrNotFound ), @@ -146,7 +150,7 @@ iPluginUid(KNullUid), iLastActiveProcess(KNullProcessId), iLastInactiveProcess(KNullProcessId), - iCategory(aCategory) + iPositionFromMedia( KErrNotFound ) { iProperties[EPbPropertyVolumeRamp]=KPbFadeInDurationMicroSeconds; } @@ -179,14 +183,24 @@ iMediaHelper = CMPXPlaybackMediaHelper::NewL( *this ); iDummyMediaObserver = new(ELeave) CMPXPlaybackDummyMediaObserver(); - // Select local plugin by default if none selected - iPluginHandler->SelectPlayersL( EPbLocal ); - iInitVolume = ETrue; + iInitVolume = EFalse; + + if (iCategory != EMPXCategoryVideo) + { + // Select local plugin by default if none selected + iPluginHandler->SelectPlayersL( EPbLocal ); + iInitVolume = ETrue; + iPluginHandler->Plugin()->PropertyL( EPbPropertyVolume ); + } + #if defined(__HIGH_RESOLUTION_VOLUME) iVolRoundedUp = EFalse; #endif - iPluginHandler->Plugin()->PropertyL( EPbPropertyVolume ); - } + + iSyncMsgTimer = CPeriodic::NewL( CActive::EPriorityIdle ); + iSyncMsgWait = new (ELeave) CActiveSchedulerWait; + iProperties[EPbPropertyPosition] = 0; + } // ---------------------------------------------------------------------------- // Destructor @@ -232,6 +246,12 @@ #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API iFile64.Close(); #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + delete iSyncMsgTimer; + if (iSyncMsgWait && iSyncMsgWait->IsStarted() ) + { + iSyncMsgWait->AsyncStop(); + } + delete iSyncMsgWait; } // ---------------------------------------------------------------------------- @@ -295,8 +315,11 @@ TMPXPlaybackMessage::EInitializeComplete, 0, EFalse)); - - iPluginUid = iPluginHandler->Plugin()->Uid(); + + if ( iPluginHandler->PlayerFound() ) + { + iPluginUid = iPluginHandler->Plugin()->Uid(); + } RArray dummy; CleanupClosePushL( dummy ); @@ -507,12 +530,6 @@ iLastActiveProcess = aCmd.ValueTObjectL( KMPXCommandPlaybackGeneralClientPid); } - else if (EPbCmdStop == cmd) - { - ASSERT(aCmd.IsSupported(KMPXCommandPlaybackGeneralClientPid)); - iLastInactiveProcess = aCmd.ValueTObjectL( - KMPXCommandPlaybackGeneralClientPid); - } TInt data(0); if (aCmd.IsSupported(KMPXCommandPlaybackGeneralData)) { @@ -628,6 +645,7 @@ break; case EPbPropertyMute: MPX_DEBUG2( "CMPXPlaybackEngine::SetL EPbPropertyMute %d", aValue ); + iProperties[EPbPropertyMute] = aValue; // set now, needed when EPSetComplete is converted to EPropertyChanged if ( iPluginHandler->Plugin() ) { PluginL()->SetL( aProperty, aValue ); @@ -961,7 +979,8 @@ TMPXPlaybackMessage( TMPXPlaybackMessage::EStateChanged, iState, aError )); if ( KErrDied == aError || - KErrAccessDenied == aError ) + KErrAccessDenied == aError || + KErrInUse == aError ) { iPluginState = EPbStateNotInitialised; // fixed @@ -1110,14 +1129,12 @@ } case EPMuteChanged: { - if ( iProperties[EPbPropertyMute] != aData ) - { - iProperties[EPbPropertyMute] = aData; - iClientList->SendMsgL( - TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged, + // property changed broadcast message after successful return from plugins + iProperties[EPbPropertyMute] = aData; + iClientList->SendMsgL( + TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged, EPbPropertyMute, iProperties[EPbPropertyMute])); - } break; } case EPPositionChanged: @@ -1454,10 +1471,23 @@ { iProperties[EPbPropertyPosition] = 0; } - - // Set position to restore saved position. - TRAP_IGNORE( // uPnP leaves if set position in stop state - PluginL()->SetL( EPbPropertyPosition, iProperties[EPbPropertyPosition] )); + + //check whether plugin is KMPXPlaybackPluginVersion2, if not, set saved position + CDesCArray* interfaces = iPluginHandler->SupportedInterfacesL( iPluginUid ); + TBool version2InterfaceSupported = EFalse; + if ( interfaces->MdcaCount() ) + { + TInt pos(0); + version2InterfaceSupported = !interfaces->FindIsq( KMPXPlaybackPluginVersion2, pos ); + } + delete interfaces; + + if ( !version2InterfaceSupported ) + { + // Set position to restore saved position. + TRAP_IGNORE( // uPnP leaves if set position in stop state + PluginL()->SetL( EPbPropertyPosition, iProperties[EPbPropertyPosition] )); + } iAutoResumeHandler->HandleOpenFileComplete(); @@ -1658,14 +1688,6 @@ iCallback->HandleProperty(aProperty,aValue,aError); iCallback = NULL; iTaskQueue->CompleteTask(); - - // notify client the new position during the playback - if ((EPbPropertyPosition == aProperty) && (iProgressTimer->IsActive())) - { - TRAP_IGNORE(iClientList->SendMsgL( - TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged, - EPbPropertyPosition,aValue))); - } } MPX_DEBUG2("<--CMPXPlaybackEngine::HandleProperty 0x%08x", this); } @@ -1986,6 +2008,18 @@ SetStateL( msg ); iProperties[EPbPropertyPosition]=0; + if ( KErrNotFound != iPreservedPosition ) + { + iProperties[EPbPropertyPosition] = iPreservedPosition; + iPreservedPosition = KErrNotFound; + } + else if ( KErrNotFound != iPositionFromMedia ) + { + iProperties[EPbPropertyPosition] = iPositionFromMedia; + iPositionFromMedia = KErrNotFound; + } + MPX_DEBUG2("CMPXPlaybackEngine::InitL iPropertyPosition %d", iProperties[EPbPropertyPosition] ); + // make sure our interface is supported CDesCArray* interfaces = iPluginHandler->SupportedInterfacesL( p->Uid() ); TBool version2InterfaceSupported = EFalse; @@ -2009,22 +2043,22 @@ { if (aSong && aType) { - plugin->InitStreamingL( *aSong, *aType, aAccessPoint ); + plugin->InitStreamingL( *aSong, *aType, aAccessPoint, iProperties[EPbPropertyPosition] ); } else if (aFile) { - plugin->InitStreamingL( *aFile, aAccessPoint ); + plugin->InitStreamingL( *aFile, aAccessPoint, iProperties[EPbPropertyPosition] ); } } else { if (aSong && aType) { - plugin->InitialiseL( *aSong ); + plugin->InitialiseWithPositionL( *aSong, iProperties[EPbPropertyPosition] ); } else if (aFile) { - plugin->InitialiseL( *aFile ); + plugin->InitialiseWithPositionL( *aFile, iProperties[EPbPropertyPosition] ); } } } @@ -2175,6 +2209,11 @@ iAutoResumeHandler->SetAutoResume( aData ); break; } + case EPbCmdSyncMsgComplete: + { + StopWaitLoop(); + break; + } default: ASSERT(0); } @@ -2242,6 +2281,7 @@ } else { + RestorePlaybackPositionL( aMedia ); TRAP( aError, InitL( iUri, mimeType, NULL, iAccessPoint) ); /* // 20 steps fix @@ -2270,7 +2310,7 @@ */ if ( KErrNone == aError ) { - RestorePlaybackPositionAndStateL( aMedia ); + RestorePlaybackStateL(); } else { @@ -2590,7 +2630,7 @@ MPX_DEBUG1("==>CMPXPlaybackEngine::DoStopL()"); Suspend(); if (iState == EPbStatePaused || iState == EPbStatePlaying || - iState == EPbStateInitialising) + iState == EPbStateInitialising || iState == EPbStateBuffering) { if (aSavePlaybackInfo && (iState == EPbStatePaused || iState == EPbStatePlaying )) { @@ -3454,36 +3494,37 @@ // Restore playback position if it was saved previously // ---------------------------------------------------------------------------- // -void CMPXPlaybackEngine::RestorePlaybackPositionAndStateL( +void CMPXPlaybackEngine::RestorePlaybackPositionL( const CMPXMedia& aMedia ) { - MPX_DEBUG1("CMPXPlaybackEngine::RestorePlaybackPositionAndStateL() entering"); + MPX_FUNC("CMPXPlaybackEngine::RestorePlaybackPositionL() "); // Restore Position iProperties[EPbPropertyPosition] = 0; - if ( KErrNotFound != iPreservedPosition ) - { - iProperties[EPbPropertyPosition] = iPreservedPosition; - iPreservedPosition = KErrNotFound; - } - else - { + // Check media if (aMedia.IsSupported(KMPXMediaGeneralLastPlaybackPosition)) { - iProperties[EPbPropertyPosition] = - aMedia.ValueTObjectL( KMPXMediaGeneralLastPlaybackPosition ); + iPositionFromMedia = + aMedia.ValueTObjectL( KMPXMediaGeneralLastPlaybackPosition ); } - } + MPX_DEBUG2("CMPXPlaybackEngine::RestorePlaybackPositionL iPositionFromMedia %d", iPositionFromMedia ); + } + +// ---------------------------------------------------------------------------- +// Restore playback state if it was saved previously +// ---------------------------------------------------------------------------- +// +void CMPXPlaybackEngine::RestorePlaybackStateL() + { + MPX_FUNC("CMPXPlaybackEngine::RestorePlaybackStateL() "); // Restore State if ( EPbStateNotInitialised != iPreservedState ) { iNextState = iPreservedState; iPreservedState = EPbStateNotInitialised; - } - - MPX_DEBUG1("CMPXPlaybackEngine::RestorePlaybackPositionAndStateL() exiting"); + } } // ---------------------------------------------------------------------------- @@ -3818,6 +3859,18 @@ SetStateL( msg ); iProperties[EPbPropertyPosition]=0; + if ( KErrNotFound != iPreservedPosition ) + { + iProperties[EPbPropertyPosition] = iPreservedPosition; + iPreservedPosition = KErrNotFound; + } + else if ( KErrNotFound != iPositionFromMedia ) + { + iProperties[EPbPropertyPosition] = iPositionFromMedia; + iPositionFromMedia = KErrNotFound; + } + MPX_DEBUG2("CMPXPlaybackEngine::InitL iPropertyPosition %d", iProperties[EPbPropertyPosition] ); + // Check if version2 interface is supported. CDesCArray* interfaces = iPluginHandler->SupportedInterfacesL( p->Uid() ); TBool version2InterfaceSupported = EFalse; @@ -3839,11 +3892,11 @@ { if ( iAccessPointSet ) { - plugin->InitStreaming64L( *aFile, aAccessPoint ); + plugin->InitStreaming64L( *aFile, aAccessPoint, iProperties[EPbPropertyPosition] ); } else { - plugin->Initialise64L( *aFile ); + plugin->Initialise64L( *aFile, iProperties[EPbPropertyPosition] ); } } else @@ -3859,4 +3912,71 @@ } #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API +// ---------------------------------------------------------------------------- +// Cancel timer. +// ---------------------------------------------------------------------------- +void CMPXPlaybackEngine::CancelSyncMsgTimer() + { + MPX_FUNC("CMPXPlaybackEngine::CancelSyncMsgTimer()"); + // Cancel timer. + if ( iSyncMsgTimer && iSyncMsgTimer->IsActive() ) + { + MPX_DEBUG1("CMPXPlaybackEngine::CancelSyncMsgTimer(): Timer active, cancelling"); + iSyncMsgTimer->Cancel(); + } + } +// ---------------------------------------------------------------------------- +// Callback for timer. +// ---------------------------------------------------------------------------- +TInt CMPXPlaybackEngine::SyncMsgTimerCallback(TAny* aPtr) + { + MPX_FUNC("CMPXPlaybackEngine::SyncMsgTimerCallback()"); + CMPXPlaybackEngine* ptr = + static_cast(aPtr); + ptr->StopWaitLoop(); + return KErrNone; + } +// ---------------------------------------------------------------------------- +// Handle a synchronous message +// ---------------------------------------------------------------------------- +// +TInt CMPXPlaybackEngine::HandlePlaybackSyncMessage (const CMPXMessage& aMsg) + { + MPX_FUNC("CMPXPlaybackEngine::HandlePlaybackSyncMessage()"); + TInt err = iClientList->SendSyncMsg(&aMsg); + if (err != KErrNone) + { + return err; + } + // Cancel timer. + CancelSyncMsgTimer(); + // Start timer in case there is no callback from primary client. + iSyncMsgTimer->Start( + KMPXSyncMsgTimer, + KMPXSyncMsgTimer, + TCallBack(SyncMsgTimerCallback, this )); + + // Start wait loop until we get a callback from primary client + if ( !iSyncMsgWait->IsStarted() ) + { + iSyncMsgWait->Start(); + } + return KErrNone; + } +// ---------------------------------------------------------------------------- +// Stop the wait loop. +// ---------------------------------------------------------------------------- +void CMPXPlaybackEngine::StopWaitLoop() + { + MPX_FUNC("CMPXPlaybackEngine::StopWaitLoop()"); + // Cancel timer + CancelSyncMsgTimer(); + + // Stop wait loop to unblock. + if ( iSyncMsgWait->IsStarted() ) + { + MPX_DEBUG1("CMPXPlaybackEngine::StopWaitLoop(): Stopping the wait loop."); + iSyncMsgWait->AsyncStop(); + } + } // End of file diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackengine/src/mpxplaybackinitializer.cpp --- a/mpx/playbackframework/playbackengine/src/mpxplaybackinitializer.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackengine/src/mpxplaybackinitializer.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -424,7 +424,8 @@ { if ( iMedia ) { - iEngine.RestorePlaybackPositionAndStateL( *iMedia ); + iEngine.RestorePlaybackPositionL( *iMedia ); + iEngine.RestorePlaybackStateL(); } // // Set plug-in handler @@ -620,13 +621,8 @@ { iHandler->SelectPlayersL(t); } - } - TInt accessPoint = 0; - if ( aMedia.IsSupported(KMPXMediaGeneralExtAccessPoint) ) - { - accessPoint = aMedia.ValueTObjectL( KMPXMediaGeneralExtAccessPoint ); - MPX_DEBUG2("CMPXPlaybackInitializer::InitL accessPoint %d", accessPoint ); - } + } + HBufC8* mimeType = MPXUser::Alloc8L(aMedia.ValueText(KMPXMediaGeneralMimeType)); CleanupStack::PushL(mimeType); @@ -635,7 +631,7 @@ // Plugin handler guarantee to choose a plugin // In case there is file open in the audio controller iHandler->Plugin()->CommandL(EPbCmdClose); - InitL(uri, *mimeType, accessPoint); + InitL(uri, *mimeType); CleanupStack::PopAndDestroy(mimeType); } else // No URI @@ -840,7 +836,7 @@ // Initialize. // ---------------------------------------------------------------------------- // -void CMPXPlaybackInitializer::InitL(const TDesC& aUri, const TDesC8& aType, TInt aAccessPoint) +void CMPXPlaybackInitializer::InitL(const TDesC& aUri, const TDesC8& aType ) { MPX_FUNC("CMPXPlaybackInitializer::InitL"); CMPXPlaybackPlugin* p = iHandler->Plugin(); @@ -868,14 +864,29 @@ // if cast was successful, then init streaming with access point if (plugin) - { - if ( aAccessPoint ) + { + TInt accessPoint = 0; + if ( iMedia->IsSupported(KMPXMediaGeneralExtAccessPoint) ) { - plugin->InitStreamingL( aUri, aType, aAccessPoint ); + accessPoint = iMedia->ValueTObjectL( KMPXMediaGeneralExtAccessPoint ); + MPX_DEBUG2("CMPXPlaybackInitializer::InitL accessPoint %d", accessPoint ); + } + + TInt position = 0; + if (iMedia->IsSupported(KMPXMediaGeneralLastPlaybackPosition)) + { + position = iMedia->ValueTObjectL( KMPXMediaGeneralLastPlaybackPosition ); + MPX_DEBUG2("CMPXPlaybackInitializer::InitL position %d", position ); + } + + + if ( accessPoint ) + { + plugin->InitStreamingL( aUri, aType, accessPoint, position ); } else { - plugin->InitialiseL(aUri); + plugin->InitialiseWithPositionL(aUri, position); } } else diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackserver/inc/mpxplaybackserver.h --- a/mpx/playbackframework/playbackserver/inc/mpxplaybackserver.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackserver/inc/mpxplaybackserver.h Wed Jun 23 17:51:16 2010 +0100 @@ -151,6 +151,15 @@ */ void ConstructL(); + /** + * Process id finder. + * + * @param aEngine pointer to active engine + * @param aProcessId process id of owning process + */ + void FindProcessIdForTsp(const CMPXPlaybackEngine* aEngine, + TProcessId& aProcessId ); + private: // from base class /** * From MMPXPlaybackActiveEngineObserver diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp --- a/mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserver.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -72,8 +72,8 @@ CleanupStack::PushL(server); RProcess::Rendezvous(KErrNone); CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(server); CActiveScheduler::Install(NULL); - CleanupStack::PopAndDestroy(server); CleanupStack::PopAndDestroy(scheduler); } @@ -129,6 +129,42 @@ } // ---------------------------------------------------------------------------- +// Searches process id for target selector plugin. +// When the player has been opened in a mode, which is bound to the same engine +// than certain application's engine, then need to fetch its process id. +// (As a reference for parameter aMode see MMPXPlaybackUtility modes.) +// Otherwise target selector plugin is notified wrongly about client statuses +// and key events are not propagated to correct application. +// ---------------------------------------------------------------------------- +// +void CMPXPlaybackServer::FindProcessIdForTsp( + const CMPXPlaybackEngine* aEngine, + TProcessId& aProcessId ) + { + TBool processFound( EFalse ); + TFindProcess processFinder; + TFullName processName; + + while ( processFinder.Next( processName ) == KErrNone && !processFound ) + { + RProcess process; + TInt err = process.Open( processFinder ); + if( err == KErrNone ) + { + if( process.SecureId().iId == aEngine->ModeId().iUid && + process.ExitType() == EExitPending ) + { + MPX_DEBUG4("CMPXPlaybackServer::FindProcessIdForTsp(): pid changed from %d to %d (mode 0x%x)", + TUint(aProcessId), TUint(process.Id()), aEngine->ModeId().iUid); + aProcessId = process.Id(); + processFound = ETrue; + } + process.Close(); + } + } + } + +// ---------------------------------------------------------------------------- // Increments number of sessions this server holds // ---------------------------------------------------------------------------- // @@ -160,8 +196,16 @@ if (cl->ClientCount()==0) { MPX_DEBUG1("CMPXPlaybackServer::RemoveClient delete a player"); + CMPXPlaybackEngine* enginePtr = p; delete p; - iPlayers.Remove(i); + //Due to callbacks in PlaybackServer we have to remove engine from the iPlayers array after deleting. + //enginePtr is a invalid pointer as p is already deleted + //Find the index of deleted engine using its address + TInt engineIndex = iPlayers.Find(enginePtr); + if ( engineIndex != KErrNotFound ) + { + iPlayers.Remove(engineIndex); + } } break; } @@ -386,12 +430,13 @@ if (!aActive) { #ifdef RD_TSP_CLIENT_MAPPER + TProcessId lastPid( aEngine->LastActiveProcessId() ); + FindProcessIdForTsp( aEngine, lastPid ); iClientMapper->SetTspTargetClientToOtherType( CTspClientMapper::EStoppedClients, - aEngine->LastActiveProcessId()); - MPX_DEBUG2("CMPXPlaybackServer::HandleActiveEngineL(): Adding to stopped client %d", - TUint( aEngine->LastActiveProcessId())); - + lastPid); + MPX_DEBUG2("CMPXPlaybackServer::HandleActiveEngineL(): Added as stopped client %d", + TUint( lastPid)); #endif if (EPbStatePaused != aEngine->State()) { @@ -406,11 +451,20 @@ else {// else aEngine is active player #ifdef RD_TSP_CLIENT_MAPPER - iClientMapper->SetTspTargetClientToOtherType( - CTspClientMapper::EPlayingClients, - aEngine->LastActiveProcessId()); - MPX_DEBUG2("CMPXPlaybackServer::HandleActiveEngineL(): Adding to playing client %d", - TUint( aEngine->LastActiveProcessId())); + TProcessId lastPid( aEngine->LastActiveProcessId() ); + FindProcessIdForTsp( aEngine, lastPid ); + TInt err = iClientMapper->SetTspTargetClientToOtherType( + CTspClientMapper::EPlayingClients, lastPid ); + if ( err != KErrNone && (TUint)lastPid != KNullProcessId ) + { + // Setting target type failed probably because client PID could not be found. + // As a fallback set client as new playing client. + MPX_DEBUG2("CMPXPlaybackServer::HandleActiveEngineL(): Adding to playing client %d", + (TUint)lastPid ); + iClientMapper->SetTspTargetClient( CTspClientMapper::EPlayingClients, lastPid ); + } + MPX_DEBUG2("CMPXPlaybackServer::HandleActiveEngineL(): Added as playing client %d", + (TUint)lastPid ); #endif } @@ -466,9 +520,9 @@ if (MMPXClientlistObserver::EAdd == aChangeType) { iClientMapper->SetTspTargetClient( - CTspClientMapper::EPlayingClients, + CTspClientMapper::ERegisteredClients, aPid); - MPX_DEBUG2("CMPXPlaybackServer::HandleClientChange(): Adding to registered client %d", + MPX_DEBUG2("CMPXPlaybackServer::HandleClientChange(): Added as registered client %d", TUint( aPid )); } else @@ -476,7 +530,7 @@ iClientMapper->RemoveTspTargetClient( CTspClientMapper::EPlayingClients, aPid); - MPX_DEBUG2("CMPXPlaybackServer::HandleClientChange(): Adding to EPlayingClients client %d", + MPX_DEBUG2("CMPXPlaybackServer::HandleClientChange(): Removed from EPlayingClients client %d", TUint( aPid )); } #else diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp --- a/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -475,10 +475,6 @@ CMPXCommand* cmd( NULL ); ::NewFromMessageL(aMessage, 1, cmd); CleanupStack::PushL(cmd); - if (aMessage.Int0()) - { // aSync command - SetAsync(aMessage); - } // else sync command iPlayer->CommandL(*cmd, *iMessageQueue); CleanupStack::PopAndDestroy(cmd); break; @@ -515,6 +511,11 @@ break; } #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + case EPbsSetPrimaryClient: + { + aMsgHandleResult = iPlayer->ClientList()->SetPrimaryClient(*iMessageQueue); + break; + } default: { PanicClient(aMessage,KErrNotSupported); diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackutility/inc/mpxplaybackutilityimpl.h --- a/mpx/playbackframework/playbackutility/inc/mpxplaybackutilityimpl.h Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackutility/inc/mpxplaybackutilityimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -583,6 +583,13 @@ virtual void InitStreaming64L(RFile64& aShareableFile, const TInt aAccessPoint); #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API + /** + * Sets the primary client + * + * @since S60 9.2 + * @return system error + */ + TInt SetPrimaryClientL(); private: diff -r 5daa7cafd16d -r 8ef777f529f0 mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp --- a/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp Fri Feb 19 16:32:39 2010 +0000 +++ b/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -386,6 +386,7 @@ TPtr8 ptr = buf->Ptr(0); if (asyncVar) { // async request + MPX_DEBUG1("CMPXPlaybackUtility::CommandL asynchronous command"); ASSERT(aCallback); // callback must be provided for asynchronous command // Increase reference count on command ownership transferred CMPXCommand* ref = CMPXCommand::NewL(aCmd); @@ -1337,4 +1338,13 @@ #endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API +// ---------------------------------------------------------------------------- +// Set primary client +// ---------------------------------------------------------------------------- +// +TInt CMPXPlaybackUtility::SetPrimaryClientL() + { + MPX_FUNC("CMPXPlaybackUtility::SetPrimaryClientL"); + return iPbs.SendReceiveL(EPbsSetPrimaryClient); + } // End of file diff -r 5daa7cafd16d -r 8ef777f529f0 package_definition.xml --- a/package_definition.xml Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/SIS/QTMS_udeb_STUB_SIS.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/SIS/QTMS_udeb_STUB_SIS.bat Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,64 @@ +rem +rem Copyright (c) 2010 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: Create QTMS UDEB SIS package +rem + +@echo off +echo ---------------------------- +echo Configuring for RnD SIS +echo ---------------------------- +echo Start of configure time: +time /t + +:CREATE_DIR +echo. +echo - create Sis folder (created only if needed) +mkdir .\SIS + +:COPY_DLL +echo. +echo - Copy dlls [udeb]: +copy %EPOCROOT%epoc32\release\armv5\udeb\qtmsapi.dll . + +if errorlevel == 1 goto END_ERROR + +:CALL_ELFTRAIN +echo - Updating Version No [10.1] (calling elftran) +call elftran.exe -version 10.1 qtmsapi.dll + +:MAKESIS +makesis ..\SIS\qtms.pkg ..\SIS\qtms.sis +signsis ..\SIS\qtms.sis ..\SIS\qtms.sisx rd.crt rd.key +if errorlevel == 1 goto END_ERROR + +:DELETE_DLL +echo. +echo - remove the copied dlls from current folder +del qtmsapi.dll + +goto END + +:END_ERROR +echo. +echo Sis creation failed. +goto FINAL_END + +:END +echo. +echo Sis file created succesfully +echo ============================ + +:FINAL_END +echo End of configure time is: +time /t diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/SIS/qtms.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/SIS/qtms.pkg Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,35 @@ +; +; 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: Telephony Multimedia Services (TMS) - UDEB build +; +;File: tms.pkg + +;Languages +&EN + +;Header +#{"QTMS"},(0x10207CB2),1,0,0, TYPE=SA, RU + +;Series 60 v5.0 +[0x101F7961], 0,0,0, {"Series60ProductID"} + +;Localised Vendor name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + +;Files To Copy... +"/epoc32/release/armv5/udeb/qtmsapi.dll"-"!:/sys/bin/qtmsapi.dll" + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/bwins/qtmsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/bwins/qtmsu.def Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,388 @@ +EXPORTS + ?qt_metacast@QTMSSpeakerSink@QTMS@@UAEPAXPBD@Z @ 1 NONAME ; void * QTMS::QTMSSpeakerSink::qt_metacast(char const *) + ?getStaticMetaObject@QTMSGainEffect@QTMS@@SAABUQMetaObject@@XZ @ 2 NONAME ; struct QMetaObject const & QTMS::QTMSGainEffect::getStaticMetaObject(void) + ??0QTMSStream@QTMS@@IAE@XZ @ 3 NONAME ; QTMS::QTMSStream::QTMSStream(void) + ??0QTMSAMRFormat@QTMS@@IAE@XZ @ 4 NONAME ; QTMS::QTMSAMRFormat::QTMSAMRFormat(void) + ?tr@QTMSG729Format@QTMS@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString QTMS::QTMSG729Format::tr(char const *, char const *, int) + ?tr@QTMSModemSource@QTMS@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString QTMS::QTMSModemSource::tr(char const *, char const *) + ?CreateRingTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSRingTone@2@@Z @ 7 NONAME ; int QTMS::QTMSFactory::CreateRingTonePlayer(class QTMS::QTMSRingTone * &) + ?qt_metacall@QTMSClientSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int QTMS::QTMSClientSource::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString QTMS::QTMSVolumeEffect::trUtf8(char const *, char const *, int) + ?trUtf8@QTMSG711Format@QTMS@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString QTMS::QTMSG711Format::trUtf8(char const *, char const *, int) + ?Start@QTMSStream@QTMS@@QAEHXZ @ 11 NONAME ; int QTMS::QTMSStream::Start(void) + ??_EQTMSGlobalRouting@QTMS@@UAE@I@Z @ 12 NONAME ; QTMS::QTMSGlobalRouting::~QTMSGlobalRouting(unsigned int) + ?metaObject@QTMSGlobalRouting@QTMS@@UBEPBUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalRouting::metaObject(void) const + ?SetPlc@QTMSG711Format@QTMS@@QAEHH@Z @ 14 NONAME ; int QTMS::QTMSG711Format::SetPlc(int) + ?BufferProcessed@QTMSClientSource@QTMS@@IAEXPBVTMSBuffer@TMS@@H@Z @ 15 NONAME ; void QTMS::QTMSClientSource::BufferProcessed(class TMS::TMSBuffer const *, int) + ?AddSink@QTMSStream@QTMS@@QAEHPAVQTMSSink@2@@Z @ 16 NONAME ; int QTMS::QTMSStream::AddSink(class QTMS::QTMSSink *) + ?tr@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString QTMS::QTMSPCMFormat::tr(char const *, char const *, int) + ??_EQTMSG729Format@QTMS@@UAE@I@Z @ 18 NONAME ; QTMS::QTMSG729Format::~QTMSG729Format(unsigned int) + ?Deinit@QTMSRingTone@QTMS@@QAEHXZ @ 19 NONAME ; int QTMS::QTMSRingTone::Deinit(void) + ?qt_metacast@QTMSClientSink@QTMS@@UAEPAXPBD@Z @ 20 NONAME ; void * QTMS::QTMSClientSink::qt_metacast(char const *) + ?tr@QTMSG729Format@QTMS@@SA?AVQString@@PBD0@Z @ 21 NONAME ; class QString QTMS::QTMSG729Format::tr(char const *, char const *) + ??_EQTMSSpeakerSink@QTMS@@UAE@I@Z @ 22 NONAME ; QTMS::QTMSSpeakerSink::~QTMSSpeakerSink(unsigned int) + ?getStaticMetaObject@QTMSInbandTone@QTMS@@SAABUQMetaObject@@XZ @ 23 NONAME ; struct QMetaObject const & QTMS::QTMSInbandTone::getStaticMetaObject(void) + ??0QTMSGainEffect@QTMS@@IAE@XZ @ 24 NONAME ; QTMS::QTMSGainEffect::QTMSGainEffect(void) + ?tr@QTMSRingTone@QTMS@@SA?AVQString@@PBD0@Z @ 25 NONAME ; class QString QTMS::QTMSRingTone::tr(char const *, char const *) + ?tr@QTMSClientSink@QTMS@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString QTMS::QTMSClientSink::tr(char const *, char const *, int) + ?GetType@QTMSGlobalGainEffect@QTMS@@UAEHAAH@Z @ 27 NONAME ; int QTMS::QTMSGlobalGainEffect::GetType(int &) + ??1QTMSInbandTone@QTMS@@UAE@XZ @ 28 NONAME ; QTMS::QTMSInbandTone::~QTMSInbandTone(void) + ?trUtf8@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0H@Z @ 29 NONAME ; class QString QTMS::QTMSInbandTone::trUtf8(char const *, char const *, int) + ?GetType@QTMSModemSink@QTMS@@UAEHAAH@Z @ 30 NONAME ; int QTMS::QTMSModemSink::GetType(int &) + ?trUtf8@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0H@Z @ 31 NONAME ; class QString QTMS::QTMSSpeakerSink::trUtf8(char const *, char const *, int) + ?Stop@QTMSDTMF@QTMS@@QAEHXZ @ 32 NONAME ; int QTMS::QTMSDTMF::Stop(void) + ?DeleteRingTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSRingTone@2@@Z @ 33 NONAME ; int QTMS::QTMSFactory::DeleteRingTonePlayer(class QTMS::QTMSRingTone * &) + ?tr@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 34 NONAME ; class QString QTMS::QTMSVolumeEffect::tr(char const *, char const *, int) + ?AddSource@QTMSStream@QTMS@@QAEHPAVQTMSSource@2@@Z @ 35 NONAME ; int QTMS::QTMSStream::AddSource(class QTMS::QTMSSource *) + ??1QTMSGlobalVolEffect@QTMS@@UAE@XZ @ 36 NONAME ; QTMS::QTMSGlobalVolEffect::~QTMSGlobalVolEffect(void) + ?GetType@QTMSSpeakerSink@QTMS@@UAEHAAH@Z @ 37 NONAME ; int QTMS::QTMSSpeakerSink::GetType(int &) + ?getStaticMetaObject@QTMSGlobalVolEffect@QTMS@@SAABUQMetaObject@@XZ @ 38 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalVolEffect::getStaticMetaObject(void) + ??0QTMSModemSource@QTMS@@IAE@XZ @ 39 NONAME ; QTMS::QTMSModemSource::QTMSModemSource(void) + ?trUtf8@QTMSMicSource@QTMS@@SA?AVQString@@PBD0@Z @ 40 NONAME ; class QString QTMS::QTMSMicSource::trUtf8(char const *, char const *) + ?Pause@QTMSRingTone@QTMS@@QAEHXZ @ 41 NONAME ; int QTMS::QTMSRingTone::Pause(void) + ?GetVADMode@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 42 NONAME ; int QTMS::QTMSILBCFormat::GetVADMode(int &) + ?qt_metacast@QTMSDTMF@QTMS@@UAEPAXPBD@Z @ 43 NONAME ; void * QTMS::QTMSDTMF::qt_metacast(char const *) + ?RingtoneEvent@QTMSRingTone@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 44 NONAME ; void QTMS::QTMSRingTone::RingtoneEvent(class QTMS::QTMSRingTone const &, struct QTMS::QTMSSignalEvent) + ??_EQTMSCall@QTMS@@UAE@I@Z @ 45 NONAME ; QTMS::QTMSCall::~QTMSCall(unsigned int) + ?trUtf8@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0@Z @ 46 NONAME ; class QString QTMS::QTMSILBCFormat::trUtf8(char const *, char const *) + ?staticMetaObject@QTMSRingTone@QTMS@@2UQMetaObject@@B @ 47 NONAME ; struct QMetaObject const QTMS::QTMSRingTone::staticMetaObject + ?SetMode@QTMSILBCFormat@QTMS@@QAEHH@Z @ 48 NONAME ; int QTMS::QTMSILBCFormat::SetMode(int) + ?trUtf8@QTMSModemSink@QTMS@@SA?AVQString@@PBD0H@Z @ 49 NONAME ; class QString QTMS::QTMSModemSink::trUtf8(char const *, char const *, int) + ?GetVADMode@QTMSG711Format@QTMS@@QAEHAAH@Z @ 50 NONAME ; int QTMS::QTMSG711Format::GetVADMode(int &) + ?staticMetaObject@QTMSDTMF@QTMS@@2UQMetaObject@@B @ 51 NONAME ; struct QMetaObject const QTMS::QTMSDTMF::staticMetaObject + ??0QTMSMicSource@QTMS@@IAE@XZ @ 52 NONAME ; QTMS::QTMSMicSource::QTMSMicSource(void) + ?GetPreviousOutput@QTMSGlobalRouting@QTMS@@QAEHAAH@Z @ 53 NONAME ; int QTMS::QTMSGlobalRouting::GetPreviousOutput(int &) + ??1QTMSGainEffect@QTMS@@UAE@XZ @ 54 NONAME ; QTMS::QTMSGainEffect::~QTMSGainEffect(void) + ?trUtf8@QTMSClientSink@QTMS@@SA?AVQString@@PBD0@Z @ 55 NONAME ; class QString QTMS::QTMSClientSink::trUtf8(char const *, char const *) + ?EffectsEvent@QTMSGainEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 56 NONAME ; void QTMS::QTMSGainEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent) + ?qt_metacast@QTMSILBCFormat@QTMS@@UAEPAXPBD@Z @ 57 NONAME ; void * QTMS::QTMSILBCFormat::qt_metacast(char const *) + ?TMSStreamEvent@QTMSStream@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 58 NONAME ; void QTMS::QTMSStream::TMSStreamEvent(class QTMS::QTMSStream const &, struct QTMS::QTMSSignalEvent) + ?trUtf8@QTMSRingTone@QTMS@@SA?AVQString@@PBD0@Z @ 59 NONAME ; class QString QTMS::QTMSRingTone::trUtf8(char const *, char const *) + ??1QTMSModemSink@QTMS@@UAE@XZ @ 60 NONAME ; QTMS::QTMSModemSink::~QTMSModemSink(void) + ?metaObject@QTMSVolumeEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 61 NONAME ; struct QMetaObject const * QTMS::QTMSVolumeEffect::metaObject(void) const + ??_EQTMSClientSink@QTMS@@UAE@I@Z @ 62 NONAME ; QTMS::QTMSClientSink::~QTMSClientSink(unsigned int) + ?qt_metacast@QTMSModemSink@QTMS@@UAEPAXPBD@Z @ 63 NONAME ; void * QTMS::QTMSModemSink::qt_metacast(char const *) + ??1QTMSClientSource@QTMS@@UAE@XZ @ 64 NONAME ; QTMS::QTMSClientSource::~QTMSClientSource(void) + ?qt_metacall@QTMSGainEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 65 NONAME ; int QTMS::QTMSGainEffect::qt_metacall(enum QMetaObject::Call, int, void * *) + ?CreateSource@QTMSFactory@QTMS@@QAEHHAAPAVQTMSSource@2@@Z @ 66 NONAME ; int QTMS::QTMSFactory::CreateSource(int, class QTMS::QTMSSource * &) + ?trUtf8@QTMSFactory@QTMS@@SA?AVQString@@PBD0@Z @ 67 NONAME ; class QString QTMS::QTMSFactory::trUtf8(char const *, char const *) + ?qt_metacall@QTMSGlobalVolEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 68 NONAME ; int QTMS::QTMSGlobalVolEffect::qt_metacall(enum QMetaObject::Call, int, void * *) + ?GetLevel@QTMSGlobalGainEffect@QTMS@@QAEHAAI@Z @ 69 NONAME ; int QTMS::QTMSGlobalGainEffect::GetLevel(unsigned int &) + ?trUtf8@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 70 NONAME ; class QString QTMS::QTMSGlobalVolEffect::trUtf8(char const *, char const *, int) + ?trUtf8@QTMSCall@QTMS@@SA?AVQString@@PBD0@Z @ 71 NONAME ; class QString QTMS::QTMSCall::trUtf8(char const *, char const *) + ?GetMaxLevel@QTMSGlobalGainEffect@QTMS@@QAEHAAI@Z @ 72 NONAME ; int QTMS::QTMSGlobalGainEffect::GetMaxLevel(unsigned int &) + ?RemoveSource@QTMSStream@QTMS@@QAEHPAVQTMSSource@2@@Z @ 73 NONAME ; int QTMS::QTMSStream::RemoveSource(class QTMS::QTMSSource *) + ?DTMFEvent@QTMSDTMF@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 74 NONAME ; void QTMS::QTMSDTMF::DTMFEvent(class QTMS::QTMSDTMF const &, struct QTMS::QTMSSignalEvent) + ?GetCNG@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 75 NONAME ; int QTMS::QTMSILBCFormat::GetCNG(int &) + ?qt_metacast@QTMSG729Format@QTMS@@UAEPAXPBD@Z @ 76 NONAME ; void * QTMS::QTMSG729Format::qt_metacast(char const *) + ?tr@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0@Z @ 77 NONAME ; class QString QTMS::QTMSILBCFormat::tr(char const *, char const *) + ?GetType@QTMSClientSink@QTMS@@UAEHAAH@Z @ 78 NONAME ; int QTMS::QTMSClientSink::GetType(int &) + ?tr@QTMSModemSink@QTMS@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString QTMS::QTMSModemSink::tr(char const *, char const *, int) + ?staticMetaObject@QTMSMicSource@QTMS@@2UQMetaObject@@B @ 80 NONAME ; struct QMetaObject const QTMS::QTMSMicSource::staticMetaObject + ?metaObject@QTMSModemSource@QTMS@@UBEPBUQMetaObject@@XZ @ 81 NONAME ; struct QMetaObject const * QTMS::QTMSModemSource::metaObject(void) const + ?ContinueDTMFStringSending@QTMSDTMF@QTMS@@QAEHH@Z @ 82 NONAME ; int QTMS::QTMSDTMF::ContinueDTMFStringSending(int) + ?GetCNG@QTMSG711Format@QTMS@@QAEHAAH@Z @ 83 NONAME ; int QTMS::QTMSG711Format::GetCNG(int &) + ?CreateGlobalRouting@QTMSFactory@QTMS@@QAEHAAPAVQTMSGlobalRouting@2@@Z @ 84 NONAME ; int QTMS::QTMSFactory::CreateGlobalRouting(class QTMS::QTMSGlobalRouting * &) + ?tr@QTMSRingTone@QTMS@@SA?AVQString@@PBD0H@Z @ 85 NONAME ; class QString QTMS::QTMSRingTone::tr(char const *, char const *, int) + ?trUtf8@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0H@Z @ 86 NONAME ; class QString QTMS::QTMSGlobalRouting::trUtf8(char const *, char const *, int) + ?tr@QTMSClientSink@QTMS@@SA?AVQString@@PBD0@Z @ 87 NONAME ; class QString QTMS::QTMSClientSink::tr(char const *, char const *) + ?trUtf8@QTMSModemSink@QTMS@@SA?AVQString@@PBD0@Z @ 88 NONAME ; class QString QTMS::QTMSModemSink::trUtf8(char const *, char const *) + ?qt_metacall@QTMSInbandTone@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 89 NONAME ; int QTMS::QTMSInbandTone::qt_metacall(enum QMetaObject::Call, int, void * *) + ?staticMetaObject@QTMSSpeakerSink@QTMS@@2UQMetaObject@@B @ 90 NONAME ; struct QMetaObject const QTMS::QTMSSpeakerSink::staticMetaObject + ?staticMetaObject@QTMSGainEffect@QTMS@@2UQMetaObject@@B @ 91 NONAME ; struct QMetaObject const QTMS::QTMSGainEffect::staticMetaObject + ?staticMetaObject@QTMSModemSink@QTMS@@2UQMetaObject@@B @ 92 NONAME ; struct QMetaObject const QTMS::QTMSModemSink::staticMetaObject + ?tr@QTMSModemSource@QTMS@@SA?AVQString@@PBD0H@Z @ 93 NONAME ; class QString QTMS::QTMSModemSource::tr(char const *, char const *, int) + ?tr@QTMSDTMF@QTMS@@SA?AVQString@@PBD0@Z @ 94 NONAME ; class QString QTMS::QTMSDTMF::tr(char const *, char const *) + ?tr@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 95 NONAME ; class QString QTMS::QTMSGlobalVolEffect::tr(char const *, char const *, int) + ?GetType@QTMSGainEffect@QTMS@@UAEHAAH@Z @ 96 NONAME ; int QTMS::QTMSGainEffect::GetType(int &) + ?trUtf8@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0@Z @ 97 NONAME ; class QString QTMS::QTMSSpeakerSink::trUtf8(char const *, char const *) + ??_EQTMSG711Format@QTMS@@UAE@I@Z @ 98 NONAME ; QTMS::QTMSG711Format::~QTMSG711Format(unsigned int) + ?qt_metacast@QTMSAMRFormat@QTMS@@UAEPAXPBD@Z @ 99 NONAME ; void * QTMS::QTMSAMRFormat::qt_metacast(char const *) + ?GlobalRoutingEvent@QTMSGlobalRouting@QTMS@@IAEXABV12@UQTMSSignalEvent@2@H@Z @ 100 NONAME ; void QTMS::QTMSGlobalRouting::GlobalRoutingEvent(class QTMS::QTMSGlobalRouting const &, struct QTMS::QTMSSignalEvent, int) + ?trUtf8@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 101 NONAME ; class QString QTMS::QTMSAMRFormat::trUtf8(char const *, char const *, int) + ?getStaticMetaObject@QTMSRingTone@QTMS@@SAABUQMetaObject@@XZ @ 102 NONAME ; struct QMetaObject const & QTMS::QTMSRingTone::getStaticMetaObject(void) + ?metaObject@QTMSMicSource@QTMS@@UBEPBUQMetaObject@@XZ @ 103 NONAME ; struct QMetaObject const * QTMS::QTMSMicSource::metaObject(void) const + ??1QTMSSpeakerSink@QTMS@@UAE@XZ @ 104 NONAME ; QTMS::QTMSSpeakerSink::~QTMSSpeakerSink(void) + ??0QTMSVolumeEffect@QTMS@@IAE@XZ @ 105 NONAME ; QTMS::QTMSVolumeEffect::QTMSVolumeEffect(void) + ?staticMetaObject@QTMSAMRFormat@QTMS@@2UQMetaObject@@B @ 106 NONAME ; struct QMetaObject const QTMS::QTMSAMRFormat::staticMetaObject + ?Init@QTMSStream@QTMS@@QAEHXZ @ 107 NONAME ; int QTMS::QTMSStream::Init(void) + ?GetVADMode@QTMSG729Format@QTMS@@QAEHAAH@Z @ 108 NONAME ; int QTMS::QTMSG729Format::GetVADMode(int &) + ??1QTMSGlobalGainEffect@QTMS@@UAE@XZ @ 109 NONAME ; QTMS::QTMSGlobalGainEffect::~QTMSGlobalGainEffect(void) + ??_EQTMSInbandTone@QTMS@@UAE@I@Z @ 110 NONAME ; QTMS::QTMSInbandTone::~QTMSInbandTone(unsigned int) + ?trUtf8@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0@Z @ 111 NONAME ; class QString QTMS::QTMSAMRFormat::trUtf8(char const *, char const *) + ?qt_metacast@QTMSRingTone@QTMS@@UAEPAXPBD@Z @ 112 NONAME ; void * QTMS::QTMSRingTone::qt_metacast(char const *) + ?GetType@QTMSClientSource@QTMS@@UAEHAAH@Z @ 113 NONAME ; int QTMS::QTMSClientSource::GetType(int &) + ?metaObject@QTMSPCMFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 114 NONAME ; struct QMetaObject const * QTMS::QTMSPCMFormat::metaObject(void) const + ?tr@QTMSMicSource@QTMS@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString QTMS::QTMSMicSource::tr(char const *, char const *) + ??1QTMSGlobalRouting@QTMS@@UAE@XZ @ 116 NONAME ; QTMS::QTMSGlobalRouting::~QTMSGlobalRouting(void) + ?getStaticMetaObject@QTMSStream@QTMS@@SAABUQMetaObject@@XZ @ 117 NONAME ; struct QMetaObject const & QTMS::QTMSStream::getStaticMetaObject(void) + ?trUtf8@QTMSClientSource@QTMS@@SA?AVQString@@PBD0@Z @ 118 NONAME ; class QString QTMS::QTMSClientSource::trUtf8(char const *, char const *) + ?tr@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 119 NONAME ; class QString QTMS::QTMSAMRFormat::tr(char const *, char const *, int) + ?qt_metacast@QTMSModemSource@QTMS@@UAEPAXPBD@Z @ 120 NONAME ; void * QTMS::QTMSModemSource::qt_metacast(char const *) + ?getStaticMetaObject@QTMSG711Format@QTMS@@SAABUQMetaObject@@XZ @ 121 NONAME ; struct QMetaObject const & QTMS::QTMSG711Format::getStaticMetaObject(void) + ??_EQTMSClientSource@QTMS@@UAE@I@Z @ 122 NONAME ; QTMS::QTMSClientSource::~QTMSClientSource(unsigned int) + ?GetLevel@QTMSGainEffect@QTMS@@QAEHAAI@Z @ 123 NONAME ; int QTMS::QTMSGainEffect::GetLevel(unsigned int &) + ?tr@QTMSFactory@QTMS@@SA?AVQString@@PBD0@Z @ 124 NONAME ; class QString QTMS::QTMSFactory::tr(char const *, char const *) + ?qt_metacast@QTMSGlobalRouting@QTMS@@UAEPAXPBD@Z @ 125 NONAME ; void * QTMS::QTMSGlobalRouting::qt_metacast(char const *) + ?getStaticMetaObject@QTMSFactory@QTMS@@SAABUQMetaObject@@XZ @ 126 NONAME ; struct QMetaObject const & QTMS::QTMSFactory::getStaticMetaObject(void) + ??_EQTMSAMRFormat@QTMS@@UAE@I@Z @ 127 NONAME ; QTMS::QTMSAMRFormat::~QTMSAMRFormat(unsigned int) + ?getStaticMetaObject@QTMSPCMFormat@QTMS@@SAABUQMetaObject@@XZ @ 128 NONAME ; struct QMetaObject const & QTMS::QTMSPCMFormat::getStaticMetaObject(void) + ?Flush@QTMSClientSource@QTMS@@QAEHXZ @ 129 NONAME ; int QTMS::QTMSClientSource::Flush(void) + ?Stop@QTMSRingTone@QTMS@@QAEHXZ @ 130 NONAME ; int QTMS::QTMSRingTone::Stop(void) + ?DeleteGlobalRouting@QTMSFactory@QTMS@@QAEHAAPAVQTMSGlobalRouting@2@@Z @ 131 NONAME ; int QTMS::QTMSFactory::DeleteGlobalRouting(class QTMS::QTMSGlobalRouting * &) + ?tr@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0H@Z @ 132 NONAME ; class QString QTMS::QTMSGlobalRouting::tr(char const *, char const *, int) + ?SetMode@QTMSG711Format@QTMS@@QAEHH@Z @ 133 NONAME ; int QTMS::QTMSG711Format::SetMode(int) + ?GetMode@QTMSILBCFormat@QTMS@@QAEHAAH@Z @ 134 NONAME ; int QTMS::QTMSILBCFormat::GetMode(int &) + ?GetMode@QTMSG711Format@QTMS@@QAEHAAH@Z @ 135 NONAME ; int QTMS::QTMSG711Format::GetMode(int &) + ?GetAvailableOutputs@QTMSGlobalRouting@QTMS@@QAEHAAV?$vector@IV?$allocator@I@std@@@std@@@Z @ 136 NONAME ; int QTMS::QTMSGlobalRouting::GetAvailableOutputs(class std::vector > &) + ?staticMetaObject@QTMSFactory@QTMS@@2UQMetaObject@@B @ 137 NONAME ; struct QMetaObject const QTMS::QTMSFactory::staticMetaObject + ?DeleteFormat@QTMSFactory@QTMS@@QAEHAAPAVQTMSFormat@2@@Z @ 138 NONAME ; int QTMS::QTMSFactory::DeleteFormat(class QTMS::QTMSFormat * &) + ?tr@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 139 NONAME ; class QString QTMS::QTMSILBCFormat::tr(char const *, char const *, int) + ??1QTMSPCMFormat@QTMS@@UAE@XZ @ 140 NONAME ; QTMS::QTMSPCMFormat::~QTMSPCMFormat(void) + ?trUtf8@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 141 NONAME ; class QString QTMS::QTMSGainEffect::trUtf8(char const *, char const *) + ??0QTMSG711Format@QTMS@@IAE@XZ @ 142 NONAME ; QTMS::QTMSG711Format::QTMSG711Format(void) + ?staticMetaObject@QTMSILBCFormat@QTMS@@2UQMetaObject@@B @ 143 NONAME ; struct QMetaObject const QTMS::QTMSILBCFormat::staticMetaObject + ?metaObject@QTMSG729Format@QTMS@@UBEPBUQMetaObject@@XZ @ 144 NONAME ; struct QMetaObject const * QTMS::QTMSG729Format::metaObject(void) const + ?tr@QTMSFactory@QTMS@@SA?AVQString@@PBD0H@Z @ 145 NONAME ; class QString QTMS::QTMSFactory::tr(char const *, char const *, int) + ?tr@QTMSCall@QTMS@@SA?AVQString@@PBD0H@Z @ 146 NONAME ; class QString QTMS::QTMSCall::tr(char const *, char const *, int) + ?staticMetaObject@QTMSClientSink@QTMS@@2UQMetaObject@@B @ 147 NONAME ; struct QMetaObject const QTMS::QTMSClientSink::staticMetaObject + ?EffectsEvent@QTMSGlobalVolEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 148 NONAME ; void QTMS::QTMSGlobalVolEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent) + ?CreateFormat@QTMSFactory@QTMS@@QAEHHAAPAVQTMSFormat@2@@Z @ 149 NONAME ; int QTMS::QTMSFactory::CreateFormat(int, class QTMS::QTMSFormat * &) + ?SetCNG@QTMSILBCFormat@QTMS@@QAEHH@Z @ 150 NONAME ; int QTMS::QTMSILBCFormat::SetCNG(int) + ??1QTMSAMRFormat@QTMS@@UAE@XZ @ 151 NONAME ; QTMS::QTMSAMRFormat::~QTMSAMRFormat(void) + ?metaObject@QTMSClientSink@QTMS@@UBEPBUQMetaObject@@XZ @ 152 NONAME ; struct QMetaObject const * QTMS::QTMSClientSink::metaObject(void) const + ?trUtf8@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0@Z @ 153 NONAME ; class QString QTMS::QTMSInbandTone::trUtf8(char const *, char const *) + ?staticMetaObject@QTMSG711Format@QTMS@@2UQMetaObject@@B @ 154 NONAME ; struct QMetaObject const QTMS::QTMSG711Format::staticMetaObject + ?BufferFilled@QTMSClientSource@QTMS@@QAEHAAVTMSBuffer@TMS@@@Z @ 155 NONAME ; int QTMS::QTMSClientSource::BufferFilled(class TMS::TMSBuffer &) + ?trUtf8@QTMSDTMF@QTMS@@SA?AVQString@@PBD0H@Z @ 156 NONAME ; class QString QTMS::QTMSDTMF::trUtf8(char const *, char const *, int) + ?InbandToneEvent@QTMSInbandTone@QTMS@@IAEXABV12@UQTMSSignalEvent@2@@Z @ 157 NONAME ; void QTMS::QTMSInbandTone::InbandToneEvent(class QTMS::QTMSInbandTone const &, struct QTMS::QTMSSignalEvent) + ?tr@QTMSModemSink@QTMS@@SA?AVQString@@PBD0@Z @ 158 NONAME ; class QString QTMS::QTMSModemSink::tr(char const *, char const *) + ?tr@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 159 NONAME ; class QString QTMS::QTMSGainEffect::tr(char const *, char const *, int) + ?qt_metacast@QTMSG711Format@QTMS@@UAEPAXPBD@Z @ 160 NONAME ; void * QTMS::QTMSG711Format::qt_metacast(char const *) + ?GetMaxLevel@QTMSVolumeEffect@QTMS@@QAEHAAI@Z @ 161 NONAME ; int QTMS::QTMSVolumeEffect::GetMaxLevel(unsigned int &) + ??0QTMSSpeakerSink@QTMS@@IAE@XZ @ 162 NONAME ; QTMS::QTMSSpeakerSink::QTMSSpeakerSink(void) + ?ProcessBuffer@QTMSClientSource@QTMS@@QAEHPAVTMSBuffer@TMS@@@Z @ 163 NONAME ; int QTMS::QTMSClientSource::ProcessBuffer(class TMS::TMSBuffer *) + ??_EQTMSMicSource@QTMS@@UAE@I@Z @ 164 NONAME ; QTMS::QTMSMicSource::~QTMSMicSource(unsigned int) + ?metaObject@QTMSModemSink@QTMS@@UBEPBUQMetaObject@@XZ @ 165 NONAME ; struct QMetaObject const * QTMS::QTMSModemSink::metaObject(void) const + ?DeleteCall@QTMSFactory@QTMS@@QAEHAAPAVQTMSCall@2@@Z @ 166 NONAME ; int QTMS::QTMSFactory::DeleteCall(class QTMS::QTMSCall * &) + ?tr@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 167 NONAME ; class QString QTMS::QTMSGlobalGainEffect::tr(char const *, char const *, int) + ?qt_metacall@QTMSMicSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 168 NONAME ; int QTMS::QTMSMicSource::qt_metacall(enum QMetaObject::Call, int, void * *) + ?GetType@QTMSFormat@QTMS@@UAEHAAH@Z @ 169 NONAME ; int QTMS::QTMSFormat::GetType(int &) + ?DeleteStream@QTMSCall@QTMS@@QAEHAAPAVQTMSStream@2@@Z @ 170 NONAME ; int QTMS::QTMSCall::DeleteStream(class QTMS::QTMSStream * &) + ?trUtf8@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0@Z @ 171 NONAME ; class QString QTMS::QTMSVolumeEffect::trUtf8(char const *, char const *) + ?CreateInbandTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSInbandTone@2@@Z @ 172 NONAME ; int QTMS::QTMSFactory::CreateInbandTonePlayer(class QTMS::QTMSInbandTone * &) + ?trUtf8@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0@Z @ 173 NONAME ; class QString QTMS::QTMSGlobalRouting::trUtf8(char const *, char const *) + ??1QTMSG711Format@QTMS@@UAE@XZ @ 174 NONAME ; QTMS::QTMSG711Format::~QTMSG711Format(void) + ?tr@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 175 NONAME ; class QString QTMS::QTMSGainEffect::tr(char const *, char const *) + ??_EQTMSModemSource@QTMS@@UAE@I@Z @ 176 NONAME ; QTMS::QTMSModemSource::~QTMSModemSource(unsigned int) + ?qt_metacall@QTMSPCMFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 177 NONAME ; int QTMS::QTMSPCMFormat::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QTMSILBCFormat@QTMS@@IAE@XZ @ 178 NONAME ; QTMS::QTMSILBCFormat::QTMSILBCFormat(void) + ?trUtf8@QTMSStream@QTMS@@SA?AVQString@@PBD0H@Z @ 179 NONAME ; class QString QTMS::QTMSStream::trUtf8(char const *, char const *, int) + ?qt_metacast@QTMSPCMFormat@QTMS@@UAEPAXPBD@Z @ 180 NONAME ; void * QTMS::QTMSPCMFormat::qt_metacast(char const *) + ?qt_metacall@QTMSSpeakerSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 181 NONAME ; int QTMS::QTMSSpeakerSink::qt_metacall(enum QMetaObject::Call, int, void * *) + ?GetLevel@QTMSVolumeEffect@QTMS@@QAEHAAI@Z @ 182 NONAME ; int QTMS::QTMSVolumeEffect::GetLevel(unsigned int &) + ?trUtf8@QTMSFactory@QTMS@@SA?AVQString@@PBD0H@Z @ 183 NONAME ; class QString QTMS::QTMSFactory::trUtf8(char const *, char const *, int) + ??_EQTMSGainEffect@QTMS@@UAE@I@Z @ 184 NONAME ; QTMS::QTMSGainEffect::~QTMSGainEffect(unsigned int) + ?tr@QTMSGlobalRouting@QTMS@@SA?AVQString@@PBD0@Z @ 185 NONAME ; class QString QTMS::QTMSGlobalRouting::tr(char const *, char const *) + ?tr@QTMSAMRFormat@QTMS@@SA?AVQString@@PBD0@Z @ 186 NONAME ; class QString QTMS::QTMSAMRFormat::tr(char const *, char const *) + ?getStaticMetaObject@QTMSSpeakerSink@QTMS@@SAABUQMetaObject@@XZ @ 187 NONAME ; struct QMetaObject const & QTMS::QTMSSpeakerSink::getStaticMetaObject(void) + ?CreateDTMF@QTMSFactory@QTMS@@QAEHHAAPAVQTMSDTMF@2@@Z @ 188 NONAME ; int QTMS::QTMSFactory::CreateDTMF(int, class QTMS::QTMSDTMF * &) + ?trUtf8@QTMSStream@QTMS@@SA?AVQString@@PBD0@Z @ 189 NONAME ; class QString QTMS::QTMSStream::trUtf8(char const *, char const *) + ?tr@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0@Z @ 190 NONAME ; class QString QTMS::QTMSInbandTone::tr(char const *, char const *) + ?tr@QTMSStream@QTMS@@SA?AVQString@@PBD0@Z @ 191 NONAME ; class QString QTMS::QTMSStream::tr(char const *, char const *) + ??1QTMSMicSource@QTMS@@UAE@XZ @ 192 NONAME ; QTMS::QTMSMicSource::~QTMSMicSource(void) + ??_EQTMSFactory@QTMS@@UAE@I@Z @ 193 NONAME ; QTMS::QTMSFactory::~QTMSFactory(unsigned int) + ??1QTMSCall@QTMS@@UAE@XZ @ 194 NONAME ; QTMS::QTMSCall::~QTMSCall(void) + ?staticMetaObject@QTMSG729Format@QTMS@@2UQMetaObject@@B @ 195 NONAME ; struct QMetaObject const QTMS::QTMSG729Format::staticMetaObject + ??0QTMSClientSource@QTMS@@IAE@XZ @ 196 NONAME ; QTMS::QTMSClientSource::QTMSClientSource(void) + ?Stop@QTMSInbandTone@QTMS@@QAEHXZ @ 197 NONAME ; int QTMS::QTMSInbandTone::Stop(void) + ?tr@QTMSCall@QTMS@@SA?AVQString@@PBD0@Z @ 198 NONAME ; class QString QTMS::QTMSCall::tr(char const *, char const *) + ?qt_metacall@QTMSCall@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 199 NONAME ; int QTMS::QTMSCall::qt_metacall(enum QMetaObject::Call, int, void * *) + ?metaObject@QTMSSpeakerSink@QTMS@@UBEPBUQMetaObject@@XZ @ 200 NONAME ; struct QMetaObject const * QTMS::QTMSSpeakerSink::metaObject(void) const + ?SetTone@QTMSDTMF@QTMS@@QAEHPAU_GString@@@Z @ 201 NONAME ; int QTMS::QTMSDTMF::SetTone(struct _GString *) + ?SetEnqueueMode@QTMSClientSource@QTMS@@QAEHH@Z @ 202 NONAME ; int QTMS::QTMSClientSource::SetEnqueueMode(int) + ?staticMetaObject@QTMSClientSource@QTMS@@2UQMetaObject@@B @ 203 NONAME ; struct QMetaObject const QTMS::QTMSClientSource::staticMetaObject + ?trUtf8@QTMSModemSource@QTMS@@SA?AVQString@@PBD0@Z @ 204 NONAME ; class QString QTMS::QTMSModemSource::trUtf8(char const *, char const *) + ?trUtf8@QTMSG729Format@QTMS@@SA?AVQString@@PBD0H@Z @ 205 NONAME ; class QString QTMS::QTMSG729Format::trUtf8(char const *, char const *, int) + ?GetType@QTMSVolumeEffect@QTMS@@UAEHAAH@Z @ 206 NONAME ; int QTMS::QTMSVolumeEffect::GetType(int &) + ?qt_metacall@QTMSVolumeEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 207 NONAME ; int QTMS::QTMSVolumeEffect::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QTMSG711Format@QTMS@@SA?AVQString@@PBD0H@Z @ 208 NONAME ; class QString QTMS::QTMSG711Format::tr(char const *, char const *, int) + ??1QTMSILBCFormat@QTMS@@UAE@XZ @ 209 NONAME ; QTMS::QTMSILBCFormat::~QTMSILBCFormat(void) + ?Play@QTMSRingTone@QTMS@@QAEHXZ @ 210 NONAME ; int QTMS::QTMSRingTone::Play(void) + ?qt_metacall@QTMSILBCFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 211 NONAME ; int QTMS::QTMSILBCFormat::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0H@Z @ 212 NONAME ; class QString QTMS::QTMSSpeakerSink::tr(char const *, char const *, int) + ?GetBitRate@QTMSFormat@QTMS@@QAEHAAI@Z @ 213 NONAME ; int QTMS::QTMSFormat::GetBitRate(unsigned int &) + ?GetType@QTMSModemSource@QTMS@@UAEHAAH@Z @ 214 NONAME ; int QTMS::QTMSModemSource::GetType(int &) + ?staticMetaObject@QTMSGlobalVolEffect@QTMS@@2UQMetaObject@@B @ 215 NONAME ; struct QMetaObject const QTMS::QTMSGlobalVolEffect::staticMetaObject + ??1QTMSFormat@QTMS@@UAE@XZ @ 216 NONAME ; QTMS::QTMSFormat::~QTMSFormat(void) + ?GetPlc@QTMSG711Format@QTMS@@QAEHAAH@Z @ 217 NONAME ; int QTMS::QTMSG711Format::GetPlc(int &) + ?Start@QTMSInbandTone@QTMS@@QAEHH@Z @ 218 NONAME ; int QTMS::QTMSInbandTone::Start(int) + ?trUtf8@QTMSClientSink@QTMS@@SA?AVQString@@PBD0H@Z @ 219 NONAME ; class QString QTMS::QTMSClientSink::trUtf8(char const *, char const *, int) + ?tr@QTMSInbandTone@QTMS@@SA?AVQString@@PBD0H@Z @ 220 NONAME ; class QString QTMS::QTMSInbandTone::tr(char const *, char const *, int) + ??_EQTMSPCMFormat@QTMS@@UAE@I@Z @ 221 NONAME ; QTMS::QTMSPCMFormat::~QTMSPCMFormat(unsigned int) + ?metaObject@QTMSAMRFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 222 NONAME ; struct QMetaObject const * QTMS::QTMSAMRFormat::metaObject(void) const + ?metaObject@QTMSStream@QTMS@@UBEPBUQMetaObject@@XZ @ 223 NONAME ; struct QMetaObject const * QTMS::QTMSStream::metaObject(void) const + ?getStaticMetaObject@QTMSGlobalGainEffect@QTMS@@SAABUQMetaObject@@XZ @ 224 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalGainEffect::getStaticMetaObject(void) + ?tr@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0@Z @ 225 NONAME ; class QString QTMS::QTMSGlobalVolEffect::tr(char const *, char const *) + ?staticMetaObject@QTMSInbandTone@QTMS@@2UQMetaObject@@B @ 226 NONAME ; struct QMetaObject const QTMS::QTMSInbandTone::staticMetaObject + ?trUtf8@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 227 NONAME ; class QString QTMS::QTMSGlobalGainEffect::trUtf8(char const *, char const *, int) + ?qt_metacast@QTMSClientSource@QTMS@@UAEPAXPBD@Z @ 228 NONAME ; void * QTMS::QTMSClientSource::qt_metacast(char const *) + ?metaObject@QTMSCall@QTMS@@UBEPBUQMetaObject@@XZ @ 229 NONAME ; struct QMetaObject const * QTMS::QTMSCall::metaObject(void) const + ?qt_metacall@QTMSClientSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 230 NONAME ; int QTMS::QTMSClientSink::qt_metacall(enum QMetaObject::Call, int, void * *) + ?CreateStream@QTMSCall@QTMS@@QAEHHAAPAVQTMSStream@2@@Z @ 231 NONAME ; int QTMS::QTMSCall::CreateStream(int, class QTMS::QTMSStream * &) + ?DeleteInbandTonePlayer@QTMSFactory@QTMS@@QAEHAAPAVQTMSInbandTone@2@@Z @ 232 NONAME ; int QTMS::QTMSFactory::DeleteInbandTonePlayer(class QTMS::QTMSInbandTone * &) + ?SetLevel@QTMSGlobalGainEffect@QTMS@@QAEHI@Z @ 233 NONAME ; int QTMS::QTMSGlobalGainEffect::SetLevel(unsigned int) + ?GetStreamType@QTMSStream@QTMS@@QAEHXZ @ 234 NONAME ; int QTMS::QTMSStream::GetStreamType(void) + ?getStaticMetaObject@QTMSGlobalRouting@QTMS@@SAABUQMetaObject@@XZ @ 235 NONAME ; struct QMetaObject const & QTMS::QTMSGlobalRouting::getStaticMetaObject(void) + ??0QTMSGlobalVolEffect@QTMS@@IAE@XZ @ 236 NONAME ; QTMS::QTMSGlobalVolEffect::QTMSGlobalVolEffect(void) + ?CreateSink@QTMSFactory@QTMS@@QAEHHAAPAVQTMSSink@2@@Z @ 237 NONAME ; int QTMS::QTMSFactory::CreateSink(int, class QTMS::QTMSSink * &) + ?EffectsEvent@QTMSVolumeEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 238 NONAME ; void QTMS::QTMSVolumeEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent) + ?getStaticMetaObject@QTMSG729Format@QTMS@@SAABUQMetaObject@@XZ @ 239 NONAME ; struct QMetaObject const & QTMS::QTMSG729Format::getStaticMetaObject(void) + ??1QTMSDTMF@QTMS@@UAE@XZ @ 240 NONAME ; QTMS::QTMSDTMF::~QTMSDTMF(void) + ?DeleteDTMF@QTMSFactory@QTMS@@QAEHAAPAVQTMSDTMF@2@@Z @ 241 NONAME ; int QTMS::QTMSFactory::DeleteDTMF(class QTMS::QTMSDTMF * &) + ??_EQTMSFormat@QTMS@@UAE@I@Z @ 242 NONAME ; QTMS::QTMSFormat::~QTMSFormat(unsigned int) + ?staticMetaObject@QTMSGlobalGainEffect@QTMS@@2UQMetaObject@@B @ 243 NONAME ; struct QMetaObject const QTMS::QTMSGlobalGainEffect::staticMetaObject + ?SetVADMode@QTMSILBCFormat@QTMS@@QAEHH@Z @ 244 NONAME ; int QTMS::QTMSILBCFormat::SetVADMode(int) + ??0QTMSCall@QTMS@@IAE@XZ @ 245 NONAME ; QTMS::QTMSCall::QTMSCall(void) + ?GetEnqueueMode@QTMSClientSource@QTMS@@QAEHAAH@Z @ 246 NONAME ; int QTMS::QTMSClientSource::GetEnqueueMode(int &) + ?metaObject@QTMSGlobalVolEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 247 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalVolEffect::metaObject(void) const + ?staticMetaObject@QTMSGlobalRouting@QTMS@@2UQMetaObject@@B @ 248 NONAME ; struct QMetaObject const QTMS::QTMSGlobalRouting::staticMetaObject + ?qt_metacast@QTMSFactory@QTMS@@UAEPAXPBD@Z @ 249 NONAME ; void * QTMS::QTMSFactory::qt_metacast(char const *) + ?SetCNG@QTMSG711Format@QTMS@@QAEHH@Z @ 250 NONAME ; int QTMS::QTMSG711Format::SetCNG(int) + ?qt_metacall@QTMSG729Format@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 251 NONAME ; int QTMS::QTMSG729Format::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QTMSStream@QTMS@@SA?AVQString@@PBD0H@Z @ 252 NONAME ; class QString QTMS::QTMSStream::tr(char const *, char const *, int) + ?SetLevel@QTMSVolumeEffect@QTMS@@QAEHI@Z @ 253 NONAME ; int QTMS::QTMSVolumeEffect::SetLevel(unsigned int) + ?DeleteEffect@QTMSFactory@QTMS@@QAEHAAPAVQTMSEffect@2@@Z @ 254 NONAME ; int QTMS::QTMSFactory::DeleteEffect(class QTMS::QTMSEffect * &) + ?qt_metacast@QTMSCall@QTMS@@UAEPAXPBD@Z @ 255 NONAME ; void * QTMS::QTMSCall::qt_metacast(char const *) + ?SetFormat@QTMSStream@QTMS@@QAEHPAVQTMSFormat@2@@Z @ 256 NONAME ; int QTMS::QTMSStream::SetFormat(class QTMS::QTMSFormat *) + ?getStaticMetaObject@QTMSDTMF@QTMS@@SAABUQMetaObject@@XZ @ 257 NONAME ; struct QMetaObject const & QTMS::QTMSDTMF::getStaticMetaObject(void) + ?getStaticMetaObject@QTMSMicSource@QTMS@@SAABUQMetaObject@@XZ @ 258 NONAME ; struct QMetaObject const & QTMS::QTMSMicSource::getStaticMetaObject(void) + ?qt_metacall@QTMSRingTone@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 259 NONAME ; int QTMS::QTMSRingTone::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@QTMSClientSource@QTMS@@SA?AVQString@@PBD0H@Z @ 260 NONAME ; class QString QTMS::QTMSClientSource::trUtf8(char const *, char const *, int) + ?qt_metacall@QTMSGlobalGainEffect@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 261 NONAME ; int QTMS::QTMSGlobalGainEffect::qt_metacall(enum QMetaObject::Call, int, void * *) + ?CreateCall@QTMSFactory@QTMS@@QAEHHAAPAVQTMSCall@2@I@Z @ 262 NONAME ; int QTMS::QTMSFactory::CreateCall(int, class QTMS::QTMSCall * &, unsigned int) + ?SetVADMode@QTMSG729Format@QTMS@@QAEHH@Z @ 263 NONAME ; int QTMS::QTMSG729Format::SetVADMode(int) + ?DeleteBuffer@QTMSFactory@QTMS@@QAEHAAPAVQTMSBuffer@2@@Z @ 264 NONAME ; int QTMS::QTMSFactory::DeleteBuffer(class QTMS::QTMSBuffer * &) + ?trUtf8@QTMSG711Format@QTMS@@SA?AVQString@@PBD0@Z @ 265 NONAME ; class QString QTMS::QTMSG711Format::trUtf8(char const *, char const *) + ?qt_metacall@QTMSDTMF@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 266 NONAME ; int QTMS::QTMSDTMF::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QTMSModemSource@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 267 NONAME ; int QTMS::QTMSModemSource::qt_metacall(enum QMetaObject::Call, int, void * *) + ?CreateFactory@QTMSFactory@QTMS@@SAHAAPAV12@AAVQTMSVer@2@@Z @ 268 NONAME ; int QTMS::QTMSFactory::CreateFactory(class QTMS::QTMSFactory * &, class QTMS::QTMSVer &) + ?tr@QTMSClientSource@QTMS@@SA?AVQString@@PBD0H@Z @ 269 NONAME ; class QString QTMS::QTMSClientSource::tr(char const *, char const *, int) + ??1QTMSStream@QTMS@@UAE@XZ @ 270 NONAME ; QTMS::QTMSStream::~QTMSStream(void) + ?Init@QTMSRingTone@QTMS@@QAEHHPAU_GString@@0@Z @ 271 NONAME ; int QTMS::QTMSRingTone::Init(int, struct _GString *, struct _GString *) + ?qt_metacast@QTMSVolumeEffect@QTMS@@UAEPAXPBD@Z @ 272 NONAME ; void * QTMS::QTMSVolumeEffect::qt_metacast(char const *) + ??1QTMSRingTone@QTMS@@UAE@XZ @ 273 NONAME ; QTMS::QTMSRingTone::~QTMSRingTone(void) + ??_EQTMSStream@QTMS@@UAE@I@Z @ 274 NONAME ; QTMS::QTMSStream::~QTMSStream(unsigned int) + ?tr@QTMSSpeakerSink@QTMS@@SA?AVQString@@PBD0@Z @ 275 NONAME ; class QString QTMS::QTMSSpeakerSink::tr(char const *, char const *) + ?RemoveSink@QTMSStream@QTMS@@QAEHPAVQTMSSink@2@@Z @ 276 NONAME ; int QTMS::QTMSStream::RemoveSink(class QTMS::QTMSSink *) + ?trUtf8@QTMSModemSource@QTMS@@SA?AVQString@@PBD0H@Z @ 277 NONAME ; class QString QTMS::QTMSModemSource::trUtf8(char const *, char const *, int) + ?metaObject@QTMSILBCFormat@QTMS@@UBEPBUQMetaObject@@XZ @ 278 NONAME ; struct QMetaObject const * QTMS::QTMSILBCFormat::metaObject(void) const + ?staticMetaObject@QTMSPCMFormat@QTMS@@2UQMetaObject@@B @ 279 NONAME ; struct QMetaObject const QTMS::QTMSPCMFormat::staticMetaObject + ?getStaticMetaObject@QTMSClientSource@QTMS@@SAABUQMetaObject@@XZ @ 280 NONAME ; struct QMetaObject const & QTMS::QTMSClientSource::getStaticMetaObject(void) + ??1QTMSFactory@QTMS@@UAE@XZ @ 281 NONAME ; QTMS::QTMSFactory::~QTMSFactory(void) + ?DeleteSource@QTMSFactory@QTMS@@QAEHAAPAVQTMSSource@2@@Z @ 282 NONAME ; int QTMS::QTMSFactory::DeleteSource(class QTMS::QTMSSource * &) + ?qt_metacall@QTMSGlobalRouting@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 283 NONAME ; int QTMS::QTMSGlobalRouting::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QTMSGlobalGainEffect@QTMS@@IAE@XZ @ 284 NONAME ; QTMS::QTMSGlobalGainEffect::QTMSGlobalGainEffect(void) + ?trUtf8@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0@Z @ 285 NONAME ; class QString QTMS::QTMSPCMFormat::trUtf8(char const *, char const *) + ??0QTMSDTMF@QTMS@@IAE@XZ @ 286 NONAME ; QTMS::QTMSDTMF::QTMSDTMF(void) + ?GetLevel@QTMSGlobalVolEffect@QTMS@@QAEHAAI@Z @ 287 NONAME ; int QTMS::QTMSGlobalVolEffect::GetLevel(unsigned int &) + ?GetType@QTMSGlobalVolEffect@QTMS@@UAEHAAH@Z @ 288 NONAME ; int QTMS::QTMSGlobalVolEffect::GetType(int &) + ?getStaticMetaObject@QTMSILBCFormat@QTMS@@SAABUQMetaObject@@XZ @ 289 NONAME ; struct QMetaObject const & QTMS::QTMSILBCFormat::getStaticMetaObject(void) + ??_EQTMSGlobalGainEffect@QTMS@@UAE@I@Z @ 290 NONAME ; QTMS::QTMSGlobalGainEffect::~QTMSGlobalGainEffect(unsigned int) + ?trUtf8@QTMSGlobalVolEffect@QTMS@@SA?AVQString@@PBD0@Z @ 291 NONAME ; class QString QTMS::QTMSGlobalVolEffect::trUtf8(char const *, char const *) + ?qt_metacast@QTMSGlobalGainEffect@QTMS@@UAEPAXPBD@Z @ 292 NONAME ; void * QTMS::QTMSGlobalGainEffect::qt_metacast(char const *) + ??_EQTMSModemSink@QTMS@@UAE@I@Z @ 293 NONAME ; QTMS::QTMSModemSink::~QTMSModemSink(unsigned int) + ??0QTMSModemSink@QTMS@@IAE@XZ @ 294 NONAME ; QTMS::QTMSModemSink::QTMSModemSink(void) + ?tr@QTMSG711Format@QTMS@@SA?AVQString@@PBD0@Z @ 295 NONAME ; class QString QTMS::QTMSG711Format::tr(char const *, char const *) + ?GetState@QTMSStream@QTMS@@QAEHXZ @ 296 NONAME ; int QTMS::QTMSStream::GetState(void) + ?qt_metacall@QTMSG711Format@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 297 NONAME ; int QTMS::QTMSG711Format::qt_metacall(enum QMetaObject::Call, int, void * *) + ?getStaticMetaObject@QTMSClientSink@QTMS@@SAABUQMetaObject@@XZ @ 298 NONAME ; struct QMetaObject const & QTMS::QTMSClientSink::getStaticMetaObject(void) + ?qt_metacast@QTMSInbandTone@QTMS@@UAEPAXPBD@Z @ 299 NONAME ; void * QTMS::QTMSInbandTone::qt_metacast(char const *) + ?getStaticMetaObject@QTMSModemSource@QTMS@@SAABUQMetaObject@@XZ @ 300 NONAME ; struct QMetaObject const & QTMS::QTMSModemSource::getStaticMetaObject(void) + ?metaObject@QTMSGainEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 301 NONAME ; struct QMetaObject const * QTMS::QTMSGainEffect::metaObject(void) const + ??0QTMSGlobalRouting@QTMS@@IAE@XZ @ 302 NONAME ; QTMS::QTMSGlobalRouting::QTMSGlobalRouting(void) + ?metaObject@QTMSClientSource@QTMS@@UBEPBUQMetaObject@@XZ @ 303 NONAME ; struct QMetaObject const * QTMS::QTMSClientSource::metaObject(void) const + ?qt_metacast@QTMSStream@QTMS@@UAEPAXPBD@Z @ 304 NONAME ; void * QTMS::QTMSStream::qt_metacast(char const *) + ?DeleteSink@QTMSFactory@QTMS@@QAEHAAPAVQTMSSink@2@@Z @ 305 NONAME ; int QTMS::QTMSFactory::DeleteSink(class QTMS::QTMSSink * &) + ?getStaticMetaObject@QTMSModemSink@QTMS@@SAABUQMetaObject@@XZ @ 306 NONAME ; struct QMetaObject const & QTMS::QTMSModemSink::getStaticMetaObject(void) + ?tr@QTMSClientSource@QTMS@@SA?AVQString@@PBD0@Z @ 307 NONAME ; class QString QTMS::QTMSClientSource::tr(char const *, char const *) + ?Mute@QTMSRingTone@QTMS@@QAEHXZ @ 308 NONAME ; int QTMS::QTMSRingTone::Mute(void) + ??_EQTMSDTMF@QTMS@@UAE@I@Z @ 309 NONAME ; QTMS::QTMSDTMF::~QTMSDTMF(unsigned int) + ?qt_metacall@QTMSStream@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 310 NONAME ; int QTMS::QTMSStream::qt_metacall(enum QMetaObject::Call, int, void * *) + ?tr@QTMSDTMF@QTMS@@SA?AVQString@@PBD0H@Z @ 311 NONAME ; class QString QTMS::QTMSDTMF::tr(char const *, char const *, int) + ?qt_metacast@QTMSGainEffect@QTMS@@UAEPAXPBD@Z @ 312 NONAME ; void * QTMS::QTMSGainEffect::qt_metacast(char const *) + ?GetCallContextId@QTMSCall@QTMS@@QAEHAAI@Z @ 313 NONAME ; int QTMS::QTMSCall::GetCallContextId(unsigned int &) + ?GetCallType@QTMSCall@QTMS@@QAEHXZ @ 314 NONAME ; int QTMS::QTMSCall::GetCallType(void) + ?Start@QTMSDTMF@QTMS@@QAEHXZ @ 315 NONAME ; int QTMS::QTMSDTMF::Start(void) + ?trUtf8@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 316 NONAME ; class QString QTMS::QTMSGlobalGainEffect::trUtf8(char const *, char const *) + ?SetOutput@QTMSGlobalRouting@QTMS@@QAEHH@Z @ 317 NONAME ; int QTMS::QTMSGlobalRouting::SetOutput(int) + ??0QTMSClientSink@QTMS@@IAE@XZ @ 318 NONAME ; QTMS::QTMSClientSink::QTMSClientSink(void) + ?SetLevel@QTMSGlobalVolEffect@QTMS@@QAEHI@Z @ 319 NONAME ; int QTMS::QTMSGlobalVolEffect::SetLevel(unsigned int) + ?metaObject@QTMSRingTone@QTMS@@UBEPBUQMetaObject@@XZ @ 320 NONAME ; struct QMetaObject const * QTMS::QTMSRingTone::metaObject(void) const + ?IsCallTypeSupported@QTMSFactory@QTMS@@QAEHHAAH@Z @ 321 NONAME ; int QTMS::QTMSFactory::IsCallTypeSupported(int, int &) + ?qt_metacast@QTMSGlobalVolEffect@QTMS@@UAEPAXPBD@Z @ 322 NONAME ; void * QTMS::QTMSGlobalVolEffect::qt_metacast(char const *) + ?staticMetaObject@QTMSModemSource@QTMS@@2UQMetaObject@@B @ 323 NONAME ; struct QMetaObject const QTMS::QTMSModemSource::staticMetaObject + ?GetStreamId@QTMSStream@QTMS@@QAEHXZ @ 324 NONAME ; int QTMS::QTMSStream::GetStreamId(void) + ??0QTMSG729Format@QTMS@@IAE@XZ @ 325 NONAME ; QTMS::QTMSG729Format::QTMSG729Format(void) + ??_EQTMSGlobalVolEffect@QTMS@@UAE@I@Z @ 326 NONAME ; QTMS::QTMSGlobalVolEffect::~QTMSGlobalVolEffect(unsigned int) + ?getStaticMetaObject@QTMSAMRFormat@QTMS@@SAABUQMetaObject@@XZ @ 327 NONAME ; struct QMetaObject const & QTMS::QTMSAMRFormat::getStaticMetaObject(void) + ?staticMetaObject@QTMSVolumeEffect@QTMS@@2UQMetaObject@@B @ 328 NONAME ; struct QMetaObject const QTMS::QTMSVolumeEffect::staticMetaObject + ??_EQTMSRingTone@QTMS@@UAE@I@Z @ 329 NONAME ; QTMS::QTMSRingTone::~QTMSRingTone(unsigned int) + ??0QTMSFormat@QTMS@@IAE@XZ @ 330 NONAME ; QTMS::QTMSFormat::QTMSFormat(void) + ?GetSupportedFormats@QTMSFactory@QTMS@@QAEHHAAV?$vector@PAVQTMSFormat@QTMS@@V?$allocator@PAVQTMSFormat@QTMS@@@std@@@std@@@Z @ 331 NONAME ; int QTMS::QTMSFactory::GetSupportedFormats(int, class std::vector > &) + ?SetVADMode@QTMSG711Format@QTMS@@QAEHH@Z @ 332 NONAME ; int QTMS::QTMSG711Format::SetVADMode(int) + ?getStaticMetaObject@QTMSVolumeEffect@QTMS@@SAABUQMetaObject@@XZ @ 333 NONAME ; struct QMetaObject const & QTMS::QTMSVolumeEffect::getStaticMetaObject(void) + ?qt_metacall@QTMSModemSink@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 334 NONAME ; int QTMS::QTMSModemSink::qt_metacall(enum QMetaObject::Call, int, void * *) + ?trUtf8@QTMSILBCFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 335 NONAME ; class QString QTMS::QTMSILBCFormat::trUtf8(char const *, char const *, int) + ?trUtf8@QTMSDTMF@QTMS@@SA?AVQString@@PBD0@Z @ 336 NONAME ; class QString QTMS::QTMSDTMF::trUtf8(char const *, char const *) + ?tr@QTMSGlobalGainEffect@QTMS@@SA?AVQString@@PBD0@Z @ 337 NONAME ; class QString QTMS::QTMSGlobalGainEffect::tr(char const *, char const *) + ?AddEffect@QTMSStream@QTMS@@QAEHPAVQTMSEffect@2@@Z @ 338 NONAME ; int QTMS::QTMSStream::AddEffect(class QTMS::QTMSEffect *) + ?ResetFormat@QTMSStream@QTMS@@QAEHPAVQTMSFormat@2@@Z @ 339 NONAME ; int QTMS::QTMSStream::ResetFormat(class QTMS::QTMSFormat *) + ?metaObject@QTMSG711Format@QTMS@@UBEPBUQMetaObject@@XZ @ 340 NONAME ; struct QMetaObject const * QTMS::QTMSG711Format::metaObject(void) const + ??1QTMSVolumeEffect@QTMS@@UAE@XZ @ 341 NONAME ; QTMS::QTMSVolumeEffect::~QTMSVolumeEffect(void) + ?EffectsEvent@QTMSGlobalGainEffect@QTMS@@IAEXABVQTMSEffect@2@UQTMSSignalEvent@2@@Z @ 342 NONAME ; void QTMS::QTMSGlobalGainEffect::EffectsEvent(class QTMS::QTMSEffect const &, struct QTMS::QTMSSignalEvent) + ?GetSupportedBitRates@QTMSFormat@QTMS@@QAEHAAV?$vector@IV?$allocator@I@std@@@std@@@Z @ 343 NONAME ; int QTMS::QTMSFormat::GetSupportedBitRates(class std::vector > &) + ?staticMetaObject@QTMSCall@QTMS@@2UQMetaObject@@B @ 344 NONAME ; struct QMetaObject const QTMS::QTMSCall::staticMetaObject + ??1QTMSModemSource@QTMS@@UAE@XZ @ 345 NONAME ; QTMS::QTMSModemSource::~QTMSModemSource(void) + ??1QTMSClientSink@QTMS@@UAE@XZ @ 346 NONAME ; QTMS::QTMSClientSink::~QTMSClientSink(void) + ?metaObject@QTMSFactory@QTMS@@UBEPBUQMetaObject@@XZ @ 347 NONAME ; struct QMetaObject const * QTMS::QTMSFactory::metaObject(void) const + ?metaObject@QTMSInbandTone@QTMS@@UBEPBUQMetaObject@@XZ @ 348 NONAME ; struct QMetaObject const * QTMS::QTMSInbandTone::metaObject(void) const + ?trUtf8@QTMSGainEffect@QTMS@@SA?AVQString@@PBD0H@Z @ 349 NONAME ; class QString QTMS::QTMSGainEffect::trUtf8(char const *, char const *, int) + ?trUtf8@QTMSMicSource@QTMS@@SA?AVQString@@PBD0H@Z @ 350 NONAME ; class QString QTMS::QTMSMicSource::trUtf8(char const *, char const *, int) + ?GetMaxLevel@QTMSGlobalVolEffect@QTMS@@QAEHAAI@Z @ 351 NONAME ; int QTMS::QTMSGlobalVolEffect::GetMaxLevel(unsigned int &) + ??_EQTMSVolumeEffect@QTMS@@UAE@I@Z @ 352 NONAME ; QTMS::QTMSVolumeEffect::~QTMSVolumeEffect(unsigned int) + ??1QTMSG729Format@QTMS@@UAE@XZ @ 353 NONAME ; QTMS::QTMSG729Format::~QTMSG729Format(void) + ?tr@QTMSVolumeEffect@QTMS@@SA?AVQString@@PBD0@Z @ 354 NONAME ; class QString QTMS::QTMSVolumeEffect::tr(char const *, char const *) + ?GetType@QTMSMicSource@QTMS@@UAEHAAH@Z @ 355 NONAME ; int QTMS::QTMSMicSource::GetType(int &) + ?CreateEffect@QTMSFactory@QTMS@@QAEHHAAPAVQTMSEffect@2@@Z @ 356 NONAME ; int QTMS::QTMSFactory::CreateEffect(int, class QTMS::QTMSEffect * &) + ?getStaticMetaObject@QTMSCall@QTMS@@SAABUQMetaObject@@XZ @ 357 NONAME ; struct QMetaObject const & QTMS::QTMSCall::getStaticMetaObject(void) + ?metaObject@QTMSGlobalGainEffect@QTMS@@UBEPBUQMetaObject@@XZ @ 358 NONAME ; struct QMetaObject const * QTMS::QTMSGlobalGainEffect::metaObject(void) const + ??0QTMSFactory@QTMS@@AAE@XZ @ 359 NONAME ; QTMS::QTMSFactory::QTMSFactory(void) + ?GetOutput@QTMSGlobalRouting@QTMS@@QAEHAAH@Z @ 360 NONAME ; int QTMS::QTMSGlobalRouting::GetOutput(int &) + ?tr@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0@Z @ 361 NONAME ; class QString QTMS::QTMSPCMFormat::tr(char const *, char const *) + ?CreateBuffer@QTMSFactory@QTMS@@QAEHHIAAPAVQTMSBuffer@2@@Z @ 362 NONAME ; int QTMS::QTMSFactory::CreateBuffer(int, unsigned int, class QTMS::QTMSBuffer * &) + ?trUtf8@QTMSPCMFormat@QTMS@@SA?AVQString@@PBD0H@Z @ 363 NONAME ; class QString QTMS::QTMSPCMFormat::trUtf8(char const *, char const *, int) + ?qt_metacast@QTMSMicSource@QTMS@@UAEPAXPBD@Z @ 364 NONAME ; void * QTMS::QTMSMicSource::qt_metacast(char const *) + ??0QTMSRingTone@QTMS@@IAE@XZ @ 365 NONAME ; QTMS::QTMSRingTone::QTMSRingTone(void) + ?trUtf8@QTMSG729Format@QTMS@@SA?AVQString@@PBD0@Z @ 366 NONAME ; class QString QTMS::QTMSG729Format::trUtf8(char const *, char const *) + ?BufferProcessed@QTMSClientSink@QTMS@@QAEHPAVTMSBuffer@TMS@@@Z @ 367 NONAME ; int QTMS::QTMSClientSink::BufferProcessed(class TMS::TMSBuffer *) + ?trUtf8@QTMSRingTone@QTMS@@SA?AVQString@@PBD0H@Z @ 368 NONAME ; class QString QTMS::QTMSRingTone::trUtf8(char const *, char const *, int) + ?ProcessBuffer@QTMSClientSink@QTMS@@IAEXPBVTMSBuffer@TMS@@@Z @ 369 NONAME ; void QTMS::QTMSClientSink::ProcessBuffer(class TMS::TMSBuffer const *) + ?qt_metacall@QTMSAMRFormat@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 370 NONAME ; int QTMS::QTMSAMRFormat::qt_metacall(enum QMetaObject::Call, int, void * *) + ??0QTMSInbandTone@QTMS@@IAE@XZ @ 371 NONAME ; QTMS::QTMSInbandTone::QTMSInbandTone(void) + ?RemoveEffect@QTMSStream@QTMS@@QAEHPAVQTMSEffect@2@@Z @ 372 NONAME ; int QTMS::QTMSStream::RemoveEffect(class QTMS::QTMSEffect *) + ?SetBitRate@QTMSFormat@QTMS@@QAEHI@Z @ 373 NONAME ; int QTMS::QTMSFormat::SetBitRate(unsigned int) + ?Stop@QTMSStream@QTMS@@QAEHXZ @ 374 NONAME ; int QTMS::QTMSStream::Stop(void) + ?trUtf8@QTMSCall@QTMS@@SA?AVQString@@PBD0H@Z @ 375 NONAME ; class QString QTMS::QTMSCall::trUtf8(char const *, char const *, int) + ??_EQTMSILBCFormat@QTMS@@UAE@I@Z @ 376 NONAME ; QTMS::QTMSILBCFormat::~QTMSILBCFormat(unsigned int) + ?qt_metacall@QTMSFactory@QTMS@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 377 NONAME ; int QTMS::QTMSFactory::qt_metacall(enum QMetaObject::Call, int, void * *) + ?staticMetaObject@QTMSStream@QTMS@@2UQMetaObject@@B @ 378 NONAME ; struct QMetaObject const QTMS::QTMSStream::staticMetaObject + ??0QTMSPCMFormat@QTMS@@IAE@XZ @ 379 NONAME ; QTMS::QTMSPCMFormat::QTMSPCMFormat(void) + ?tr@QTMSMicSource@QTMS@@SA?AVQString@@PBD0H@Z @ 380 NONAME ; class QString QTMS::QTMSMicSource::tr(char const *, char const *, int) + ?SetLevel@QTMSGainEffect@QTMS@@QAEHI@Z @ 381 NONAME ; int QTMS::QTMSGainEffect::SetLevel(unsigned int) + ?FillBuffer@QTMSClientSource@QTMS@@IAEXAAVTMSBuffer@TMS@@@Z @ 382 NONAME ; void QTMS::QTMSClientSource::FillBuffer(class TMS::TMSBuffer &) + ?Pause@QTMSStream@QTMS@@QAEHXZ @ 383 NONAME ; int QTMS::QTMSStream::Pause(void) + ?Deinit@QTMSStream@QTMS@@QAEXXZ @ 384 NONAME ; void QTMS::QTMSStream::Deinit(void) + ?metaObject@QTMSDTMF@QTMS@@UBEPBUQMetaObject@@XZ @ 385 NONAME ; struct QMetaObject const * QTMS::QTMSDTMF::metaObject(void) const + ?GetMaxLevel@QTMSGainEffect@QTMS@@QAEHAAI@Z @ 386 NONAME ; int QTMS::QTMSGainEffect::GetMaxLevel(unsigned int &) + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/data/create_qtms_stub_sis.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/data/create_qtms_stub_sis.bat Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,17 @@ +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: PKG for QT Telephony Media Services (QTMS) +rem + +makesis -s qtmsapi_stub.pkg qtmsapi_stub.sis diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/data/qtmsapi_stub.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/data/qtmsapi_stub.pkg Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,29 @@ +; +; 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: QT Telephony Multimedia Services (QTMS) +; +;File: qtms_stub.pkg + +;Languages +&EN + +;Header +#{"QTMS"},(0x10207CB3),1,0,0, TYPE=SA + +;Localised Vendor name +%{"Nokia"} + +;Unique Vendor name +:"Nokia" + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/data/qtmsapi_stub.sis Binary file qtms/data/qtmsapi_stub.sis has changed diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/eabi/qtmsu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/eabi/qtmsu.def Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,412 @@ +EXPORTS + _ZN4QTMS10QTMSFormat10GetBitRateERj @ 1 NONAME + _ZN4QTMS10QTMSFormat10SetBitRateEj @ 2 NONAME + _ZN4QTMS10QTMSFormat20GetSupportedBitRatesERSt6vectorIjSaIjEE @ 3 NONAME + _ZN4QTMS10QTMSFormat7GetTypeERi @ 4 NONAME + _ZN4QTMS10QTMSFormatC1Ev @ 5 NONAME + _ZN4QTMS10QTMSFormatC2Ev @ 6 NONAME + _ZN4QTMS10QTMSFormatD0Ev @ 7 NONAME + _ZN4QTMS10QTMSFormatD1Ev @ 8 NONAME + _ZN4QTMS10QTMSFormatD2Ev @ 9 NONAME + _ZN4QTMS10QTMSStream10RemoveSinkEPNS_8QTMSSinkE @ 10 NONAME + _ZN4QTMS10QTMSStream11GetStreamIdEv @ 11 NONAME + _ZN4QTMS10QTMSStream11ResetFormatEPNS_10QTMSFormatE @ 12 NONAME + _ZN4QTMS10QTMSStream11qt_metacallEN11QMetaObject4CallEiPPv @ 13 NONAME + _ZN4QTMS10QTMSStream11qt_metacastEPKc @ 14 NONAME + _ZN4QTMS10QTMSStream12RemoveEffectEPNS_10QTMSEffectE @ 15 NONAME + _ZN4QTMS10QTMSStream12RemoveSourceEPNS_10QTMSSourceE @ 16 NONAME + _ZN4QTMS10QTMSStream13GetStreamTypeEv @ 17 NONAME + _ZN4QTMS10QTMSStream14TMSStreamEventERKS0_NS_15QTMSSignalEventE @ 18 NONAME + _ZN4QTMS10QTMSStream16staticMetaObjectE @ 19 NONAME DATA 16 + _ZN4QTMS10QTMSStream19getStaticMetaObjectEv @ 20 NONAME + _ZN4QTMS10QTMSStream4InitEv @ 21 NONAME + _ZN4QTMS10QTMSStream4StopEv @ 22 NONAME + _ZN4QTMS10QTMSStream5PauseEv @ 23 NONAME + _ZN4QTMS10QTMSStream5StartEv @ 24 NONAME + _ZN4QTMS10QTMSStream6DeinitEv @ 25 NONAME + _ZN4QTMS10QTMSStream7AddSinkEPNS_8QTMSSinkE @ 26 NONAME + _ZN4QTMS10QTMSStream8GetStateEv @ 27 NONAME + _ZN4QTMS10QTMSStream9AddEffectEPNS_10QTMSEffectE @ 28 NONAME + _ZN4QTMS10QTMSStream9AddSourceEPNS_10QTMSSourceE @ 29 NONAME + _ZN4QTMS10QTMSStream9SetFormatEPNS_10QTMSFormatE @ 30 NONAME + _ZN4QTMS10QTMSStreamC1Ev @ 31 NONAME + _ZN4QTMS10QTMSStreamC2Ev @ 32 NONAME + _ZN4QTMS10QTMSStreamD0Ev @ 33 NONAME + _ZN4QTMS10QTMSStreamD1Ev @ 34 NONAME + _ZN4QTMS10QTMSStreamD2Ev @ 35 NONAME + _ZN4QTMS11QTMSFactory10CreateCallEiRPNS_8QTMSCallEj @ 36 NONAME + _ZN4QTMS11QTMSFactory10CreateDTMFEiRPNS_8QTMSDTMFE @ 37 NONAME + _ZN4QTMS11QTMSFactory10CreateSinkEiRPNS_8QTMSSinkE @ 38 NONAME + _ZN4QTMS11QTMSFactory10DeleteCallERPNS_8QTMSCallE @ 39 NONAME + _ZN4QTMS11QTMSFactory10DeleteDTMFERPNS_8QTMSDTMFE @ 40 NONAME + _ZN4QTMS11QTMSFactory10DeleteSinkERPNS_8QTMSSinkE @ 41 NONAME + _ZN4QTMS11QTMSFactory11qt_metacallEN11QMetaObject4CallEiPPv @ 42 NONAME + _ZN4QTMS11QTMSFactory11qt_metacastEPKc @ 43 NONAME + _ZN4QTMS11QTMSFactory12CreateBufferEijRPNS_10QTMSBufferE @ 44 NONAME + _ZN4QTMS11QTMSFactory12CreateEffectEiRPNS_10QTMSEffectE @ 45 NONAME + _ZN4QTMS11QTMSFactory12CreateFormatEiRPNS_10QTMSFormatE @ 46 NONAME + _ZN4QTMS11QTMSFactory12CreateSourceEiRPNS_10QTMSSourceE @ 47 NONAME + _ZN4QTMS11QTMSFactory12DeleteBufferERPNS_10QTMSBufferE @ 48 NONAME + _ZN4QTMS11QTMSFactory12DeleteEffectERPNS_10QTMSEffectE @ 49 NONAME + _ZN4QTMS11QTMSFactory12DeleteFormatERPNS_10QTMSFormatE @ 50 NONAME + _ZN4QTMS11QTMSFactory12DeleteSourceERPNS_10QTMSSourceE @ 51 NONAME + _ZN4QTMS11QTMSFactory13CreateFactoryERPS0_RNS_7QTMSVerE @ 52 NONAME + _ZN4QTMS11QTMSFactory16staticMetaObjectE @ 53 NONAME DATA 16 + _ZN4QTMS11QTMSFactory19CreateGlobalRoutingERPNS_17QTMSGlobalRoutingE @ 54 NONAME + _ZN4QTMS11QTMSFactory19DeleteGlobalRoutingERPNS_17QTMSGlobalRoutingE @ 55 NONAME + _ZN4QTMS11QTMSFactory19GetSupportedFormatsEiRSt6vectorIPNS_10QTMSFormatESaIS3_EE @ 56 NONAME + _ZN4QTMS11QTMSFactory19IsCallTypeSupportedEiRi @ 57 NONAME + _ZN4QTMS11QTMSFactory19getStaticMetaObjectEv @ 58 NONAME + _ZN4QTMS11QTMSFactory20CreateRingTonePlayerERPNS_12QTMSRingToneE @ 59 NONAME + _ZN4QTMS11QTMSFactory20DeleteRingTonePlayerERPNS_12QTMSRingToneE @ 60 NONAME + _ZN4QTMS11QTMSFactory22CreateInbandTonePlayerERPNS_14QTMSInbandToneE @ 61 NONAME + _ZN4QTMS11QTMSFactory22DeleteInbandTonePlayerERPNS_14QTMSInbandToneE @ 62 NONAME + _ZN4QTMS11QTMSFactoryC1Ev @ 63 NONAME + _ZN4QTMS11QTMSFactoryC2Ev @ 64 NONAME + _ZN4QTMS11QTMSFactoryD0Ev @ 65 NONAME + _ZN4QTMS11QTMSFactoryD1Ev @ 66 NONAME + _ZN4QTMS11QTMSFactoryD2Ev @ 67 NONAME + _ZN4QTMS12QTMSRingTone11qt_metacallEN11QMetaObject4CallEiPPv @ 68 NONAME + _ZN4QTMS12QTMSRingTone11qt_metacastEPKc @ 69 NONAME + _ZN4QTMS12QTMSRingTone13RingtoneEventERKS0_NS_15QTMSSignalEventE @ 70 NONAME + _ZN4QTMS12QTMSRingTone16staticMetaObjectE @ 71 NONAME DATA 16 + _ZN4QTMS12QTMSRingTone19getStaticMetaObjectEv @ 72 NONAME + _ZN4QTMS12QTMSRingTone4InitEiP8_GStringS2_ @ 73 NONAME + _ZN4QTMS12QTMSRingTone4MuteEv @ 74 NONAME + _ZN4QTMS12QTMSRingTone4PlayEv @ 75 NONAME + _ZN4QTMS12QTMSRingTone4StopEv @ 76 NONAME + _ZN4QTMS12QTMSRingTone5PauseEv @ 77 NONAME + _ZN4QTMS12QTMSRingTone6DeinitEv @ 78 NONAME + _ZN4QTMS12QTMSRingToneC1Ev @ 79 NONAME + _ZN4QTMS12QTMSRingToneC2Ev @ 80 NONAME + _ZN4QTMS12QTMSRingToneD0Ev @ 81 NONAME + _ZN4QTMS12QTMSRingToneD1Ev @ 82 NONAME + _ZN4QTMS12QTMSRingToneD2Ev @ 83 NONAME + _ZN4QTMS13QTMSAMRFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 84 NONAME + _ZN4QTMS13QTMSAMRFormat11qt_metacastEPKc @ 85 NONAME + _ZN4QTMS13QTMSAMRFormat16staticMetaObjectE @ 86 NONAME DATA 16 + _ZN4QTMS13QTMSAMRFormat19getStaticMetaObjectEv @ 87 NONAME + _ZN4QTMS13QTMSAMRFormatC1Ev @ 88 NONAME + _ZN4QTMS13QTMSAMRFormatC2Ev @ 89 NONAME + _ZN4QTMS13QTMSAMRFormatD0Ev @ 90 NONAME + _ZN4QTMS13QTMSAMRFormatD1Ev @ 91 NONAME + _ZN4QTMS13QTMSAMRFormatD2Ev @ 92 NONAME + _ZN4QTMS13QTMSMicSource11qt_metacallEN11QMetaObject4CallEiPPv @ 93 NONAME + _ZN4QTMS13QTMSMicSource11qt_metacastEPKc @ 94 NONAME + _ZN4QTMS13QTMSMicSource16staticMetaObjectE @ 95 NONAME DATA 16 + _ZN4QTMS13QTMSMicSource19getStaticMetaObjectEv @ 96 NONAME + _ZN4QTMS13QTMSMicSource7GetTypeERi @ 97 NONAME + _ZN4QTMS13QTMSMicSourceC1Ev @ 98 NONAME + _ZN4QTMS13QTMSMicSourceC2Ev @ 99 NONAME + _ZN4QTMS13QTMSMicSourceD0Ev @ 100 NONAME + _ZN4QTMS13QTMSMicSourceD1Ev @ 101 NONAME + _ZN4QTMS13QTMSMicSourceD2Ev @ 102 NONAME + _ZN4QTMS13QTMSModemSink11qt_metacallEN11QMetaObject4CallEiPPv @ 103 NONAME + _ZN4QTMS13QTMSModemSink11qt_metacastEPKc @ 104 NONAME + _ZN4QTMS13QTMSModemSink16staticMetaObjectE @ 105 NONAME DATA 16 + _ZN4QTMS13QTMSModemSink19getStaticMetaObjectEv @ 106 NONAME + _ZN4QTMS13QTMSModemSink7GetTypeERi @ 107 NONAME + _ZN4QTMS13QTMSModemSinkC1Ev @ 108 NONAME + _ZN4QTMS13QTMSModemSinkC2Ev @ 109 NONAME + _ZN4QTMS13QTMSModemSinkD0Ev @ 110 NONAME + _ZN4QTMS13QTMSModemSinkD1Ev @ 111 NONAME + _ZN4QTMS13QTMSModemSinkD2Ev @ 112 NONAME + _ZN4QTMS13QTMSPCMFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 113 NONAME + _ZN4QTMS13QTMSPCMFormat11qt_metacastEPKc @ 114 NONAME + _ZN4QTMS13QTMSPCMFormat16staticMetaObjectE @ 115 NONAME DATA 16 + _ZN4QTMS13QTMSPCMFormat19getStaticMetaObjectEv @ 116 NONAME + _ZN4QTMS13QTMSPCMFormatC1Ev @ 117 NONAME + _ZN4QTMS13QTMSPCMFormatC2Ev @ 118 NONAME + _ZN4QTMS13QTMSPCMFormatD0Ev @ 119 NONAME + _ZN4QTMS13QTMSPCMFormatD1Ev @ 120 NONAME + _ZN4QTMS13QTMSPCMFormatD2Ev @ 121 NONAME + _ZN4QTMS14QTMSClientSink11qt_metacallEN11QMetaObject4CallEiPPv @ 122 NONAME + _ZN4QTMS14QTMSClientSink11qt_metacastEPKc @ 123 NONAME + _ZN4QTMS14QTMSClientSink13ProcessBufferEPKN3TMS9TMSBufferE @ 124 NONAME + _ZN4QTMS14QTMSClientSink15BufferProcessedEPN3TMS9TMSBufferE @ 125 NONAME + _ZN4QTMS14QTMSClientSink16staticMetaObjectE @ 126 NONAME DATA 16 + _ZN4QTMS14QTMSClientSink19getStaticMetaObjectEv @ 127 NONAME + _ZN4QTMS14QTMSClientSink7GetTypeERi @ 128 NONAME + _ZN4QTMS14QTMSClientSinkC1Ev @ 129 NONAME + _ZN4QTMS14QTMSClientSinkC2Ev @ 130 NONAME + _ZN4QTMS14QTMSClientSinkD0Ev @ 131 NONAME + _ZN4QTMS14QTMSClientSinkD1Ev @ 132 NONAME + _ZN4QTMS14QTMSClientSinkD2Ev @ 133 NONAME + _ZN4QTMS14QTMSG711Format10GetVADModeERi @ 134 NONAME + _ZN4QTMS14QTMSG711Format10SetVADModeEi @ 135 NONAME + _ZN4QTMS14QTMSG711Format11qt_metacallEN11QMetaObject4CallEiPPv @ 136 NONAME + _ZN4QTMS14QTMSG711Format11qt_metacastEPKc @ 137 NONAME + _ZN4QTMS14QTMSG711Format16staticMetaObjectE @ 138 NONAME DATA 16 + _ZN4QTMS14QTMSG711Format19getStaticMetaObjectEv @ 139 NONAME + _ZN4QTMS14QTMSG711Format6GetCNGERi @ 140 NONAME + _ZN4QTMS14QTMSG711Format6GetPlcERi @ 141 NONAME + _ZN4QTMS14QTMSG711Format6SetCNGEi @ 142 NONAME + _ZN4QTMS14QTMSG711Format6SetPlcEi @ 143 NONAME + _ZN4QTMS14QTMSG711Format7GetModeERi @ 144 NONAME + _ZN4QTMS14QTMSG711Format7SetModeEi @ 145 NONAME + _ZN4QTMS14QTMSG711FormatC1Ev @ 146 NONAME + _ZN4QTMS14QTMSG711FormatC2Ev @ 147 NONAME + _ZN4QTMS14QTMSG711FormatD0Ev @ 148 NONAME + _ZN4QTMS14QTMSG711FormatD1Ev @ 149 NONAME + _ZN4QTMS14QTMSG711FormatD2Ev @ 150 NONAME + _ZN4QTMS14QTMSG729Format10GetVADModeERi @ 151 NONAME + _ZN4QTMS14QTMSG729Format10SetVADModeEi @ 152 NONAME + _ZN4QTMS14QTMSG729Format11qt_metacallEN11QMetaObject4CallEiPPv @ 153 NONAME + _ZN4QTMS14QTMSG729Format11qt_metacastEPKc @ 154 NONAME + _ZN4QTMS14QTMSG729Format16staticMetaObjectE @ 155 NONAME DATA 16 + _ZN4QTMS14QTMSG729Format19getStaticMetaObjectEv @ 156 NONAME + _ZN4QTMS14QTMSG729FormatC1Ev @ 157 NONAME + _ZN4QTMS14QTMSG729FormatC2Ev @ 158 NONAME + _ZN4QTMS14QTMSG729FormatD0Ev @ 159 NONAME + _ZN4QTMS14QTMSG729FormatD1Ev @ 160 NONAME + _ZN4QTMS14QTMSG729FormatD2Ev @ 161 NONAME + _ZN4QTMS14QTMSGainEffect11GetMaxLevelERj @ 162 NONAME + _ZN4QTMS14QTMSGainEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 163 NONAME + _ZN4QTMS14QTMSGainEffect11qt_metacastEPKc @ 164 NONAME + _ZN4QTMS14QTMSGainEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 165 NONAME + _ZN4QTMS14QTMSGainEffect16staticMetaObjectE @ 166 NONAME DATA 16 + _ZN4QTMS14QTMSGainEffect19getStaticMetaObjectEv @ 167 NONAME + _ZN4QTMS14QTMSGainEffect7GetTypeERi @ 168 NONAME + _ZN4QTMS14QTMSGainEffect8GetLevelERj @ 169 NONAME + _ZN4QTMS14QTMSGainEffect8SetLevelEj @ 170 NONAME + _ZN4QTMS14QTMSGainEffectC1Ev @ 171 NONAME + _ZN4QTMS14QTMSGainEffectC2Ev @ 172 NONAME + _ZN4QTMS14QTMSGainEffectD0Ev @ 173 NONAME + _ZN4QTMS14QTMSGainEffectD1Ev @ 174 NONAME + _ZN4QTMS14QTMSGainEffectD2Ev @ 175 NONAME + _ZN4QTMS14QTMSILBCFormat10GetVADModeERi @ 176 NONAME + _ZN4QTMS14QTMSILBCFormat10SetVADModeEi @ 177 NONAME + _ZN4QTMS14QTMSILBCFormat11qt_metacallEN11QMetaObject4CallEiPPv @ 178 NONAME + _ZN4QTMS14QTMSILBCFormat11qt_metacastEPKc @ 179 NONAME + _ZN4QTMS14QTMSILBCFormat16staticMetaObjectE @ 180 NONAME DATA 16 + _ZN4QTMS14QTMSILBCFormat19getStaticMetaObjectEv @ 181 NONAME + _ZN4QTMS14QTMSILBCFormat6GetCNGERi @ 182 NONAME + _ZN4QTMS14QTMSILBCFormat6SetCNGEi @ 183 NONAME + _ZN4QTMS14QTMSILBCFormat7GetModeERi @ 184 NONAME + _ZN4QTMS14QTMSILBCFormat7SetModeEi @ 185 NONAME + _ZN4QTMS14QTMSILBCFormatC1Ev @ 186 NONAME + _ZN4QTMS14QTMSILBCFormatC2Ev @ 187 NONAME + _ZN4QTMS14QTMSILBCFormatD0Ev @ 188 NONAME + _ZN4QTMS14QTMSILBCFormatD1Ev @ 189 NONAME + _ZN4QTMS14QTMSILBCFormatD2Ev @ 190 NONAME + _ZN4QTMS14QTMSInbandTone11qt_metacallEN11QMetaObject4CallEiPPv @ 191 NONAME + _ZN4QTMS14QTMSInbandTone11qt_metacastEPKc @ 192 NONAME + _ZN4QTMS14QTMSInbandTone15InbandToneEventERKS0_NS_15QTMSSignalEventE @ 193 NONAME + _ZN4QTMS14QTMSInbandTone16staticMetaObjectE @ 194 NONAME DATA 16 + _ZN4QTMS14QTMSInbandTone19getStaticMetaObjectEv @ 195 NONAME + _ZN4QTMS14QTMSInbandTone4StopEv @ 196 NONAME + _ZN4QTMS14QTMSInbandTone5StartEi @ 197 NONAME + _ZN4QTMS14QTMSInbandToneC1Ev @ 198 NONAME + _ZN4QTMS14QTMSInbandToneC2Ev @ 199 NONAME + _ZN4QTMS14QTMSInbandToneD0Ev @ 200 NONAME + _ZN4QTMS14QTMSInbandToneD1Ev @ 201 NONAME + _ZN4QTMS14QTMSInbandToneD2Ev @ 202 NONAME + _ZN4QTMS15QTMSModemSource11qt_metacallEN11QMetaObject4CallEiPPv @ 203 NONAME + _ZN4QTMS15QTMSModemSource11qt_metacastEPKc @ 204 NONAME + _ZN4QTMS15QTMSModemSource16staticMetaObjectE @ 205 NONAME DATA 16 + _ZN4QTMS15QTMSModemSource19getStaticMetaObjectEv @ 206 NONAME + _ZN4QTMS15QTMSModemSource7GetTypeERi @ 207 NONAME + _ZN4QTMS15QTMSModemSourceC1Ev @ 208 NONAME + _ZN4QTMS15QTMSModemSourceC2Ev @ 209 NONAME + _ZN4QTMS15QTMSModemSourceD0Ev @ 210 NONAME + _ZN4QTMS15QTMSModemSourceD1Ev @ 211 NONAME + _ZN4QTMS15QTMSModemSourceD2Ev @ 212 NONAME + _ZN4QTMS15QTMSSpeakerSink11qt_metacallEN11QMetaObject4CallEiPPv @ 213 NONAME + _ZN4QTMS15QTMSSpeakerSink11qt_metacastEPKc @ 214 NONAME + _ZN4QTMS15QTMSSpeakerSink16staticMetaObjectE @ 215 NONAME DATA 16 + _ZN4QTMS15QTMSSpeakerSink19getStaticMetaObjectEv @ 216 NONAME + _ZN4QTMS15QTMSSpeakerSink7GetTypeERi @ 217 NONAME + _ZN4QTMS15QTMSSpeakerSinkC1Ev @ 218 NONAME + _ZN4QTMS15QTMSSpeakerSinkC2Ev @ 219 NONAME + _ZN4QTMS15QTMSSpeakerSinkD0Ev @ 220 NONAME + _ZN4QTMS15QTMSSpeakerSinkD1Ev @ 221 NONAME + _ZN4QTMS15QTMSSpeakerSinkD2Ev @ 222 NONAME + _ZN4QTMS16QTMSClientSource10FillBufferERN3TMS9TMSBufferE @ 223 NONAME + _ZN4QTMS16QTMSClientSource11qt_metacallEN11QMetaObject4CallEiPPv @ 224 NONAME + _ZN4QTMS16QTMSClientSource11qt_metacastEPKc @ 225 NONAME + _ZN4QTMS16QTMSClientSource12BufferFilledERN3TMS9TMSBufferE @ 226 NONAME + _ZN4QTMS16QTMSClientSource13ProcessBufferEPN3TMS9TMSBufferE @ 227 NONAME + _ZN4QTMS16QTMSClientSource14GetEnqueueModeERi @ 228 NONAME + _ZN4QTMS16QTMSClientSource14SetEnqueueModeEi @ 229 NONAME + _ZN4QTMS16QTMSClientSource15BufferProcessedEPKN3TMS9TMSBufferEi @ 230 NONAME + _ZN4QTMS16QTMSClientSource16staticMetaObjectE @ 231 NONAME DATA 16 + _ZN4QTMS16QTMSClientSource19getStaticMetaObjectEv @ 232 NONAME + _ZN4QTMS16QTMSClientSource5FlushEv @ 233 NONAME + _ZN4QTMS16QTMSClientSource7GetTypeERi @ 234 NONAME + _ZN4QTMS16QTMSClientSourceC1Ev @ 235 NONAME + _ZN4QTMS16QTMSClientSourceC2Ev @ 236 NONAME + _ZN4QTMS16QTMSClientSourceD0Ev @ 237 NONAME + _ZN4QTMS16QTMSClientSourceD1Ev @ 238 NONAME + _ZN4QTMS16QTMSClientSourceD2Ev @ 239 NONAME + _ZN4QTMS16QTMSVolumeEffect11GetMaxLevelERj @ 240 NONAME + _ZN4QTMS16QTMSVolumeEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 241 NONAME + _ZN4QTMS16QTMSVolumeEffect11qt_metacastEPKc @ 242 NONAME + _ZN4QTMS16QTMSVolumeEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 243 NONAME + _ZN4QTMS16QTMSVolumeEffect16staticMetaObjectE @ 244 NONAME DATA 16 + _ZN4QTMS16QTMSVolumeEffect19getStaticMetaObjectEv @ 245 NONAME + _ZN4QTMS16QTMSVolumeEffect7GetTypeERi @ 246 NONAME + _ZN4QTMS16QTMSVolumeEffect8GetLevelERj @ 247 NONAME + _ZN4QTMS16QTMSVolumeEffect8SetLevelEj @ 248 NONAME + _ZN4QTMS16QTMSVolumeEffectC1Ev @ 249 NONAME + _ZN4QTMS16QTMSVolumeEffectC2Ev @ 250 NONAME + _ZN4QTMS16QTMSVolumeEffectD0Ev @ 251 NONAME + _ZN4QTMS16QTMSVolumeEffectD1Ev @ 252 NONAME + _ZN4QTMS16QTMSVolumeEffectD2Ev @ 253 NONAME + _ZN4QTMS17QTMSGlobalRouting11qt_metacallEN11QMetaObject4CallEiPPv @ 254 NONAME + _ZN4QTMS17QTMSGlobalRouting11qt_metacastEPKc @ 255 NONAME + _ZN4QTMS17QTMSGlobalRouting16staticMetaObjectE @ 256 NONAME DATA 16 + _ZN4QTMS17QTMSGlobalRouting17GetPreviousOutputERi @ 257 NONAME + _ZN4QTMS17QTMSGlobalRouting18GlobalRoutingEventERKS0_NS_15QTMSSignalEventEi @ 258 NONAME + _ZN4QTMS17QTMSGlobalRouting19GetAvailableOutputsERSt6vectorIjSaIjEE @ 259 NONAME + _ZN4QTMS17QTMSGlobalRouting19getStaticMetaObjectEv @ 260 NONAME + _ZN4QTMS17QTMSGlobalRouting9GetOutputERi @ 261 NONAME + _ZN4QTMS17QTMSGlobalRouting9SetOutputEi @ 262 NONAME + _ZN4QTMS17QTMSGlobalRoutingC1Ev @ 263 NONAME + _ZN4QTMS17QTMSGlobalRoutingC2Ev @ 264 NONAME + _ZN4QTMS17QTMSGlobalRoutingD0Ev @ 265 NONAME + _ZN4QTMS17QTMSGlobalRoutingD1Ev @ 266 NONAME + _ZN4QTMS17QTMSGlobalRoutingD2Ev @ 267 NONAME + _ZN4QTMS19QTMSGlobalVolEffect11GetMaxLevelERj @ 268 NONAME + _ZN4QTMS19QTMSGlobalVolEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 269 NONAME + _ZN4QTMS19QTMSGlobalVolEffect11qt_metacastEPKc @ 270 NONAME + _ZN4QTMS19QTMSGlobalVolEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 271 NONAME + _ZN4QTMS19QTMSGlobalVolEffect16staticMetaObjectE @ 272 NONAME DATA 16 + _ZN4QTMS19QTMSGlobalVolEffect19getStaticMetaObjectEv @ 273 NONAME + _ZN4QTMS19QTMSGlobalVolEffect7GetTypeERi @ 274 NONAME + _ZN4QTMS19QTMSGlobalVolEffect8GetLevelERj @ 275 NONAME + _ZN4QTMS19QTMSGlobalVolEffect8SetLevelEj @ 276 NONAME + _ZN4QTMS19QTMSGlobalVolEffectC1Ev @ 277 NONAME + _ZN4QTMS19QTMSGlobalVolEffectC2Ev @ 278 NONAME + _ZN4QTMS19QTMSGlobalVolEffectD0Ev @ 279 NONAME + _ZN4QTMS19QTMSGlobalVolEffectD1Ev @ 280 NONAME + _ZN4QTMS19QTMSGlobalVolEffectD2Ev @ 281 NONAME + _ZN4QTMS20QTMSGlobalGainEffect11GetMaxLevelERj @ 282 NONAME + _ZN4QTMS20QTMSGlobalGainEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 283 NONAME + _ZN4QTMS20QTMSGlobalGainEffect11qt_metacastEPKc @ 284 NONAME + _ZN4QTMS20QTMSGlobalGainEffect12EffectsEventERKNS_10QTMSEffectENS_15QTMSSignalEventE @ 285 NONAME + _ZN4QTMS20QTMSGlobalGainEffect16staticMetaObjectE @ 286 NONAME DATA 16 + _ZN4QTMS20QTMSGlobalGainEffect19getStaticMetaObjectEv @ 287 NONAME + _ZN4QTMS20QTMSGlobalGainEffect7GetTypeERi @ 288 NONAME + _ZN4QTMS20QTMSGlobalGainEffect8GetLevelERj @ 289 NONAME + _ZN4QTMS20QTMSGlobalGainEffect8SetLevelEj @ 290 NONAME + _ZN4QTMS20QTMSGlobalGainEffectC1Ev @ 291 NONAME + _ZN4QTMS20QTMSGlobalGainEffectC2Ev @ 292 NONAME + _ZN4QTMS20QTMSGlobalGainEffectD0Ev @ 293 NONAME + _ZN4QTMS20QTMSGlobalGainEffectD1Ev @ 294 NONAME + _ZN4QTMS20QTMSGlobalGainEffectD2Ev @ 295 NONAME + _ZN4QTMS8QTMSCall11GetCallTypeEv @ 296 NONAME + _ZN4QTMS8QTMSCall11qt_metacallEN11QMetaObject4CallEiPPv @ 297 NONAME + _ZN4QTMS8QTMSCall11qt_metacastEPKc @ 298 NONAME + _ZN4QTMS8QTMSCall12CreateStreamEiRPNS_10QTMSStreamE @ 299 NONAME + _ZN4QTMS8QTMSCall12DeleteStreamERPNS_10QTMSStreamE @ 300 NONAME + _ZN4QTMS8QTMSCall16GetCallContextIdERj @ 301 NONAME + _ZN4QTMS8QTMSCall16staticMetaObjectE @ 302 NONAME DATA 16 + _ZN4QTMS8QTMSCall19getStaticMetaObjectEv @ 303 NONAME + _ZN4QTMS8QTMSCallC1Ev @ 304 NONAME + _ZN4QTMS8QTMSCallC2Ev @ 305 NONAME + _ZN4QTMS8QTMSCallD0Ev @ 306 NONAME + _ZN4QTMS8QTMSCallD1Ev @ 307 NONAME + _ZN4QTMS8QTMSCallD2Ev @ 308 NONAME + _ZN4QTMS8QTMSDTMF11qt_metacallEN11QMetaObject4CallEiPPv @ 309 NONAME + _ZN4QTMS8QTMSDTMF11qt_metacastEPKc @ 310 NONAME + _ZN4QTMS8QTMSDTMF16staticMetaObjectE @ 311 NONAME DATA 16 + _ZN4QTMS8QTMSDTMF19getStaticMetaObjectEv @ 312 NONAME + _ZN4QTMS8QTMSDTMF25ContinueDTMFStringSendingEi @ 313 NONAME + _ZN4QTMS8QTMSDTMF4StopEv @ 314 NONAME + _ZN4QTMS8QTMSDTMF5StartEv @ 315 NONAME + _ZN4QTMS8QTMSDTMF7SetToneEP8_GString @ 316 NONAME + _ZN4QTMS8QTMSDTMF9DTMFEventERKS0_NS_15QTMSSignalEventE @ 317 NONAME + _ZN4QTMS8QTMSDTMFC1Ev @ 318 NONAME + _ZN4QTMS8QTMSDTMFC2Ev @ 319 NONAME + _ZN4QTMS8QTMSDTMFD0Ev @ 320 NONAME + _ZN4QTMS8QTMSDTMFD1Ev @ 321 NONAME + _ZN4QTMS8QTMSDTMFD2Ev @ 322 NONAME + _ZNK4QTMS10QTMSStream10metaObjectEv @ 323 NONAME + _ZNK4QTMS11QTMSFactory10metaObjectEv @ 324 NONAME + _ZNK4QTMS12QTMSRingTone10metaObjectEv @ 325 NONAME + _ZNK4QTMS13QTMSAMRFormat10metaObjectEv @ 326 NONAME + _ZNK4QTMS13QTMSMicSource10metaObjectEv @ 327 NONAME + _ZNK4QTMS13QTMSModemSink10metaObjectEv @ 328 NONAME + _ZNK4QTMS13QTMSPCMFormat10metaObjectEv @ 329 NONAME + _ZNK4QTMS14QTMSClientSink10metaObjectEv @ 330 NONAME + _ZNK4QTMS14QTMSG711Format10metaObjectEv @ 331 NONAME + _ZNK4QTMS14QTMSG729Format10metaObjectEv @ 332 NONAME + _ZNK4QTMS14QTMSGainEffect10metaObjectEv @ 333 NONAME + _ZNK4QTMS14QTMSILBCFormat10metaObjectEv @ 334 NONAME + _ZNK4QTMS14QTMSInbandTone10metaObjectEv @ 335 NONAME + _ZNK4QTMS15QTMSModemSource10metaObjectEv @ 336 NONAME + _ZNK4QTMS15QTMSSpeakerSink10metaObjectEv @ 337 NONAME + _ZNK4QTMS16QTMSClientSource10metaObjectEv @ 338 NONAME + _ZNK4QTMS16QTMSVolumeEffect10metaObjectEv @ 339 NONAME + _ZNK4QTMS17QTMSGlobalRouting10metaObjectEv @ 340 NONAME + _ZNK4QTMS19QTMSGlobalVolEffect10metaObjectEv @ 341 NONAME + _ZNK4QTMS20QTMSGlobalGainEffect10metaObjectEv @ 342 NONAME + _ZNK4QTMS8QTMSCall10metaObjectEv @ 343 NONAME + _ZNK4QTMS8QTMSDTMF10metaObjectEv @ 344 NONAME + _ZTIN4QTMS10QTMSFormatE @ 345 NONAME + _ZTIN4QTMS10QTMSStreamE @ 346 NONAME + _ZTIN4QTMS11QTMSFactoryE @ 347 NONAME + _ZTIN4QTMS12QTMSRingToneE @ 348 NONAME + _ZTIN4QTMS13QTMSAMRFormatE @ 349 NONAME + _ZTIN4QTMS13QTMSMicSourceE @ 350 NONAME + _ZTIN4QTMS13QTMSModemSinkE @ 351 NONAME + _ZTIN4QTMS13QTMSPCMFormatE @ 352 NONAME + _ZTIN4QTMS14QTMSClientSinkE @ 353 NONAME + _ZTIN4QTMS14QTMSG711FormatE @ 354 NONAME + _ZTIN4QTMS14QTMSG729FormatE @ 355 NONAME + _ZTIN4QTMS14QTMSGainEffectE @ 356 NONAME + _ZTIN4QTMS14QTMSILBCFormatE @ 357 NONAME + _ZTIN4QTMS14QTMSInbandToneE @ 358 NONAME + _ZTIN4QTMS15QTMSModemSourceE @ 359 NONAME + _ZTIN4QTMS15QTMSSpeakerSinkE @ 360 NONAME + _ZTIN4QTMS16QTMSClientSourceE @ 361 NONAME + _ZTIN4QTMS16QTMSVolumeEffectE @ 362 NONAME + _ZTIN4QTMS17QTMSGlobalRoutingE @ 363 NONAME + _ZTIN4QTMS19QTMSGlobalVolEffectE @ 364 NONAME + _ZTIN4QTMS20QTMSGlobalGainEffectE @ 365 NONAME + _ZTIN4QTMS8QTMSCallE @ 366 NONAME + _ZTIN4QTMS8QTMSDTMFE @ 367 NONAME + _ZTVN4QTMS10QTMSFormatE @ 368 NONAME + _ZTVN4QTMS10QTMSStreamE @ 369 NONAME + _ZTVN4QTMS11QTMSFactoryE @ 370 NONAME + _ZTVN4QTMS12QTMSRingToneE @ 371 NONAME + _ZTVN4QTMS13QTMSAMRFormatE @ 372 NONAME + _ZTVN4QTMS13QTMSMicSourceE @ 373 NONAME + _ZTVN4QTMS13QTMSModemSinkE @ 374 NONAME + _ZTVN4QTMS13QTMSPCMFormatE @ 375 NONAME + _ZTVN4QTMS14QTMSClientSinkE @ 376 NONAME + _ZTVN4QTMS14QTMSG711FormatE @ 377 NONAME + _ZTVN4QTMS14QTMSG729FormatE @ 378 NONAME + _ZTVN4QTMS14QTMSGainEffectE @ 379 NONAME + _ZTVN4QTMS14QTMSILBCFormatE @ 380 NONAME + _ZTVN4QTMS14QTMSInbandToneE @ 381 NONAME + _ZTVN4QTMS15QTMSModemSourceE @ 382 NONAME + _ZTVN4QTMS15QTMSSpeakerSinkE @ 383 NONAME + _ZTVN4QTMS16QTMSClientSourceE @ 384 NONAME + _ZTVN4QTMS16QTMSVolumeEffectE @ 385 NONAME + _ZTVN4QTMS17QTMSGlobalRoutingE @ 386 NONAME + _ZTVN4QTMS19QTMSGlobalVolEffectE @ 387 NONAME + _ZTVN4QTMS20QTMSGlobalGainEffectE @ 388 NONAME + _ZTVN4QTMS8QTMSCallE @ 389 NONAME + _ZTVN4QTMS8QTMSDTMFE @ 390 NONAME + _ZThn8_N4QTMS13QTMSAMRFormatD0Ev @ 391 NONAME + _ZThn8_N4QTMS13QTMSAMRFormatD1Ev @ 392 NONAME + _ZThn8_N4QTMS13QTMSMicSource7GetTypeERi @ 393 NONAME + _ZThn8_N4QTMS13QTMSModemSink7GetTypeERi @ 394 NONAME + _ZThn8_N4QTMS13QTMSPCMFormatD0Ev @ 395 NONAME + _ZThn8_N4QTMS13QTMSPCMFormatD1Ev @ 396 NONAME + _ZThn8_N4QTMS14QTMSClientSink7GetTypeERi @ 397 NONAME + _ZThn8_N4QTMS14QTMSG711FormatD0Ev @ 398 NONAME + _ZThn8_N4QTMS14QTMSG711FormatD1Ev @ 399 NONAME + _ZThn8_N4QTMS14QTMSG729FormatD0Ev @ 400 NONAME + _ZThn8_N4QTMS14QTMSG729FormatD1Ev @ 401 NONAME + _ZThn8_N4QTMS14QTMSGainEffect7GetTypeERi @ 402 NONAME + _ZThn8_N4QTMS14QTMSILBCFormatD0Ev @ 403 NONAME + _ZThn8_N4QTMS14QTMSILBCFormatD1Ev @ 404 NONAME + _ZThn8_N4QTMS15QTMSModemSource7GetTypeERi @ 405 NONAME + _ZThn8_N4QTMS15QTMSSpeakerSink7GetTypeERi @ 406 NONAME + _ZThn8_N4QTMS16QTMSClientSource7GetTypeERi @ 407 NONAME + _ZThn8_N4QTMS16QTMSVolumeEffect7GetTypeERi @ 408 NONAME + _ZThn8_N4QTMS19QTMSGlobalVolEffect7GetTypeERi @ 409 NONAME + _ZThn8_N4QTMS20QTMSGlobalGainEffect7GetTypeERi @ 410 NONAME + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsamrimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsamrimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,53 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_AMR_FORMAT_IMPL_H +#define QTMS_AMR_FORMAT_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +// Class declaration +class QTMSAMRFormatImpl : public QTMSAMRFormat + { +public: + + static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat); + virtual ~QTMSAMRFormatImpl(); + + gint GetFormat(TMS::TMSFormat*& fmt); + + // From QTMSFormat + gint GetType(QTMSFormatType& fmttype); + +private: + QTMSAMRFormatImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_AMR_FORMAT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsbufferimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsbufferimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,41 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_BUFFER_IMPL_H +#define QTMS_BUFFER_IMPL_H + +#include + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSBuffer; + +// TMSBufferImpl class +class QTMSBufferImpl + { +public: + static gint Create(QTMSBufferType ctype, guint size, + QTMSBuffer*& tmsbuffer); + static gint Delete(QTMSBuffer*& tmsbuffer); + }; + +} //namespace QTMS + +#endif // QTMS_BUFFER_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmscallimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmscallimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,60 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_CALL_IMPL_H +#define QTMS_CALL_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSCall; +} + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSStream; +class QTMSDTMF; +class QTMSRingTone; + +// QTMSCallImpl class +class QTMSCallImpl : public QTMSCall + { +public: + static gint Create(QTMSCall*& qtmscall, TMS::TMSCall*& tmscall); + + virtual ~QTMSCallImpl(); + + // From QTMSCallBody + // QTMSCallType GetCallType(); + // gint GetCallContextId(guint& ctxid); + // gint CreateStream(QTMSStreamType type, QTMSStream*& strm); + // gint DeleteStream(QTMSStream*& strm); + +private: + // TMS::TMSCall* iTmsCall; + QTMSCallImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_CALL_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsclientsinkimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsclientsinkimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,58 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_CLIENT_SINK_IMPL_H +#define QTMS_CLIENT_SINK_IMPL_H + +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSBuffer; +class TMSSink; +} + +namespace QTMS { + +// QTMSClientSinkImpl class +class QTMSClientSinkImpl : public QTMSClientSink, + public TMS::TMSClientSinkObserver + { +public: + static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmsclientsink); + virtual ~QTMSClientSinkImpl(); + + gint AddObserver(TMS::TMSClientSinkObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSClientSinkObserver& obsrvr); + + gint GetSink(TMS::TMSSink*& tmssink); + + // From TMSClientSinkObserver + void ProcessBuffer(const TMS::TMSBuffer* buffer); + +private: + QTMSClientSinkImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_CLIENT_SINK_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsclientsourceimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsclientsourceimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,60 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_CLIENT_SOURCE_IMPL_H +#define QTMS_CLIENT_SOURCE_IMPL_H + +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSBuffer; +class TMSSource; +} + +namespace QTMS { + +// QTMSClientSourceImpl class +class QTMSClientSourceImpl : public QTMSClientSource, + public TMS::TMSClientSourceObserver + { +public: + + static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource); + virtual ~QTMSClientSourceImpl(); + + gint AddObserver(TMS::TMSClientSourceObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSClientSourceObserver& obsrvr); + + gint GetSource(TMS::TMSSource*& tmssource); + + //From TMSClientSourceObserver + void FillBuffer(TMS::TMSBuffer& buffer); + void BufferProcessed(const TMS::TMSBuffer* buffer, gint reason); + +private: + QTMSClientSourceImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_CLIENT_SOURCE_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsdtmfimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsdtmfimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,56 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_DTMF_IMPL_H +#define QTMS_DTMF_IMPL_H + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSDTMF; +} + +namespace QTMS { + +// QTMSDTMFImpl class +class QTMSDTMFImpl : public QTMSDTMF, + public TMS::TMSDTMFObserver + { +public: + static gint Create(QTMSDTMF*& qdtmf, TMS::TMSDTMF*& tmsdtmf); + virtual ~QTMSDTMFImpl(); + + gint AddObserver(TMS::TMSDTMFObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSDTMFObserver& obsrvr); + + //from TMS::TMSDTMFObserver + void DTMFEvent(const TMS::TMSDTMF& dtmf, TMS::TMSSignalEvent event); + +private: + QTMSDTMFImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_DTMF_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsfactoryimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsfactoryimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,83 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMSFACTORYIMPL_H_ +#define QTMSFACTORYIMPL_H_ + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFactory; +} + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSCall; +class QTMSFormat; +class QTMSEffect; +class QTMSBuffer; +class QTMSSource; +class QTMSSink; +class QTMSGlobalRouting; +class QTMSRTPSession; +class QTMSDTMF; +class QTMSRingTone; +class QTMSInbandTone; + +// CLASS DECLARATION +class QTMSFactoryImpl + { +public: + QTMSFactoryImpl(); + virtual ~QTMSFactoryImpl(); + + gint CreateCall(QTMSCallType ctype, QTMSCall*& QTMScall, guint ctxid); + gint DeleteCall(QTMSCall*& QTMSct); + gint IsCallTypeSupported(QTMSCallType ctype, gboolean& flag); + gint GetSupportedFormats(const QTMSStreamType strmtype, + FormatVector& fmtlist); + gint CreateFormat(QTMSFormatType fmttype, QTMSFormat*& QTMSfmt); + gint DeleteFormat(QTMSFormat*& QTMSfmt); + gint CreateEffect(QTMSEffectType QTMSeffecttype, + QTMSEffect*& QTMSeffect); + gint DeleteEffect(QTMSEffect*& QTMSeffect); + gint CreateBuffer(QTMSBufferType buffertype, guint size, + QTMSBuffer*& QTMSbuffer); + gint DeleteBuffer(QTMSBuffer*& QTMSbuffer); + gint CreateSource(QTMSSourceType srctype, QTMSSource*& QTMSsrc); + gint DeleteSource(QTMSSource*& QTMSsrc); + gint CreateSink(QTMSSinkType sinktype, QTMSSink*& QTMSsink); + gint DeleteSink(QTMSSink*& QTMSsink); + gint CreateGlobalRouting(QTMSGlobalRouting*& globrouting); + gint DeleteGlobalRouting(QTMSGlobalRouting*& globrouting); + gint CreateDTMF(QTMSStreamType streamid, QTMSDTMF*& dtmf); + gint DeleteDTMF(QTMSDTMF*& dtmf); + gint CreateRingTonePlayer(QTMSRingTone*& rt); + gint DeleteRingTonePlayer(QTMSRingTone*& rt); + gint CreateInbandTonePlayer(QTMSInbandTone*& inbandtone); + gint DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone); + +private: + TMS::TMSFactory *iFactory; + }; + +} //namespace QTMS + +#endif diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsg711impl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsg711impl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,52 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_G711_FORMAT_IMPL_H +#define QTMS_G711_FORMAT_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +// QTMSG711FormatImpl class +class QTMSG711FormatImpl : public QTMSG711Format + { +public: + static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat); + virtual ~QTMSG711FormatImpl(); + + gint GetFormat(TMS::TMSFormat*& fmt); + + // From QTMSFormat + gint GetType(QTMSFormatType& fmttype); + +private: + QTMSG711FormatImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_G711_FORMAT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsg729impl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsg729impl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,53 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_G729_FORMAT_IMPL_H +#define QTMS_G729_FORMAT_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +// QTMSG729FormatImpl class +class QTMSG729FormatImpl : public QTMSG729Format + { +public: + + static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat); + virtual ~QTMSG729FormatImpl(); + + gint GetFormat(TMS::TMSFormat*& fmt); + + // From QTMSFormat + gint GetType(QTMSFormatType& fmttype); + +private: + QTMSG729FormatImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_G729_FORMAT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsgaineffectimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsgaineffectimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,59 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GAIN_EFFECT_IMPL_H +#define QTMS_GAIN_EFFECT_IMPL_H + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +// QTMSGainEffectImpl class +class QTMSGainEffectImpl : public QTMSGainEffect, + public TMS::TMSEffectObserver + { +public: + static gint Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol); + virtual ~QTMSGainEffectImpl(); + + gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSEffectObserver& obsrvr); + + gint GetEffect(TMS::TMSEffect*& tmseffect); + + //From TMSEffectObserver + void EffectsEvent(const TMS::TMSEffect& tmseffect, + TMS::TMSSignalEvent event); + +private: + QTMSGainEffectImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_GAIN_EFFECT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsglobalgaineffectimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsglobalgaineffectimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,60 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GLOBAL_GAIN_EFFECT_IMPL_H +#define QTMS_GLOBAL_GAIN_EFFECT_IMPL_H + +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSEffect; + +// QTMSGlobalGainEffectImpl class +class QTMSGlobalGainEffectImpl : public QTMSGlobalGainEffect, + public TMS::TMSEffectObserver + { +public: + static gint Create(QTMSEffect*& qglobalgain, + TMS::TMSEffect*& tmsglobalgain); + virtual ~QTMSGlobalGainEffectImpl(); + + gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSEffectObserver& obsrvr); + + //from TMSEffectObserver + void EffectsEvent(const TMS::TMSEffect& tmseffect, + TMS::TMSSignalEvent event); + +private: + QTMSGlobalGainEffectImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_GLOBAL_GAIN_EFFECT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsglobalroutingimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsglobalroutingimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,59 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GLOBAL_ROUTING_IMPL_H +#define QTMS_GLOBAL_ROUTING_IMPL_H + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSGlobalRouting; +} + +namespace QTMS { + +// QTMSGlobalRoutingImpl class +class QTMSGlobalRoutingImpl : public QTMSGlobalRouting, + public TMS::TMSGlobalRoutingObserver + { +public: + + static gint Create(QTMSGlobalRouting*& qrouting, + TMS::TMSGlobalRouting*& tmsrouting); + virtual ~QTMSGlobalRoutingImpl(); + + gint AddObserver(TMS::TMSGlobalRoutingObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSGlobalRoutingObserver& obsrvr); + + //from TMSGlobalRoutingObserver + void GlobalRoutingEvent(const TMS::TMSGlobalRouting& routing, + TMS::TMSSignalEvent event, TMS::TMSAudioOutput output); + +private: + QTMSGlobalRoutingImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_GLOBAL_ROUTING_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsglobalvoleffectimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsglobalvoleffectimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,60 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H +#define QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H + +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSEffect; + +// QTMSGlobalVolEffectImpl class +class QTMSGlobalVolEffectImpl : public QTMSGlobalVolEffect, + public TMS::TMSEffectObserver + { +public: + + static gint Create(QTMSEffect*& qglobalvol, TMS::TMSEffect*& tmsglobalvol); + virtual ~QTMSGlobalVolEffectImpl(); + + gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSEffectObserver& obsrvr); + + //from TMSEffectObserver + void EffectsEvent(const TMS::TMSEffect& tmseffect, + TMS::TMSSignalEvent event); + +private: + QTMSGlobalVolEffectImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_GLOBAL_VOLUME_EFFECT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsilbcimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsilbcimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,52 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_ILBC_FORMAT_IMPL_H +#define QTMS_ILBC_FORMAT_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +// QTMSILBCFormatImpl class +class QTMSILBCFormatImpl : public QTMSILBCFormat + { +public: + static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat); + virtual ~QTMSILBCFormatImpl(); + + gint GetFormat(TMS::TMSFormat*& fmt); + + // From QTMSFormat + gint GetType(QTMSFormatType& fmttype); + +private: + QTMSILBCFormatImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_ILBC_FORMAT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsinbandtoneimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsinbandtoneimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,57 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_INBAND_IMPL_H +#define QTMS_INBAND_IMPL_H + +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSInbandTone; +} + +namespace QTMS { + +// QTMSInbandImpl class +class QTMSInbandToneImpl : public QTMSInbandTone, + public TMS::TMSInbandToneObserver + { +public: + static gint Create(QTMSInbandTone*& qinband, + TMS::TMSInbandTone*& tmsinband); + virtual ~QTMSInbandToneImpl(); + + gint AddObserver(TMS::TMSInbandToneObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSInbandToneObserver& obsrvr); + + //from TMS::TMSInbandToneObserver + void InbandToneEvent(const TMS::TMSInbandTone& inbandtone, + TMS::TMSSignalEvent event); + +private: + QTMSInbandToneImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_DTMF_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsmembuffer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsmembuffer.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,127 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MEM_BUFFER_H +#define QTMS_MEM_BUFFER_H + +#include + +namespace TMS { +class TMSBuffer; +} + +namespace QTMS { + +// QTMSMemBuffer class +class QTMSMemBuffer : public QTMSBuffer + { +public: + virtual ~QTMSMemBuffer(); + + /** + * Creates Memory Buffer object of the given size. + * The memory is allocated on the heap. + * + * @param size + * Size of the buffer to be created. + * + * @param qbuffer + * Created QTMSBuffer object. + * + * @param buffer + * TMS::TMSBuffer buffer object. + * + * @return + * TMS_RESULT_SUCCESS if buffer is created successfully. + * TMS_RESULT_INSUFFICIENT_MEMORY if buffer creation failed due to + * insufficient memory. + * TMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED if the buffer type is not + * supported. + * + */ + static gint Create(guint size, QTMSBuffer*& qbuffer, + TMS::TMSBuffer*& tmsbuffer); + + /** + * Return buffer type. + * + * @param buftype + * Type of the buffer object (QTMS_BUFFER_MEMORY). + * + * @return + * QTMS_RESULT_SUCCESS if the operation was successful. + * + */ + virtual gint GetType(QTMSBufferType& buftype); + + /** + Gets the timestamp on the Buffer so that the framework can + determine the time at which this buffer has to be rendered + by the output device sink. + + @param ts + timestamp in microseconds + */ + virtual gint GetTimeStamp(guint64& ts); + + /** + Sets the timestamp on the Buffer so that the framework can + determine the time at which this buffer has to be rendered + by the output device sink. + + @param ts + timestamp in milliseconds + */ + virtual gint SetTimeStamp(const guint64 ts); + + /** + Gets the size of data in the buffer specified by the client. + + @param size + size of data in bytes + */ + virtual gint GetDataSize(guint& size); + + /** + Sets the size of data in the buffer after the client + fill it. + + @param size + size of data in bytes + */ + virtual gint SetDataSize(const guint size); + + /** + Gets the pointer to the memory location associated with this + buffer where the data is stored. + + @param bufptr + ptr to the data stored in the buffer. + */ + virtual gint GetDataPtr(guint8*& bufptr); + +private: + QTMSMemBuffer(); + gint PostConstruct(); + +protected: + TMS::TMSBuffer* iBuffer; + }; + +} //namespace QTMS + +#endif //QTMS_MEM_BUFFER_H diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsmicsourceimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsmicsourceimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,48 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MIC_SOURCE_IMPL_H +#define QTMS_MIC_SOURCE_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSource; +} + +namespace QTMS { + +// QTMSMicSourceImpl class +class QTMSMicSourceImpl : public QTMSMicSource + { +public: + static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource); + virtual ~QTMSMicSourceImpl(); + gint GetSource(TMS::TMSSource*& tmssource); + +private: + QTMSMicSourceImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_MIC_SOURCE_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsmodemsinkimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsmodemsinkimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,50 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MODEM_SINK_IMPL_H +#define QTMS_MODEM_SINK_IMPL_H + +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSink; +} + +namespace QTMS { + +// QTMSModemSinkImpl class +class QTMSModemSinkImpl : public QTMSModemSink + { +public: + static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink); + virtual ~QTMSModemSinkImpl(); + + gint GetSink(TMS::TMSSink*& tmssink); + +private: + QTMSModemSinkImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_MODEM_SINK_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsmodemsourceimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsmodemsourceimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,49 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_MODEM_SOURCE_IMPL_H +#define QTMS_MODEM_SOURCE_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSource; +} + +namespace QTMS { + +// QTMSModemSourceImpl class +class QTMSModemSourceImpl : public QTMSModemSource + { +public: + static gint Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource); + virtual ~QTMSModemSourceImpl(); + + gint GetSource(TMS::TMSSource*& tmssource); + +private: + QTMSModemSourceImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_MODEM_SOURCE_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmspcmimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmspcmimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,52 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_PCM_FORMAT_IMPL_H +#define QTMS_PCM_FORMAT_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSFormat; +} + +namespace QTMS { + +// QTMSPCMFormatImpl class +class QTMSPCMFormatImpl : public QTMSPCMFormat + { +public: + static gint Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat); + virtual ~QTMSPCMFormatImpl(); + + gint GetFormat(TMS::TMSFormat*& fmt); + + // From QTMSFormat + gint GetType(QTMSFormatType& Formattype); + +private: + QTMSPCMFormatImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_PCM_FORMAT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsringtoneimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsringtoneimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,57 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMSRINGTONEBODYIMPL_H +#define QTMSRINGTONEBODYIMPL_H + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSRingTone; +} + +namespace QTMS { + +// QTMSRingToneImpl class +class QTMSRingToneImpl : public QTMSRingTone, + public TMS::TMSRingToneObserver + { +public: + static gint Create(QTMSRingTone*& qrt, TMS::TMSRingTone*& tmsrt); + virtual ~QTMSRingToneImpl(); + + gint AddObserver(TMS::TMSRingToneObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSRingToneObserver& obsrvr); + + //from TMS::TMSRingToneObserver + void RingtoneEvent(const TMS::TMSRingTone& rt, TMS::TMSSignalEvent event); + +private: + QTMSRingToneImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif //QTMSRINGTONEBODYIMPL_H + +// End of file + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmssinkimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmssinkimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,40 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_SINK_IMPL_H +#define QTMS_SINK_IMPL_H + +#include + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSSink; + +// TMSSinkImpl class +class QTMSSinkImpl + { +public: + static gint Create(QTMSSinkType sinktype, QTMSSink*& tmssink); + static gint Delete(QTMSSink*& tmssink); + }; + +} //namespace QTMS + +#endif // QTMS_SINK_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmssourceimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmssourceimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,40 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_SOURCE_IMPL_H +#define QTMS_SOURCE_IMPL_H + +#include + +namespace QTMS { + +// FORWARD DECLARATIONS +class QTMSSource; + +// TMSSourceImpl class +class QTMSSourceImpl + { +public: + static gint Create(QTMSSourceType sourcetype, QTMSSource*& tmssource); + static gint Delete(QTMSSource*& tmssource); + }; + +} //namespace QTMS + +#endif // QTMS_SOURCE_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsspeakersinkimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsspeakersinkimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,49 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_SPEAKER_SINK_IMPL_H +#define QTMS_SPEAKER_SINK_IMPL_H + +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSSink; +} + +namespace QTMS { + +// QTMSSpeakerSinkImpl class +class QTMSSpeakerSinkImpl : public QTMSSpeakerSink + { +public: + static gint Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink); + virtual ~QTMSSpeakerSinkImpl(); + + gint GetSink(TMS::TMSSink*& tmssink); + +private: + QTMSSpeakerSinkImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_SPEAKER_SINK_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsstreamimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsstreamimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,65 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_STREAM_IMPL_H +#define QTMS_STREAM_IMPL_H + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSStream; +} + +namespace QTMS { + +// QTMSStreamImpl class +class QTMSStreamImpl : public QTMSStream, + public TMS::TMSStreamObserver + { +public: + static gint Create(QTMSCallType callType, QTMSStreamType stype, + QTMSStream*& qstrm, TMS::TMSStream*& tmsstrm); + + virtual ~QTMSStreamImpl(); + + // From QTMSStreamBody + gint AddObserver(TMS::TMSStreamObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSStreamObserver& obsrvr); + + // From TMSStreamObserver + void TMSStreamEvent(const TMS::TMSStream& stream, + TMS::TMSSignalEvent event); + +protected: + QTMSStreamImpl(); + + gint PostConstruct(QTMSCallType callType, QTMSStreamType stype, + QTMSStream& parent); + + gint CreateQueue(const gint aNumSlots); + void ReceiveMsgQHandlerEventsL(); + }; + +} //namespace QTMS + +#endif // QTMS_STREAM_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmsvolumeeffectimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmsvolumeeffectimpl.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,59 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef QTMS_VOLUME_EFFECT_IMPL_H +#define QTMS_VOLUME_EFFECT_IMPL_H + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +namespace TMS { +class TMSEffect; +} + +namespace QTMS { + +// QTMSVolumeEffectImpl class +class QTMSVolumeEffectImpl : public QTMSVolumeEffect, + public TMS::TMSEffectObserver + { +public: + static gint Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol); + virtual ~QTMSVolumeEffectImpl(); + + gint AddObserver(TMS::TMSEffectObserver& obsrvr, gpointer user_data); + gint RemoveObserver(TMS::TMSEffectObserver& obsrvr); + + gint GetEffect(TMS::TMSEffect*& tmseffect); + + //From TMSEffectObserver + void EffectsEvent(const TMS::TMSEffect& tmseffect, + TMS::TMSSignalEvent event); + +private: + QTMSVolumeEffectImpl(); + gint PostConstruct(); + }; + +} //namespace QTMS + +#endif // QTMS_VOLUME_EFFECT_IMPL_H + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/qtmswrapperexport.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/qtmswrapperexport.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,30 @@ +/* +* 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 the License "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 QTMS_WRAPPER_EXPORT_H_ +#define QTMS_WRAPPER_EXPORT_H_ + +// System includes +#include + +#ifdef BUILD_TMS_WRAPPER_DLL + #define QTMS_WRAPPER_DLL_EXPORT Q_DECL_EXPORT +#else + #define QTMS_WRAPPER_DLL_EXPORT Q_DECL_IMPORT +#endif + +#endif // QTMS_WRAPPER_EXPORT_H_ diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/inc/tmsutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/inc/tmsutility.h Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,86 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#ifndef __TMSUTILITY_H__ +#define __TMSUTILITY_H__ + +#include +#include +#include +#ifdef _DEBUG +#include +#endif + +namespace TMS { + +// DEBUG TRACE DEFINITIONS +#ifdef _DEBUG +#define TRACE_PRN_FN_ENT RDebug::Printf("%s>ENTER", __PRETTY_FUNCTION__) +#define TRACE_PRN_FN_EXT RDebug::Printf("%s>EXIT", __PRETTY_FUNCTION__) +#define TRACE_PRN_IF_ERR(err) if (err != KErrNone) RDebug::Printf( "%s>BREAK[%d]", __PRETTY_FUNCTION__, err ) + +#define TRACE_PRN_0(str) RDebug::Print(str, this) +#define TRACE_PRN_1(str, val1) RDebug::Print(str, this, val1) +#define TRACE_PRN_2(str, val1, val2) RDebug::Print(str, this, val1, val2) + +#define TRACE_PRN_N(str) RDebug::Print(str) +#define TRACE_PRN_N1(str, val1) RDebug::Print(str, val1) +#define TRACE_PRN_N2(str, val1, val2) RDebug::Print(str, val1, val2) +#else +#define TRACE_PRN_FN_ENT +#define TRACE_PRN_FN_EXT +#define TRACE_PRN_IF_ERR(err) +#define TRACE_PRN_0(str) +#define TRACE_PRN_1(str, val1) +#define TRACE_PRN_2(str, val1, val2) +#define TRACE_PRN_N(str) +#define TRACE_PRN_N1(str, val1) +#define TRACE_PRN_N2(str, val1, val2) +#endif //_DEBUG + + +// MACRO DEFINITIONS +#define RET_ERR_IF_ERR(err) if ( err != 0) return err; +#define RET_REASON_IF_ERR(s) if(s!=0) return s + +#define TMSRESULT(result) TMSUtility::TMSResult(result) +#define TOTMSOUTPUT(output) TMSUtility::ToTMSOutput(output) +#define TOTAROUTPUT(output) TMSUtility::ToTAROutput(output) +#define TOFOURCC(format) TMSUtility::ToFourCC(format) +#define TOTMSFORMAT(fourcc) TMSUtility::FourCCToTMSFormat(fourcc) + +_LIT(KQTMSPanic, "QTMS Panic!" ); +#define PANIC(reason) User::Panic(KQTMSPanic, reason) + +// TMSUtility class +class TMSUtility + { +public: + IMPORT_C static gint TMSResult(const gint error); + IMPORT_C static gint EtelToTMSResult(const gint error); + IMPORT_C static TMSAudioOutput ToTMSOutput( + CTelephonyAudioRouting::TAudioOutput taroutput); + IMPORT_C static CTelephonyAudioRouting::TAudioOutput ToTAROutput( + TMSAudioOutput output); + IMPORT_C static TUint32 ToFourCC(TMSFormatType frmtType); + IMPORT_C static TMSFormatType FourCCToTMSFormat(TUint32 fourcc); + }; + +} //namespace TMS + +#endif //__TMSUTILITY_H__ + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/qtmsapi.pro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/qtmsapi.pro Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,129 @@ +TEMPLATE = lib +TARGET = qtmsapi +CONFIG += dll +DEFINES += BUILD_TMS_WRAPPER_DLL + +QT = core +CONFIG -= gui + +DEFINES += SYMBIAN +TARGET.CAPABILITY = All -tcb +TARGET.EPOCALLOWDLLDATA = 1 +TARGET.UID2 = 0x10009D8D +TARGET.UID3 = 0x10207CA5 + +BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include " \ + "rom/qtms.iby CORE_MW_LAYER_IBY_EXPORT_PATH(qtms.iby)" \ + "data/qtmsapi_stub.sis /epoc32/data/z/system/install/qtmsapi_stub.sis" + +DEPENDPATH += . inc +INCLUDEPATH += . \ + .\inc + +qtmsDefFiles = \ + "$${LITERAL_HASH}ifdef WINSCW" \ + "DEFFILE bwins/qtms.def" \ + "$${LITERAL_HASH}else" \ + "DEFFILE eabi/qtms.def" \ + "$${LITERAL_HASH}endif" + +MMP_RULES += qtmsDefFiles + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE \ + $$OS_LAYER_LIBC_SYSTEMINCLUDE \ + $$OS_LAYER_GLIB_SYSTEMINCLUDE + +LIBS += -ltmsfactory \ + -ltmsapi \ + -ltmsutility \ + -llibglib \ + -llibgobject \ + -llibgmodule \ + -llibstdcpp + +# $$_PRO_FILE_PWD_ points to the directory of the pro file +MOC_DIR = ./tmp + +INCLUDEPATH += . \ + . inc \ + ../ \ + ../mmappfw_plat/qt_telephony_multimedia_service_api/inc/ + +DEPENDPATH += $$INCLUDEPATH src + +# Headers +HEADERS += qtmsfactory.h \ + qtmscall.h \ + qtmsstream.h \ + qtmsbuffer.h \ + qtmsclientsource.h \ + qtmsclientsink.h \ + qtmsvolumeeffect.h \ + qtmsgaineffect.h \ + qtmsglobalgaineffect.h \ + qtmsglobalvoleffect.h \ + qtmsglobalrouting.h \ + qtmsamrformat.h \ + qtmspcmformat.h \ + qtmsilbcformat.h \ + qtmsg711format.h \ + qtmsg729format.h \ + qtmsformat.h \ + qtmsmodemsink.h \ + qtmsspeakersink.h \ + qtmsmodemsource.h \ + qtmsmicsource.h \ + qtmsringtone.h \ + qtmsdtmf.h \ + qtmsinbandtone.h + +# Source +SOURCES += qtmsfactory.cpp \ + qtmsfactoryimpl.cpp \ + qtmsmembuffer.cpp \ + qtmscall.cpp \ + qtmscallimpl.cpp \ + qtmsstream.cpp \ + qtmsstreamimpl.cpp \ + qtmsclientsource.cpp \ + qtmsclientsourceimpl.cpp \ + qtmsclientsink.cpp \ + qtmsclientsinkimpl.cpp \ + qtmsvolumeeffect.cpp \ + qtmsvolumeeffectimpl.cpp \ + qtmsgaineffect.cpp \ + qtmsgaineffectimpl.cpp \ + qtmsglobalgaineffect.cpp \ + qtmsglobalgaineffectimpl.cpp \ + qtmsglobalvoleffect.cpp \ + qtmsglobalvoleffectimpl.cpp \ + qtmsglobalrouting.cpp \ + qtmsglobalroutingimpl.cpp \ + qtmspcm.cpp \ + qtmspcmimpl.cpp \ + qtmsilbc.cpp \ + qtmsilbcimpl.cpp \ + qtmsamr.cpp \ + qtmsamrimpl.cpp \ + qtmsg711.cpp \ + qtmsg711impl.cpp \ + qtmsg729.cpp \ + qtmsg729impl.cpp \ + qtmsformat.cpp \ + qtmsmodemsink.cpp \ + qtmsmodemsinkimpl.cpp \ + qtmsspeakersink.cpp \ + qtmsspeakersinkimpl.cpp \ + qtmsmodemsource.cpp \ + qtmsmodemsourceimpl.cpp \ + qtmsmicsource.cpp \ + qtmsmicsourceimpl.cpp \ + qtmsringtone.cpp \ + qtmsringtoneimpl.cpp \ + qtmsdtmf.cpp \ + qtmsdtmfimpl.cpp \ + qtmsinbandtone.cpp \ + qtmsinbandtoneimpl.cpp + +SYMBIAN_PLATFORMS = DEFAULT + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/rom/qtms.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/rom/qtms.iby Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,31 @@ +/* +* 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: Iby file for QTMS +* +*/ + +#ifndef QTMS_IBY +#define QTMS_IBY + +// Use standard macros +#include + +#ifdef FF_TMS +file=ABI_DIR\BUILD_DIR\qtmsapi.dll SHARED_LIB_DIR\qtmsapi.dll + +//QTMS_Stub +data=ZSYSTEM/install/qtmsapi_stub.sis System/Install/qtmsapi_stub.sis + +#endif //FF_TMS +#endif //QTMS_IBY diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsamr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsamr.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,30 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include + +using namespace QTMS; + +QTMSAMRFormat::QTMSAMRFormat() + { + } + +QTMSAMRFormat::~QTMSAMRFormat() + { + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsamrimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsamrimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,82 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsamrimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSAMRFormatImpl::QTMSAMRFormatImpl() + { + } + +QTMSAMRFormatImpl::~QTMSAMRFormatImpl() + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +gint QTMSAMRFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat) + { + gint ret(TMS_RESULT_INSUFFICIENT_MEMORY); + QTMSAMRFormatImpl* self = new QTMSAMRFormatImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != TMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iFormat = tmsformat; + } + qformat = self; + return ret; + } + +gint QTMSAMRFormatImpl::PostConstruct() + { + gint ret(TMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSAMRFormatImpl::GetFormat(TMS::TMSFormat*& fmt) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iFormat) + { + fmt = iFormat; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +gint QTMSAMRFormatImpl::GetType(QTMSFormatType& fmttype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetType(fmttype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmscall.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmscall.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,91 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include "qtmscallimpl.h" +#include "qtmsstreamimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSCall::QTMSCall() : + iTmsCall(NULL) + { + } + +QTMSCall::~QTMSCall() + { + } + +QTMSCallType QTMSCall::GetCallType() + { + QTMSCallType calltype(-1); + if (iTmsCall) + { + calltype = iTmsCall->GetCallType(); + } + return calltype; + } + +gint QTMSCall::GetCallContextId(guint& ctxid) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iTmsCall) + { + status = iTmsCall->GetCallContextId(ctxid); + } + return status; + } + +gint QTMSCall::CreateStream(const QTMSStreamType type, QTMSStream*& qstrm) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMSStream* tmsstrm(NULL); + if (iTmsCall) + { + status = iTmsCall->CreateStream(type, tmsstrm); + } + + if (status == TMS_RESULT_SUCCESS) + { + QTMSCallType calltype = iTmsCall->GetCallType(); + switch (type) + { + case TMS_STREAM_UPLINK: + case TMS_STREAM_DOWNLINK: + status = QTMSStreamImpl::Create(calltype, type, qstrm, tmsstrm); + break; + default: + status = QTMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; + break; + } + } + return status; + } + +gint QTMSCall::DeleteStream(QTMSStream*& strm) + { + gint status(QTMS_RESULT_SUCCESS); + delete strm; + strm = NULL; + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmscallimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmscallimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,57 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmscallimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSCallImpl::QTMSCallImpl() + { + } + +QTMSCallImpl::~QTMSCallImpl() + { + } + +gint QTMSCallImpl::Create(QTMSCall*& qtmscall, TMS::TMSCall*& tmscall) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSCallImpl* self = new QTMSCallImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iTmsCall = tmscall; + } + qtmscall = self; + return ret; + } + +gint QTMSCallImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsclientsink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsclientsink.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,56 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include + +using namespace QTMS; +using namespace TMS; + +QTMSClientSink::QTMSClientSink() : + iSink(NULL) + { + } + +QTMSClientSink::~QTMSClientSink() + { + delete iSink; + } + +// Push mode +gint QTMSClientSink::BufferProcessed(TMS::TMSBuffer* buffer) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSink) + { + status = static_cast (iSink)->BufferProcessed(buffer); + } + return status; + } + +gint QTMSClientSink::GetType(QTMSSinkType& sinktype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSink) + { + status = static_cast (iSink)->GetType(sinktype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsclientsinkimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsclientsinkimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,99 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include "qtmsclientsinkimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSClientSinkImpl::QTMSClientSinkImpl() + { + } + +QTMSClientSinkImpl::~QTMSClientSinkImpl() + { + RemoveObserver(*this); + } + +gint QTMSClientSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSClientSinkImpl* self = new QTMSClientSinkImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iSink = tmssink; + self->AddObserver(*self, NULL); + } + qsink = self; + return ret; + } + +gint QTMSClientSinkImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSClientSinkImpl::AddObserver(TMS::TMSClientSinkObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + if (iSink) + { + ret = static_cast (iSink)->AddObserver(obsrvr, + user_data); + } + return ret; + } + +gint QTMSClientSinkImpl::RemoveObserver(TMS::TMSClientSinkObserver& obsrvr) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSink) + { + ret = static_cast (iSink)->RemoveObserver(obsrvr); + } + return ret; + } + +gint QTMSClientSinkImpl::GetSink(TMS::TMSSink*& tmssink) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iSink) + { + tmssink = iSink; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +void QTMSClientSinkImpl::ProcessBuffer(const TMS::TMSBuffer* buffer) + { + emit QTMS::QTMSClientSink::ProcessBuffer(buffer); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsclientsource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsclientsource.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,98 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include + +using namespace QTMS; +using namespace TMS; + +QTMSClientSource::QTMSClientSource() : + iSource(NULL) + { + } + +QTMSClientSource::~QTMSClientSource() + { + delete iSource; + } + +gint QTMSClientSource::SetEnqueueMode(const gboolean enable) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + status = static_cast (iSource)->SetEnqueueMode( + enable); + } + return status; + } + +gint QTMSClientSource::GetEnqueueMode(gboolean& enable) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + status = static_cast (iSource)->GetEnqueueMode( + enable); + } + return status; + } + +gint QTMSClientSource::Flush() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + status = static_cast (iSource)->Flush(); + } + return status; + } + +gint QTMSClientSource::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + status = static_cast (iSource)->GetType(sourcetype); + } + return status; + } + +gint QTMSClientSource::BufferFilled(TMS::TMSBuffer& buffer) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + status = static_cast (iSource)->BufferFilled(buffer); + } + return status; + } + +// Push mode +gint QTMSClientSource::ProcessBuffer(TMS::TMSBuffer* buffer) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + status = static_cast (iSource)->ProcessBuffer(buffer); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsclientsourceimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsclientsourceimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,106 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include "qtmsclientsourceimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSClientSourceImpl::QTMSClientSourceImpl() + { + } + +QTMSClientSourceImpl::~QTMSClientSourceImpl() + { + RemoveObserver(*this); + } + +gint QTMSClientSourceImpl::Create(QTMSSource*& qsource, + TMS::TMSSource*& tmssource) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSClientSourceImpl* self = new QTMSClientSourceImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iSource = tmssource; + self->AddObserver(*self, NULL); + } + qsource = self; + return ret; + } + +gint QTMSClientSourceImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSClientSourceImpl::AddObserver(TMS::TMSClientSourceObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + ret = static_cast (iSource)->AddObserver(obsrvr, + user_data); + } + return ret; + } + +gint QTMSClientSourceImpl::RemoveObserver(TMS::TMSClientSourceObserver& obsrvr) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + ret = static_cast (iSource)->RemoveObserver(obsrvr); + } + return ret; + } + +gint QTMSClientSourceImpl::GetSource(TMS::TMSSource*& tmssource) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iSource) + { + tmssource = iSource; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +void QTMSClientSourceImpl::FillBuffer(TMS::TMSBuffer& buffer) + { + emit QTMS::QTMSClientSource::FillBuffer(buffer); + } + +void QTMSClientSourceImpl::BufferProcessed(const TMS::TMSBuffer* buffer, + gint reason) + { + emit QTMS::QTMSClientSource::BufferProcessed(buffer, reason); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsdtmf.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsdtmf.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,73 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsdtmfimpl.h" +//#include "qtmswrapperexport.h" + +using namespace QTMS; + +QTMSDTMF::QTMSDTMF(void) : + iDtmf(NULL) + { + } + +QTMSDTMF::~QTMSDTMF(void) + { + delete iDtmf; + } + +gint QTMSDTMF::Start() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iDtmf) + { + status = iDtmf->Start(); + } + return status; + } + +gint QTMSDTMF::Stop() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iDtmf) + { + status = iDtmf->Stop(); + } + return status; + } + +gint QTMSDTMF::SetTone(GString* string) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iDtmf) + { + status = iDtmf->SetTone(string); + } + return status; + } + +gint QTMSDTMF::ContinueDTMFStringSending(gboolean aContinue) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iDtmf) + { + status = iDtmf->ContinueDTMFStringSending(aContinue); + } + return status; + } diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsdtmfimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsdtmfimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,97 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include "tmsutility.h" +#include "qtmsdtmfimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSDTMFImpl::QTMSDTMFImpl() + { + } + +QTMSDTMFImpl::~QTMSDTMFImpl() + { + RemoveObserver(*this); + } + +gint QTMSDTMFImpl::Create(QTMSDTMF*& qdtmf, TMS::TMSDTMF*& tmsdtmf) + { + gint ret(TMS_RESULT_INSUFFICIENT_MEMORY); + QTMSDTMFImpl* self = new QTMSDTMFImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iDtmf = tmsdtmf; + ret = self->AddObserver(*self, NULL); + } + qdtmf = self; + return ret; + } + +gint QTMSDTMFImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSDTMFImpl::AddObserver(TMS::TMSDTMFObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iDtmf) + { + ret = iDtmf->AddObserver(obsrvr, user_data); + } + return ret; + } + +gint QTMSDTMFImpl::RemoveObserver(TMS::TMSDTMFObserver& obsrvr) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iDtmf) + { + ret = iDtmf->RemoveObserver(obsrvr); + } + return ret; + } + +void QTMSDTMFImpl::DTMFEvent(const TMS::TMSDTMF& /*dtmf*/, + TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSDTMF::DTMFEvent(static_cast (*this), qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmseffect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmseffect.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,34 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include "qtmseffectimpl.h" +#include "qtmseffect.h" +#include "qtmswrapperexport.h" + + +void QTMSEffect::Construct(QTMSEffectImpl* impl) + { + QTMSeffectimpl = impl; + } + +QTMSEffect::QTMSEffect(void) + { + } + + QTMSEffect::~QTMSEffect(void) + { + } diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsfactory.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,266 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include "qtmswrapperexport.h" +#include "qtmsfactoryimpl.h" + +using namespace QTMS; + +QTMSFactory::QTMSFactory() + { + impl = new QTMSFactoryImpl(); + } + +QTMSFactory::~QTMSFactory() + { + delete impl; + } + +gint QTMSFactory::CreateFactory(QTMSFactory*& tmsfactory, QTMSVer& /*ver*/) + { + QTMSFactory* self = new QTMSFactory(); + tmsfactory = self; + return QTMS_RESULT_SUCCESS; + } + +gint QTMSFactory::CreateCall(QTMSCallType ctype, QTMSCall*& tmscall, + guint ctxid) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateCall(ctype, tmscall, ctxid); + } + return status; + } + +gint QTMSFactory::DeleteCall(QTMSCall*& tmscall) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteCall(tmscall); + } + return status; + } + +gint QTMSFactory::IsCallTypeSupported(QTMSCallType ctype, gboolean& flag) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->IsCallTypeSupported(ctype, flag); + } + return status; + } + +gint QTMSFactory::GetSupportedFormats(const QTMSStreamType strmtype, + FormatVector& fmtlist) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->GetSupportedFormats(strmtype, fmtlist); + } + return status; + } + +gint QTMSFactory::CreateFormat(QTMSFormatType qfmttype, QTMSFormat*& qfmt) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateFormat(qfmttype, qfmt); + } + return status; + + } + +gint QTMSFactory::DeleteFormat(QTMSFormat*& qfmt) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteFormat(qfmt); + } + return status; + } + +gint QTMSFactory::CreateEffect(QTMSEffectType tmseffecttype, + QTMSEffect*& tmseffect) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateEffect(tmseffecttype, tmseffect); + } + return status; + } + +gint QTMSFactory::DeleteEffect(QTMSEffect*& qtmseffect) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + impl->DeleteEffect(qtmseffect); + } + return status; + } + +gint QTMSFactory::CreateBuffer(QTMSBufferType buffertype, guint size, + QTMSBuffer*& qbuffer) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateBuffer(buffertype, size, qbuffer); + } + return status; + } + +gint QTMSFactory::DeleteBuffer(QTMSBuffer*& qbuffer) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteBuffer(qbuffer); + } + return status; + } + +gint QTMSFactory::CreateSource(QTMSSourceType srctype, QTMSSource*& qtmssrc) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateSource(srctype, qtmssrc); + } + return status; + } + +gint QTMSFactory::DeleteSource(QTMSSource*& qtmssrc) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteSource(qtmssrc); + } + return status; + } + +gint QTMSFactory::CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateSink(sinktype, qtmssink); + } + return status; + } + +gint QTMSFactory::DeleteSink(QTMSSink*& qtmssink) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteSink(qtmssink); + } + return status; + } + +gint QTMSFactory::CreateGlobalRouting(QTMSGlobalRouting*& globalrouting) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateGlobalRouting(globalrouting); + } + return status; + } + +gint QTMSFactory::DeleteGlobalRouting(QTMSGlobalRouting*& globrouting) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteGlobalRouting(globrouting); + } + return status; + } + +gint QTMSFactory::CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& dtmf) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateDTMF(streamtype, dtmf); + } + return status; + } + +gint QTMSFactory::DeleteDTMF(QTMSDTMF*& dtmf) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteDTMF(dtmf); + } + return status; + } + +gint QTMSFactory::CreateRingTonePlayer(QTMSRingTone*& rt) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateRingTonePlayer(rt); + } + return status; + } + +gint QTMSFactory::DeleteRingTonePlayer(QTMSRingTone*& rt) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteRingTonePlayer(rt); + } + return status; + } + +gint QTMSFactory::CreateInbandTonePlayer(QTMSInbandTone*& inbandtone) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->CreateInbandTonePlayer(inbandtone); + } + return status; + } + +gint QTMSFactory::DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (impl) + { + status = impl->DeleteInbandTonePlayer(inbandtone); + } + return status; + } diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsfactoryimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsfactoryimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,612 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "tmsutility.h" +#include "qtmscallimpl.h" +#include "qtmsglobalroutingimpl.h" +#include "qtmsglobalvoleffectimpl.h" +#include "qtmsglobalgaineffectimpl.h" +#include "qtmsvolumeeffectimpl.h" +#include "qtmsgaineffectimpl.h" +#include "qtmsclientsinkimpl.h" +#include "qtmsmodemsinkimpl.h" +#include "qtmsspeakersinkimpl.h" +#include "qtmsclientsourceimpl.h" +#include "qtmsmodemsourceimpl.h" +#include "qtmsmicsourceimpl.h" +#include "qtmsringtoneimpl.h" +#include "qtmsdtmfimpl.h" +#include "qtmsinbandtoneimpl.h" +#include "qtmsfactoryimpl.h" +#include "qtmspcmimpl.h" +#include "qtmsamrimpl.h" +#include "qtmsg711impl.h" +#include "qtmsg729impl.h" +#include "qtmsilbcimpl.h" +#include "qtmsmembuffer.h" + +using namespace QTMS; +using namespace TMS; + +QTMSFactoryImpl::QTMSFactoryImpl() + { + TRACE_PRN_FN_ENT; + TMSVer* ver = NULL; + TMSFactory::CreateFactory(iFactory, *ver); + TRACE_PRN_FN_EXT; + } + +QTMSFactoryImpl::~QTMSFactoryImpl() + { + TRACE_PRN_FN_ENT; + delete iFactory; + TRACE_PRN_FN_EXT; + } + +gint QTMSFactoryImpl::CreateCall(QTMSCallType ctype, QTMSCall*& qtmscall, + guint /*ctxid*/) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMSCall* tmscall(NULL); + if (iFactory) + { + ret = iFactory->CreateCall((TMSCallType) ctype, tmscall); + + if (ret == TMS_RESULT_SUCCESS) + { + ret = QTMSCallImpl::Create(qtmscall, tmscall); + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteCall(QTMSCall*& qtmscall) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + delete qtmscall; + qtmscall = NULL; + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::IsCallTypeSupported(QTMSCallType ctype, gboolean& flag) + { + gint ret(QTMS_RESULT_SUCCESS); + + switch (ctype) + { + case QTMS_CALL_CS: + case QTMS_CALL_IP: + flag = ETrue; + break; + case QTMS_CALL_ECS: //from TB 10.1 + default: + flag = EFalse; + break; + } + return ret; + } + +gint QTMSFactoryImpl::GetSupportedFormats(const QTMSStreamType strmtype, + FormatVector& fmtlist) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + TMS::FormatVector tmsfmtlist; + if (iFactory) + { + ret = iFactory->GetSupportedFormats(strmtype,tmsfmtlist); + } + + std::vector::iterator itCodecs = tmsfmtlist.begin(); + TMSFormatType fmttype; + for (; itCodecs < tmsfmtlist.end(); itCodecs++) + { + (*itCodecs)->GetType(fmttype); + QTMSFormat* qtmsfmt(NULL); + switch (fmttype) + { + case QTMS_FORMAT_PCM: + ret = QTMSPCMFormatImpl::Create(qtmsfmt,*itCodecs); + break; + case QTMS_FORMAT_AMR: + ret = QTMSAMRFormatImpl::Create(qtmsfmt,*itCodecs); + break; + case QTMS_FORMAT_G711: + ret = QTMSG711FormatImpl::Create(qtmsfmt,*itCodecs); + break; + case QTMS_FORMAT_G729: + ret = QTMSG729FormatImpl::Create(qtmsfmt,*itCodecs); + break; + case QTMS_FORMAT_ILBC: + ret = QTMSILBCFormatImpl::Create(qtmsfmt,*itCodecs); + break; + default: + break; + } + + if (qtmsfmt) + { + fmtlist.push_back(qtmsfmt); + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateFormat(QTMSFormatType fmttype, + QTMSFormat*& qtmsfmt) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + TMSFormat* tmsformat(NULL); + + if (iFactory) + { + ret = iFactory->CreateFormat((TMSFormatType) fmttype, tmsformat); + + if (ret == TMS_RESULT_SUCCESS) + { + switch (fmttype) + { + case QTMS_FORMAT_PCM: + ret = QTMSPCMFormatImpl::Create(qtmsfmt, tmsformat); + break; + case QTMS_FORMAT_AMR: + ret = QTMSAMRFormatImpl::Create(qtmsfmt, tmsformat); + break; + case QTMS_FORMAT_G711: + ret = QTMSG711FormatImpl::Create(qtmsfmt, tmsformat); + break; + case QTMS_FORMAT_G729: + ret = QTMSG729FormatImpl::Create(qtmsfmt, tmsformat); + break; + case QTMS_FORMAT_ILBC: + ret = QTMSILBCFormatImpl::Create(qtmsfmt, tmsformat); + break; + default: + ret = QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED; + break; + } + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteFormat(QTMSFormat*& qtmsfmt) + { + TRACE_PRN_FN_ENT; + __ASSERT_ALWAYS(qtmsfmt, PANIC(QTMS_RESULT_NULL_ARGUMENT)); + + gint ret(QTMS_RESULT_SUCCESS); + QTMSFormatType fmttype; + ret = qtmsfmt->GetType(fmttype); + switch (fmttype) + { + case QTMS_FORMAT_PCM: + delete (static_cast(qtmsfmt)); + qtmsfmt = NULL; + break; + case QTMS_FORMAT_AMR: + delete (static_cast(qtmsfmt)); + qtmsfmt = NULL; + break; + case QTMS_FORMAT_G711: + delete (static_cast(qtmsfmt)); + qtmsfmt = NULL; + break; + case QTMS_FORMAT_G729: + delete (static_cast(qtmsfmt)); + qtmsfmt = NULL; + break; + case QTMS_FORMAT_ILBC: + delete (static_cast(qtmsfmt)); + qtmsfmt = NULL; + break; + default: + ret = QTMS_RESULT_FORMAT_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateEffect(QTMSEffectType tmseffecttype, + QTMSEffect*& qtmseffect) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + TMSEffect* tmseffect(NULL); + + if (iFactory) + { + ret = iFactory->CreateEffect((TMSEffectType) tmseffecttype, tmseffect); + + if (ret == TMS_RESULT_SUCCESS) + { + switch (tmseffecttype) + { + case TMS_EFFECT_VOLUME: + ret = QTMSVolumeEffectImpl::Create(qtmseffect, tmseffect); + break; + case TMS_EFFECT_GAIN: + ret = QTMSGainEffectImpl::Create(qtmseffect, tmseffect); + break; + case TMS_EFFECT_GLOBAL_VOL: + ret = QTMSGlobalVolEffectImpl::Create(qtmseffect, + tmseffect); + break; + case TMS_EFFECT_GLOBAL_GAIN: + ret = QTMSGlobalGainEffectImpl::Create(qtmseffect, + tmseffect); + break; + default: + ret = TMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED; + break; + } + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteEffect(QTMSEffect*& qtmseffect) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + + QTMSEffectType effecttype; + ret = qtmseffect->GetType(effecttype); + switch (effecttype) + { + case QTMS_EFFECT_VOLUME: + delete (static_cast (qtmseffect)); + qtmseffect = NULL; + break; + case QTMS_EFFECT_GAIN: + delete (static_cast (qtmseffect)); + qtmseffect = NULL; + break; + case QTMS_EFFECT_GLOBAL_VOL: + delete (static_cast (qtmseffect)); + qtmseffect = NULL; + break; + case QTMS_EFFECT_GLOBAL_GAIN: + delete (static_cast (qtmseffect)); + qtmseffect = NULL; + break; + default: + ret = QTMS_RESULT_EFFECT_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateBuffer(QTMSBufferType buffertype, guint size, + QTMSBuffer*& qtmsbuffer) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + TMSBuffer* tmsbuffer(NULL); + if (iFactory) + { + ret = iFactory->CreateBuffer(buffertype, size, tmsbuffer); + if (ret == TMS_RESULT_SUCCESS) + { + switch (buffertype) + { + case QTMS_BUFFER_MEMORY: + ret = QTMSMemBuffer::Create(size, qtmsbuffer, tmsbuffer); + break; + default: + ret = QTMS_RESULT_BUFFER_TYPE_NOT_SUPPORTED; + break; + } + } + } + + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteBuffer(QTMSBuffer*& qtmsbuffer) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + delete (static_cast (qtmsbuffer)); + qtmsbuffer = NULL; + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateSource(QTMSSourceType srctype, + QTMSSource*& qtmssrc) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMS::TMSSource* tmssource(NULL); + if (iFactory) + { + ret = iFactory->CreateSource(srctype, tmssource); + + if (ret == TMS_RESULT_SUCCESS) + { + switch (srctype) + { + case QTMS_SOURCE_CLIENT: + ret = QTMSClientSourceImpl::Create(qtmssrc, tmssource); + break; + case QTMS_SOURCE_MODEM: + ret = QTMSModemSourceImpl::Create(qtmssrc, tmssource); + break; + case QTMS_SOURCE_MIC: + ret = QTMSMicSourceImpl::Create(qtmssrc, tmssource); + break; + default: + ret = TMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED; + break; + } + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteSource(QTMSSource*& qtmssrc) + { + TRACE_PRN_FN_ENT; + __ASSERT_ALWAYS(qtmssrc, PANIC(QTMS_RESULT_NULL_ARGUMENT)); + + gint ret(QTMS_RESULT_SUCCESS); + QTMSSourceType sourcetype; + ret = qtmssrc->GetType(sourcetype); + switch (sourcetype) + { + case QTMS_SOURCE_CLIENT: + delete (static_cast(qtmssrc)); + qtmssrc = NULL; + break; + case QTMS_SOURCE_MODEM: + { + delete (static_cast(qtmssrc)); + qtmssrc = NULL; + } + break; + case TMS_SOURCE_MIC: + { + delete (static_cast(qtmssrc)); + qtmssrc = NULL; + } + break; + default: + ret = TMS_RESULT_SOURCE_TYPE_NOT_SUPPORTED; + break; + } + + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateSink(QTMSSinkType sinktype, QTMSSink*& qtmssink) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMS::TMSSink* tmssink(NULL); + + if (iFactory) + { + ret = iFactory->CreateSink(sinktype, tmssink); + + if (ret == TMS_RESULT_SUCCESS) + { + switch (sinktype) + { + case QTMS_SINK_CLIENT: + ret = QTMSClientSinkImpl::Create(qtmssink, tmssink); + break; + case QTMS_SINK_MODEM: + ret = QTMSModemSinkImpl::Create(qtmssink, tmssink); + break; + case QTMS_SINK_SPEAKER: + ret = QTMSSpeakerSinkImpl::Create(qtmssink, tmssink); + break; + default: + ret = TMS_RESULT_SINK_TYPE_NOT_SUPPORTED; + break; + } + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteSink(QTMSSink*& qtmssink) + { + TRACE_PRN_FN_ENT; + __ASSERT_ALWAYS(qtmssink, PANIC(QTMS_RESULT_NULL_ARGUMENT)); + + gint ret(QTMS_RESULT_SUCCESS); + QTMSSinkType sinktype; + ret = qtmssink->GetType(sinktype); + switch (sinktype) + { + case QTMS_SINK_CLIENT: + { + delete (static_cast(qtmssink)); + qtmssink = NULL; + } + break; + case QTMS_SINK_MODEM: + { + delete (static_cast(qtmssink)); + qtmssink = NULL; + } + break; + case QTMS_SINK_SPEAKER: + { + delete (static_cast(qtmssink)); + qtmssink = NULL; + } + break; + default: + ret = QTMS_RESULT_SINK_TYPE_NOT_SUPPORTED; + break; + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateGlobalRouting(QTMSGlobalRouting*& qrouting) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMS::TMSGlobalRouting* tmsrouting(NULL); + if (iFactory) + { + ret = iFactory->CreateGlobalRouting(tmsrouting); + + if (ret == TMS_RESULT_SUCCESS) + { + ret = QTMSGlobalRoutingImpl::Create(qrouting, tmsrouting); + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteGlobalRouting(QTMSGlobalRouting*& globalrouting) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + delete (static_cast(globalrouting)); + globalrouting = NULL; + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateDTMF(QTMSStreamType streamtype, QTMSDTMF*& qdtmf) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMS::TMSDTMF* tmsdtmf = NULL; + + if (iFactory) + { + ret = iFactory->CreateDTMF(streamtype, tmsdtmf); + + if (ret == TMS_RESULT_SUCCESS) + { + ret = QTMSDTMFImpl::Create(qdtmf, tmsdtmf); + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteDTMF(QTMSDTMF*& dtmf) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + delete (static_cast(dtmf)); + dtmf = NULL; + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateRingTonePlayer(QTMSRingTone*& rt) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMS::TMSRingTone* tmsrt = NULL; + + if (iFactory) + { + ret = iFactory->CreateRingTonePlayer(tmsrt); + + if (ret == TMS_RESULT_SUCCESS) + { + ret = QTMSRingToneImpl::Create(rt, tmsrt); + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteRingTonePlayer(QTMSRingTone*& rt) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + delete (static_cast(rt)); + rt = NULL; + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::CreateInbandTonePlayer(QTMSInbandTone*& qinbandtone) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + TMS::TMSInbandTone* tmsinband = NULL; + if (iFactory) + { + ret = iFactory->CreateInbandTonePlayer(tmsinband); + + if (ret == TMS_RESULT_SUCCESS) + { + ret = QTMSInbandToneImpl::Create(qinbandtone, tmsinband); + } + } + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSFactoryImpl::DeleteInbandTonePlayer(QTMSInbandTone*& inbandtone) + { + TRACE_PRN_FN_ENT; + gint ret(QTMS_RESULT_SUCCESS); + delete (static_cast(inbandtone)); + inbandtone = NULL; + TRACE_PRN_FN_EXT; + return ret; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsformat.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsformat.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,73 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include + +using namespace QTMS; + +QTMSFormat::QTMSFormat() : + iFormat(NULL) + { + } + +QTMSFormat::~QTMSFormat() + { + delete iFormat; + } + +gint QTMSFormat::GetSupportedBitRates(BitRateVector& aVector) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetSupportedBitRates(aVector); + } + return status; + } + +gint QTMSFormat::SetBitRate(const guint aBitrate) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->SetBitRate(aBitrate); + } + return status; + } + +gint QTMSFormat::GetBitRate(guint& aBitrate) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetBitRate(aBitrate); + } + return status; + } + +gint QTMSFormat::GetType(QTMSFormatType& fmttype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetType(fmttype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsg711.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsg711.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,112 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include + +using namespace QTMS; +using namespace TMS; + +QTMSG711Format::QTMSG711Format() + { + } + +QTMSG711Format::~QTMSG711Format() + { + } + +gint QTMSG711Format::SetMode(const QTMSG711CodecMode aMode) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetMode(aMode); + } + return status; + } + +gint QTMSG711Format::GetMode(QTMSG711CodecMode& aMode) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetMode(aMode); + } + return status; + } + +gint QTMSG711Format::SetCNG(const gboolean aCng) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetCNG(aCng); + } + return status; + } + +gint QTMSG711Format::GetCNG(gboolean& aCng) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetCNG(aCng); + } + return status; + } + +gint QTMSG711Format::SetPlc(const gboolean aPlc) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetPlc(aPlc); + } + return status; + } + +gint QTMSG711Format::GetPlc(gboolean& aPlc) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetPlc(aPlc); + } + return status; + } + +gint QTMSG711Format::SetVADMode(const gboolean aVad) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetVADMode(aVad); + } + return status; + } + +gint QTMSG711Format::GetVADMode(gboolean& aVad) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetVADMode(aVad); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsg711impl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsg711impl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,80 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsg711impl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSG711FormatImpl::QTMSG711FormatImpl() + { + } + +QTMSG711FormatImpl::~QTMSG711FormatImpl() + { + } + +gint QTMSG711FormatImpl::Create(QTMSFormat*& qformat, + TMS::TMSFormat*& tmsformat) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSG711FormatImpl* self = new QTMSG711FormatImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iFormat = tmsformat; + } + qformat = self; + return ret; + } + +gint QTMSG711FormatImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSG711FormatImpl::GetFormat(TMS::TMSFormat*& fmt) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iFormat) + { + fmt = iFormat; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +gint QTMSG711FormatImpl::GetType(QTMSFormatType& fmttype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetType(fmttype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsg729.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsg729.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,53 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" + +using namespace QTMS; +using namespace TMS; + +QTMSG729Format::QTMSG729Format() + { + } + +QTMSG729Format::~QTMSG729Format() + { + } + +gint QTMSG729Format::SetVADMode(const gboolean aVad) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetVADMode(aVad); + } + return status; + } + +gint QTMSG729Format::GetVADMode(gboolean& aVad) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetVADMode(aVad); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsg729impl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsg729impl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,83 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsg729impl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSG729FormatImpl::QTMSG729FormatImpl() + { + } + +QTMSG729FormatImpl::~QTMSG729FormatImpl() + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +gint QTMSG729FormatImpl::Create(QTMSFormat*& qformat, + TMS::TMSFormat*& tmsformat) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSG729FormatImpl* self = new QTMSG729FormatImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iFormat = tmsformat; + } + qformat = self; + return ret; + } + +gint QTMSG729FormatImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSG729FormatImpl::GetFormat(TMS::TMSFormat*& fmt) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iFormat) + { + fmt = iFormat; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +gint QTMSG729FormatImpl::GetType(QTMSFormatType& fmttype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetType(fmttype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsgaineffect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsgaineffect.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,76 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsgaineffectimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGainEffect::QTMSGainEffect() : + iEffect(NULL) + { + } + +QTMSGainEffect::~QTMSGainEffect() + { + delete iEffect; + } + +gint QTMSGainEffect::GetLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetLevel(level); + } + return status; + } + +gint QTMSGainEffect::SetLevel(const guint level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->SetLevel(level); + } + return status; + } + +gint QTMSGainEffect::GetMaxLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetMaxLevel(level); + } + return status; + } + +gint QTMSGainEffect::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetType(sourcetype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsgaineffectimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsgaineffectimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,111 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsgaineffectimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGainEffectImpl::QTMSGainEffectImpl() + { + } + +QTMSGainEffectImpl::~QTMSGainEffectImpl() + { + RemoveObserver(*this); + } + +gint QTMSGainEffectImpl::Create(QTMSEffect*& qgain, TMS::TMSEffect*& tmsgain) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSGainEffectImpl* self = new QTMSGainEffectImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iEffect = tmsgain; + ret = self->AddObserver(*self, NULL); + } + qgain = self; + return ret; + } + +gint QTMSGainEffectImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSGainEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->AddObserver(obsrvr, + user_data); + } + return ret; + } + +gint QTMSGainEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->RemoveObserver(obsrvr); + } + return ret; + } + +gint QTMSGainEffectImpl::GetEffect(TMS::TMSEffect*& tmseffect) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iEffect) + { + tmseffect = iEffect; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +void QTMSGainEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/, + TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSGainEffect::EffectsEvent(static_cast (*this), + qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsglobalgaineffect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsglobalgaineffect.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,78 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsglobalgaineffectimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGlobalGainEffect::QTMSGlobalGainEffect() : + iEffect(NULL) + { + } + +QTMSGlobalGainEffect::~QTMSGlobalGainEffect() + { + delete (static_cast(iEffect)); + } + +gint QTMSGlobalGainEffect::GetLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetLevel(level); + } + return status; + } + +gint QTMSGlobalGainEffect::SetLevel(const guint level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->SetLevel(level); + } + return status; + } + +gint QTMSGlobalGainEffect::GetMaxLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetMaxLevel( + level); + } + return status; + } + +gint QTMSGlobalGainEffect::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetType( + sourcetype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsglobalgaineffectimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsglobalgaineffectimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,102 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsglobalgaineffectimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGlobalGainEffectImpl::QTMSGlobalGainEffectImpl() + { + } + +QTMSGlobalGainEffectImpl::~QTMSGlobalGainEffectImpl() + { + RemoveObserver(*this); + } + +gint QTMSGlobalGainEffectImpl::Create(QTMSEffect*& qglobalgain, + TMS::TMSEffect*& tmsglobalgain) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSGlobalGainEffectImpl* self = new QTMSGlobalGainEffectImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iEffect = tmsglobalgain; + ret = self->AddObserver(*self, NULL); + } + qglobalgain = self; + return ret; + } + +gint QTMSGlobalGainEffectImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSGlobalGainEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->AddObserver(obsrvr, + user_data); + } + return ret; + } + +gint QTMSGlobalGainEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->RemoveObserver( + obsrvr); + } + return ret; + } + +void QTMSGlobalGainEffectImpl::EffectsEvent( + const TMS::TMSEffect& /*tmseffect*/, TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSGlobalGainEffect::EffectsEvent( + static_cast (*this), qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsglobalrouting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsglobalrouting.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,76 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsglobalroutingimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGlobalRouting::QTMSGlobalRouting() : + iRouting(NULL) + { + } + +QTMSGlobalRouting::~QTMSGlobalRouting() + { + delete iRouting; + } + +gint QTMSGlobalRouting::SetOutput(const QTMSAudioOutput output) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iRouting) + { + status = iRouting->SetOutput(output); + } + return status; + } + +gint QTMSGlobalRouting::GetOutput(QTMSAudioOutput& output) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iRouting) + { + status = iRouting->GetOutput(output); + } + return status; + } + +gint QTMSGlobalRouting::GetPreviousOutput(QTMSAudioOutput& output) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iRouting) + { + status = iRouting->GetPreviousOutput(output); + } + return status; + } + +gint QTMSGlobalRouting::GetAvailableOutputs(OutputVector& outputs) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iRouting) + { + status = iRouting->GetAvailableOutputs(outputs); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsglobalroutingimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsglobalroutingimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,104 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsglobalroutingimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGlobalRoutingImpl::QTMSGlobalRoutingImpl() + { + } + +QTMSGlobalRoutingImpl::~QTMSGlobalRoutingImpl() + { + RemoveObserver(*this); + } + +gint QTMSGlobalRoutingImpl::Create(QTMSGlobalRouting*& qrouting, + TMS::TMSGlobalRouting*& tmsrouting) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSGlobalRoutingImpl* self = new QTMSGlobalRoutingImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iRouting = tmsrouting; + ret = self->AddObserver(*self, NULL); + } + qrouting = self; + return ret; + } + +gint QTMSGlobalRoutingImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSGlobalRoutingImpl::AddObserver(TMS::TMSGlobalRoutingObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iRouting) + { + ret = iRouting->AddObserver(obsrvr, user_data); + } + return ret; + } + +gint QTMSGlobalRoutingImpl::RemoveObserver( + TMS::TMSGlobalRoutingObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iRouting) + { + ret = iRouting->RemoveObserver(obsrvr); + } + return ret; + } + +void QTMSGlobalRoutingImpl::GlobalRoutingEvent( + const TMS::TMSGlobalRouting& /*routing*/, TMS::TMSSignalEvent event, + TMS::TMSAudioOutput output) + { + QTMSSignalEvent qevent; + QTMSAudioOutput qoutput; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + qoutput = output; + + emit QTMS::QTMSGlobalRouting::GlobalRoutingEvent( + static_cast (*this), qevent, qoutput); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsglobalvoleffect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsglobalvoleffect.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,78 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsglobalvoleffectimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGlobalVolEffect::QTMSGlobalVolEffect() : + iEffect(NULL) + { + } + +QTMSGlobalVolEffect::~QTMSGlobalVolEffect() + { + delete (static_cast(iEffect)); + } + +gint QTMSGlobalVolEffect::GetLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetLevel(level); + } + return status; + } + +gint QTMSGlobalVolEffect::SetLevel(const guint level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->SetLevel(level); + } + return status; + } + +gint QTMSGlobalVolEffect::GetMaxLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetMaxLevel( + level); + } + return status; + } + +gint QTMSGlobalVolEffect::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetType( + sourcetype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsglobalvoleffectimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsglobalvoleffectimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,102 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsglobalvoleffectimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSGlobalVolEffectImpl::QTMSGlobalVolEffectImpl() + { + } + +QTMSGlobalVolEffectImpl::~QTMSGlobalVolEffectImpl() + { + RemoveObserver(*this); + } + +gint QTMSGlobalVolEffectImpl::Create(QTMSEffect*& qglobalvol, + TMS::TMSEffect*& tmsglobalvol) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSGlobalVolEffectImpl* self = new QTMSGlobalVolEffectImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iEffect = tmsglobalvol; + ret = self->AddObserver(*self, NULL); + } + qglobalvol = self; + return ret; + } + +gint QTMSGlobalVolEffectImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSGlobalVolEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->AddObserver(obsrvr, + user_data); + } + return ret; + } + +gint QTMSGlobalVolEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->RemoveObserver( + obsrvr); + } + return ret; + } + +void QTMSGlobalVolEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/, + TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSGlobalVolEffect::EffectsEvent(static_cast + (*this), qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsilbc.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsilbc.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,93 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" + +using namespace QTMS; +using namespace TMS; + +QTMSILBCFormat::QTMSILBCFormat() + { + } + +QTMSILBCFormat::~QTMSILBCFormat() + { + } + +gint QTMSILBCFormat::SetMode(const QTMSG711CodecMode aMode) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetMode(aMode); + } + return status; + } + +gint QTMSILBCFormat::GetMode(QTMSG711CodecMode& aMode) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetMode(aMode); + } + return status; + } + +gint QTMSILBCFormat::SetCNG(const gboolean aCng) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetCNG(aCng); + } + return status; + } + +gint QTMSILBCFormat::GetCNG(gboolean& aCng) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetCNG(aCng); + } + return status; + } + +gint QTMSILBCFormat::SetVADMode(const gboolean aVad) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->SetVADMode(aVad); + } + return status; + } + +gint QTMSILBCFormat::GetVADMode(gboolean& aVad) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = static_cast (iFormat)->GetVADMode(aVad); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsilbcimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsilbcimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,80 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsilbcimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSILBCFormatImpl::QTMSILBCFormatImpl() + { + } + +QTMSILBCFormatImpl::~QTMSILBCFormatImpl() + { + } + +gint QTMSILBCFormatImpl::Create(QTMSFormat*& qformat, + TMS::TMSFormat*& tmsformat) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSILBCFormatImpl* self = new QTMSILBCFormatImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iFormat = tmsformat; + } + qformat = self; + return ret; + } + +gint QTMSILBCFormatImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSILBCFormatImpl::GetFormat(TMS::TMSFormat*& fmt) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iFormat) + { + fmt = iFormat; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +gint QTMSILBCFormatImpl::GetType(QTMSFormatType& fmttype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetType(fmttype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsinbandtone.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsinbandtone.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,54 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmswrapperexport.h" +#include "qtmsinbandtoneimpl.h" + +using namespace QTMS; + +QTMSInbandTone::QTMSInbandTone(void) : + iInbandTone(NULL) + { + } + +QTMSInbandTone::~QTMSInbandTone(void) + { + delete iInbandTone; + } + +gint QTMSInbandTone::Start(QTMSInbandToneType inbandtonetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iInbandTone) + { + status = iInbandTone->Start(inbandtonetype); + } + return status; + } + +gint QTMSInbandTone::Stop() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iInbandTone) + { + status = iInbandTone->Stop(); + } + return status; + } + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsinbandtoneimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsinbandtoneimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,100 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsinbandtoneimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSInbandToneImpl::QTMSInbandToneImpl() + { + } + +QTMSInbandToneImpl::~QTMSInbandToneImpl() + { + RemoveObserver(*this); + } + +gint QTMSInbandToneImpl::Create(QTMSInbandTone*& qinband, + TMS::TMSInbandTone*& tmsinband) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSInbandToneImpl* self = new QTMSInbandToneImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iInbandTone = tmsinband; + self->AddObserver(*self, NULL); + } + qinband = self; + return ret; + } + +gint QTMSInbandToneImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSInbandToneImpl::AddObserver(TMS::TMSInbandToneObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iInbandTone) + { + ret = iInbandTone->AddObserver(obsrvr, user_data); + } + return ret; + } + +gint QTMSInbandToneImpl::RemoveObserver(TMS::TMSInbandToneObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iInbandTone) + { + ret = iInbandTone->RemoveObserver(obsrvr); + } + return ret; + } + +void QTMSInbandToneImpl::InbandToneEvent( + const TMS::TMSInbandTone& /*inbandtone*/, TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSInbandTone::InbandToneEvent( + static_cast (*this), qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmembuffer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmembuffer.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,155 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsmembuffer.h" +#include "tmsutility.h" + +using namespace QTMS; +using namespace TMS; + +QTMSMemBuffer::QTMSMemBuffer() + { + } + +QTMSMemBuffer::~QTMSMemBuffer() + { + delete iBuffer; + } + +gint QTMSMemBuffer::Create(guint size, QTMSBuffer*& qbuffer, + TMS::TMSBuffer*& tmsbuffer) + { + TRACE_PRN_FN_ENT; + gint ret(TMS_RESULT_INSUFFICIENT_MEMORY); + QTMSMemBuffer* self = new QTMSMemBuffer(); + if (self) + { + ret = self->PostConstruct(); + if (ret != TMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iBuffer = tmsbuffer; + } + qbuffer = self; + TRACE_PRN_FN_EXT; + return ret; + } + +gint QTMSMemBuffer::PostConstruct() + { + gint ret(TMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSMemBuffer::GetType(QTMSBufferType& buffertype) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iBuffer) + { + ret = iBuffer->GetType(buffertype); + } + return ret; + } + +/** + * Gets the timestamp on the Buffer so that the framework can + * determine the time at which this buffer has to be rendered + * by the output device sink. + * + * @param ts timestamp in microseconds + * + */ +gint QTMSMemBuffer::GetTimeStamp(guint64& ts) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iBuffer) + { + ret = iBuffer->GetTimeStamp(ts); + } + return ret; + } + +/** + * Sets the timestamp on the Buffer so that the framework can + * determine the time at which this buffer has to be rendered + * by the output device sink. + * + * @param ts timestamp in milliseconds + * + */ +gint QTMSMemBuffer::SetTimeStamp(const guint64 ts) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iBuffer) + { + ret = iBuffer->SetTimeStamp(ts); + } + return ret; + } + +/** + * Gets the size of data in the buffer specified by the client. + * + * @param size size of data in bytes + * + */ +gint QTMSMemBuffer::GetDataSize(guint& size) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iBuffer) + { + ret = iBuffer->GetDataSize(size); + } + return ret; + } + +/** + * Sets the size of data in the buffer after the client fill it. + * + * @param size size of data in bytes + * + */ +gint QTMSMemBuffer::SetDataSize(const guint size) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iBuffer) + { + ret = iBuffer->SetDataSize(size); + } + return ret; + } + +/** + * Gets the pointer to the memory location associated with this + * buffer where the data is stored. + * + * @param bufptr ptr to the data stored in the buffer. + * + */ +gint QTMSMemBuffer::GetDataPtr(guint8*& bufptr) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iBuffer) + { + ret = iBuffer->GetDataPtr(bufptr); + } + return ret; + } diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmicsource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmicsource.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,47 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsmicsourceimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSMicSource::QTMSMicSource() : + iSource(NULL) + { + } + +QTMSMicSource::~QTMSMicSource() + { + delete (static_cast (iSource)); + } + +gint QTMSMicSource::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + //status = iSource->GetType(sourcetype); + status = static_cast (iSource)->GetType(sourcetype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmicsourceimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmicsourceimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,68 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsmicsourceimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSMicSourceImpl::QTMSMicSourceImpl() + { + } + +QTMSMicSourceImpl::~QTMSMicSourceImpl() + { + } + +gint QTMSMicSourceImpl::Create(QTMSSource*& qsource, TMS::TMSSource*& tmssource) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSMicSourceImpl* self = new QTMSMicSourceImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iSource = tmssource; + } + qsource = self; + return ret; + } + +gint QTMSMicSourceImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSMicSourceImpl::GetSource(TMS::TMSSource*& tmssource) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + tmssource = iSource; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmodemsink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmodemsink.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,47 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsmodemsinkimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSModemSink::QTMSModemSink() : + iSink(NULL) + { + } + +QTMSModemSink::~QTMSModemSink() + { + delete (static_cast(iSink)); + } + +gint QTMSModemSink::GetType(QTMSSinkType& sinktype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSink) + { + //status = iSink->GetType(sinktype); + status = static_cast (iSink)->GetType(sinktype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmodemsinkimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmodemsinkimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,68 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsmodemsinkimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSModemSinkImpl::QTMSModemSinkImpl() + { + } + +QTMSModemSinkImpl::~QTMSModemSinkImpl() + { + } + +gint QTMSModemSinkImpl::Create(QTMSSink*& qsink,TMS::TMSSink*& tmssink) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSModemSinkImpl* self = new QTMSModemSinkImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iSink = tmssink; + } + qsink = self; + return ret; + } + +gint QTMSModemSinkImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSModemSinkImpl::GetSink(TMS::TMSSink*& tmssink) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSink) + { + tmssink = iSink; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmodemsource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmodemsource.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,45 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include + +using namespace QTMS; +using namespace TMS; + +QTMSModemSource::QTMSModemSource() : + iSource(NULL) + { + } + +QTMSModemSource::~QTMSModemSource() + { + delete (static_cast (iSource)); + } + +gint QTMSModemSource::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + //status = iSource->GetType(sourcetype); + status = static_cast (iSource)->GetType(sourcetype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsmodemsourceimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsmodemsourceimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,69 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsmodemsourceimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSModemSourceImpl::QTMSModemSourceImpl() + { + } + +QTMSModemSourceImpl::~QTMSModemSourceImpl() + { + } + +gint QTMSModemSourceImpl::Create(QTMSSource*& qsource, + TMS::TMSSource*& tmssource) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSModemSourceImpl* self = new QTMSModemSourceImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iSource = tmssource; + } + qsource = self; + return ret; + } + +gint QTMSModemSourceImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSModemSourceImpl::GetSource(TMS::TMSSource*& tmssource) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSource) + { + tmssource = iSource; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmspcm.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmspcm.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,30 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include + +using namespace QTMS; + +QTMSPCMFormat::QTMSPCMFormat() + { + } + +QTMSPCMFormat::~QTMSPCMFormat() + { + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmspcmimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmspcmimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,82 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmspcmimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSPCMFormatImpl::QTMSPCMFormatImpl() + { + } + +QTMSPCMFormatImpl::~QTMSPCMFormatImpl() + { + TRACE_PRN_FN_ENT; + TRACE_PRN_FN_EXT; + } + +gint QTMSPCMFormatImpl::Create(QTMSFormat*& qformat, TMS::TMSFormat*& tmsformat) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSPCMFormatImpl* self = new QTMSPCMFormatImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iFormat = tmsformat; + } + qformat = self; + return ret; + } + +gint QTMSPCMFormatImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSPCMFormatImpl::GetFormat(TMS::TMSFormat*& fmt) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iFormat) + { + fmt = iFormat; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +gint QTMSPCMFormatImpl::GetType(QTMSFormatType& fmttype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iFormat) + { + status = iFormat->GetType(fmttype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsringtone.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsringtone.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,94 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsringtoneimpl.h" + +using namespace QTMS; + +QTMSRingTone::QTMSRingTone() : + iRingTone(NULL) + { + } + +QTMSRingTone::~QTMSRingTone() + { + delete iRingTone; + } + +gint QTMSRingTone::Init(const QTMSRingToneType type, GString* str, GString* tts) + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + status = iRingTone->Init(type, str, tts); + } + return status; + } + +gint QTMSRingTone::Deinit() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + status = iRingTone->Deinit(); + } + return status; + } + +gint QTMSRingTone::Play() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + status = iRingTone->Play(); + } + return status; + } + +gint QTMSRingTone::Stop() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + status = iRingTone->Stop(); + } + return status; + } + +gint QTMSRingTone::Pause() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + status = iRingTone->Pause(); + } + return status; + } + +gint QTMSRingTone::Mute() + { + gint status(TMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + status = iRingTone->Mute(); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsringtoneimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsringtoneimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,96 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "tmsutility.h" +#include "qtmsringtoneimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSRingToneImpl::QTMSRingToneImpl() + { + } + +QTMSRingToneImpl::~QTMSRingToneImpl() + { + RemoveObserver(*this); + } + +gint QTMSRingToneImpl::Create(QTMSRingTone*& qrt, TMS::TMSRingTone*& tmsrt) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSRingToneImpl* self = new QTMSRingToneImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iRingTone = tmsrt; + ret = self->AddObserver(*self, NULL); + } + qrt = self; + return ret; + } + +gint QTMSRingToneImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSRingToneImpl::AddObserver(TMS::TMSRingToneObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + ret = iRingTone->AddObserver(obsrvr, user_data); + } + return ret; + } + +gint QTMSRingToneImpl::RemoveObserver(TMS::TMSRingToneObserver& obsrvr) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iRingTone) + { + ret = iRingTone->RemoveObserver(obsrvr); + } + return ret; + } + +void QTMSRingToneImpl::RingtoneEvent(const TMS::TMSRingTone& /*rt*/, + TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSRingTone::RingtoneEvent(static_cast (*this), + qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsspeakersink.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsspeakersink.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,45 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include + +using namespace QTMS; +using namespace TMS; + +QTMSSpeakerSink::QTMSSpeakerSink() : + iSink(NULL) + { + } + +QTMSSpeakerSink::~QTMSSpeakerSink() + { + delete (static_cast(iSink)); + } + +gint QTMSSpeakerSink::GetType(QTMSSinkType& sinktype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iSink) + { + //status = iSink->GetType(sinktype); //should be ok + status = static_cast (iSink)->GetType(sinktype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsspeakersinkimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsspeakersinkimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,69 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsspeakersinkimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSSpeakerSinkImpl::QTMSSpeakerSinkImpl() + { + } + +QTMSSpeakerSinkImpl::~QTMSSpeakerSinkImpl() + { + } + +gint QTMSSpeakerSinkImpl::Create(QTMSSink*& qsink, TMS::TMSSink*& tmssink) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSSpeakerSinkImpl* self = new QTMSSpeakerSinkImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iSink = tmssink; + } + qsink = self; + return ret; + } + +gint QTMSSpeakerSinkImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSSpeakerSinkImpl::GetSink(TMS::TMSSink*& tmssink) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iSink) + { + tmssink = iSink; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsstream.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsstream.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,411 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include +#include +#include "qtmsstreamimpl.h" +#include "qtmssource.h" +#include "qtmsclientsourceimpl.h" +#include "qtmsmodemsourceimpl.h" +#include "qtmsmicsourceimpl.h" +#include "qtmsclientsinkimpl.h" +#include "qtmsmodemsinkimpl.h" +#include "qtmsspeakersinkimpl.h" +#include "qtmspcmimpl.h" +#include "qtmsamrimpl.h" +#include "qtmsg711impl.h" +#include "qtmsg729impl.h" +#include "qtmsilbcimpl.h" +#include "qtmsvolumeeffectimpl.h" +#include "qtmsgaineffectimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSStream::QTMSStream(void) : + iStream(NULL) + { + } + +QTMSStream::~QTMSStream() + { + //delete iStream; + //delete (static_cast (iStream)); + } + +gint QTMSStream::AddSource(QTMSSource* qsource) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iStream && qsource) + { + QTMSSourceType qsrctype; + TMSSource* tmssource(NULL); + + qsource->GetType(qsrctype); + + switch (qsrctype) + { + case QTMS_SOURCE_CLIENT: + status = static_cast + (qsource)->GetSource(tmssource); + break; + case QTMS_SOURCE_MODEM: + status = static_cast + (qsource)->GetSource(tmssource); + break; + case QTMS_SOURCE_MIC: + status = static_cast + (qsource)->GetSource(tmssource); + break; + default: + break; + } + if (status == QTMS_RESULT_SUCCESS && tmssource) + { + status = iStream->AddSource(tmssource); + } + } + return status; + } + +gint QTMSStream::RemoveSource(QTMSSource* qsource) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iStream && qsource) + { + QTMSSourceType qsrctype; + TMSSource* tmssource(NULL); + + qsource->GetType(qsrctype); + + switch (qsrctype) + { + case QTMS_SOURCE_CLIENT: + status = static_cast + (qsource)->GetSource(tmssource); + break; + case QTMS_SOURCE_MODEM: + status = static_cast + (qsource)->GetSource(tmssource); + break; + case QTMS_SOURCE_MIC: + status = static_cast + (qsource)->GetSource(tmssource); + break; + default: + break; + } + if (status == QTMS_RESULT_SUCCESS && tmssource) + { + status = iStream->RemoveSource(tmssource); + } + } + + return status; + } + +gint QTMSStream::AddSink(QTMSSink* qsink) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iStream && qsink) + { + QTMSSinkType qsinktype; + TMSSink* tmssink(NULL); + + qsink->GetType(qsinktype); + + switch (qsinktype) + { + case QTMS_SINK_CLIENT: + status = static_cast + (qsink)->GetSink(tmssink); + break; + case QTMS_SINK_MODEM: + status = static_cast + (qsink)->GetSink(tmssink); + break; + case QTMS_SINK_SPEAKER: + status = static_cast + (qsink)->GetSink(tmssink); + break; + default: + break; + } + if (status == QTMS_RESULT_SUCCESS && tmssink) + { + status = iStream->AddSink(tmssink); + } + } + return status; + } + +gint QTMSStream::RemoveSink(QTMSSink* qsink) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iStream && qsink) + { + QTMSSinkType qsinktype; + TMSSink* tmssink(NULL); + + qsink->GetType(qsinktype); + + switch (qsinktype) + { + case QTMS_SINK_CLIENT: + status = static_cast + (qsink)->GetSink(tmssink); + break; + case QTMS_SINK_MODEM: + status = static_cast + (qsink)->GetSink(tmssink); + break; + case QTMS_SINK_SPEAKER: + status = static_cast + (qsink)->GetSink(tmssink); + break; + default: + break; + } + if (status == QTMS_RESULT_SUCCESS && tmssink) + { + status = iStream->RemoveSink(tmssink); + } + } + + return status; + } + +gint QTMSStream::SetFormat(QTMSFormat* qformat) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iStream && qformat) + { + QTMSFormatType fmttype; + TMSFormat* tmsformat(NULL); + qformat->GetType(fmttype); + switch (fmttype) + { + case QTMS_FORMAT_PCM: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_AMR: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_G711: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_G729: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_ILBC: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + default: + break; + } + + status = iStream->SetFormat(tmsformat); + } + return status; + } + +gint QTMSStream::ResetFormat(QTMSFormat* qformat) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iStream && qformat) + { + QTMSFormatType fmttype; + TMSFormat* tmsformat(NULL); + qformat->GetType(fmttype); + switch (fmttype) + { + case QTMS_FORMAT_PCM: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_AMR: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_G711: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_G729: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + case QTMS_FORMAT_ILBC: + status = static_cast + (qformat)->GetFormat(tmsformat); + break; + default: + break; + } + + status = iStream->ResetFormat(tmsformat); + } + return status; + } + +gint QTMSStream::AddEffect(QTMSEffect* qeffect) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream && qeffect) + { + QTMSEffectType effecttype; + TMSEffect* tmseffect(NULL); + qeffect->GetType(effecttype); + + switch (effecttype) + { + case QTMS_EFFECT_VOLUME: + status = static_cast + (qeffect)->GetEffect(tmseffect); + break; + case QTMS_EFFECT_GAIN: + status = static_cast + (qeffect)->GetEffect(tmseffect); + break; + default: + break; + } + status = iStream->AddEffect(tmseffect); + } + return status; + } + +gint QTMSStream::RemoveEffect(QTMSEffect* qeffect) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream && qeffect) + { + QTMSEffectType effecttype; + TMSEffect* tmseffect(NULL); + qeffect->GetType(effecttype); + + switch (effecttype) + { + case QTMS_EFFECT_VOLUME: + status = static_cast + (qeffect)->GetEffect(tmseffect); + break; + case QTMS_EFFECT_GAIN: + status = static_cast + (qeffect)->GetEffect(tmseffect); + break; + default: + break; + } + status = iStream->RemoveEffect(tmseffect); + } + return status; + } + +gint QTMSStream::GetState() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->GetState(); + } + return status; + } + +gint QTMSStream::GetStreamType() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->GetStreamType(); + } + return status; + } + +gint QTMSStream::GetStreamId() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->GetStreamId(); + } + return status; + } + +gint QTMSStream::Init() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->Init(); + } + return status; + } + +gint QTMSStream::Pause() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->Pause(); + } + return status; + } + +gint QTMSStream::Start() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->Start(); + } + return status; + } + +gint QTMSStream::Stop() + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iStream) + { + status = iStream->Stop(); + } + return status; + } + +void QTMSStream::Deinit() + { + if (iStream) + { + iStream->Deinit(); + } + } + diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsstreamimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsstreamimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,102 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include +#include "tmsutility.h" +#include "qtmsstreamimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSStreamImpl::QTMSStreamImpl() + { + } + +QTMSStreamImpl::~QTMSStreamImpl() + { + RemoveObserver(*this); + } + +gint QTMSStreamImpl::Create(QTMSCallType callType, QTMSStreamType stype, + QTMSStream*& qstrm, TMS::TMSStream*& tmsstrm) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSStreamImpl* self = new QTMSStreamImpl(); + if (self) + { + ret = self->PostConstruct(callType, stype, *self); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iStream = tmsstrm; + self->AddObserver(*self, NULL); + } + qstrm = self; + return ret; + } + +gint QTMSStreamImpl::PostConstruct(QTMSCallType /*callType*/, + QTMSStreamType /*stype*/, QTMSStream& /*parent*/) + { + gint status(QTMS_RESULT_SUCCESS); + return status; + } + +gint QTMSStreamImpl::AddObserver(TMS::TMSStreamObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iStream) + { + iStream->AddObserver(obsrvr, user_data); + } + + return ret; + } + +gint QTMSStreamImpl::RemoveObserver(TMS::TMSStreamObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iStream) + { + ret = iStream->RemoveObserver(obsrvr); + } + + return ret; + } + +void QTMSStreamImpl::TMSStreamEvent(const TMS::TMSStream& /*stream*/, + TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSStream::TMSStreamEvent(static_cast (*this), + qevent); + } diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsvolumeeffect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsvolumeeffect.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,76 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsvolumeeffectimpl.h" +#include "qtmswrapperexport.h" + +using namespace QTMS; +using namespace TMS; + +QTMSVolumeEffect::QTMSVolumeEffect() : + iEffect(NULL) + { + } + +QTMSVolumeEffect::~QTMSVolumeEffect() + { + delete (static_cast(iEffect)); + } + +gint QTMSVolumeEffect::GetLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetLevel(level); + } + return status; + } + +gint QTMSVolumeEffect::SetLevel(const guint level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->SetLevel(level); + } + return status; + } + +gint QTMSVolumeEffect::GetMaxLevel(guint& level) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetMaxLevel(level); + } + return status; + } + +gint QTMSVolumeEffect::GetType(QTMSSourceType& sourcetype) + { + gint status(QTMS_RESULT_UNINITIALIZED_OBJECT); + if (iEffect) + { + status = static_cast (iEffect)->GetType(sourcetype); + } + return status; + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 qtms/src/qtmsvolumeeffectimpl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qtms/src/qtmsvolumeeffectimpl.cpp Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,111 @@ +/* + * 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: QT Bindings for TMS + * + */ + +#include +#include +#include "qtmsvolumeeffectimpl.h" + +using namespace QTMS; +using namespace TMS; + +QTMSVolumeEffectImpl::QTMSVolumeEffectImpl() + { + } + +QTMSVolumeEffectImpl::~QTMSVolumeEffectImpl() + { + RemoveObserver(*this); + } + +gint QTMSVolumeEffectImpl::Create(QTMSEffect*& qvol, TMS::TMSEffect*& tmsvol) + { + gint ret(QTMS_RESULT_INSUFFICIENT_MEMORY); + QTMSVolumeEffectImpl* self = new QTMSVolumeEffectImpl(); + if (self) + { + ret = self->PostConstruct(); + if (ret != QTMS_RESULT_SUCCESS) + { + delete self; + self = NULL; + } + self->iEffect = tmsvol; + ret = self->AddObserver(*self, NULL); + } + qvol = self; + return ret; + } + +gint QTMSVolumeEffectImpl::PostConstruct() + { + gint ret(QTMS_RESULT_SUCCESS); + return ret; + } + +gint QTMSVolumeEffectImpl::AddObserver(TMS::TMSEffectObserver& obsrvr, + gpointer user_data) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->AddObserver(obsrvr, + user_data); + } + return ret; + } + +gint QTMSVolumeEffectImpl::RemoveObserver(TMS::TMSEffectObserver& obsrvr) + { + gint ret(QTMS_RESULT_SUCCESS); + + if (iEffect) + { + ret = static_cast (iEffect)->RemoveObserver(obsrvr); + } + return ret; + } + +gint QTMSVolumeEffectImpl::GetEffect(TMS::TMSEffect*& tmseffect) + { + gint ret(QTMS_RESULT_UNINITIALIZED_OBJECT); + + if (iEffect) + { + tmseffect = iEffect; + ret = QTMS_RESULT_SUCCESS; + } + return ret; + } + +void QTMSVolumeEffectImpl::EffectsEvent(const TMS::TMSEffect& /*tmseffect*/, + TMS::TMSSignalEvent event) + { + QTMSSignalEvent qevent; + + qevent.type = event.type; + qevent.reason = event.reason; + qevent.curr_state = event.curr_state; + qevent.prev_state = event.prev_state; + qevent.event_data = event.event_data; + qevent.user_data = event.user_data; + + emit QTMS::QTMSVolumeEffect::EffectsEvent( + static_cast (*this), qevent); + } + +// End of file diff -r 5daa7cafd16d -r 8ef777f529f0 sysdef_1_4_0.dtd --- a/sysdef_1_4_0.dtd Fri Feb 19 16:32:39 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 5daa7cafd16d -r 8ef777f529f0 sysdef_1_5_1.dtd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysdef_1_5_1.dtd Wed Jun 23 17:51:16 2010 +0100 @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +