void ForAllMatchingFiles(RFs& aSession, const TDesC& aWildName, const TDesC& aScanDir)
{
TFindFile file_finder(aSession);
CDir* file_list;
TInt err = file_finder.FindWildByDir(aWildName,aScanDir, file_list);
while (err==KErrNone)
{
TInt i;
for (i=0; i < Count(); i++)
{
TParse fullentry;
fullentry.Set((*file_list)[i].iName, &file_finder.File(),NULL);
// Do something with the full Symbian OS filename
DoOneFile(aSession, fullentry.FullName());
}
delete file_list;
err=file_finder.FindWild(file_list);
}
}
31 October 2005
Do action for all files in some directory on all drives in Symbian
26 October 2005
Pics of Symbian smartphone Nokia N71 prototype
More about writable descriptor
TPtr8 iWriteDes(iHeapDes->Des());
22 October 2005
How to convert TInt64 to string on Symbian?
TInt64 n = 123456789;
TBuf<64> tInt64;
tInt64.AppendNum( n );
tSomeString.Format( “I have this value - %S”, &tInt64 );
20 October 2005
How to assign writable descriptor in Symbian
HBufC8* iHeapDes = HBufC8::NewL(KSIZE);
And then you want to store writable descriptor for later use like this:
TPtr8 iWriteDes(NULL,0);
iWriteDes = iHeapDes->Des();
But iWriteDes don’t becomes what you really wanted. Because you make mistake in previous line of code, you haven’t assigned descriptor, you just trieŠ² to copy the data contained in heap descriptor to you writable descriptor. The right code will look like this:
iWriteDes.Set( iHeapDes->Des() );
Now you got correct writable descriptor in iWriteDes.
19 October 2005
How to kill another process by its name
TFullName theName;
TFindProcess process;
while ( process.Next( theName ) != KErrNotFound )
{
if ( ( theName.Find( KPROCNAME ) != KErrNotFound ) )
{
RProcess aProcess;
aProcess.Open( process );
aProcess.Kill(0);
aProcess.Close();
}
}
18 October 2005
Do you know how to convert to AMR using CMMFCodec?
First of all we declare missing declaration from old AmrCodec.h from Series 60 1.0 SDK:
class TAmrEncParams
{
public:
inline TAmrEncParams();
public:
TInt iMode; // encoding mode 0-7 (0=MR475,1=MR515,...,7=MR122,
default 7)
TInt iDTX; // DTX flag (TRUE or default FALSE)
};
TAmrEncParams::TAmrEncParams() :
iMode(7), iDTX(0) {}
And we will also declare UIDs of AMR codecs:
#define KAdvancedUidCodecPCM16ToAMR 0x101FAF68
#define KAdvancedUidCodecAMRToPCM16 0x101FAF67
This is the function that convers PCM data to AMR-NB (note that CMMFPtrBuffer class you can use only on Series 60 2.0 FP2 SDK, on earlier SDKs you have to use CMMFDescriptorBuffer). Size of aDes parameter is supposed to be equal to 320 bytes.
HBufC8* ConvertFromPCMToAMRNBL( const TPtr8& aDes, TInt aMode )
{
TAmrEncParams taepParams;
taepParams.iMode = aMode;
cmmfcCodec = CMMFCodec::NewL(TUid::Uid(KAdvancedUidCodecPCM16ToAMR ));
CleanupStack::PushL( cmmfcCodec );
cmmfcCodec->ConfigureL( TUid::Uid(KAdvancedUidCodecPCM16ToAMR), ( const TDesC8& ) taepParams );
ptrbPCM16 = CMMFPtrBuffer::NewL();
CleanupStack::PushL( ptrbPCM16 );
ptrbPCM16->SetPtr( aDes );
desbAMRNB = CMMFDescriptorBuffer::NewL( 32 );
CleanupStack::PushL( desbAMRNB );
TCodecProcessResult result = cmmfcCodec->ProcessL( * ptrbPCM16, * desbAMRNB );
if ( ( result.iStatus != TCodecProcessResult::EProcessComplete )
( result.iSrcBytesProcessed != ( TUint ) aDes.Length() ) )
return NULL;
CleanupStack::Pop( 2 ); // cmmfcCodec, ptrbPCM16
HBufC8* pAMRData = desbAMRNB->Data().AllocL();
CleanupStack::Pop( 1 ); // desbAMRNB
return pAMRData;
}