williamr@2: // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // e32\include\d32locd.h williamr@2: // williamr@2: // williamr@2: williamr@2: #ifndef __D32LOCD_H__ williamr@2: #define __D32LOCD_H__ williamr@2: #include williamr@2: #include williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedPartner williamr@2: @released williamr@2: williamr@2: Local media IDs. williamr@2: williamr@2: A media ID is passed to LocDrv::RegisterMediaDevice() when registering williamr@2: a media driver with the local media subsystem. williamr@2: */ williamr@2: enum TMediaDevice { EFixedMedia0, EFixedMedia1, EFixedMedia2, EFixedMedia3, williamr@2: EFixedMedia4, EFixedMedia5, EFixedMedia6, EFixedMedia7, williamr@2: ERemovableMedia0, ERemovableMedia1, ERemovableMedia2, ERemovableMedia3, williamr@2: EInvalidMedia williamr@2: }; williamr@2: williamr@2: #define __IS_REMOVABLE(aDevice) (aDevice>=ERemovableMedia0 && aDevice<=ERemovableMedia3) williamr@2: #define __IS_FIXED(aDevice) ((TUint)aDevice<=EFixedMedia7) williamr@2: #define MEDIA_DEVICE_IRAM EFixedMedia0 williamr@2: #define MEDIA_DEVICE_LFFS EFixedMedia1 williamr@2: #define MEDIA_DEVICE_NAND EFixedMedia2 williamr@2: #define MEDIA_DEVICE_MMC ERemovableMedia0 williamr@2: #define MEDIA_DEVICE_PCCARD ERemovableMedia1 williamr@2: #define MEDIA_DEVICE_CSA ERemovableMedia2 williamr@2: williamr@2: typedef signed int TSocket; williamr@2: williamr@2: class TLDriveAssignInfo williamr@2: /** williamr@2: No longer used williamr@2: @internalComponent williamr@2: @removed williamr@2: */ williamr@2: { williamr@2: public: williamr@2: TMediaDevice iDevice; williamr@2: TInt iPriority; williamr@2: }; williamr@2: williamr@2: class TMediaDeviceAssignInfo williamr@2: /** williamr@2: No longer used williamr@2: @internalComponent williamr@2: @removed williamr@2: */ williamr@2: { williamr@2: public: williamr@2: TInt iFirstMedia; williamr@2: TInt iLastMedia; williamr@2: }; williamr@2: williamr@2: class TLocalDriveCaps williamr@2: /** williamr@2: Drives media capabilities fields williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TLocalDriveCaps(); williamr@2: public: williamr@2: /** williamr@2: Size of drive williamr@2: williamr@2: Note : This is the size of the partition, not the entire media. williamr@2: The entire media size can be obtained from TLocalDriveCapsV4::MediaSizeInBytes() williamr@2: */ williamr@2: TInt64 iSize; williamr@2: /** williamr@2: Media Type of drive williamr@2: */ williamr@2: TMediaType iType; williamr@2: /** williamr@2: Indicates state of battery if supported williamr@2: */ williamr@2: TBatteryState iBattery; williamr@2: /** williamr@2: Attributes of the drive williamr@2: */ williamr@2: TUint iDriveAtt; williamr@2: /** williamr@2: Attributes of underlying media williamr@2: */ williamr@2: TUint iMediaAtt; williamr@2: /** williamr@2: Base address of media williamr@2: */ williamr@2: TUint8* iBaseAddress; williamr@2: /** williamr@2: Identity of the file system used for this media williamr@2: */ williamr@2: TUint16 iFileSystemId; williamr@2: /** williamr@2: Partition type of media williamr@2: */ williamr@2: TUint16 iPartitionType; williamr@2: }; williamr@2: typedef TPckgBuf TLocalDriveCapsBuf; williamr@2: // williamr@2: class TLocalDriveCapsV2 : public TLocalDriveCaps williamr@2: /** williamr@2: Extension to Capabilities fields mainly to support Nor flash williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Number of hidden sectors on drive williamr@2: */ williamr@2: TUint iHiddenSectors; williamr@2: /** williamr@2: Size of erase unit on media williamr@2: */ williamr@2: TUint iEraseBlockSize; williamr@2: }; williamr@2: typedef TPckgBuf TLocalDriveCapsV2Buf; williamr@2: // williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: Format specification for removable media williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: class TLDFormatInfo williamr@2: { williamr@2: public: williamr@2: inline TLDFormatInfo(); williamr@2: public: williamr@2: williamr@2: TInt64 iCapacity; ///< Format Capacity williamr@2: TUint16 iSectorsPerCluster; ///< Specified sectors per cluster williamr@2: TUint16 iSectorsPerTrack; ///< Specified sectors per track williamr@2: TUint16 iNumberOfSides; ///< Specified number of sides williamr@2: williamr@2: enum TFATBits {EFBDontCare, EFB12 = 12, EFB16 = 16, EFB32 = 32}; williamr@2: TFATBits iFATBits; ///< Specified bits per fat table entry williamr@2: williamr@2: TUint16 iReservedSectors; ///< Reserved sector count, required for SD card compliance williamr@2: williamr@2: // Flags field. Allows the number of FAT tables to be specified: set both bits to zero to use the default. williamr@2: enum TFlags {EOneFatTable = 0x01, ETwoFatTables = 0x02}; williamr@2: TUint8 iFlags; williamr@2: williamr@2: TUint8 iPad; ///< Padding for offset alignment between kernel and user code williamr@2: williamr@2: }; williamr@2: typedef TPckgBuf TSpecialFormatInfoBuf; williamr@2: williamr@2: williamr@2: // williamr@2: class TLocalDriveCapsV3 : public TLocalDriveCapsV2 williamr@2: /** williamr@2: Extension to Capabilities fields mainly to support removable media format specifications williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Format specification williamr@2: */ williamr@2: TLDFormatInfo iFormatInfo; williamr@2: /** williamr@2: Set if iFormatInfo is valid williamr@2: */ williamr@2: TBool iExtraInfo; williamr@2: /** williamr@2: */ williamr@2: TInt iMaxBytesPerFormat; williamr@2: }; williamr@2: //The following ASSERTs checks for offset of any TInt64 member be a multiple of 8 as per DEF045510 williamr@2: __ASSERT_COMPILE(_FOFF(TLocalDriveCaps,iSize)%8 == 0); williamr@2: __ASSERT_COMPILE(_FOFF(TLocalDriveCapsV3,iFormatInfo.iCapacity) % 8 == 0); williamr@2: williamr@2: williamr@2: typedef TPckgBuf TLocalDriveCapsV3Buf; williamr@2: // williamr@2: class TLocalDriveCapsV4 : public TLocalDriveCapsV3 williamr@2: /** williamr@2: Extension to Capabilities fields mainly to support Nand flash williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: union williamr@2: { williamr@2: /** williamr@2: Number of blocks (for NAND flash) williamr@2: - The entire capacity of NAND media can be calculated using: williamr@2: capacity = iNumOfBlocks * iNumPagesPerBlock * iNumBytesMain williamr@2: */ williamr@2: TInt iNumOfBlocks; williamr@2: /** williamr@2: Number of sectors (for other types of media) williamr@2: - The entire capacity of sector based media can be calculated using: williamr@2: capacity = iNumberOfSectors * iSectorSizeInBytes williamr@2: */ williamr@2: TUint32 iNumberOfSectors; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Number of pages per block williamr@2: */ williamr@2: TInt iNumPagesPerBlock; williamr@2: williamr@2: union williamr@2: { williamr@2: /** williamr@2: Number of Bytes in the main array (for NAND flash) williamr@2: - The entire capacity of NAND media can be calculated using: williamr@2: capacity = iNumOfBlocks * iNumPagesPerBlock * iNumBytesMain williamr@2: */ williamr@2: TInt iNumBytesMain; williamr@2: /** williamr@2: Number of Bytes in a sector (for other types of media) williamr@2: - The entire capacity of sector based media can be calculated using: williamr@2: capacity = iNumberOfSectors * iSectorSizeInBytes williamr@2: */ williamr@2: TUint32 iSectorSizeInBytes; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Number of Bytes in the spare array williamr@2: */ williamr@2: TInt iNumBytesSpare; williamr@2: /** williamr@2: Effective usable blocks williamr@2: */ williamr@2: TInt iEffectiveBlks; williamr@2: /** williamr@2: Start page of drive williamr@2: */ williamr@2: TInt iStartPage; williamr@2: public: williamr@2: inline TInt64 MediaSizeInBytes(); williamr@2: }; williamr@2: typedef TPckgBuf TLocalDriveCapsV4Buf; williamr@2: // williamr@2: #define KMaxSerialNumLength 64 williamr@2: typedef TBuf8 TMediaSerialNumber; williamr@2: class TLocalDriveCapsV5 : public TLocalDriveCapsV4 williamr@2: /** williamr@2: Add serial number support for certain media. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Serial number buffer length, 0 if not supported williamr@2: */ williamr@2: TUint iSerialNumLength; williamr@2: /** williamr@2: Serial number buffer williamr@2: */ williamr@2: TUint8 iSerialNum[KMaxSerialNumLength]; williamr@2: }; williamr@2: typedef TPckgBuf TLocalDriveCapsV5Buf; williamr@2: williamr@2: williamr@2: class TLocalDriveCapsV7 : public TLocalDriveCapsV5 williamr@2: /** williamr@2: Add control mode, object mode, partition size for M18 NOR Flash. williamr@2: */ williamr@2: { williamr@2: public: williamr@2: TUint32 iWriteBufferSize; williamr@2: TUint32 iPartitionSize; williamr@2: TUint32 iControlModeSize; williamr@2: TUint32 iObjectModeSize; williamr@2: }; williamr@2: williamr@2: typedef TPckgBuf TLocalDriveCapsV7Buf; williamr@2: williamr@2: williamr@2: // williamr@2: /** williamr@2: Extension to Capabilities fields mainly to support reporting block size williamr@2: information of underlying media. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: class TLocalDriveCapsV6 : public TLocalDriveCapsV5 williamr@2: { williamr@2: public: williamr@2: /** williamr@2: Block size information of underlying media is required to assist in chosing williamr@2: efficient size of buffers for reading and writing. williamr@2: This information can also be accessed through the function williamr@2: - RFs::VolumeIOParam williamr@2: williamr@2: These functions retrieve this blocksize information by calling the media williamr@2: driver's Caps() function. williamr@2: */ williamr@2: TUint iBlockSize; williamr@2: williamr@2: private: williamr@2: /** williamr@2: Reserved space for future use. williamr@2: */ williamr@2: TUint32 iSpare[4]; williamr@2: }; williamr@2: typedef TPckgBuf TLocalDriveCapsV6Buf; williamr@2: // williamr@2: class TFormatInfo williamr@2: /** williamr@2: Format information class williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TFormatInfo(); williamr@2: public: williamr@2: TBool iFormatIsCurrent; williamr@2: TInt i512ByteSectorsFormatted; williamr@2: TInt iMaxBytesPerFormat; williamr@2: }; williamr@2: // williamr@2: class TErrorInfo williamr@2: /** williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: enum TReasonCode williamr@2: { williamr@2: ENoError=0, //No error williamr@2: EBadSector=1, //Error due to corrupt sector williamr@2: }; williamr@2: public: williamr@2: TReasonCode iReasonCode; williamr@2: union williamr@2: { williamr@2: // holds position error occurred for KErrCorrupt williamr@2: // It numerically equals number of bytes succesfully read/written during williamr@2: // last disk operation. williamr@2: TInt64 iErrorPos; williamr@2: TInt iOtherInfo; williamr@2: }; williamr@2: }; williamr@2: typedef TPckgBuf TErrorInfoBuf; williamr@2: // williamr@2: class TLocalDriveMessageData williamr@2: /** williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: inline TLocalDriveMessageData() williamr@2: {} williamr@2: inline TLocalDriveMessageData(TInt64 aPos, TInt aLength, const TAny* aPtr, TInt aHandle, TInt anOffset, TInt aFlags) williamr@2: : iPos(aPos), iLength(aLength), iPtr(aPtr), iHandle(aHandle), iOffset(anOffset), iFlags(aFlags) williamr@2: {} williamr@2: public: williamr@2: TInt64 iPos; williamr@2: TInt iLength; williamr@2: const TAny* iPtr; williamr@2: TInt iHandle; williamr@2: TInt iOffset; williamr@2: TInt iFlags; williamr@2: }; williamr@2: williamr@2: class TLocalDriveControlIOData williamr@2: /** williamr@2: Control IO data class williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: inline TLocalDriveControlIOData() williamr@2: {} williamr@2: inline TLocalDriveControlIOData(TInt aCommand, TAny* aParam1, TAny* aParam2, TInt aHandle) williamr@2: : iCommand(aCommand), iParam1(aParam1), iParam2(aParam2), iHandle(aHandle) williamr@2: {} williamr@2: public: williamr@2: TInt iCommand; williamr@2: TAny* iParam1; williamr@2: TAny* iParam2; williamr@2: TInt iHandle; williamr@2: }; williamr@2: williamr@2: class TLocalDrivePasswordData williamr@2: /** williamr@2: Password store for password protected media williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: TLocalDrivePasswordData(const TDesC8& aOldPasswd, const TDesC8& aNewPasswd, TBool aStorePasswd) williamr@2: : iOldPasswd(&aOldPasswd), iNewPasswd(&aNewPasswd), iStorePasswd(aStorePasswd) williamr@2: {} williamr@2: TLocalDrivePasswordData() williamr@2: : iOldPasswd(&KNullDesC8), iNewPasswd(&KNullDesC8), iStorePasswd(EFalse) williamr@2: {} williamr@2: public: williamr@2: const TDesC8 *iOldPasswd; williamr@2: const TDesC8 *iNewPasswd; williamr@2: TBool iStorePasswd; williamr@2: }; williamr@2: typedef TPckgBuf TLocalDrivePasswordDataPckg; williamr@2: williamr@2: williamr@2: class TPasswordStore williamr@2: /** williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: virtual TInt Init()=0; williamr@2: virtual TInt ReadPasswordData(TDes8 &aBuf)=0; williamr@2: virtual TInt WritePasswordData(TDesC8 &aBuf)=0; williamr@2: virtual TInt PasswordStoreLengthInBytes()=0; williamr@2: enum {EMaxPasswordLength=1024}; /**< Size of the password store write buffer, which may contain multiple password mappings */ williamr@2: }; williamr@2: williamr@2: class TMountInfoData williamr@2: /** williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: TDesC8* iInfo; williamr@2: TAny* iThread; williamr@2: }; williamr@2: williamr@2: williamr@2: const TInt KLocalDriveMajorVersion=1; williamr@2: const TInt KLocalDriveMinorVersion=0; williamr@2: const TInt KLocalDriveBuildVersion=160; williamr@2: _LIT(KLitLocalDriveLddName,"LocDrv"); williamr@2: williamr@2: const TInt KLocalMessageHandle=-1; williamr@2: williamr@2: williamr@2: enum TMediaPagingStats williamr@2: { williamr@2: EMediaPagingStatsRomAndCode, williamr@2: EMediaPagingStatsRom, williamr@2: EMediaPagingStatsCode williamr@2: }; williamr@2: williamr@2: williamr@2: class RLocalDrive : public RBusLogicalChannel williamr@2: /** williamr@2: Interface class to local media williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: enum TControl williamr@2: { williamr@2: EControlRead=0, /**< Read request */ williamr@2: EControlWrite=1, /**< Write request */ williamr@2: EControlCaps=2, /**< Caps request */ williamr@2: EControlFormat=3, /**< Format request */ williamr@2: EControlEnlarge=4, /**< Enlarge drive request */ williamr@2: EControlReduce=5, /**< Reduce Drive request */ williamr@2: EControlForceMediaChange=6, /**< Force media change request */ williamr@2: EControlMediaDevice=7, /**< Return the media device request */ williamr@2: EControlPasswordLock=8, /**< Password lock media request */ williamr@2: EControlPasswordUnlock=9, /**< Password unlock media request */ williamr@2: EControlPasswordClear=10, /**< Password clear request */ williamr@2: EControlNotifyChange=11, /**< Notify change request */ williamr@2: EControlNotifyChangeCancel=12, /**< Notify change cancel request */ williamr@2: EControlReadPasswordStore=13, /**< Read password request */ williamr@2: EControlWritePasswordStore=14, /**< Write password request */ williamr@2: EControlPasswordStoreLengthInBytes=15, /**< Password request */ williamr@2: EControlIsRemovable=16, /**< Query removable request */ williamr@2: EControlSetMountInfo=17, /**< Set mount info request */ williamr@2: EControlControlIO=18, /**< Control IO request */ williamr@2: EControlPasswordErase=19, /**< Password erase media request */ williamr@2: EControlDeleteNotify=20, /**< Delete notification */ williamr@2: EControlGetLastErrorInfo=21, /**< Get last error info request */ williamr@2: }; williamr@2: williamr@2: enum TRemountFlags williamr@2: { williamr@2: ELocDrvRemountNotifyChange = 0, /**< Notify clients of media change but don't remount */ williamr@2: ELocDrvRemountForceMediaChange = 1, /**< Notify clients of media change and remount */ williamr@2: }; williamr@2: williamr@2: enum TReadWriteFlags williamr@2: { williamr@2: ELocDrvMetaData = 0x80000000, /**< Set if read/write request is for metadata */ williamr@2: ELocDrvWholeMedia = 0x40000000 /**< Set to access whole media, rather than partition */ williamr@2: }; williamr@2: williamr@2: public: williamr@2: inline TVersion VersionRequired() const; williamr@2: inline TInt Connect(TInt aDriveNumber, TBool& aChangedFlag); williamr@2: inline TInt Enlarge(TInt aLength); williamr@2: inline TInt Reduce(TInt aPos, TInt aLength); williamr@2: inline TInt Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aMessageHandle, TInt aOffset, TInt aFlags); williamr@2: inline TInt Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aMessageHandle, TInt anOffset); williamr@2: inline TInt Read(TInt64 aPos, TInt aLength, TDes8& aTrg); williamr@2: inline TInt Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aMessageHandle, TInt aOffset, TInt aFlags); williamr@2: inline TInt Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aMessageHandle, TInt anOffset); williamr@2: inline TInt Write(TInt64 aPos, const TDesC8& aSrc); williamr@2: inline TInt Caps(TDes8& anInfo); williamr@2: inline TInt Format(TInt64 aPos, TInt aLength); williamr@2: inline TInt ForceMediaChange(TInt aMode=0); williamr@2: inline void NotifyChange(TRequestStatus* aStatus); williamr@2: inline void NotifyChangeCancel(); williamr@2: inline TInt SetMountInfo(const TDesC8* aInfo,TInt aMessageHandle); williamr@2: inline TMediaDevice MediaDevice(); williamr@2: inline TInt IsRemovable(TInt& aSocketNum); williamr@2: inline TInt ControlIO(TInt aCommand, TAny* aParam1, TAny* aParam2); williamr@2: inline TInt Unlock(const TDesC8& aPassword, TBool aStorePassword); williamr@2: inline TInt SetPassword(const TDesC8& aOldPassword, const TDesC8& aNewPassword, TBool aStorePassword); williamr@2: inline TInt Clear(const TDesC8& aPassword); williamr@2: inline TInt ErasePassword(); williamr@2: inline TInt ReadPasswordData(TDesC8& aStoreData); williamr@2: inline TInt WritePasswordData(const TDesC8& aStoreData); williamr@2: inline TInt PasswordStoreLengthInBytes(); williamr@2: inline TInt DeleteNotify(TInt64 aPos, TInt aLength); williamr@2: inline TInt GetLastErrorInfo(TDesC8& aErrorInfo); williamr@2: }; williamr@2: // williamr@2: #ifndef __KERNEL_MODE__ williamr@2: class TBusLocalDrive : public RLocalDrive williamr@2: /** williamr@2: @internalTechnology williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TBusLocalDrive(); williamr@2: IMPORT_C TInt Connect(TInt aDriveNumber, TBool& aChangedFlag); williamr@2: IMPORT_C void Disconnect(); williamr@2: IMPORT_C TInt Enlarge(TInt aLength); williamr@2: IMPORT_C TInt ReduceSize(TInt aPos, TInt aLength); williamr@2: IMPORT_C TInt Read(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt aMessageHandle,TInt aOffset,TInt aFlags); williamr@2: IMPORT_C TInt Read(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt aMessageHandle,TInt anOffset); williamr@2: IMPORT_C TInt Read(TInt64 aPos,TInt aLength,TDes8& aTrg); williamr@2: IMPORT_C TInt Write(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt aMessageHandle,TInt aOffset,TInt aFlags); williamr@2: IMPORT_C TInt Write(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt aMessageHandle,TInt anOffset); williamr@2: IMPORT_C TInt Write(TInt64 aPos,const TDesC8& aSrc); williamr@2: IMPORT_C TInt Caps(TDes8& anInfo); williamr@2: IMPORT_C TInt Format(TFormatInfo& anInfo); williamr@2: IMPORT_C TInt Format(TInt64 aPos,TInt aLength); williamr@2: IMPORT_C TInt SetMountInfo(const TDesC8* aMountInfo,TInt aMessageHandle); williamr@2: IMPORT_C TInt ForceRemount(TUint aFlags=0); williamr@2: IMPORT_C TInt ControlIO(TInt aCommand, TAny* aParam1, TAny* aParam2); williamr@2: williamr@2: IMPORT_C TInt Unlock(const TDesC8& aPassword, TBool aStorePassword); williamr@2: IMPORT_C TInt SetPassword(const TDesC8& aOldPassword, const TDesC8& aNewPassword, TBool aStorePassword); williamr@2: IMPORT_C TInt Clear(const TDesC8& aPassword); williamr@2: IMPORT_C TInt ErasePassword(); williamr@2: IMPORT_C TInt ReadPasswordData(TDes8 &aBuf); williamr@2: IMPORT_C TInt WritePasswordData(const TDesC8 &aBuf); williamr@2: IMPORT_C TInt PasswordStoreLengthInBytes(); williamr@2: IMPORT_C TInt DeleteNotify(TInt64 aPos, TInt aLength); williamr@2: IMPORT_C TInt GetLastErrorInfo(TDes8& aErrorInfo); williamr@2: public: williamr@2: inline TInt& Status() {return(iStatus);} williamr@2: private: williamr@2: TInt CheckMount(); williamr@2: private: williamr@2: TInt iStatus; williamr@2: }; williamr@2: #endif williamr@2: williamr@2: #define _LOCKABLE_MEDIA williamr@2: williamr@2: #include williamr@2: #endif